diff --git a/.clang-format b/.clang-format index 60054387527c3cfa59e2dcfa13ebb2ae9a0b184a..cca4fe23c1d1eb12fe71b5d097d7e5ec4146839b 100644 --- a/.clang-format +++ b/.clang-format @@ -16,7 +16,7 @@ AllowShortBlocksOnASingleLine: Never AllowShortCaseLabelsOnASingleLine: false AllowShortFunctionsOnASingleLine: None AllowShortLambdasOnASingleLine: All -AllowShortIfStatementsOnASingleLine: WithoutElse +AllowShortIfStatementsOnASingleLine: false AllowShortLoopsOnASingleLine: false AlwaysBreakAfterDefinitionReturnType: None AlwaysBreakAfterReturnType: None @@ -30,7 +30,7 @@ BraceWrapping: AfterControlStatement: Never AfterEnum: false AfterFunction: true - AfterNamespace: false + AfterNamespace: true AfterObjCDeclaration: false AfterStruct: true AfterUnion: true @@ -42,7 +42,7 @@ BraceWrapping: SplitEmptyRecord: true SplitEmptyNamespace: true BreakBeforeBinaryOperators: None -BreakBeforeBraces: Linux +BreakBeforeBraces: Custom BreakBeforeInheritanceComma: false BreakInheritanceList: BeforeColon BreakBeforeTernaryOperators: true @@ -99,7 +99,7 @@ PenaltyBreakString: 1000 PenaltyBreakTemplateDeclaration: 10 PenaltyExcessCharacter: 1000000 PenaltyReturnTypeOnItsOwnLine: 60 -PointerAlignment: Right +PointerAlignment: Left ReflowComments: true SortIncludes: true SortUsingDeclarations: true @@ -129,5 +129,6 @@ StatementMacros: TabWidth: 4 UseCRLF: false UseTab: Never +SpaceBeforeCpp11BracedList: true ... diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 3202c00addeaf7bf54e354e868175a06bfb94168..a3db425963b69fd26f704ec83019a8551593d651 100755 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,13 +5,9 @@ image: git.rz.tu-bs.de:4567/irmb/virtualfluids/ubuntu22_04:1.1 stages: - build - - build_python - - container_upload - test - - benchmark - analyze - deploy - - release workflow: rules: @@ -137,34 +133,6 @@ gcc_12_python: - export SKBUILD_CMAKE_ARGS="-DBUILD_VF_CPU=ON;-DBUILD_VF_GPU=ON;-DCMAKE_CUDA_ARCHITECTURES=70;-DBUILD_VF_DOUBLE_ACCURACY=ON;-DCMAKE_CXX_COMPILER_LAUNCHER=ccache;-DCMAKE_CUDA_COMPILER_LAUNCHER=ccache;-DCMAKE_C_COMPILER_LAUNCHER=ccache;-G=Ninja" - pip install . -v -############################################################################### -## Container Upload ## -############################################################################### -build_poiseuille_test_container: - image: - name: quay.io/singularity/singularity:v3.10.2 - entrypoint: [""] - - stage: container_upload - - rules: - - if: $REMOTE_USER && $REMOTE_HOST && $PRIVATE_KEY && $CI_PIPELINE_SOURCE == "schedule" - when: always - - when: manual - allow_failure: true - - tags: - - linux - - privileged - - artifacts: - expire_in: 1 hrs - paths: - - Containers/PoiseuilleTestContainer.sif - - script: - - singularity build "Containers/PoiseuilleTestContainer.sif" "Python/SlurmTests/poiseuille/PoiseuilleTestContainer.def" - ############################################################################### ## Tests ## ############################################################################### @@ -209,25 +177,6 @@ gcc_12_python_bindings_test: script: - python3 -m unittest discover -s Python -v -############################################################################### -gcc_12_python_hpc_test: - image: python:latest - stage: test - - needs: ["build_poiseuille_test_container"] - - rules: - - if: $REMOTE_USER && $REMOTE_HOST && $PRIVATE_KEY && $CI_PIPELINE_SOURCE == "schedule" - when: always - - when: manual - allow_failure: true - - before_script: - - pip install hpc-rocket - - script: - - hpc-rocket launch --watch Python/SlurmTests/poiseuille/rocket.yml - ############################################################################### build-regression-tests-ci: image: python:3.10 @@ -336,11 +285,10 @@ regression_test_8gpu: paths: - output/8GPU/slurm8GPU.out expire_in: 1 week + ############################################################################### -## Benchmark ## -############################################################################### -nvidia_test: - stage: benchmark +nvidia_env_test: + stage: test image: nvidia/cuda:12.1.1-devel-ubuntu22.04 @@ -356,7 +304,7 @@ nvidia_test: ############################################################################### gpu_numerical_tests: - stage: benchmark + stage: test rules: - if: $CI_PIPELINE_SOURCE == "schedule" @@ -399,6 +347,24 @@ gpu_numerical_tests: paths: - $CI_PROJECT_DIR/numerical_tests_gpu_results.txt +############################################################################### +trigger-hpc-regression-tests: + stage: test + + needs: [] + + rules: + - when: manual + allow_failure: true + + trigger: + include: + - local: regression-tests/hpc-test/.gitlab-ci-hpc-test.yml + + variables: + PARENT_PIPELINE_ID: $CI_PIPELINE_ID + + ############################################################################### ## Code analysis ## ############################################################################### @@ -601,10 +567,14 @@ sanitizer-memory: - make -j8 - ctest --output-on-failure + + +############################################################################### +## Deploy ## ############################################################################### # doxgen pages: - stage: analyze + stage: deploy image: alpine @@ -623,68 +593,8 @@ pages: paths: - public - -############################################################################### -## Deploy ## -############################################################################### -.deploy_template: - stage: deploy - - before_script: - - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )' - - apt-get install -y rsync - - mkdir -p ~/.ssh - - chmod 700 ~/.ssh - - eval $(ssh-agent -s) - - echo "$SSH_KEY" | tr -d '\r' | ssh-add - - - echo $SSH_KEY >> ansible/private_key - - ssh-keyscan -t rsa $HOST >> ~/.ssh/known_hosts - - pip3 install ansible - - variables: - SSH_KEY: "" - HOST: "" - -############################################################################### -vf_to_phoenix: - extends: .deploy_template - stage: deploy - needs: ["gcc_12_python", "gcc_12_unit_tests", "gcc_12_python_bindings_test"] - - when: manual - - variables: - SSH_KEY: "$SSH_PRIVATE_KEY" - HOST: "phoenix.hlr.rz.tu-bs.de" - - script: - - ansible-playbook -i ansible/hosts.cfg -u $REMOTE_USER ansible/playbook_vf_deploy.yml - - parallel: - matrix: - - ANSIBLE_MATRIX: 0 - REMOTE_USER: - - y0054816 - ############################################################################### -vf_wheel_to_jupyterhub: - extends: .deploy_template - stage: deploy - - only: ["manual"] - - needs: ["gcc_12_python", "gcc_12_unit_tests", "gcc_12_python_bindings_test"] - variables: - HOST: "gitlab-runner01.irmb.bau.tu-bs.de" - SSH_KEY: "$SSH_PRIVATE_KEY" - REMOTE_USER: "runner" - jupyter_host: "runner" - - script: - - ansible-playbook -i ansible/hosts.cfg -u $REMOTE_USER ansible/playbook_jupyter_update.yml - -############################################################################### # sonar-scanner runs sonar-project.properties # the reports in this file need to match the artifacts. # This job only runs on the development branch of the parent repository, not on forks! diff --git a/AUTHORS.md b/AUTHORS.md index 554a5f1614a41f8bf7528e24b13d0a8569cb210d..3e3990c7f747474b87974fbfada5e8bb6d1d4b05 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -5,13 +5,15 @@ VF has been developed essentially over the last fifteen years by various researc Damilola Adekanye, M.Sc. Dr. Benjamin Ahrenholz Dr. Hussein Alihussein +Dr. Henrik Asmuth Dr. Sebastian Bindick Aileen Brendel, B.Sc. -J.Prof. Dr. Martin Geier +Prof. Dr. Martin Geier Dr. Sebastian Geller Dr. Ehsan Goraki Fard Dr. Jan Hegewald Dr. Christian Janßen +Henry Korb, M.Sc. Prof. Dr.-Ing. habil. Manfred Krafczyk Dr. Konstantin Kutscher Dr. Stephan Lenz diff --git a/CMake/3rd.cmake b/CMake/3rd.cmake deleted file mode 100644 index 781146111d48739671b35c98bb96ebff358809b4..0000000000000000000000000000000000000000 --- a/CMake/3rd.cmake +++ /dev/null @@ -1,2 +0,0 @@ -include(${VF_CMAKE_DIR}/3rd/boost.cmake) -include(${VF_CMAKE_DIR}/3rd/gmock.cmake) diff --git a/CMake/3rd/gmock.cmake b/CMake/3rd/gmock.cmake deleted file mode 100644 index 712b99ca2271f1d3891114ff613a569a00fe03c4..0000000000000000000000000000000000000000 --- a/CMake/3rd/gmock.cmake +++ /dev/null @@ -1,17 +0,0 @@ -################################################################################# -# Links gmock to the current target. -# Note: gmock has to be build by the project itself (Located in 3rd). -################################################################################# - -function (linkGMOCK) - vf_get_library_test_name(library_name) - target_link_libraries(${library_name} PRIVATE GTest::gmock_main) - - if(BUILD_SHARED_LIBS) - # add compile option according to - # https://github.com/google/googletest/blob/master/googletest/README.md#as-a-shared-library-dll - set_target_properties(${library_name} - PROPERTIES - COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") - endif() -endfunction() \ No newline at end of file diff --git a/CMake/VirtualFluidsMacros.cmake b/CMake/VirtualFluidsMacros.cmake index 2bf2a979e6bbed32fc229e99739c79b601b007f2..cb9d2d8d7839a301aba09291cbcc78ede1c2adf4 100644 --- a/CMake/VirtualFluidsMacros.cmake +++ b/CMake/VirtualFluidsMacros.cmake @@ -20,7 +20,7 @@ endfunction() ################################################################################# include(${VF_CMAKE_DIR}/CMakeSetCompilerFlags.cmake) include(${VF_CMAKE_DIR}/FileUtilities.cmake) -include(${VF_CMAKE_DIR}/3rd.cmake) +include(${VF_CMAKE_DIR}/3rd/boost.cmake) include(${VF_CMAKE_DIR}/Sanitizers.cmake) ############################################################################################################### @@ -274,8 +274,19 @@ function(vf_add_tests) return() endif() - # get the test library name - vf_get_library_test_name(library_test_name) + set( options ) + set( oneValueArgs NAME) + set( multiValueArgs) + cmake_parse_arguments( ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) + + if(DEFINED ARG_NAME) + set(library_test_name "${ARG_NAME}Tests") + set(library_name "${ARG_NAME}") + else() + vf_get_library_test_name(library_test_name) + vf_get_library_name (library_name) + endif() + vf_get_library_name (folder_name) status("Configuring test executable: ${library_test_name}") @@ -297,7 +308,7 @@ function(vf_add_tests) PDB_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin") # link tested library - target_link_libraries(${library_test_name} PRIVATE ${folder_name}) + target_link_libraries(${library_test_name} PRIVATE ${library_name}) # link tested library target_include_directories(${library_test_name} PRIVATE ${CMAKE_BINARY_DIR}) @@ -308,7 +319,15 @@ function(vf_add_tests) addAdditionalFlags(${library_test_name}) # link googlemock - linkGMOCK() + target_link_libraries(${library_test_name} PRIVATE GTest::gmock_main) + + if(BUILD_SHARED_LIBS) + # add compile option according to + # https://github.com/google/googletest/blob/master/googletest/README.md#as-a-shared-library-dll + set_target_properties(${library_test_name} + PROPERTIES + COMPILE_DEFINITIONS "GTEST_LINKED_AS_SHARED_LIBRARY=1") + endif() # add the target to ctest gtest_add_tests(TARGET ${library_test_name}) diff --git a/CMakeLists.txt b/CMakeLists.txt index 34edea623975db57b6b3a23b0a1b49721367d67b..ec5f5dbedbdb2f6b7d38fc39b6b864f3e33559e2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ ################################################################################# -# _ ___ __ __________ _ __ +# _ ___ __ __________ _ __ # | | / (_)____/ /___ ______ _/ / ____/ /_ __(_)___/ /____ # | | / / / ___/ __/ / / / __ `/ / /_ / / / / / / __ / ___/ # | |/ / / / / /_/ /_/ / /_/ / / __/ / / /_/ / / /_/ (__ ) diff --git a/apps/cpu/ConcreteExtrusion/CMakeLists.txt b/apps/cpu/ConcreteExtrusion/CMakeLists.txt index c56d8430b841bda1c538244243c866bdb4b299c1..9d9cc157c8bdd2ed6412979cd7fb32d37fc3e3e2 100644 --- a/apps/cpu/ConcreteExtrusion/CMakeLists.txt +++ b/apps/cpu/ConcreteExtrusion/CMakeLists.txt @@ -3,4 +3,4 @@ ######################################################## PROJECT(ConcreteExtrusion) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES ConcreteExtrusion.cpp ) \ No newline at end of file +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES ConcreteExtrusion.cpp ) \ No newline at end of file diff --git a/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cpp b/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cpp index 1f84848cfe434c3b658af44404938974d8506032..a03fb87dd16b58c6f6bba1dbecbf1aaf03de57a1 100644 --- a/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cpp +++ b/apps/cpu/ConcreteExtrusion/ConcreteExtrusion.cpp @@ -251,7 +251,7 @@ void run(string configname) grid->setPeriodicX3(true); grid->setGhostLayerWidth(2); - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::RECURSIVE)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE)); ////////////////////////////////////////////////////////////////////////// // restart diff --git a/apps/cpu/ConvectionOfVortex/CMakeLists.txt b/apps/cpu/ConvectionOfVortex/CMakeLists.txt index 33d60676c7e0dfdde411c3c5b92a2534ea54fbfe..451ec8592414ed53083861ab216e24f8d9887ab7 100644 --- a/apps/cpu/ConvectionOfVortex/CMakeLists.txt +++ b/apps/cpu/ConvectionOfVortex/CMakeLists.txt @@ -3,6 +3,6 @@ ######################################################## PROJECT(ConvectionOfVortex) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} FILES cov.cpp ) +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} FILES cov.cpp ) diff --git a/apps/cpu/ConvectionOfVortex/cov.cpp b/apps/cpu/ConvectionOfVortex/cov.cpp index fef2c10a0017b0f943e478fc65118f3e8ad754e6..6aebd99477dd8d3d098c097a82e38d7b6b266190 100644 --- a/apps/cpu/ConvectionOfVortex/cov.cpp +++ b/apps/cpu/ConvectionOfVortex/cov.cpp @@ -151,7 +151,7 @@ void run() if (myid==0) GbSystem3D::writeGeoObject(geoOutflow4.get(), pathname+"/geo/geoOutflow4", WbWriterVtkXmlASCII::getInstance()); SPtr<D3Q27Interactor> outflowIntr4 = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow4, grid, outflowBC, Interactor3D::SOLID)); - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_00M)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, d00M)); InteractorsHelper intHelper(grid, metisVisitor); //intHelper.addInteractor(outflowIntr1); //intHelper.addInteractor(outflowIntr2); diff --git a/apps/cpu/CouetteFlow/CMakeLists.txt b/apps/cpu/CouetteFlow/CMakeLists.txt index 9f28e30c5aeb0722fb9d0b9b13a135ecae0f9799..3a2b634002b82edeeaa785a371ee9a2f153f0ea5 100644 --- a/apps/cpu/CouetteFlow/CMakeLists.txt +++ b/apps/cpu/CouetteFlow/CMakeLists.txt @@ -3,4 +3,4 @@ ######################################################## PROJECT(CouetteFlow) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES cflow.cpp ) \ No newline at end of file +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES cflow.cpp ) \ No newline at end of file diff --git a/apps/cpu/CouetteFlow/cflow.cpp b/apps/cpu/CouetteFlow/cflow.cpp index 0eb2bf413ae37e48596b059b2292eb758993c6be..d2c1d5b4775857e1c502b713b692c6bf8264f783 100644 --- a/apps/cpu/CouetteFlow/cflow.cpp +++ b/apps/cpu/CouetteFlow/cflow.cpp @@ -186,7 +186,7 @@ void bflow(string configname) //////////////////////////////////////////// //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::KWAY)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY)); //////////////////////////////////////////// /////delete solid blocks if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); diff --git a/apps/cpu/DLR-F16-Porous/f16.cpp b/apps/cpu/DLR-F16-Porous/f16.cpp index 08bafaf3df6cdb3c32a3592ea950bd3bc2c42474..1263e7752ce9d6d6f5dacbfd12a09a5b258506ed 100644 --- a/apps/cpu/DLR-F16-Porous/f16.cpp +++ b/apps/cpu/DLR-F16-Porous/f16.cpp @@ -33,8 +33,8 @@ void initPteBlock(SPtr<Grid3D> grid, SPtr<Block3D> block) for (int ix1=0; ix1<bcArray->getNX1(); ix1++) { D3Q27System::calcCompFeq(f, 0, 0, 0, 0); - distributions->setDistribution(f, ix1, ix2, ix3); - distributions->setDistributionInv(f, ix1, ix2, ix3); + distributions->setPostCollisionDistribution(f, ix1, ix2, ix3); + distributions->setPreCollisionDistribution(f, ix1, ix2, ix3); } block->setActive(true); } diff --git a/apps/cpu/FallingSphere/CMakeLists.txt b/apps/cpu/FallingSphere/CMakeLists.txt index 94eab3ae0601daaaf1dbe9053ec163058b88186b..6166198643b30304eb1a943d9454cad1a0b8a12d 100644 --- a/apps/cpu/FallingSphere/CMakeLists.txt +++ b/apps/cpu/FallingSphere/CMakeLists.txt @@ -1,3 +1,3 @@ PROJECT(FallingSphere) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling FILES FallingSphere.cpp ) +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling FILES FallingSphere.cpp ) diff --git a/apps/cpu/FallingSphere/FallingSphere.cpp b/apps/cpu/FallingSphere/FallingSphere.cpp index f41524a5f6f5b163c6eaefeb386b9a76b892d196..7dfaedc9d93bffe1c159683152705b30f6f7c39a 100644 --- a/apps/cpu/FallingSphere/FallingSphere.cpp +++ b/apps/cpu/FallingSphere/FallingSphere.cpp @@ -59,7 +59,7 @@ int main(int argc, char *argv[]) UbSystem::makeDirectory(outputPath); UbSystem::makeDirectory(outputPath + "/liggghts"); - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::DIR_MMM, MetisPartitioner::RECURSIVE)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE)); SPtr<GbObject3D> gridCube = make_shared <GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3); if (myid == 0) diff --git a/apps/cpu/FlowAroundCylinder/CMakeLists.txt b/apps/cpu/FlowAroundCylinder/CMakeLists.txt index 7bd09c7189fdf892e76816f8fba4ba95bf3f0867..0fcac4f761ea1ec3d57ee367853a91ba199f03f2 100644 --- a/apps/cpu/FlowAroundCylinder/CMakeLists.txt +++ b/apps/cpu/FlowAroundCylinder/CMakeLists.txt @@ -3,4 +3,4 @@ ######################################################## PROJECT(cylinder) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} FILES cylinder.cpp ) +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} FILES cylinder.cpp ) diff --git a/apps/cpu/FlowAroundCylinder/cylinder.cpp b/apps/cpu/FlowAroundCylinder/cylinder.cpp index 59a42d8e609f2a0a0b5c6e6ff0a4496223d97477..a203e78dc9e91c44e3e172d1b16021d544a0c23a 100644 --- a/apps/cpu/FlowAroundCylinder/cylinder.cpp +++ b/apps/cpu/FlowAroundCylinder/cylinder.cpp @@ -1,6 +1,7 @@ #include <iostream> #include <string> +#include "K17CompressibleNavierStokes.h" #include "VirtualFluids.h" using namespace std; @@ -202,7 +203,7 @@ void run(string configname) SPtr<D3Q27Interactor> outflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, denBC, Interactor3D::SOLID)); - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_00M)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, d00M)); InteractorsHelper intHelper(grid, metisVisitor); intHelper.addInteractor(cylinderInt); intHelper.addInteractor(addWallYminInt); @@ -242,7 +243,7 @@ void run(string configname) UBLOG(logINFO, "Available memory per process = "<<availMem<<" bytes"); } - SPtr<LBMKernel> kernel(new CompressibleCumulantLBMKernel()); + SPtr<LBMKernel> kernel(new K17CompressibleNavierStokes()); SPtr<BCSet> bcProc(new BCSet()); kernel->setBCSet(bcProc); diff --git a/apps/cpu/HerschelBulkleyModel/CMakeLists.txt b/apps/cpu/HerschelBulkleyModel/CMakeLists.txt index 537402905309fe65441d9b5fbe2d48523c55947f..d2499fb70e451de1c40c841135607aa1a6799e93 100644 --- a/apps/cpu/HerschelBulkleyModel/CMakeLists.txt +++ b/apps/cpu/HerschelBulkleyModel/CMakeLists.txt @@ -3,4 +3,4 @@ ######################################################## PROJECT(HerschelBulkleyModel) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES hbflow.cpp ) \ No newline at end of file +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES hbflow.cpp ) \ No newline at end of file diff --git a/apps/cpu/HerschelBulkleyModel/hbflow.cpp b/apps/cpu/HerschelBulkleyModel/hbflow.cpp index 67ed5404eebc1eeffe1e385ff42dc806c1588301..5e4e193c1b038d6d8ceec670f45381c0e2a8f32b 100644 --- a/apps/cpu/HerschelBulkleyModel/hbflow.cpp +++ b/apps/cpu/HerschelBulkleyModel/hbflow.cpp @@ -233,7 +233,7 @@ void bflow(string configname) //////////////////////////////////////////// //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::RECURSIVE)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE)); //////////////////////////////////////////// /////delete solid blocks if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); diff --git a/apps/cpu/HerschelBulkleySphere/CMakeLists.txt b/apps/cpu/HerschelBulkleySphere/CMakeLists.txt index 69fe09a4f0eb5b11ecf15f3bd609c9afbf79cae6..87ecc61f0ce915be47d16b15133d155411067877 100644 --- a/apps/cpu/HerschelBulkleySphere/CMakeLists.txt +++ b/apps/cpu/HerschelBulkleySphere/CMakeLists.txt @@ -3,4 +3,4 @@ ######################################################## PROJECT(HerschelBulkleySphere) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES hbsphere.cpp ) \ No newline at end of file +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES hbsphere.cpp ) \ No newline at end of file diff --git a/apps/cpu/HerschelBulkleySphere/hbsphere.cpp b/apps/cpu/HerschelBulkleySphere/hbsphere.cpp index 9d8346b87195bd3fbf8c810e8d6671bdd88df853..2f97097a16b90960c01cbe7761326146d0c93b67 100644 --- a/apps/cpu/HerschelBulkleySphere/hbsphere.cpp +++ b/apps/cpu/HerschelBulkleySphere/hbsphere.cpp @@ -160,7 +160,7 @@ void bflow(string configname) //////////////////////////////////////////// //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::KWAY)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY)); //////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //restart @@ -242,7 +242,7 @@ void bflow(string configname) //////////////////////////////////////////// //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::KWAY)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY)); //////////////////////////////////////////// /////delete solid blocks if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); diff --git a/apps/cpu/JetBreakup/CMakeLists.txt b/apps/cpu/JetBreakup/CMakeLists.txt index 162e9c959fc27171e3f0d7e1df5e62eb6ff7ef87..9a21c8044d53cedaec4a27a37b420b687bd21132 100644 --- a/apps/cpu/JetBreakup/CMakeLists.txt +++ b/apps/cpu/JetBreakup/CMakeLists.txt @@ -3,4 +3,4 @@ ######################################################## PROJECT(JetBreakup) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES JetBreakup.cpp ) \ No newline at end of file +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES JetBreakup.cpp ) \ No newline at end of file diff --git a/apps/cpu/JetBreakup/JetBreakup.cpp b/apps/cpu/JetBreakup/JetBreakup.cpp index 88cb53182f69a3f8843cbb2a599220acf63c2dbb..5d729a47d9830e1748cee009d163e6e047009a24 100644 --- a/apps/cpu/JetBreakup/JetBreakup.cpp +++ b/apps/cpu/JetBreakup/JetBreakup.cpp @@ -272,7 +272,7 @@ void run(string configname) // grid->setPeriodicX3(true); grid->setGhostLayerWidth(2); - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::RECURSIVE)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE)); ////////////////////////////////////////////////////////////////////////// // restart diff --git a/apps/cpu/LaminarTubeFlow/CMakeLists.txt b/apps/cpu/LaminarTubeFlow/CMakeLists.txt index 32e8d2fd9231e40002e972f370a19ebec27d995b..508e3cc0399f6e332f542fe52454f0e81e21c0d1 100644 --- a/apps/cpu/LaminarTubeFlow/CMakeLists.txt +++ b/apps/cpu/LaminarTubeFlow/CMakeLists.txt @@ -1,7 +1,7 @@ PROJECT(ltf) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore muparser basics ${MPI_CXX_LIBRARIES} FILES ltf.cpp ) +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core muparser basics ${MPI_CXX_LIBRARIES} FILES ltf.cpp ) vf_get_library_name (library_name) target_include_directories(${library_name} PRIVATE ${APPS_ROOT_CPU}) \ No newline at end of file diff --git a/apps/cpu/LaminarTubeFlow/ltf.cpp b/apps/cpu/LaminarTubeFlow/ltf.cpp index ec103d763da8e99a2bf9c4b90d99534d5ba9ff4d..918bf77532d6c189d20344ff774a7e6200468c46 100644 --- a/apps/cpu/LaminarTubeFlow/ltf.cpp +++ b/apps/cpu/LaminarTubeFlow/ltf.cpp @@ -107,7 +107,7 @@ void run(string configname) kernel->setBCSet(bcProc); ////////////////////////////////////////////////////////////////////////// - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_00M)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, d00M)); //restart SPtr<UbScheduler> mSch(new UbScheduler(cpStep, cpStart)); //SPtr<MPIIOMigrationSimulationObserver> migSimulationObserver(new MPIIOMigrationSimulationObserver(grid, mSch, metisVisitor, pathname + "/mig", comm)); diff --git a/apps/cpu/LidDrivenCavity/CMakeLists.txt b/apps/cpu/LidDrivenCavity/CMakeLists.txt index 2afa5ee83ada573e3e31a89a33386d593a5bc261..f878aa04d6b5d14dca518d1c638467f6495d7d64 100644 --- a/apps/cpu/LidDrivenCavity/CMakeLists.txt +++ b/apps/cpu/LidDrivenCavity/CMakeLists.txt @@ -1,4 +1,4 @@ PROJECT(LidDrivenCavity) -vf_add_library(NAME LidDrivenCavityCPU BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore FILES LidDrivenCavity.cpp) +vf_add_library(NAME LidDrivenCavityCPU BUILDTYPE binary PRIVATE_LINK cpu_core FILES LidDrivenCavity.cpp) diff --git a/apps/cpu/LiggghtsApp/CMakeLists.txt b/apps/cpu/LiggghtsApp/CMakeLists.txt index f3a2d925f1d082c8f2e9e52e31d8179fe82c9235..f7b099fc25f800781aff631d098d4dd4dfe48359 100644 --- a/apps/cpu/LiggghtsApp/CMakeLists.txt +++ b/apps/cpu/LiggghtsApp/CMakeLists.txt @@ -1,3 +1,3 @@ PROJECT(LiggghtsApp) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling FILES LiggghtsApp.cpp ) +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling FILES LiggghtsApp.cpp ) diff --git a/apps/cpu/LiggghtsApp/LiggghtsApp.cpp b/apps/cpu/LiggghtsApp/LiggghtsApp.cpp index 5b3f27d2ef7f64fc692750d8480dafea4a69a030..825d63ea14f8bded7331990e9ffa428ae4c0b258 100644 --- a/apps/cpu/LiggghtsApp/LiggghtsApp.cpp +++ b/apps/cpu/LiggghtsApp/LiggghtsApp.cpp @@ -75,7 +75,7 @@ int main(int argc, char *argv[]) UbSystem::makeDirectory(outputPath); UbSystem::makeDirectory(outputPath + "/liggghts"); - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::DIR_MMM, MetisPartitioner::RECURSIVE)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE)); SPtr<GbObject3D> gridCube = make_shared <GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3); if (myid == 0) diff --git a/apps/cpu/Multiphase/CMakeLists.txt b/apps/cpu/Multiphase/CMakeLists.txt index 0c7e43dcaf2185360c49ee78b86f34840b06b4df..2ce781c801fd0cac3770783919682b85ec511ad5 100644 --- a/apps/cpu/Multiphase/CMakeLists.txt +++ b/apps/cpu/Multiphase/CMakeLists.txt @@ -1,3 +1,3 @@ PROJECT(Multiphase) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} MultiphaseFlow FILES Multiphase.cpp ) +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow FILES Multiphase.cpp ) diff --git a/apps/cpu/Multiphase/Multiphase.cpp b/apps/cpu/Multiphase/Multiphase.cpp index 576c9288334dc7ef8e0c79774480c65e30b32faf..6fd8fafdde86aac11b8fe7bcee8106fa1412fd8f 100644 --- a/apps/cpu/Multiphase/Multiphase.cpp +++ b/apps/cpu/Multiphase/Multiphase.cpp @@ -125,7 +125,7 @@ void run(string configname) grid->setGhostLayerWidth(2); - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::RECURSIVE)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE)); ////////////////////////////////////////////////////////////////////////// // restart diff --git a/apps/cpu/MultiphaseDropletTest/CMakeLists.txt b/apps/cpu/MultiphaseDropletTest/CMakeLists.txt index e21c6ccad6b9bbc87e1cf8971d3f6d344b466501..e4f881190873e27a688b624803bc25ccc8fb4b9b 100644 --- a/apps/cpu/MultiphaseDropletTest/CMakeLists.txt +++ b/apps/cpu/MultiphaseDropletTest/CMakeLists.txt @@ -1,3 +1,3 @@ PROJECT(MultiphaseDropletTest) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES droplet.cpp ) +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES droplet.cpp ) diff --git a/apps/cpu/MultiphaseDropletTest/droplet.cpp b/apps/cpu/MultiphaseDropletTest/droplet.cpp index cc3f1625d35f79b53eb0b525f6414a26277414e7..46ef1b4e7c38b7b6dd17c9da88657b474abbcd76 100644 --- a/apps/cpu/MultiphaseDropletTest/droplet.cpp +++ b/apps/cpu/MultiphaseDropletTest/droplet.cpp @@ -203,7 +203,7 @@ void run(string configname) grid->setPeriodicX3(true); grid->setGhostLayerWidth(2); - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::RECURSIVE)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE)); ////////////////////////////////////////////////////////////////////////// // restart diff --git a/apps/cpu/Nozzle/CMakeLists.txt b/apps/cpu/Nozzle/CMakeLists.txt index 9764934d46b39abca2ceda133e3434a78980f294..f72fcd0af885fc6577872fc92ce6d3b263ac2ab3 100644 --- a/apps/cpu/Nozzle/CMakeLists.txt +++ b/apps/cpu/Nozzle/CMakeLists.txt @@ -1,3 +1,3 @@ PROJECT(Nozzle) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling MultiphaseFlow NonNewtonianFluids FILES nozzleSinglePhase.cpp ) +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling MultiphaseFlow NonNewtonianFluids FILES nozzleSinglePhase.cpp ) diff --git a/apps/cpu/Nozzle/nozzle.cpp.1 b/apps/cpu/Nozzle/nozzle.cpp.1 index 57bac14e13ce30981e2572d5570e869eab1f253f..ff3374e6ec0e2b53dd2d888b8998619d34f3eae8 100644 --- a/apps/cpu/Nozzle/nozzle.cpp.1 +++ b/apps/cpu/Nozzle/nozzle.cpp.1 @@ -532,7 +532,7 @@ int main(int argc, char *argv[]) ///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::DIR_MMM, MetisPartitioner::RECURSIVE)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE)); SPtr<GbObject3D> gridCube = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3); if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); diff --git a/apps/cpu/Nozzle/nozzleSinglePhase.cpp b/apps/cpu/Nozzle/nozzleSinglePhase.cpp index fe70ce94516a60ed17b559b3b8470b77341f7aaa..90a84c35dbbfee39fa186ce68c98452a6f4a6cf5 100644 --- a/apps/cpu/Nozzle/nozzleSinglePhase.cpp +++ b/apps/cpu/Nozzle/nozzleSinglePhase.cpp @@ -547,7 +547,7 @@ int main(int argc, char *argv[]) ///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::DIR_MMM, MetisPartitioner::RECURSIVE)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE)); SPtr<GbObject3D> gridCube = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3); if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); diff --git a/apps/cpu/NozzleMultiphase/CMakeLists.txt b/apps/cpu/NozzleMultiphase/CMakeLists.txt index f92a4267e94c3899565812181fa0fd6af45fc1ca..e5ecf02f2be1a3c12a904e42ae55ddb54c991f92 100644 --- a/apps/cpu/NozzleMultiphase/CMakeLists.txt +++ b/apps/cpu/NozzleMultiphase/CMakeLists.txt @@ -1,3 +1,3 @@ PROJECT(NozzleMultiphase) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling MultiphaseFlow NonNewtonianFluids FILES nozzleMultiPhase.cpp ) +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} LiggghtsCoupling MultiphaseFlow NonNewtonianFluids FILES nozzleMultiPhase.cpp ) diff --git a/apps/cpu/NozzleMultiphase/nozzleMultiPhase.cpp b/apps/cpu/NozzleMultiphase/nozzleMultiPhase.cpp index ced2724ee6e8dddd3102428696a8647fee322326..1f0d3d0354dbfbe89c63167abe897073a9c9e5cd 100644 --- a/apps/cpu/NozzleMultiphase/nozzleMultiPhase.cpp +++ b/apps/cpu/NozzleMultiphase/nozzleMultiPhase.cpp @@ -550,7 +550,7 @@ int main(int argc, char *argv[]) ///////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////// - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::DIR_MMM, MetisPartitioner::RECURSIVE)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::RECURSIVE)); SPtr<GbObject3D> gridCube = make_shared<GbCuboid3D>(g_minX1, g_minX2, g_minX3, g_maxX1, g_maxX2, g_maxX3); if (myid == 0) GbSystem3D::writeGeoObject(gridCube.get(), outputPath + "/geo/gridCube", WbWriterVtkXmlBinary::getInstance()); diff --git a/apps/cpu/PoiseuilleFlow/CMakeLists.txt b/apps/cpu/PoiseuilleFlow/CMakeLists.txt index 1959719d81013762d37f655b342f755135c9ef85..f4fa1ace87a734e7e1826551f2097ec7d9858a5e 100644 --- a/apps/cpu/PoiseuilleFlow/CMakeLists.txt +++ b/apps/cpu/PoiseuilleFlow/CMakeLists.txt @@ -1,6 +1,6 @@ PROJECT(pf) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore muparser basics ${MPI_CXX_LIBRARIES} FILES pf.cpp pf1.cpp ) +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core muparser basics ${MPI_CXX_LIBRARIES} FILES pf.cpp pf1.cpp ) vf_get_library_name (library_name) target_include_directories(${library_name} PRIVATE ${APPS_ROOT_CPU}) \ No newline at end of file diff --git a/apps/cpu/PoiseuilleFlow/pf1.cpp b/apps/cpu/PoiseuilleFlow/pf1.cpp index 34b249bd98f3051c8de12ac55731874006f73a94..78446e9810e738fc4f15bc160d64461d80940393 100644 --- a/apps/cpu/PoiseuilleFlow/pf1.cpp +++ b/apps/cpu/PoiseuilleFlow/pf1.cpp @@ -77,7 +77,7 @@ void pf1() //set boundary conditions for blocks and create process decomposition for MPI SPtr<D3Q27Interactor> cylinderInt(new D3Q27Interactor(cylinder, grid, noSlipBC, Interactor3D::INVERSESOLID)); - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_00M)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, d00M)); InteractorsHelper intHelper(grid, metisVisitor); intHelper.addInteractor(cylinderInt); intHelper.selectBlocks(); diff --git a/apps/cpu/RisingBubble2D/CMakeLists.txt b/apps/cpu/RisingBubble2D/CMakeLists.txt index 3f8f3e56cd7ab41979f72121a405b93c862dcce2..eb41f408e66218645e32a36daf910160d26954e1 100644 --- a/apps/cpu/RisingBubble2D/CMakeLists.txt +++ b/apps/cpu/RisingBubble2D/CMakeLists.txt @@ -1,3 +1,3 @@ PROJECT(RisingBubble2D) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES RisingBubble2D.cpp ) +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES RisingBubble2D.cpp ) diff --git a/apps/cpu/RisingBubble2D/RisingBubble2D.cpp b/apps/cpu/RisingBubble2D/RisingBubble2D.cpp index 148506af2ca936b3d01c60bca1f97455348538cd..e40a0804ffa18217e1c065d60893346127767391 100644 --- a/apps/cpu/RisingBubble2D/RisingBubble2D.cpp +++ b/apps/cpu/RisingBubble2D/RisingBubble2D.cpp @@ -191,7 +191,7 @@ void run(string configname) grid->setPeriodicX3(true); grid->setGhostLayerWidth(2); - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::RECURSIVE)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE)); ////////////////////////////////////////////////////////////////////////// // restart diff --git a/apps/cpu/ShotcreteJet/CMakeLists.txt b/apps/cpu/ShotcreteJet/CMakeLists.txt index 6c82d37e10ac965dff939740f28b2200b0aec239..cd2efcfc9e15fa4f1744ba92bafd4dbfd2520847 100644 --- a/apps/cpu/ShotcreteJet/CMakeLists.txt +++ b/apps/cpu/ShotcreteJet/CMakeLists.txt @@ -1,3 +1,3 @@ PROJECT(ShotcreteJet) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES jet.cpp ) +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} MultiphaseFlow NonNewtonianFluids FILES jet.cpp ) diff --git a/apps/cpu/ShotcreteJet/jet.cpp b/apps/cpu/ShotcreteJet/jet.cpp index dd9cd54758a56f872bdefb4df934e8d89b2f6afb..e15163c899c165358a6aef556a75c18a4a60f33f 100644 --- a/apps/cpu/ShotcreteJet/jet.cpp +++ b/apps/cpu/ShotcreteJet/jet.cpp @@ -605,7 +605,7 @@ int main(int argc, char *argv[]) // ///////////////////////////////////////////////////////////////////// // ///////////////////////////////////////////////////////////////////// - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::DIR_MMM, MetisPartitioner::KWAY)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, vf::lbm::dir::dMMM, MetisPartitioner::KWAY)); ////////////////////////////////////////////////////////////////////////// // restart diff --git a/apps/cpu/TPMSRow/CMakeLists.txt b/apps/cpu/TPMSRow/CMakeLists.txt index 6ea54915ed2eb339e0e6e71c9d40c638120e58fa..f8c696c38152e73deb74a057360f9640ffc58983 100644 --- a/apps/cpu/TPMSRow/CMakeLists.txt +++ b/apps/cpu/TPMSRow/CMakeLists.txt @@ -1,6 +1,6 @@ PROJECT(TPMSRow) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore muparser basics ${MPI_CXX_LIBRARIES} FILES TPMSRow.cpp ) +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core muparser basics ${MPI_CXX_LIBRARIES} FILES TPMSRow.cpp ) vf_get_library_name (library_name) #target_include_dires(${library_name} PRIVATE ${APPS_ROOT_CPU}) diff --git a/apps/cpu/TPMSRow/TPMSRow.cpp b/apps/cpu/TPMSRow/TPMSRow.cpp index 09be56c68ed6cc0db2d911b19a21feae2c890d80..c4d41489740ca9717cfeb11d9eff591123d27aa4 100644 --- a/apps/cpu/TPMSRow/TPMSRow.cpp +++ b/apps/cpu/TPMSRow/TPMSRow.cpp @@ -405,7 +405,7 @@ void run(string configname) intHelper.setBC(); - SpongeLayerBlockVisitor spongeLayerVisitor(spongecube, kernel, nu, DIR_P00); + SpongeLayerBlockVisitor spongeLayerVisitor(spongecube, kernel, nu, dP00); grid->accept(spongeLayerVisitor); grid->accept(bcVisitor); diff --git a/apps/cpu/ViskomatXL/CMakeLists.txt b/apps/cpu/ViskomatXL/CMakeLists.txt index 6dcfeabc73259c72138c2c4ac84c017c6e96463a..17b147d92b5f09e5379bb9f8594b217388bebab0 100644 --- a/apps/cpu/ViskomatXL/CMakeLists.txt +++ b/apps/cpu/ViskomatXL/CMakeLists.txt @@ -3,4 +3,4 @@ ######################################################## PROJECT(viskomat) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES viskomat.cpp ) \ No newline at end of file +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES viskomat.cpp ) \ No newline at end of file diff --git a/apps/cpu/ViskomatXL/viskomat.cpp b/apps/cpu/ViskomatXL/viskomat.cpp index 95b1d524cc24401bd4c9620de70d20583ca1bc0c..e02b8ff511925fcc15684864c06bb5dd3a3ffed7 100644 --- a/apps/cpu/ViskomatXL/viskomat.cpp +++ b/apps/cpu/ViskomatXL/viskomat.cpp @@ -190,7 +190,7 @@ void bflow(string configname) //////////////////////////////////////////// //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::RECURSIVE)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::RECURSIVE)); //////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //restart diff --git a/apps/cpu/pChannel/CMakeLists.txt b/apps/cpu/pChannel/CMakeLists.txt index 336ac6c018044246d9c6c2f26f6009cc1e19e485..8af2de6d0580e0ca5cc9a10591474ec378e2145a 100644 --- a/apps/cpu/pChannel/CMakeLists.txt +++ b/apps/cpu/pChannel/CMakeLists.txt @@ -2,4 +2,4 @@ PROJECT(PChannel) INCLUDE(${APPS_ROOT}/IncludsList.cmake) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore VirtualFluidsBasic FILES pChannel.cpp) +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core VirtualFluidsBasic FILES pChannel.cpp) diff --git a/apps/cpu/plate/sonjas_org.cpp.vf b/apps/cpu/plate/sonjas_org.cpp.vf index 1c634bfed5cfd76fc74f4c3abfb11a61b179fe1b..58b0d27a6219ba6fc1b2b54e14068e06b8ba4865 100644 --- a/apps/cpu/plate/sonjas_org.cpp.vf +++ b/apps/cpu/plate/sonjas_org.cpp.vf @@ -1,6 +1,6 @@ -..damit wir gleich damit anfangen können. So sieht das Setup aus. +..damit wir gleich damit anfangen k�nnen. So sieht das Setup aus. Sonja @@ -9,7 +9,6 @@ SpD3Q19Plattenanstroemung.hpp #include <topology/amr3d/blockadaptation/AMR3DCrossAndInsideGbObject3DAdapter.h> //AMR3DCrossAndInsideGbObject3DAdapter #include <topology/amr3d/lbmd3q19/utils/D3Q19MetisTools.h> -//#include <topology/amr3d/lbmd3q19/turbulenceWale/gridadaptation/TwD3Q19SpongeLayerAdapter.h> #include <topology/amr3d/lbmd3q19/gridadaptation/D3Q19GridInformationGridAdapter.h> #include <topology/amr3d/lbmd3q19/gridadaptation/D3Q19SetConnectorsGridAdapter.h> #include <topology/amr3d/lbmd3q19/gridadaptation/D3Q19InitDistributionsGridAdapter.h> @@ -99,9 +98,9 @@ void SpD3Q19MasterTestcases::start( RcfClient<IRcfIpService>& ipService, params.collModel = D3Q19System::INCOMPGLBEJTLESMODEL; ///////////////Knotenabmessungen: //int KnotenCubeCoarse=40; - params.nx[0] = 120;//60;//86;//43;//65;//50; //länge + params.nx[0] = 120;//60;//86;//43;//65;//50; //l�nge params.nx[1] = 6;///1;//5;// //breite - params.nx[2] = 32;//18;//5;//15;//15; //höhe gebiet + params.nx[2] = 32;//18;//5;//15;//15; //h�he gebiet params.blocknx[0] = 10; params.blocknx[1] = 10; params.blocknx[2] = 10; @@ -113,9 +112,9 @@ void SpD3Q19MasterTestcases::start( RcfClient<IRcfIpService>& ipService, int bottomLevel = 1; ///////////////Weltabmessungen: - double kanalhoeheSI = 60.0/100.0;//60.0/100.0;//cm, Kanalhöhe + double kanalhoeheSI = 60.0/100.0;//60.0/100.0;//cm, Kanalh�he double kanalbreiteSI = 9.9/100.0;//1.65/100.0;//13.2/100.0;////40.0/100.0; //cm, Kanalbreite //13.2 zeilbreite - double kanallaengeSI = kanalhoeheSI*30.0/18.0;//80.0/100.0;//cm, Kanallänge, ist nicht angegeben + double kanallaengeSI = kanalhoeheSI*30.0/18.0;//80.0/100.0;//cm, Kanall�nge, ist nicht angegeben // double refinewidth1=kanalhoeheSI/10.0; @@ -381,7 +380,7 @@ void SpD3Q19MasterTestcases::start( RcfClient<IRcfIpService>& ipService, topoService.adaptGridByBlockCriterion(refineAdapterP6); UBLOG2(logINFO, std::cout, "Refinement..done"); - //blockverhältnis von 2:1 herstellen: + //blockverh�ltnis von 2:1 herstellen: UBLOG(logINFO,"ratio") boost::shared_ptr<AMR3DBlockAdaptationCriterion> ratioAdapter(new AMR3DBlockRatioAdapter(params.refineLevel)); topoService.adaptGridByBlockCriterion(ratioAdapter); @@ -554,7 +553,7 @@ void SpD3Q19MasterTestcases::start( RcfClient<IRcfIpService>& ipService, , params.blocknx[1] , params.blocknx[2] ) , params.connsTransAttr.useConsForNotActiveBlocks() - , D3Q19MetisAdapterTools::getD3Q19GetBlockWeightFunctor(false) ) ); ///////hier false auf keine gewichtung - default:doppelte gewichtung für fine + , D3Q19MetisAdapterTools::getD3Q19GetBlockWeightFunctor(false) ) ); ///////hier false auf keine gewichtung - default:doppelte gewichtung f�r fine // boost::shared_ptr<AMR3DGridAdaptationCriterion> partioningAdapter(new AMR3DGridPartitionOneDirectionAdapter((int)calcServices.size()) ); // UBLOG2(logINFO,"params.connsTransAttr.useConsForNotActiveBlocks():" ); //UBLOG2(logINFO,params.connsTransAttr.useConsForNotActiveBlocks() ); diff --git a/apps/cpu/poiseuille_example/CMakeLists.txt b/apps/cpu/poiseuille_example/CMakeLists.txt index 14782a6459a0b8689f7f81dd69055a2a43f9ecb7..9500d497a50866553a4bd2cdb3e74a19a00ef8fd 100644 --- a/apps/cpu/poiseuille_example/CMakeLists.txt +++ b/apps/cpu/poiseuille_example/CMakeLists.txt @@ -1,7 +1,7 @@ PROJECT(poiseuille_example) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore muparser basics ${MPI_CXX_LIBRARIES} FILES poiseuille.cpp ) +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core muparser basics ${MPI_CXX_LIBRARIES} FILES poiseuille.cpp ) vf_get_library_name (library_name) target_include_directories(${library_name} PRIVATE ${APPS_ROOT_CPU}) \ No newline at end of file diff --git a/apps/cpu/rheometer/CMakeLists.txt b/apps/cpu/rheometer/CMakeLists.txt index 58177bdd14a1c55985818bd70e336072c62f6dc5..b095887e02ca0ca6a4a63189b431147da78ba3c5 100644 --- a/apps/cpu/rheometer/CMakeLists.txt +++ b/apps/cpu/rheometer/CMakeLists.txt @@ -3,4 +3,4 @@ ######################################################## PROJECT(rheometer) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES rheometer.cpp ) \ No newline at end of file +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} NonNewtonianFluids FILES rheometer.cpp ) \ No newline at end of file diff --git a/apps/cpu/rheometer/rheometer.cpp b/apps/cpu/rheometer/rheometer.cpp index cf8e30ec142e31165fcbdc6ecadbceac6f50b367..a7528b8c32c770b0e569e56af58ba6ebb35f96a5 100644 --- a/apps/cpu/rheometer/rheometer.cpp +++ b/apps/cpu/rheometer/rheometer.cpp @@ -222,7 +222,7 @@ void bflow(string configname) //////////////////////////////////////////// //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::KWAY)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY)); //////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// //restart @@ -312,7 +312,7 @@ void bflow(string configname) //////////////////////////////////////////// //METIS - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_MMM, MetisPartitioner::KWAY)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, dMMM, MetisPartitioner::KWAY)); //////////////////////////////////////////// /////delete solid blocks if (myid == 0) UBLOG(logINFO, "deleteSolidBlocks - start"); diff --git a/apps/cpu/sphere/CMakeLists.txt b/apps/cpu/sphere/CMakeLists.txt index 8346e80d26800582c37090b208e846737e087d5d..be839b6cd6e1f0a67637beb10e6a67b690f7db40 100644 --- a/apps/cpu/sphere/CMakeLists.txt +++ b/apps/cpu/sphere/CMakeLists.txt @@ -3,4 +3,4 @@ ######################################################## PROJECT(sphere LANGUAGES CXX) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluidsCore basics ${MPI_CXX_LIBRARIES} FILES sphere.cpp ) \ No newline at end of file +vf_add_library(BUILDTYPE binary PRIVATE_LINK cpu_core basics ${MPI_CXX_LIBRARIES} FILES sphere.cpp ) \ No newline at end of file diff --git a/apps/cpu/sphere/sphere.cpp b/apps/cpu/sphere/sphere.cpp index 89e3888083f4a8bc96325daabdd393aeb14a0200..5925fe093245c510e17a33a393dd15a0ed5141c3 100644 --- a/apps/cpu/sphere/sphere.cpp +++ b/apps/cpu/sphere/sphere.cpp @@ -178,7 +178,7 @@ void run(string configname) //outflow SPtr<D3Q27Interactor> outflowInt = SPtr<D3Q27Interactor>(new D3Q27Interactor(geoOutflow, grid, denBC, Interactor3D::SOLID)); - SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, DIR_00M)); + SPtr<Grid3DVisitor> metisVisitor(new MetisPartitioningGridVisitor(comm, MetisPartitioningGridVisitor::LevelBased, d00M)); InteractorsHelper intHelper(grid, metisVisitor); intHelper.addInteractor(sphereInt); intHelper.addInteractor(addWallYminInt); diff --git a/apps/gpu/ActuatorLine/ActuatorLine.cpp b/apps/gpu/ActuatorLine/ActuatorLine.cpp index 4598244a12c3abf7f9211c242877a198f7799922..8262a33892a53df438db90ae0b6447beff1f1775 100644 --- a/apps/gpu/ActuatorLine/ActuatorLine.cpp +++ b/apps/gpu/ActuatorLine/ActuatorLine.cpp @@ -65,21 +65,21 @@ ////////////////////////////////////////////////////////////////////////// -#include "VirtualFluids_GPU/LBM/Simulation.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" -#include "VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h" -#include "VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.h" -#include "VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.h" -#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" -#include "VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.h" -#include "VirtualFluids_GPU/Factories/GridScalingFactory.h" -#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h" - -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" +#include "gpu/core/LBM/Simulation.h" +#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h" +#include "gpu/core/Parameter/Parameter.h" +#include "gpu/core/Output/FileWriter.h" +#include "gpu/core/PreCollisionInteractor/ActuatorFarm.h" +#include "gpu/core/PreCollisionInteractor/Probes/PointProbe.h" +#include "gpu/core/PreCollisionInteractor/Probes/PlaneProbe.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" +#include "gpu/core/TurbulenceModels/TurbulenceModelFactory.h" +#include "gpu/core/Factories/GridScalingFactory.h" +#include "gpu/core/Kernel/KernelTypes.h" + +#include "gpu/core/GPU/CudaMemoryManager.h" //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -178,7 +178,7 @@ void multipleLevel(const std::string& configPath) para->setViscosityLB(viscosityLB); para->setVelocityRatio( dx / dt ); para->setViscosityRatio( dx*dx/dt ); - para->configureMainKernel(vf::CollisionKernel::Compressible::K17CompressibleNavierStokes); + para->configureMainKernel(vf::collisionKernel::compressible::K17CompressibleNavierStokes); para->setInitialCondition([&](real coordX, real coordY, real coordZ, real &rho, real &vx, real &vy, real &vz) { rho = (real)0.0; diff --git a/apps/gpu/ActuatorLine/CMakeLists.txt b/apps/gpu/ActuatorLine/CMakeLists.txt index c437ac81a0e23fadd925ca81af596f81ff59f820..52f225ae4f592131e5e6e3684464b175bf3b3b12 100644 --- a/apps/gpu/ActuatorLine/CMakeLists.txt +++ b/apps/gpu/ActuatorLine/CMakeLists.txt @@ -1,6 +1,6 @@ PROJECT(ActuatorLine LANGUAGES CUDA CXX) -vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES ActuatorLine.cpp) +vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES ActuatorLine.cpp) set_source_files_properties(ActuatorLine.cpp PROPERTIES LANGUAGE CUDA) diff --git a/apps/gpu/ActuatorLine/configActuatorLine.txt b/apps/gpu/ActuatorLine/configActuatorLine.txt index 5799f24716777295b2f835ab00561ff767ba87b9..fbba0b89c689957831ce6ce7625da1441d8909a6 100644 --- a/apps/gpu/ActuatorLine/configActuatorLine.txt +++ b/apps/gpu/ActuatorLine/configActuatorLine.txt @@ -24,11 +24,11 @@ tStartOutProbe=100 tOutProbe=100 ################################################## -#TurbulenceModel = QR -#SGSconstant = 0.3333333 -# -#QuadricLimiterP = 100000.0 -#QuadricLimiterM = 100000.0 -#QuadricLimiterD = 100000.0 +TurbulenceModel = QR +SGSconstant = 0.3333333 + +QuadricLimiterP = 10000.0 +QuadricLimiterM = 10000.0 +QuadricLimiterD = 10000.0 ################################################## diff --git a/apps/gpu/ActuatorLineRegression/ActuatorLineRegression.cpp b/apps/gpu/ActuatorLineRegression/ActuatorLineRegression.cpp new file mode 100644 index 0000000000000000000000000000000000000000..bff963de58e048982ec2878235d87b12894f8c20 --- /dev/null +++ b/apps/gpu/ActuatorLineRegression/ActuatorLineRegression.cpp @@ -0,0 +1,290 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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/>. +// +//! \file ActuatorLine.cpp +//! \ingroup ActuatorLine +//! \author Henry Korb, Henrik Asmuth +//======================================================================================= +#define _USE_MATH_DEFINES +#include <cmath> +#include <exception> +#include <fstream> +#include <iostream> +#include <memory> +#include <sstream> +#include <stdexcept> +#include <string> + +////////////////////////////////////////////////////////////////////////// + +#include <basics/DataTypes.h> +#include <basics/PointerDefinitions.h> +#include <basics/StringUtilities/StringUtil.h> +#include <basics/config/ConfigurationFile.h> + +#include <logger/Logger.h> + +#include <parallel/MPICommunicator.h> + +////////////////////////////////////////////////////////////////////////// + +#include "GridGenerator/grid/GridBuilder/LevelGridBuilder.h" +#include "GridGenerator/grid/GridBuilder/MultipleGridBuilder.h" +#include "GridGenerator/grid/BoundaryConditions/Side.h" +#include "GridGenerator/grid/BoundaryConditions/BoundaryCondition.h" + +#include "GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h" +#include "GridGenerator/io/GridVTKWriter/GridVTKWriter.h" +#include "GridGenerator/TransientBCSetter/TransientBCSetter.h" + + +////////////////////////////////////////////////////////////////////////// + +#include "gpu/core/LBM/Simulation.h" +#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h" +#include "gpu/core/Parameter/Parameter.h" +#include "gpu/core/Output/FileWriter.h" +#include "gpu/core/PreCollisionInteractor/ActuatorFarm.h" +#include "gpu/core/PreCollisionInteractor/Probes/PointProbe.h" +#include "gpu/core/PreCollisionInteractor/Probes/PlaneProbe.h" +#include "gpu/core/PreCollisionInteractor/Probes/Probe.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" +#include "gpu/core/TurbulenceModels/TurbulenceModelFactory.h" +#include "gpu/core/Factories/GridScalingFactory.h" +#include "gpu/core/Kernel/KernelTypes.h" + +#include "gpu/core/GPU/CudaMemoryManager.h" + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// +// Actuator Line app for regression tests +// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +std::string path("."); + +std::string simulationName("ActuatorLine"); + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +void multipleLevel(const std::string& configPath) +{ + vf::parallel::Communicator &communicator = *vf::parallel::MPICommunicator::getInstance(); + + vf::basics::ConfigurationFile config; + config.load(configPath); + + const real reference_diameter = config.getValue<real>("ReferenceDiameter"); + const uint nodes_per_diameter = config.getValue<uint>("NodesPerDiameter"); + const real velocity = config.getValue<real>("Velocity"); + + const real L_x = 10 * reference_diameter; + const real L_y = 4 * reference_diameter; + const real L_z = 4 * reference_diameter; + + const real viscosity = 1.56e-5; + + const real mach = 0.1; + + + const float tStartOut = config.getValue<real>("tStartOut"); + const float tOut = config.getValue<real>("tOut"); + const float tEnd = config.getValue<real>("tEnd"); // total time of simulation + + const float tStartAveraging = config.getValue<real>("tStartAveraging"); + const float tStartTmpAveraging = config.getValue<real>("tStartTmpAveraging"); + const float tAveraging = config.getValue<real>("tAveraging"); + const float tStartOutProbe = config.getValue<real>("tStartOutProbe"); + const float tOutProbe = config.getValue<real>("tOutProbe"); + + SPtr<Parameter> para = std::make_shared<Parameter>(communicator.getNumberOfProcesses(), communicator.getProcessID(), &config); + BoundaryConditionFactory bcFactory = BoundaryConditionFactory(); + GridScalingFactory scalingFactory = GridScalingFactory(); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + const real dx = reference_diameter/real(nodes_per_diameter); + + real turbPos[3] = {3.0f * reference_diameter, 0.0, 0.0}; + + auto gridBuilder = std::make_shared<MultipleGridBuilder>(); + + gridBuilder->addCoarseGrid(0.0, -0.5*L_y, -0.5*L_z, + L_x, 0.5*L_y, 0.5*L_z, dx); + + gridBuilder->setPeriodicBoundaryCondition(false, false, false); + + gridBuilder->buildGrids(false); // buildGrids() has to be called before setting the BCs!!!! + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + const real dt = dx * mach / (sqrt(3) * velocity); + + const real velocityLB = velocity * dt / dx; // LB units + + const real viscosityLB = viscosity * dt / (dx * dx); // LB units + + VF_LOG_INFO("dx = {}m", dx); + VF_LOG_INFO("velocity [dx/dt] = {}", velocityLB); + VF_LOG_INFO("viscosity [10^8 dx^2/dt] = {}", viscosityLB*1e8); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + para->setDevices(std::vector<uint>{(uint)0}); + + para->setOutputPrefix( simulationName ); + + para->setPrintFiles(true); + + para->setVelocityLB(velocityLB); + para->setViscosityLB(viscosityLB); + para->setVelocityRatio( dx / dt ); + para->setViscosityRatio( dx*dx/dt ); + para->configureMainKernel(vf::collisionKernel::compressible::K17CompressibleNavierStokes); + + para->setInitialCondition([&](real coordX, real coordY, real coordZ, real &rho, real &vx, real &vy, real &vz) { + rho = (real)0.0; + vx = velocityLB; + vy = (real)0.0; + vz = (real)0.0; + }); + + para->setTimestepStartOut( uint(tStartOut/dt) ); + para->setTimestepOut( uint(tOut/dt) ); + para->setTimestepEnd( uint(tEnd/dt) ); + + para->setIsBodyForce( true ); + para->setUseStreams( true ); + + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + gridBuilder->setVelocityBoundaryCondition(SideType::MX, velocityLB, 0.0, 0.0); + gridBuilder->setVelocityBoundaryCondition(SideType::MY, velocityLB, 0.0, 0.0); + gridBuilder->setVelocityBoundaryCondition(SideType::PY, velocityLB, 0.0, 0.0); + gridBuilder->setVelocityBoundaryCondition(SideType::MZ, velocityLB, 0.0, 0.0); + gridBuilder->setVelocityBoundaryCondition(SideType::PZ, velocityLB, 0.0, 0.0); + gridBuilder->setPressureBoundaryCondition(SideType::PX, 0.0); + + bcFactory.setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC::VelocityAndPressureCompressible); + bcFactory.setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC::OutflowNonReflective); + + SPtr<TurbulenceModelFactory> tmFactory = std::make_shared<TurbulenceModelFactory>(para); + tmFactory->readConfigFile(config); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + int level = 0; // grid level at which the turbine samples velocities and distributes forces + const real smearing_width = dx*exp2(-level)*2; // width of gaussian smearing + VF_LOG_INFO("smearing_width = {}m", smearing_width); + const real density = 1.225f; + const uint nBlades = 3; + const uint nBladeNodes = 32; + const real tipspeed_ratio = 7.5f; // tipspeed ratio = angular vel * radius / inflow vel + const real rotor_speed = 2*tipspeed_ratio*velocity/reference_diameter; + + + SPtr<ActuatorFarm> actuator_farm = std::make_shared<ActuatorFarm>(nBlades, density, nBladeNodes, smearing_width, level, dt, dx, true); + std::vector<real> bladeRadii; + real dr = reference_diameter/(nBladeNodes*2); + for(uint node=0; node<nBladeNodes; node++){ bladeRadii.emplace_back(dr*(node+1)); } + actuator_farm->addTurbine(turbPos[0], turbPos[1], turbPos[2], reference_diameter, rotor_speed, 0, 0, bladeRadii); + para->addActuator( actuator_farm ); + + std::vector<real> planePositions = {-1*reference_diameter, 1*reference_diameter, 3*reference_diameter}; + + for(int i=0; i < planePositions.size(); i++) + { + SPtr<PlaneProbe> planeProbe = std::make_shared<PlaneProbe>("planeProbe_" + std::to_string(i), para->getOutputPath(), tStartTmpAveraging/dt, tAveraging/dt, tStartOutProbe/dt, tOutProbe/dt); + planeProbe->setProbePlane(turbPos[0]+planePositions[i], -0.5 * L_y, -0.5 * L_z, dx, L_y, L_z); + planeProbe->addStatistic(Statistic::Means); + planeProbe->addStatistic(Statistic::Variances); + planeProbe->addStatistic(Statistic::Instantaneous); + para->addProbe( planeProbe ); + } + SPtr<PlaneProbe> planeProbeVert = std::make_shared<PlaneProbe>("planeProbeVertical", para->getOutputPath(), tStartTmpAveraging/dt, tAveraging/dt, tStartOutProbe/dt, tOutProbe/dt); + planeProbeVert->setProbePlane(0, turbPos[1], -0.5 * L_z, L_x, dx, L_z); + planeProbeVert->addStatistic(Statistic::Means); + planeProbeVert->addStatistic(Statistic::Variances); + planeProbeVert->addStatistic(Statistic::Instantaneous); + para->addProbe( planeProbeVert ); + + SPtr<PlaneProbe> planeProbeHorz = std::make_shared<PlaneProbe>("planeProbeHorizontal", para->getOutputPath(), tStartTmpAveraging/dt, tAveraging/dt, tStartOutProbe/dt, tOutProbe/dt); + planeProbeHorz->setProbePlane(0, -0.5 * L_y, turbPos[2], L_x, L_y, dx); + planeProbeHorz->addStatistic(Statistic::Means); + planeProbeHorz->addStatistic(Statistic::Variances); + planeProbeHorz->addStatistic(Statistic::Instantaneous); + para->addProbe( planeProbeHorz ); + + + auto cudaMemoryManager = std::make_shared<CudaMemoryManager>(para); + + auto gridGenerator = GridProvider::makeGridGenerator(gridBuilder, para, cudaMemoryManager, communicator); + + Simulation sim(para, cudaMemoryManager, communicator, *gridGenerator, &bcFactory, tmFactory, &scalingFactory); + sim.run(); +} + +int main( int argc, char* argv[]) +{ + if ( argv != NULL ) + { + try + { + vf::logging::Logger::initializeLogger(); + + if( argc > 1){ path = argv[1]; } + + multipleLevel(path + "/apps/gpu/ActuatorLineRegression/configActuatorLine.txt"); + } + catch (const spdlog::spdlog_ex &ex) { + std::cout << "Log initialization failed: " << ex.what() << std::endl; + } + + catch (const std::bad_alloc& e) + { + VF_LOG_CRITICAL("Bad Alloc: {}", e.what()); + } + catch (const std::exception& e) + { + VF_LOG_CRITICAL("exception: {}", e.what()); + } + catch (...) + { + VF_LOG_CRITICAL("Unknown exception!"); + } + } + return 0; +} diff --git a/apps/gpu/ActuatorLineRegression/CMakeLists.txt b/apps/gpu/ActuatorLineRegression/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..d22ef9c7263899a83ccecaffdbc7c59ffea20d4a --- /dev/null +++ b/apps/gpu/ActuatorLineRegression/CMakeLists.txt @@ -0,0 +1,7 @@ +PROJECT(ActuatorLineRegression LANGUAGES CUDA CXX) + +vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES ActuatorLineRegression.cpp) + +set_source_files_properties(ActuatorLineRegression.cpp PROPERTIES LANGUAGE CUDA) + +set_target_properties(ActuatorLineRegression PROPERTIES CUDA_SEPARABLE_COMPILATION ON) diff --git a/apps/gpu/ActuatorLineRegression/configActuatorLine.txt b/apps/gpu/ActuatorLineRegression/configActuatorLine.txt new file mode 100644 index 0000000000000000000000000000000000000000..06080d82f97ce44abfa56fcf7711b0280e8ceefa --- /dev/null +++ b/apps/gpu/ActuatorLineRegression/configActuatorLine.txt @@ -0,0 +1,35 @@ +################################################## +#informations for Writing +################################################## +Path = ./output/ActuatorLine/ +################################################## +#informations for reading +################################################## +GridPath=. +################################################## +ReferenceDiameter = 126 +NodesPerDiameter = 24 +Velocity = 9 + +################################################## +tStartOut=1000000 +tOut=100 +tEnd=402 + +################################################## +tStartTmpAveraging=100 +tStartAveraging=100 +tAveraging=100 +tTmpAveraging=100 +tStartOutProbe=100 +tOutProbe=100 + +################################################## +TurbulenceModel = QR +SGSconstant = 0.3333333 + +QuadricLimiterP = 1.0 +QuadricLimiterM = 1.0 +QuadricLimiterD = 1.0 +################################################## + diff --git a/apps/gpu/Basel/CMakeLists.txt b/apps/gpu/Basel/CMakeLists.txt index 6ef6241b52aa9b5dc73a19b82f2b9fd5248c77c5..2d05f78bd85244eee12b8b65c9df157ff175b1e5 100644 --- a/apps/gpu/Basel/CMakeLists.txt +++ b/apps/gpu/Basel/CMakeLists.txt @@ -1,8 +1,8 @@ setTargetNameToFolderName(${CMAKE_CURRENT_LIST_DIR}) set(linkDirectories "") -set(libsToLink VirtualFluids_GPU GridGenerator) -set(includeDirectories "${CMAKE_SOURCE_DIR}/src" "${CMAKE_SOURCE_DIR}/src/VirtualFluids_GPU" "${CMAKE_SOURCE_DIR}/src/GridGenerator" "${CMAKE_SOURCE_DIR}/src/VirtualFluidsBasics") +set(libsToLink gpu_core GridGenerator) +set(includeDirectories "${CMAKE_SOURCE_DIR}/src" "${CMAKE_SOURCE_DIR}/src/gpu_core" "${CMAKE_SOURCE_DIR}/src/GridGenerator" "${CMAKE_SOURCE_DIR}/src/VirtualFluidsBasics") #glob files and save in MY_SRCS include(CMakePackage.cmake) diff --git a/apps/gpu/Basel/main.cpp b/apps/gpu/Basel/main.cpp index 16161dc6a83846f2730c5920dfd64363b6e77b30..59708add1acd865b55bb3ca8d1f1e2e2e3032dac 100644 --- a/apps/gpu/Basel/main.cpp +++ b/apps/gpu/Basel/main.cpp @@ -18,15 +18,15 @@ #include "StringUtilities/StringUtil.h" #include "Input/ConfigFileReader/ConfigFileReader.h" -#include "VirtualFluids_GPU/LBM/Simulation.h" -#include "VirtualFluids_GPU/Communication/MpiCommunicator.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" -#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" +#include "gpu/core/LBM/Simulation.h" +#include "gpu/core/Communication/MpiCommunicator.h" +#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h" +#include "gpu/core/Parameter/Parameter.h" +#include "gpu/core/Output/FileWriter.h" +#include "gpu/core/GPU/CudaMemoryManager.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" #include "global.h" diff --git a/apps/gpu/BaselMultiGPU/CMakeLists.txt b/apps/gpu/BaselMultiGPU/CMakeLists.txt index 6ef6241b52aa9b5dc73a19b82f2b9fd5248c77c5..2d05f78bd85244eee12b8b65c9df157ff175b1e5 100644 --- a/apps/gpu/BaselMultiGPU/CMakeLists.txt +++ b/apps/gpu/BaselMultiGPU/CMakeLists.txt @@ -1,8 +1,8 @@ setTargetNameToFolderName(${CMAKE_CURRENT_LIST_DIR}) set(linkDirectories "") -set(libsToLink VirtualFluids_GPU GridGenerator) -set(includeDirectories "${CMAKE_SOURCE_DIR}/src" "${CMAKE_SOURCE_DIR}/src/VirtualFluids_GPU" "${CMAKE_SOURCE_DIR}/src/GridGenerator" "${CMAKE_SOURCE_DIR}/src/VirtualFluidsBasics") +set(libsToLink gpu_core GridGenerator) +set(includeDirectories "${CMAKE_SOURCE_DIR}/src" "${CMAKE_SOURCE_DIR}/src/gpu_core" "${CMAKE_SOURCE_DIR}/src/GridGenerator" "${CMAKE_SOURCE_DIR}/src/VirtualFluidsBasics") #glob files and save in MY_SRCS include(CMakePackage.cmake) diff --git a/apps/gpu/BaselMultiGPU/main.cpp b/apps/gpu/BaselMultiGPU/main.cpp index 346ab7ca36ccd147d1f8427974ce2510b5d637fb..794d9c1ee5ef502997a1bc82709cdca277e8b61b 100644 --- a/apps/gpu/BaselMultiGPU/main.cpp +++ b/apps/gpu/BaselMultiGPU/main.cpp @@ -18,15 +18,15 @@ #include "StringUtilities/StringUtil.h" #include "Input/ConfigFileReader/ConfigFileReader.h" -#include "VirtualFluids_GPU/LBM/Simulation.h" -#include "VirtualFluids_GPU/Communication/MpiCommunicator.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" -#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" +#include "gpu/core/LBM/Simulation.h" +#include "gpu/core/Communication/MpiCommunicator.h" +#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h" +#include "gpu/core/Parameter/Parameter.h" +#include "gpu/core/Output/FileWriter.h" +#include "gpu/core/GPU/CudaMemoryManager.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" #include "global.h" diff --git a/apps/gpu/BaselNU/CMakeLists.txt b/apps/gpu/BaselNU/CMakeLists.txt index 6ef6241b52aa9b5dc73a19b82f2b9fd5248c77c5..2d05f78bd85244eee12b8b65c9df157ff175b1e5 100644 --- a/apps/gpu/BaselNU/CMakeLists.txt +++ b/apps/gpu/BaselNU/CMakeLists.txt @@ -1,8 +1,8 @@ setTargetNameToFolderName(${CMAKE_CURRENT_LIST_DIR}) set(linkDirectories "") -set(libsToLink VirtualFluids_GPU GridGenerator) -set(includeDirectories "${CMAKE_SOURCE_DIR}/src" "${CMAKE_SOURCE_DIR}/src/VirtualFluids_GPU" "${CMAKE_SOURCE_DIR}/src/GridGenerator" "${CMAKE_SOURCE_DIR}/src/VirtualFluidsBasics") +set(libsToLink gpu_core GridGenerator) +set(includeDirectories "${CMAKE_SOURCE_DIR}/src" "${CMAKE_SOURCE_DIR}/src/gpu_core" "${CMAKE_SOURCE_DIR}/src/GridGenerator" "${CMAKE_SOURCE_DIR}/src/VirtualFluidsBasics") #glob files and save in MY_SRCS include(CMakePackage.cmake) diff --git a/apps/gpu/BaselNU/main.cpp b/apps/gpu/BaselNU/main.cpp index 97c4c48afb5caffb89bad89e3f3fe99670c889bc..991f5b3fa639f90562b5d220b27aedc21a71bf5a 100644 --- a/apps/gpu/BaselNU/main.cpp +++ b/apps/gpu/BaselNU/main.cpp @@ -18,15 +18,15 @@ #include "StringUtilities/StringUtil.h" #include "Input/ConfigFileReader/ConfigFileReader.h" -#include "VirtualFluids_GPU/LBM/Simulation.h" -#include "VirtualFluids_GPU/Communication/MpiCommunicator.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" -#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" +#include "gpu/core/LBM/Simulation.h" +#include "gpu/core/Communication/MpiCommunicator.h" +#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h" +#include "gpu/core/Parameter/Parameter.h" +#include "gpu/core/Output/FileWriter.h" +#include "gpu/core/GPU/CudaMemoryManager.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" #include "global.h" diff --git a/apps/gpu/BoundaryLayer/BoundaryLayer.cpp b/apps/gpu/BoundaryLayer/BoundaryLayer.cpp index d8b3b54b22045214c70dde4c9c2ded711ab9cf73..ac2dbf785764b529653d122b9edcad31ca08be6c 100644 --- a/apps/gpu/BoundaryLayer/BoundaryLayer.cpp +++ b/apps/gpu/BoundaryLayer/BoundaryLayer.cpp @@ -69,23 +69,23 @@ ////////////////////////////////////////////////////////////////////////// -#include "VirtualFluids_GPU/LBM/Simulation.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" -#include "VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.h" -#include "VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.h" -#include "VirtualFluids_GPU/PreCollisionInteractor/Probes/PlanarAverageProbe.h" -#include "VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.h" -#include "VirtualFluids_GPU/PreCollisionInteractor/PrecursorWriter.h" -#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" -#include "VirtualFluids_GPU/Factories/GridScalingFactory.h" -#include "VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.h" -#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h" - -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" +#include "gpu/core/LBM/Simulation.h" +#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h" +#include "gpu/core/Parameter/Parameter.h" +#include "gpu/core/Output/FileWriter.h" +#include "gpu/core/PreCollisionInteractor/Probes/PointProbe.h" +#include "gpu/core/PreCollisionInteractor/Probes/PlaneProbe.h" +#include "gpu/core/PreCollisionInteractor/Probes/PlanarAverageProbe.h" +#include "gpu/core/PreCollisionInteractor/Probes/WallModelProbe.h" +#include "gpu/core/PreCollisionInteractor/PrecursorWriter.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" +#include "gpu/core/Factories/GridScalingFactory.h" +#include "gpu/core/TurbulenceModels/TurbulenceModelFactory.h" +#include "gpu/core/Kernel/KernelTypes.h" + +#include "gpu/core/GPU/CudaMemoryManager.h" #include "utilities/communication.h" @@ -213,7 +213,7 @@ void multipleLevel(const std::string& configPath) bool useStreams = (nProcs > 1 ? true: false); // useStreams=false; para->setUseStreams(useStreams); - para->configureMainKernel(vf::CollisionKernel::Compressible::K17CompressibleNavierStokes); + para->configureMainKernel(vf::collisionKernel::compressible::K17CompressibleNavierStokes); para->setIsBodyForce( config.getValue<bool>("bodyForce") ); para->setTimestepStartOut(uint(tStartOut/dt) ); diff --git a/apps/gpu/BoundaryLayer/CMakeLists.txt b/apps/gpu/BoundaryLayer/CMakeLists.txt index 248c7a1616610715d38bcbff129b226da2cfd1f2..30efeb6bf4fe9b24f9857f348e21bcaaa1e7f555 100644 --- a/apps/gpu/BoundaryLayer/CMakeLists.txt +++ b/apps/gpu/BoundaryLayer/CMakeLists.txt @@ -1,6 +1,6 @@ PROJECT(BoundaryLayer LANGUAGES CUDA CXX) -vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES BoundaryLayer.cpp) +vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES BoundaryLayer.cpp) set_source_files_properties(BoundaryLayer.cpp PROPERTIES LANGUAGE CUDA) diff --git a/apps/gpu/ChannelFlow/CMakeLists.txt b/apps/gpu/ChannelFlow/CMakeLists.txt index 3884074e05097b392d96a47287d5e5cad4c0d6f3..3aab31339616f98f4f5c14138686fe04ac4e28ae 100644 --- a/apps/gpu/ChannelFlow/CMakeLists.txt +++ b/apps/gpu/ChannelFlow/CMakeLists.txt @@ -1,6 +1,6 @@ PROJECT(ChannelFlow LANGUAGES CUDA CXX) -vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES ChannelFlow.cpp) +vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES ChannelFlow.cpp) set_source_files_properties(ChannelFlow.cpp PROPERTIES LANGUAGE CUDA) diff --git a/apps/gpu/ChannelFlow/ChannelFlow.cpp b/apps/gpu/ChannelFlow/ChannelFlow.cpp index c716729f88d2e9d07b7647749f09127e8acf252e..3b19a67e6e6228a2f56b8dbedfbe901984902671 100644 --- a/apps/gpu/ChannelFlow/ChannelFlow.cpp +++ b/apps/gpu/ChannelFlow/ChannelFlow.cpp @@ -60,14 +60,14 @@ ////////////////////////////////////////////////////////////////////////// -#include "VirtualFluids_GPU/BoundaryConditions/BoundaryConditionFactory.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" -#include "VirtualFluids_GPU/LBM/Simulation.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" -#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h" +#include "gpu/core/BoundaryConditions/BoundaryConditionFactory.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "gpu/core/GPU/CudaMemoryManager.h" +#include "gpu/core/LBM/Simulation.h" +#include "gpu/core/Output/FileWriter.h" +#include "gpu/core/Parameter/Parameter.h" +#include "gpu/core/Kernel/Utilities/KernelTypes.h" ////////////////////////////////////////////////////////////////////////// @@ -146,7 +146,7 @@ int main(int argc, char *argv[]) para->setTimestepEnd(timeStepEnd); para->setOutputPrefix("ChannelFlow"); - para->configureMainKernel(vf::CollisionKernel::Compressible::K17CompressibleNavierStokes); + para->configureMainKernel(vf::collisionKernel::compressible::K17CompressibleNavierStokes); real overlap = (real)8.0 * dx; diff --git a/apps/gpu/DrivenCavity/CMakeLists.txt b/apps/gpu/DrivenCavity/CMakeLists.txt index 8646f29c13d689eaabee4274418620636643c592..c040b1810768cf6930f564d0fb89632931326380 100644 --- a/apps/gpu/DrivenCavity/CMakeLists.txt +++ b/apps/gpu/DrivenCavity/CMakeLists.txt @@ -2,4 +2,4 @@ PROJECT(DrivenCavity LANGUAGES CXX) #LIST(APPEND CS_COMPILER_FLAGS_CXX "-DOMPI_SKIP_MPICXX" ) -vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES DrivenCavity.cpp) +vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES DrivenCavity.cpp) diff --git a/apps/gpu/DrivenCavity/DrivenCavity.cpp b/apps/gpu/DrivenCavity/DrivenCavity.cpp index 6f36a74a61902135ae78d4cdea43f13540e243f0..d7b897cd53a724d0cfa747124451423006853fba 100644 --- a/apps/gpu/DrivenCavity/DrivenCavity.cpp +++ b/apps/gpu/DrivenCavity/DrivenCavity.cpp @@ -57,15 +57,15 @@ ////////////////////////////////////////////////////////////////////////// -#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" -#include "VirtualFluids_GPU/Factories/GridScalingFactory.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" -#include "VirtualFluids_GPU/LBM/Simulation.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" -#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" +#include "gpu/core/Factories/GridScalingFactory.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "gpu/core/GPU/CudaMemoryManager.h" +#include "gpu/core/LBM/Simulation.h" +#include "gpu/core/Output/FileWriter.h" +#include "gpu/core/Parameter/Parameter.h" +#include "gpu/core/Kernel/KernelTypes.h" ////////////////////////////////////////////////////////////////////////// @@ -134,7 +134,7 @@ int main() para->setTimestepOut(timeStepOut); para->setTimestepEnd(timeStepEnd); - para->configureMainKernel(vf::CollisionKernel::Compressible::K17CompressibleNavierStokes); + para->configureMainKernel(vf::collisionKernel::compressible::K17CompressibleNavierStokes); ////////////////////////////////////////////////////////////////////////// // set boundary conditions diff --git a/apps/gpu/DrivenCavityMultiGPU/CMakeLists.txt b/apps/gpu/DrivenCavityMultiGPU/CMakeLists.txt index 6460abb1cb56b770cf91f57239eeb8262f34595a..abecc9fd9618051ef05cbb7b4ba5ba9f53af624a 100644 --- a/apps/gpu/DrivenCavityMultiGPU/CMakeLists.txt +++ b/apps/gpu/DrivenCavityMultiGPU/CMakeLists.txt @@ -1,3 +1,3 @@ PROJECT(DrivenCavityMultiGPU LANGUAGES CXX) -vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES DrivenCavityMultiGPU.cpp) +vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES DrivenCavityMultiGPU.cpp) diff --git a/apps/gpu/DrivenCavityMultiGPU/DrivenCavityMultiGPU.cpp b/apps/gpu/DrivenCavityMultiGPU/DrivenCavityMultiGPU.cpp index 006f2b92335a3dd2f6c2cd97de2971cac0e61bf8..f35bfe5c151e3821af5952e6c9d921691dfe08dd 100755 --- a/apps/gpu/DrivenCavityMultiGPU/DrivenCavityMultiGPU.cpp +++ b/apps/gpu/DrivenCavityMultiGPU/DrivenCavityMultiGPU.cpp @@ -33,20 +33,20 @@ ////////////////////////////////////////////////////////////////////////// -#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" -#include "VirtualFluids_GPU/LBM/Simulation.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h" +#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "gpu/core/LBM/Simulation.h" +#include "gpu/core/Output/FileWriter.h" +#include "gpu/core/Parameter/Parameter.h" -#include "VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h" -#include "VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h" -#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" -#include "VirtualFluids_GPU/Factories/GridScalingFactory.h" -#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h" +#include "gpu/core/Kernel/KernelFactory/KernelFactoryImp.h" +#include "gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" +#include "gpu/core/Factories/GridScalingFactory.h" +#include "gpu/core/Kernel/KernelTypes.h" -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" +#include "gpu/core/GPU/CudaMemoryManager.h" ////////////////////////////////////////////////////////////////////////// #include <parallel/MPICommunicator.h> @@ -109,7 +109,7 @@ void runVirtualFluids(const vf::basics::ConfigurationFile& config) para->setPrintFiles(true); std::cout << "Write result files to " << para->getFName() << std::endl; - para->configureMainKernel(vf::CollisionKernel::Compressible::K17CompressibleNavierStokes); + para->configureMainKernel(vf::collisionKernel::compressible::K17CompressibleNavierStokes); scalingFactory.setScalingFactory(GridScalingFactory::GridScaling::ScaleCompressible); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/apps/gpu/DrivenCavityUniform/CMakeLists.txt b/apps/gpu/DrivenCavityUniform/CMakeLists.txt index 78d6d693a54b251b8c3361ac908f6099f4d7ccf0..b223717b7f6f1f506847d7bd2436ff295c2bd73e 100644 --- a/apps/gpu/DrivenCavityUniform/CMakeLists.txt +++ b/apps/gpu/DrivenCavityUniform/CMakeLists.txt @@ -2,4 +2,4 @@ PROJECT(DrivenCavityUniform LANGUAGES CXX) #LIST(APPEND CS_COMPILER_FLAGS_CXX "-DOMPI_SKIP_MPICXX" ) -vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES DrivenCavity.cpp) +vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES DrivenCavity.cpp) diff --git a/apps/gpu/DrivenCavityUniform/DrivenCavity.cpp b/apps/gpu/DrivenCavityUniform/DrivenCavity.cpp index 10319c4c62ad2b1a3e5471be86e3f8fca41a49b2..0ffe9bd39e2fc461dd8e08e8f3ed411b2550a42f 100644 --- a/apps/gpu/DrivenCavityUniform/DrivenCavity.cpp +++ b/apps/gpu/DrivenCavityUniform/DrivenCavity.cpp @@ -57,15 +57,15 @@ ////////////////////////////////////////////////////////////////////////// -#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" -#include "VirtualFluids_GPU/Factories/GridScalingFactory.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" -#include "VirtualFluids_GPU/LBM/Simulation.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" -#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" +#include "gpu/core/Factories/GridScalingFactory.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "gpu/core/GPU/CudaMemoryManager.h" +#include "gpu/core/LBM/Simulation.h" +#include "gpu/core/Output/FileWriter.h" +#include "gpu/core/Parameter/Parameter.h" +#include "gpu/core/Kernel/KernelTypes.h" ////////////////////////////////////////////////////////////////////////// @@ -137,7 +137,7 @@ int main() para->setTimestepOut(timeStepOut); para->setTimestepEnd(timeStepEnd); - para->configureMainKernel(vf::CollisionKernel::Compressible::K17CompressibleNavierStokes); + para->configureMainKernel(vf::collisionKernel::compressible::K17CompressibleNavierStokes); ////////////////////////////////////////////////////////////////////////// // set boundary conditions diff --git a/apps/gpu/MusselOyster/CMakeLists.txt b/apps/gpu/MusselOyster/CMakeLists.txt index 966c802b233fd333c7e7b44a57c7f4177b419ca3..2661a46547eb651c23ce48550e571998d414bc34 100644 --- a/apps/gpu/MusselOyster/CMakeLists.txt +++ b/apps/gpu/MusselOyster/CMakeLists.txt @@ -1,3 +1,3 @@ PROJECT(MusselOyster LANGUAGES CXX) -vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES MusselOyster.cpp) +vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES MusselOyster.cpp) diff --git a/apps/gpu/MusselOyster/MusselOyster.cpp b/apps/gpu/MusselOyster/MusselOyster.cpp index 191a960fc1cf54d9bd74689d4d59b211220262c2..0c145e5a3c6a498b26b288f614faafec2212df86 100644 --- a/apps/gpu/MusselOyster/MusselOyster.cpp +++ b/apps/gpu/MusselOyster/MusselOyster.cpp @@ -36,15 +36,15 @@ ////////////////////////////////////////////////////////////////////////// -#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" -#include "VirtualFluids_GPU/LBM/Simulation.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" -#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" -#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h" +#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "gpu/core/GPU/CudaMemoryManager.h" +#include "gpu/core/LBM/Simulation.h" +#include "gpu/core/Output/FileWriter.h" +#include "gpu/core/Parameter/Parameter.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" +#include "gpu/core/Kernel/KernelTypes.h" ////////////////////////////////////////////////////////////////////////// @@ -139,7 +139,6 @@ void runVirtualFluids(const vf::basics::ConfigurationFile& config) // para->setTimestepEnd(10000); para->setCalcDragLift(false); - para->setUseWale(false); para->setOutputPrefix(simulationName); if (para->getOutputPath() == "output/") {para->setOutputPath(outPath);} @@ -148,7 +147,7 @@ void runVirtualFluids(const vf::basics::ConfigurationFile& config) std::cout << "Write result files to " << para->getFName() << std::endl; para->setUseStreams(useStreams); - para->configureMainKernel(vf::CollisionKernel::Compressible::K17CompressibleNavierStokes); + para->configureMainKernel(vf::collisionKernel::compressible::K17CompressibleNavierStokes); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/apps/gpu/SphereGPU/CMakeLists.txt b/apps/gpu/SphereGPU/CMakeLists.txt index 1a162d6d200e4c0e533764b8f9927314b1f28ee9..df9f6b57197f594461805375238bab534ee6cdb5 100644 --- a/apps/gpu/SphereGPU/CMakeLists.txt +++ b/apps/gpu/SphereGPU/CMakeLists.txt @@ -1,3 +1,3 @@ PROJECT(SphereGPU LANGUAGES CXX) -vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES Sphere.cpp) +vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES Sphere.cpp) diff --git a/apps/gpu/SphereGPU/Sphere.cpp b/apps/gpu/SphereGPU/Sphere.cpp index 3a5de66b576aaaa6999f2ca1a38f43553d86301d..66d381809d3f37bc85238a459b86fd54e9477b4a 100644 --- a/apps/gpu/SphereGPU/Sphere.cpp +++ b/apps/gpu/SphereGPU/Sphere.cpp @@ -60,17 +60,17 @@ ////////////////////////////////////////////////////////////////////////// -#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" -#include "VirtualFluids_GPU/LBM/Simulation.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" -#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" -#include "VirtualFluids_GPU/Factories/GridScalingFactory.h" -#include "VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.h" -#include "VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.h" -#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "gpu/core/GPU/CudaMemoryManager.h" +#include "gpu/core/LBM/Simulation.h" +#include "gpu/core/Output/FileWriter.h" +#include "gpu/core/Parameter/Parameter.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" +#include "gpu/core/Factories/GridScalingFactory.h" +#include "gpu/core/PreCollisionInteractor/Probes/PointProbe.h" +#include "gpu/core/PreCollisionInteractor/Probes/PlaneProbe.h" +#include "gpu/core/Kernel/KernelTypes.h" int main(int argc, char *argv[]) { @@ -171,7 +171,7 @@ int main(int argc, char *argv[]) para->setTimestepOut(timeStepOut); para->setTimestepEnd(timeStepEnd); - para->configureMainKernel(vf::CollisionKernel::Compressible::K17CompressibleNavierStokes); + para->configureMainKernel(vf::collisionKernel::compressible::K17CompressibleNavierStokes); ////////////////////////////////////////////////////////////////////////// // set boundary conditions diff --git a/apps/gpu/SphereRefined/CMakeLists.txt b/apps/gpu/SphereRefined/CMakeLists.txt index 87432021ba02e7b56b5dabade18e98d7978bce46..f7bb5716f44d424f834b38e2ce5ff27423ff3265 100644 --- a/apps/gpu/SphereRefined/CMakeLists.txt +++ b/apps/gpu/SphereRefined/CMakeLists.txt @@ -2,7 +2,7 @@ PROJECT(SphereRefined LANGUAGES CUDA CXX) #LIST(APPEND CS_COMPILER_FLAGS_CXX "-DOMPI_SKIP_MPICXX" ) -vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES SphereRefined.cpp) +vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES SphereRefined.cpp) set_source_files_properties(SphereRefined.cpp PROPERTIES LANGUAGE CUDA) diff --git a/apps/gpu/SphereRefined/SphereRefined.cpp b/apps/gpu/SphereRefined/SphereRefined.cpp index 2aae0b4eb19a48e5486c908e80f257aaf463a97d..8d03154b34f0bb04b72033783195cd857b9ff4a7 100644 --- a/apps/gpu/SphereRefined/SphereRefined.cpp +++ b/apps/gpu/SphereRefined/SphereRefined.cpp @@ -58,16 +58,16 @@ ////////////////////////////////////////////////////////////////////////// -#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" -#include "VirtualFluids_GPU/Factories/GridScalingFactory.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" -#include "VirtualFluids_GPU/LBM/Simulation.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" -#include "VirtualFluids_GPU/Factories/GridScalingFactory.h" -#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" +#include "gpu/core/Factories/GridScalingFactory.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "gpu/core/GPU/CudaMemoryManager.h" +#include "gpu/core/LBM/Simulation.h" +#include "gpu/core/Output/FileWriter.h" +#include "gpu/core/Parameter/Parameter.h" +#include "gpu/core/Factories/GridScalingFactory.h" +#include "gpu/core/Kernel/KernelTypes.h" #include <parallel/MPICommunicator.h> @@ -145,7 +145,7 @@ int main() para->setTimestepOut(timeStepOut); para->setTimestepEnd(timeStepEnd); - para->configureMainKernel(vf::CollisionKernel::Compressible::K17CompressibleNavierStokes); + para->configureMainKernel(vf::collisionKernel::compressible::K17CompressibleNavierStokes); ////////////////////////////////////////////////////////////////////////// // set boundary conditions diff --git a/apps/gpu/SphereScaling/CMakeLists.txt b/apps/gpu/SphereScaling/CMakeLists.txt index 7d2d7722190e02876dc05e581cd9ce67a3362ebd..04b4e6defd8b3e5db96a83f165f4bc5999a4b1cd 100644 --- a/apps/gpu/SphereScaling/CMakeLists.txt +++ b/apps/gpu/SphereScaling/CMakeLists.txt @@ -1,6 +1,6 @@ PROJECT(SphereScaling LANGUAGES CUDA CXX) -vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES SphereScaling.cpp) +vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES SphereScaling.cpp) set_source_files_properties(SphereScaling.cpp PROPERTIES LANGUAGE CUDA) diff --git a/apps/gpu/SphereScaling/SphereScaling.cpp b/apps/gpu/SphereScaling/SphereScaling.cpp index 9873522362c06a9c427be296e813602839b04642..a45d494374ec6cd5cf04edefc23b83732ef0fae0 100755 --- a/apps/gpu/SphereScaling/SphereScaling.cpp +++ b/apps/gpu/SphereScaling/SphereScaling.cpp @@ -36,20 +36,20 @@ ////////////////////////////////////////////////////////////////////////// -#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" -#include "VirtualFluids_GPU/LBM/Simulation.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h" +#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "gpu/core/LBM/Simulation.h" +#include "gpu/core/Output/FileWriter.h" +#include "gpu/core/Parameter/Parameter.h" -#include "VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h" -#include "VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h" -#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" -#include "VirtualFluids_GPU/Factories/GridScalingFactory.h" -#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h" +#include "gpu/core/Kernel/KernelFactory/KernelFactoryImp.h" +#include "gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" +#include "gpu/core/Factories/GridScalingFactory.h" +#include "gpu/core/Kernel/KernelTypes.h" -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" +#include "gpu/core/GPU/CudaMemoryManager.h" ////////////////////////////////////////////////////////////////////////// @@ -106,7 +106,6 @@ void runVirtualFluids(const vf::basics::ConfigurationFile& config) para->setDensityRatio((real)998.0); para->setCalcDragLift(false); - para->setUseWale(false); para->setOutputPrefix(simulationName); if (para->getOutputPath() == "output/") {para->setOutputPath(outPath);} @@ -117,7 +116,7 @@ void runVirtualFluids(const vf::basics::ConfigurationFile& config) else para->setMaxLevel(1); - para->configureMainKernel(vf::CollisionKernel::Compressible::K17CompressibleNavierStokes); + para->configureMainKernel(vf::collisionKernel::compressible::K17CompressibleNavierStokes); scalingFactory.setScalingFactory(GridScalingFactory::GridScaling::ScaleCompressible); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/apps/gpu/TGV_3D/CMakeLists.txt b/apps/gpu/TGV_3D/CMakeLists.txt index 6a06a92891ac8b7c9714f0a6c98dd918dc08f682..6ff88f79de8b6ea5228bff197096d9178e3f5989 100644 --- a/apps/gpu/TGV_3D/CMakeLists.txt +++ b/apps/gpu/TGV_3D/CMakeLists.txt @@ -1,6 +1,6 @@ PROJECT(TGV_3D LANGUAGES CUDA CXX) -vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES TGV_3D.cpp) +vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES TGV_3D.cpp) set_source_files_properties(TGV_3D.cpp PROPERTIES LANGUAGE CUDA) diff --git a/apps/gpu/TGV_3D/TGV_3D.cpp b/apps/gpu/TGV_3D/TGV_3D.cpp index 6bb6d2b9201a4f21e5b70d31b8e9c60ad5a8a34c..d0709d4f60f4262cfd20a78b4580ca4c84e93b19 100644 --- a/apps/gpu/TGV_3D/TGV_3D.cpp +++ b/apps/gpu/TGV_3D/TGV_3D.cpp @@ -64,14 +64,14 @@ ////////////////////////////////////////////////////////////////////////// -#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" -#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" -#include "VirtualFluids_GPU/LBM/Simulation.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h" +#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" +#include "gpu/core/GPU/CudaMemoryManager.h" +#include "gpu/core/LBM/Simulation.h" +#include "gpu/core/Output/FileWriter.h" +#include "gpu/core/Parameter/Parameter.h" #include <parallel/MPICommunicator.h> //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -116,7 +116,6 @@ uint nx = 64; uint gpuIndex = 0; bool useLimiter = false; -bool useWale = false; std::string kernel( "CumulantK17" ); @@ -247,9 +246,6 @@ void multipleLevel(const std::string& configPath) if( !useLimiter ) para->setQuadricLimiters( 1000000.0, 1000000.0, 1000000.0 ); - if( useWale ) - para->setUseWale( true ); - para->setUseInitNeq( true ); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -310,9 +306,6 @@ int main( int argc, char* argv[]) if( cmdOptionExists( argv, argv+argc, "--useLimiter" ) ) useLimiter = true; - if( cmdOptionExists( argv, argv+argc, "--useWale" ) ) - useWale = true; - multipleLevel(targetPath + "config.txt"); ////////////////////////////////////////////////////////////////////////// diff --git a/apps/gpu/TGV_3D_GridRef/CMakeLists.txt b/apps/gpu/TGV_3D_GridRef/CMakeLists.txt index efb4310669f9c0de7aa5cf3f1e4dffa00bd66cbf..92e125b2d4a1b9239a91a6086bc0b6ec005e0f54 100644 --- a/apps/gpu/TGV_3D_GridRef/CMakeLists.txt +++ b/apps/gpu/TGV_3D_GridRef/CMakeLists.txt @@ -1,6 +1,6 @@ PROJECT(TGV_3D_GridRef LANGUAGES CUDA CXX) -vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES TGV_3D_GridRef.cpp) +vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES TGV_3D_GridRef.cpp) set_source_files_properties(TGV_3D_GridRef.cpp PROPERTIES LANGUAGE CUDA) diff --git a/apps/gpu/TGV_3D_GridRef/TGV_3D_GridRef.cpp b/apps/gpu/TGV_3D_GridRef/TGV_3D_GridRef.cpp index 4dc29b9309643a82fb82572ec37fb69468cebb51..6decfa73429e70293243022f4147d4d010773540 100644 --- a/apps/gpu/TGV_3D_GridRef/TGV_3D_GridRef.cpp +++ b/apps/gpu/TGV_3D_GridRef/TGV_3D_GridRef.cpp @@ -68,16 +68,16 @@ ////////////////////////////////////////////////////////////////////////// #include "parallel/MpiCommunicator.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" -#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" -#include "VirtualFluids_GPU/Factories/GridScalingFactory.h" -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" -#include "VirtualFluids_GPU/LBM/Simulation.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" -#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h" +#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" +#include "gpu/core/Factories/GridScalingFactory.h" +#include "gpu/core/GPU/CudaMemoryManager.h" +#include "gpu/core/LBM/Simulation.h" +#include "gpu/core/Output/FileWriter.h" +#include "gpu/core/Parameter/Parameter.h" +#include "gpu/core/Kernel/KernelTypes.h" //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -121,9 +121,8 @@ uint nx = 64; uint gpuIndex = 0; bool useLimiter = false; -bool useWale = false; -std::string kernel(vf::CollisionKernel::Compressible::K17CompressibleNavierStokes); +std::string kernel(vf::collisionKernel::compressible::K17CompressibleNavierStokes); std::string path("D:/out/TGV_3D/"); //MOLLOK @@ -268,9 +267,6 @@ void multipleLevel(const std::string& configPath) if( !useLimiter ) para->setQuadricLimiters( 1000000.0, 1000000.0, 1000000.0 ); - if( useWale ) - para->setUseWale( true ); - para->setUseInitNeq( true ); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -331,9 +327,6 @@ int main( int argc, char* argv[]) if( cmdOptionExists( argv, argv+argc, "--useLimiter" ) ) useLimiter = true; - if( cmdOptionExists( argv, argv+argc, "--useWale" ) ) - useWale = true; - multipleLevel(targetPath + "config.txt"); ////////////////////////////////////////////////////////////////////////// diff --git a/apps/gpu/TGV_3D_MultiGPU/CMakeLists.txt b/apps/gpu/TGV_3D_MultiGPU/CMakeLists.txt index cc25432a3151ce0805242f720d58794e8bc7feed..cfa39677e41f8b399eccf441f8752a77cf9327fe 100644 --- a/apps/gpu/TGV_3D_MultiGPU/CMakeLists.txt +++ b/apps/gpu/TGV_3D_MultiGPU/CMakeLists.txt @@ -1,6 +1,6 @@ PROJECT(TGV_3D_MultiGPU LANGUAGES CUDA CXX) -vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES TGV_3D_MultiGPU.cpp) +vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES TGV_3D_MultiGPU.cpp) set_source_files_properties(TGV_3D_MultiGPU.cpp PROPERTIES LANGUAGE CUDA) diff --git a/apps/gpu/TGV_3D_MultiGPU/TGV_3D_MultiGPU.cpp b/apps/gpu/TGV_3D_MultiGPU/TGV_3D_MultiGPU.cpp index f409b417378b0a2eab05b65181fac4d86e981c50..8cec1eef3f9003ebcdc4cd79bcfcf040999601bd 100644 --- a/apps/gpu/TGV_3D_MultiGPU/TGV_3D_MultiGPU.cpp +++ b/apps/gpu/TGV_3D_MultiGPU/TGV_3D_MultiGPU.cpp @@ -53,19 +53,19 @@ #include "StringUtilities/StringUtil.h" #include "basics/config/ConfigurationFile.h" -#include "VirtualFluids_GPU/LBM/Simulation.h" -#include "VirtualFluids_GPU/Communication/MpiCommunicator.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" +#include "gpu/core/LBM/Simulation.h" +#include "gpu/core/Communication/MpiCommunicator.h" +#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h" +#include "gpu/core/Parameter/Parameter.h" +#include "gpu/core/Output/FileWriter.h" -#include "VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h" -#include "VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h" -#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" +#include "gpu/core/Kernel/KernelFactory/KernelFactoryImp.h" +#include "gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" +#include "gpu/core/GPU/CudaMemoryManager.h" #include "global.h" @@ -122,7 +122,6 @@ uint nx = 64; uint gpuIndex = 0; bool useLimiter = false; -bool useWale = false; int mpirank; int mpiWorldSize; @@ -314,9 +313,6 @@ void multipleLevel(const std::string& configPath) if( !useLimiter ) para->setQuadricLimiters( 1000000.0, 1000000.0, 1000000.0 ); - if( useWale ) - para->setUseWale( true ); - para->setUseInitNeq( true ); if (kernel == "CumulantK18Comp" || kernel == "CumulantK20Comp") @@ -387,9 +383,6 @@ int main( int argc, char* argv[]) if( cmdOptionExists( argv, argv+argc, "--useLimiter" ) ) useLimiter = true; - if( cmdOptionExists( argv, argv+argc, "--useWale" ) ) - useWale = true; - ////////////////////////////////////////////////////////////////////////// { diff --git a/apps/gpu/WTG_RUB/CMakeLists.txt b/apps/gpu/WTG_RUB/CMakeLists.txt index d67ec1c079fa418bcfc7374aa7aa7673756329a8..98cd844fa13fe6220a9bb01eb3e6ecf6f32e01da 100644 --- a/apps/gpu/WTG_RUB/CMakeLists.txt +++ b/apps/gpu/WTG_RUB/CMakeLists.txt @@ -1,6 +1,6 @@ PROJECT(WTG_RUB LANGUAGES CUDA CXX) -vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator FILES WTG_RUB.cpp) +vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator FILES WTG_RUB.cpp) set_source_files_properties(WTG_RUB.cpp PROPERTIES LANGUAGE CUDA) diff --git a/apps/gpu/WTG_RUB/WTG_RUB.cpp b/apps/gpu/WTG_RUB/WTG_RUB.cpp index 129c08731a60ad2f75b62cdfaa4baa5eec92f00b..1a40c4f127ddabb52faa29fb581106026e92f452 100644 --- a/apps/gpu/WTG_RUB/WTG_RUB.cpp +++ b/apps/gpu/WTG_RUB/WTG_RUB.cpp @@ -65,15 +65,15 @@ ////////////////////////////////////////////////////////////////////////// -#include "VirtualFluids_GPU/LBM/Simulation.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" -#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" -#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h" +#include "gpu/core/LBM/Simulation.h" +#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h" +#include "gpu/core/Parameter/Parameter.h" +#include "gpu/core/Output/FileWriter.h" +#include "gpu/core/GPU/CudaMemoryManager.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" +#include "gpu/core/Kernel/KernelTypes.h" #include <parallel/MPICommunicator.h> @@ -243,7 +243,7 @@ void multipleLevel(const std::string& configPath) para->setVelocityRatio(velocity/ velocityLB); - para->configureMainKernel(vf::CollisionKernel::Compressible::K17CompressibleNavierStokes); + para->configureMainKernel(vf::collisionKernel::compressible::K17CompressibleNavierStokes); para->setInitialCondition([&](real coordX, real coordY, real coordZ, real &rho, real &vx, real &vy, real &vz) { rho = (real)0.0; diff --git a/apps/gpu/gridGeneratorTest/CMakeLists.txt b/apps/gpu/gridGeneratorTest/CMakeLists.txt index b946a710edffbdcb98894e0d49763c6ead3dabf9..7edf505365cc8b05abbf30ef89c0a127e28d75c3 100644 --- a/apps/gpu/gridGeneratorTest/CMakeLists.txt +++ b/apps/gpu/gridGeneratorTest/CMakeLists.txt @@ -1,3 +1,3 @@ PROJECT(GridGeneratorTest LANGUAGES CXX) -vf_add_library(BUILDTYPE binary PRIVATE_LINK basics VirtualFluids_GPU GridGenerator MPI::MPI_CXX FILES gridGenerator.cpp) +vf_add_library(BUILDTYPE binary PRIVATE_LINK basics gpu_core GridGenerator MPI::MPI_CXX FILES gridGenerator.cpp) diff --git a/apps/gpu/gridGeneratorTest/gridGenerator.cpp b/apps/gpu/gridGeneratorTest/gridGenerator.cpp index e9ef5ae4790105471c227800d494f68deeb73c8d..91c70943429507525d994d8ebf00d35f60cd7bec 100644 --- a/apps/gpu/gridGeneratorTest/gridGenerator.cpp +++ b/apps/gpu/gridGeneratorTest/gridGenerator.cpp @@ -8,18 +8,18 @@ #include "StringUtilities/StringUtil.h" #include "basics/config/ConfigurationFile.h" -#include "VirtualFluids_GPU/LBM/Simulation.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" +#include "gpu/core/LBM/Simulation.h" +#include "gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h" +#include "gpu/core/Parameter/Parameter.h" +#include "gpu/core/Output/FileWriter.h" -#include "VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h" -#include "VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h" -#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" +#include "gpu/core/Kernel/KernelFactory/KernelFactoryImp.h" +#include "gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" +#include "gpu/core/GPU/CudaMemoryManager.h" #include "global.h" @@ -149,8 +149,6 @@ void runVirtualFluids(const vf::basics::ConfigurationFile &config) para->setCalcDragLift(true); - para->setUseWale(false); - para->configureMainKernel("CumulantK15Comp"); ////////////////////////////////////////////////////////////////////////// @@ -234,8 +232,6 @@ void runVirtualFluids(const vf::basics::ConfigurationFile &config) para->setTimestepOut( 10000 ); para->setTimestepEnd( 100000 ); - para->setUseWale(false); - para->configureMainKernel("CumulantK20Comp"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -337,8 +333,6 @@ void runVirtualFluids(const vf::basics::ConfigurationFile &config) para->setTimestepOut( 1000 ); para->setTimestepEnd( 100000 ); - para->setUseWale(false); - para->configureMainKernel("CumulantAA2016CompSP27"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -415,8 +409,6 @@ void runVirtualFluids(const vf::basics::ConfigurationFile &config) para->setTimestepOut( 1000 ); para->setTimestepEnd( 100000 ); - para->setUseWale(false); - para->configureMainKernel("CumulantAA2016CompSP27"); //para->configureMainKernel(kernelMapper->getEnum("CumulantOneCompSP27")); @@ -612,8 +604,6 @@ void runVirtualFluids(const vf::basics::ConfigurationFile &config) para->setCalcDragLift(true); - para->setUseWale(false); - para->configureMainKernel("CumulantK15Comp"); para->setDevices( { 0, 1 } ); diff --git a/apps/gpu/tests/NumericalTestPostProcessing/CMakeLists.txt b/apps/gpu/tests/NumericalTestPostProcessing/CMakeLists.txt index 4114004886660af9c9f95a0a7d5ed4fc90a7bd00..b58271c34025802fce64c8d381da0022f9e4f6a7 100644 --- a/apps/gpu/tests/NumericalTestPostProcessing/CMakeLists.txt +++ b/apps/gpu/tests/NumericalTestPostProcessing/CMakeLists.txt @@ -1,6 +1,6 @@ project(NumericalTestPostProcessing) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluids_GPU basics cudart_static) +vf_add_library(BUILDTYPE binary PRIVATE_LINK gpu_core basics cudart_static) vf_get_library_name(library_name) groupTarget(${library_name} ${testFolder}) diff --git a/apps/gpu/tests/NumericalTests/CMakeLists.txt b/apps/gpu/tests/NumericalTests/CMakeLists.txt index 80c6318756ce115f18a4fa4b6324dd0d087935e4..a188420492ff477ff4ddf86f0d4f34373438737e 100644 --- a/apps/gpu/tests/NumericalTests/CMakeLists.txt +++ b/apps/gpu/tests/NumericalTests/CMakeLists.txt @@ -1,6 +1,6 @@ project(NumericalTestsGPU) set(collectTestFiles ON) -vf_add_library(BUILDTYPE binary PRIVATE_LINK VirtualFluids_GPU GridGenerator basics logger fftw3 gtest gmock gmock_main cudart_static) +vf_add_library(BUILDTYPE binary PRIVATE_LINK gpu_core GridGenerator basics logger fftw3 gtest gmock gmock_main cudart_static) vf_get_library_name(library_name) groupTarget(${library_name} ${testFolder}) diff --git a/apps/gpu/tests/NumericalTests/Utilities/DataWriter/AnalyticalResults2DToVTKWriter/AnalyticalResults2DToVTKWriterImp.cpp b/apps/gpu/tests/NumericalTests/Utilities/DataWriter/AnalyticalResults2DToVTKWriter/AnalyticalResults2DToVTKWriterImp.cpp index 15032a8fd4ec6ce8f7684c33ceae0085d92f54c4..2bb7908b30a1c02afcc29d4244805df49263e62e 100644 --- a/apps/gpu/tests/NumericalTests/Utilities/DataWriter/AnalyticalResults2DToVTKWriter/AnalyticalResults2DToVTKWriterImp.cpp +++ b/apps/gpu/tests/NumericalTests/Utilities/DataWriter/AnalyticalResults2DToVTKWriter/AnalyticalResults2DToVTKWriterImp.cpp @@ -16,6 +16,7 @@ #include "Utilities/Results/AnalyticalResults/AnalyticalResult.h" #include <mpi.h> +#include "core/Output/FilePartCalculator.h" std::shared_ptr<AnalyticalResults2DToVTKWriterImp> AnalyticalResults2DToVTKWriterImp::getInstance(bool writeAnalyticalResults) @@ -40,7 +41,7 @@ void AnalyticalResults2DToVTKWriterImp::writeAnalyticalResult(std::shared_ptr<Pa for (int level = para->getCoarse(); level <= para->getFine(); level++) { #pragma omp parallel for for (int timeStep = 0; timeStep < analyticalResult->getNumberOfTimeSteps(); timeStep++) { - const unsigned int numberOfParts = para->getParH(level)->size_Mat / para->getLimitOfNodesForVTK() + 1; + const unsigned int numberOfParts = FilePartCalculator::calculateNumberOfParts(para->getParH(level)->size_Mat); std::vector<std::string> fname; unsigned int time = analyticalResult->getTimeSteps().at(timeStep) * analyticalResult->getTimeStepLength(); @@ -93,13 +94,10 @@ void AnalyticalResults2DToVTKWriterImp::writeTimeStep(std::shared_ptr<Parameter> std::vector<double> vz = analyticalResult->getVz()[timeStep]; for (unsigned int part = 0; part < fname.size(); part++) { - if (((part + 1) * para->getLimitOfNodesForVTK()) > para->getParH(level)->size_Mat) - sizeOfNodes = para->getParH(level)->size_Mat - (part * para->getLimitOfNodesForVTK()); - else - sizeOfNodes = para->getLimitOfNodesForVTK(); + sizeOfNodes = FilePartCalculator::calculateNumberOfNodesInPart(para->getParH(level)->size_Mat, part); ////////////////////////////////////////////////////////////////////////// - startpos = part * para->getLimitOfNodesForVTK(); + startpos = FilePartCalculator::calculateStartingPostionOfPart(part); endpos = startpos + sizeOfNodes; ////////////////////////////////////////////////////////////////////////// cells.clear(); diff --git a/apps/gpu/tests/NumericalTests/Utilities/DataWriter/ToVectorWriter.cpp b/apps/gpu/tests/NumericalTests/Utilities/DataWriter/ToVectorWriter.cpp index 5a779e0c958f74876f6f206193cf32a9c2e68935..078bc7297679c6761ce387739735ace9805cc368 100644 --- a/apps/gpu/tests/NumericalTests/Utilities/DataWriter/ToVectorWriter.cpp +++ b/apps/gpu/tests/NumericalTests/Utilities/DataWriter/ToVectorWriter.cpp @@ -1,9 +1,9 @@ #include "ToVectorWriter.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" -#include "VirtualFluids_GPU/Output/FileWriter.h" +#include "gpu/core/Output/FileWriter.h" +#include "gpu/core/Parameter/Parameter.h" +#include "gpu/core/GPU/CudaMemoryManager.h" +#include "gpu/core/Output/FileWriter.h" #include "Utilities/Structs/VectorWriterInformationStruct.h" diff --git a/apps/gpu/tests/NumericalTests/Utilities/DataWriter/ToVectorWriter.h b/apps/gpu/tests/NumericalTests/Utilities/DataWriter/ToVectorWriter.h index 43f0ae86e0bd1231414a5d1ec11347849eac03d8..1123a36a35e0de5971ce892058c0a62659edfb24 100644 --- a/apps/gpu/tests/NumericalTests/Utilities/DataWriter/ToVectorWriter.h +++ b/apps/gpu/tests/NumericalTests/Utilities/DataWriter/ToVectorWriter.h @@ -1,7 +1,7 @@ #ifndef WRITE_TO_VECTOR_H #define WRITE_TO_VECTOR_H -#include "VirtualFluids_GPU/Output/DataWriter.h" +#include "gpu/core/Output/DataWriter.h" class Parameter; class FileWriter; diff --git a/apps/gpu/tests/NumericalTests/Utilities/DataWriter/Y2dSliceToResults/Y2dSliceToResults.cpp b/apps/gpu/tests/NumericalTests/Utilities/DataWriter/Y2dSliceToResults/Y2dSliceToResults.cpp index c13f6f748463287fc4e7401d56d7c7ab40cc1a77..d19491ed5e08d182a966d1b87140ecf667e7dbd5 100644 --- a/apps/gpu/tests/NumericalTests/Utilities/DataWriter/Y2dSliceToResults/Y2dSliceToResults.cpp +++ b/apps/gpu/tests/NumericalTests/Utilities/DataWriter/Y2dSliceToResults/Y2dSliceToResults.cpp @@ -1,7 +1,7 @@ #include "Y2dSliceToResults.h" #include "Utilities/Results/SimulationResults/SimulationResults.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" +#include "gpu/core/Parameter/Parameter.h" #include <cmath> #include <sstream> diff --git a/apps/gpu/tests/NumericalTests/Utilities/InitialCondition/InitialCondition.h b/apps/gpu/tests/NumericalTests/Utilities/InitialCondition/InitialCondition.h index 1c9b322a29c80c28173d5791adc75e3756f22bbc..62cead9311e1ab581091e7eceb660dbd6200c1cc 100644 --- a/apps/gpu/tests/NumericalTests/Utilities/InitialCondition/InitialCondition.h +++ b/apps/gpu/tests/NumericalTests/Utilities/InitialCondition/InitialCondition.h @@ -1,7 +1,7 @@ #ifndef INITIAL_CONDITION_H #define INITIAL_CONDITION_H -#include "VirtualFluids_GPU/LBM/LB.h" +#include "gpu/core/LBM/LB.h" #include <vector> #include <memory> diff --git a/apps/gpu/tests/NumericalTests/Utilities/InitialCondition/InitialConditionImp.cpp b/apps/gpu/tests/NumericalTests/Utilities/InitialCondition/InitialConditionImp.cpp index 72045afbe7a68ba9c8595ee5c736dd5b2da89ec7..60b37a5be4fb0afc01509467c22b50e220f106f8 100644 --- a/apps/gpu/tests/NumericalTests/Utilities/InitialCondition/InitialConditionImp.cpp +++ b/apps/gpu/tests/NumericalTests/Utilities/InitialCondition/InitialConditionImp.cpp @@ -1,6 +1,6 @@ #include "InitialConditionImp.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" +#include "gpu/core/Parameter/Parameter.h" void InitialConditionImp::setParameter(std::shared_ptr<Parameter> para) { diff --git a/apps/gpu/tests/NumericalTests/Utilities/NumericalTestGridReader/NumericalTestGridReader.cpp b/apps/gpu/tests/NumericalTests/Utilities/NumericalTestGridReader/NumericalTestGridReader.cpp index b0368e4e4215aca06cda79faf47403d7a2650f8d..494eb79657ae9057496b50fa83d510159386b041 100644 --- a/apps/gpu/tests/NumericalTests/Utilities/NumericalTestGridReader/NumericalTestGridReader.cpp +++ b/apps/gpu/tests/NumericalTests/Utilities/NumericalTestGridReader/NumericalTestGridReader.cpp @@ -1,6 +1,6 @@ #include "NumericalTestGridReader.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" +#include "gpu/core/Parameter/Parameter.h" #include "Utilities/InitialCondition/InitialCondition.h" diff --git a/apps/gpu/tests/NumericalTests/Utilities/NumericalTestGridReader/NumericalTestGridReader.h b/apps/gpu/tests/NumericalTests/Utilities/NumericalTestGridReader/NumericalTestGridReader.h index 99363655817874672eaf5b898fb087cb20effb02..bde0a2bcb0c4740ed393e301b58339a9afcd180a 100644 --- a/apps/gpu/tests/NumericalTests/Utilities/NumericalTestGridReader/NumericalTestGridReader.h +++ b/apps/gpu/tests/NumericalTests/Utilities/NumericalTestGridReader/NumericalTestGridReader.h @@ -1,7 +1,7 @@ #ifndef NUMERICAL_TESTS_GRID_READER_H #define NUMERICAL_TESTS_GRID_READER_H -#include "VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h" +#include "gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h" #include <memory> diff --git a/apps/gpu/tests/NumericalTests/Utilities/Results/AnalyticalResults/AnalyticalResultImp.h b/apps/gpu/tests/NumericalTests/Utilities/Results/AnalyticalResults/AnalyticalResultImp.h index 8320d9e1076fad3ed0a6bf5461a58826dbe36418..7c1e09b9de89f972d3256e91507695c2960bee6e 100644 --- a/apps/gpu/tests/NumericalTests/Utilities/Results/AnalyticalResults/AnalyticalResultImp.h +++ b/apps/gpu/tests/NumericalTests/Utilities/Results/AnalyticalResults/AnalyticalResultImp.h @@ -3,7 +3,7 @@ #include "AnalyticalResult.h" -#include "VirtualFluids_GPU/LBM/LB.h" +#include "gpu/core/LBM/LB.h" class AnalyticalResultsImp : public AnalyticalResults { diff --git a/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.cpp b/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.cpp index 8646cc1991802b10d284c41acade4f5002df906b..3b1365678749e3b92d40adf9a4e92095b61d405c 100644 --- a/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.cpp +++ b/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.cpp @@ -5,11 +5,11 @@ #include "Utilities/NumericalTestGridReader/NumericalTestGridReader.h" #include "Utilities/SimulationParameter/SimulationParameter.h" -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" +#include "gpu/core/GPU/CudaMemoryManager.h" +#include "gpu/core/Parameter/Parameter.h" -#include "VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" -#include "VirtualFluids_GPU/LBM/Simulation.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" +#include "gpu/core/LBM/Simulation.h" #include <parallel/MPICommunicator.h> @@ -84,8 +84,6 @@ std::shared_ptr<Parameter> vf::gpu::tests::makeParameter(std::shared_ptr<Simulat para->setCalcMedian(false); para->setConcFile(false); para->setUseMeasurePoints(false); - para->setUseWale(false); - para->setSimulatePorousMedia(false); para->setForcing(0.0, 0.0, 0.0); std::vector<int> dist; diff --git a/apps/gpu/tests/NumericalTests/configK17chim_nu10tm3.txt b/apps/gpu/tests/NumericalTests/configK17chim_nu10tm3.txt index 34db5ea1deff1bbecf61c1b49686c19babfddb50..c1aa718e5a0261022365642f40a9804b25a1ff8f 100644 --- a/apps/gpu/tests/NumericalTests/configK17chim_nu10tm3.txt +++ b/apps/gpu/tests/NumericalTests/configK17chim_nu10tm3.txt @@ -6,7 +6,7 @@ Devices=0 ################################################## # Basic Simulation Parameter # ################################################## -KernelsToTest=K17CompressibleNavierStokesChimeraLegacy +KernelsToTest=K17CompressibleNavierStokes NumberOfTimeSteps=20 Viscosity=0.001 Rho0=1.0 diff --git a/cpu.cmake b/cpu.cmake index 78034bc927f8c01ce25d882e7d04f9f5e278ba01..226791b1bef78cf7c76c916424889982c7ce6073 100644 --- a/cpu.cmake +++ b/cpu.cmake @@ -88,7 +88,7 @@ endif() add_subdirectory(${VF_THIRD_DIR}/MuParser) -add_subdirectory(src/cpu/VirtualFluidsCore) +add_subdirectory(src/cpu/core) if(BUILD_VF_PYTHON_BINDINGS) add_subdirectory(src/cpu/simulationconfig) diff --git a/gpu.cmake b/gpu.cmake index 8f3fde523efa4cbf2f0884723728832f82a53231..9dd181b89c848c40c2dc9c2da2628d2c9bf9188d 100644 --- a/gpu.cmake +++ b/gpu.cmake @@ -3,7 +3,7 @@ ############################################################# add_subdirectory(src/gpu/GridGenerator) -add_subdirectory(src/gpu/VirtualFluids_GPU) +add_subdirectory(src/gpu/core) ############################################################# ### Apps ### diff --git a/pythonbindings/CMakeLists.txt b/pythonbindings/CMakeLists.txt index 8dbf9047ac964b2886a180c6be5d1b753e4fcb24..53700cc8d2769581bcbfbe6e984fb3c90bbd2996 100644 --- a/pythonbindings/CMakeLists.txt +++ b/pythonbindings/CMakeLists.txt @@ -61,7 +61,7 @@ IF(BUILD_VF_GPU) target_include_directories(gpu_bindings PRIVATE ${VF_THIRD_DIR}/cuda_samples/) - target_link_libraries(gpu_bindings PRIVATE basics GridGenerator VirtualFluids_GPU parallel) + target_link_libraries(gpu_bindings PRIVATE basics GridGenerator gpu_core parallel) target_include_directories(gpu_bindings PRIVATE ${CMAKE_SOURCE_DIR}/src/) target_include_directories(gpu_bindings PRIVATE ${CMAKE_BINARY_DIR}) @@ -74,7 +74,7 @@ IF(BUILD_VF_CPU) set_target_properties( cpu_bindings PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PYFLUIDS_DIR} OUTPUT_NAME "cpu") - target_link_libraries(cpu_bindings PRIVATE simulationconfig VirtualFluidsCore muparser) + target_link_libraries(cpu_bindings PRIVATE simulationconfig cpu_core muparser) target_include_directories(cpu_bindings PRIVATE ${CMAKE_SOURCE_DIR}/src/) target_include_directories(cpu_bindings PRIVATE ${CMAKE_BINARY_DIR}) diff --git a/pythonbindings/src/gpu/submodules/actuator_farm.cpp b/pythonbindings/src/gpu/submodules/actuator_farm.cpp index 86e3f5a42152e60d6b62e32fb894406efc8384ea..ee5275483f85559a15aefa769ba30a87af993355 100644 --- a/pythonbindings/src/gpu/submodules/actuator_farm.cpp +++ b/pythonbindings/src/gpu/submodules/actuator_farm.cpp @@ -33,8 +33,8 @@ #include <pybind11/pybind11.h> #include <pybind11/numpy.h> -#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h> -#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h> +#include <gpu/core/PreCollisionInteractor/ActuatorFarm.h> +#include <gpu/core/PreCollisionInteractor/PreCollisionInteractor.h> class PyActuatorFarm : public ActuatorFarm diff --git a/pythonbindings/src/gpu/submodules/boundary_conditions.cpp b/pythonbindings/src/gpu/submodules/boundary_conditions.cpp index 865817bb16f7b164c40bdc066645fb2e1f1c842e..26fdd3e712714074928f452c179b977e3769eec3 100644 --- a/pythonbindings/src/gpu/submodules/boundary_conditions.cpp +++ b/pythonbindings/src/gpu/submodules/boundary_conditions.cpp @@ -32,7 +32,7 @@ //======================================================================================= #include <pybind11/pybind11.h> #include <gpu/GridGenerator/grid/BoundaryConditions/Side.h> -#include "gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" +#include "gpu/core/Factories/BoundaryConditionFactory.h" namespace boundary_conditions { diff --git a/pythonbindings/src/gpu/submodules/cuda_memory_manager.cpp b/pythonbindings/src/gpu/submodules/cuda_memory_manager.cpp index bbff4832cb73f47e3d1a5a6abd78e21da2473deb..d974609d22412121fb4886fa7e4a233a90fc9b9b 100644 --- a/pythonbindings/src/gpu/submodules/cuda_memory_manager.cpp +++ b/pythonbindings/src/gpu/submodules/cuda_memory_manager.cpp @@ -31,8 +31,8 @@ //! \author Henry Korb //======================================================================================= #include <pybind11/pybind11.h> -#include <gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h> -#include <gpu/VirtualFluids_GPU/Parameter/Parameter.h> +#include <gpu/core/GPU/CudaMemoryManager.h> +#include <gpu/core/Parameter/Parameter.h> namespace cuda_memory_manager diff --git a/pythonbindings/src/gpu/submodules/grid_provider.cpp b/pythonbindings/src/gpu/submodules/grid_provider.cpp index 717e9d5cd82100636a5398c09662a0895ce8fb56..c9ad3138f54bea78e1575087f3b719267f9ef67b 100644 --- a/pythonbindings/src/gpu/submodules/grid_provider.cpp +++ b/pythonbindings/src/gpu/submodules/grid_provider.cpp @@ -30,7 +30,7 @@ //! \author Henry Korb //======================================================================================= #include <pybind11/pybind11.h> -#include "gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h" +#include "gpu/core/DataStructureInitializer/GridProvider.h" namespace grid_provider { diff --git a/pythonbindings/src/gpu/submodules/grid_scaling_factory.cpp b/pythonbindings/src/gpu/submodules/grid_scaling_factory.cpp index a3a572875a4695871c482a4308acab4214dbb481..dddeef34d528206f4c9a573772109f39797658f9 100644 --- a/pythonbindings/src/gpu/submodules/grid_scaling_factory.cpp +++ b/pythonbindings/src/gpu/submodules/grid_scaling_factory.cpp @@ -31,7 +31,7 @@ //! \author Henry Korb //======================================================================================= #include <pybind11/pybind11.h> -#include <gpu/VirtualFluids_GPU/Factories/GridScalingFactory.h> +#include <gpu/core/Factories/GridScalingFactory.h> namespace grid_scaling_factory { diff --git a/pythonbindings/src/gpu/submodules/parameter.cpp b/pythonbindings/src/gpu/submodules/parameter.cpp index 53c270f16327aee73b55e746d1d0bb94993203a2..6b9d57a715eb309295f6537daaccf56ff5397384 100644 --- a/pythonbindings/src/gpu/submodules/parameter.cpp +++ b/pythonbindings/src/gpu/submodules/parameter.cpp @@ -33,10 +33,10 @@ #include <pybind11/pybind11.h> #include <pybind11/functional.h> #include <pybind11/stl.h> -#include <gpu/VirtualFluids_GPU/Parameter/Parameter.h> +#include <gpu/core/Parameter/Parameter.h> #include "basics/constants/NumericConstants.h" #include <basics/config/ConfigurationFile.h> -#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h> +#include <gpu/core/PreCollisionInteractor/PreCollisionInteractor.h> using namespace vf::basics::constant; diff --git a/pythonbindings/src/gpu/submodules/pre_collision_interactor.cpp b/pythonbindings/src/gpu/submodules/pre_collision_interactor.cpp index 308f6c37aada14c8c25c69245f603274ae2f18d8..b75aa2f00f4da154b5ef53c9e1d1aa1562e7476c 100644 --- a/pythonbindings/src/gpu/submodules/pre_collision_interactor.cpp +++ b/pythonbindings/src/gpu/submodules/pre_collision_interactor.cpp @@ -32,7 +32,7 @@ //! \author Henry Korb //======================================================================================= #include <pybind11/pybind11.h> -#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h> +#include <gpu/core/PreCollisionInteractor/PreCollisionInteractor.h> namespace pre_collision_interactor { diff --git a/pythonbindings/src/gpu/submodules/precursor_writer.cpp b/pythonbindings/src/gpu/submodules/precursor_writer.cpp index 64164ef9993d7b4f22bff2390b418718f7c3208f..94499aff963a55f04d23c179393ff207bc13e9db 100644 --- a/pythonbindings/src/gpu/submodules/precursor_writer.cpp +++ b/pythonbindings/src/gpu/submodules/precursor_writer.cpp @@ -33,8 +33,8 @@ #include <pybind11/pybind11.h> #include <pybind11/stl.h> #include <pybind11/numpy.h> -#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h> -#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/PrecursorWriter.h> +#include <gpu/core/PreCollisionInteractor/PreCollisionInteractor.h> +#include <gpu/core/PreCollisionInteractor/PrecursorWriter.h> namespace precursor_writer { diff --git a/pythonbindings/src/gpu/submodules/probes.cpp b/pythonbindings/src/gpu/submodules/probes.cpp index 9c3fc8ab15234013a093dbe00f6654ea3257d4b0..5a679bb4d32b3b24fb4fe8ccd327d185e2b3a6df 100644 --- a/pythonbindings/src/gpu/submodules/probes.cpp +++ b/pythonbindings/src/gpu/submodules/probes.cpp @@ -32,12 +32,12 @@ //======================================================================================= #include <pybind11/pybind11.h> #include <pybind11/stl.h> -#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h> -#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.h> -#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.h> -#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.h> -#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlanarAverageProbe.h> -#include <gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h> +#include <gpu/core/PreCollisionInteractor/Probes/Probe.h> +#include <gpu/core/PreCollisionInteractor/Probes/PointProbe.h> +#include <gpu/core/PreCollisionInteractor/Probes/PlaneProbe.h> +#include <gpu/core/PreCollisionInteractor/Probes/WallModelProbe.h> +#include <gpu/core/PreCollisionInteractor/Probes/PlanarAverageProbe.h> +#include <gpu/core/PreCollisionInteractor/PreCollisionInteractor.h> namespace probes { diff --git a/pythonbindings/src/gpu/submodules/simulation.cpp b/pythonbindings/src/gpu/submodules/simulation.cpp index 545fe082fe59cacabde07052ccf1b041d0af7e25..2e45e58915461f3137011a9086eaacf9c6ec87d7 100644 --- a/pythonbindings/src/gpu/submodules/simulation.cpp +++ b/pythonbindings/src/gpu/submodules/simulation.cpp @@ -31,17 +31,17 @@ //! \author Henry Korb //======================================================================================= #include <pybind11/pybind11.h> -#include <gpu/VirtualFluids_GPU/LBM/Simulation.h> -#include <gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactory.h> -#include <gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactory.h> -#include <gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h> -#include <gpu/VirtualFluids_GPU/Parameter/Parameter.h> -#include <gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h> -#include <gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h> -#include <gpu/VirtualFluids_GPU/Output/DataWriter.h> -#include "gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactory.h" -#include "gpu/VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.h" -#include "gpu/VirtualFluids_GPU/Factories/GridScalingFactory.h" +#include <gpu/core/LBM/Simulation.h> +#include <gpu/core/Kernel/KernelFactory/KernelFactory.h> +#include <gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactory.h> +#include <gpu/core/DataStructureInitializer/GridProvider.h> +#include <gpu/core/Parameter/Parameter.h> +#include <gpu/core/GPU/CudaMemoryManager.h> +#include <gpu/core/DataStructureInitializer/GridProvider.h> +#include <gpu/core/Output/DataWriter.h> +#include "gpu/core/Factories/BoundaryConditionFactory.h" +#include "gpu/core/TurbulenceModels/TurbulenceModelFactory.h" +#include "gpu/core/Factories/GridScalingFactory.h" #include "parallel/Communicator.h" namespace simulation diff --git a/pythonbindings/src/gpu/submodules/turbulence_models.cpp b/pythonbindings/src/gpu/submodules/turbulence_models.cpp index cfbb9e56127fee0cd90a482dde258d8b96389989..025d544b66ae085fa1cbcbdc5e0ffad9fb3a168b 100644 --- a/pythonbindings/src/gpu/submodules/turbulence_models.cpp +++ b/pythonbindings/src/gpu/submodules/turbulence_models.cpp @@ -31,12 +31,13 @@ //! \author Henry Korb //======================================================================================= #include "pybind11/pybind11.h" -#include "gpu/VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.h" -#include "gpu/VirtualFluids_GPU/LBM/LB.h" +#include "gpu/core/TurbulenceModels/TurbulenceModelFactory.h" +#include "gpu/core/LBM/LB.h" namespace turbulence_model { namespace py = pybind11; + using namespace vf::lbm; void makeModule(py::module_ &parentModule) { diff --git a/regression-tests/__regression_test_executer.sh b/regression-tests/__regression_test_executer.sh index 2541619299110bfcb872e48035c6e5e9fb8d7672..868b505c89e0ba8f581ab2cfcd8b1a95a08d4120 100644 --- a/regression-tests/__regression_test_executer.sh +++ b/regression-tests/__regression_test_executer.sh @@ -25,5 +25,5 @@ run_regression_test () { $3 # execute fieldcompare (A more comprehensive manual can be found here https://gitlab.com/dglaeser/fieldcompare) - fieldcompare dir $4 reference_data/$1 --include-files "*.vtu" + fieldcompare dir $4 reference_data/$1 --include-files "*.vtu" $5 } \ No newline at end of file diff --git a/regression-tests/actuator_line_test.sh b/regression-tests/actuator_line_test.sh new file mode 100755 index 0000000000000000000000000000000000000000..6459154f325bcf81d3cfa2d3b7fc9c5a06638044 --- /dev/null +++ b/regression-tests/actuator_line_test.sh @@ -0,0 +1,19 @@ +#!/bin/bash +source ./regression-tests/__regression_test_executer.sh + + +# 1. set reference data directory (must match the folder structure in https://github.com/irmb/test_data) +REFERENCE_DATA_DIR=regression_tests/gpu/ActuatorLine + +# 2. set cmake flags for the build of VirtualFluids +CMAKE_FLAGS="--preset=make_gpu -DCMAKE_BUILD_TYPE=Release -DCMAKE_CUDA_ARCHITECTURES=75 -DUSER_APPS=apps/gpu/ActuatorLineRegression" + +# 3. define the application to be executed +APPLICATION=./build/bin/ActuatorLineRegression + +# 4. set the path to the produced data +RESULT_DATA_DIR=output/ActuatorLine + + +run_regression_test "$REFERENCE_DATA_DIR" "$CMAKE_FLAGS" "$APPLICATION" "$RESULT_DATA_DIR" --ignore-missing-reference-files + diff --git a/regression-tests/driven_cavity_test.sh b/regression-tests/driven_cavity_test.sh index e4a7dcf050c81ea7f3ccd99cffd58edab80959bd..04b0478a08a476ef9204103dd7a105d0b6de49b2 100755 --- a/regression-tests/driven_cavity_test.sh +++ b/regression-tests/driven_cavity_test.sh @@ -16,4 +16,3 @@ RESULT_DATA_DIR=output/DrivenCavity run_regression_test "$REFERENCE_DATA_DIR" "$CMAKE_FLAGS" "$APPLICATION" "$RESULT_DATA_DIR" - diff --git a/regression-tests/flow_around_cylinder_test.sh b/regression-tests/flow_around_cylinder_test.sh index 1b0440abef66afb0aed4efc0f05173f1917ab24b..267bd7e808b3be9365fadc3dde990f97fe7846ae 100755 --- a/regression-tests/flow_around_cylinder_test.sh +++ b/regression-tests/flow_around_cylinder_test.sh @@ -4,7 +4,7 @@ source ./regression-tests/__regression_test_executer.sh # 1. set reference data directory (must match the folder structure in https://github.com/irmb/test_data) -REFERENCE_DATA_DIR=regression_tests/cpu/FlowAroundCylinder_2023_06 +REFERENCE_DATA_DIR=regression_tests/cpu/FlowAroundCylinder # 2. set cmake flags for the build of VirtualFluids CMAKE_FLAGS="--preset=make_cpu -DCMAKE_BUILD_TYPE=Release" diff --git a/regression-tests/hpc-test/.gitlab-ci-hpc-test.yml b/regression-tests/hpc-test/.gitlab-ci-hpc-test.yml new file mode 100644 index 0000000000000000000000000000000000000000..a3220707d8ae7328518643a3f0282c82e1dd8ca0 --- /dev/null +++ b/regression-tests/hpc-test/.gitlab-ci-hpc-test.yml @@ -0,0 +1,88 @@ +############################################################################### +# 1. builds the singularity container using a docker container +# Needs a priviliged gitlab runner. +# Input: Containers/rockylinux9-mpich.def +# Output: Containers/rockylinux9-mpich.sif +############################################################################### +build-singularity-image: + image: + name: quay.io/singularity/singularity:v3.10.4 + entrypoint: [""] + + stage: build + + tags: + - linux + - privileged + + variables: + SINGULARITY_IMAGE: "regression-tests/hpc-test/Rockylinux9.sif" + SINGULARITY_FILE: "regression-tests/hpc-test/Rockylinux9.def" + + artifacts: + expire_in: 1 hrs + paths: + - $SINGULARITY_IMAGE + + cache: + key: + files: + - $SINGULARITY_FILE + paths: + - regression-tests/hpc-test/ + + script: + - | + if [[ -f $SINGULARITY_IMAGE ]]; then + echo "Cached version of $SINGULARITY_IMAGE used. Clear cache to force rebuild." + exit 0 + fi + - singularity build $SINGULARITY_IMAGE $SINGULARITY_FILE + + +############################################################################### +# 2. runs the container on the hpc cluster using hpc-rocket +# rocket.yml used the configuration file rocket.yml, copies the defined data +# to the cluster, submits a slurm job and copies data back +# Output: result data located in results-regression-test/ +############################################################################### +run-simulation: + image: python:3.10 + + stage: test + + needs: ["build-singularity-image"] + + before_script: + - pip install hpc-rocket==0.4.0 + + script: + - hpc-rocket launch --watch regression-tests/hpc-test/rocket.yml + - cat results-regression-test/virtualfluids.out + + artifacts: + expire_in: 1 hrs + paths: + - results-regression-test/ + +############################################################################### +# 3. runs a regression data using fieldcompare +# Fieldcompare compares the in the last job produced data from results-regression-test/ +# with a set of reference files located in reference_data/ +############################################################################### +validate-simulation: + image: python:3.10 + + stage: test + + needs: ["run-simulation"] + + before_script: + - pip install "fieldcompare[all]" + - fieldcompare --version + - rm -rf reference_data && mkdir -p reference_data + - git clone --depth 1 --filter=blob:none --sparse https://github.com/irmb/test_data reference_data + - cd reference_data && git sparse-checkout add regression_tests/cpu/FlowAroundCylinder4processes && cd .. + + script: + - fieldcompare dir results-regression-test/FlowAroundCylinder reference_data/regression_tests/cpu/FlowAroundCylinder4processes --include-files "*.vtu" diff --git a/regression-tests/hpc-test/Rockylinux9.def b/regression-tests/hpc-test/Rockylinux9.def new file mode 100644 index 0000000000000000000000000000000000000000..08bc930f24cfd0de0a1ca4fce0646d2dff5d8384 --- /dev/null +++ b/regression-tests/hpc-test/Rockylinux9.def @@ -0,0 +1,47 @@ +BootStrap: docker +From: rockylinux:9 +Stage: build + +%files + src src + CMakeLists.txt CMakeLists.txt + CMakePresets.json CMakePresets.json + apps apps + CMake CMake + 3rdParty 3rdParty + pythonbindings pythonbindings + Python Python + pyproject.toml pyproject.toml + cpu.cmake cpu.cmake + gpu.cmake gpu.cmake + + +%post + yum update -y && \ + yum group install -y "Development Tools" && \ + yum install -y \ + mpich \ + mpich-devel \ + cmake && \ + source /etc/profile.d/modules.sh && \ + module load mpi && \ + mkdir build && cd build && cmake .. -DBUILD_VF_CPU=ON -DBUILD_VF_DOUBLE_ACCURACY=ON && make -j8 + + +BootStrap: docker +From: rockylinux:9 +Stage: runtime + +%files from build + build build + +%environment + export MPI_DIR=/cluster/mpi/mpich + export PATH="$MPI_DIR/bin:$PATH" + export LD_LIBRARY_PATH="$MPI_DIR/lib:$LD_LIBRARY_PATH" + +%post + yum update -y && \ + yum install -y \ + gcc-toolset-12 \ + compat-libgfortran-48 \ No newline at end of file diff --git a/regression-tests/hpc-test/rocket.yml b/regression-tests/hpc-test/rocket.yml new file mode 100644 index 0000000000000000000000000000000000000000..53eb4181e01b674af1b4da43ce9028edb25ab9dd --- /dev/null +++ b/regression-tests/hpc-test/rocket.yml @@ -0,0 +1,32 @@ +host: $PHOENIX_REMOTE_HOST +user: $PHOENIX_REMOTE_USER +private_keyfile: $PHOENIX_PRIVATE_KEY + +copy: + - from: regression-tests/hpc-test/test.job.sh + to: virtualfluids-mpich-bind/test.job + overwrite: true + + - from: regression-tests/hpc-test/Rockylinux9.sif + to: virtualfluids-mpich-bind/Rockylinux9.sif + overwrite: true + + - from: apps/cpu/FlowAroundCylinder/cylinder.cfg + to: virtualfluids-mpich-bind/cylinder.cfg + overwrite: true + +collect: + - from: virtualfluids-mpich-bind/output/ + to: results-regression-test/ + overwrite: true + + - from: virtualfluids-mpich-bind/virtualfluids.out + to: results-regression-test/virtualfluids.out + overwrite: true + + +#clean: +# - laplace2d/* + +sbatch: virtualfluids-mpich-bind/test.job +continue_if_job_fails: true diff --git a/regression-tests/hpc-test/test.job.sh b/regression-tests/hpc-test/test.job.sh new file mode 100644 index 0000000000000000000000000000000000000000..489df438ce43fd05f4f8ab73b8cc259a5fb1fc8b --- /dev/null +++ b/regression-tests/hpc-test/test.job.sh @@ -0,0 +1,28 @@ +#!/bin/bash -l + +#SBATCH --partition=standard +#SBATCH --nodes=1 +#SBATCH --time=01:00:00 +#SBATCH --job-name=VirtualFluids +#SBATCH --ntasks-per-node=4 +#SBATCH --output=virtualfluids-mpich-bind/virtualfluids.out + +date + +echo "SLURM_JOBID="$SLURM_JOBID +echo "SLURM_JOB_NODELIST"=$SLURM_JOB_NODELIST +echo "SLURM_NNODES"=$SLURM_NNODES +echo "SLURM_TASKS_PER_NODE"=$SLURM_TASKS_PER_NODE +echo "working directory = "$SLURM_SUBMIT_DIR +echo "" + +module purge +module load singularity/3.9.9 +module load mpi/mpich/mpich_3.2 +module list + +cd virtualfluids-mpich-bind/ +mkdir -p results + +export MPI_DIR="/cluster/mpi/mpich" +srun --mpi=pmi2 singularity exec --bind "$MPI_DIR" rockylinux9-mpich-bind.sif /build/bin/FlowAroundCylinder cylinder.cfg diff --git a/src/basics/CMakeLists.txt b/src/basics/CMakeLists.txt index 7e4cccf26f0c54a47d720f8d33fad435800838b7..8ef4841bf640f156f8f2573f286e7613ea3c0941 100644 --- a/src/basics/CMakeLists.txt +++ b/src/basics/CMakeLists.txt @@ -13,6 +13,7 @@ target_include_directories(${library_name} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/pa target_include_directories(${library_name} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/transmitter) target_include_directories(${library_name} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/utilities) target_include_directories(${library_name} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/writer) +target_include_directories(${library_name} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) diff --git a/src/basics/constants/NumericConstants.h b/src/basics/constants/NumericConstants.h index 305805de4f1532de51bae15b92cfda80a5b2f4ab..5e1a32c8fb696ee0c9fcebc0a4ba84a1b39fd971 100644 --- a/src/basics/constants/NumericConstants.h +++ b/src/basics/constants/NumericConstants.h @@ -114,10 +114,10 @@ static constexpr double c264o1 = 264.; static constexpr double c290o1 = 290.; static constexpr double c367o1 = 367.; -static constexpr double Op0000002 = 0.0000002; +static constexpr double c0p0000002 = 0.0000002; static constexpr double c10eM30 = 1e-30; static constexpr double c10eM10 = 1e-10; -static constexpr double smallSingle = 0.0000000002; +static constexpr double cSmallSingle = 0.0000000002; #ifndef __CUDACC__ static const double cPi = 4.0 * std::atan(1.0); // 3.1415926535 @@ -131,10 +131,10 @@ static constexpr double cPio180 = 1.74532925199e-2; static constexpr double c180oPi = 57.2957795131; #endif -static const double one_over_sqrt2 = 1.0 / sqrt(2.0); // 0.707106781 -static const double one_over_sqrt3 = 1.0 / sqrt(3.0); // 0.577350269 -static const double sqrt2 = sqrt(2.0); // 1.4142135 -static const double sqrt3 = sqrt(3.0); // 1.7320508 +static const double c1oSqrt2 = 1.0 / sqrt(2.0); // 0.707106781 +static const double c1oSqrt3 = 1.0 / sqrt(3.0); // 0.577350269 +static const double cSqrt2 = sqrt(2.0); // 1.4142135 +static const double cSqrt3 = sqrt(3.0); // 1.7320508 #else static constexpr float c1o2 = 1.0f / 2.0f; @@ -242,10 +242,10 @@ static constexpr float c264o1 = 264.0f; static constexpr float c290o1 = 290.0f; static constexpr float c367o1 = 367.0f; -static constexpr float Op0000002 = 0.0000002f; +static constexpr float c0p0000002 = 0.0000002f; static constexpr float c10eM30 = 1e-30f; static constexpr float c10eM10 = 1e-10f; -static constexpr float smallSingle = 0.0000000002f; +static constexpr float cSmallSingle = 0.0000000002f; #ifndef __CUDACC__ static const float cPi = 4.0f * std::atan(1.0f); // 3.1415926535 @@ -259,10 +259,10 @@ static constexpr float cPio180 = 1.74532925199e-2f; static constexpr float c180oPi = 57.2957795131f; #endif -static const float one_over_sqrt2 = 1.0 / sqrtf(2.0); // 0.707106781 -static const float one_over_sqrt3 = 1.0 / sqrtf(3.0); // 0.577350269 -static const float sqrt2 = sqrtf(2.0); // 1.4142135 -static const float sqrt3 = sqrtf(3.0); // 1.7320508 +static const float c1oSqrt2 = 1.0 / sqrtf(2.0); // 0.707106781 +static const float c1oSqrt3 = 1.0 / sqrtf(3.0); // 0.577350269 +static const float cSqrt2 = sqrtf(2.0); // 1.4142135 +static const float cSqrt3 = sqrtf(3.0); // 1.7320508 #endif diff --git a/src/basics/geometry3d/GbTriFaceMesh3D.h b/src/basics/geometry3d/GbTriFaceMesh3D.h index 33ddbe2fdd82fb1cfd8fe96fd8b98843a6e82879..dadbd86276b87a4eac61067a832dd9da25e4fa07 100644 --- a/src/basics/geometry3d/GbTriFaceMesh3D.h +++ b/src/basics/geometry3d/GbTriFaceMesh3D.h @@ -46,6 +46,8 @@ #include <PointerDefinitions.h> +#include "basics/constants/NumericConstants.h" + #include <basics_export.h> namespace Kd @@ -201,15 +203,15 @@ public: float getX1Centroid(std::vector<Vertex> &nodes) { - return (float)UbMath::c1o3 * (getV1x(nodes) + getV2x(nodes) + getV3x(nodes)); + return (float)vf::basics::constant::c1o3 * (getV1x(nodes) + getV2x(nodes) + getV3x(nodes)); } float getX2Centroid(std::vector<Vertex> &nodes) { - return (float)UbMath::c1o3 * (getV1y(nodes) + getV2y(nodes) + getV3y(nodes)); + return (float)vf::basics::constant::c1o3 * (getV1y(nodes) + getV2y(nodes) + getV3y(nodes)); } float getX3Centroid(std::vector<Vertex> &nodes) { - return (float)UbMath::c1o3 * (getV1z(nodes) + getV2z(nodes) + getV3z(nodes)); + return (float)vf::basics::constant::c1o3 * (getV1z(nodes) + getV2z(nodes) + getV3z(nodes)); } double calculateDistanceToPoint3D(const double &x1, const double &x2, const double &x3, diff --git a/src/basics/geometry3d/GbVoxelMatrix3D.cpp b/src/basics/geometry3d/GbVoxelMatrix3D.cpp index 5040b54c8dacbd17317a35c451d82f1ad20b0edf..130eaf655c3fb42544d71508a16b6b9212039df7 100644 --- a/src/basics/geometry3d/GbVoxelMatrix3D.cpp +++ b/src/basics/geometry3d/GbVoxelMatrix3D.cpp @@ -174,11 +174,11 @@ double GbVoxelMatrix3D::getIntersectionRaytraceFactor(const double &x1, const do const double &rx1, const double &rx2, const double &rx3) { if (!((UbMath::equal(rx1, 0.0) || UbMath::equal(fabs(rx1), 1.0) || - UbMath::equal(fabs(rx1), vf::basics::constant::one_over_sqrt2) || UbMath::equal(fabs(rx1), vf::basics::constant::one_over_sqrt3)) && + UbMath::equal(fabs(rx1), vf::basics::constant::c1oSqrt2) || UbMath::equal(fabs(rx1), vf::basics::constant::c1oSqrt3)) && (UbMath::equal(rx2, 0.0) || UbMath::equal(fabs(rx2), 1.0) || - UbMath::equal(fabs(rx2), vf::basics::constant::one_over_sqrt2) || UbMath::equal(fabs(rx2), vf::basics::constant::one_over_sqrt3)) && + UbMath::equal(fabs(rx2), vf::basics::constant::c1oSqrt2) || UbMath::equal(fabs(rx2), vf::basics::constant::c1oSqrt3)) && (UbMath::equal(rx3, 0.0) || UbMath::equal(fabs(rx3), 1.0) || - UbMath::equal(fabs(rx3), vf::basics::constant::one_over_sqrt2) || UbMath::equal(fabs(rx3), vf::basics::constant::one_over_sqrt3)))) { + UbMath::equal(fabs(rx3), vf::basics::constant::c1oSqrt2) || UbMath::equal(fabs(rx3), vf::basics::constant::c1oSqrt3)))) { throw UbException(UB_EXARGS, "nur fuer diskrete Boltzmannrichungen implementiert!!!"); } diff --git a/src/basics/utilities/UbMath.h b/src/basics/utilities/UbMath.h index 5ba42eb6b0c00941c72ea8370ab3fe0cef71ba98..d9deaeab61412835829fe66d98d20cc9d42fca35 100644 --- a/src/basics/utilities/UbMath.h +++ b/src/basics/utilities/UbMath.h @@ -408,99 +408,6 @@ inline const T &min(const T &a1, const T &a2, const T &a3, const T &a4) // return tmp; } -////////////////////////////////////////////////////////////////////////// -// -// constants -// -////////////////////////////////////////////////////////////////////////// -//static const double c8o27 = 8. / 27.; -//static const double c2o27 = 2. / 27.; -//static const double c1o54 = 1. / 54.; -//static const double c1o216 = 1. / 216.; -//static const double c9o2 = 9. / 2.; // 4.5 -//static const double c9o4 = 9. / 4.; // 2.25 -//static const double c3o9 = 3. / 9.; -//static const double c3o54 = 3. / 54.; -//static const double c3o216 = 3. / 216.; -// -//static const double c1o27 = 1. / 27.; -// -//static const double c1o72 = 1. / 72.; // 0.01388888 -//static const double c1o36 = 1. / 36.; // 0.02777777 -//static const double c1o48 = 1. / 48.; // 0.02083333 -//static const double c1o32 = 1. / 32.; // 0.03125 -//static const double c1o24 = 1. / 24.; // 0.04166666 -//static const double c1o20 = 1. / 20.; // 0.05 -//static const double c1o18 = 1. / 18.; // 0.05555555 -//static const double c1o16 = 1. / 16.; // 0.0625 -//static const double c1o12 = 1. / 12.; // 0.08333333 -//static const double c1o9 = 1. / 9.; // 0.11111111 -//static const double c1o8 = 1. / 8.; // 0.125 -//static const double c1o6 = 1. / 6.; // 0.16666666 -//static const double c1o5 = 1. / 5.; // 0.2 -//static const double c1o4 = 1. / 4.; // 0.25 -//static const double c1o100 = 1. / 100.; -//static const double c5o16 = 5. / 16.; // 0.3125 -static const double c1o3 = 1. / 3.; // 0.33333333 -//static const double c3o8 = 3. / 8.; // 0.375 -//static const double c4o9 = 4. / 9.; // 0.44444444 -//static const double c1o2 = 1. / 2.; // 0.5 -//static const double c9o16 = 9. / 16.; // 0.5625 -//static const double c2o3 = 2. / 3.; // 0.66666666 -//static const double c3o4 = 3. / 4.; // 0.75 -//static const double c3o2 = 3. / 2.; // 1.5 -//static const double c4o3 = 4. / 3.; // 1.33333333 -//static const double c5o3 = 5. / 3.; // 1.66666666 -//static const double c9o5 = 9. / 5.; // 1.8 -//static const double c2o9 = 2. / 9.; // 0.22222222 -//static const double one_over_sqrt2 = 1.0 / sqrt(2.0); // 0.707106781 -//static const double one_over_sqrt3 = 1.0 / sqrt(3.0); // 0.577350269 -//static const double sqrt2 = sqrt(2.0); // 1.4142135 -//static const double sqrt3 = sqrt(3.0); // 1.7320508 -//static const double zeroReal = 0.0; -//static const double c1 = 1.0; -//static const double c2 = 2.0; -//static const double c3 = 3.0; -//static const double c4 = 4.0; -//static const double c5 = 5.0; -//static const double c6 = 6.0; -//static const double c7 = 7.0; -//static const double c8 = 8.0; -//static const double c9 = 9.0; -//static const double c14 = 14.0; -//static const double c15 = 15.0; -//static const double c16 = 16.0; -//static const double c18 = 18.0; -//static const double c21 = 21.0; -//static const double c24 = 24.0; -//static const double c28 = 28.0; -//static const double c29 = 29.0; -//static const double c36 = 36.0; -//static const double c48 = 48.0; -//static const double c50 = 50.0; -//static const double c56 = 56.0; -//static const double c152 = 152.0; -//static const double c130 = 130.0; -//static const double one = 1.0; -//static const double two = 2.0; -//static const double three = 3.0; -//static const double four = 4.0; -//static const double five = 5.0; -//static const double six = 6.0; -//static const double seven = 7.0; -//static const double eight = 8.0; -//static const double nine = 9.0; -//static const double fourteen = 14.0; -//static const double fiveteen = 15.0; -//static const double sixteen = 16.0; -//static const double twentyone = 21.0; -//static const double twentyfour = 24.0; -//static const double twentyeight = 28.0; -//static const double twentynine = 29.0; -//static const double fourtyeight = 48.0; -//static const double fifty = 50.0; -//static const double fiftysix = 56.0; - } // namespace UbMath #endif diff --git a/src/basics/utilities/UbTuple.h b/src/basics/utilities/UbTuple.h index 228ab48898e5e61777d2fcc0061eb6f0434d5cad..fea300eb62e2b186ce93b86d446a2bf4072af9f7 100644 --- a/src/basics/utilities/UbTuple.h +++ b/src/basics/utilities/UbTuple.h @@ -33,6 +33,7 @@ #ifndef UBTUPLE_H #define UBTUPLE_H +#include <array> #include <iostream> #include <ostream> #include <string> @@ -594,6 +595,15 @@ inline UbTuple<T1, T2, T3, T4, T5, T6, T7, T8> makeUbTuple(T1 const &a1, T2 cons return UbTuple<T1, T2, T3, T4, T5, T6, T7, T8>(a1, a2, a3, a4, a5, a6, a7, a8); } +// convenience function for 8 arguments +template <typename T> +inline UbTuple<T, T, T, T, T, T, T, T> makeUbTupleFromArray(const std::array<T, 8>& array) +{ + return UbTuple<T, T, T, T, T, T, T, T>(array[0], array[1], array[2], array[3], array[4], array[5], array[6], array[7]); +} + + + // some typedefs using UbTupleFloat2 = UbTuple<float, float>; using UbTupleFloat3 = UbTuple<float, float, float>; diff --git a/src/cpu/LiggghtsCoupling/CMakeLists.txt b/src/cpu/LiggghtsCoupling/CMakeLists.txt index ed9d1f0e2bd8d0302f1d37aa3bde8a120ceb2312..3aa679efdd83810ec0e55f651589e7b531d3971b 100644 --- a/src/cpu/LiggghtsCoupling/CMakeLists.txt +++ b/src/cpu/LiggghtsCoupling/CMakeLists.txt @@ -1,7 +1,7 @@ set(LIGGGHTS_LIBRARIES optimized ${LIGGGHTS_RELEASE_LIBRARY} debug ${LIGGGHTS_DEBUG_LIBRARY}) -vf_add_library(BUILDTYPE static PUBLIC_LINK basics muparser MPI::MPI_CXX VirtualFluidsCore ${LIGGGHTS_LIBRARIES}) +vf_add_library(BUILDTYPE static PUBLIC_LINK basics muparser MPI::MPI_CXX cpu_core ${LIGGGHTS_LIBRARIES}) vf_get_library_name(library_name) diff --git a/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.cpp b/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.cpp index efe93f4c951684e41e6dd1c4d2b81c57c711727f..7c85c77b87f6d0079e5cd82520b932e76433d012 100644 --- a/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.cpp +++ b/src/cpu/LiggghtsCoupling/LBM/IBcumulantK17LBMKernel.cpp @@ -226,66 +226,66 @@ void IBcumulantK17LBMKernel::calculate(int step) LBMReal fEqSolid[D3Q27System::ENDF + 1]; LBMReal fPre[D3Q27System::ENDF + 1]; - f[vf::lbm::dir::DIR_000] = mfbbb; - - f[vf::lbm::dir::DIR_P00] = mfcbb; - f[vf::lbm::dir::DIR_0P0] = mfbcb; - f[vf::lbm::dir::DIR_00P] = mfbbc; - f[vf::lbm::dir::DIR_PP0] = mfccb; - f[vf::lbm::dir::DIR_MP0] = mfacb; - f[vf::lbm::dir::DIR_P0P] = mfcbc; - f[vf::lbm::dir::DIR_M0P] = mfabc; - f[vf::lbm::dir::DIR_0PP] = mfbcc; - f[vf::lbm::dir::DIR_0MP] = mfbac; - f[vf::lbm::dir::DIR_PPP] = mfccc; - f[vf::lbm::dir::DIR_MPP] = mfacc; - f[vf::lbm::dir::DIR_PMP] = mfcac; - f[vf::lbm::dir::DIR_MMP] = mfaac; - - f[vf::lbm::dir::DIR_M00] = mfabb; - f[vf::lbm::dir::DIR_0M0] = mfbab; - f[vf::lbm::dir::DIR_00M] = mfbba; - f[vf::lbm::dir::DIR_MM0] = mfaab; - f[vf::lbm::dir::DIR_PM0] = mfcab; - f[vf::lbm::dir::DIR_M0M] = mfaba; - f[vf::lbm::dir::DIR_P0M] = mfcba; - f[vf::lbm::dir::DIR_0MM] = mfbaa; - f[vf::lbm::dir::DIR_0PM] = mfbca; - f[vf::lbm::dir::DIR_MMM] = mfaaa; - f[vf::lbm::dir::DIR_PMM] = mfcaa; - f[vf::lbm::dir::DIR_MPM] = mfaca; - f[vf::lbm::dir::DIR_PPM] = mfcca; + f[vf::lbm::dir::d000] = mfbbb; + + f[vf::lbm::dir::dP00] = mfcbb; + f[vf::lbm::dir::d0P0] = mfbcb; + f[vf::lbm::dir::d00P] = mfbbc; + f[vf::lbm::dir::dPP0] = mfccb; + f[vf::lbm::dir::dMP0] = mfacb; + f[vf::lbm::dir::dP0P] = mfcbc; + f[vf::lbm::dir::dM0P] = mfabc; + f[vf::lbm::dir::d0PP] = mfbcc; + f[vf::lbm::dir::d0MP] = mfbac; + f[vf::lbm::dir::dPPP] = mfccc; + f[vf::lbm::dir::dMPP] = mfacc; + f[vf::lbm::dir::dPMP] = mfcac; + f[vf::lbm::dir::dMMP] = mfaac; + + f[vf::lbm::dir::dM00] = mfabb; + f[vf::lbm::dir::d0M0] = mfbab; + f[vf::lbm::dir::d00M] = mfbba; + f[vf::lbm::dir::dMM0] = mfaab; + f[vf::lbm::dir::dPM0] = mfcab; + f[vf::lbm::dir::dM0M] = mfaba; + f[vf::lbm::dir::dP0M] = mfcba; + f[vf::lbm::dir::d0MM] = mfbaa; + f[vf::lbm::dir::d0PM] = mfbca; + f[vf::lbm::dir::dMMM] = mfaaa; + f[vf::lbm::dir::dPMM] = mfcaa; + f[vf::lbm::dir::dMPM] = mfaca; + f[vf::lbm::dir::dPPM] = mfcca; if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MIN) { - fPre[vf::lbm::dir::DIR_000] = mfbbb; - - fPre[vf::lbm::dir::DIR_P00] = mfcbb; - fPre[vf::lbm::dir::DIR_0P0] = mfbcb; - fPre[vf::lbm::dir::DIR_00P] = mfbbc; - fPre[vf::lbm::dir::DIR_PP0] = mfccb; - fPre[vf::lbm::dir::DIR_MP0] = mfacb; - fPre[vf::lbm::dir::DIR_P0P] = mfcbc; - fPre[vf::lbm::dir::DIR_M0P] = mfabc; - fPre[vf::lbm::dir::DIR_0PP] = mfbcc; - fPre[vf::lbm::dir::DIR_0MP] = mfbac; - fPre[vf::lbm::dir::DIR_PPP] = mfccc; - fPre[vf::lbm::dir::DIR_MPP] = mfacc; - fPre[vf::lbm::dir::DIR_PMP] = mfcac; - fPre[vf::lbm::dir::DIR_MMP] = mfaac; + fPre[vf::lbm::dir::d000] = mfbbb; + + fPre[vf::lbm::dir::dP00] = mfcbb; + fPre[vf::lbm::dir::d0P0] = mfbcb; + fPre[vf::lbm::dir::d00P] = mfbbc; + fPre[vf::lbm::dir::dPP0] = mfccb; + fPre[vf::lbm::dir::dMP0] = mfacb; + fPre[vf::lbm::dir::dP0P] = mfcbc; + fPre[vf::lbm::dir::dM0P] = mfabc; + fPre[vf::lbm::dir::d0PP] = mfbcc; + fPre[vf::lbm::dir::d0MP] = mfbac; + fPre[vf::lbm::dir::dPPP] = mfccc; + fPre[vf::lbm::dir::dMPP] = mfacc; + fPre[vf::lbm::dir::dPMP] = mfcac; + fPre[vf::lbm::dir::dMMP] = mfaac; - fPre[vf::lbm::dir::DIR_M00] = mfabb; - fPre[vf::lbm::dir::DIR_0M0] = mfbab; - fPre[vf::lbm::dir::DIR_00M] = mfbba; - fPre[vf::lbm::dir::DIR_MM0] = mfaab; - fPre[vf::lbm::dir::DIR_PM0] = mfcab; - fPre[vf::lbm::dir::DIR_M0M] = mfaba; - fPre[vf::lbm::dir::DIR_P0M] = mfcba; - fPre[vf::lbm::dir::DIR_0MM] = mfbaa; - fPre[vf::lbm::dir::DIR_0PM] = mfbca; - fPre[vf::lbm::dir::DIR_MMM] = mfaaa; - fPre[vf::lbm::dir::DIR_PMM] = mfcaa; - fPre[vf::lbm::dir::DIR_MPM] = mfaca; - fPre[vf::lbm::dir::DIR_PPM] = mfcca; + fPre[vf::lbm::dir::dM00] = mfabb; + fPre[vf::lbm::dir::d0M0] = mfbab; + fPre[vf::lbm::dir::d00M] = mfbba; + fPre[vf::lbm::dir::dMM0] = mfaab; + fPre[vf::lbm::dir::dPM0] = mfcab; + fPre[vf::lbm::dir::dM0M] = mfaba; + fPre[vf::lbm::dir::dP0M] = mfcba; + fPre[vf::lbm::dir::d0MM] = mfbaa; + fPre[vf::lbm::dir::d0PM] = mfbca; + fPre[vf::lbm::dir::dMMM] = mfaaa; + fPre[vf::lbm::dir::dPMM] = mfcaa; + fPre[vf::lbm::dir::dMPM] = mfaca; + fPre[vf::lbm::dir::dPPM] = mfcca; } (*particleData)(x1, x2, x3)->hydrodynamicForce.fill(0.0); @@ -783,35 +783,35 @@ void IBcumulantK17LBMKernel::calculate(int step) (*this->restDistributionsF)(x1, x2, x3) = mfbbb; ////////////////////////////////////////////////////////////////////////// - f[vf::lbm::dir::DIR_000] = mfbbb; + f[vf::lbm::dir::d000] = mfbbb; - f[vf::lbm::dir::DIR_P00] = mfcbb; - f[vf::lbm::dir::DIR_0P0] = mfbcb; - f[vf::lbm::dir::DIR_00P] = mfbbc; - f[vf::lbm::dir::DIR_PP0] = mfccb; - f[vf::lbm::dir::DIR_MP0] = mfacb; - f[vf::lbm::dir::DIR_P0P] = mfcbc; - f[vf::lbm::dir::DIR_M0P] = mfabc; - f[vf::lbm::dir::DIR_0PP] = mfbcc; - f[vf::lbm::dir::DIR_0MP] = mfbac; - f[vf::lbm::dir::DIR_PPP] = mfccc; - f[vf::lbm::dir::DIR_MPP] = mfacc; - f[vf::lbm::dir::DIR_PMP] = mfcac; - f[vf::lbm::dir::DIR_MMP] = mfaac; + f[vf::lbm::dir::dP00] = mfcbb; + f[vf::lbm::dir::d0P0] = mfbcb; + f[vf::lbm::dir::d00P] = mfbbc; + f[vf::lbm::dir::dPP0] = mfccb; + f[vf::lbm::dir::dMP0] = mfacb; + f[vf::lbm::dir::dP0P] = mfcbc; + f[vf::lbm::dir::dM0P] = mfabc; + f[vf::lbm::dir::d0PP] = mfbcc; + f[vf::lbm::dir::d0MP] = mfbac; + f[vf::lbm::dir::dPPP] = mfccc; + f[vf::lbm::dir::dMPP] = mfacc; + f[vf::lbm::dir::dPMP] = mfcac; + f[vf::lbm::dir::dMMP] = mfaac; - f[vf::lbm::dir::DIR_M00] = mfabb; - f[vf::lbm::dir::DIR_0M0] = mfbab; - f[vf::lbm::dir::DIR_00M] = mfbba; - f[vf::lbm::dir::DIR_MM0] = mfaab; - f[vf::lbm::dir::DIR_PM0] = mfcab; - f[vf::lbm::dir::DIR_M0M] = mfaba; - f[vf::lbm::dir::DIR_P0M] = mfcba; - f[vf::lbm::dir::DIR_0MM] = mfbaa; - f[vf::lbm::dir::DIR_0PM] = mfbca; - f[vf::lbm::dir::DIR_MMM] = mfaaa; - f[vf::lbm::dir::DIR_PMM] = mfcaa; - f[vf::lbm::dir::DIR_MPM] = mfaca; - f[vf::lbm::dir::DIR_PPM] = mfcca; + f[vf::lbm::dir::dM00] = mfabb; + f[vf::lbm::dir::d0M0] = mfbab; + f[vf::lbm::dir::d00M] = mfbba; + f[vf::lbm::dir::dMM0] = mfaab; + f[vf::lbm::dir::dPM0] = mfcab; + f[vf::lbm::dir::dM0M] = mfaba; + f[vf::lbm::dir::dP0M] = mfcba; + f[vf::lbm::dir::d0MM] = mfbaa; + f[vf::lbm::dir::d0PM] = mfbca; + f[vf::lbm::dir::dMMM] = mfaaa; + f[vf::lbm::dir::dPMM] = mfcaa; + f[vf::lbm::dir::dMPM] = mfaca; + f[vf::lbm::dir::dPPM] = mfcca; } if ((*particleData)(x1, x2, x3)->solidFraction >= SOLFRAC_MIN) { // if ((*particleData)(x1, x2, x3)->solidFraction < SOLFRAC_MIN) @@ -829,8 +829,8 @@ void IBcumulantK17LBMKernel::calculate(int step) D3Q27System::calcCompFeq(fEqSolid, drho, uPart[0], uPart[1], uPart[2]); if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MAX) { - double const bb0 = fEq[vf::lbm::dir::DIR_000] - fEqSolid[vf::lbm::dir::DIR_000]; - f[vf::lbm::dir::DIR_000] = fPre[vf::lbm::dir::DIR_000] + bb0; + double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000]; + f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + bb0; for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) { const int iOpp = D3Q27System::INVDIR[iPop]; double const bb = ((fPre[iOpp] - fEq[iOpp]) - (fPre[iPop] - fEqSolid[iPop])); @@ -853,8 +853,8 @@ void IBcumulantK17LBMKernel::calculate(int step) //#endif double const oneMinB = 1. - B; - double const bb0 = fEq[vf::lbm::dir::DIR_000] - fEqSolid[vf::lbm::dir::DIR_000]; - f[vf::lbm::dir::DIR_000] = fPre[vf::lbm::dir::DIR_000] + oneMinB * (f[vf::lbm::dir::DIR_000] - fPre[vf::lbm::dir::DIR_000]) + B * bb0; + double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000]; + f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + oneMinB * (f[vf::lbm::dir::d000] - fPre[vf::lbm::dir::d000]) + B * bb0; for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) { int const iOpp = D3Q27System::INVDIR[iPop]; @@ -870,35 +870,35 @@ void IBcumulantK17LBMKernel::calculate(int step) } } /* if solidFraction > SOLFRAC_MAX */ - (*this->restDistributionsF)(x1, x2, x3) = f[vf::lbm::dir::DIR_000]; - - (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = f[vf::lbm::dir::DIR_M00]; - (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = f[vf::lbm::dir::DIR_0M0]; - (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = f[vf::lbm::dir::DIR_00M]; - (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = f[vf::lbm::dir::DIR_MM0]; - (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = f[vf::lbm::dir::DIR_PM0]; - (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = f[vf::lbm::dir::DIR_M0M]; - (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = f[vf::lbm::dir::DIR_P0M]; - (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = f[vf::lbm::dir::DIR_0MM]; - (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = f[vf::lbm::dir::DIR_0PM]; - (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = f[vf::lbm::dir::DIR_MMM]; - (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = f[vf::lbm::dir::DIR_PMM]; - (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = f[vf::lbm::dir::DIR_MPM]; - (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[vf::lbm::dir::DIR_PPM]; - - (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = f[vf::lbm::dir::DIR_P00]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = f[vf::lbm::dir::DIR_0P0]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = f[vf::lbm::dir::DIR_00P]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = f[vf::lbm::dir::DIR_PP0]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = f[vf::lbm::dir::DIR_MP0]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = f[vf::lbm::dir::DIR_P0P]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = f[vf::lbm::dir::DIR_M0P]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = f[vf::lbm::dir::DIR_0PP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = f[vf::lbm::dir::DIR_0MP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[vf::lbm::dir::DIR_PPP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[vf::lbm::dir::DIR_MPP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[vf::lbm::dir::DIR_PMP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = f[vf::lbm::dir::DIR_MMP]; + (*this->restDistributionsF)(x1, x2, x3) = f[vf::lbm::dir::d000]; + + (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = f[vf::lbm::dir::dM00]; + (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = f[vf::lbm::dir::d0M0]; + (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = f[vf::lbm::dir::d00M]; + (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = f[vf::lbm::dir::dMM0]; + (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = f[vf::lbm::dir::dPM0]; + (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = f[vf::lbm::dir::dM0M]; + (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = f[vf::lbm::dir::dP0M]; + (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = f[vf::lbm::dir::d0MM]; + (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = f[vf::lbm::dir::d0PM]; + (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = f[vf::lbm::dir::dMMM]; + (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = f[vf::lbm::dir::dPMM]; + (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = f[vf::lbm::dir::dMPM]; + (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[vf::lbm::dir::dPPM]; + + (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = f[vf::lbm::dir::dP00]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = f[vf::lbm::dir::d0P0]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = f[vf::lbm::dir::d00P]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = f[vf::lbm::dir::dPP0]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = f[vf::lbm::dir::dMP0]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = f[vf::lbm::dir::dP0P]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = f[vf::lbm::dir::dM0P]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = f[vf::lbm::dir::d0PP]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = f[vf::lbm::dir::d0MP]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[vf::lbm::dir::dPPP]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[vf::lbm::dir::dMPP]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[vf::lbm::dir::dPMP]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = f[vf::lbm::dir::dMMP]; } } } diff --git a/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.cpp b/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.cpp index c502c4b48150e558aa785fa1bdc8c16bbecc1986..c935693c7157b77df9fe2566363e0a424f0737b3 100644 --- a/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.cpp +++ b/src/cpu/LiggghtsCoupling/LBM/IBsharpInterfaceLBMKernel.cpp @@ -305,24 +305,24 @@ void IBsharpInterfaceLBMKernel::calculate(int step) ////////////////////////////////Momentum conservation experiment 06.03.2023 // surfacetension - if ((((*phaseField)(x1, x2, x3) <= c1o2) || phi[DIR_000] <= c1o2) && - ((phi[DIR_P00] > c1o2) || (phi[DIR_M00] > c1o2) || (phi[DIR_00P] > c1o2) || (phi[DIR_00M] > c1o2) || (phi[DIR_0M0] > c1o2) || (phi[DIR_0P0] > c1o2) || (phi[DIR_PP0] > c1o2) || (phi[DIR_PM0] > c1o2) || (phi[DIR_P0P] > c1o2) || (phi[DIR_P0M] > c1o2) || (phi[DIR_MP0] > c1o2) || - (phi[DIR_MM0] > c1o2) || (phi[DIR_M0P] > c1o2) || (phi[DIR_M0M] > c1o2) || (phi[DIR_0PM] > c1o2) || (phi[DIR_0MM] > c1o2) || (phi[DIR_0PP] > c1o2) || (phi[DIR_0MP] > c1o2) || (phi[DIR_PPP] > c1o2) || (phi[DIR_PMP] > c1o2) || (phi[DIR_MPP] > c1o2) || (phi[DIR_MMP] > c1o2) || - (phi[DIR_PPM] > c1o2) || (phi[DIR_PMM] > c1o2) || (phi[DIR_MPM] > c1o2) || (phi[DIR_MMM] > c1o2))) { + if ((((*phaseField)(x1, x2, x3) <= c1o2) || phi[d000] <= c1o2) && + ((phi[dP00] > c1o2) || (phi[dM00] > c1o2) || (phi[d00P] > c1o2) || (phi[d00M] > c1o2) || (phi[d0M0] > c1o2) || (phi[d0P0] > c1o2) || (phi[dPP0] > c1o2) || (phi[dPM0] > c1o2) || (phi[dP0P] > c1o2) || (phi[dP0M] > c1o2) || (phi[dMP0] > c1o2) || + (phi[dMM0] > c1o2) || (phi[dM0P] > c1o2) || (phi[dM0M] > c1o2) || (phi[d0PM] > c1o2) || (phi[d0MM] > c1o2) || (phi[d0PP] > c1o2) || (phi[d0MP] > c1o2) || (phi[dPPP] > c1o2) || (phi[dPMP] > c1o2) || (phi[dMPP] > c1o2) || (phi[dMMP] > c1o2) || + (phi[dPPM] > c1o2) || (phi[dPMM] > c1o2) || (phi[dMPM] > c1o2) || (phi[dMMM] > c1o2))) { real vx = (*vxNode)(x1, x2, x3); real vy = (*vyNode)(x1, x2, x3); real vz = (*vzNode)(x1, x2, x3); findNeighbors(phaseField, x1, x2, x3); real laplacePressure = c12o1 * sigma * computeCurvature_phi(); // if (step > 5000) - // UBLOG(logINFO, x1 << ","<< x2 << ","<< x3 << " "<< "3*dP=" << laplacePressure << " dP=" << laplacePressure / 3.0<< " phi=" << phi[DIR_000]<< "\n"); + // UBLOG(logINFO, x1 << ","<< x2 << ","<< x3 << " "<< "3*dP=" << laplacePressure << " dP=" << laplacePressure / 3.0<< " phi=" << phi[d000]<< "\n"); findNeighbors(phaseFieldOld, x1, x2, x3); // 16.03.23 c: BB gas side with updated boundary velocity distribution->getDistributionInv(ff, x1, x2, x3); real rhoG; - if (phi[DIR_000] > c1o2) { // initialization necessary + if (phi[d000] > c1o2) { // initialization necessary real sumRho = 0; real sumWeight = 1.e-100; for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { @@ -356,22 +356,22 @@ void IBsharpInterfaceLBMKernel::calculate(int step) // real fGEQNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz); real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; // fL -feqOLD + feqNew; // real fBC = fGG - c6o1 * WEIGTH[fdir] * (vBC); - distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); + distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); ///// other possibility is tor replace the node itself instead of the neighbor (only c1o1 of them is allowed!) // real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir); // real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1 , x2 , x3 ), (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1 , x2 , x3 )); // real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1, x2, x3 )); // real fBC = fG - feqOLD + feqNew; - // distribution->setDistributionForDirection(fBC, x1, x2, x3, fdir); + // distribution->setPostCollisionDistributionForDirection(fBC, x1, x2, x3, fdir); } } } - // distribution->setDistributionForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoG, vx, vy, vz), x1, x2, x3, DIR_000); + // distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000); { - real fL = distribution->getDistributionInvForDirection(x1, x2, x3, DIR_000); - real feqOLD = D3Q27System::getIncompFeqForDirection(DIR_000, (*rhoNode)(x1, x2, x3), vx, vy, vz); - real feqNew = D3Q27System::getIncompFeqForDirection(DIR_000, rhoG, vx, vy, vz); - distribution->setDistributionForDirection(fL - feqOLD + feqNew, x1, x2, x3, DIR_000); + real fL = distribution->getDistributionInvForDirection(x1, x2, x3, d000); + real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx, vy, vz); + real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz); + distribution->setPostCollisionDistributionForDirection(fL - feqOLD + feqNew, x1, x2, x3, d000); } } else { // no refill of gas required @@ -400,7 +400,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step) // (c1o1 / collFactorL - c1o1) + feqNew; // if ((*phaseField)(x1, x2, x3) <= c1o2) - distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); + distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) { // real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); // real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); @@ -414,10 +414,10 @@ void IBsharpInterfaceLBMKernel::calculate(int step) // D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * // (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // distribution->setDistributionForDirection((fBC + fG) / densityRatio*0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, - // x2, x3, fdir); distribution->setDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL-2*fL+2*feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * + // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, + // x2, x3, fdir); distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL-2*fL+2*feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * // D3Q27System::DX3[fdir]), x1, x2, x3, fdir); real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC; real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - // - c1o1) * vBC; real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir); real number = 666; distribution->setDistributionForDirection((fBC + fG) / densityRatio * + // - c1o1) * vBC; real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir); real number = 666; distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * // 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC, x1, x2, x3, fdir); //// real eqBC= D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz); //// real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); @@ -426,7 +426,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step) //D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); ////real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC; - // distribution->setDistributionForDirection(c2o1*laplacePressure * WEIGTH[fdir] +(fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG) - fL, x1, x2, x3, fdir);// -0* (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, + // distribution->setPostCollisionDistributionForDirection(c2o1*laplacePressure * WEIGTH[fdir] +(fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG) - fL, x1, x2, x3, fdir);// -0* (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, //fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); // //if (vxBC != 0) { // // int set = 0; @@ -458,7 +458,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step) (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) + laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); // laplacePressureBC *= sigma; - distribution->setDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, + distribution->setPostCollisionDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir); } } @@ -499,15 +499,15 @@ void IBsharpInterfaceLBMKernel::calculate(int step) // D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * // (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // distribution->setDistributionForDirection((fBC + fG) / densityRatio*0 - fL- (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vBC), x1, x2, x3, fdir); - // distribution->setDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * - // D3Q27System::DX3[fdir]), x1, x2, x3, fdir); distribution->setDistributionForDirection(0, x1, x2, x3, fdir); real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC; real flWW = (fBC + fG) / densityRatio * 0 + // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL- (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vBC), x1, x2, x3, fdir); + // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * + // D3Q27System::DX3[fdir]), x1, x2, x3, fdir); distribution->setPostCollisionDistributionForDirection(0, x1, x2, x3, fdir); real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC; real flWW = (fBC + fG) / densityRatio * 0 // - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC; real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir); // real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + //D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + //D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); // //real flNew = (fBC + fG - eqBC - eqG) / densityRatio + eqBC + eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC; - // distribution->setDistributionForDirection(c2o1*laplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG) - fL, x1, x2, x3, fdir);// - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, + // distribution->setPostCollisionDistributionForDirection(c2o1*laplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG) - fL, x1, x2, x3, fdir);// - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, //fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); //// real number = 666; @@ -538,7 +538,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step) (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) + laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); // laplacePressureBC *= sigma; - distribution->setDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, + distribution->setPostCollisionDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir); } @@ -581,7 +581,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step) real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz); real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, vx, vy, vz); ff[D3Q27System::INVDIR[fdir]] = (ff[D3Q27System::INVDIR[fdir]] - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew; - distribution->setDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); + distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); } } @@ -595,7 +595,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step) // //vBC = (vBC + vDir) / (c2o1 -( vBC - vDir)); // //real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * vDir; // //real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * - //D3Q27System::DX3[fdir]); real fL= D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); distribution->setDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); ff[fdir] = fL; + //D3Q27System::DX3[fdir]); real fL= D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); ff[fdir] = fL; // } // if (!(phi[fdir] > c1o2)) { // //std::cout << "Eq at dir=" << fdir << "\n"; @@ -603,7 +603,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step) // real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); // real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); // real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); - // distribution->setDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); + // distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); // ff[fdir] = feqL; // } // } @@ -611,26 +611,26 @@ void IBsharpInterfaceLBMKernel::calculate(int step) // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { // sumRho2 += ff[fdir];// -D3Q27System::getIncompFeqForDirection(fdir, 0, sumVx, sumVy, sumVz); // } - // ff[DIR_000] = rhoL - sumRho2; + // ff[d000] = rhoL - sumRho2; // rhoL = 27.0 / 18.0 * sumRho2; // std::cout << "rhoL=" << rhoL <<" sumRho="<< 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "\n"; D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz); - // std::cout << "RecalCrhoL=" << rhoL << " sumRho=" << 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "ffRest="<<ff[DIR_000]<<"\n"; - // distribution->setDistributionForDirection(ff[DIR_000], x1, x2, x3, DIR_000); + // std::cout << "RecalCrhoL=" << rhoL << " sumRho=" << 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "ffRest="<<ff[d000]<<"\n"; + // distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000); { - real fG = distribution->getDistributionInvForDirection(x1, x2, x3, DIR_000); - real feqOLD = D3Q27System::getIncompFeqForDirection(DIR_000, (*rhoNode)(x1, x2, x3), vx, vy, vz); - real feqNew = D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz); - distribution->setDistributionForDirection(fG - feqOLD + feqNew, x1, x2, x3, DIR_000); + real fG = distribution->getDistributionInvForDirection(x1, x2, x3, d000); + real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx, vy, vz); + real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz); + distribution->setPostCollisionDistributionForDirection(fG - feqOLD + feqNew, x1, x2, x3, d000); } // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { // ff[D3Q27System::INVDIR[fdir]]=distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); // } // D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz); - // std::cout << "AfterRead rhoL=" << rhoL << " rhoGToL=" << rhoG/densityRatio << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[DIR_000] <<" x="<<x1<<" y="<<x2<<" z="<<x3<< "\n"; + // std::cout << "AfterRead rhoL=" << rhoL << " rhoGToL=" << rhoG/densityRatio << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[d000] <<" x="<<x1<<" y="<<x2<<" z="<<x3<< "\n"; - // real feqL = D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz); - // distribution->setDistributionForDirection(feqL, x1, x2, x3, DIR_000); + // real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz); + // distribution->setPostCollisionDistributionForDirection(feqL, x1, x2, x3, d000); } } @@ -687,66 +687,66 @@ void IBsharpInterfaceLBMKernel::calculate(int step) real fEqSolid[D3Q27System::ENDF + 1]; real fPre[D3Q27System::ENDF + 1]; - f[vf::lbm::dir::DIR_000] = mfbbb; - - f[vf::lbm::dir::DIR_P00] = mfcbb; - f[vf::lbm::dir::DIR_0P0] = mfbcb; - f[vf::lbm::dir::DIR_00P] = mfbbc; - f[vf::lbm::dir::DIR_PP0] = mfccb; - f[vf::lbm::dir::DIR_MP0] = mfacb; - f[vf::lbm::dir::DIR_P0P] = mfcbc; - f[vf::lbm::dir::DIR_M0P] = mfabc; - f[vf::lbm::dir::DIR_0PP] = mfbcc; - f[vf::lbm::dir::DIR_0MP] = mfbac; - f[vf::lbm::dir::DIR_PPP] = mfccc; - f[vf::lbm::dir::DIR_MPP] = mfacc; - f[vf::lbm::dir::DIR_PMP] = mfcac; - f[vf::lbm::dir::DIR_MMP] = mfaac; - - f[vf::lbm::dir::DIR_M00] = mfabb; - f[vf::lbm::dir::DIR_0M0] = mfbab; - f[vf::lbm::dir::DIR_00M] = mfbba; - f[vf::lbm::dir::DIR_MM0] = mfaab; - f[vf::lbm::dir::DIR_PM0] = mfcab; - f[vf::lbm::dir::DIR_M0M] = mfaba; - f[vf::lbm::dir::DIR_P0M] = mfcba; - f[vf::lbm::dir::DIR_0MM] = mfbaa; - f[vf::lbm::dir::DIR_0PM] = mfbca; - f[vf::lbm::dir::DIR_MMM] = mfaaa; - f[vf::lbm::dir::DIR_PMM] = mfcaa; - f[vf::lbm::dir::DIR_MPM] = mfaca; - f[vf::lbm::dir::DIR_PPM] = mfcca; + f[vf::lbm::dir::d000] = mfbbb; + + f[vf::lbm::dir::dP00] = mfcbb; + f[vf::lbm::dir::d0P0] = mfbcb; + f[vf::lbm::dir::d00P] = mfbbc; + f[vf::lbm::dir::dPP0] = mfccb; + f[vf::lbm::dir::dMP0] = mfacb; + f[vf::lbm::dir::dP0P] = mfcbc; + f[vf::lbm::dir::dM0P] = mfabc; + f[vf::lbm::dir::d0PP] = mfbcc; + f[vf::lbm::dir::d0MP] = mfbac; + f[vf::lbm::dir::dPPP] = mfccc; + f[vf::lbm::dir::dMPP] = mfacc; + f[vf::lbm::dir::dPMP] = mfcac; + f[vf::lbm::dir::dMMP] = mfaac; + + f[vf::lbm::dir::dM00] = mfabb; + f[vf::lbm::dir::d0M0] = mfbab; + f[vf::lbm::dir::d00M] = mfbba; + f[vf::lbm::dir::dMM0] = mfaab; + f[vf::lbm::dir::dPM0] = mfcab; + f[vf::lbm::dir::dM0M] = mfaba; + f[vf::lbm::dir::dP0M] = mfcba; + f[vf::lbm::dir::d0MM] = mfbaa; + f[vf::lbm::dir::d0PM] = mfbca; + f[vf::lbm::dir::dMMM] = mfaaa; + f[vf::lbm::dir::dPMM] = mfcaa; + f[vf::lbm::dir::dMPM] = mfaca; + f[vf::lbm::dir::dPPM] = mfcca; if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MIN) { - fPre[vf::lbm::dir::DIR_000] = mfbbb; - - fPre[vf::lbm::dir::DIR_P00] = mfcbb; - fPre[vf::lbm::dir::DIR_0P0] = mfbcb; - fPre[vf::lbm::dir::DIR_00P] = mfbbc; - fPre[vf::lbm::dir::DIR_PP0] = mfccb; - fPre[vf::lbm::dir::DIR_MP0] = mfacb; - fPre[vf::lbm::dir::DIR_P0P] = mfcbc; - fPre[vf::lbm::dir::DIR_M0P] = mfabc; - fPre[vf::lbm::dir::DIR_0PP] = mfbcc; - fPre[vf::lbm::dir::DIR_0MP] = mfbac; - fPre[vf::lbm::dir::DIR_PPP] = mfccc; - fPre[vf::lbm::dir::DIR_MPP] = mfacc; - fPre[vf::lbm::dir::DIR_PMP] = mfcac; - fPre[vf::lbm::dir::DIR_MMP] = mfaac; - - fPre[vf::lbm::dir::DIR_M00] = mfabb; - fPre[vf::lbm::dir::DIR_0M0] = mfbab; - fPre[vf::lbm::dir::DIR_00M] = mfbba; - fPre[vf::lbm::dir::DIR_MM0] = mfaab; - fPre[vf::lbm::dir::DIR_PM0] = mfcab; - fPre[vf::lbm::dir::DIR_M0M] = mfaba; - fPre[vf::lbm::dir::DIR_P0M] = mfcba; - fPre[vf::lbm::dir::DIR_0MM] = mfbaa; - fPre[vf::lbm::dir::DIR_0PM] = mfbca; - fPre[vf::lbm::dir::DIR_MMM] = mfaaa; - fPre[vf::lbm::dir::DIR_PMM] = mfcaa; - fPre[vf::lbm::dir::DIR_MPM] = mfaca; - fPre[vf::lbm::dir::DIR_PPM] = mfcca; + fPre[vf::lbm::dir::d000] = mfbbb; + + fPre[vf::lbm::dir::dP00] = mfcbb; + fPre[vf::lbm::dir::d0P0] = mfbcb; + fPre[vf::lbm::dir::d00P] = mfbbc; + fPre[vf::lbm::dir::dPP0] = mfccb; + fPre[vf::lbm::dir::dMP0] = mfacb; + fPre[vf::lbm::dir::dP0P] = mfcbc; + fPre[vf::lbm::dir::dM0P] = mfabc; + fPre[vf::lbm::dir::d0PP] = mfbcc; + fPre[vf::lbm::dir::d0MP] = mfbac; + fPre[vf::lbm::dir::dPPP] = mfccc; + fPre[vf::lbm::dir::dMPP] = mfacc; + fPre[vf::lbm::dir::dPMP] = mfcac; + fPre[vf::lbm::dir::dMMP] = mfaac; + + fPre[vf::lbm::dir::dM00] = mfabb; + fPre[vf::lbm::dir::d0M0] = mfbab; + fPre[vf::lbm::dir::d00M] = mfbba; + fPre[vf::lbm::dir::dMM0] = mfaab; + fPre[vf::lbm::dir::dPM0] = mfcab; + fPre[vf::lbm::dir::dM0M] = mfaba; + fPre[vf::lbm::dir::dP0M] = mfcba; + fPre[vf::lbm::dir::d0MM] = mfbaa; + fPre[vf::lbm::dir::d0PM] = mfbca; + fPre[vf::lbm::dir::dMMM] = mfaaa; + fPre[vf::lbm::dir::dPMM] = mfcaa; + fPre[vf::lbm::dir::dMPM] = mfaca; + fPre[vf::lbm::dir::dPPM] = mfcca; } (*particleData)(x1, x2, x3)->hydrodynamicForce.fill(0.0); @@ -768,13 +768,13 @@ void IBsharpInterfaceLBMKernel::calculate(int step) real normX2 = dX2_phi / denom; real normX3 = dX3_phi / denom; - collFactorM = phi[DIR_000] > c1o2 ? collFactorL : collFactorG; - // real collFactorMInv = phi[DIR_000] > c1o2 ? collFactorG : collFactorL; + collFactorM = phi[d000] > c1o2 ? collFactorL : collFactorG; + // real collFactorMInv = phi[d000] > c1o2 ? collFactorG : collFactorL; - // real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi(); + // real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); //----------- Calculating Macroscopic Values ------------- - real rho = phi[DIR_000] > c1o2 ? rhoH : rhoL; + real rho = phi[d000] > c1o2 ? rhoH : rhoL; real m0, m1, m2; real rhoRef = c1o1; @@ -790,7 +790,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step) if (withForcing) { muRho = rho; - muPhi = phi[DIR_000]; + muPhi = phi[d000]; forcingX1 += muForcingX1.Eval(); forcingX2 += muForcingX2.Eval(); forcingX3 += muForcingX3.Eval(); @@ -838,8 +838,8 @@ void IBsharpInterfaceLBMKernel::calculate(int step) //////////////////////////////////////////////////////////////////////////////////// real wadjust; - // real qudricLimit = 0.01 / (c1o1 + 1.0e4 * phi[DIR_000] * (c1o1 - phi[DIR_000])); - // real qudricLimit = 0.01 / (c1o1 + (((*phaseField)(x1, x2, x3) > c1o2) ? 1.0e6 * phi[DIR_000] * (c1o1 - phi[DIR_000]):c0o1)); + // real qudricLimit = 0.01 / (c1o1 + 1.0e4 * phi[d000] * (c1o1 - phi[d000])); + // real qudricLimit = 0.01 / (c1o1 + (((*phaseField)(x1, x2, x3) > c1o2) ? 1.0e6 * phi[d000] * (c1o1 - phi[d000]):c0o1)); real qudricLimit = 0.01; //////////////////////////////////////////////////////////////////////////////////// @@ -955,7 +955,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step) real Dxz = -c3o1 * collFactorM * mfbab; real Dyz = -c3o1 * collFactorM * mfabb; - if (phi[DIR_000] > c1o2) { + if (phi[d000] > c1o2) { /// QR eddyviscosity: real eddyR = -(Dxy * Dxy + Dxz * Dxz + c1o3 * dxux * dxux) * (dxux) - (Dxy * Dxy + Dyz * Dyz + c1o3 * dyuy * dyuy) * dyuy - (Dxz * Dxz + Dyz * Dyz + c1o3 * dzuz * dzuz) * dzuz - c2o1 * Dxy * Dxz * Dyz; real eddyQ = Dxy * Dxz + Dxy * Dyz + Dxz * Dyz + c1o2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz); @@ -975,7 +975,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // non Newtonian fluid collision factor - if (phi[DIR_000] > c1o2) { + if (phi[d000] > c1o2) { real shearRate = sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz); collFactorM = Rheology::getBinghamCollFactor(collFactorM, shearRate, c1o1); collFactorM = (collFactorM < c1o1) ? c1o1 : collFactorM; @@ -1141,7 +1141,7 @@ void IBsharpInterfaceLBMKernel::calculate(int step) ////////////////////////////////////////////////////////////////////////// // write distribution ////////////////////////////////////////////////////////////////////////// - // if (phi[DIR_000] < c1o2) { + // if (phi[d000] < c1o2) { (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb; //* rho * c1o3; (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab; //* rho * c1o3; (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba; //* rho * c1o3; @@ -1171,35 +1171,35 @@ void IBsharpInterfaceLBMKernel::calculate(int step) (*this->restDistributionsF)(x1, x2, x3) = mfbbb; // *rho* c1o3; - f[vf::lbm::dir::DIR_000] = mfbbb; - - f[vf::lbm::dir::DIR_P00] = mfcbb; - f[vf::lbm::dir::DIR_0P0] = mfbcb; - f[vf::lbm::dir::DIR_00P] = mfbbc; - f[vf::lbm::dir::DIR_PP0] = mfccb; - f[vf::lbm::dir::DIR_MP0] = mfacb; - f[vf::lbm::dir::DIR_P0P] = mfcbc; - f[vf::lbm::dir::DIR_M0P] = mfabc; - f[vf::lbm::dir::DIR_0PP] = mfbcc; - f[vf::lbm::dir::DIR_0MP] = mfbac; - f[vf::lbm::dir::DIR_PPP] = mfccc; - f[vf::lbm::dir::DIR_MPP] = mfacc; - f[vf::lbm::dir::DIR_PMP] = mfcac; - f[vf::lbm::dir::DIR_MMP] = mfaac; - - f[vf::lbm::dir::DIR_M00] = mfabb; - f[vf::lbm::dir::DIR_0M0] = mfbab; - f[vf::lbm::dir::DIR_00M] = mfbba; - f[vf::lbm::dir::DIR_MM0] = mfaab; - f[vf::lbm::dir::DIR_PM0] = mfcab; - f[vf::lbm::dir::DIR_M0M] = mfaba; - f[vf::lbm::dir::DIR_P0M] = mfcba; - f[vf::lbm::dir::DIR_0MM] = mfbaa; - f[vf::lbm::dir::DIR_0PM] = mfbca; - f[vf::lbm::dir::DIR_MMM] = mfaaa; - f[vf::lbm::dir::DIR_PMM] = mfcaa; - f[vf::lbm::dir::DIR_MPM] = mfaca; - f[vf::lbm::dir::DIR_PPM] = mfcca; + f[vf::lbm::dir::d000] = mfbbb; + + f[vf::lbm::dir::dP00] = mfcbb; + f[vf::lbm::dir::d0P0] = mfbcb; + f[vf::lbm::dir::d00P] = mfbbc; + f[vf::lbm::dir::dPP0] = mfccb; + f[vf::lbm::dir::dMP0] = mfacb; + f[vf::lbm::dir::dP0P] = mfcbc; + f[vf::lbm::dir::dM0P] = mfabc; + f[vf::lbm::dir::d0PP] = mfbcc; + f[vf::lbm::dir::d0MP] = mfbac; + f[vf::lbm::dir::dPPP] = mfccc; + f[vf::lbm::dir::dMPP] = mfacc; + f[vf::lbm::dir::dPMP] = mfcac; + f[vf::lbm::dir::dMMP] = mfaac; + + f[vf::lbm::dir::dM00] = mfabb; + f[vf::lbm::dir::d0M0] = mfbab; + f[vf::lbm::dir::d00M] = mfbba; + f[vf::lbm::dir::dMM0] = mfaab; + f[vf::lbm::dir::dPM0] = mfcab; + f[vf::lbm::dir::dM0M] = mfaba; + f[vf::lbm::dir::dP0M] = mfcba; + f[vf::lbm::dir::d0MM] = mfbaa; + f[vf::lbm::dir::d0PM] = mfbca; + f[vf::lbm::dir::dMMM] = mfaaa; + f[vf::lbm::dir::dPMM] = mfcaa; + f[vf::lbm::dir::dMPM] = mfaca; + f[vf::lbm::dir::dPPM] = mfcca; } if ((*particleData)(x1, x2, x3)->solidFraction >= SOLFRAC_MIN) { real vx1, vx2, vx3, drho; @@ -1212,10 +1212,10 @@ void IBsharpInterfaceLBMKernel::calculate(int step) uPart[2] = (*particleData)(x1, x2, x3)->uPart[2]; D3Q27System::calcIncompFeq(fEqSolid, drho, uPart[0], uPart[1], uPart[2]); - real rhoPhaseField = (phi[DIR_000] > c1o2) ? c1o1 : c1o1 / densityRatio; + real rhoPhaseField = (phi[d000] > c1o2) ? c1o1 : c1o1 / densityRatio; if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MAX) { - double const bb0 = fEq[vf::lbm::dir::DIR_000] - fEqSolid[vf::lbm::dir::DIR_000]; - f[vf::lbm::dir::DIR_000] = fPre[vf::lbm::dir::DIR_000] + bb0; + double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000]; + f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + bb0; for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) { const int iOpp = D3Q27System::INVDIR[iPop]; double const bb = ((fPre[iOpp] - fEq[iOpp]) - (fPre[iPop] - fEqSolid[iPop])); @@ -1237,8 +1237,8 @@ void IBsharpInterfaceLBMKernel::calculate(int step) // #endif double const oneMinB = 1. - B; - double const bb0 = fEq[vf::lbm::dir::DIR_000] - fEqSolid[vf::lbm::dir::DIR_000]; - f[vf::lbm::dir::DIR_000] = fPre[vf::lbm::dir::DIR_000] + oneMinB * (f[vf::lbm::dir::DIR_000] - fPre[vf::lbm::dir::DIR_000]) + B * bb0; + double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000]; + f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + oneMinB * (f[vf::lbm::dir::d000] - fPre[vf::lbm::dir::d000]) + B * bb0; for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) { int const iOpp = D3Q27System::INVDIR[iPop]; @@ -1254,35 +1254,35 @@ void IBsharpInterfaceLBMKernel::calculate(int step) } } /* if solidFraction > SOLFRAC_MAX */ - (*this->restDistributionsF)(x1, x2, x3) = f[vf::lbm::dir::DIR_000]; - - (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = f[vf::lbm::dir::DIR_M00]; - (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = f[vf::lbm::dir::DIR_0M0]; - (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = f[vf::lbm::dir::DIR_00M]; - (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = f[vf::lbm::dir::DIR_MM0]; - (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = f[vf::lbm::dir::DIR_PM0]; - (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = f[vf::lbm::dir::DIR_M0M]; - (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = f[vf::lbm::dir::DIR_P0M]; - (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = f[vf::lbm::dir::DIR_0MM]; - (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = f[vf::lbm::dir::DIR_0PM]; - (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = f[vf::lbm::dir::DIR_MMM]; - (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = f[vf::lbm::dir::DIR_PMM]; - (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = f[vf::lbm::dir::DIR_MPM]; - (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[vf::lbm::dir::DIR_PPM]; - - (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = f[vf::lbm::dir::DIR_P00]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = f[vf::lbm::dir::DIR_0P0]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = f[vf::lbm::dir::DIR_00P]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = f[vf::lbm::dir::DIR_PP0]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = f[vf::lbm::dir::DIR_MP0]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = f[vf::lbm::dir::DIR_P0P]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = f[vf::lbm::dir::DIR_M0P]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = f[vf::lbm::dir::DIR_0PP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = f[vf::lbm::dir::DIR_0MP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[vf::lbm::dir::DIR_PPP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[vf::lbm::dir::DIR_MPP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[vf::lbm::dir::DIR_PMP]; - (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = f[vf::lbm::dir::DIR_MMP]; + (*this->restDistributionsF)(x1, x2, x3) = f[vf::lbm::dir::d000]; + + (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = f[vf::lbm::dir::dM00]; + (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = f[vf::lbm::dir::d0M0]; + (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = f[vf::lbm::dir::d00M]; + (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = f[vf::lbm::dir::dMM0]; + (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = f[vf::lbm::dir::dPM0]; + (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = f[vf::lbm::dir::dM0M]; + (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = f[vf::lbm::dir::dP0M]; + (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = f[vf::lbm::dir::d0MM]; + (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = f[vf::lbm::dir::d0PM]; + (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = f[vf::lbm::dir::dMMM]; + (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = f[vf::lbm::dir::dPMM]; + (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = f[vf::lbm::dir::dMPM]; + (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[vf::lbm::dir::dPPM]; + + (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = f[vf::lbm::dir::dP00]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = f[vf::lbm::dir::d0P0]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = f[vf::lbm::dir::d00P]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = f[vf::lbm::dir::dPP0]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = f[vf::lbm::dir::dMP0]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = f[vf::lbm::dir::dP0P]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = f[vf::lbm::dir::dM0P]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = f[vf::lbm::dir::d0PP]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = f[vf::lbm::dir::d0MP]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[vf::lbm::dir::dPPP]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[vf::lbm::dir::dMPP]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[vf::lbm::dir::dPMP]; + (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = f[vf::lbm::dir::dMMP]; } @@ -1542,89 +1542,89 @@ void IBsharpInterfaceLBMKernel::calculate(int step) real IBsharpInterfaceLBMKernel::gradX1_phi() { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP]))) + - WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + + +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); } real IBsharpInterfaceLBMKernel::gradX2_phi() { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP]) - (phi[DIR_PMP] - phi[DIR_MPM]))) + - WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0]) - (phi[DIR_PM0] - phi[DIR_MP0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP]) - (phi[dPMP] - phi[dMPM]))) + + WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0]) - (phi[dPM0] - phi[dMP0])))) + + +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); } real IBsharpInterfaceLBMKernel::gradX3_phi() { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP]))) + - WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + + +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); } real IBsharpInterfaceLBMKernel::gradX1_rhoInv(real rhoL, real rhoDIV) { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + - ((1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP])))) + - WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_P0P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0M])) + (1.0 / (rhoL + rhoDIV * phi[DIR_P0M]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0P]))) + - ((1.0 / (rhoL + rhoDIV * phi[DIR_PM0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MP0])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PP0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MM0]))))) + - +WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_P00]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M00]))); + return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) + (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) + (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) + + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) + (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + + ((1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0])) + (1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0]))))) + + +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[dP00]) - 1.0 / (rhoL + rhoDIV * phi[dM00]))); } real IBsharpInterfaceLBMKernel::gradX2_rhoInv(real rhoL, real rhoDIV) { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + - ((1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])))) + - WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_0PP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_0PM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MP]))) + - ((1.0 / (rhoL + rhoDIV * phi[DIR_PP0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MM0])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PM0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MP0]))))) + - +WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_0P0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0M0]))); + return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + + ((1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])) - (1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])))) + + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM])) + (1.0 / (rhoL + rhoDIV * phi[d0PM]) - 1.0 / (rhoL + rhoDIV * phi[d0MP]))) + + ((1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0])) - (1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0]))))) + + +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d0P0]) - 1.0 / (rhoL + rhoDIV * phi[d0M0]))); } real IBsharpInterfaceLBMKernel::gradX3_rhoInv(real rhoL, real rhoDIV) { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + - ((1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP])))) + - WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_P0P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0M])) - (1.0 / (rhoL + rhoDIV * phi[DIR_P0M]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0P]))) + - ((1.0 / (rhoL + rhoDIV * phi[DIR_0MP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0PM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_0PP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MM]))))) + - +WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_00P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_00M]))); + return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) - (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) + + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) - (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + + ((1.0 / (rhoL + rhoDIV * phi[d0MP]) - 1.0 / (rhoL + rhoDIV * phi[d0PM])) + (1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM]))))) + + +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d00P]) - 1.0 / (rhoL + rhoDIV * phi[d00M]))); } real IBsharpInterfaceLBMKernel::gradX1_phi2() { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) + (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) + (phi2[DIR_PPM] - phi2[DIR_MMP]))) + - WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) + (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_PM0] - phi2[DIR_MP0]) + (phi2[DIR_PP0] - phi2[DIR_MM0])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_P00] - phi2[DIR_M00])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP]))) + + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) + + +WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00])); } real IBsharpInterfaceLBMKernel::gradX2_phi2() { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PPM] - phi2[DIR_MMP]) - (phi2[DIR_PMP] - phi2[DIR_MPM]))) + - WEIGTH[DIR_PP0] * (((phi2[DIR_0PP] - phi2[DIR_0MM]) + (phi2[DIR_0PM] - phi2[DIR_0MP])) + ((phi2[DIR_PP0] - phi2[DIR_MM0]) - (phi2[DIR_PM0] - phi2[DIR_MP0])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_0P0] - phi2[DIR_0M0])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM]))) + + WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) + + +WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0])); } real IBsharpInterfaceLBMKernel::gradX3_phi2() { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP]))) + - WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) + + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + + +WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); } real IBsharpInterfaceLBMKernel::nabla2_phi() { using namespace D3Q27System; real sum = 0.0; - sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000]))) + (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000])))); - sum += WEIGTH[DIR_0PP] * ((((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000]))) + (((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000]))) + - (((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000])))); - sum += WEIGTH[DIR_00P] * (((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000])) + ((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000])) + ((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000]))); + sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); + sum += WEIGTH[d0PP] * ((((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) + + (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000])))); + sum += WEIGTH[d00P] * (((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000]))); return 6.0 * sum; } @@ -1638,29 +1638,29 @@ real IBsharpInterfaceLBMKernel::computeCurvature_phi() real phiY = gradX2_phi(); real phiZ = gradX3_phi(); real phiXX = - c4o9 * (phi[DIR_P00] - c2o1 * phi[DIR_000] + phi[DIR_M00]) + (c1o9 * (((phi[DIR_PP0] - c2o1 * phi[DIR_0P0] + phi[DIR_MP0]) + (phi[DIR_PM0] - c2o1 * phi[DIR_0M0] + phi[DIR_MM0])) + ((phi[DIR_P0P] - c2o1 * phi[DIR_00P] + phi[DIR_M0P]) + (phi[DIR_P0M] - c2o1 * phi[DIR_00M] + phi[DIR_M0M]))) + - c1o36 * (((phi[DIR_PPP] - c2o1 * phi[DIR_0PP] + phi[DIR_MPP]) + (phi[DIR_PMP] - c2o1 * phi[DIR_0MP] + phi[DIR_MMP])) + ((phi[DIR_PPM] - c2o1 * phi[DIR_0PM] + phi[DIR_MPM]) + (phi[DIR_PMM] - c2o1 * phi[DIR_0MM] + phi[DIR_MMM])))); + c4o9 * (phi[dP00] - c2o1 * phi[d000] + phi[dM00]) + (c1o9 * (((phi[dPP0] - c2o1 * phi[d0P0] + phi[dMP0]) + (phi[dPM0] - c2o1 * phi[d0M0] + phi[dMM0])) + ((phi[dP0P] - c2o1 * phi[d00P] + phi[dM0P]) + (phi[dP0M] - c2o1 * phi[d00M] + phi[dM0M]))) + + c1o36 * (((phi[dPPP] - c2o1 * phi[d0PP] + phi[dMPP]) + (phi[dPMP] - c2o1 * phi[d0MP] + phi[dMMP])) + ((phi[dPPM] - c2o1 * phi[d0PM] + phi[dMPM]) + (phi[dPMM] - c2o1 * phi[d0MM] + phi[dMMM])))); real phiYY = - c4o9 * (phi[DIR_0P0] - c2o1 * phi[DIR_000] + phi[DIR_0M0]) + (c1o9 * (((phi[DIR_PP0] - c2o1 * phi[DIR_P00] + phi[DIR_PM0]) + (phi[DIR_MP0] - c2o1 * phi[DIR_M00] + phi[DIR_MM0])) + ((phi[DIR_0PP] - c2o1 * phi[DIR_00P] + phi[DIR_0MP]) + (phi[DIR_0PM] - c2o1 * phi[DIR_00M] + phi[DIR_0MM]))) + - c1o36 * (((phi[DIR_PPP] - c2o1 * phi[DIR_P0P] + phi[DIR_PMP]) + (phi[DIR_MPM] - c2o1 * phi[DIR_M0M] + phi[DIR_MMM])) + ((phi[DIR_MPP] - c2o1 * phi[DIR_M0P] + phi[DIR_MMP]) + (phi[DIR_PPM] - c2o1 * phi[DIR_P0M] + phi[DIR_PMM])))); + c4o9 * (phi[d0P0] - c2o1 * phi[d000] + phi[d0M0]) + (c1o9 * (((phi[dPP0] - c2o1 * phi[dP00] + phi[dPM0]) + (phi[dMP0] - c2o1 * phi[dM00] + phi[dMM0])) + ((phi[d0PP] - c2o1 * phi[d00P] + phi[d0MP]) + (phi[d0PM] - c2o1 * phi[d00M] + phi[d0MM]))) + + c1o36 * (((phi[dPPP] - c2o1 * phi[dP0P] + phi[dPMP]) + (phi[dMPM] - c2o1 * phi[dM0M] + phi[dMMM])) + ((phi[dMPP] - c2o1 * phi[dM0P] + phi[dMMP]) + (phi[dPPM] - c2o1 * phi[dP0M] + phi[dPMM])))); real phiZZ = - c4o9 * (phi[DIR_00P] - c2o1 * phi[DIR_000] + phi[DIR_00M]) + (c1o9 * (((phi[DIR_M0P] - c2o1 * phi[DIR_M00] + phi[DIR_M0M]) + (phi[DIR_P0P] - c2o1 * phi[DIR_P00] + phi[DIR_P0M])) + ((phi[DIR_0MP] - c2o1 * phi[DIR_0M0] + phi[DIR_0MM]) + (phi[DIR_0PP] - c2o1 * phi[DIR_0P0] + phi[DIR_0PM]))) + - c1o36 * (((phi[DIR_MPP] - c2o1 * phi[DIR_MP0] + phi[DIR_MPM]) + (phi[DIR_PMP] - c2o1 * phi[DIR_PM0] + phi[DIR_PMM])) + ((phi[DIR_MMP] - c2o1 * phi[DIR_MM0] + phi[DIR_MMM]) + (phi[DIR_PPP] - c2o1 * phi[DIR_PP0] + phi[DIR_PPM])))); - real phiXY = c1o4 * (c2o3 * (phi[DIR_MM0] - phi[DIR_PM0] + phi[DIR_PP0] - phi[DIR_MP0]) + c1o6 * ((phi[DIR_MMP] - phi[DIR_PMP] + phi[DIR_PPP] - phi[DIR_MPP]) + (phi[DIR_MMM] - phi[DIR_PMM] + phi[DIR_PPM] - phi[DIR_MPM]))); - real phiXZ = c1o4 * (c2o3 * (phi[DIR_M0M] - phi[DIR_P0M] + phi[DIR_P0P] - phi[DIR_M0P]) + c1o6 * ((phi[DIR_MPM] - phi[DIR_PPM] + phi[DIR_PPP] - phi[DIR_MPP]) + (phi[DIR_MMM] - phi[DIR_PMM] + phi[DIR_PMP] - phi[DIR_MMP]))); - real phiYZ = c1o4 * (c2o3 * (phi[DIR_0MM] - phi[DIR_0MP] + phi[DIR_0PP] - phi[DIR_0PM]) + c1o6 * ((phi[DIR_MMM] - phi[DIR_MMP] + phi[DIR_MPP] - phi[DIR_MPM]) + (phi[DIR_PMM] - phi[DIR_PMP] + phi[DIR_PPP] - phi[DIR_PPM]))); + c4o9 * (phi[d00P] - c2o1 * phi[d000] + phi[d00M]) + (c1o9 * (((phi[dM0P] - c2o1 * phi[dM00] + phi[dM0M]) + (phi[dP0P] - c2o1 * phi[dP00] + phi[dP0M])) + ((phi[d0MP] - c2o1 * phi[d0M0] + phi[d0MM]) + (phi[d0PP] - c2o1 * phi[d0P0] + phi[d0PM]))) + + c1o36 * (((phi[dMPP] - c2o1 * phi[dMP0] + phi[dMPM]) + (phi[dPMP] - c2o1 * phi[dPM0] + phi[dPMM])) + ((phi[dMMP] - c2o1 * phi[dMM0] + phi[dMMM]) + (phi[dPPP] - c2o1 * phi[dPP0] + phi[dPPM])))); + real phiXY = c1o4 * (c2o3 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]) + c1o6 * ((phi[dMMP] - phi[dPMP] + phi[dPPP] - phi[dMPP]) + (phi[dMMM] - phi[dPMM] + phi[dPPM] - phi[dMPM]))); + real phiXZ = c1o4 * (c2o3 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]) + c1o6 * ((phi[dMPM] - phi[dPPM] + phi[dPPP] - phi[dMPP]) + (phi[dMMM] - phi[dPMM] + phi[dPMP] - phi[dMMP]))); + real phiYZ = c1o4 * (c2o3 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]) + c1o6 * ((phi[dMMM] - phi[dMMP] + phi[dMPP] - phi[dMPM]) + (phi[dPMM] - phi[dPMP] + phi[dPPP] - phi[dPPM]))); // non isotropic FD (to be improved): - // real phiX = (phi[DIR_P00] - phi[DIR_M00]) * c1o2; //gradX1_phi(); - // real phiY = (phi[DIR_0P0] - phi[DIR_0M0]) * c1o2; //gradX2_phi(); - // real phiZ = (phi[DIR_00P] - phi[DIR_00M]) * c1o2; //gradX3_phi(); - - // real phiXX = phi[DIR_P00] - c2o1 * phi[DIR_000] + phi[DIR_M00]; - // real phiYY = phi[DIR_0P0] - c2o1 * phi[DIR_000] + phi[DIR_0M0]; - // real phiZZ =( phi[DIR_00P] - c2o1 * phi[DIR_000] + phi[DIR_00M]); - // real phiXY = c1o4 * (phi[DIR_MM0] - phi[DIR_PM0] + phi[DIR_PP0] - phi[DIR_MP0]); - // real phiXZ = c1o4 * (phi[DIR_M0M] - phi[DIR_P0M] + phi[DIR_P0P] - phi[DIR_M0P]); - // real phiYZ = c1o4 * (phi[DIR_0MM] - phi[DIR_0MP] + phi[DIR_0PP] - phi[DIR_0PM]); + // real phiX = (phi[dP00] - phi[dM00]) * c1o2; //gradX1_phi(); + // real phiY = (phi[d0P0] - phi[d0M0]) * c1o2; //gradX2_phi(); + // real phiZ = (phi[d00P] - phi[d00M]) * c1o2; //gradX3_phi(); + + // real phiXX = phi[dP00] - c2o1 * phi[d000] + phi[dM00]; + // real phiYY = phi[d0P0] - c2o1 * phi[d000] + phi[d0M0]; + // real phiZZ =( phi[d00P] - c2o1 * phi[d000] + phi[d00M]); + // real phiXY = c1o4 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]); + // real phiXZ = c1o4 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]); + // real phiYZ = c1o4 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]); // real back= (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2)); return (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2)); } @@ -1687,35 +1687,35 @@ void IBsharpInterfaceLBMKernel::computePhasefield() int x2p = x2 + 1; int x3p = x3 + 1; - h[DIR_P00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - h[DIR_0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - h[DIR_00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - h[DIR_PP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - h[DIR_MP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - h[DIR_P0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - h[DIR_M0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - h[DIR_0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - h[DIR_0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - h[DIR_PPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - h[DIR_MPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - h[DIR_PMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - h[DIR_MMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[DIR_M00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - h[DIR_0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - h[DIR_00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - h[DIR_MM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - h[DIR_PM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - h[DIR_M0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - h[DIR_P0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - h[DIR_0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - h[DIR_0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - h[DIR_MMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[DIR_PMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[DIR_MPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[DIR_PPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[DIR_000] = (*this->restDistributionsH1)(x1, x2, x3); + h[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); + h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); + h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); + h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); + h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); + h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); + h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); + h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); + h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); + h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); + h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); + h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); + h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); + + h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); + h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); + h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); + h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); + h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); + h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); + h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); + h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); + h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); + h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); + h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); + h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); + h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); + + h[d000] = (*this->restDistributionsH1)(x1, x2, x3); } } } @@ -1728,7 +1728,7 @@ void IBsharpInterfaceLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>::Cb SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - phi[DIR_000] = (*ph)(x1, x2, x3); + phi[d000] = (*ph)(x1, x2, x3); for (int k = FSTARTDIR; k <= FENDDIR; k++) { @@ -1747,7 +1747,7 @@ void IBsharpInterfaceLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3X2X1>::C SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - phi2[DIR_000] = (*ph)(x1, x2, x3); + phi2[d000] = (*ph)(x1, x2, x3); for (int k = FSTARTDIR; k <= FENDDIR; k++) { diff --git a/src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.cpp b/src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.cpp index ff7a3bf1b19d5efd626f638d47dc05727fc2bc89..44109a14c34745af6a7fbc13ca71fc7cdbb405fb 100644 --- a/src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.cpp +++ b/src/cpu/LiggghtsCoupling/LBM/LiggghtsCouplingLBMKernel.cpp @@ -17,10 +17,10 @@ // uPart[2] = (*particleData)(x1, x2, x3)->uPart[2]; // // D3Q27System::calcIncompFeq(fEqSolid, drho, uPart[0], uPart[1], uPart[2]); -// real rhoPhaseField = (phi[DIR_000] > c1o2) ? c1o1 : c1o1 / densityRatio; +// real rhoPhaseField = (phi[d000] > c1o2) ? c1o1 : c1o1 / densityRatio; // if ((*particleData)(x1, x2, x3)->solidFraction > SOLFRAC_MAX) { -// double const bb0 = fEq[vf::lbm::dir::DIR_000] - fEqSolid[vf::lbm::dir::DIR_000]; -// f[vf::lbm::dir::DIR_000] = fPre[vf::lbm::dir::DIR_000] + bb0; +// double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000]; +// f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + bb0; // for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) { // const int iOpp = D3Q27System::INVDIR[iPop]; // double const bb = ((fPre[iOpp] - fEq[iOpp]) - (fPre[iPop] - fEqSolid[iPop])); @@ -42,8 +42,8 @@ // // #endif // double const oneMinB = 1. - B; // -// double const bb0 = fEq[vf::lbm::dir::DIR_000] - fEqSolid[vf::lbm::dir::DIR_000]; -// f[vf::lbm::dir::DIR_000] = fPre[vf::lbm::dir::DIR_000] + oneMinB * (f[vf::lbm::dir::DIR_000] - fPre[vf::lbm::dir::DIR_000]) + B * bb0; +// double const bb0 = fEq[vf::lbm::dir::d000] - fEqSolid[vf::lbm::dir::d000]; +// f[vf::lbm::dir::d000] = fPre[vf::lbm::dir::d000] + oneMinB * (f[vf::lbm::dir::d000] - fPre[vf::lbm::dir::d000]) + B * bb0; // // for (int iPop = D3Q27System::FSTARTDIR; iPop <= D3Q27System::FENDDIR; iPop++) { // int const iOpp = D3Q27System::INVDIR[iPop]; @@ -59,34 +59,34 @@ // } // } /* if solidFraction > SOLFRAC_MAX */ // -// // (*this->restDistributionsF)(x1, x2, x3) = f[vf::lbm::dir::DIR_000]; +// // (*this->restDistributionsF)(x1, x2, x3) = f[vf::lbm::dir::d000]; // -// // (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = f[vf::lbm::dir::DIR_M00]; -// // (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = f[vf::lbm::dir::DIR_0M0]; -// // (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = f[vf::lbm::dir::DIR_00M]; -// // (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = f[vf::lbm::dir::DIR_MM0]; -// // (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = f[vf::lbm::dir::DIR_PM0]; -// // (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = f[vf::lbm::dir::DIR_M0M]; -// // (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = f[vf::lbm::dir::DIR_P0M]; -// // (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = f[vf::lbm::dir::DIR_0MM]; -// // (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = f[vf::lbm::dir::DIR_0PM]; -// // (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = f[vf::lbm::dir::DIR_MMM]; -// // (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = f[vf::lbm::dir::DIR_PMM]; -// // (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = f[vf::lbm::dir::DIR_MPM]; -// // (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[vf::lbm::dir::DIR_PPM]; +// // (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = f[vf::lbm::dir::dM00]; +// // (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = f[vf::lbm::dir::d0M0]; +// // (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = f[vf::lbm::dir::d00M]; +// // (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = f[vf::lbm::dir::dMM0]; +// // (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = f[vf::lbm::dir::dPM0]; +// // (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = f[vf::lbm::dir::dM0M]; +// // (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = f[vf::lbm::dir::dP0M]; +// // (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = f[vf::lbm::dir::d0MM]; +// // (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = f[vf::lbm::dir::d0PM]; +// // (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = f[vf::lbm::dir::dMMM]; +// // (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = f[vf::lbm::dir::dPMM]; +// // (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = f[vf::lbm::dir::dMPM]; +// // (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[vf::lbm::dir::dPPM]; // -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = f[vf::lbm::dir::DIR_P00]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = f[vf::lbm::dir::DIR_0P0]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = f[vf::lbm::dir::DIR_00P]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = f[vf::lbm::dir::DIR_PP0]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = f[vf::lbm::dir::DIR_MP0]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = f[vf::lbm::dir::DIR_P0P]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = f[vf::lbm::dir::DIR_M0P]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = f[vf::lbm::dir::DIR_0PP]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = f[vf::lbm::dir::DIR_0MP]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[vf::lbm::dir::DIR_PPP]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[vf::lbm::dir::DIR_MPP]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[vf::lbm::dir::DIR_PMP]; -// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = f[vf::lbm::dir::DIR_MMP]; +// // (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3) = f[vf::lbm::dir::dP00]; +// // (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = f[vf::lbm::dir::d0P0]; +// // (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = f[vf::lbm::dir::d00P]; +// // (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = f[vf::lbm::dir::dPP0]; +// // (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = f[vf::lbm::dir::dMP0]; +// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = f[vf::lbm::dir::dP0P]; +// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = f[vf::lbm::dir::dM0P]; +// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = f[vf::lbm::dir::d0PP]; +// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = f[vf::lbm::dir::d0MP]; +// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[vf::lbm::dir::dPPP]; +// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[vf::lbm::dir::dMPP]; +// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[vf::lbm::dir::dPMP]; +// // (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = f[vf::lbm::dir::dMMP]; // //} //} \ No newline at end of file diff --git a/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.cpp b/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.cpp index 487077f080205cb33ca11748d1f611ca1f1a423d..ad192bf91868a321577f4e79f0729b2947bb0411 100644 --- a/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.cpp +++ b/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.cpp @@ -34,8 +34,8 @@ #include <comm.h> #include "LiggghtsPartitioningGridVisitor.h" -#include "VirtualFluidsCore/Simulation/Grid3D.h" -#include "VirtualFluidsCore/Simulation/Block3D.h" +#include "cpu/core/Simulation/Grid3D.h" +#include "cpu/core/Simulation/Block3D.h" LiggghtsPartitioningGridVisitor::LiggghtsPartitioningGridVisitor(int nx, int ny, int nz, LAMMPS_NS::LAMMPS *lmp) : nx(nx), ny(ny), nz(nz), lmp(*lmp) { diff --git a/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.h b/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.h index 6fb5560ad7a93ca13005a24fcf976d4019576dd1..02a44807604cb7b122ec0a00a54dd90bc56b9ae6 100644 --- a/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.h +++ b/src/cpu/LiggghtsCoupling/Parallel/LiggghtsPartitioningGridVisitor.h @@ -36,7 +36,7 @@ #include <lammps.h> #include <vector> #include "basics/PointerDefinitions.h" -#include "VirtualFluidsCore/Visitors/Grid3DVisitor.h" +#include "cpu/core/Visitors/Grid3DVisitor.h" class LiggghtsCouplingWrapper; class Grid3D; diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.cpp index 0bded101678e7ff728846b43f016ad592f477fa6..eca58e904c4704106d757535563948151ee7c84e 100644 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.cpp +++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNoSlipBCStrategy.cpp @@ -62,38 +62,42 @@ void MultiphaseNoSlipBCStrategy::addDistributionsH(SPtr<DistributionArray3D> dis ////////////////////////////////////////////////////////////////////////// void MultiphaseNoSlipBCStrategy::applyBC() { - real f[D3Q27System::ENDF + 1]; - real h[D3Q27System::ENDF + 1]; - real h2[D3Q27System::ENDF + 1]; - // LBMReal feq[D3Q27System::ENDF+1]; - // LBMReal heq[D3Q27System::ENDF+1]; - distributions->getDistributionInv(f, x1, x2, x3); - if (distributionsH2) distributionsH2->getDistributionInv(h2, x1, x2, x3); - distributionsH->getDistributionInv(h, x1, x2, x3); - // LBMReal phi, vx1, vx2, vx3, p1; + real f[D3Q27System::ENDF+1]; + real h[D3Q27System::ENDF+1]; + real h2[D3Q27System::ENDF + 1]; + //LBMReal feq[D3Q27System::ENDF+1]; + //LBMReal heq[D3Q27System::ENDF+1]; + distributions ->getPostCollisionDistribution(f, x1, x2, x3); + if (distributionsH2) + distributionsH2->getPostCollisionDistribution(h2, x1, x2, x3); + distributionsH->getPostCollisionDistribution(h, x1, x2, x3); + // LBMReal phi, vx1, vx2, vx3, p1; + + // D3Q27System::calcDensity(h, phi); + + // calcMacrosFct(f, p1, vx1, vx2, vx3); + // D3Q27System::calcMultiphaseFeqVB(feq, p1, vx1, vx2, vx3); + // D3Q27System::calcMultiphaseHeq(heq, phi, vx1, vx2, vx3); - // D3Q27System::calcDensity(h, phi); + for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++) + { + if (bcPtr->hasNoSlipBoundaryFlag(fdir)) + { + //quadratic bounce back + const int invDir = D3Q27System::INVDIR[fdir]; + real fReturn = f[invDir]; + //distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + distributions->setPostCollisionDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB + real hReturn = h[invDir]; + // distributionsH->setPostCollisionDistributionForDirection(hReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + distributionsH->setPostCollisionDistributionForDirection(hReturn, x1, x2, x3, invDir);//delay BB + if (distributionsH2) + { + real h2Return = h2[invDir]; + distributionsH2->setPostCollisionDistributionForDirection(h2Return, x1, x2, x3, invDir);//delay BB + // distributionsH2->setPostCollisionDistributionForDirection(h2Return, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); - // calcMacrosFct(f, p1, vx1, vx2, vx3); - // D3Q27System::calcMultiphaseFeqVB(feq, p1, vx1, vx2, vx3); - // D3Q27System::calcMultiphaseHeq(heq, phi, vx1, vx2, vx3); - - for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { - if (bcPtr->hasNoSlipBoundaryFlag(fdir)) { - // quadratic bounce back - const int invDir = D3Q27System::INVDIR[fdir]; - real fReturn = f[invDir]; - distributions->setDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); - // distributions->setDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB - real hReturn = h[invDir]; - distributionsH->setDistributionForDirection(hReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); - // distributionsH->setDistributionForDirection(hReturn, x1, x2, x3, invDir);//delay BB - if (distributionsH2) { - real h2Return = h2[invDir]; - distributionsH2->setDistributionForDirection(h2Return, x1, x2, x3, invDir); // delay BB - // distributionsH2->setDistributionForDirection(h2Return, x1 + D3Q27System::DX1[invDir], x2 + - // D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); - } - } - } + } + } + } } diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.cpp index b026d60ee68d0d1430b4fd9a944cf99e3d4e287e..192af1af727806445eac65b8b35b79d5c279f793 100644 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.cpp +++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseNonReflectingOutflowBCStrategy.cpp @@ -86,33 +86,33 @@ void MultiphaseNonReflectingOutflowBCStrategy::applyBC() int direction = -1; // flag points in direction of fluid - if (bcPtr->hasDensityBoundaryFlag(DIR_P00)) { + if (bcPtr->hasDensityBoundaryFlag(dP00)) { nx1 += 1; - direction = DIR_P00; - } else if (bcPtr->hasDensityBoundaryFlag(DIR_M00)) { + direction = dP00; + } else if (bcPtr->hasDensityBoundaryFlag(dM00)) { nx1 -= 1; - direction = DIR_M00; - } else if (bcPtr->hasDensityBoundaryFlag(DIR_0P0)) { + direction = dM00; + } else if (bcPtr->hasDensityBoundaryFlag(d0P0)) { nx2 += 1; - direction = DIR_0P0; - } else if (bcPtr->hasDensityBoundaryFlag(DIR_0M0)) { + direction = d0P0; + } else if (bcPtr->hasDensityBoundaryFlag(d0M0)) { nx2 -= 1; - direction = DIR_0M0; - } else if (bcPtr->hasDensityBoundaryFlag(DIR_00P)) { + direction = d0M0; + } else if (bcPtr->hasDensityBoundaryFlag(d00P)) { nx3 += 1; - direction = DIR_00P; - } else if (bcPtr->hasDensityBoundaryFlag(DIR_00M)) { + direction = d00P; + } else if (bcPtr->hasDensityBoundaryFlag(d00M)) { nx3 -= 1; - direction = DIR_00M; + direction = d00M; } else UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary...")); - distributions->getDistribution(f, x1, x2, x3); - distributions->getDistribution(ftemp, nx1, nx2, nx3); - distributionsH->getDistribution(h, x1, x2, x3); - distributionsH->getDistribution(htemp, nx1, nx2, nx3); - distributionsH2->getDistribution(h2, x1, x2, x3); - distributionsH2->getDistribution(h2temp, nx1, nx2, nx3); + distributions->getPreCollisionDistribution(f, x1, x2, x3); + distributions->getPreCollisionDistribution(ftemp, nx1, nx2, nx3); + distributionsH->getPreCollisionDistribution(h, x1, x2, x3); + distributionsH->getPreCollisionDistribution(htemp, nx1, nx2, nx3); + distributionsH2->getPreCollisionDistribution(h2, x1, x2, x3); + distributionsH2->getPreCollisionDistribution(h2temp, nx1, nx2, nx3); real /* phi,*/ p1, vx1, vx2, vx3; @@ -121,375 +121,375 @@ void MultiphaseNonReflectingOutflowBCStrategy::applyBC() calcMacrosFct(f, p1, vx1, vx2, vx3); switch (direction) { - case DIR_P00: - f[DIR_P00] = ftemp[DIR_P00] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P00]; - f[DIR_PP0] = ftemp[DIR_PP0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PP0]; - f[DIR_PM0] = ftemp[DIR_PM0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PM0]; - f[DIR_P0P] = ftemp[DIR_P0P] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P0P]; - f[DIR_P0M] = ftemp[DIR_P0M] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P0M]; - f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PPP]; - f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PMP]; - f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PPM]; - f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PMM]; - - distributions->setDistributionInvForDirection(f[DIR_P00], x1 + DX1[DIR_M00], x2 + DX2[DIR_M00], x3 + DX3[DIR_M00], DIR_M00); - distributions->setDistributionInvForDirection(f[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0); - distributions->setDistributionInvForDirection(f[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0); - distributions->setDistributionInvForDirection(f[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M); - distributions->setDistributionInvForDirection(f[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P); - distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM); - distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM); - distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP); - distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP); - - h[DIR_P00] = htemp[DIR_P00] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_P00]; - h[DIR_PP0] = htemp[DIR_PP0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PP0]; - h[DIR_PM0] = htemp[DIR_PM0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PM0]; - h[DIR_P0P] = htemp[DIR_P0P] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_P0P]; - h[DIR_P0M] = htemp[DIR_P0M] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_P0M]; - h[DIR_PPP] = htemp[DIR_PPP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PPP]; - h[DIR_PMP] = htemp[DIR_PMP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PMP]; - h[DIR_PPM] = htemp[DIR_PPM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PPM]; - h[DIR_PMM] = htemp[DIR_PMM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PMM]; - - distributionsH->setDistributionInvForDirection(h[DIR_P00], x1 + DX1[DIR_M00], x2 + DX2[DIR_M00], x3 + DX3[DIR_M00], DIR_M00); - distributionsH->setDistributionInvForDirection(h[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0); - distributionsH->setDistributionInvForDirection(h[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0); - distributionsH->setDistributionInvForDirection(h[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M); - distributionsH->setDistributionInvForDirection(h[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P); - distributionsH->setDistributionInvForDirection(h[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM); - distributionsH->setDistributionInvForDirection(h[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM); - distributionsH->setDistributionInvForDirection(h[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP); - distributionsH->setDistributionInvForDirection(h[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP); - - h2[DIR_P00] = c1o2 * (h2temp[DIR_P00] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h2[DIR_P00]); - h2[DIR_PP0] = c1o2 * (h2temp[DIR_PP0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h2[DIR_PP0]); - h2[DIR_PM0] = c1o2 * (h2temp[DIR_PM0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h2[DIR_PM0]); - h2[DIR_P0P] = c1o2 * (h2temp[DIR_P0P] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h2[DIR_P0P]); - h2[DIR_P0M] = c1o2 * (h2temp[DIR_P0M] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h2[DIR_P0M]); - h2[DIR_PPP] = c1o2 * (h2temp[DIR_PPP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h2[DIR_PPP]); - h2[DIR_PMP] = c1o2 * (h2temp[DIR_PMP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h2[DIR_PMP]); - h2[DIR_PPM] = c1o2 * (h2temp[DIR_PPM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h2[DIR_PPM]); - h2[DIR_PMM] = c1o2 * (h2temp[DIR_PMM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h2[DIR_PMM]); - - distributionsH2->setDistributionInvForDirection(h2[DIR_P00], x1 + DX1[DIR_M00], x2 + DX2[DIR_M00], x3 + DX3[DIR_M00], DIR_M00); - distributionsH2->setDistributionInvForDirection(h2[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0); - distributionsH2->setDistributionInvForDirection(h2[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0); - distributionsH2->setDistributionInvForDirection(h2[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M); - distributionsH2->setDistributionInvForDirection(h2[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P); - distributionsH2->setDistributionInvForDirection(h2[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM); - distributionsH2->setDistributionInvForDirection(h2[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM); - distributionsH2->setDistributionInvForDirection(h2[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP); - distributionsH2->setDistributionInvForDirection(h2[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP); + case dP00: + f[dP00] = ftemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP00]; + f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPP0]; + f[dPM0] = ftemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPM0]; + f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0P]; + f[dP0M] = ftemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0M]; + f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPP]; + f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMP]; + f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPM]; + f[dPMM] = ftemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMM]; + + distributions->setPreCollisionDistributionForDirection(f[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00); + distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); + distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); + distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); + distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); + distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + + h[dP00] = htemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP00]; + h[dPP0] = htemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPP0]; + h[dPM0] = htemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPM0]; + h[dP0P] = htemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP0P]; + h[dP0M] = htemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP0M]; + h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPPP]; + h[dPMP] = htemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPMP]; + h[dPPM] = htemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPPM]; + h[dPMM] = htemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPMM]; + + distributionsH->setPreCollisionDistributionForDirection(h[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00); + distributionsH->setPreCollisionDistributionForDirection(h[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); + distributionsH->setPreCollisionDistributionForDirection(h[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); + distributionsH->setPreCollisionDistributionForDirection(h[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); + distributionsH->setPreCollisionDistributionForDirection(h[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); + distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + + h2[dP00] = c1o2 * (h2temp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dP00]); + h2[dPP0] = c1o2 * (h2temp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPP0]); + h2[dPM0] = c1o2 * (h2temp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPM0]); + h2[dP0P] = c1o2 * (h2temp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dP0P]); + h2[dP0M] = c1o2 * (h2temp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dP0M]); + h2[dPPP] = c1o2 * (h2temp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPPP]); + h2[dPMP] = c1o2 * (h2temp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPMP]); + h2[dPPM] = c1o2 * (h2temp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPPM]); + h2[dPMM] = c1o2 * (h2temp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h2[dPMM]); + + distributionsH2->setPreCollisionDistributionForDirection(h2[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00); + distributionsH2->setPreCollisionDistributionForDirection(h2[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); + distributionsH2->setPreCollisionDistributionForDirection(h2[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); + distributionsH2->setPreCollisionDistributionForDirection(h2[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); + distributionsH2->setPreCollisionDistributionForDirection(h2[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); + distributionsH2->setPreCollisionDistributionForDirection(h2[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributionsH2->setPreCollisionDistributionForDirection(h2[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributionsH2->setPreCollisionDistributionForDirection(h2[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributionsH2->setPreCollisionDistributionForDirection(h2[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); break; - case DIR_M00: - f[DIR_M00] = ftemp[DIR_M00] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M00]; - f[DIR_MP0] = ftemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MP0]; - f[DIR_MM0] = ftemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MM0]; - f[DIR_M0P] = ftemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M0P]; - f[DIR_M0M] = ftemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M0M]; - f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MPP]; - f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MMP]; - f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MPM]; - f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MMM]; - - distributions->setDistributionInvForDirection(f[DIR_M00], x1 + DX1[DIR_P00], x2 + DX2[DIR_P00], x3 + DX3[DIR_P00], DIR_P00); - distributions->setDistributionInvForDirection(f[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0); - distributions->setDistributionInvForDirection(f[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0); - distributions->setDistributionInvForDirection(f[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M); - distributions->setDistributionInvForDirection(f[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P); - distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM); - distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM); - distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP); - distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP); - - h[DIR_M00] = htemp[DIR_M00] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_M00]; - h[DIR_MP0] = htemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MP0]; - h[DIR_MM0] = htemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MM0]; - h[DIR_M0P] = htemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_M0P]; - h[DIR_M0M] = htemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_M0M]; - h[DIR_MPP] = htemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MPP]; - h[DIR_MMP] = htemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MMP]; - h[DIR_MPM] = htemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MPM]; - h[DIR_MMM] = htemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MMM]; - - distributionsH->setDistributionInvForDirection(h[DIR_M00], x1 + DX1[DIR_P00], x2 + DX2[DIR_P00], x3 + DX3[DIR_P00], DIR_P00); - distributionsH->setDistributionInvForDirection(h[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0); - distributionsH->setDistributionInvForDirection(h[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0); - distributionsH->setDistributionInvForDirection(h[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M); - distributionsH->setDistributionInvForDirection(h[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P); - distributionsH->setDistributionInvForDirection(h[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM); - distributionsH->setDistributionInvForDirection(h[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM); - distributionsH->setDistributionInvForDirection(h[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP); - distributionsH->setDistributionInvForDirection(h[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP); - - h2[DIR_M00] = c1o2 * (htemp[DIR_M00] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h2[DIR_M00]); - h2[DIR_MP0] = c1o2 * (htemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h2[DIR_MP0]); - h2[DIR_MM0] = c1o2 * (htemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h2[DIR_MM0]); - h2[DIR_M0P] = c1o2 * (htemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h2[DIR_M0P]); - h2[DIR_M0M] = c1o2 * (htemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h2[DIR_M0M]); - h2[DIR_MPP] = c1o2 * (htemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h2[DIR_MPP]); - h2[DIR_MMP] = c1o2 * (htemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h2[DIR_MMP]); - h2[DIR_MPM] = c1o2 * (htemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h2[DIR_MPM]); - h2[DIR_MMM] = c1o2 * (htemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h2[DIR_MMM]); - - distributionsH2->setDistributionInvForDirection(h2[DIR_M00], x1 + DX1[DIR_P00], x2 + DX2[DIR_P00], x3 + DX3[DIR_P00], DIR_P00); - distributionsH2->setDistributionInvForDirection(h2[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0); - distributionsH2->setDistributionInvForDirection(h2[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0); - distributionsH2->setDistributionInvForDirection(h2[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M); - distributionsH2->setDistributionInvForDirection(h2[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P); - distributionsH2->setDistributionInvForDirection(h2[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM); - distributionsH2->setDistributionInvForDirection(h2[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM); - distributionsH2->setDistributionInvForDirection(h2[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP); - distributionsH2->setDistributionInvForDirection(h2[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP); + case dM00: + f[dM00] = ftemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM00]; + f[dMP0] = ftemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMP0]; + f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMM0]; + f[dM0P] = ftemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0P]; + f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0M]; + f[dMPP] = ftemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPP]; + f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMP]; + f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPM]; + f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMM]; + + distributions->setPreCollisionDistributionForDirection(f[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00); + distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); + distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); + distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); + distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); + distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); + + h[dM00] = htemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM00]; + h[dMP0] = htemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMP0]; + h[dMM0] = htemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMM0]; + h[dM0P] = htemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM0P]; + h[dM0M] = htemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM0M]; + h[dMPP] = htemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMPP]; + h[dMMP] = htemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMMP]; + h[dMPM] = htemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMPM]; + h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMMM]; + + distributionsH->setPreCollisionDistributionForDirection(h[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00); + distributionsH->setPreCollisionDistributionForDirection(h[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); + distributionsH->setPreCollisionDistributionForDirection(h[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); + distributionsH->setPreCollisionDistributionForDirection(h[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); + distributionsH->setPreCollisionDistributionForDirection(h[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); + distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); + + h2[dM00] = c1o2 * (htemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dM00]); + h2[dMP0] = c1o2 * (htemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMP0]); + h2[dMM0] = c1o2 * (htemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMM0]); + h2[dM0P] = c1o2 * (htemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dM0P]); + h2[dM0M] = c1o2 * (htemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dM0M]); + h2[dMPP] = c1o2 * (htemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMPP]); + h2[dMMP] = c1o2 * (htemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMMP]); + h2[dMPM] = c1o2 * (htemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMPM]); + h2[dMMM] = c1o2 * (htemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h2[dMMM]); + + distributionsH2->setPreCollisionDistributionForDirection(h2[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00); + distributionsH2->setPreCollisionDistributionForDirection(h2[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); + distributionsH2->setPreCollisionDistributionForDirection(h2[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); + distributionsH2->setPreCollisionDistributionForDirection(h2[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); + distributionsH2->setPreCollisionDistributionForDirection(h2[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); + distributionsH2->setPreCollisionDistributionForDirection(h2[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributionsH2->setPreCollisionDistributionForDirection(h2[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + distributionsH2->setPreCollisionDistributionForDirection(h2[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + distributionsH2->setPreCollisionDistributionForDirection(h2[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); break; - case DIR_0P0: - f[DIR_0P0] = ftemp[DIR_0P0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0P0]; - f[DIR_PP0] = ftemp[DIR_PP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PP0]; - f[DIR_MP0] = ftemp[DIR_MP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MP0]; - f[DIR_0PP] = ftemp[DIR_0PP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0PP]; - f[DIR_0PM] = ftemp[DIR_0PM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0PM]; - f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PPP]; - f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MPP]; - f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PPM]; - f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MPM]; - - distributions->setDistributionInvForDirection(f[DIR_0P0], x1 + DX1[DIR_0M0], x2 + DX2[DIR_0M0], x3 + DX3[DIR_0M0], DIR_0M0); - distributions->setDistributionInvForDirection(f[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0); - distributions->setDistributionInvForDirection(f[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0); - distributions->setDistributionInvForDirection(f[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM); - distributions->setDistributionInvForDirection(f[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP); - distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM); - distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM); - distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP); - distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP); - - h[DIR_0P0] = htemp[DIR_0P0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_0P0]; - h[DIR_PP0] = htemp[DIR_PP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_PP0]; - h[DIR_MP0] = htemp[DIR_MP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_MP0]; - h[DIR_0PP] = htemp[DIR_0PP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_0PP]; - h[DIR_0PM] = htemp[DIR_0PM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_0PM]; - h[DIR_PPP] = htemp[DIR_PPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_PPP]; - h[DIR_MPP] = htemp[DIR_MPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_MPP]; - h[DIR_PPM] = htemp[DIR_PPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_PPM]; - h[DIR_MPM] = htemp[DIR_MPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_MPM]; - - distributionsH->setDistributionInvForDirection(h[DIR_0P0], x1 + DX1[DIR_0M0], x2 + DX2[DIR_0M0], x3 + DX3[DIR_0M0], DIR_0M0); - distributionsH->setDistributionInvForDirection(h[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0); - distributionsH->setDistributionInvForDirection(h[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0); - distributionsH->setDistributionInvForDirection(h[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM); - distributionsH->setDistributionInvForDirection(h[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP); - distributionsH->setDistributionInvForDirection(h[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM); - distributionsH->setDistributionInvForDirection(h[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM); - distributionsH->setDistributionInvForDirection(h[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP); - distributionsH->setDistributionInvForDirection(h[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP); - - h2[DIR_0P0] = c1o2 * (htemp[DIR_0P0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h2[DIR_0P0]); - h2[DIR_PP0] = c1o2 * (htemp[DIR_PP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h2[DIR_PP0]); - h2[DIR_MP0] = c1o2 * (htemp[DIR_MP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h2[DIR_MP0]); - h2[DIR_0PP] = c1o2 * (htemp[DIR_0PP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h2[DIR_0PP]); - h2[DIR_0PM] = c1o2 * (htemp[DIR_0PM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h2[DIR_0PM]); - h2[DIR_PPP] = c1o2 * (htemp[DIR_PPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h2[DIR_PPP]); - h2[DIR_MPP] = c1o2 * (htemp[DIR_MPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h2[DIR_MPP]); - h2[DIR_PPM] = c1o2 * (htemp[DIR_PPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h2[DIR_PPM]); - h2[DIR_MPM] = c1o2 * (htemp[DIR_MPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h2[DIR_MPM]); - - distributionsH2->setDistributionInvForDirection(h2[DIR_0P0], x1 + DX1[DIR_0M0], x2 + DX2[DIR_0M0], x3 + DX3[DIR_0M0], DIR_0M0); - distributionsH2->setDistributionInvForDirection(h2[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0); - distributionsH2->setDistributionInvForDirection(h2[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0); - distributionsH2->setDistributionInvForDirection(h2[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM); - distributionsH2->setDistributionInvForDirection(h2[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP); - distributionsH2->setDistributionInvForDirection(h2[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM); - distributionsH2->setDistributionInvForDirection(h2[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM); - distributionsH2->setDistributionInvForDirection(h2[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP); - distributionsH2->setDistributionInvForDirection(h2[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP); + case d0P0: + f[d0P0] = ftemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0P0]; + f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPP0]; + f[dMP0] = ftemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMP0]; + f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PP]; + f[d0PM] = ftemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PM]; + f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPP]; + f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPP]; + f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPM]; + f[dMPM] = ftemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPM]; + + distributions->setPreCollisionDistributionForDirection(f[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0); + distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); + distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); + distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); + distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); + distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + + h[d0P0] = htemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0P0]; + h[dPP0] = htemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPP0]; + h[dMP0] = htemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMP0]; + h[d0PP] = htemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0PP]; + h[d0PM] = htemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0PM]; + h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPPP]; + h[dMPP] = htemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMPP]; + h[dPPM] = htemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPPM]; + h[dMPM] = htemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMPM]; + + distributionsH->setPreCollisionDistributionForDirection(h[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0); + distributionsH->setPreCollisionDistributionForDirection(h[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); + distributionsH->setPreCollisionDistributionForDirection(h[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); + distributionsH->setPreCollisionDistributionForDirection(h[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); + distributionsH->setPreCollisionDistributionForDirection(h[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); + distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + + h2[d0P0] = c1o2 * (htemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[d0P0]); + h2[dPP0] = c1o2 * (htemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dPP0]); + h2[dMP0] = c1o2 * (htemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dMP0]); + h2[d0PP] = c1o2 * (htemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[d0PP]); + h2[d0PM] = c1o2 * (htemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[d0PM]); + h2[dPPP] = c1o2 * (htemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dPPP]); + h2[dMPP] = c1o2 * (htemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dMPP]); + h2[dPPM] = c1o2 * (htemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dPPM]); + h2[dMPM] = c1o2 * (htemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h2[dMPM]); + + distributionsH2->setPreCollisionDistributionForDirection(h2[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0); + distributionsH2->setPreCollisionDistributionForDirection(h2[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); + distributionsH2->setPreCollisionDistributionForDirection(h2[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); + distributionsH2->setPreCollisionDistributionForDirection(h2[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); + distributionsH2->setPreCollisionDistributionForDirection(h2[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); + distributionsH2->setPreCollisionDistributionForDirection(h2[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributionsH2->setPreCollisionDistributionForDirection(h2[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributionsH2->setPreCollisionDistributionForDirection(h2[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributionsH2->setPreCollisionDistributionForDirection(h2[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); break; - case DIR_0M0: - f[DIR_0M0] = ftemp[DIR_0M0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0M0]; - f[DIR_PM0] = ftemp[DIR_PM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PM0]; - f[DIR_MM0] = ftemp[DIR_MM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MM0]; - f[DIR_0MP] = ftemp[DIR_0MP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0MP]; - f[DIR_0MM] = ftemp[DIR_0MM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0MM]; - f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PMP]; - f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MMP]; - f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PMM]; - f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MMM]; - - distributions->setDistributionInvForDirection(f[DIR_0M0], x1 + DX1[DIR_0P0], x2 + DX2[DIR_0P0], x3 + DX3[DIR_0P0], DIR_0P0); - distributions->setDistributionInvForDirection(f[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0); - distributions->setDistributionInvForDirection(f[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0); - distributions->setDistributionInvForDirection(f[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM); - distributions->setDistributionInvForDirection(f[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP); - distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM); - distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM); - distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP); - distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP); - - h[DIR_0M0] = htemp[DIR_0M0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_0M0]; - h[DIR_PM0] = htemp[DIR_PM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_PM0]; - h[DIR_MM0] = htemp[DIR_MM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_MM0]; - h[DIR_0MP] = htemp[DIR_0MP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_0MP]; - h[DIR_0MM] = htemp[DIR_0MM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_0MM]; - h[DIR_PMP] = htemp[DIR_PMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_PMP]; - h[DIR_MMP] = htemp[DIR_MMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_MMP]; - h[DIR_PMM] = htemp[DIR_PMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_PMM]; - h[DIR_MMM] = htemp[DIR_MMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_MMM]; - - distributionsH->setDistributionInvForDirection(h[DIR_0M0], x1 + DX1[DIR_0P0], x2 + DX2[DIR_0P0], x3 + DX3[DIR_0P0], DIR_0P0); - distributionsH->setDistributionInvForDirection(h[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0); - distributionsH->setDistributionInvForDirection(h[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0); - distributionsH->setDistributionInvForDirection(h[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM); - distributionsH->setDistributionInvForDirection(h[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP); - distributionsH->setDistributionInvForDirection(h[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM); - distributionsH->setDistributionInvForDirection(h[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM); - distributionsH->setDistributionInvForDirection(h[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP); - distributionsH->setDistributionInvForDirection(h[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP); - - h2[DIR_0M0] = c1o2 * (htemp[DIR_0M0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h2[DIR_0M0]); - h2[DIR_PM0] = c1o2 * (htemp[DIR_PM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h2[DIR_PM0]); - h2[DIR_MM0] = c1o2 * (htemp[DIR_MM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h2[DIR_MM0]); - h2[DIR_0MP] = c1o2 * (htemp[DIR_0MP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h2[DIR_0MP]); - h2[DIR_0MM] = c1o2 * (htemp[DIR_0MM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h2[DIR_0MM]); - h2[DIR_PMP] = c1o2 * (htemp[DIR_PMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h2[DIR_PMP]); - h2[DIR_MMP] = c1o2 * (htemp[DIR_MMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h2[DIR_MMP]); - h2[DIR_PMM] = c1o2 * (htemp[DIR_PMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h2[DIR_PMM]); - h2[DIR_MMM] = c1o2 * (htemp[DIR_MMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h2[DIR_MMM]); - - distributionsH2->setDistributionInvForDirection(h2[DIR_0M0], x1 + DX1[DIR_0P0], x2 + DX2[DIR_0P0], x3 + DX3[DIR_0P0], DIR_0P0); - distributionsH2->setDistributionInvForDirection(h2[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0); - distributionsH2->setDistributionInvForDirection(h2[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0); - distributionsH2->setDistributionInvForDirection(h2[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM); - distributionsH2->setDistributionInvForDirection(h2[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP); - distributionsH2->setDistributionInvForDirection(h2[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM); - distributionsH2->setDistributionInvForDirection(h2[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM); - distributionsH2->setDistributionInvForDirection(h2[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP); - distributionsH2->setDistributionInvForDirection(h2[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP); + case d0M0: + f[d0M0] = ftemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0M0]; + f[dPM0] = ftemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPM0]; + f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMM0]; + f[d0MP] = ftemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MP]; + f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MM]; + f[dPMP] = ftemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMP]; + f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMP]; + f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMM]; + f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMM]; + + distributions->setPreCollisionDistributionForDirection(f[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0); + distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); + distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); + distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); + distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); + distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); + + h[d0M0] = htemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0M0]; + h[dPM0] = htemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPM0]; + h[dMM0] = htemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMM0]; + h[d0MP] = htemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0MP]; + h[d0MM] = htemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0MM]; + h[dPMP] = htemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPMP]; + h[dMMP] = htemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMMP]; + h[dPMM] = htemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPMM]; + h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMMM]; + + distributionsH->setPreCollisionDistributionForDirection(h[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0); + distributionsH->setPreCollisionDistributionForDirection(h[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); + distributionsH->setPreCollisionDistributionForDirection(h[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); + distributionsH->setPreCollisionDistributionForDirection(h[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); + distributionsH->setPreCollisionDistributionForDirection(h[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); + distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); + + h2[d0M0] = c1o2 * (htemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[d0M0]); + h2[dPM0] = c1o2 * (htemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dPM0]); + h2[dMM0] = c1o2 * (htemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dMM0]); + h2[d0MP] = c1o2 * (htemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[d0MP]); + h2[d0MM] = c1o2 * (htemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[d0MM]); + h2[dPMP] = c1o2 * (htemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dPMP]); + h2[dMMP] = c1o2 * (htemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dMMP]); + h2[dPMM] = c1o2 * (htemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dPMM]); + h2[dMMM] = c1o2 * (htemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h2[dMMM]); + + distributionsH2->setPreCollisionDistributionForDirection(h2[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0); + distributionsH2->setPreCollisionDistributionForDirection(h2[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); + distributionsH2->setPreCollisionDistributionForDirection(h2[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); + distributionsH2->setPreCollisionDistributionForDirection(h2[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); + distributionsH2->setPreCollisionDistributionForDirection(h2[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); + distributionsH2->setPreCollisionDistributionForDirection(h2[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributionsH2->setPreCollisionDistributionForDirection(h2[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + distributionsH2->setPreCollisionDistributionForDirection(h2[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + distributionsH2->setPreCollisionDistributionForDirection(h2[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); break; - case DIR_00P: - f[DIR_00P] = ftemp[DIR_00P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_00P]; - f[DIR_P0P] = ftemp[DIR_P0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_P0P]; - f[DIR_M0P] = ftemp[DIR_M0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_M0P]; - f[DIR_0PP] = ftemp[DIR_0PP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_0PP]; - f[DIR_0MP] = ftemp[DIR_0MP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_0MP]; - f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_PPP]; - f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_MPP]; - f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_PMP]; - f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_MMP]; - - distributions->setDistributionInvForDirection(f[DIR_00P], x1 + DX1[DIR_00M], x2 + DX2[DIR_00M], x3 + DX3[DIR_00M], DIR_00M); - distributions->setDistributionInvForDirection(f[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M); - distributions->setDistributionInvForDirection(f[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M); - distributions->setDistributionInvForDirection(f[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM); - distributions->setDistributionInvForDirection(f[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM); - distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM); - distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM); - distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM); - distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM); - - h[DIR_00P] = htemp[DIR_00P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_00P]; - h[DIR_P0P] = htemp[DIR_P0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_P0P]; - h[DIR_M0P] = htemp[DIR_M0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_M0P]; - h[DIR_0PP] = htemp[DIR_0PP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_0PP]; - h[DIR_0MP] = htemp[DIR_0MP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_0MP]; - h[DIR_PPP] = htemp[DIR_PPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_PPP]; - h[DIR_MPP] = htemp[DIR_MPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_MPP]; - h[DIR_PMP] = htemp[DIR_PMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_PMP]; - h[DIR_MMP] = htemp[DIR_MMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_MMP]; - - distributionsH->setDistributionInvForDirection(h[DIR_00P], x1 + DX1[DIR_00M], x2 + DX2[DIR_00M], x3 + DX3[DIR_00M], DIR_00M); - distributionsH->setDistributionInvForDirection(h[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M); - distributionsH->setDistributionInvForDirection(h[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M); - distributionsH->setDistributionInvForDirection(h[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM); - distributionsH->setDistributionInvForDirection(h[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM); - distributionsH->setDistributionInvForDirection(h[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM); - distributionsH->setDistributionInvForDirection(h[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM); - distributionsH->setDistributionInvForDirection(h[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM); - distributionsH->setDistributionInvForDirection(h[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM); - - h2[DIR_00P] = c1o2 * (htemp[DIR_00P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h2[DIR_00P]); - h2[DIR_P0P] = c1o2 * (htemp[DIR_P0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h2[DIR_P0P]); - h2[DIR_M0P] = c1o2 * (htemp[DIR_M0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h2[DIR_M0P]); - h2[DIR_0PP] = c1o2 * (htemp[DIR_0PP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h2[DIR_0PP]); - h2[DIR_0MP] = c1o2 * (htemp[DIR_0MP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h2[DIR_0MP]); - h2[DIR_PPP] = c1o2 * (htemp[DIR_PPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h2[DIR_PPP]); - h2[DIR_MPP] = c1o2 * (htemp[DIR_MPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h2[DIR_MPP]); - h2[DIR_PMP] = c1o2 * (htemp[DIR_PMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h2[DIR_PMP]); - h2[DIR_MMP] = c1o2 * (htemp[DIR_MMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h2[DIR_MMP]); - - distributionsH2->setDistributionInvForDirection(h2[DIR_00P], x1 + DX1[DIR_00M], x2 + DX2[DIR_00M], x3 + DX3[DIR_00M], DIR_00M); - distributionsH2->setDistributionInvForDirection(h2[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M); - distributionsH2->setDistributionInvForDirection(h2[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M); - distributionsH2->setDistributionInvForDirection(h2[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM); - distributionsH2->setDistributionInvForDirection(h2[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM); - distributionsH2->setDistributionInvForDirection(h2[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM); - distributionsH2->setDistributionInvForDirection(h2[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM); - distributionsH2->setDistributionInvForDirection(h2[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM); - distributionsH2->setDistributionInvForDirection(h2[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM); + case d00P: + f[d00P] = ftemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d00P]; + f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dP0P]; + f[dM0P] = ftemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dM0P]; + f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0PP]; + f[d0MP] = ftemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0MP]; + f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPPP]; + f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMPP]; + f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPMP]; + f[dMMP] = ftemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMMP]; + + distributions->setPreCollisionDistributionForDirection(f[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M); + distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); + distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); + distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); + distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); + distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + + h[d00P] = htemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d00P]; + h[dP0P] = htemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dP0P]; + h[dM0P] = htemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dM0P]; + h[d0PP] = htemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d0PP]; + h[d0MP] = htemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d0MP]; + h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dPPP]; + h[dMPP] = htemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dMPP]; + h[dPMP] = htemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dPMP]; + h[dMMP] = htemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dMMP]; + + distributionsH->setPreCollisionDistributionForDirection(h[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M); + distributionsH->setPreCollisionDistributionForDirection(h[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); + distributionsH->setPreCollisionDistributionForDirection(h[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); + distributionsH->setPreCollisionDistributionForDirection(h[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); + distributionsH->setPreCollisionDistributionForDirection(h[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); + distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + + h2[d00P] = c1o2 * (htemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[d00P]); + h2[dP0P] = c1o2 * (htemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dP0P]); + h2[dM0P] = c1o2 * (htemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dM0P]); + h2[d0PP] = c1o2 * (htemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[d0PP]); + h2[d0MP] = c1o2 * (htemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[d0MP]); + h2[dPPP] = c1o2 * (htemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dPPP]); + h2[dMPP] = c1o2 * (htemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dMPP]); + h2[dPMP] = c1o2 * (htemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dPMP]); + h2[dMMP] = c1o2 * (htemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h2[dMMP]); + + distributionsH2->setPreCollisionDistributionForDirection(h2[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M); + distributionsH2->setPreCollisionDistributionForDirection(h2[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); + distributionsH2->setPreCollisionDistributionForDirection(h2[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); + distributionsH2->setPreCollisionDistributionForDirection(h2[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); + distributionsH2->setPreCollisionDistributionForDirection(h2[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); + distributionsH2->setPreCollisionDistributionForDirection(h2[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributionsH2->setPreCollisionDistributionForDirection(h2[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributionsH2->setPreCollisionDistributionForDirection(h2[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributionsH2->setPreCollisionDistributionForDirection(h2[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); break; - case DIR_00M: - f[DIR_00M] = ftemp[DIR_00M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_00M]; - f[DIR_P0M] = ftemp[DIR_P0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_P0M]; - f[DIR_M0M] = ftemp[DIR_M0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_M0M]; - f[DIR_0PM] = ftemp[DIR_0PM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_0PM]; - f[DIR_0MM] = ftemp[DIR_0MM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_0MM]; - f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_PPM]; - f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_MPM]; - f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_PMM]; - f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_MMM]; - - distributions->setDistributionInvForDirection(f[DIR_00M], x1 + DX1[DIR_00P], x2 + DX2[DIR_00P], x3 + DX3[DIR_00P], DIR_00P); - distributions->setDistributionInvForDirection(f[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P); - distributions->setDistributionInvForDirection(f[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P); - distributions->setDistributionInvForDirection(f[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP); - distributions->setDistributionInvForDirection(f[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP); - distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP); - distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP); - distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP); - distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP); - - h[DIR_00M] = htemp[DIR_00M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_00M]; - h[DIR_P0M] = htemp[DIR_P0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_P0M]; - h[DIR_M0M] = htemp[DIR_M0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_M0M]; - h[DIR_0PM] = htemp[DIR_0PM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_0PM]; - h[DIR_0MM] = htemp[DIR_0MM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_0MM]; - h[DIR_PPM] = htemp[DIR_PPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_PPM]; - h[DIR_MPM] = htemp[DIR_MPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_MPM]; - h[DIR_PMM] = htemp[DIR_PMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_PMM]; - h[DIR_MMM] = htemp[DIR_MMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_MMM]; - - distributionsH->setDistributionInvForDirection(h[DIR_00M], x1 + DX1[DIR_00P], x2 + DX2[DIR_00P], x3 + DX3[DIR_00P], DIR_00P); - distributionsH->setDistributionInvForDirection(h[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P); - distributionsH->setDistributionInvForDirection(h[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P); - distributionsH->setDistributionInvForDirection(h[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP); - distributionsH->setDistributionInvForDirection(h[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP); - distributionsH->setDistributionInvForDirection(h[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP); - distributionsH->setDistributionInvForDirection(h[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP); - distributionsH->setDistributionInvForDirection(h[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP); - distributionsH->setDistributionInvForDirection(h[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP); - - h2[DIR_00M] = c1o2 * (htemp[DIR_00M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h2[DIR_00M]); - h2[DIR_P0M] = c1o2 * (htemp[DIR_P0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h2[DIR_P0M]); - h2[DIR_M0M] = c1o2 * (htemp[DIR_M0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h2[DIR_M0M]); - h2[DIR_0PM] = c1o2 * (htemp[DIR_0PM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h2[DIR_0PM]); - h2[DIR_0MM] = c1o2 * (htemp[DIR_0MM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h2[DIR_0MM]); - h2[DIR_PPM] = c1o2 * (htemp[DIR_PPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h2[DIR_PPM]); - h2[DIR_MPM] = c1o2 * (htemp[DIR_MPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h2[DIR_MPM]); - h2[DIR_PMM] = c1o2 * (htemp[DIR_PMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h2[DIR_PMM]); - h2[DIR_MMM] = c1o2 * (htemp[DIR_MMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h2[DIR_MMM]); - - distributionsH2->setDistributionInvForDirection(h2[DIR_00M], x1 + DX1[DIR_00P], x2 + DX2[DIR_00P], x3 + DX3[DIR_00P], DIR_00P); - distributionsH2->setDistributionInvForDirection(h2[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P); - distributionsH2->setDistributionInvForDirection(h2[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P); - distributionsH2->setDistributionInvForDirection(h2[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP); - distributionsH2->setDistributionInvForDirection(h2[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP); - distributionsH2->setDistributionInvForDirection(h2[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP); - distributionsH2->setDistributionInvForDirection(h2[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP); - distributionsH2->setDistributionInvForDirection(h2[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP); - distributionsH2->setDistributionInvForDirection(h2[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP); + case d00M: + f[d00M] = ftemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d00M]; + f[dP0M] = ftemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dP0M]; + f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dM0M]; + f[d0PM] = ftemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0PM]; + f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0MM]; + f[dPPM] = ftemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPPM]; + f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMPM]; + f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPMM]; + f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMMM]; + + distributions->setPreCollisionDistributionForDirection(f[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P); + distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); + distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); + distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); + distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); + distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); + + h[d00M] = htemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d00M]; + h[dP0M] = htemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dP0M]; + h[dM0M] = htemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dM0M]; + h[d0PM] = htemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d0PM]; + h[d0MM] = htemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d0MM]; + h[dPPM] = htemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dPPM]; + h[dMPM] = htemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dMPM]; + h[dPMM] = htemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dPMM]; + h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dMMM]; + + distributionsH->setPreCollisionDistributionForDirection(h[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P); + distributionsH->setPreCollisionDistributionForDirection(h[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); + distributionsH->setPreCollisionDistributionForDirection(h[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); + distributionsH->setPreCollisionDistributionForDirection(h[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); + distributionsH->setPreCollisionDistributionForDirection(h[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); + distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); + + h2[d00M] = c1o2 * (htemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[d00M]); + h2[dP0M] = c1o2 * (htemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dP0M]); + h2[dM0M] = c1o2 * (htemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dM0M]); + h2[d0PM] = c1o2 * (htemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[d0PM]); + h2[d0MM] = c1o2 * (htemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[d0MM]); + h2[dPPM] = c1o2 * (htemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dPPM]); + h2[dMPM] = c1o2 * (htemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dMPM]); + h2[dPMM] = c1o2 * (htemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dPMM]); + h2[dMMM] = c1o2 * (htemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h2[dMMM]); + + distributionsH2->setPreCollisionDistributionForDirection(h2[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P); + distributionsH2->setPreCollisionDistributionForDirection(h2[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); + distributionsH2->setPreCollisionDistributionForDirection(h2[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); + distributionsH2->setPreCollisionDistributionForDirection(h2[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); + distributionsH2->setPreCollisionDistributionForDirection(h2[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); + distributionsH2->setPreCollisionDistributionForDirection(h2[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributionsH2->setPreCollisionDistributionForDirection(h2[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + distributionsH2->setPreCollisionDistributionForDirection(h2[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + distributionsH2->setPreCollisionDistributionForDirection(h2[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); break; default: diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.cpp index d8f7723881cdeec780bc0aac8bc6d272872f893d..26535ebd29d5dc2e4ddf835957920174bcc03cc1 100644 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.cpp +++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphasePressureBCStrategy.cpp @@ -77,10 +77,10 @@ void MultiphasePressureBCStrategy::applyBC() //LBMReal heq[D3Q27System::ENDF+1]; LBMReal htemp[D3Q27System::ENDF+1]; - distributions->getDistributionInv(f, x1, x2, x3); - distributionsH->getDistributionInv(h, x1, x2, x3); + distributions->getPostCollisionDistribution(f, x1, x2, x3); + distributionsH->getPostCollisionDistribution(h, x1, x2, x3); if (distributionsH2) - distributionsH2->getDistributionInv(h2, x1, x2, x3); + distributionsH2->getPostCollisionDistribution(h2, x1, x2, x3); LBMReal phi, vx1, vx2, vx3, p1, phiBC; D3Q27System::calcDensity(h, phi); diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.cpp index 55594ae561ae4c1b60148c6322755ff5bdcc27c4..91b141cce30a5363996714f00f68462a189cc76f 100644 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.cpp +++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseSlipBCStrategy.cpp @@ -69,8 +69,8 @@ void MultiphaseSlipBCStrategy::applyBC() real h[D3Q27System::ENDF+1]; real feq[D3Q27System::ENDF+1]; real heq[D3Q27System::ENDF+1]; - distributions->getDistributionInv(f, x1, x2, x3); - distributionsH->getDistributionInv(h, x1, x2, x3); + distributions->getPostCollisionDistribution(f, x1, x2, x3); + distributionsH->getPostCollisionDistribution(h, x1, x2, x3); real p1, vx1, vx2, vx3, phi, rho; @@ -103,40 +103,40 @@ void MultiphaseSlipBCStrategy::applyBC() real velocity = vf::basics::constant::c0o1; switch (invDir) { - case DIR_P00: velocity = (vf::basics::constant::c4o9*(+vx1)); break; //(2/cs^2)(=6)*rho_0(=1 bei imkompr)*wi*u*ei mit cs=1/sqrt(3) - case DIR_M00: velocity = (vf::basics::constant::c4o9*(-vx1)); break; //z.B. aus paper manfred MRT LB models in three dimensions (2002) - case DIR_0P0: velocity = (vf::basics::constant::c4o9*(+vx2)); break; - case DIR_0M0: velocity = (vf::basics::constant::c4o9*(-vx2)); break; - case DIR_00P: velocity = (vf::basics::constant::c4o9*(+vx3)); break; - case DIR_00M: velocity = (vf::basics::constant::c4o9*(-vx3)); break; - case DIR_PP0: velocity = (vf::basics::constant::c1o9*(+vx1+vx2)); break; - case DIR_MM0: velocity = (vf::basics::constant::c1o9*(-vx1-vx2)); break; - case DIR_PM0: velocity = (vf::basics::constant::c1o9*(+vx1-vx2)); break; - case DIR_MP0: velocity = (vf::basics::constant::c1o9*(-vx1+vx2)); break; - case DIR_P0P: velocity = (vf::basics::constant::c1o9*(+vx1+vx3)); break; - case DIR_M0M: velocity = (vf::basics::constant::c1o9*(-vx1-vx3)); break; - case DIR_P0M: velocity = (vf::basics::constant::c1o9*(+vx1-vx3)); break; - case DIR_M0P: velocity = (vf::basics::constant::c1o9*(-vx1+vx3)); break; - case DIR_0PP: velocity = (vf::basics::constant::c1o9*(+vx2+vx3)); break; - case DIR_0MM: velocity = (vf::basics::constant::c1o9*(-vx2-vx3)); break; - case DIR_0PM: velocity = (vf::basics::constant::c1o9*(+vx2-vx3)); break; - case DIR_0MP: velocity = (vf::basics::constant::c1o9*(-vx2+vx3)); break; - case DIR_PPP: velocity = (vf::basics::constant::c1o36*(+vx1+vx2+vx3)); break; - case DIR_MMM: velocity = (vf::basics::constant::c1o36*(-vx1-vx2-vx3)); break; - case DIR_PPM: velocity = (vf::basics::constant::c1o36*(+vx1+vx2-vx3)); break; - case DIR_MMP: velocity = (vf::basics::constant::c1o36*(-vx1-vx2+vx3)); break; - case DIR_PMP: velocity = (vf::basics::constant::c1o36*(+vx1-vx2+vx3)); break; - case DIR_MPM: velocity = (vf::basics::constant::c1o36*(-vx1+vx2-vx3)); break; - case DIR_PMM: velocity = (vf::basics::constant::c1o36*(+vx1-vx2-vx3)); break; - case DIR_MPP: velocity = (vf::basics::constant::c1o36*(-vx1+vx2+vx3)); break; + case dP00: velocity = (vf::basics::constant::c4o9*(+vx1)); break; //(2/cs^2)(=6)*rho_0(=1 bei imkompr)*wi*u*ei mit cs=1/sqrt(3) + case dM00: velocity = (vf::basics::constant::c4o9*(-vx1)); break; //z.B. aus paper manfred MRT LB models in three dimensions (2002) + case d0P0: velocity = (vf::basics::constant::c4o9*(+vx2)); break; + case d0M0: velocity = (vf::basics::constant::c4o9*(-vx2)); break; + case d00P: velocity = (vf::basics::constant::c4o9*(+vx3)); break; + case d00M: velocity = (vf::basics::constant::c4o9*(-vx3)); break; + case dPP0: velocity = (vf::basics::constant::c1o9*(+vx1+vx2)); break; + case dMM0: velocity = (vf::basics::constant::c1o9*(-vx1-vx2)); break; + case dPM0: velocity = (vf::basics::constant::c1o9*(+vx1-vx2)); break; + case dMP0: velocity = (vf::basics::constant::c1o9*(-vx1+vx2)); break; + case dP0P: velocity = (vf::basics::constant::c1o9*(+vx1+vx3)); break; + case dM0M: velocity = (vf::basics::constant::c1o9*(-vx1-vx3)); break; + case dP0M: velocity = (vf::basics::constant::c1o9*(+vx1-vx3)); break; + case dM0P: velocity = (vf::basics::constant::c1o9*(-vx1+vx3)); break; + case d0PP: velocity = (vf::basics::constant::c1o9*(+vx2+vx3)); break; + case d0MM: velocity = (vf::basics::constant::c1o9*(-vx2-vx3)); break; + case d0PM: velocity = (vf::basics::constant::c1o9*(+vx2-vx3)); break; + case d0MP: velocity = (vf::basics::constant::c1o9*(-vx2+vx3)); break; + case dPPP: velocity = (vf::basics::constant::c1o36*(+vx1+vx2+vx3)); break; + case dMMM: velocity = (vf::basics::constant::c1o36*(-vx1-vx2-vx3)); break; + case dPPM: velocity = (vf::basics::constant::c1o36*(+vx1+vx2-vx3)); break; + case dMMP: velocity = (vf::basics::constant::c1o36*(-vx1-vx2+vx3)); break; + case dPMP: velocity = (vf::basics::constant::c1o36*(+vx1-vx2+vx3)); break; + case dMPM: velocity = (vf::basics::constant::c1o36*(-vx1+vx2-vx3)); break; + case dPMM: velocity = (vf::basics::constant::c1o36*(+vx1-vx2-vx3)); break; + case dMPP: velocity = (vf::basics::constant::c1o36*(-vx1+vx2+vx3)); break; default: throw UbException(UB_EXARGS, "unknown error"); } real fReturn = ((vf::basics::constant::c1o1-q)/(vf::basics::constant::c1o1+q))*((f[invDir]-feq[invDir])/(vf::basics::constant::c1o1-collFactor)+feq[invDir])+((q*(f[invDir]+f[fdir])-velocity*rho)/(vf::basics::constant::c1o1+q)); - distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); //real hReturn = ((1.0-q)/(1.0+q))*((h[invDir]-heq[invDir])/(1.0-collFactorPh)+heq[invDir])+((q/(1.0+q))*(h[invDir]+h[fdir])); real hReturn = h[invDir]; - distributionsH->setDistributionForDirection(hReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + distributionsH->setPostCollisionDistributionForDirection(hReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); } } } \ No newline at end of file diff --git a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.cpp b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.cpp index 8a35ecfc53321d9f499aac1c3a711a23ef1b6995..f26be9d6bfa8eb28f3d8e3630b2ba19144e9c1b5 100644 --- a/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.cpp +++ b/src/cpu/MultiphaseFlow/BoundaryConditions/MultiphaseVelocityBCStrategy.cpp @@ -76,10 +76,10 @@ void MultiphaseVelocityBCStrategy::applyBC() real heq[D3Q27System::ENDF+1]; real htemp[D3Q27System::ENDF+1]; - distributions->getDistributionInv(f, x1, x2, x3); - distributionsH->getDistributionInv(h, x1, x2, x3); + distributions->getPostCollisionDistribution(f, x1, x2, x3); + distributionsH->getPostCollisionDistribution(h, x1, x2, x3); if (distributionsH2) - distributionsH2->getDistributionInv(h2, x1, x2, x3); + distributionsH2->getPostCollisionDistribution(h2, x1, x2, x3); real phi, vx1, vx2, vx3, p1, phiBC; D3Q27System::calcDensity(h, phi); @@ -107,9 +107,9 @@ void MultiphaseVelocityBCStrategy::applyBC() // LBMReal hReturn = htemp[fdir]+h[fdir]-heq[fdir]; // //17.03.2021 Let us just set the plain eq // //LBMReal hReturn = htemp[fdir]; - // distributionsH->setDistributionForDirection(hReturn, nx1, nx2, nx3, fdir); + // distributionsH->setPostCollisionDistributionForDirection(hReturn, nx1, nx2, nx3, fdir); // // if (distributionsH2) - // // distributionsH2->setDistributionForDirection(0, nx1, nx2, nx3, fdir); + // // distributionsH2->setPostCollisionDistributionForDirection(0, nx1, nx2, nx3, fdir); // } //} @@ -123,15 +123,15 @@ void MultiphaseVelocityBCStrategy::applyBC() //16.03.2021 quick fix for velocity BC real fReturn = f[invDir] - velocity; //LBMReal fReturn = ((1.0-q)/(1.0+q))*((f[invDir]-feq[invDir])/(1.0-collFactor)+feq[invDir])+((q*(f[invDir]+f[fdir])-velocity)/(1.0+q)); - // distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);//no delay BB - distributions->setDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB + // distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir);//no delay BB + distributions->setPostCollisionDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB real hReturn = htemp[invDir] + h[invDir] - heq[invDir] - velocity*phi; - distributionsH->setDistributionForDirection(hReturn, x1, x2, x3, invDir);//delay BB + distributionsH->setPostCollisionDistributionForDirection(hReturn, x1, x2, x3, invDir);//delay BB if (distributionsH2) { fReturn = h2[invDir] ; - // distributionsH2->setDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); - distributionsH2->setDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB + // distributionsH2->setPostCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); + distributionsH2->setPostCollisionDistributionForDirection(fReturn, x1, x2, x3, invDir);//delay BB } } diff --git a/src/cpu/MultiphaseFlow/CMakeLists.txt b/src/cpu/MultiphaseFlow/CMakeLists.txt index 35765164bce5ce208f1c43fcc7345cbd77f4e999..261919282ce830bfcf1e364443c439338b642d88 100644 --- a/src/cpu/MultiphaseFlow/CMakeLists.txt +++ b/src/cpu/MultiphaseFlow/CMakeLists.txt @@ -1 +1 @@ -vf_add_library(PUBLIC_LINK VirtualFluidsCore) \ No newline at end of file +vf_add_library(PUBLIC_LINK cpu_core) \ No newline at end of file diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.cpp index 2655e916025b1d2b085348c06cb95c425813d83d..f98663a3a2b7cb32e4b62c98abb354dc55b82564 100644 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.cpp +++ b/src/cpu/MultiphaseFlow/LBM/MultiphaseCumulantLBMKernel.cpp @@ -237,13 +237,13 @@ void MultiphaseCumulantLBMKernel::calculate(int step) real dX3_phi = gradX3_phi(); real denom = sqrt(dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi) + 1e-9; - collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[DIR_000] - phiH) / (phiH - phiL); + collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL); - real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi(); + real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); //----------- Calculating Macroscopic Values ------------- - real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH); + real rho = rhoH + rhoToPhi * (phi[d000] - phiH); if (withForcing) { // muX1 = static_cast<double>(x1-1+ix1*maxX1); @@ -310,41 +310,41 @@ void MultiphaseCumulantLBMKernel::calculate(int step) (DX3[dir]) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3)); } - real gamma = WEIGTH[DIR_000] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); - real fac1 = (gamma - WEIGTH[DIR_000]) * c1o3 * rhoToPhi; - forcingTerm[DIR_000] = (-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) + + real gamma = WEIGTH[d000] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); + real fac1 = (gamma - WEIGTH[d000]) * c1o3 * rhoToPhi; + forcingTerm[d000] = (-ux) * (fac1 * dX1_phi + gamma * (mu * dX1_phi + forcingX1)) + (-uy) * (fac1 * dX2_phi + gamma * (mu * dX2_phi + forcingX2)) + (-uz) * (fac1 * dX3_phi + gamma * (mu * dX3_phi + forcingX3)); //-------------------------------------------------------- - mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[DIR_P00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; - mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[DIR_0P0]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; - mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[DIR_00P]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; - mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[DIR_PP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; - mfacb = 3.0 * (mfacb + 0.5 * forcingTerm[DIR_MP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; - mfcbc = 3.0 * (mfcbc + 0.5 * forcingTerm[DIR_P0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; - mfabc = 3.0 * (mfabc + 0.5 * forcingTerm[DIR_M0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; - mfbcc = 3.0 * (mfbcc + 0.5 * forcingTerm[DIR_0PP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; - mfbac = 3.0 * (mfbac + 0.5 * forcingTerm[DIR_0MP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; - mfccc = 3.0 * (mfccc + 0.5 * forcingTerm[DIR_PPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; - mfacc = 3.0 * (mfacc + 0.5 * forcingTerm[DIR_MPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; - mfcac = 3.0 * (mfcac + 0.5 * forcingTerm[DIR_PMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; - mfaac = 3.0 * (mfaac + 0.5 * forcingTerm[DIR_MMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; - mfabb = 3.0 * (mfabb + 0.5 * forcingTerm[DIR_M00]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; - mfbab = 3.0 * (mfbab + 0.5 * forcingTerm[DIR_0M0]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; - mfbba = 3.0 * (mfbba + 0.5 * forcingTerm[DIR_00M]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; - mfaab = 3.0 * (mfaab + 0.5 * forcingTerm[DIR_MM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; - mfcab = 3.0 * (mfcab + 0.5 * forcingTerm[DIR_PM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; - mfaba = 3.0 * (mfaba + 0.5 * forcingTerm[DIR_M0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; - mfcba = 3.0 * (mfcba + 0.5 * forcingTerm[DIR_P0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; - mfbaa = 3.0 * (mfbaa + 0.5 * forcingTerm[DIR_0MM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; - mfbca = 3.0 * (mfbca + 0.5 * forcingTerm[DIR_0PM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; - mfaaa = 3.0 * (mfaaa + 0.5 * forcingTerm[DIR_MMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; - mfcaa = 3.0 * (mfcaa + 0.5 * forcingTerm[DIR_PMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; - mfaca = 3.0 * (mfaca + 0.5 * forcingTerm[DIR_MPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; - mfcca = 3.0 * (mfcca + 0.5 * forcingTerm[DIR_PPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; - mfbbb = 3.0 * (mfbbb + 0.5 * forcingTerm[DIR_000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]; + mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; + mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[d0P0]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; + mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[d00P]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; + mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[dPP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; + mfacb = 3.0 * (mfacb + 0.5 * forcingTerm[dMP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; + mfcbc = 3.0 * (mfcbc + 0.5 * forcingTerm[dP0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; + mfabc = 3.0 * (mfabc + 0.5 * forcingTerm[dM0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; + mfbcc = 3.0 * (mfbcc + 0.5 * forcingTerm[d0PP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; + mfbac = 3.0 * (mfbac + 0.5 * forcingTerm[d0MP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; + mfccc = 3.0 * (mfccc + 0.5 * forcingTerm[dPPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; + mfacc = 3.0 * (mfacc + 0.5 * forcingTerm[dMPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; + mfcac = 3.0 * (mfcac + 0.5 * forcingTerm[dPMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; + mfaac = 3.0 * (mfaac + 0.5 * forcingTerm[dMMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; + mfabb = 3.0 * (mfabb + 0.5 * forcingTerm[dM00]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; + mfbab = 3.0 * (mfbab + 0.5 * forcingTerm[d0M0]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; + mfbba = 3.0 * (mfbba + 0.5 * forcingTerm[d00M]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; + mfaab = 3.0 * (mfaab + 0.5 * forcingTerm[dMM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; + mfcab = 3.0 * (mfcab + 0.5 * forcingTerm[dPM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; + mfaba = 3.0 * (mfaba + 0.5 * forcingTerm[dM0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; + mfcba = 3.0 * (mfcba + 0.5 * forcingTerm[dP0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; + mfbaa = 3.0 * (mfbaa + 0.5 * forcingTerm[d0MM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; + mfbca = 3.0 * (mfbca + 0.5 * forcingTerm[d0PM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; + mfaaa = 3.0 * (mfaaa + 0.5 * forcingTerm[dMMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; + mfcaa = 3.0 * (mfcaa + 0.5 * forcingTerm[dPMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; + mfaca = 3.0 * (mfaca + 0.5 * forcingTerm[dMPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; + mfcca = 3.0 * (mfcca + 0.5 * forcingTerm[dPPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; + mfbbb = 3.0 * (mfbbb + 0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST]; real rho1 = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + @@ -1026,33 +1026,33 @@ void MultiphaseCumulantLBMKernel::calculate(int step) } #endif - mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[DIR_P00]; - mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[DIR_0P0]; - mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[DIR_00P]; - mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[DIR_PP0]; - mfacb = rho * c1o3 * (mfacb) + 0.5 * forcingTerm[DIR_MP0]; - mfcbc = rho * c1o3 * (mfcbc) + 0.5 * forcingTerm[DIR_P0P]; - mfabc = rho * c1o3 * (mfabc) + 0.5 * forcingTerm[DIR_M0P]; - mfbcc = rho * c1o3 * (mfbcc) + 0.5 * forcingTerm[DIR_0PP]; - mfbac = rho * c1o3 * (mfbac) + 0.5 * forcingTerm[DIR_0MP]; - mfccc = rho * c1o3 * (mfccc) + 0.5 * forcingTerm[DIR_PPP]; - mfacc = rho * c1o3 * (mfacc) + 0.5 * forcingTerm[DIR_MPP]; - mfcac = rho * c1o3 * (mfcac) + 0.5 * forcingTerm[DIR_PMP]; - mfaac = rho * c1o3 * (mfaac) + 0.5 * forcingTerm[DIR_MMP]; - mfabb = rho * c1o3 * (mfabb) + 0.5 * forcingTerm[DIR_M00]; - mfbab = rho * c1o3 * (mfbab) + 0.5 * forcingTerm[DIR_0M0]; - mfbba = rho * c1o3 * (mfbba) + 0.5 * forcingTerm[DIR_00M]; - mfaab = rho * c1o3 * (mfaab) + 0.5 * forcingTerm[DIR_MM0]; - mfcab = rho * c1o3 * (mfcab) + 0.5 * forcingTerm[DIR_PM0]; - mfaba = rho * c1o3 * (mfaba) + 0.5 * forcingTerm[DIR_M0M]; - mfcba = rho * c1o3 * (mfcba) + 0.5 * forcingTerm[DIR_P0M]; - mfbaa = rho * c1o3 * (mfbaa) + 0.5 * forcingTerm[DIR_0MM]; - mfbca = rho * c1o3 * (mfbca) + 0.5 * forcingTerm[DIR_0PM]; - mfaaa = rho * c1o3 * (mfaaa) + 0.5 * forcingTerm[DIR_MMM]; - mfcaa = rho * c1o3 * (mfcaa) + 0.5 * forcingTerm[DIR_PMM]; - mfaca = rho * c1o3 * (mfaca) + 0.5 * forcingTerm[DIR_MPM]; - mfcca = rho * c1o3 * (mfcca) + 0.5 * forcingTerm[DIR_PPM]; - mfbbb = rho * c1o3 * (mfbbb) + 0.5 * forcingTerm[DIR_000]; + mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00]; + mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[d0P0]; + mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[d00P]; + mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[dPP0]; + mfacb = rho * c1o3 * (mfacb) + 0.5 * forcingTerm[dMP0]; + mfcbc = rho * c1o3 * (mfcbc) + 0.5 * forcingTerm[dP0P]; + mfabc = rho * c1o3 * (mfabc) + 0.5 * forcingTerm[dM0P]; + mfbcc = rho * c1o3 * (mfbcc) + 0.5 * forcingTerm[d0PP]; + mfbac = rho * c1o3 * (mfbac) + 0.5 * forcingTerm[d0MP]; + mfccc = rho * c1o3 * (mfccc) + 0.5 * forcingTerm[dPPP]; + mfacc = rho * c1o3 * (mfacc) + 0.5 * forcingTerm[dMPP]; + mfcac = rho * c1o3 * (mfcac) + 0.5 * forcingTerm[dPMP]; + mfaac = rho * c1o3 * (mfaac) + 0.5 * forcingTerm[dMMP]; + mfabb = rho * c1o3 * (mfabb) + 0.5 * forcingTerm[dM00]; + mfbab = rho * c1o3 * (mfbab) + 0.5 * forcingTerm[d0M0]; + mfbba = rho * c1o3 * (mfbba) + 0.5 * forcingTerm[d00M]; + mfaab = rho * c1o3 * (mfaab) + 0.5 * forcingTerm[dMM0]; + mfcab = rho * c1o3 * (mfcab) + 0.5 * forcingTerm[dPM0]; + mfaba = rho * c1o3 * (mfaba) + 0.5 * forcingTerm[dM0M]; + mfcba = rho * c1o3 * (mfcba) + 0.5 * forcingTerm[dP0M]; + mfbaa = rho * c1o3 * (mfbaa) + 0.5 * forcingTerm[d0MM]; + mfbca = rho * c1o3 * (mfbca) + 0.5 * forcingTerm[d0PM]; + mfaaa = rho * c1o3 * (mfaaa) + 0.5 * forcingTerm[dMMM]; + mfcaa = rho * c1o3 * (mfcaa) + 0.5 * forcingTerm[dPMM]; + mfaca = rho * c1o3 * (mfaca) + 0.5 * forcingTerm[dMPM]; + mfcca = rho * c1o3 * (mfcca) + 0.5 * forcingTerm[dPPM]; + mfbbb = rho * c1o3 * (mfbbb) + 0.5 * forcingTerm[d000]; ////////////////////////////////////////////////////////////////////////// // write distribution for F @@ -1093,84 +1093,84 @@ void MultiphaseCumulantLBMKernel::calculate(int step) ///////////////////// PHASE-FIELD BGK SOLVER /////////////////////////////// - h[DIR_P00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); - h[DIR_0P0] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); - h[DIR_00P] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); - h[DIR_PP0] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); - h[DIR_MP0] = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); - h[DIR_P0P] = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); - h[DIR_M0P] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); - h[DIR_0PP] = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); - h[DIR_0MP] = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); - h[DIR_PPP] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); - h[DIR_MPP] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); - h[DIR_PMP] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); - h[DIR_MMP] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[DIR_M00] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); - h[DIR_0M0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); - h[DIR_00M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); - h[DIR_MM0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); - h[DIR_PM0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); - h[DIR_M0M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); - h[DIR_P0M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); - h[DIR_0MM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); - h[DIR_0PM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); - h[DIR_MMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[DIR_PMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[DIR_MPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[DIR_PPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[DIR_000] = (*this->zeroDistributionsH)(x1, x2, x3); + h[dP00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); + h[d0P0] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); + h[d00P] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); + h[dPP0] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); + h[dMP0] = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); + h[dP0P] = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); + h[dM0P] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); + h[d0PP] = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); + h[d0MP] = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); + h[dPPP] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); + h[dMPP] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); + h[dPMP] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); + h[dMMP] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); + + h[dM00] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); + h[d0M0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); + h[d00M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); + h[dMM0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); + h[dPM0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); + h[dM0M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); + h[dP0M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); + h[d0MM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); + h[d0PM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); + h[dMMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); + h[dPMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); + h[dMPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); + h[dPPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); + + h[d000] = (*this->zeroDistributionsH)(x1, x2, x3); for (int dir = STARTF; dir < (ENDF + 1); dir++) { real velProd = DX1[dir] * ux + DX2[dir] * uy + DX3[dir] * uz; real velSq1 = velProd * velProd; real hEq; //, gEq; - if (dir != DIR_000) { + if (dir != d000) { real dirGrad_phi = (phi[dir] - phi[INVDIR[dir]]) / 2.0; - real hSource = (tauH - 0.5) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * (dirGrad_phi) / denom; - hEq = phi[DIR_000] * WEIGTH[dir] * (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)) + hSource * WEIGTH[dir]; + real hSource = (tauH - 0.5) * (1.0 - phi[d000]) * (phi[d000]) * (dirGrad_phi) / denom; + hEq = phi[d000] * WEIGTH[dir] * (1.0 + 3.0 * velProd + 4.5 * velSq1 - 1.5 * (ux2 + uy2 + uz2)) + hSource * WEIGTH[dir]; // This corresponds with the collision factor of 1.0 which equals (tauH + 0.5). h[dir] = h[dir] - (h[dir] - hEq) / (tauH); } else { - hEq = phi[DIR_000] * WEIGTH[DIR_000] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); - h[DIR_000] = h[DIR_000] - (h[DIR_000] - hEq) / (tauH); + hEq = phi[d000] * WEIGTH[d000] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); + h[d000] = h[d000] - (h[d000] - hEq) / (tauH); } } - (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3) = h[INV_P00]; - (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3) = h[INV_0P0]; - (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3) = h[INV_00P]; - (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3) = h[INV_PP0]; - (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3) = h[INV_MP0]; - (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3) = h[INV_P0P]; - (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3) = h[INV_M0P]; - (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3) = h[INV_0PP]; - (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3) = h[INV_0MP]; - (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3) = h[INV_PPP]; - (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3) = h[INV_MPP]; - (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3) = h[INV_PMP]; - (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[INV_MMP]; - - (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3) = h[INV_M00]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3) = h[INV_0M0]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p) = h[INV_00M]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3) = h[INV_MM0]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3) = h[INV_PM0]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p) = h[INV_M0M]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p) = h[INV_P0M]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p) = h[INV_0MM]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p) = h[INV_0PM]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[INV_MMM]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p) = h[INV_PMM]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p) = h[INV_MPM]; - (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p) = h[INV_PPM]; - - (*this->zeroDistributionsH)(x1, x2, x3) = h[DIR_000]; + (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3) = h[iP00]; + (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3) = h[i0P0]; + (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3) = h[i00P]; + (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3) = h[iPP0]; + (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3) = h[iMP0]; + (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3) = h[iP0P]; + (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3) = h[iM0P]; + (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3) = h[i0PP]; + (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3) = h[i0MP]; + (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3) = h[iPPP]; + (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3) = h[iMPP]; + (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3) = h[iPMP]; + (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3) = h[iMMP]; + + (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3) = h[iM00]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3) = h[i0M0]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p) = h[i00M]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3) = h[iMM0]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3) = h[iPM0]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p) = h[iM0M]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p) = h[iP0M]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p) = h[i0MM]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p) = h[i0PM]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p) = h[iMMM]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p) = h[iPMM]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p) = h[iMPM]; + (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p) = h[iPPM]; + + (*this->zeroDistributionsH)(x1, x2, x3) = h[d000]; ///////////////////// END OF OLD BGK SOLVER /////////////////////////////// } @@ -1219,7 +1219,7 @@ real MultiphaseCumulantLBMKernel::nabla2_phi() real sum = 0.0; for (int k = FSTARTDIR; k <= FENDDIR; k++) { - sum += WEIGTH[k] * (phi[k] - phi[DIR_000]); + sum += WEIGTH[k] * (phi[k] - phi[d000]); } return 6.0 * sum; } @@ -1248,35 +1248,35 @@ void MultiphaseCumulantLBMKernel::computePhasefield() int x2p = x2 + 1; int x3p = x3 + 1; - h[DIR_P00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); - h[DIR_0P0] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); - h[DIR_00P] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); - h[DIR_PP0] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); - h[DIR_MP0] = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); - h[DIR_P0P] = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); - h[DIR_M0P] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); - h[DIR_0PP] = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); - h[DIR_0MP] = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); - h[DIR_PPP] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); - h[DIR_MPP] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); - h[DIR_PMP] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); - h[DIR_MMP] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[DIR_M00] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); - h[DIR_0M0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); - h[DIR_00M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); - h[DIR_MM0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); - h[DIR_PM0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); - h[DIR_M0M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); - h[DIR_P0M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); - h[DIR_0MM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); - h[DIR_0PM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); - h[DIR_MMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[DIR_PMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[DIR_MPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[DIR_PPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[DIR_000] = (*this->zeroDistributionsH)(x1, x2, x3); + h[dP00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); + h[d0P0] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); + h[d00P] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); + h[dPP0] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); + h[dMP0] = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); + h[dP0P] = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); + h[dM0P] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); + h[d0PP] = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); + h[d0MP] = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); + h[dPPP] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); + h[dMPP] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); + h[dPMP] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); + h[dMMP] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); + + h[dM00] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); + h[d0M0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); + h[d00M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); + h[dMM0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); + h[dPM0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); + h[dM0M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); + h[dP0M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); + h[d0MM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); + h[d0PM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); + h[dMMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); + h[dPMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); + h[dMPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); + h[dPPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); + + h[d000] = (*this->zeroDistributionsH)(x1, x2, x3); } } } @@ -1292,7 +1292,7 @@ void MultiphaseCumulantLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X2X1>:: SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - phi[DIR_000] = (*ph)(x1, x2, x3); + phi[d000] = (*ph)(x1, x2, x3); for (int k = FSTARTDIR; k <= FENDDIR; k++) { diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.cpp index 6dc3b454e1874382bb539d716147867f03514c38..e8776121b19b3d2a8e3b8f315a18433092c8559a 100644 --- a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.cpp +++ b/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterCompressibleAirLBMKernel.cpp @@ -394,13 +394,13 @@ void MultiphasePressureFilterCompressibleAirLBMKernel::calculate(int step) - collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[DIR_000] - phiH) / (phiH - phiL); + collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL); - real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi(); + real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); //----------- Calculating Macroscopic Values ------------- - real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH); //Incompressible + real rho = rhoH + rhoToPhi * (phi[d000] - phiH); //Incompressible //LBMReal rho = rhoL + (rhoH - rhoL) * phi[REST] + (one - phi[REST]) * (*pressure)(x1, x2, x3) * three; //compressible real m0, m1, m2; @@ -468,7 +468,7 @@ void MultiphasePressureFilterCompressibleAirLBMKernel::calculate(int step) } //Viscosity increase by pressure gradient - real errPhi = (((1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale)- denom); + real errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom); //LBMReal limVis = 0.0000001*10;//0.01; // collFactorM =collFactorM/(c1+limVis*(errPhi*errPhi)*collFactorM); // collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM; @@ -778,7 +778,7 @@ void MultiphasePressureFilterCompressibleAirLBMKernel::calculate(int step) real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); // LBMReal Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::DIR_00M' ) + //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' ) real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); @@ -1344,11 +1344,11 @@ void MultiphasePressureFilterCompressibleAirLBMKernel::calculate(int step) // collision of 1st order moments cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + - normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + - normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + - normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; cx2 = cx * cx; cy2 = cy * cy; @@ -1488,9 +1488,9 @@ real MultiphasePressureFilterCompressibleAirLBMKernel::gradX1_phi() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0* ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00])); + return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + + +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); } real MultiphasePressureFilterCompressibleAirLBMKernel::gradX2_phi() @@ -1498,9 +1498,9 @@ real MultiphasePressureFilterCompressibleAirLBMKernel::gradX2_phi() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP])- (phi[DIR_PMP] - phi[DIR_MPM]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0])- (phi[DIR_PM0] - phi[DIR_MP0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM]))) + + WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) + + +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); } real MultiphasePressureFilterCompressibleAirLBMKernel::gradX3_phi() @@ -1508,9 +1508,9 @@ real MultiphasePressureFilterCompressibleAirLBMKernel::gradX3_phi() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + + +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); } real MultiphasePressureFilterCompressibleAirLBMKernel::gradX1_phi2() @@ -1518,9 +1518,9 @@ real MultiphasePressureFilterCompressibleAirLBMKernel::gradX1_phi2() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) + (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) + (phi2[DIR_PPM] - phi2[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) + (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_PM0] - phi2[DIR_MP0]) + (phi2[DIR_PP0] - phi2[DIR_MM0])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_P00] - phi2[DIR_M00])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP]))) + + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) + + +WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00])); } real MultiphasePressureFilterCompressibleAirLBMKernel::gradX2_phi2() @@ -1528,9 +1528,9 @@ real MultiphasePressureFilterCompressibleAirLBMKernel::gradX2_phi2() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PPM] - phi2[DIR_MMP]) - (phi2[DIR_PMP] - phi2[DIR_MPM]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_0PP] - phi2[DIR_0MM]) + (phi2[DIR_0PM] - phi2[DIR_0MP])) + ((phi2[DIR_PP0] - phi2[DIR_MM0]) - (phi2[DIR_PM0] - phi2[DIR_MP0])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_0P0] - phi2[DIR_0M0])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM]))) + + WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) + + +WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0])); } real MultiphasePressureFilterCompressibleAirLBMKernel::gradX3_phi2() @@ -1538,9 +1538,9 @@ real MultiphasePressureFilterCompressibleAirLBMKernel::gradX3_phi2() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) + + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + + +WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); } real MultiphasePressureFilterCompressibleAirLBMKernel::nabla2_phi() @@ -1549,17 +1549,17 @@ real MultiphasePressureFilterCompressibleAirLBMKernel::nabla2_phi() using namespace vf::lbm::dir; real sum = 0.0; - sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000]))) - + (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000])))); - sum += WEIGTH[DIR_0PP] * ( - (((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000]))) - + (((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000]))) - + (((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000]))) + sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) + + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); + sum += WEIGTH[d0PP] * ( + (((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) + + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) + + (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))) ); - sum += WEIGTH[DIR_00P] * ( - ((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000])) - + ((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000])) - + ((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000])) + sum += WEIGTH[d00P] * ( + ((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) + + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) + + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])) ); return 6.0 * sum; @@ -1589,35 +1589,35 @@ void MultiphasePressureFilterCompressibleAirLBMKernel::computePhasefield() int x2p = x2 + 1; int x3p = x3 + 1; - h[DIR_P00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - h[DIR_0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - h[DIR_00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - h[DIR_PP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - h[DIR_MP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - h[DIR_P0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - h[DIR_M0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - h[DIR_0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - h[DIR_0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - h[DIR_PPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - h[DIR_MPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - h[DIR_PMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - h[DIR_MMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[DIR_M00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - h[DIR_0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - h[DIR_00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - h[DIR_MM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - h[DIR_PM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - h[DIR_M0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - h[DIR_P0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - h[DIR_0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - h[DIR_0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - h[DIR_MMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[DIR_PMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[DIR_MPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[DIR_PPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[DIR_000] = (*this->zeroDistributionsH1)(x1, x2, x3); + h[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); + h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); + h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); + h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); + h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); + h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); + h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); + h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); + h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); + h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); + h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); + h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); + h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); + + h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); + h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); + h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); + h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); + h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); + h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); + h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); + h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); + h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); + h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); + h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); + h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); + h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); + + h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3); } } } @@ -1632,7 +1632,7 @@ void MultiphasePressureFilterCompressibleAirLBMKernel::findNeighbors(CbArray3D<r SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - phi[DIR_000] = (*ph)(x1, x2, x3); + phi[d000] = (*ph)(x1, x2, x3); for (int k = FSTARTDIR; k <= FENDDIR; k++) { @@ -1653,7 +1653,7 @@ void MultiphasePressureFilterCompressibleAirLBMKernel::findNeighbors2(CbArray3D< SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - phi2[DIR_000] = (*ph)(x1, x2, x3); + phi2[d000] = (*ph)(x1, x2, x3); for (int k = FSTARTDIR; k <= FENDDIR; k++) { diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.cpp index 1d0d66a1803968f98cdff629d0578ecb197ddc31..48c2039cc710ac92ce5d2f4d0aa704f1a46bdb8a 100644 --- a/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.cpp +++ b/src/cpu/MultiphaseFlow/LBM/MultiphasePressureFilterLBMKernel.cpp @@ -385,17 +385,17 @@ void MultiphasePressureFilterLBMKernel::calculate(int step) real normX2 = dX2_phi / denom; real normX3 = dX3_phi / denom; - dX1_phi = normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale; - dX2_phi = normX2 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale; - dX3_phi = normX3 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale; + dX1_phi = normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; + dX2_phi = normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; + dX3_phi = normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; - collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[DIR_000] - phiH) / (phiH - phiL); + collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL); - real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi(); + real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); //----------- Calculating Macroscopic Values ------------- - real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH); + real rho = rhoH + rhoToPhi * (phi[d000] - phiH); real m0, m1, m2; real rhoRef=c1o1; @@ -462,7 +462,7 @@ void MultiphasePressureFilterLBMKernel::calculate(int step) } //Viscosity increase by pressure gradient - real errPhi = (((1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale)- denom); + real errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom); //LBMReal limVis = 0.0000001*10;//0.01; // collFactorM =collFactorM/(c1+limVis*(errPhi*errPhi)*collFactorM); // collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM; @@ -894,7 +894,7 @@ void MultiphasePressureFilterLBMKernel::calculate(int step) real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::DIR_00M' ) + //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' ) real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); @@ -1492,11 +1492,11 @@ void MultiphasePressureFilterLBMKernel::calculate(int step) // collision of 1st order moments cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + - normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + - normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + - normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; cx2 = cx * cx; cy2 = cy * cy; @@ -1636,9 +1636,9 @@ real MultiphasePressureFilterLBMKernel::gradX1_phi() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0* ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00])); + return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + + +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); } real MultiphasePressureFilterLBMKernel::gradX2_phi() @@ -1646,9 +1646,9 @@ real MultiphasePressureFilterLBMKernel::gradX2_phi() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP])- (phi[DIR_PMP] - phi[DIR_MPM]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0])- (phi[DIR_PM0] - phi[DIR_MP0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM]))) + + WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) + + +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); } real MultiphasePressureFilterLBMKernel::gradX3_phi() @@ -1656,9 +1656,9 @@ real MultiphasePressureFilterLBMKernel::gradX3_phi() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + + +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); } real MultiphasePressureFilterLBMKernel::nabla2_phi() @@ -1667,17 +1667,17 @@ real MultiphasePressureFilterLBMKernel::nabla2_phi() using namespace vf::lbm::dir; real sum = 0.0; - sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000]))) - + (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000])))); - sum += WEIGTH[DIR_0PP] * ( - (((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000]))) - + (((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000]))) - + (((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000]))) + sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) + + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); + sum += WEIGTH[d0PP] * ( + (((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) + + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) + + (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))) ); - sum += WEIGTH[DIR_00P] * ( - ((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000])) - + ((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000])) - + ((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000])) + sum += WEIGTH[d00P] * ( + ((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) + + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) + + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])) ); return 6.0 * sum; @@ -1707,35 +1707,35 @@ void MultiphasePressureFilterLBMKernel::computePhasefield() int x2p = x2 + 1; int x3p = x3 + 1; - h[DIR_P00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - h[DIR_0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - h[DIR_00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - h[DIR_PP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - h[DIR_MP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - h[DIR_P0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - h[DIR_M0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - h[DIR_0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - h[DIR_0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - h[DIR_PPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - h[DIR_MPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - h[DIR_PMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - h[DIR_MMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[DIR_M00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - h[DIR_0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - h[DIR_00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - h[DIR_MM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - h[DIR_PM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - h[DIR_M0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - h[DIR_P0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - h[DIR_0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - h[DIR_0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - h[DIR_MMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[DIR_PMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[DIR_MPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[DIR_PPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[DIR_000] = (*this->zeroDistributionsH1)(x1, x2, x3); + h[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); + h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); + h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); + h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); + h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); + h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); + h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); + h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); + h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); + h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); + h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); + h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); + h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); + + h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); + h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); + h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); + h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); + h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); + h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); + h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); + h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); + h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); + h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); + h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); + h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); + h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); + + h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3); } } } @@ -1750,7 +1750,7 @@ void MultiphasePressureFilterLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - phi[DIR_000] = (*ph)(x1, x2, x3); + phi[d000] = (*ph)(x1, x2, x3); for (int k = FSTARTDIR; k <= FENDDIR; k++) { diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.cpp index 3030832c3e690edd64a7941ce923a5ced8a277e2..610d163746a785f6582d9a8a113683ca05693e65 100644 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.cpp +++ b/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.cpp @@ -408,7 +408,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) SPtr<DistributionArray3D> distributionH = this->getDataSet()->getHdistributions(); real hh[27]; - distributionH->getDistributionInv(hh, x1, x2, x3); + distributionH->getPostCollisionDistribution(hh, x1, x2, x3); real phiD, vxP, vyP, vzP; D3Q27System::calcIncompMacroscopicValues(hh, phiD, vxP, vyP, vzP); @@ -529,7 +529,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) SPtr<DistributionArray3D> distribution = this->getDataSet()->getFdistributions(); real ff[27]; - distribution->getDistributionInv(ff, x1, x2, x3); + distribution->getPostCollisionDistribution(ff, x1, x2, x3); real rhoG,vx,vy,vz; //real rhoGG = (((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) // + (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) @@ -621,9 +621,9 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //16.03.23 c: BB gas side with updated boundary velocity - distribution->getDistributionInv(ff, x1, x2, x3); + distribution->getPostCollisionDistribution(ff, x1, x2, x3); real rhoG; - if (phi[DIR_000] > phiLim) { // initialization necessary + if (phi[d000] > phiLim) { // initialization necessary real sumRho = 0; real sumWeight = 1.e-100; for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { @@ -711,14 +711,14 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //real fBC = (fGEQ - c6o1 * WEIGTH[fdir] * dvDir * (collFactorG )/(c3o1-collFactorG)) - c6o1 * WEIGTH[fdir] * (vBC); //real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;// fL -feqOLD + feqNew; //real fBC = fGG - c6o1 * WEIGTH[fdir] * (vBC); - distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); + distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); ff[D3Q27System::INVDIR[fdir]] = fBC; ///// other possibility is tor replace the node itself instead of the neighbor (only c1o1 of them is allowed!) //real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir); //real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1 , x2 , x3 ), (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1 , x2 , x3 )); //real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1, x2, x3 )); //real fBC = fG - feqOLD + feqNew; - //distribution->setDistributionForDirection(fBC, x1, x2, x3, fdir); + //distribution->setPostCollisionDistributionForDirection(fBC, x1, x2, x3, fdir); } @@ -869,13 +869,13 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - //distribution->setDistributionForDirection((fBC + fG) / densityRatio*0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - //distribution->setDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL-2*fL+2*feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL-2*fL+2*feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); //real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC; //real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC; //real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir); //real number = 666; - //distribution->setDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC, x1, x2, x3, fdir); + //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC, x1, x2, x3, fdir); //real eqBC= D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz); //real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); real eqBCN = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); @@ -889,7 +889,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC; real laplacePressureBC; if ((x1 + D3Q27System::DX1[fdir] > 0) && (x1 + D3Q27System::DX1[fdir] < maxX1 + 1) && (x2 + D3Q27System::DX2[fdir] > 0) && (x2 + D3Q27System::DX2[fdir] < maxX2 + 1) && (x3 + D3Q27System::DX3[fdir] > 0) && (x3 + D3Q27System::DX3[fdir] < maxX3 + 1) && - phi2[DIR_000] != phi2[fdir]) { + phi2[d000] != phi2[fdir]) { findNeighbors(phaseField, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); laplacePressureBC = c6o1 * c2o1 * computeCurvature_phi() * sigma; findNeighbors(phaseFieldOld, x1, x2, x3); @@ -899,7 +899,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // laplacePressureBC = laplacePressure; // } // curv; // reset to the above - if (phi2[DIR_000] != phi2[fdir]) + if (phi2[d000] != phi2[fdir]) { laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / @@ -910,7 +910,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) laplacePressureBC = laplacePressure; // laplacePressureBC *= sigma; // eqBCN = eqBC; - // distribution->setDistributionForDirection(LaplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio*0) - fL - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, + // distribution->setPostCollisionDistributionForDirection(LaplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio*0) - fL - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, // x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); ////13.10.2023 switch BC according to flow direction // if (gradX1_phi() * vx + gradX2_phi() * vy + gradX3_phi() * vz < 0) { @@ -1013,8 +1013,8 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // ////fL = fL*0.99 +0.01*(eqLL - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1)); // //LaplacePressure *= sigma; // //eqBCN = eqBC; - // //distribution->setDistributionForDirection(LaplacePressure * WEIGTH[fdir] +(fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1-c1o1 / densityRatio*0 ) - fL -0* (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - // distribution->setDistributionForDirection(laplacePressureBC* WEIGTH[fdir] + (fBC + fG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio ) - fL, x1, x2, x3, fdir); + // //distribution->setPostCollisionDistributionForDirection(LaplacePressure * WEIGTH[fdir] +(fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1-c1o1 / densityRatio*0 ) - fL -0* (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + // distribution->setPostCollisionDistributionForDirection(laplacePressureBC* WEIGTH[fdir] + (fBC + fG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio ) - fL, x1, x2, x3, fdir); //if (vxBC != 0) { // int set = 0; //} @@ -1130,9 +1130,9 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - //distribution->setDistributionForDirection((fBC + fG) / densityRatio*0 - fL- (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vBC), x1, x2, x3, fdir); - //distribution->setDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - //distribution->setDistributionForDirection(0, x1, x2, x3, fdir); + //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL- (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vBC), x1, x2, x3, fdir); + //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + //distribution->setPostCollisionDistributionForDirection(0, x1, x2, x3, fdir); //real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC; //real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC; //real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir); @@ -1166,7 +1166,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //if (UbMath::isNaN(laplacePressureBC) || UbMath::isInfinity(laplacePressureBC)) { // laplacePressureBC = laplacePressure; // } - if (phi2[DIR_000] != phi2[fdir]) + if (phi2[d000] != phi2[fdir]) { laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / @@ -1179,7 +1179,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //real pp2 = (*phaseField)(x1, x2, x3); //eqBCN = eqBC; - //distribution->setDistributionForDirection(LaplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio*0) - fL - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + //distribution->setPostCollisionDistributionForDirection(LaplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio*0) - fL - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); // fBC = (fG) / (densityRatio - c1o1) + // ((densityRatio) / (densityRatio - c1o1)) * ((eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio) - c2o1 * fL + (fGEQ - WEIGTH[fdir] * dvDir * (c1o1 / collFactorG - c1o1)) + laplacePressureBC * WEIGTH[fdir]); //// 13.07.2023 @@ -1547,13 +1547,13 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //real fBC = (distribution->getDistributionInvForDirection(x1, x2, x3, D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1)) ; //ff[D3Q27System::INVDIR[fdir]] = (feqNew - c6o1 * WEIGTH[fdir] * dvDir * (collFactorL)/(c3o1-collFactorL)); //ff[D3Q27System::INVDIR[fdir]] = (ff[D3Q27System::INVDIR[fdir]] - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew; - distribution->setDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); + distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); } } - real eqRest = D3Q27System::getIncompFeqForDirection(DIR_000, 0, (*vxNode)(x1, x2 , x3 ), + real eqRest = D3Q27System::getIncompFeqForDirection(d000, 0, (*vxNode)(x1, x2 , x3 ), (*vyNode)(x1, x2 , x3 ), (*vzNode)(x1 , x2 , x3 )); - real fRest = distribution->getDistributionInvForDirection(x1 , x2 , x3 , DIR_000); - distribution->setDistributionForDirection((laplacePressure * WEIGTH[DIR_000] + c2o1*(fRest) / densityRatio + (eqRest) * (c1o1 - c1o1 / densityRatio)) , x1, x2, x3, DIR_000); + real fRest = distribution->getDistributionInvForDirection(x1 , x2 , x3 , d000); + distribution->setPostCollisionDistributionForDirection((laplacePressure * WEIGTH[d000] + c2o1*(fRest) / densityRatio + (eqRest) * (c1o1 - c1o1 / densityRatio)) , x1, x2, x3, d000); //03.04.2023 alternative initialization of liquid nodes based on FD //for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { @@ -1569,7 +1569,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // //real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz); // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, vx, vy, vz); // ff[D3Q27System::INVDIR[fdir]] = feqNew - c3o1 * WEIGTH[fdir] * dvDir * (c1o1 / collFactorL - c1o1); - // distribution->setDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); + // distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); // } //} @@ -1584,7 +1584,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // //real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * vDir; // //real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]); // real fL= D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); - // distribution->setDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); + // distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); // ff[fdir] = fL; // } // if (!(phi[fdir] > c1o2)) { @@ -1593,7 +1593,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); // real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); // real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); - // distribution->setDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); + // distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); // ff[fdir] = feqL; // } //} @@ -1601,31 +1601,31 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { // sumRho2 += ff[fdir];// -D3Q27System::getIncompFeqForDirection(fdir, 0, sumVx, sumVy, sumVz); //} - //ff[DIR_000] = rhoL - sumRho2; + //ff[d000] = rhoL - sumRho2; //rhoL = 27.0 / 18.0 * sumRho2; //std::cout << "rhoL=" << rhoL <<" sumRho="<< 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "\n"; //D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz); - //std::cout << "RecalCrhoL=" << rhoL << " sumRho=" << 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "ffRest="<<ff[DIR_000]<<"\n"; -// distribution->setDistributionForDirection(ff[DIR_000], x1, x2, x3, DIR_000); + //std::cout << "RecalCrhoL=" << rhoL << " sumRho=" << 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "ffRest="<<ff[d000]<<"\n"; +// distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000); //{ - // real fG = distribution->getDistributionInvForDirection(x1, x2, x3, DIR_000); - // real feqOLD = D3Q27System::getIncompFeqForDirection(DIR_000, (*rhoNode)(x1, x2, x3), vx, vy, vz); - // real feqNew = D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz); - // distribution->setDistributionForDirection(fG - feqOLD + feqNew, x1, x2, x3, DIR_000); + // real fG = distribution->getDistributionInvForDirection(x1, x2, x3, d000); + // real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx, vy, vz); + // real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz); + // distribution->setPostCollisionDistributionForDirection(fG - feqOLD + feqNew, x1, x2, x3, d000); //} - //ff[DIR_000] = vx * vx + vy * vy + vz * vz + - // (((ff[DIR_MM0] + ff[DIR_PP0]) + (ff[DIR_MP0] + ff[DIR_PM0])) + ((ff[DIR_0MM] + ff[DIR_0PP]) + (ff[DIR_0MP] + ff[DIR_0PM])) + ((ff[DIR_M0M] + ff[DIR_P0P]) + (ff[DIR_M0P] + ff[DIR_P0M])) + - // c2o1 * ((((ff[DIR_MMM] + ff[DIR_PPP]) + (ff[DIR_MMP] + ff[DIR_PPM]))) + (((ff[DIR_MPM] + ff[DIR_PMP]) + (ff[DIR_MPP] + ff[DIR_PMM]))))); - //distribution->setDistributionForDirection(ff[DIR_000], x1, x2, x3, DIR_000); + //ff[d000] = vx * vx + vy * vy + vz * vz + + // (((ff[dMM0] + ff[dPP0]) + (ff[dMP0] + ff[dPM0])) + ((ff[d0MM] + ff[d0PP]) + (ff[d0MP] + ff[d0PM])) + ((ff[dM0M] + ff[dP0P]) + (ff[dM0P] + ff[dP0M])) + + // c2o1 * ((((ff[dMMM] + ff[dPPP]) + (ff[dMMP] + ff[dPPM]))) + (((ff[dMPM] + ff[dPMP]) + (ff[dMPP] + ff[dPMM]))))); + //distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000); //for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { // ff[D3Q27System::INVDIR[fdir]]=distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); //} //D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz); - //std::cout << "AfterRead rhoL=" << rhoL << " rhoGToL=" << rhoG/densityRatio << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[DIR_000] <<" x="<<x1<<" y="<<x2<<" z="<<x3<< "\n"; + //std::cout << "AfterRead rhoL=" << rhoL << " rhoGToL=" << rhoG/densityRatio << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[d000] <<" x="<<x1<<" y="<<x2<<" z="<<x3<< "\n"; - //real feqL = D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz); - //distribution->setDistributionForDirection(feqL, x1, x2, x3, DIR_000); + //real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz); + //distribution->setPostCollisionDistributionForDirection(feqL, x1, x2, x3, d000); @@ -1641,13 +1641,13 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, 0, 0.0001, 0); // ff[D3Q27System::INVDIR[fdir]] = feqNew; - // distribution->setDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); + // distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); // } //} //16.03.23 B: Bounce Back gas side //distribution->getDistributionInv(ff, x1, x2, x3); //real rhoG; - //if (phi[DIR_000] > c1o2) { //initialization necessary + //if (phi[d000] > c1o2) { //initialization necessary // real sumRho = 0; // real sumWeight = 0; // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { @@ -1667,11 +1667,11 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir); // real fBC = fG - c6o1 * WEIGTH[fdir] * (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX2[fdir] * vzBC); - // distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); + // distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); // } // } - // distribution->setDistributionForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoG, vx, vy, vz), x1, x2, x3, DIR_000); + // distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000); @@ -1689,7 +1689,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // real fBC = fG - c6o1 * WEIGTH[fdir] * (D3Q27System::DX1[fdir] * vxBC + D3Q27System::DX2[fdir] * vyBC + D3Q27System::DX2[fdir] * vzBC); // //if ((*phaseField)(x1, x2, x3) <= c1o2) - // distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); + // distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); // if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) { // //real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); // //real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); @@ -1700,7 +1700,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // distribution->setDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); // } // } @@ -1727,7 +1727,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // distribution->setDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); // } // } @@ -1755,16 +1755,16 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { // if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] > c1o2)) { // real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]);; - // distribution->setDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); + // distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); // } // if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] <= c1o2)) { // real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); - // distribution->setDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); + // distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); // } // } - // real feqL = D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz); - // distribution->setDistributionForDirection(feqL, x1, x2, x3, DIR_000); + // real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz); + // distribution->setPostCollisionDistributionForDirection(feqL, x1, x2, x3, d000); @@ -1780,7 +1780,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //16.03.23 A: scaled pressure //distribution->getDistributionInv(ff, x1, x2, x3); //real rhoG; - //if (phi[DIR_000] > c1o2) { //initialization necessary + //if (phi[d000] > c1o2) { //initialization necessary // real sumRho = 0; // real sumWeight = 0; // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { @@ -1798,11 +1798,11 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); // real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; - // distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); + // distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); // } // } - // distribution->setDistributionForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoG, vx, vy, vz), x1, x2, x3, DIR_000); + // distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000); @@ -1819,7 +1819,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; // //if ((*phaseField)(x1, x2, x3) <= c1o2) - // distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); + // distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); // if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) { // real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); // real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); @@ -1830,7 +1830,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // distribution->setDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); // } // } @@ -1859,7 +1859,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // distribution->setDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); // } // } @@ -1887,16 +1887,16 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { // if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] > c1o2)) { // real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]);; - // distribution->setDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); + // distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); // } // if ((phi[D3Q27System::INVDIR[fdir]] <= c1o2) && (phi[fdir] <= c1o2)) { // real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); - // distribution->setDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); + // distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); // } // } - // real feqL = D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz); - // distribution->setDistributionForDirection(feqL, x1 , x2, x3 , DIR_000); + // real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz); + // distribution->setPostCollisionDistributionForDirection(feqL, x1 , x2, x3 , d000); @@ -1936,32 +1936,32 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // //real scalRefill = 0.0; // real slowerFactor = 1.0e6; // if (((*phaseField)(x1, x2, x3) <= c1o2) && ( - // (phi[DIR_P00] > c1o2) || - // (phi[DIR_M00] > c1o2) || - // (phi[DIR_00P] > c1o2) || - // (phi[DIR_00M] > c1o2) || - // (phi[DIR_0M0] > c1o2) || - // (phi[DIR_0P0] > c1o2) || - // (phi[DIR_PP0] > c1o2) || - // (phi[DIR_PM0] > c1o2) || - // (phi[DIR_P0P] > c1o2) || - // (phi[DIR_P0M] > c1o2) || - // (phi[DIR_MP0] > c1o2) || - // (phi[DIR_MM0] > c1o2) || - // (phi[DIR_M0P] > c1o2) || - // (phi[DIR_M0M] > c1o2) || - // (phi[DIR_0PM] > c1o2) || - // (phi[DIR_0MM] > c1o2) || - // (phi[DIR_0PP] > c1o2) || - // (phi[DIR_0MP] > c1o2) || - // (phi[DIR_PPP] > c1o2) || - // (phi[DIR_PMP] > c1o2) || - // (phi[DIR_MPP] > c1o2) || - // (phi[DIR_MMP] > c1o2) || - // (phi[DIR_PPM] > c1o2) || - // (phi[DIR_PMM] > c1o2) || - // (phi[DIR_MPM] > c1o2) || - // (phi[DIR_MMM] > c1o2) + // (phi[dP00] > c1o2) || + // (phi[dM00] > c1o2) || + // (phi[d00P] > c1o2) || + // (phi[d00M] > c1o2) || + // (phi[d0M0] > c1o2) || + // (phi[d0P0] > c1o2) || + // (phi[dPP0] > c1o2) || + // (phi[dPM0] > c1o2) || + // (phi[dP0P] > c1o2) || + // (phi[dP0M] > c1o2) || + // (phi[dMP0] > c1o2) || + // (phi[dMM0] > c1o2) || + // (phi[dM0P] > c1o2) || + // (phi[dM0M] > c1o2) || + // (phi[d0PM] > c1o2) || + // (phi[d0MM] > c1o2) || + // (phi[d0PP] > c1o2) || + // (phi[d0MP] > c1o2) || + // (phi[dPPP] > c1o2) || + // (phi[dPMP] > c1o2) || + // (phi[dMPP] > c1o2) || + // (phi[dMMP] > c1o2) || + // (phi[dPPM] > c1o2) || + // (phi[dPMM] > c1o2) || + // (phi[dMPM] > c1o2) || + // (phi[dMMM] > c1o2) // )) { // real vx = (*vxNode)(x1, x2, x3); // real vy = (*vyNode)(x1, x2, x3); @@ -1970,7 +1970,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // distribution->getDistributionInv(ff, x1, x2, x3); // real rhoG; - // if (phi[DIR_000] > c1o2) { //initialization necessary + // if (phi[d000] > c1o2) { //initialization necessary // real sumRho = 0; // real sumWeight = 0; // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { @@ -1988,11 +1988,11 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); // real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; - // distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); + // distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); // } // } - // distribution->setDistributionForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoG, vx, vy, vz), x1, x2, x3, DIR_000); + // distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000); @@ -2008,7 +2008,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir); // real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; - // distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); + // distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); // if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) { // real vxBC =c1o2*(vx+ (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); // real vyBC =c1o2*(vy+ (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); @@ -2019,7 +2019,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // distribution->setDistributionForDirection((fBC+fG) / densityRatio-fL+kapkap* WEIGTH[fdir]* computeCurvature_phi() -(feqG-feqL)*(c1o1/densityRatio-c1o1)*(vxBC* D3Q27System::DX1[fdir]+vyBC* D3Q27System::DX2[fdir]+vzBC* D3Q27System::DX3[fdir]), x1 , x2 , x3 , fdir); + // distribution->setPostCollisionDistributionForDirection((fBC+fG) / densityRatio-fL+kapkap* WEIGTH[fdir]* computeCurvature_phi() -(feqG-feqL)*(c1o1/densityRatio-c1o1)*(vxBC* D3Q27System::DX1[fdir]+vyBC* D3Q27System::DX2[fdir]+vzBC* D3Q27System::DX3[fdir]), x1 , x2 , x3 , fdir); // } // } @@ -2032,7 +2032,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG / densityRatio, slower * vx, slower * vy, slower * vz); // real fBC = (fG - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew; - // distribution->setDistributionForDirection(fBC, x1, x2 , x3 , fdir); + // distribution->setPostCollisionDistributionForDirection(fBC, x1, x2 , x3 , fdir); // ////inverse refill from here // //int xn1 = x1 + D3Q27System::DX1[fdir]; @@ -2068,8 +2068,8 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // //real feqL = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); // ////real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // //distribution->setDistributionForDirection((fBC + fG) / densityRatio - fL + kapkap * WEIGTH[fdir] * computeCurvature_phi() - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - // ////distribution->setDistributionForDirection(( fG) / densityRatio - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + // //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL + kapkap * WEIGTH[fdir] * computeCurvature_phi() - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + // ////distribution->setPostCollisionDistributionForDirection(( fG) / densityRatio - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); // // // } @@ -2112,7 +2112,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG / densityRatio, slower*vx, slower*vy, slower*vz); // real fBC = (fG - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew; - // distribution->setDistributionForDirection(fBC, x1, x2, x3, fdir); + // distribution->setPostCollisionDistributionForDirection(fBC, x1, x2, x3, fdir); // /////reverse liquid // //int xn1 = x1 + D3Q27System::DX1[fdir]; @@ -2148,11 +2148,11 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); // ////real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - // //distribution->setDistributionForDirection((fBC + fG) / densityRatio - fL + kapkap * WEIGTH[fdir] * computeCurvature_phi() - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + // //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL + kapkap * WEIGTH[fdir] * computeCurvature_phi() - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); // /////!reverse liquid // // - // ////distribution->setDistributionForDirection((fG) / densityRatio - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + // ////distribution->setPostCollisionDistributionForDirection((fG) / densityRatio - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); // } // else { // real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); @@ -2160,7 +2160,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1, x2, x3), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); // real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir); // real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; - // distribution->setDistributionForDirection((fBC + fG) / densityRatio - fL + kapkap * WEIGTH[fdir] * computeCurvature_phi() - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + // distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio - fL + kapkap * WEIGTH[fdir] * computeCurvature_phi() - (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); // } // } // @@ -2176,33 +2176,33 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) ////////////////////////////////////// -// //if ((phi[DIR_000] > c1o2) && ( -// // (phi[DIR_P00] <= c1o2) || -// // (phi[DIR_M00] <= c1o2) || -// // (phi[DIR_00P] <= c1o2) || -// // (phi[DIR_00M] <= c1o2) || -// // (phi[DIR_0M0] <= c1o2) || -// // (phi[DIR_0P0] <= c1o2) || -// // (phi[DIR_PP0] <= c1o2) || -// // (phi[DIR_PM0] <= c1o2) || -// // (phi[DIR_P0P] <= c1o2) || -// // (phi[DIR_P0M] <= c1o2) || -// // (phi[DIR_MP0] <= c1o2) || -// // (phi[DIR_MM0] <= c1o2) || -// // (phi[DIR_M0P] <= c1o2) || -// // (phi[DIR_M0M] <= c1o2) || -// // (phi[DIR_0PM] <= c1o2) || -// // (phi[DIR_0MM] <= c1o2) || -// // (phi[DIR_0PP] <= c1o2) || -// // (phi[DIR_0MP] <= c1o2) || -// // (phi[DIR_PPP] <= c1o2) || -// // (phi[DIR_PMP] <= c1o2) || -// // (phi[DIR_MPP] <= c1o2) || -// // (phi[DIR_MMP] <= c1o2) || -// // (phi[DIR_PPM] <= c1o2) || -// // (phi[DIR_PMM] <= c1o2) || -// // (phi[DIR_MPM] <= c1o2) || -// // (phi[DIR_MMM] <= c1o2) +// //if ((phi[d000] > c1o2) && ( +// // (phi[dP00] <= c1o2) || +// // (phi[dM00] <= c1o2) || +// // (phi[d00P] <= c1o2) || +// // (phi[d00M] <= c1o2) || +// // (phi[d0M0] <= c1o2) || +// // (phi[d0P0] <= c1o2) || +// // (phi[dPP0] <= c1o2) || +// // (phi[dPM0] <= c1o2) || +// // (phi[dP0P] <= c1o2) || +// // (phi[dP0M] <= c1o2) || +// // (phi[dMP0] <= c1o2) || +// // (phi[dMM0] <= c1o2) || +// // (phi[dM0P] <= c1o2) || +// // (phi[dM0M] <= c1o2) || +// // (phi[d0PM] <= c1o2) || +// // (phi[d0MM] <= c1o2) || +// // (phi[d0PP] <= c1o2) || +// // (phi[d0MP] <= c1o2) || +// // (phi[dPPP] <= c1o2) || +// // (phi[dPMP] <= c1o2) || +// // (phi[dMPP] <= c1o2) || +// // (phi[dMMP] <= c1o2) || +// // (phi[dPPM] <= c1o2) || +// // (phi[dPMM] <= c1o2) || +// // (phi[dMPM] <= c1o2) || +// // (phi[dMMM] <= c1o2) // // )) { // // // real vx = (*vxNode)(x1, x2, x3); @@ -2223,8 +2223,8 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // // // // // //real fBB; // // //fBB = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); -// // //distribution->setDistributionForDirection((ftemp - ff[fdir]), x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); -// // //distribution->setDistributionForDirection(fBB - c6o1 * D3Q27System::WEIGTH[fdir] * (-vx * D3Q27System::DX1[fdir] - vy * D3Q27System::DX2[fdir] - vz * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); +// // //distribution->setPostCollisionDistributionForDirection((ftemp - ff[fdir]), x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); +// // //distribution->setPostCollisionDistributionForDirection(fBB - c6o1 * D3Q27System::WEIGTH[fdir] * (-vx * D3Q27System::DX1[fdir] - vy * D3Q27System::DX2[fdir] - vz * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); // // //scaled Version // // // real fG; @@ -2248,11 +2248,11 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // // real feqOLD = (D3Q27System::getIncompFeqForDirection(fdir, rhoLL/densityRatio, vx, vy, vz)); // // real feqNew = (D3Q27System::getIncompFeqForDirection(fdir, rhoLL*(c1o1-ssrho)+ssrho*rhoGG, vx, vy, vz)); // // //real feqNew = (D3Q27System::getIncompFeqForDirection(fdir, rhoFilter, vx, vy, vz)); -// // distribution->setDistributionForDirection( (ff[fdir] - feqOLD)*(c1o1/collFactorG-c1o1)/(c1o1/collFactorL-c1o1) + feqNew, x1, x2, x3, fdir); +// // distribution->setPostCollisionDistributionForDirection( (ff[fdir] - feqOLD)*(c1o1/collFactorG-c1o1)/(c1o1/collFactorL-c1o1) + feqNew, x1, x2, x3, fdir); // // // feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); // // feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) / densityRatio, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); -// // distribution->setDistributionForDirection((fG - feqOLD)* (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); +// // distribution->setPostCollisionDistributionForDirection((fG - feqOLD)* (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); // // sumRhoG += (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]); // // countRhoG++; // @@ -2261,33 +2261,33 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // // } // // (*rhoNode)(x1, x2, x3) = sumRhoG / countRhoG; // -// if ((phi[DIR_000] > c1o2) && ( -// (phi[DIR_P00] <= c1o2) || -// (phi[DIR_M00] <= c1o2) || -// (phi[DIR_00P] <= c1o2) || -// (phi[DIR_00M] <= c1o2) || -// (phi[DIR_0M0] <= c1o2) || -// (phi[DIR_0P0] <= c1o2) || -// (phi[DIR_PP0] <= c1o2) || -// (phi[DIR_PM0] <= c1o2) || -// (phi[DIR_P0P] <= c1o2) || -// (phi[DIR_P0M] <= c1o2) || -// (phi[DIR_MP0] <= c1o2) || -// (phi[DIR_MM0] <= c1o2) || -// (phi[DIR_M0P] <= c1o2) || -// (phi[DIR_M0M] <= c1o2) || -// (phi[DIR_0PM] <= c1o2) || -// (phi[DIR_0MM] <= c1o2) || -// (phi[DIR_0PP] <= c1o2) || -// (phi[DIR_0MP] <= c1o2) || -// (phi[DIR_PPP] <= c1o2) || -// (phi[DIR_PMP] <= c1o2) || -// (phi[DIR_MPP] <= c1o2) || -// (phi[DIR_MMP] <= c1o2) || -// (phi[DIR_PPM] <= c1o2) || -// (phi[DIR_PMM] <= c1o2) || -// (phi[DIR_MPM] <= c1o2) || -// (phi[DIR_MMM] <= c1o2) +// if ((phi[d000] > c1o2) && ( +// (phi[dP00] <= c1o2) || +// (phi[dM00] <= c1o2) || +// (phi[d00P] <= c1o2) || +// (phi[d00M] <= c1o2) || +// (phi[d0M0] <= c1o2) || +// (phi[d0P0] <= c1o2) || +// (phi[dPP0] <= c1o2) || +// (phi[dPM0] <= c1o2) || +// (phi[dP0P] <= c1o2) || +// (phi[dP0M] <= c1o2) || +// (phi[dMP0] <= c1o2) || +// (phi[dMM0] <= c1o2) || +// (phi[dM0P] <= c1o2) || +// (phi[dM0M] <= c1o2) || +// (phi[d0PM] <= c1o2) || +// (phi[d0MM] <= c1o2) || +// (phi[d0PP] <= c1o2) || +// (phi[d0MP] <= c1o2) || +// (phi[dPPP] <= c1o2) || +// (phi[dPMP] <= c1o2) || +// (phi[dMPP] <= c1o2) || +// (phi[dMMP] <= c1o2) || +// (phi[dPPM] <= c1o2) || +// (phi[dPMM] <= c1o2) || +// (phi[dMPM] <= c1o2) || +// (phi[dMMM] <= c1o2) // )) { // real vx = (*vxNode)(x1, x2, x3); // real vy = (*vyNode)(x1, x2, x3); @@ -2298,12 +2298,12 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // // if ((*phaseField)(x1, x2, x3) > c1o2) { // -// for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {// populations without DIR_000 +// for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) {// populations without d000 // if ((phi[fdir] <= c1o2)) { // real fG = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); // real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) / densityRatio, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); -// distribution->setDistributionForDirection((fG - feqOLD)* (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); +// distribution->setPostCollisionDistributionForDirection((fG - feqOLD)* (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); // // } // } @@ -2340,10 +2340,10 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // sumRho = ff[fdir] - D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); // } // rhoG = 27.0 / 19.0 * sumRho; -// distribution->setDistributionForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoG, vx, vy, vz), x1 , x2 , x3 , DIR_000); +// distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1 , x2 , x3 , d000); // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { // //if ((phi[fdir] > c1o2)) { -// distribution->setDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); +// distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); // //} // } // @@ -2352,33 +2352,33 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // // // } -// else if ((phi[DIR_000] <= c1o2) && ( -// (phi[DIR_P00] > c1o2) || -// (phi[DIR_M00] > c1o2) || -// (phi[DIR_00P] > c1o2) || -// (phi[DIR_00M] > c1o2) || -// (phi[DIR_0M0] > c1o2) || -// (phi[DIR_0P0] > c1o2) || -// (phi[DIR_PP0] > c1o2) || -// (phi[DIR_PM0] > c1o2) || -// (phi[DIR_P0P] > c1o2) || -// (phi[DIR_P0M] > c1o2) || -// (phi[DIR_MP0] > c1o2) || -// (phi[DIR_MM0] > c1o2) || -// (phi[DIR_M0P] > c1o2) || -// (phi[DIR_M0M] > c1o2) || -// (phi[DIR_0PM] > c1o2) || -// (phi[DIR_0MM] > c1o2) || -// (phi[DIR_0PP] > c1o2) || -// (phi[DIR_0MP] > c1o2) || -// (phi[DIR_PPP] > c1o2) || -// (phi[DIR_PMP] > c1o2) || -// (phi[DIR_MPP] > c1o2) || -// (phi[DIR_MMP] > c1o2) || -// (phi[DIR_PPM] > c1o2) || -// (phi[DIR_PMM] > c1o2) || -// (phi[DIR_MPM] > c1o2) || -// (phi[DIR_MMM] > c1o2) +// else if ((phi[d000] <= c1o2) && ( +// (phi[dP00] > c1o2) || +// (phi[dM00] > c1o2) || +// (phi[d00P] > c1o2) || +// (phi[d00M] > c1o2) || +// (phi[d0M0] > c1o2) || +// (phi[d0P0] > c1o2) || +// (phi[dPP0] > c1o2) || +// (phi[dPM0] > c1o2) || +// (phi[dP0P] > c1o2) || +// (phi[dP0M] > c1o2) || +// (phi[dMP0] > c1o2) || +// (phi[dMM0] > c1o2) || +// (phi[dM0P] > c1o2) || +// (phi[dM0M] > c1o2) || +// (phi[d0PM] > c1o2) || +// (phi[d0MM] > c1o2) || +// (phi[d0PP] > c1o2) || +// (phi[d0MP] > c1o2) || +// (phi[dPPP] > c1o2) || +// (phi[dPMP] > c1o2) || +// (phi[dMPP] > c1o2) || +// (phi[dMMP] > c1o2) || +// (phi[dPPM] > c1o2) || +// (phi[dPMM] > c1o2) || +// (phi[dMPM] > c1o2) || +// (phi[dMMM] > c1o2) // )) { // real vx = (*vxNode)(x1, x2, x3); // real vy = (*vyNode)(x1, x2, x3); @@ -2402,7 +2402,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // // real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); // // real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); // // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 , x2 , x3 ), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); -// // distribution->setDistributionForDirection((fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); +// // distribution->setPostCollisionDistributionForDirection((fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); // // } // // } ///////iterative way: @@ -2426,7 +2426,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // } // else { ff[D3Q27System::INVDIR[fdir]] = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); } // } -// ff[DIR_000]= distribution->getDistributionInvForDirection(x1, x2, x3, DIR_000); +// ff[d000]= distribution->getDistributionInvForDirection(x1, x2, x3, d000); // D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz); // //real sumRho = 0; // //for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { @@ -2436,10 +2436,10 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // } // for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { // -// distribution->setDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); +// distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); // // } -// //distribution->setDistributionForDirection(ff[DIR_000], x1, x2, x3, DIR_000); +// //distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000); // // // @@ -2452,7 +2452,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], (*rhoNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) / densityRatio, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); // ff[D3Q27System::INVDIR[fdir]] = (fG - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew; -// distribution->setDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); +// distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); // } // else { ff[D3Q27System::INVDIR[fdir]] = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]);} // } @@ -2463,7 +2463,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // sumRho = ff[fdir] - D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); // } // rhoG = 27.0 / 19.0 * sumRho; -// distribution->setDistributionForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoG, vx, vy, vz), x1, x2, x3, DIR_000); +// distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000); // // // @@ -2502,7 +2502,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz); // //if (vz != 0) { -// // std::cout << "precol: rhoL=" << rhoL << " vx=" << vx << " vy=" << vy << " vz=" << vz << "ffRest=" << ff[DIR_000] << " x=" << x1 << " y=" << x2 << " z=" << x3 << "\n"; +// // std::cout << "precol: rhoL=" << rhoL << " vx=" << vx << " vy=" << vy << " vz=" << vz << "ffRest=" << ff[d000] << " x=" << x1 << " y=" << x2 << " z=" << x3 << "\n"; // //} // } @@ -2530,7 +2530,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // distribution->getDistribution(ff, x1, x2, x3); // real rhoL; // D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz); - // std::cout << "precol: rhoL=" << rhoL << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[DIR_000] << " x=" << x1 << " y=" << x2 << " z=" << x3 << "\n"; + // std::cout << "precol: rhoL=" << rhoL << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[d000] << " x=" << x1 << " y=" << x2 << " z=" << x3 << "\n"; // } // } // } @@ -2543,7 +2543,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // sumRho = ff[fdir] - D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); // } // rhoL = 27.0 / 19.0 * sumRho; - // distribution->setDistributionInvForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz), x1, x2, x3, DIR_000); + // distribution->setPreCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz), x1, x2, x3, d000); // } @@ -2577,12 +2577,12 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // //vz = (*vzNode)(x1, x2, x3); // // -// //for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) {// loop includes DIR_000 position, different from all the others +// //for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) {// loop includes d000 position, different from all the others // // real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, rhoG,vx,vy,vz); // // real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG/densityRatio,vx,vy,vz); // // real fBC = (ff[fdir] - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew; // -// // distribution->setDistributionInvForDirection(fBC, x1 , x2 , x3 ,fdir); +// // distribution->setPreCollisionDistributionForDirection(fBC, x1 , x2 , x3 ,fdir); // // // @@ -2614,7 +2614,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // sumVx /= sum; // sumVy /= sum; // sumVz /= sum; -// distribution->setDistributionInvForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, sumRho, sumVx, sumVy, sumVz), x1, x2, x3, DIR_000); +// distribution->setPreCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, sumRho, sumVx, sumVy, sumVz), x1, x2, x3, d000); // // std::cout << "x=" << x1 << " " << "y=" << x2 << " " << "z=" << x3 <<" sumVx="<<sumVx<< " sumVy=" << sumVy << " sumVz=" << sumVz << " sumRho=" << sumRho << "\n"; // @@ -2632,12 +2632,12 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // //ff[fdir] = ff[D3Q27System::INVDIR[fdir]] + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]); // ff[fdir] = ff[D3Q27System::INVDIR[fdir]] + c6o1 * WEIGTH[fdir] * (sumVx * D3Q27System::DX1[fdir] + sumVy * D3Q27System::DX2[fdir] + sumVz * D3Q27System::DX3[fdir]); // //ff[fdir] = D3Q27System::getIncompFeqForDirection(fdir, sumRho, sumVx, sumVy, sumVz); -// distribution->setDistributionInvForDirection(ff[fdir], x1, x2, x3, fdir); +// distribution->setPreCollisionDistributionForDirection(ff[fdir], x1, x2, x3, fdir); // } // if (phi[fdir] <= c1o2 && phi[D3Q27System::INVDIR[fdir]] <= c1o2) { // //ff[fdir] = D3Q27System::getIncompFeqForDirection(fdir, rhoG / densityRatio, vx, vy, vz); // ff[fdir]= D3Q27System::getIncompFeqForDirection(fdir, sumRho, sumVx, sumVy, sumVz); -// distribution->setDistributionInvForDirection(ff[fdir], x1, x2, x3, fdir); +// distribution->setPreCollisionDistributionForDirection(ff[fdir], x1, x2, x3, fdir); // } // } // real rhoL; @@ -2650,10 +2650,10 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // sumRho2 += ff[fdir];// -D3Q27System::getIncompFeqForDirection(fdir, 0, sumVx, sumVy, sumVz); // } // rhoL = 27.0 / 19.0 * sumRho; -// //distribution->setDistributionInvForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz), x1, x2, x3, DIR_000); -// //distribution->setDistributionInvForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, sumVx, sumVy, sumVz), x1, x2, x3, DIR_000); -// ff[DIR_000] = sumRho - sumRho2; -// distribution->setDistributionInvForDirection(ff[DIR_000], x1, x2, x3, DIR_000); +// //distribution->setPreCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz), x1, x2, x3, d000); +// //distribution->setPreCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoL, sumVx, sumVy, sumVz), x1, x2, x3, d000); +// ff[d000] = sumRho - sumRho2; +// distribution->setPreCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000); // D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz); // std::cout << " calcVx=" << vx << " calcVy=" << vy << " calcVz=" << vz << " rhoG=" << rhoG << "\n"; // @@ -2794,7 +2794,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // for (int fdir = D3Q27System::STARTF; fdir <= D3Q27System::ENDF; fdir++) { // real feqOLD = (D3Q27System::getIncompFeqForDirection(fdir, drho, vvx, vvy, vvz)); // real feqNew = (D3Q27System::getIncompFeqForDirection(fdir, drhoScaled, vvx, vvy, vvz)); - // distribution->setDistributionInvForDirection((ff[fdir]-feqOLD)* scaleStress +feqNew,x1,x2,x3,fdir); + // distribution->setPreCollisionDistributionForDirection((ff[fdir]-feqOLD)* scaleStress +feqNew,x1,x2,x3,fdir); // } @@ -3666,7 +3666,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //real mfhbbb ;//= (*this->zeroDistributionsH2)(x1, x2, x3); - //if (phi[DIR_000] < c1o2) + //if (phi[d000] < c1o2) //{ mfcbb= (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3); mfbcb= (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3); @@ -3807,25 +3807,25 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //real pushInterface = 2.0; - //collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[DIR_000] - phiH) / (phiH - phiL); - //collFactorM = collFactorL + (collFactorL - collFactorG) * (tanh(pushInterface * (c2o1 * phi[DIR_000] - c1o1)) / tanh(pushInterface) * c1o2 + c1o2 - phiH) / (phiH - phiL); - collFactorM = phi[DIR_000] > phiLim ? collFactorL : collFactorG; + //collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL); + //collFactorM = collFactorL + (collFactorL - collFactorG) * (tanh(pushInterface * (c2o1 * phi[d000] - c1o1)) / tanh(pushInterface) * c1o2 + c1o2 - phiH) / (phiH - phiL); + collFactorM = phi[d000] > phiLim ? collFactorL : collFactorG; //collFactorM=(((*phaseField)(x1, x2, x3) > c1o2) && ((*phaseFieldOld)(x1, x2, x3) <= c1o2)) ? 1.8 : collFactorM; - real collFactorMInv = phi[DIR_000] > phiLim ? collFactorG : collFactorL; + real collFactorMInv = phi[d000] > phiLim ? collFactorG : collFactorL; - //real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi(); + //real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); //----------- Calculating Macroscopic Values ------------- //real rho = phi[DIR_000] > phiLim ? rhoH : rhoL;//rhoH + rhoToPhi * (phi[DIR_000] - phiH); //Incompressible real rho =rhoL+ (rhoH-rhoL) * (phi[DIR_000] - phiL)/(phiH-phiL); - //real rho = rhoH + rhoToPhi * (tanh(pushInterface*(c2o1*phi[DIR_000]-c1o1))/tanh(pushInterface)*c1o2 +c1o2 - phiH); //Incompressible + //real rho = rhoH + rhoToPhi * (tanh(pushInterface*(c2o1*phi[d000]-c1o1))/tanh(pushInterface)*c1o2 +c1o2 - phiH); //Incompressible ///scaled phase field //real rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) / ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) + (c1o1 - (*phaseField)(x1, x2, x3)) * (c1o1 - (*phaseField)(x1, x2, x3))) - phiH); ///!scaled phase field - //real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH)+(c1o1-phi[DIR_000])* (*pressure)(x1, x2, x3)*c3o1; //compressible - //real rho = rhoL + (rhoH - rhoL) * phi[DIR_000] + (c1o1 - phi[DIR_000]) * (*pressure)(x1, x2, x3) * c3o1; //compressible + //real rho = rhoH + rhoToPhi * (phi[d000] - phiH)+(c1o1-phi[d000])* (*pressure)(x1, x2, x3)*c3o1; //compressible + //real rho = rhoL + (rhoH - rhoL) * phi[d000] + (c1o1 - phi[d000]) * (*pressure)(x1, x2, x3) * c3o1; //compressible real m0, m1, m2; real rhoRef=c1o1; @@ -3847,14 +3847,14 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // {{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}}, // { {pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}} }; //real LaplaceP = 0.0; - //LaplaceP += WEIGTH[DIR_PPP] * (((((*pressureOld)(x1+1,x2+1,x3+1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 + 1) - pressureHere))) + //LaplaceP += WEIGTH[dPPP] * (((((*pressureOld)(x1+1,x2+1,x3+1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 + 1) - pressureHere))) // + ((((*pressureOld)(x1 + 1, x2 - 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 + 1) - pressureHere)))); - //LaplaceP += WEIGTH[DIR_0PP] * ( + //LaplaceP += WEIGTH[d0PP] * ( // ((((*pressureOld)(x1 + 1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3) - pressureHere))) // + ((((*pressureOld)(x1 + 1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 -1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 + 1) - pressureHere))) // + ((((*pressureOld)(x1, x2 + 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 + 1) - pressureHere))) // ); - //LaplaceP += WEIGTH[DIR_00P] * ( + //LaplaceP += WEIGTH[d00P] * ( // (((*pressureOld)(x1 + 1, x2, x3) - pressureHere) + ((*pressureOld)(x1, x2-1, x3) - pressureHere)) // + (((*pressureOld)(x1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3) - pressureHere)) // + (((*pressureOld)(x1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2, x3 - 1) - pressureHere)) @@ -3969,16 +3969,16 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //} //Viscosity increase by phase field residuum - //real errPhi = (((1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale)- denom); + //real errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom); //real limVis = 0.01;// 0.0000001 * 10;//0.01; // collFactorM =collFactorM/(c1o1+limVis*(errPhi*errPhi)*collFactorM); // collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM; //errPhi = errPhi * errPhi* errPhi * errPhi * errPhi * errPhi; //collFactorM = collFactorM + (1.8 - collFactorM) * errPhi / (errPhi + limVis); - //3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP]))) - //+WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) + - //+WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M])); + //3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) + //+WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + + //+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); @@ -3992,34 +3992,34 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //real pBefore = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) // + (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) // + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3; - //pBefore = -c1o3 * (-1.0e-10)/((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) ); + //pBefore = -c1o3 * (-1.0e-10)/((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) ); ////if (vvx * vvx + vvy * vvy + vvz * vvz > 1.0e-100) { - // mfabb -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_P00] * (rhoH - rhoL) / (phiH - phiL))); - // mfbab -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0P0] * (rhoH - rhoL) / (phiH - phiL))); - // mfbba -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_00P] * (rhoH - rhoL) / (phiH - phiL))); - // mfaab -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PP0] * (rhoH - rhoL) / (phiH - phiL))); - // mfcab -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MP0] * (rhoH - rhoL) / (phiH - phiL))); - // mfaba -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_P0P] * (rhoH - rhoL) / (phiH - phiL))); - // mfcba -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_M0P] * (rhoH - rhoL) / (phiH - phiL))); - // mfbaa -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0PP] * (rhoH - rhoL) / (phiH - phiL))); - // mfbca -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0MP] * (rhoH - rhoL) / (phiH - phiL))); - // mfaaa -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PPP] * (rhoH - rhoL) / (phiH - phiL))); - // mfcaa -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MPP] * (rhoH - rhoL) / (phiH - phiL))); - // mfaca -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PMP] * (rhoH - rhoL) / (phiH - phiL))); - // mfcca -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MMP] * (rhoH - rhoL) / (phiH - phiL))); - // mfcbb -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_M00] * (rhoH - rhoL) / (phiH - phiL))); - // mfbcb -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0M0] * (rhoH - rhoL) / (phiH - phiL))); - // mfbbc -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_00M] * (rhoH - rhoL) / (phiH - phiL))); - // mfccb -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MM0] * (rhoH - rhoL) / (phiH - phiL))); - // mfacb -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PM0] * (rhoH - rhoL) / (phiH - phiL))); - // mfcbc -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_M0M] * (rhoH - rhoL) / (phiH - phiL))); - // mfabc -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_P0M] * (rhoH - rhoL) / (phiH - phiL))); - // mfbcc -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0MM] * (rhoH - rhoL) / (phiH - phiL))); - // mfbac -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0PM] * (rhoH - rhoL) / (phiH - phiL))); - // mfccc -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MMM] * (rhoH - rhoL) / (phiH - phiL))); - // mfacc -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PMM] * (rhoH - rhoL) / (phiH - phiL))); - // mfcac -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MPM] * (rhoH - rhoL) / (phiH - phiL))); - // mfaac -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PPM] * (rhoH - rhoL) / (phiH - phiL))); + // mfabb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP00] * (rhoH - rhoL) / (phiH - phiL))); + // mfbab -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0P0] * (rhoH - rhoL) / (phiH - phiL))); + // mfbba -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d00P] * (rhoH - rhoL) / (phiH - phiL))); + // mfaab -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPP0] * (rhoH - rhoL) / (phiH - phiL))); + // mfcab -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMP0] * (rhoH - rhoL) / (phiH - phiL))); + // mfaba -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP0P] * (rhoH - rhoL) / (phiH - phiL))); + // mfcba -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM0P] * (rhoH - rhoL) / (phiH - phiL))); + // mfbaa -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0PP] * (rhoH - rhoL) / (phiH - phiL))); + // mfbca -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0MP] * (rhoH - rhoL) / (phiH - phiL))); + // mfaaa -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPPP] * (rhoH - rhoL) / (phiH - phiL))); + // mfcaa -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMPP] * (rhoH - rhoL) / (phiH - phiL))); + // mfaca -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPMP] * (rhoH - rhoL) / (phiH - phiL))); + // mfcca -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMMP] * (rhoH - rhoL) / (phiH - phiL))); + // mfcbb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM00] * (rhoH - rhoL) / (phiH - phiL))); + // mfbcb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0M0] * (rhoH - rhoL) / (phiH - phiL))); + // mfbbc -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d00M] * (rhoH - rhoL) / (phiH - phiL))); + // mfccb -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMM0] * (rhoH - rhoL) / (phiH - phiL))); + // mfacb -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPM0] * (rhoH - rhoL) / (phiH - phiL))); + // mfcbc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM0M] * (rhoH - rhoL) / (phiH - phiL))); + // mfabc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP0M] * (rhoH - rhoL) / (phiH - phiL))); + // mfbcc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0MM] * (rhoH - rhoL) / (phiH - phiL))); + // mfbac -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0PM] * (rhoH - rhoL) / (phiH - phiL))); + // mfccc -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMMM] * (rhoH - rhoL) / (phiH - phiL))); + // mfacc -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPMM] * (rhoH - rhoL) / (phiH - phiL))); + // mfcac -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMPM] * (rhoH - rhoL) / (phiH - phiL))); + // mfaac -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPPM] * (rhoH - rhoL) / (phiH - phiL))); // mfbbb -= pBefore * 8.0 / 9.0; //} @@ -4029,7 +4029,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // + (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) // + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3; - //rho = rhoH + rhoToPhi * ((phi[DIR_000] - phiH)+fabs(pStarStart)*0); //Incompressible + //rho = rhoH + rhoToPhi * ((phi[d000] - phiH)+fabs(pStarStart)*0); //Incompressible muRho = rho; @@ -4072,9 +4072,9 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho + pStar * dX1_rhoInv * rho) *c1o2; //forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho + pStar * dX2_rhoInv * rho) *c1o2; //forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho + pStar * dX3_rhoInv * rho) *c1o2; - //real FdX1_phi = normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale; - //real FdX2_phi = normX2 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale; - //real FdX3_phi = normX3 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale; + //real FdX1_phi = normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; + //real FdX2_phi = normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; + //real FdX3_phi = normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; //forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho ) ; @@ -4084,7 +4084,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //forcingX1 = (pStar * dRhoInvX* rho *c3o1) ; //forcingX2 = (pStar * dRhoInvY* rho *c3o1) ; //forcingX3 = (pStar * dRhoInvZ* rho *c3o1) ; - //if (phi[DIR_000] > 0.1 && phi[DIR_000] < 0.9) std::cout << phi[DIR_000] << " " << dX1_phi * rhoToPhi / rho << " " << dRhoInvX * rho *3<< std::endl; + //if (phi[d000] > 0.1 && phi[d000] < 0.9) std::cout << phi[d000] << " " << dX1_phi * rhoToPhi / rho << " " << dRhoInvX * rho *3<< std::endl; //real forcingX1ALTERNAT = ( pStar * dX1_rhoInv * rho) ; //real forcingX2ALTERNAT = ( pStar * dX2_rhoInv * rho) ; //real forcingX3ALTERNAT = ( pStar * dX3_rhoInv * rho) ; @@ -4093,22 +4093,22 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //forcingX2 = (fabs(vvy + c1o2 * forcingX2) < fabs(vvy + c1o2 * forcingX2ALTERNAT)) ? forcingX2 : forcingX2ALTERNAT; //forcingX3 = (fabs(vvz + c1o2 * forcingX3) < fabs(vvz + c1o2 * forcingX3ALTERNAT)) ? forcingX3 : forcingX3ALTERNAT; - // forcingX1 = -pStar * rhoToPhi / rho * normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale; - // forcingX2 = -pStar * rhoToPhi / rho * normX2 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale; - // forcingX3 = -pStar * rhoToPhi / rho * normX3 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale; + // forcingX1 = -pStar * rhoToPhi / rho * normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; + // forcingX2 = -pStar * rhoToPhi / rho * normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; + // forcingX3 = -pStar * rhoToPhi / rho * normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; - //forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho *(c1o1- phi[DIR_000]) + pStar * dX1_rhoInv * rho*(phi[DIR_000])); - //forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho *(c1o1- phi[DIR_000]) + pStar * dX2_rhoInv * rho*(phi[DIR_000])); - //forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho *(c1o1- phi[DIR_000]) + pStar * dX3_rhoInv * rho*(phi[DIR_000])); - //if (phi[DIR_000] > 0.3 && phi[DIR_000] < 0.7) + //forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho *(c1o1- phi[d000]) + pStar * dX1_rhoInv * rho*(phi[d000])); + //forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho *(c1o1- phi[d000]) + pStar * dX2_rhoInv * rho*(phi[d000])); + //forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho *(c1o1- phi[d000]) + pStar * dX3_rhoInv * rho*(phi[d000])); + //if (phi[d000] > 0.3 && phi[d000] < 0.7) //{ // int test = 1; - // std::cout << phi[DIR_000] <<" "<< dX1_phi <<" "<< normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale<<" "<< normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale/ dX1_phi<< std::endl; + // std::cout << phi[d000] <<" "<< dX1_phi <<" "<< normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale<<" "<< normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale/ dX1_phi<< std::endl; //} - //real scaleGrad = c2o1 * phi[DIR_000] * (1.0 - phi[DIR_000]) / ((phi[DIR_000] * phi[DIR_000] + (1.0 - phi[DIR_000]) * (1.0 - phi[DIR_000])) * (phi[DIR_000] * phi[DIR_000] + (1.0 - phi[DIR_000]) * (1.0 - phi[DIR_000]))); + //real scaleGrad = c2o1 * phi[d000] * (1.0 - phi[d000]) / ((phi[d000] * phi[d000] + (1.0 - phi[d000]) * (1.0 - phi[d000])) * (phi[d000] * phi[d000] + (1.0 - phi[d000]) * (1.0 - phi[d000]))); //dX1_phi *= scaleGrad; //dX2_phi *= scaleGrad; //dX3_phi *= scaleGrad; @@ -4125,9 +4125,9 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //forcingX3 += mu * dX3_phi/rho; //real forcingBIAS = 0.5; - // forcingX1 += muForcingX1.Eval() / rho;//*phi[DIR_000]; - // forcingX2 += -5.0e-7;// *phi[DIR_000]; // muForcingX2.Eval() / rho - 5.0e-7 * phi[DIR_000] * 0;// * phi[DIR_000]; - // forcingX3 += muForcingX3.Eval() / rho;// * phi[DIR_000]; + // forcingX1 += muForcingX1.Eval() / rho;//*phi[d000]; + // forcingX2 += -5.0e-7;// *phi[d000]; // muForcingX2.Eval() / rho - 5.0e-7 * phi[d000] * 0;// * phi[d000]; + // forcingX3 += muForcingX3.Eval() / rho;// * phi[d000]; // //19.08.2022 //vvx += vvxh / rho * c1o2; @@ -4203,15 +4203,15 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //////////////////////////////////////////////////////////////////////////////////// real wadjust; - //real qudricLimit = 0.01 / (c1o1 + 1.0e5 * phi[DIR_000] * (c1o1 - phi[DIR_000])); //real qudricLimit = 0.01; - //real qudricLimit = (((*phaseField)(x1, x2, x3) > c1o2) && (normX1 * vvx + normX2 * vvy + normX3 * vvz < 0)) ? 0.01 / (c1o1 + 1.0e5 * phi[DIR_000] * (c1o1 - phi[DIR_000])) : 0.01; - //real qudricLimit = (((*phaseField)(x1, x2, x3) > c1o2)&& (normX1*vvx+normX2*vvy+normX3*vvz<0) ) ? 0.01 / (c1o1 + 1.0e5 * phi[DIR_000] * (c1o1 - phi[DIR_000])) : 0.01 ; + //real qudricLimit = 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])); //real qudricLimit = 0.01; + //real qudricLimit = (((*phaseField)(x1, x2, x3) > c1o2) && (normX1 * vvx + normX2 * vvy + normX3 * vvz < 0)) ? 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])) : 0.01; + //real qudricLimit = (((*phaseField)(x1, x2, x3) > c1o2)&& (normX1*vvx+normX2*vvy+normX3*vvz<0) ) ? 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])) : 0.01 ; real qudricLimit = 0.0001; /// (c1o1 + 1.0e3 * (dX1_phi * dX1_phi + dX2_phi * dX2_phi + dX3_phi * dX3_phi)); - //real qudricLimit = 0.01 / (c1o1 + 1.0e5 * phi[DIR_000] * (c1o1 - phi[DIR_000])) ; - //real qudricLimit = (((*phaseField)(x1, x2, x3) > c1o2) ) ? 0.01 / (c1o1 + 1.0e5 * phi[DIR_000] * (c1o1 - phi[DIR_000])) : 0.01 ; - //qudricLimit = (((*phaseField)(x1, x2, x3)-c1o2 ) * (normX1 * vvx + normX2 * vvy + normX3 * vvz) < 0) ? 0.01 / (c1o1 + 1.0e8 * phi[DIR_000] * (c1o1 - phi[DIR_000])) : 0.01; - // if (phi[DIR_000] > c1o2 && (*phaseFieldOld)(x1, x2, x3) <= c1o2) collFactorM = 1.8; + //real qudricLimit = 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])) ; + //real qudricLimit = (((*phaseField)(x1, x2, x3) > c1o2) ) ? 0.01 / (c1o1 + 1.0e5 * phi[d000] * (c1o1 - phi[d000])) : 0.01 ; + //qudricLimit = (((*phaseField)(x1, x2, x3)-c1o2 ) * (normX1 * vvx + normX2 * vvy + normX3 * vvz) < 0) ? 0.01 / (c1o1 + 1.0e8 * phi[d000] * (c1o1 - phi[d000])) : 0.01; + // if (phi[d000] > c1o2 && (*phaseFieldOld)(x1, x2, x3) <= c1o2) collFactorM = 1.8; //////////////////////////////////////////////////////////////////////////////////// //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref @@ -4363,8 +4363,8 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) mxxPyyPzz -= mfaaa ;//12.03.21 shifted by mfaaa //mxxPyyPzz-=(mfaaa+mfaaaS)*c1o2;//12.03.21 shifted by mfaaa //dirty (04.04.2023) - //if (phi[DIR_000] > c1o2 &&(dX1_phi*vvx+dX2_phi*vvy+dX3_phi*vvz)<0) { - // //collFactorM = c1o1 / (c1o1 / collFactorM +1e10* fabsf(mxxPyyPzz)*(c1o1-fabsf(phi[DIR_000]))); + //if (phi[d000] > c1o2 &&(dX1_phi*vvx+dX2_phi*vvy+dX3_phi*vvz)<0) { + // //collFactorM = c1o1 / (c1o1 / collFactorM +1e10* fabsf(mxxPyyPzz)*(c1o1-fabsf(phi[d000]))); // collFactorM = c1o1 / (c1o1 / collFactorM - 1e15*(dX1_phi * vvx + dX2_phi * vvy + dX3_phi * vvz)* fabsf(mxxPyyPzz) ); // collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM; // OxyyPxzz = 8.0 * (collFactorM - 2.0) * (OxxPyyPzz * (3.0 * collFactorM - 1.0) - 5.0 * collFactorM) / (8.0 * (5.0 - 2.0 * collFactorM) * collFactorM + OxxPyyPzz * (8.0 + collFactorM * (9.0 * collFactorM - 26.0))); @@ -4425,8 +4425,8 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); } - //if ((phi[DIR_000] > c1o2)&& (normX1 * vvx + normX2 * vvy + normX3 * vvz < 0)){//&& ((*phaseFieldOld)(x1, x2, x3) <= c1o2)) { - // if ((phi[DIR_000] > 0.01) && (phi[DIR_000]<0.99)){ + //if ((phi[d000] > c1o2)&& (normX1 * vvx + normX2 * vvy + normX3 * vvz < 0)){//&& ((*phaseFieldOld)(x1, x2, x3) <= c1o2)) { + // if ((phi[d000] > 0.01) && (phi[d000]<0.99)){ // //std::cout << "new node\n"; // ///QR eddyviscosity: // real eddyR = -(Dxy * Dxy + Dxz * Dxz + c1o3 * dxux * dxux) * (dxux)-(Dxy * Dxy + Dyz * Dyz + c1o3 * dyuy * dyuy) * dyuy - (Dxz * Dxz + Dyz * Dyz + c1o3 * dzuz * dzuz) * dzuz - c2o1 * Dxy * Dxz * Dyz; @@ -4458,7 +4458,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //} //low viscouse non Newtonian fluid - if (phi[DIR_000] > phiLim) { + if (phi[d000] > phiLim) { real shearRate = sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz); collFactorM = Rheology::getBinghamCollFactor(collFactorM, shearRate, c1o1); collFactorM = (collFactorM < c1o54) ? c1o54 : collFactorM; @@ -4582,7 +4582,7 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) mfbab += collFactorM * (-mfbab); mfbba += collFactorM * (-mfbba); -// mfhaaa = (phi[DIR_000] < c1o2) ? mfaaa * rhoL / rhoH : mfaaa * rhoL / rhoH; +// mfhaaa = (phi[d000] < c1o2) ? mfaaa * rhoL / rhoH : mfaaa * rhoL / rhoH; mxxMyyh += collFactorMInv * (-mxxMyyh) - 3. * (1. - c1o2 * collFactorMInv) * (vx2 * dxux - vy2 * dyuy); mxxMzzh += collFactorMInv * (-mxxMzzh) - 3. * (1. - c1o2 * collFactorMInv) * (vx2 * dxux - vz2 * dzuz); @@ -4862,12 +4862,12 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) //#endif if (UbMath::isNaN(rho_post) || UbMath::isInfinity(rho_post)) - UB_THROW(UbException(UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3) + ",phi=" + UbSystem::toString(phi[DIR_000]))); + UB_THROW(UbException(UB_EXARGS, "rho_post is not a number (nan or -1.#IND) or infinity number -1.#INF, node=" + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3) + ",phi=" + UbSystem::toString(phi[d000]))); ////////////////////////////////////////////////////////////////////////// //write distribution ////////////////////////////////////////////////////////////////////////// - // if (phi[DIR_000] < c1o2) { + // if (phi[d000] < c1o2) { (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb;//* rho * c1o3; (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab;//* rho * c1o3; (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba;//* rho * c1o3; @@ -5462,33 +5462,33 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // int x2p = x2 + 1; // int x3p = x3 + 1; // findNeighbors(phaseField, x1, x2, x3); - // if ((phi[DIR_000] > c1o2) && ( - // (phi[DIR_P00] <= c1o2) || - // (phi[DIR_M00] <= c1o2) || - // (phi[DIR_00P] <= c1o2) || - // (phi[DIR_00M] <= c1o2) || - // (phi[DIR_0M0] <= c1o2) || - // (phi[DIR_0P0] <= c1o2) || - // (phi[DIR_PP0] <= c1o2) || - // (phi[DIR_PM0] <= c1o2) || - // (phi[DIR_P0P] <= c1o2) || - // (phi[DIR_P0M] <= c1o2) || - // (phi[DIR_MP0] <= c1o2) || - // (phi[DIR_MM0] <= c1o2) || - // (phi[DIR_M0P] <= c1o2) || - // (phi[DIR_M0M] <= c1o2) || - // (phi[DIR_0PM] <= c1o2) || - // (phi[DIR_0MM] <= c1o2) || - // (phi[DIR_0PP] <= c1o2) || - // (phi[DIR_0MP] <= c1o2) || - // (phi[DIR_PPP] <= c1o2) || - // (phi[DIR_PMP] <= c1o2) || - // (phi[DIR_MPP] <= c1o2) || - // (phi[DIR_MMP] <= c1o2) || - // (phi[DIR_PPM] <= c1o2) || - // (phi[DIR_PMM] <= c1o2) || - // (phi[DIR_MPM] <= c1o2) || - // (phi[DIR_MMM] <= c1o2) + // if ((phi[d000] > c1o2) && ( + // (phi[dP00] <= c1o2) || + // (phi[dM00] <= c1o2) || + // (phi[d00P] <= c1o2) || + // (phi[d00M] <= c1o2) || + // (phi[d0M0] <= c1o2) || + // (phi[d0P0] <= c1o2) || + // (phi[dPP0] <= c1o2) || + // (phi[dPM0] <= c1o2) || + // (phi[dP0P] <= c1o2) || + // (phi[dP0M] <= c1o2) || + // (phi[dMP0] <= c1o2) || + // (phi[dMM0] <= c1o2) || + // (phi[dM0P] <= c1o2) || + // (phi[dM0M] <= c1o2) || + // (phi[d0PM] <= c1o2) || + // (phi[d0MM] <= c1o2) || + // (phi[d0PP] <= c1o2) || + // (phi[d0MP] <= c1o2) || + // (phi[dPPP] <= c1o2) || + // (phi[dPMP] <= c1o2) || + // (phi[dMPP] <= c1o2) || + // (phi[dMMP] <= c1o2) || + // (phi[dPPM] <= c1o2) || + // (phi[dPMM] <= c1o2) || + // (phi[dMPM] <= c1o2) || + // (phi[dMMM] <= c1o2) // )) { // //real mfabb = (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3);//* rho * c1o3; // //real mfbab = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3);//* rho * c1o3; @@ -5531,47 +5531,47 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // real ftemp= D3Q27System::getCompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz) + D3Q27System::getCompFeqForDirection(fdir, rhoG, vx, vy, vz); // real fBB; // fBB=distribution->getDistributionInvForDirection( x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir],fdir); - // distribution->setDistributionInvForDirection(ftemp - ff[fdir], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir); - // distribution->setDistributionForDirection(fBB-c6o1*D3Q27System::WEIGTH[fdir] * (-vx * D3Q27System::DX1[fdir] - vy * D3Q27System::DX2[fdir] - vz * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + // distribution->setPreCollisionDistributionForDirection(ftemp - ff[fdir], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir); + // distribution->setPostCollisionDistributionForDirection(fBB-c6o1*D3Q27System::WEIGTH[fdir] * (-vx * D3Q27System::DX1[fdir] - vy * D3Q27System::DX2[fdir] - vz * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); // } // } - // //if ((phi[DIR_P00] <= c1o2)) { + // //if ((phi[dP00] <= c1o2)) { // // real rhoG = (*rhoNode)(x1 + 1, x2, x3); // // real ftemp = D3Q27System::getCompFeqForDirection(W, rhoG, vx,vy,vz )+ D3Q27System::getCompFeqForDirection(E, rhoG, vx, vy, vz); // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_E, x1 + 1, x2, x3); // // (*this->localDistributionsF)(D3Q27System::ET_E, x1+1, x2, x3)=ftemp-mfcbb; // // (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p, x2, x3)=fBB-c6o1*c2o27*(-vx); // //} - // //if ((phi[DIR_M00] <= c1o2)) { + // //if ((phi[dM00] <= c1o2)) { // // real rhoG = (*rhoNode)(x1 - 1, x2, x3); // // real ftemp = D3Q27System::getCompFeqForDirection(E, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(W, rhoG, vx, vy, vz); // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p-1, x2, x3); // // (*this->nonLocalDistributionsF)(D3Q27System::ET_W, x1p - 1, x2, x3) = ftemp - mfabb; // // (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = fBB - c6o1 * c2o27 * ( vx); // //} - // //if ((phi[DIR_0P0] <= c1o2)) { + // //if ((phi[d0P0] <= c1o2)) { // // real rhoG = (*rhoNode)(x1, x2+1, x3); // // real ftemp = D3Q27System::getCompFeqForDirection(S, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(N, rhoG, vx, vy, vz); // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2+1, x3); // // (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2+1, x3) = ftemp - mfbcb; // // (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p, x3) = fBB - c6o1 * c2o27 * (-vy); // //} - // //if ((phi[DIR_0M0] <= c1o2)) { + // //if ((phi[d0M0] <= c1o2)) { // // real rhoG = (*rhoNode)(x1, x2 - 1, x3); // // real ftemp = D3Q27System::getCompFeqForDirection(N, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(S, rhoG, vx, vy, vz); // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p-1, x3); // // (*this->nonLocalDistributionsF)(D3Q27System::ET_S, x1, x2p - 1, x3) = ftemp - mfbab; // // (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = fBB - c6o1 * c2o27 * ( vy); // //} - // //if ((phi[DIR_00P] <= c1o2)) { + // //if ((phi[d00P] <= c1o2)) { // // real rhoG = (*rhoNode)(x1, x2 , x3+1); // // real ftemp = D3Q27System::getCompFeqForDirection(B, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(T, rhoG, vx, vy, vz); // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3+1); // // (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3+1) = ftemp - mfbbc; // // (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p) = fBB - c6o1 * c2o27 * (-vz); // //} - // //if ((phi[DIR_00M] <= c1o2)) { + // //if ((phi[d00M] <= c1o2)) { // // real rhoG = (*rhoNode)(x1, x2, x3 - 1); // // real ftemp = D3Q27System::getCompFeqForDirection(T, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(B, rhoG, vx, vy, vz); // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_B, x1, x2, x3p-1); @@ -5579,84 +5579,84 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // // (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = fBB - c6o1 * c2o27 * ( vz); // //} // // - // //if ((phi[DIR_PP0] <= c1o2)) { + // //if ((phi[dPP0] <= c1o2)) { // // real rhoG = (*rhoNode)(x1 + 1, x2+1, x3); // // real ftemp = D3Q27System::getCompFeqForDirection(SW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(NE, rhoG, vx, vy, vz); // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_NE, x1+1, x2+1, x3); // // (*this->localDistributionsF)(D3Q27System::ET_NE, x1 + 1, x2 + 1, x3) = ftemp - mfccb; // // (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p, x2p, x3) = fBB - c6o1 * c1o54 * (-vx-vy); // //} - // //if ((phi[DIR_MM0] <= c1o2)) { + // //if ((phi[dMM0] <= c1o2)) { // // real rhoG = (*rhoNode)(x1 - 1, x2 - 1, x3); // // real ftemp = D3Q27System::getCompFeqForDirection(NE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(SW, rhoG, vx, vy, vz); // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p-1, x2p-1, x3); // // (*this->nonLocalDistributionsF)(D3Q27System::ET_SW, x1p - 1, x2p - 1, x3) = ftemp - mfaab; // // (*this->localDistributionsF)(D3Q27System::ET_NE, x1, x2, x3) = fBB - c6o1 * c1o54 * ( vx + vy); // //} - // //if ((phi[DIR_MP0] <= c1o2)) { + // //if ((phi[dMP0] <= c1o2)) { // // real rhoG = (*rhoNode)(x1 - 1, x2 + 1, x3); // // real ftemp = D3Q27System::getCompFeqForDirection(SE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(NW, rhoG, vx, vy, vz); // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_NW, x1p-1, x2+1, x3); // // (*this->localDistributionsF)(D3Q27System::ET_NW, x1p - 1, x2 + 1, x3) = ftemp - mfacb; // // (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1, x2p, x3) = fBB - c6o1 * c1o54 * ( vx - vy); // //} - // //if ((phi[DIR_PM0] <= c1o2)) { + // //if ((phi[dPM0] <= c1o2)) { // // real rhoG = (*rhoNode)(x1 + 1, x2 - 1, x3); // // real ftemp = D3Q27System::getCompFeqForDirection(NW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(SE, rhoG, vx, vy, vz); // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1+1, x2p-1, x3); // // (*this->nonLocalDistributionsF)(D3Q27System::ET_SE, x1 + 1, x2p - 1, x3) = ftemp - mfcab; // // (*this->localDistributionsF)(D3Q27System::ET_NW, x1p, x2, x3) = fBB - c6o1 * c1o54 * (-vx + vy); // //} - // //if ((phi[DIR_P0P] <= c1o2)) { + // //if ((phi[dP0P] <= c1o2)) { // // real rhoG = (*rhoNode)(x1 + 1, x2 , x3+1); // // real ftemp = D3Q27System::getCompFeqForDirection(BW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TE, rhoG, vx, vy, vz); // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_TE, x1+1, x2, x3+1); // // (*this->localDistributionsF)(D3Q27System::ET_TE, x1 + 1, x2, x3 + 1) = ftemp - mfcbc; // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p, x2, x3p) = fBB - c6o1 * c1o54 * (-vx - vz); // //} - // //if ((phi[DIR_M0P] <= c1o2)) { + // //if ((phi[dM0P] <= c1o2)) { // // real rhoG = (*rhoNode)(x1 - 1, x2, x3 + 1); // // real ftemp = D3Q27System::getCompFeqForDirection(BE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TW, rhoG, vx, vy, vz); // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_TW, x1p-1, x2, x3+1); // // (*this->localDistributionsF)(D3Q27System::ET_TW, x1p - 1, x2, x3 + 1) = ftemp - mfabc; // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1, x2, x3p) = fBB - c6o1 * c1o54 * ( vx - vz); // //} - // //if ((phi[DIR_P0M] <= c1o2)) { + // //if ((phi[dP0M] <= c1o2)) { // // real rhoG = (*rhoNode)(x1 + 1, x2, x3 - 1); // // real ftemp = D3Q27System::getCompFeqForDirection(TW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BE, rhoG, vx, vy, vz); // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1+1, x2, x3p-1); // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BE, x1 + 1, x2, x3p - 1) = ftemp - mfcba; // // (*this->localDistributionsF)(D3Q27System::ET_TW, x1p, x2, x3) = fBB - c6o1 * c1o54 * (-vx + vz); // //} - // //if ((phi[DIR_M0M] <= c1o2)) { + // //if ((phi[dM0M] <= c1o2)) { // // real rhoG = (*rhoNode)(x1 - 1, x2, x3 - 1); // // real ftemp = D3Q27System::getCompFeqForDirection(TE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BW, rhoG, vx, vy, vz); // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p-1, x2, x3p-1); // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BW, x1p - 1, x2, x3p - 1) = ftemp - mfaba; // // (*this->localDistributionsF)(D3Q27System::ET_TE, x1, x2, x3) = fBB - c6o1 * c1o54 * ( vx + vz); // //} - // //if ((phi[DIR_0PP] <= c1o2)) { + // //if ((phi[d0PP] <= c1o2)) { // // real rhoG = (*rhoNode)(x1, x2+1, x3 + 1); // // real ftemp = D3Q27System::getCompFeqForDirection(BS, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TN, rhoG, vx, vy, vz); // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2+1, x3+1); // // (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2 + 1, x3 + 1) = ftemp - mfbcc; // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p, x3p) = fBB - c6o1 * c1o54 * (-vy - vz); // //} - // //if ((phi[DIR_0MP] <= c1o2)) { + // //if ((phi[d0MP] <= c1o2)) { // // real rhoG = (*rhoNode)(x1, x2 - 1, x3 + 1); // // real ftemp = D3Q27System::getCompFeqForDirection(BN, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TS, rhoG, vx, vy, vz); // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p-1, x3+1); // // (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p - 1, x3 + 1) = ftemp - mfbac; // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2, x3p) = fBB - c6o1 * c1o54 * ( vy - vz); // //} - // //if ((phi[DIR_0PM] <= c1o2)) { + // //if ((phi[d0PM] <= c1o2)) { // // real rhoG = (*rhoNode)(x1, x2 + 1, x3 - 1); // // real ftemp = D3Q27System::getCompFeqForDirection(TS, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BN, rhoG, vx, vy, vz); // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2+1, x3p-1); // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BN, x1, x2 + 1, x3p - 1) = ftemp - mfbca; // // (*this->localDistributionsF)(D3Q27System::ET_TS, x1, x2p, x3) = fBB - c6o1 * c1o54 * (-vy + vz); // //} - // //if ((phi[DIR_0MM] <= c1o2)) { + // //if ((phi[d0MM] <= c1o2)) { // // real rhoG = (*rhoNode)(x1, x2 - 1, x3 - 1); // // real ftemp = D3Q27System::getCompFeqForDirection(TN, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BS, rhoG, vx, vy, vz); // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BS, x1, x2p-1, x3p-1); @@ -5664,56 +5664,56 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) // // (*this->localDistributionsF)(D3Q27System::ET_TN, x1, x2, x3) = fBB - c6o1 * c1o54 * (-vy - vz); // //} - // //if ((phi[DIR_PPP] <= c1o2)) { + // //if ((phi[dPPP] <= c1o2)) { // // real rhoG = (*rhoNode)(x1+1, x2 + 1, x3 + 1); // // real ftemp = D3Q27System::getCompFeqForDirection(BSW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TNE, rhoG, vx, vy, vz); // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_TNE, x1+1, x2+1, x3+1); // // (*this->localDistributionsF)(D3Q27System::ET_TNE, x1 + 1, x2 + 1, x3 + 1) = ftemp - mfccc; // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p, x2p, x3p) = fBB - c6o1 * c1o216 * (-vx -vy - vz); // //} - // //if ((phi[DIR_MPP] <= c1o2)) { + // //if ((phi[dMPP] <= c1o2)) { // // real rhoG = (*rhoNode)(x1 - 1, x2 + 1, x3 + 1); // // real ftemp = D3Q27System::getCompFeqForDirection(BSE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TNW, rhoG, vx, vy, vz); // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p-1, x2+1, x3+1); // // (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p - 1, x2 + 1, x3 + 1) = ftemp - mfacc; // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1, x2p, x3p) = fBB - c6o1 * c1o216 * ( vx - vy - vz); // //} - // //if ((phi[DIR_MMP] <= c1o2)) { + // //if ((phi[dMMP] <= c1o2)) { // // real rhoG = (*rhoNode)(x1 - 1, x2 - 1, x3 + 1); // // real ftemp = D3Q27System::getCompFeqForDirection(BNE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TSW, rhoG, vx, vy, vz); // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p-1, x2p-1, x3+1); // // (*this->localDistributionsF)(D3Q27System::ET_TSW, x1p - 1, x2p - 1, x3 + 1) = ftemp - mfaac; // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1, x2, x3p) = fBB - c6o1 * c1o216 * (vx + vy - vz); // //} - // //if ((phi[DIR_PMP] <= c1o2)) { + // //if ((phi[dPMP] <= c1o2)) { // // real rhoG = (*rhoNode)(x1 + 1, x2 - 1, x3 + 1); // // real ftemp = D3Q27System::getCompFeqForDirection(BNW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(TSE, rhoG, vx, vy, vz); // // real fBB = (*this->localDistributionsF)(D3Q27System::ET_TSE, x1+1, x2p-1, x3+1); // // (*this->localDistributionsF)(D3Q27System::ET_TSE, x1 + 1, x2p - 1, x3 + 1) = ftemp - mfcac; // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p, x2, x3p) = fBB - c6o1 * c1o216 * (-vx + vy - vz); // //} - // //if ((phi[DIR_PMM] <= c1o2)) { + // //if ((phi[dPMM] <= c1o2)) { // // real rhoG = (*rhoNode)(x1 + 1, x2 - 1, x3 - 1); // // real ftemp = D3Q27System::getCompFeqForDirection(TNW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BSE, rhoG, vx, vy, vz); // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1+1, x2p-1, x3p-1); // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BSE, x1+1, x2p-1, x3p-1) = ftemp - mfcaa; // // (*this->localDistributionsF)(D3Q27System::ET_TNW, x1p, x2, x3) = fBB - c6o1 * c1o216 * (-vx + vy + vz); // //} - // //if ((phi[DIR_MMM] <= c1o2)) { + // //if ((phi[dMMM] <= c1o2)) { // // real rhoG = (*rhoNode)(x1 - 1, x2 - 1, x3 - 1); // // real ftemp = D3Q27System::getCompFeqForDirection(TNE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BSW, rhoG, vx, vy, vz); // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p-1, x2p-1, x3p-1); // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BSW, x1p - 1, x2p - 1, x3p - 1) = ftemp - mfaaa; // // (*this->localDistributionsF)(D3Q27System::ET_TNE, x1, x2, x3) = fBB - c6o1 * c1o216 * ( vx + vy + vz); // //} - // //if ((phi[DIR_MPM] <= c1o2)) { + // //if ((phi[dMPM] <= c1o2)) { // // real rhoG = (*rhoNode)(x1 - 1, x2 + 1, x3 - 1); // // real ftemp = D3Q27System::getCompFeqForDirection(TSE, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BNW, rhoG, vx, vy, vz); // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p-1, x2+1, x3p-1); // // (*this->nonLocalDistributionsF)(D3Q27System::ET_BNW, x1p - 1, x2 + 1, x3p - 1) = ftemp - mfaca; // // (*this->localDistributionsF)(D3Q27System::ET_TSE, x1, x2p, x3) = fBB - c6o1 * c1o216 * (vx - vy + vz); // //} - // //if ((phi[DIR_PPM] <= c1o2)) { + // //if ((phi[dPPM] <= c1o2)) { // // real rhoG = (*rhoNode)(x1 + 1, x2 + 1, x3 - 1); // // real ftemp = D3Q27System::getCompFeqForDirection(TSW, rhoG, vx, vy, vz)+ D3Q27System::getCompFeqForDirection(BNE, rhoG, vx, vy, vz); // // real fBB = (*this->nonLocalDistributionsF)(D3Q27System::ET_BNE, x1+1, x2+1, x3p-1); @@ -5791,90 +5791,90 @@ void MultiphaseScaleDistributionLBMKernel::calculate(int step) real MultiphaseScaleDistributionLBMKernel::gradX1_phi() { using namespace D3Q27System; - return 3.0* ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00])); + return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + + +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); } real MultiphaseScaleDistributionLBMKernel::gradX2_phi() { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP])- (phi[DIR_PMP] - phi[DIR_MPM]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0])- (phi[DIR_PM0] - phi[DIR_MP0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM]))) + + WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) + + +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); } real MultiphaseScaleDistributionLBMKernel::gradX3_phi() { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + + +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); } real MultiphaseScaleDistributionLBMKernel::gradX1_rhoInv(real rhoL,real rhoDIV) { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0/(rhoL+rhoDIV*phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP])))) - + WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_P0P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0M])) + (1.0 / (rhoL + rhoDIV * phi[DIR_P0M]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0P]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PM0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MP0])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PP0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MM0]))))) + - +WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_P00]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M00]))); + return 3.0 * ((WEIGTH[dPPP] * (((1.0/(rhoL+rhoDIV*phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) + (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) + (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) + + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) + (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0])) + (1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0]))))) + + +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[dP00]) - 1.0 / (rhoL + rhoDIV * phi[dM00]))); } real MultiphaseScaleDistributionLBMKernel::gradX2_rhoInv(real rhoL,real rhoDIV) { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])))) - + WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_0PP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_0PM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PP0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MM0])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PM0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MP0]))))) + - +WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_0P0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0M0]))); + return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])) - (1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])))) + + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM])) + (1.0 / (rhoL + rhoDIV * phi[d0PM]) - 1.0 / (rhoL + rhoDIV * phi[d0MP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0])) - (1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0]))))) + + +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d0P0]) - 1.0 / (rhoL + rhoDIV * phi[d0M0]))); } real MultiphaseScaleDistributionLBMKernel::gradX3_rhoInv(real rhoL, real rhoDIV) { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP])))) - + WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_P0P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0M])) - (1.0 / (rhoL + rhoDIV * phi[DIR_P0M]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0P]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_0MP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0PM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_0PP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MM]))))) + - +WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_00P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_00M]))); + return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) - (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) + + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) - (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[d0MP]) - 1.0 / (rhoL + rhoDIV * phi[d0PM])) + (1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM]))))) + + +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d00P]) - 1.0 / (rhoL + rhoDIV * phi[d00M]))); } real MultiphaseScaleDistributionLBMKernel::gradX1_phi2() { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) + (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) + (phi2[DIR_PPM] - phi2[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) + (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_PM0] - phi2[DIR_MP0]) + (phi2[DIR_PP0] - phi2[DIR_MM0])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_P00] - phi2[DIR_M00])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP]))) + + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) + + +WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00])); } real MultiphaseScaleDistributionLBMKernel::gradX2_phi2() { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PPM] - phi2[DIR_MMP]) - (phi2[DIR_PMP] - phi2[DIR_MPM]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_0PP] - phi2[DIR_0MM]) + (phi2[DIR_0PM] - phi2[DIR_0MP])) + ((phi2[DIR_PP0] - phi2[DIR_MM0]) - (phi2[DIR_PM0] - phi2[DIR_MP0])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_0P0] - phi2[DIR_0M0])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM]))) + + WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) + + +WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0])); } real MultiphaseScaleDistributionLBMKernel::gradX3_phi2() { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) + + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + + +WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); } real MultiphaseScaleDistributionLBMKernel::nabla2_phi() { using namespace D3Q27System; real sum = 0.0; - sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000]))) - + (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000])))); - sum += WEIGTH[DIR_0PP] * ( - (((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000]))) - + (((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000]))) - + (((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000]))) + sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) + + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); + sum += WEIGTH[d0PP] * ( + (((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) + + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) + + (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))) ); - sum += WEIGTH[DIR_00P] * ( - ((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000])) - + ((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000])) - + ((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000])) + sum += WEIGTH[d00P] * ( + ((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) + + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) + + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])) ); return 6.0 * sum; @@ -5889,29 +5889,29 @@ real MultiphaseScaleDistributionLBMKernel::computeCurvature_phi() real phiY = gradX2_phi(); real phiZ = gradX3_phi(); real phiXX = - c4o9 * (phi[DIR_P00] - c2o1 * phi[DIR_000] + phi[DIR_M00]) + (c1o9 * (((phi[DIR_PP0] - c2o1 * phi[DIR_0P0] + phi[DIR_MP0]) + (phi[DIR_PM0] - c2o1 * phi[DIR_0M0] + phi[DIR_MM0])) + ((phi[DIR_P0P] - c2o1 * phi[DIR_00P] + phi[DIR_M0P]) + (phi[DIR_P0M] - c2o1 * phi[DIR_00M] + phi[DIR_M0M]))) + - c1o36 * (((phi[DIR_PPP] - c2o1 * phi[DIR_0PP] + phi[DIR_MPP]) + (phi[DIR_PMP] - c2o1 * phi[DIR_0MP] + phi[DIR_MMP])) + ((phi[DIR_PPM] - c2o1 * phi[DIR_0PM] + phi[DIR_MPM]) + (phi[DIR_PMM] - c2o1 * phi[DIR_0MM] + phi[DIR_MMM])))); + c4o9 * (phi[dP00] - c2o1 * phi[d000] + phi[dM00]) + (c1o9 * (((phi[dPP0] - c2o1 * phi[d0P0] + phi[dMP0]) + (phi[dPM0] - c2o1 * phi[d0M0] + phi[dMM0])) + ((phi[dP0P] - c2o1 * phi[d00P] + phi[dM0P]) + (phi[dP0M] - c2o1 * phi[d00M] + phi[dM0M]))) + + c1o36 * (((phi[dPPP] - c2o1 * phi[d0PP] + phi[dMPP]) + (phi[dPMP] - c2o1 * phi[d0MP] + phi[dMMP])) + ((phi[dPPM] - c2o1 * phi[d0PM] + phi[dMPM]) + (phi[dPMM] - c2o1 * phi[d0MM] + phi[dMMM])))); real phiYY = - c4o9 * (phi[DIR_0P0] - c2o1 * phi[DIR_000] + phi[DIR_0M0]) + (c1o9 * (((phi[DIR_PP0] - c2o1 * phi[DIR_P00] + phi[DIR_PM0]) + (phi[DIR_MP0] - c2o1 * phi[DIR_M00] + phi[DIR_MM0])) + ((phi[DIR_0PP] - c2o1 * phi[DIR_00P] + phi[DIR_0MP]) + (phi[DIR_0PM] - c2o1 * phi[DIR_00M] + phi[DIR_0MM]))) + - c1o36 * (((phi[DIR_PPP] - c2o1 * phi[DIR_P0P] + phi[DIR_PMP]) + (phi[DIR_MPM] - c2o1 * phi[DIR_M0M] + phi[DIR_MMM])) + ((phi[DIR_MPP] - c2o1 * phi[DIR_M0P] + phi[DIR_MMP]) + (phi[DIR_PPM] - c2o1 * phi[DIR_P0M] + phi[DIR_PMM])))); + c4o9 * (phi[d0P0] - c2o1 * phi[d000] + phi[d0M0]) + (c1o9 * (((phi[dPP0] - c2o1 * phi[dP00] + phi[dPM0]) + (phi[dMP0] - c2o1 * phi[dM00] + phi[dMM0])) + ((phi[d0PP] - c2o1 * phi[d00P] + phi[d0MP]) + (phi[d0PM] - c2o1 * phi[d00M] + phi[d0MM]))) + + c1o36 * (((phi[dPPP] - c2o1 * phi[dP0P] + phi[dPMP]) + (phi[dMPM] - c2o1 * phi[dM0M] + phi[dMMM])) + ((phi[dMPP] - c2o1 * phi[dM0P] + phi[dMMP]) + (phi[dPPM] - c2o1 * phi[dP0M] + phi[dPMM])))); real phiZZ = - c4o9 * (phi[DIR_00P] - c2o1 * phi[DIR_000] + phi[DIR_00M]) + (c1o9 * (((phi[DIR_M0P] - c2o1 * phi[DIR_M00] + phi[DIR_M0M]) + (phi[DIR_P0P] - c2o1 * phi[DIR_P00] + phi[DIR_P0M])) + ((phi[DIR_0MP] - c2o1 * phi[DIR_0M0] + phi[DIR_0MM]) + (phi[DIR_0PP] - c2o1 * phi[DIR_0P0] + phi[DIR_0PM]))) + - c1o36 * (((phi[DIR_MPP] - c2o1 * phi[DIR_MP0] + phi[DIR_MPM]) + (phi[DIR_PMP] - c2o1 * phi[DIR_PM0] + phi[DIR_PMM])) + ((phi[DIR_MMP] - c2o1 * phi[DIR_MM0] + phi[DIR_MMM]) + (phi[DIR_PPP] - c2o1 * phi[DIR_PP0] + phi[DIR_PPM])))); - real phiXY = c1o4 * (c2o3 * (phi[DIR_MM0] - phi[DIR_PM0] + phi[DIR_PP0] - phi[DIR_MP0]) + c1o6 * ((phi[DIR_MMP] - phi[DIR_PMP] + phi[DIR_PPP] - phi[DIR_MPP]) + (phi[DIR_MMM] - phi[DIR_PMM] + phi[DIR_PPM] - phi[DIR_MPM]))); - real phiXZ = c1o4 * (c2o3 * (phi[DIR_M0M] - phi[DIR_P0M] + phi[DIR_P0P] - phi[DIR_M0P]) + c1o6 * ((phi[DIR_MPM] - phi[DIR_PPM] + phi[DIR_PPP] - phi[DIR_MPP]) + (phi[DIR_MMM] - phi[DIR_PMM] + phi[DIR_PMP] - phi[DIR_MMP]))); - real phiYZ = c1o4 * (c2o3 * (phi[DIR_0MM] - phi[DIR_0MP] + phi[DIR_0PP] - phi[DIR_0PM]) + c1o6 * ((phi[DIR_MMM] - phi[DIR_MMP] + phi[DIR_MPP] - phi[DIR_MPM]) + (phi[DIR_PMM] - phi[DIR_PMP] + phi[DIR_PPP] - phi[DIR_PPM]))); + c4o9 * (phi[d00P] - c2o1 * phi[d000] + phi[d00M]) + (c1o9 * (((phi[dM0P] - c2o1 * phi[dM00] + phi[dM0M]) + (phi[dP0P] - c2o1 * phi[dP00] + phi[dP0M])) + ((phi[d0MP] - c2o1 * phi[d0M0] + phi[d0MM]) + (phi[d0PP] - c2o1 * phi[d0P0] + phi[d0PM]))) + + c1o36 * (((phi[dMPP] - c2o1 * phi[dMP0] + phi[dMPM]) + (phi[dPMP] - c2o1 * phi[dPM0] + phi[dPMM])) + ((phi[dMMP] - c2o1 * phi[dMM0] + phi[dMMM]) + (phi[dPPP] - c2o1 * phi[dPP0] + phi[dPPM])))); + real phiXY = c1o4 * (c2o3 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]) + c1o6 * ((phi[dMMP] - phi[dPMP] + phi[dPPP] - phi[dMPP]) + (phi[dMMM] - phi[dPMM] + phi[dPPM] - phi[dMPM]))); + real phiXZ = c1o4 * (c2o3 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]) + c1o6 * ((phi[dMPM] - phi[dPPM] + phi[dPPP] - phi[dMPP]) + (phi[dMMM] - phi[dPMM] + phi[dPMP] - phi[dMMP]))); + real phiYZ = c1o4 * (c2o3 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]) + c1o6 * ((phi[dMMM] - phi[dMMP] + phi[dMPP] - phi[dMPM]) + (phi[dPMM] - phi[dPMP] + phi[dPPP] - phi[dPPM]))); // non isotropic FD (to be improved): - // real phiX = (phi[DIR_P00] - phi[DIR_M00]) * c1o2; //gradX1_phi(); - // real phiY = (phi[DIR_0P0] - phi[DIR_0M0]) * c1o2; //gradX2_phi(); - // real phiZ = (phi[DIR_00P] - phi[DIR_00M]) * c1o2; //gradX3_phi(); - - // real phiXX = phi[DIR_P00] - c2o1 * phi[DIR_000] + phi[DIR_M00]; - // real phiYY = phi[DIR_0P0] - c2o1 * phi[DIR_000] + phi[DIR_0M0]; - // real phiZZ =( phi[DIR_00P] - c2o1 * phi[DIR_000] + phi[DIR_00M]); - // real phiXY = c1o4 * (phi[DIR_MM0] - phi[DIR_PM0] + phi[DIR_PP0] - phi[DIR_MP0]); - // real phiXZ = c1o4 * (phi[DIR_M0M] - phi[DIR_P0M] + phi[DIR_P0P] - phi[DIR_M0P]); - // real phiYZ = c1o4 * (phi[DIR_0MM] - phi[DIR_0MP] + phi[DIR_0PP] - phi[DIR_0PM]); + // real phiX = (phi[dP00] - phi[dM00]) * c1o2; //gradX1_phi(); + // real phiY = (phi[d0P0] - phi[d0M0]) * c1o2; //gradX2_phi(); + // real phiZ = (phi[d00P] - phi[d00M]) * c1o2; //gradX3_phi(); + + // real phiXX = phi[dP00] - c2o1 * phi[d000] + phi[dM00]; + // real phiYY = phi[d0P0] - c2o1 * phi[d000] + phi[d0M0]; + // real phiZZ =( phi[d00P] - c2o1 * phi[d000] + phi[d00M]); + // real phiXY = c1o4 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]); + // real phiXZ = c1o4 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]); + // real phiYZ = c1o4 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]); // real back= (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2)); return (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2)+1e-200); @@ -5938,35 +5938,35 @@ void MultiphaseScaleDistributionLBMKernel::computePhasefield() int x2p = x2 + 1; int x3p = x3 + 1; - h[DIR_P00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - h[DIR_0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - h[DIR_00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - h[DIR_PP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - h[DIR_MP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - h[DIR_P0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - h[DIR_M0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - h[DIR_0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - h[DIR_0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - h[DIR_PPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - h[DIR_MPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - h[DIR_PMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - h[DIR_MMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[DIR_M00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - h[DIR_0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - h[DIR_00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - h[DIR_MM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - h[DIR_PM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - h[DIR_M0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - h[DIR_P0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - h[DIR_0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - h[DIR_0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - h[DIR_MMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[DIR_PMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[DIR_MPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[DIR_PPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[DIR_000] = (*this->zeroDistributionsH1)(x1, x2, x3); + h[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); + h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); + h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); + h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); + h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); + h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); + h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); + h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); + h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); + h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); + h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); + h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); + h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); + + h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); + h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); + h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); + h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); + h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); + h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); + h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); + h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); + h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); + h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); + h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); + h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); + h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); + + h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3); } } } @@ -5980,7 +5980,7 @@ void MultiphaseScaleDistributionLBMKernel::findNeighbors(CbArray3D<real, Indexer SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - phi[DIR_000] = (*ph)(x1, x2, x3); + phi[d000] = (*ph)(x1, x2, x3); for (int k = FSTARTDIR; k <= FENDDIR; k++) { @@ -6015,7 +6015,7 @@ void MultiphaseScaleDistributionLBMKernel::findNeighbors2(CbArray3D<real, Indexe SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - phi2[DIR_000] = (*ph)(x1, x2, x3); + phi2[d000] = (*ph)(x1, x2, x3); for (int k = FSTARTDIR; k <= FENDDIR; k++) { diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.h b/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.h index f38e0308cc04400304e9ab7385bafb06ca2afade..640c297970146ecc1fab26dac11cdd73919310c5 100644 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.h +++ b/src/cpu/MultiphaseFlow/LBM/MultiphaseScaleDistributionLBMKernel.h @@ -139,34 +139,34 @@ protected: inline bool MultiphaseScaleDistributionLBMKernel::isGas(real phiLim, real* phi, real* phi2) { using namespace vf::lbm::dir; - return (phi2[DIR_000] <= phiLim) || ((phi[DIR_000] <= phiLim) && + return (phi2[d000] <= phiLim) || ((phi[d000] <= phiLim) && ( - (phi[DIR_P00] > phiLim) || - (phi[DIR_M00] > phiLim) || - (phi[DIR_00P] > phiLim) || - (phi[DIR_00M] > phiLim) || - (phi[DIR_0M0] > phiLim) || - (phi[DIR_0P0] > phiLim) || - (phi[DIR_PP0] > phiLim) || - (phi[DIR_PM0] > phiLim) || - (phi[DIR_P0P] > phiLim) || - (phi[DIR_P0M] > phiLim) || - (phi[DIR_MP0] > phiLim) || - (phi[DIR_MM0] > phiLim) || - (phi[DIR_M0P] > phiLim) || - (phi[DIR_M0M] > phiLim) || - (phi[DIR_0PM] > phiLim) || - (phi[DIR_0MM] > phiLim) || - (phi[DIR_0PP] > phiLim) || - (phi[DIR_0MP] > phiLim) || - (phi[DIR_PPP] > phiLim) || - (phi[DIR_PMP] > phiLim) || - (phi[DIR_MPP] > phiLim) || - (phi[DIR_MMP] > phiLim) || - (phi[DIR_PPM] > phiLim) || - (phi[DIR_PMM] > phiLim) || - (phi[DIR_MPM] > phiLim) || - (phi[DIR_MMM] > phiLim) + (phi[dP00] > phiLim) || + (phi[dM00] > phiLim) || + (phi[d00P] > phiLim) || + (phi[d00M] > phiLim) || + (phi[d0M0] > phiLim) || + (phi[d0P0] > phiLim) || + (phi[dPP0] > phiLim) || + (phi[dPM0] > phiLim) || + (phi[dP0P] > phiLim) || + (phi[dP0M] > phiLim) || + (phi[dMP0] > phiLim) || + (phi[dMM0] > phiLim) || + (phi[dM0P] > phiLim) || + (phi[dM0M] > phiLim) || + (phi[d0PM] > phiLim) || + (phi[d0MM] > phiLim) || + (phi[d0PP] > phiLim) || + (phi[d0MP] > phiLim) || + (phi[dPPP] > phiLim) || + (phi[dPMP] > phiLim) || + (phi[dMPP] > phiLim) || + (phi[dMMP] > phiLim) || + (phi[dPPM] > phiLim) || + (phi[dPMM] > phiLim) || + (phi[dMPM] > phiLim) || + (phi[dMMM] > phiLim) )); } diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.cpp index 85d6dcadcd3f8ebf661d7f32f18dcbc54c4eb5c4..1f1bb536a19251ac1cabb2696035e6645cede09c 100644 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.cpp +++ b/src/cpu/MultiphaseFlow/LBM/MultiphaseScratchCumulantLBMKernel.cpp @@ -441,13 +441,13 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) ///!test - collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[DIR_000] - phiH) / (phiH - phiL); + collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL); //collFactorM = phi[REST] - phiL < (phiH - phiL) * 0.05 ? collFactorG : collFactorL; - real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi(); + real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); //----------- Calculating Macroscopic Values ------------- - real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH); + real rho = rhoH + rhoToPhi * (phi[d000] - phiH); if (withForcing) { // muX1 = static_cast<double>(x1-1+ix1*maxX1); @@ -598,9 +598,9 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) // vvxF = vvxF; //} real weightGrad = 1.0-denom*denom/(denom*denom+0.0001*0.001); - real dX1_phiF = dX1_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * normX1; - real dX2_phiF = dX2_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * normX2; - real dX3_phiF = dX3_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * normX3; + real dX1_phiF = dX1_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX1; + real dX2_phiF = dX2_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX2; + real dX3_phiF = dX3_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX3; //dX1_phiF *= 1.2; //dX2_phiF *= 1.2; @@ -656,15 +656,15 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) } - real gamma = WEIGTH[DIR_000] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); - real fac1 = (gamma - WEIGTH[DIR_000]) * c1o3 * rhoToPhi; - forcingTerm[DIR_000] = (-vvxF) * (fac1 * dX1_phiF ) + + real gamma = WEIGTH[d000] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); + real fac1 = (gamma - WEIGTH[d000]) * c1o3 * rhoToPhi; + forcingTerm[d000] = (-vvxF) * (fac1 * dX1_phiF ) + (-vvyF) * (fac1 * dX2_phiF ) + (-vvzF) * (fac1 * dX3_phiF ); //////// // LBMReal divAfterSource= - //( mfcbb + 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF) *(vvzF)-1)+ + //( mfcbb + 3.0 * (0.5 * forcingTerm[dP00]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF) *(vvzF)-1)+ //( mfbcb + 3.0 * (0.5 * forcingTerm[N]) / rho ) *((vvxF) *(vvxF) +(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ //( mfbbc + 3.0 * (0.5 * forcingTerm[T]) / rho ) *((vvxF) *(vvxF) +(vvyF) *(vvyF) +(vvzF-1)*(vvzF-1)-1)+ //( mfccb + 3.0 * (0.5 * forcingTerm[NE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ @@ -727,7 +727,7 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) //if (fabs(divAfterSource - divBeforeSource)/(fabs(divAfterSource) + fabs(divBeforeSource)+1e-10) > 1e-5) { // LBMReal scaleDiv =0.95+(1-0.95)* (divBeforeSource) / (divBeforeSource - divAfterSource); - // forcingTerm[DIR_P00] *=scaleDiv; + // forcingTerm[dP00] *=scaleDiv; // forcingTerm[N] *=scaleDiv; // forcingTerm[T] *=scaleDiv; // forcingTerm[NE] *=scaleDiv; @@ -758,33 +758,33 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) //////// - mfcbb +=3.0 * ( 0.5 * forcingTerm[DIR_P00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; - mfbcb +=3.0 * ( 0.5 * forcingTerm[DIR_0P0]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; - mfbbc +=3.0 * ( 0.5 * forcingTerm[DIR_00P]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; - mfccb +=3.0 * ( 0.5 * forcingTerm[DIR_PP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; - mfacb +=3.0 * ( 0.5 * forcingTerm[DIR_MP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; - mfcbc +=3.0 * ( 0.5 * forcingTerm[DIR_P0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; - mfabc +=3.0 * ( 0.5 * forcingTerm[DIR_M0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; - mfbcc +=3.0 * ( 0.5 * forcingTerm[DIR_0PP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; - mfbac +=3.0 * ( 0.5 * forcingTerm[DIR_0MP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; - mfccc +=3.0 * ( 0.5 * forcingTerm[DIR_PPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; - mfacc +=3.0 * ( 0.5 * forcingTerm[DIR_MPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; - mfcac +=3.0 * ( 0.5 * forcingTerm[DIR_PMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; - mfaac +=3.0 * ( 0.5 * forcingTerm[DIR_MMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; - mfabb +=3.0 * ( 0.5 * forcingTerm[DIR_M00]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; - mfbab +=3.0 * ( 0.5 * forcingTerm[DIR_0M0]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; - mfbba +=3.0 * ( 0.5 * forcingTerm[DIR_00M]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; - mfaab +=3.0 * ( 0.5 * forcingTerm[DIR_MM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; - mfcab +=3.0 * ( 0.5 * forcingTerm[DIR_PM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; - mfaba +=3.0 * ( 0.5 * forcingTerm[DIR_M0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; - mfcba +=3.0 * ( 0.5 * forcingTerm[DIR_P0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; - mfbaa +=3.0 * ( 0.5 * forcingTerm[DIR_0MM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; - mfbca +=3.0 * ( 0.5 * forcingTerm[DIR_0PM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; - mfaaa +=3.0 * ( 0.5 * forcingTerm[DIR_MMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; - mfcaa +=3.0 * ( 0.5 * forcingTerm[DIR_PMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; - mfaca +=3.0 * ( 0.5 * forcingTerm[DIR_MPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; - mfcca +=3.0 * ( 0.5 * forcingTerm[DIR_PPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; - mfbbb +=3.0 * ( 0.5 * forcingTerm[DIR_000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST] + mfcbb +=3.0 * ( 0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; + mfbcb +=3.0 * ( 0.5 * forcingTerm[d0P0]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; + mfbbc +=3.0 * ( 0.5 * forcingTerm[d00P]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; + mfccb +=3.0 * ( 0.5 * forcingTerm[dPP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; + mfacb +=3.0 * ( 0.5 * forcingTerm[dMP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; + mfcbc +=3.0 * ( 0.5 * forcingTerm[dP0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; + mfabc +=3.0 * ( 0.5 * forcingTerm[dM0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; + mfbcc +=3.0 * ( 0.5 * forcingTerm[d0PP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; + mfbac +=3.0 * ( 0.5 * forcingTerm[d0MP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; + mfccc +=3.0 * ( 0.5 * forcingTerm[dPPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; + mfacc +=3.0 * ( 0.5 * forcingTerm[dMPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; + mfcac +=3.0 * ( 0.5 * forcingTerm[dPMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; + mfaac +=3.0 * ( 0.5 * forcingTerm[dMMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; + mfabb +=3.0 * ( 0.5 * forcingTerm[dM00]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; + mfbab +=3.0 * ( 0.5 * forcingTerm[d0M0]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; + mfbba +=3.0 * ( 0.5 * forcingTerm[d00M]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; + mfaab +=3.0 * ( 0.5 * forcingTerm[dMM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; + mfcab +=3.0 * ( 0.5 * forcingTerm[dPM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; + mfaba +=3.0 * ( 0.5 * forcingTerm[dM0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; + mfcba +=3.0 * ( 0.5 * forcingTerm[dP0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; + mfbaa +=3.0 * ( 0.5 * forcingTerm[d0MM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; + mfbca +=3.0 * ( 0.5 * forcingTerm[d0PM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; + mfaaa +=3.0 * ( 0.5 * forcingTerm[dMMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; + mfcaa +=3.0 * ( 0.5 * forcingTerm[dPMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; + mfaca +=3.0 * ( 0.5 * forcingTerm[dMPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; + mfcca +=3.0 * ( 0.5 * forcingTerm[dPPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; + mfbbb +=3.0 * ( 0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST] //-------------------------------------------------------- @@ -1096,7 +1096,7 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::DIR_00M' ) + //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' ) real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); @@ -1172,7 +1172,7 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) ////relax unfiltered //! divergenceFilter 10.05.2021 - real divMag= (1.0 - phi[DIR_000]) * (phi[DIR_000])*10*5*sqrt(fabs((OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz)))); + real divMag= (1.0 - phi[d000]) * (phi[d000])*10*5*sqrt(fabs((OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz)))); // LBMReal divMag = 500 *500* 50*(fabs((OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz))))* (fabs((OxxPyyPzz * (/*mfaaa*/ -mxxPyyPzz) - 3. * (1. - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz)))); //LBMReal divMag = (dX1_phi * dxux) > 0 ? (dX1_phi * dxux) : 0; //divMag += (dX2_phi * dyuy) > 0 ? (dX2_phi * dyuy) : 0; @@ -1629,33 +1629,33 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) /////classical source term 8.4.2021 - mfcbb += 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; - mfbcb += 3.0 * (0.5 * forcingTerm[DIR_0P0]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; - mfbbc += 3.0 * (0.5 * forcingTerm[DIR_00P]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; - mfccb += 3.0 * (0.5 * forcingTerm[DIR_PP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; - mfacb += 3.0 * (0.5 * forcingTerm[DIR_MP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; - mfcbc += 3.0 * (0.5 * forcingTerm[DIR_P0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; - mfabc += 3.0 * (0.5 * forcingTerm[DIR_M0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; - mfbcc += 3.0 * (0.5 * forcingTerm[DIR_0PP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; - mfbac += 3.0 * (0.5 * forcingTerm[DIR_0MP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; - mfccc += 3.0 * (0.5 * forcingTerm[DIR_PPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; - mfacc += 3.0 * (0.5 * forcingTerm[DIR_MPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; - mfcac += 3.0 * (0.5 * forcingTerm[DIR_PMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; - mfaac += 3.0 * (0.5 * forcingTerm[DIR_MMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; - mfabb += 3.0 * (0.5 * forcingTerm[DIR_M00]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; - mfbab += 3.0 * (0.5 * forcingTerm[DIR_0M0]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; - mfbba += 3.0 * (0.5 * forcingTerm[DIR_00M]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; - mfaab += 3.0 * (0.5 * forcingTerm[DIR_MM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; - mfcab += 3.0 * (0.5 * forcingTerm[DIR_PM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; - mfaba += 3.0 * (0.5 * forcingTerm[DIR_M0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; - mfcba += 3.0 * (0.5 * forcingTerm[DIR_P0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; - mfbaa += 3.0 * (0.5 * forcingTerm[DIR_0MM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; - mfbca += 3.0 * (0.5 * forcingTerm[DIR_0PM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; - mfaaa += 3.0 * (0.5 * forcingTerm[DIR_MMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; - mfcaa += 3.0 * (0.5 * forcingTerm[DIR_PMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; - mfaca += 3.0 * (0.5 * forcingTerm[DIR_MPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; - mfcca += 3.0 * (0.5 * forcingTerm[DIR_PPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; - mfbbb += 3.0 * (0.5 * forcingTerm[DIR_000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST] + mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; + mfbcb += 3.0 * (0.5 * forcingTerm[d0P0]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; + mfbbc += 3.0 * (0.5 * forcingTerm[d00P]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; + mfccb += 3.0 * (0.5 * forcingTerm[dPP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; + mfacb += 3.0 * (0.5 * forcingTerm[dMP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; + mfcbc += 3.0 * (0.5 * forcingTerm[dP0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; + mfabc += 3.0 * (0.5 * forcingTerm[dM0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; + mfbcc += 3.0 * (0.5 * forcingTerm[d0PP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; + mfbac += 3.0 * (0.5 * forcingTerm[d0MP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; + mfccc += 3.0 * (0.5 * forcingTerm[dPPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; + mfacc += 3.0 * (0.5 * forcingTerm[dMPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; + mfcac += 3.0 * (0.5 * forcingTerm[dPMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; + mfaac += 3.0 * (0.5 * forcingTerm[dMMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; + mfabb += 3.0 * (0.5 * forcingTerm[dM00]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; + mfbab += 3.0 * (0.5 * forcingTerm[d0M0]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; + mfbba += 3.0 * (0.5 * forcingTerm[d00M]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; + mfaab += 3.0 * (0.5 * forcingTerm[dMM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; + mfcab += 3.0 * (0.5 * forcingTerm[dPM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; + mfaba += 3.0 * (0.5 * forcingTerm[dM0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; + mfcba += 3.0 * (0.5 * forcingTerm[dP0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; + mfbaa += 3.0 * (0.5 * forcingTerm[d0MM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; + mfbca += 3.0 * (0.5 * forcingTerm[d0PM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; + mfaaa += 3.0 * (0.5 * forcingTerm[dMMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; + mfcaa += 3.0 * (0.5 * forcingTerm[dPMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; + mfaca += 3.0 * (0.5 * forcingTerm[dMPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; + mfcca += 3.0 * (0.5 * forcingTerm[dPPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; + mfbbb += 3.0 * (0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST] @@ -1750,7 +1750,7 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) // // //-------------------------------------------------------- // -// mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[DIR_P00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; +// mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; // mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[N]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; // mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[T]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; // mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[NE]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; @@ -2458,7 +2458,7 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) // } //#endif // -// mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[DIR_P00]; +// mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00]; // mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[N]; // mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[T]; // mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[NE]; @@ -2681,9 +2681,9 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) real Mccb = mfccb - mfaab * c1o9; // collision of 1st order moments - cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale; - cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale; - cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale; + cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; + cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; + cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx; //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy; @@ -2833,7 +2833,7 @@ void MultiphaseScratchCumulantLBMKernel::calculate(int step) /////////////////// PHASE-FIELD BGK SOLVER /////////////////////////////// //using namespace D3Q27System; - // h[DIR_P00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); + // h[dP00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); // h[N] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); // h[T] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); // h[NE] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); @@ -2933,9 +2933,9 @@ real MultiphaseScratchCumulantLBMKernel::gradX1_phi() using namespace vf::lbm::dir; using namespace D3Q27System; - return 3.0* ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00])); + return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + + +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX1[k] * phi[k]; @@ -2948,9 +2948,9 @@ real MultiphaseScratchCumulantLBMKernel::gradX2_phi() using namespace vf::lbm::dir; using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP])- (phi[DIR_PMP] - phi[DIR_MPM]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0])- (phi[DIR_PM0] - phi[DIR_MP0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM]))) + + WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) + + +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX2[k] * phi[k]; @@ -2963,9 +2963,9 @@ real MultiphaseScratchCumulantLBMKernel::gradX3_phi() using namespace vf::lbm::dir; using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + + +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX3[k] * phi[k]; @@ -2979,17 +2979,17 @@ real MultiphaseScratchCumulantLBMKernel::nabla2_phi() using namespace vf::lbm::dir; real sum = 0.0; - sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000]))) - + (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000])))); - sum += WEIGTH[DIR_0PP] * ( - (((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000]))) - + (((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000]))) - + (((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000]))) + sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) + + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); + sum += WEIGTH[d0PP] * ( + (((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) + + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) + + (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))) ); - sum += WEIGTH[DIR_00P] * ( - ((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000])) - + ((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000])) - + ((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000])) + sum += WEIGTH[d00P] * ( + ((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) + + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) + + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])) ); //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * (phi[k] - phi[REST]); @@ -3021,35 +3021,35 @@ void MultiphaseScratchCumulantLBMKernel::computePhasefield() int x2p = x2 + 1; int x3p = x3 + 1; - h[DIR_P00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); - h[DIR_0P0] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); - h[DIR_00P] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); - h[DIR_PP0] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); - h[DIR_MP0] = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); - h[DIR_P0P] = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); - h[DIR_M0P] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); - h[DIR_0PP] = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); - h[DIR_0MP] = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); - h[DIR_PPP] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); - h[DIR_MPP] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); - h[DIR_PMP] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); - h[DIR_MMP] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[DIR_M00] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); - h[DIR_0M0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); - h[DIR_00M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); - h[DIR_MM0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); - h[DIR_PM0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); - h[DIR_M0M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); - h[DIR_P0M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); - h[DIR_0MM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); - h[DIR_0PM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); - h[DIR_MMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[DIR_PMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[DIR_MPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[DIR_PPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[DIR_000] = (*this->zeroDistributionsH)(x1, x2, x3); + h[dP00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); + h[d0P0] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); + h[d00P] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); + h[dPP0] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); + h[dMP0] = (*this->localDistributionsH)(D3Q27System::ET_NW, x1p, x2, x3); + h[dP0P] = (*this->localDistributionsH)(D3Q27System::ET_TE, x1, x2, x3); + h[dM0P] = (*this->localDistributionsH)(D3Q27System::ET_TW, x1p, x2, x3); + h[d0PP] = (*this->localDistributionsH)(D3Q27System::ET_TN, x1, x2, x3); + h[d0MP] = (*this->localDistributionsH)(D3Q27System::ET_TS, x1, x2p, x3); + h[dPPP] = (*this->localDistributionsH)(D3Q27System::ET_TNE, x1, x2, x3); + h[dMPP] = (*this->localDistributionsH)(D3Q27System::ET_TNW, x1p, x2, x3); + h[dPMP] = (*this->localDistributionsH)(D3Q27System::ET_TSE, x1, x2p, x3); + h[dMMP] = (*this->localDistributionsH)(D3Q27System::ET_TSW, x1p, x2p, x3); + + h[dM00] = (*this->nonLocalDistributionsH)(D3Q27System::ET_W, x1p, x2, x3); + h[d0M0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_S, x1, x2p, x3); + h[d00M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_B, x1, x2, x3p); + h[dMM0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SW, x1p, x2p, x3); + h[dPM0] = (*this->nonLocalDistributionsH)(D3Q27System::ET_SE, x1, x2p, x3); + h[dM0M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BW, x1p, x2, x3p); + h[dP0M] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BE, x1, x2, x3p); + h[d0MM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BS, x1, x2p, x3p); + h[d0PM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BN, x1, x2, x3p); + h[dMMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSW, x1p, x2p, x3p); + h[dPMM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BSE, x1, x2p, x3p); + h[dMPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNW, x1p, x2, x3p); + h[dPPM] = (*this->nonLocalDistributionsH)(D3Q27System::ET_BNE, x1, x2, x3p); + + h[d000] = (*this->zeroDistributionsH)(x1, x2, x3); } } } @@ -3064,7 +3064,7 @@ void MultiphaseScratchCumulantLBMKernel::findNeighbors(CbArray3D<real, IndexerX3 SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - phi[DIR_000] = (*ph)(x1, x2, x3); + phi[d000] = (*ph)(x1, x2, x3); for (int k = FSTARTDIR; k <= FENDDIR; k++) { diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.cpp index 5d32955a948f9c997832cfd9757a1887d0c58466..d3f3ed1000fd4bc48ab11623294e2b7e7f27b62d 100644 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.cpp +++ b/src/cpu/MultiphaseFlow/LBM/MultiphaseSharpInterfaceLBMKernel.cpp @@ -258,7 +258,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) SPtr<DistributionArray3D> distributionH = this->getDataSet()->getHdistributions(); real hh[27]; - distributionH->getDistributionInv(hh, x1, x2, x3); + distributionH->getPostCollisionDistribution(hh, x1, x2, x3); real phiD, vxP, vyP, vzP; D3Q27System::calcIncompMacroscopicValues(hh, phiD, vxP, vyP, vzP); @@ -267,7 +267,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) SPtr<DistributionArray3D> distribution = this->getDataSet()->getFdistributions(); real ff[27]; - distribution->getDistributionInv(ff, x1, x2, x3); + distribution->getPostCollisionDistribution(ff, x1, x2, x3); real rhoG,vx,vy,vz; D3Q27System::calcIncompMacroscopicValues(ff, rhoG, vx, vy, vz); @@ -296,33 +296,33 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) ////////////////////////////////Momentum conservation experiment 06.03.2023 //surfacetension - if ((((*phaseField)(x1, x2, x3) <= c1o2) || phi[DIR_000]<=c1o2)&& ( - (phi[DIR_P00] > c1o2) || - (phi[DIR_M00] > c1o2) || - (phi[DIR_00P] > c1o2) || - (phi[DIR_00M] > c1o2) || - (phi[DIR_0M0] > c1o2) || - (phi[DIR_0P0] > c1o2) || - (phi[DIR_PP0] > c1o2) || - (phi[DIR_PM0] > c1o2) || - (phi[DIR_P0P] > c1o2) || - (phi[DIR_P0M] > c1o2) || - (phi[DIR_MP0] > c1o2) || - (phi[DIR_MM0] > c1o2) || - (phi[DIR_M0P] > c1o2) || - (phi[DIR_M0M] > c1o2) || - (phi[DIR_0PM] > c1o2) || - (phi[DIR_0MM] > c1o2) || - (phi[DIR_0PP] > c1o2) || - (phi[DIR_0MP] > c1o2) || - (phi[DIR_PPP] > c1o2) || - (phi[DIR_PMP] > c1o2) || - (phi[DIR_MPP] > c1o2) || - (phi[DIR_MMP] > c1o2) || - (phi[DIR_PPM] > c1o2) || - (phi[DIR_PMM] > c1o2) || - (phi[DIR_MPM] > c1o2) || - (phi[DIR_MMM] > c1o2) + if ((((*phaseField)(x1, x2, x3) <= c1o2) || phi[d000]<=c1o2)&& ( + (phi[dP00] > c1o2) || + (phi[dM00] > c1o2) || + (phi[d00P] > c1o2) || + (phi[d00M] > c1o2) || + (phi[d0M0] > c1o2) || + (phi[d0P0] > c1o2) || + (phi[dPP0] > c1o2) || + (phi[dPM0] > c1o2) || + (phi[dP0P] > c1o2) || + (phi[dP0M] > c1o2) || + (phi[dMP0] > c1o2) || + (phi[dMM0] > c1o2) || + (phi[dM0P] > c1o2) || + (phi[dM0M] > c1o2) || + (phi[d0PM] > c1o2) || + (phi[d0MM] > c1o2) || + (phi[d0PP] > c1o2) || + (phi[d0MP] > c1o2) || + (phi[dPPP] > c1o2) || + (phi[dPMP] > c1o2) || + (phi[dMPP] > c1o2) || + (phi[dMMP] > c1o2) || + (phi[dPPM] > c1o2) || + (phi[dPMM] > c1o2) || + (phi[dMPM] > c1o2) || + (phi[dMMM] > c1o2) )) { real vx = (*vxNode)(x1, x2, x3); real vy = (*vyNode)(x1, x2, x3); @@ -330,14 +330,14 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) findNeighbors(phaseField, x1, x2, x3); real laplacePressure = c12o1 * sigma * computeCurvature_phi(); // if (step > 5000) - // UBLOG(logINFO, x1 << ","<< x2 << ","<< x3 << " "<< "3*dP=" << laplacePressure << " dP=" << laplacePressure / 3.0<< " phi=" << phi[DIR_000]<< "\n"); + // UBLOG(logINFO, x1 << ","<< x2 << ","<< x3 << " "<< "3*dP=" << laplacePressure << " dP=" << laplacePressure / 3.0<< " phi=" << phi[d000]<< "\n"); findNeighbors(phaseFieldOld, x1, x2, x3); //16.03.23 c: BB gas side with updated boundary velocity - distribution->getDistributionInv(ff, x1, x2, x3); + distribution->getPostCollisionDistribution(ff, x1, x2, x3); real rhoG; - if (phi[DIR_000] > c1o2) { //initialization necessary + if (phi[d000] > c1o2) { //initialization necessary real sumRho = 0; real sumWeight = 1.e-100; for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { @@ -377,24 +377,24 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) //real fGEQNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, vx, vy, vz); //real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew;// fL -feqOLD + feqNew; //real fBC = fGG - c6o1 * WEIGTH[fdir] * (vBC); - distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); + distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); ///// other possibility is tor replace the node itself instead of the neighbor (only c1o1 of them is allowed!) //real fG = distribution->getDistributionInvForDirection(x1, x2, x3, fdir); //real feqOLD = D3Q27System::getIncompFeqForDirection(fdir, (*rhoNode)(x1 , x2 , x3 ), (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1 , x2 , x3 )); //real feqNew = D3Q27System::getIncompFeqForDirection(fdir, rhoG, (*vxNode)(x1 , x2 , x3 ), (*vyNode)(x1 , x2 , x3 ), (*vzNode)(x1, x2, x3 )); //real fBC = fG - feqOLD + feqNew; - //distribution->setDistributionForDirection(fBC, x1, x2, x3, fdir); + //distribution->setPostCollisionDistributionForDirection(fBC, x1, x2, x3, fdir); } } } - //distribution->setDistributionForDirection(D3Q27System::getIncompFeqForDirection(DIR_000, rhoG, vx, vy, vz), x1, x2, x3, DIR_000); + //distribution->setPostCollisionDistributionForDirection(D3Q27System::getIncompFeqForDirection(d000, rhoG, vx, vy, vz), x1, x2, x3, d000); { - real fL = distribution->getDistributionInvForDirection(x1, x2, x3, DIR_000); - real feqOLD = D3Q27System::getIncompFeqForDirection(DIR_000, (*rhoNode)(x1, x2, x3), vx,vy,vz); - real feqNew = D3Q27System::getIncompFeqForDirection(DIR_000, rhoG,vx,vy,vz); - distribution->setDistributionForDirection(fL-feqOLD+feqNew, x1, x2, x3, DIR_000); + real fL = distribution->getDistributionInvForDirection(x1, x2, x3, d000); + real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx,vy,vz); + real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoG,vx,vy,vz); + distribution->setPostCollisionDistributionForDirection(fL-feqOLD+feqNew, x1, x2, x3, d000); } } @@ -431,7 +431,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) //real fBC = (fL - feqOLD) * (c1o1 / collFactorG - c1o1) / (c1o1 / collFactorL - c1o1) + feqNew; //if ((*phaseField)(x1, x2, x3) <= c1o2) - distribution->setDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); + distribution->setPostCollisionDistributionForDirection(fBC, x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); if (((*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) > c1o2) { //real vxBC = c1o2 * (vx + (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); //real vyBC = c1o2 * (vy + (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); @@ -442,20 +442,20 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - //distribution->setDistributionForDirection((fBC + fG) / densityRatio*0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - //distribution->setDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL-2*fL+2*feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL-2*fL+2*feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); //real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC; //real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC; //real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir); //real number = 666; - //distribution->setDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC, x1, x2, x3, fdir); + //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC, x1, x2, x3, fdir); //// real eqBC= D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, vx, vy, vz); //// real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx, vy, vz); // real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); // real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); ////real flNew = (fBC + fG-eqBC-eqG) / densityRatio +eqBC+eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC; - // distribution->setDistributionForDirection(c2o1*laplacePressure * WEIGTH[fdir] +(fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG) - fL, x1, x2, x3, fdir);// -0* (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + // distribution->setPostCollisionDistributionForDirection(c2o1*laplacePressure * WEIGTH[fdir] +(fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG) - fL, x1, x2, x3, fdir);// -0* (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); // //if (vxBC != 0) { // // int set = 0; // //} @@ -479,7 +479,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) laplacePressureBC = laplacePressure; // curv; // reset to the above laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) + laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); //laplacePressureBC *= sigma; - distribution->setDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir); + distribution->setPostCollisionDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir); } @@ -528,16 +528,16 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); //real feqG = D3Q27System::getIncompFeqForDirection(fdir, 0, vx * (D3Q27System::DX1[fdir]) * (D3Q27System::DX1[fdir]), vy * (D3Q27System::DX2[fdir]) * (D3Q27System::DX2[fdir]), vz * (D3Q27System::DX3[fdir]) * (D3Q27System::DX3[fdir])); - //distribution->setDistributionForDirection((fBC + fG) / densityRatio*0 - fL- (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vBC), x1, x2, x3, fdir); - //distribution->setDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); - //distribution->setDistributionForDirection(0, x1, x2, x3, fdir); + //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio*0 - fL- (feqG - feqL) * (c1o1 / densityRatio - c1o1) * (vBC), x1, x2, x3, fdir); + //distribution->setPostCollisionDistributionForDirection((fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio*0 - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + //distribution->setPostCollisionDistributionForDirection(0, x1, x2, x3, fdir); //real flW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC; //real flWW = (fBC + fG) / densityRatio * 0 - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio * 0 - c1o1) * vBC; //real fLi = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], fdir); // real eqBC = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); // real eqG = D3Q27System::getIncompFeqForDirection(fdir, 0, (*vxNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vyNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir]), (*vzNode)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); // //real flNew = (fBC + fG - eqBC - eqG) / densityRatio + eqBC + eqG - fL - (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC; - // distribution->setDistributionForDirection(c2o1*laplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG) - fL, x1, x2, x3, fdir);// - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); + // distribution->setPostCollisionDistributionForDirection(c2o1*laplacePressure* WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBC + eqG) - fL, x1, x2, x3, fdir);// - 0*(feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir);// (vxBC * D3Q27System::DX1[fdir] + vyBC * D3Q27System::DX2[fdir] + vzBC * D3Q27System::DX3[fdir]), x1, x2, x3, fdir); //// real number = 666; @@ -559,7 +559,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) laplacePressureBC = laplacePressure; // curv; // reset to the above laplacePressureBC = laplacePressure * (c1o1 - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])) + laplacePressureBC * (-c1o1 + c2o1 * (*phaseField)(x1, x2, x3)) / (c2o1 * (*phaseField)(x1, x2, x3) - c2o1 * (*phaseField)(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir])); // laplacePressureBC *= sigma; - distribution->setDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir); + distribution->setPostCollisionDistributionForDirection(laplacePressureBC * WEIGTH[fdir] + (fBC + fG - eqBC - eqG) / densityRatio + (eqBCN + eqGN) * (c1o1 - c1o1 / densityRatio * 0) - fL - 0 * (feqG - feqL - 2 * fL + 2 * feqL) * (c1o1 / densityRatio - c1o1) * vBC, x1, x2, x3, fdir); } @@ -622,7 +622,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) // real feqOLD = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoG, vx, vy, vz); // real feqNew = D3Q27System::getIncompFeqForDirection(D3Q27System::INVDIR[fdir], rhoL, vx, vy, vz); // ff[D3Q27System::INVDIR[fdir]] = (ff[D3Q27System::INVDIR[fdir]] - feqOLD) * (c1o1 / collFactorL - c1o1) / (c1o1 / collFactorG - c1o1) + feqNew; - distribution->setDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); + distribution->setPostCollisionDistributionForDirection(ff[D3Q27System::INVDIR[fdir]], x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); } } @@ -638,7 +638,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) // //real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) - c6o1 * WEIGTH[fdir] * vDir; // //real fL = distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]) + c6o1 * WEIGTH[fdir] * (vx * D3Q27System::DX1[fdir] + vy * D3Q27System::DX2[fdir] + vz * D3Q27System::DX3[fdir]); // real fL= D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); - // distribution->setDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); + // distribution->setPostCollisionDistributionForDirection(fL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); // ff[fdir] = fL; // } // if (!(phi[fdir] > c1o2)) { @@ -647,7 +647,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) // real vyBC = ((*vyNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); // real vzBC = ((*vzNode)(x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir])); // real feqL = D3Q27System::getIncompFeqForDirection(fdir, rhoL, vx, vy, vz); - // distribution->setDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); + // distribution->setPostCollisionDistributionForDirection(feqL, x1 - D3Q27System::DX1[fdir], x2 - D3Q27System::DX2[fdir], x3 - D3Q27System::DX3[fdir], fdir); // ff[fdir] = feqL; // } //} @@ -655,26 +655,26 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) //for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { // sumRho2 += ff[fdir];// -D3Q27System::getIncompFeqForDirection(fdir, 0, sumVx, sumVy, sumVz); //} - //ff[DIR_000] = rhoL - sumRho2; + //ff[d000] = rhoL - sumRho2; //rhoL = 27.0 / 18.0 * sumRho2; //std::cout << "rhoL=" << rhoL <<" sumRho="<< 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "\n"; D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz); - //std::cout << "RecalCrhoL=" << rhoL << " sumRho=" << 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "ffRest="<<ff[DIR_000]<<"\n"; - //distribution->setDistributionForDirection(ff[DIR_000], x1, x2, x3, DIR_000); + //std::cout << "RecalCrhoL=" << rhoL << " sumRho=" << 27.0 / 18.0 * sumRho2 << " vx=" << vx << " vy=" << vy << "ffRest="<<ff[d000]<<"\n"; + //distribution->setPostCollisionDistributionForDirection(ff[d000], x1, x2, x3, d000); { - real fG = distribution->getDistributionInvForDirection(x1, x2, x3, DIR_000); - real feqOLD = D3Q27System::getIncompFeqForDirection(DIR_000, (*rhoNode)(x1, x2, x3), vx, vy, vz); - real feqNew = D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz); - distribution->setDistributionForDirection(fG - feqOLD + feqNew, x1, x2, x3, DIR_000); + real fG = distribution->getDistributionInvForDirection(x1, x2, x3, d000); + real feqOLD = D3Q27System::getIncompFeqForDirection(d000, (*rhoNode)(x1, x2, x3), vx, vy, vz); + real feqNew = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz); + distribution->setPostCollisionDistributionForDirection(fG - feqOLD + feqNew, x1, x2, x3, d000); } //for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) { // ff[D3Q27System::INVDIR[fdir]]=distribution->getDistributionInvForDirection(x1 + D3Q27System::DX1[fdir], x2 + D3Q27System::DX2[fdir], x3 + D3Q27System::DX3[fdir], D3Q27System::INVDIR[fdir]); //} //D3Q27System::calcIncompMacroscopicValues(ff, rhoL, vx, vy, vz); - //std::cout << "AfterRead rhoL=" << rhoL << " rhoGToL=" << rhoG/densityRatio << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[DIR_000] <<" x="<<x1<<" y="<<x2<<" z="<<x3<< "\n"; + //std::cout << "AfterRead rhoL=" << rhoL << " rhoGToL=" << rhoG/densityRatio << " vx=" << vx << " vy=" << vy << "ffRest=" << ff[d000] <<" x="<<x1<<" y="<<x2<<" z="<<x3<< "\n"; - //real feqL = D3Q27System::getIncompFeqForDirection(DIR_000, rhoL, vx, vy, vz); - //distribution->setDistributionForDirection(feqL, x1, x2, x3, DIR_000); + //real feqL = D3Q27System::getIncompFeqForDirection(d000, rhoL, vx, vy, vz); + //distribution->setPostCollisionDistributionForDirection(feqL, x1, x2, x3, d000); @@ -761,13 +761,13 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) - collFactorM = phi[DIR_000] > c1o2 ? collFactorL : collFactorG; - //real collFactorMInv = phi[DIR_000] > c1o2 ? collFactorG : collFactorL; + collFactorM = phi[d000] > c1o2 ? collFactorL : collFactorG; + //real collFactorMInv = phi[d000] > c1o2 ? collFactorG : collFactorL; - //real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi(); + //real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); //----------- Calculating Macroscopic Values ------------- - real rho = phi[DIR_000] > c1o2 ? rhoH : rhoL; + real rho = phi[d000] > c1o2 ? rhoH : rhoL; @@ -791,7 +791,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) if (withForcing) { muRho = rho; - muPhi = phi[DIR_000]; + muPhi = phi[d000]; forcingX1 += muForcingX1.Eval(); forcingX2 += muForcingX2.Eval(); forcingX3 += muForcingX3.Eval(); @@ -838,8 +838,8 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) //////////////////////////////////////////////////////////////////////////////////// real wadjust; -// real qudricLimit = 0.01 / (c1o1 + 1.0e4 * phi[DIR_000] * (c1o1 - phi[DIR_000])); - //real qudricLimit = 0.01 / (c1o1 + (((*phaseField)(x1, x2, x3) > c1o2) ? 1.0e6 * phi[DIR_000] * (c1o1 - phi[DIR_000]):c0o1)); +// real qudricLimit = 0.01 / (c1o1 + 1.0e4 * phi[d000] * (c1o1 - phi[d000])); + //real qudricLimit = 0.01 / (c1o1 + (((*phaseField)(x1, x2, x3) > c1o2) ? 1.0e6 * phi[d000] * (c1o1 - phi[d000]):c0o1)); real qudricLimit = 0.01; //////////////////////////////////////////////////////////////////////////////////// @@ -960,7 +960,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) real Dxz = -c3o1 * collFactorM * mfbab; real Dyz = -c3o1 * collFactorM * mfabb; - // if (phi[DIR_000] > c1o2) { + // if (phi[d000] > c1o2) { // /// QR eddyviscosity: // real eddyR = -(Dxy * Dxy + Dxz * Dxz + c1o3 * dxux * dxux) * (dxux) - (Dxy * Dxy + Dyz * Dyz + c1o3 * dyuy * dyuy) * dyuy - (Dxz * Dxz + Dyz * Dyz + c1o3 * dzuz * dzuz) * dzuz - c2o1 * Dxy * Dxz * Dyz; // real eddyQ = Dxy * Dxz + Dxy * Dyz + Dxz * Dyz + c1o2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz); @@ -978,7 +978,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // non Newtonian fluid collision factor - if (phi[DIR_000] > c1o2) + if (phi[d000] > c1o2) { real shearRate = sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz); collFactorM = Rheology::getBinghamCollFactor(collFactorM, shearRate, c1o1); @@ -1157,7 +1157,7 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) ////////////////////////////////////////////////////////////////////////// //write distribution ////////////////////////////////////////////////////////////////////////// - // if (phi[DIR_000] < c1o2) { + // if (phi[d000] < c1o2) { (*this->localDistributionsF)(D3Q27System::ET_E, x1, x2, x3) = mfabb;//* rho * c1o3; (*this->localDistributionsF)(D3Q27System::ET_N, x1, x2, x3) = mfbab;//* rho * c1o3; (*this->localDistributionsF)(D3Q27System::ET_T, x1, x2, x3) = mfbba;//* rho * c1o3; @@ -1460,90 +1460,90 @@ void MultiphaseSharpInterfaceLBMKernel::calculate(int step) real MultiphaseSharpInterfaceLBMKernel::gradX1_phi() { using namespace D3Q27System; - return 3.0* ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00])); + return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + + +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); } real MultiphaseSharpInterfaceLBMKernel::gradX2_phi() { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP])- (phi[DIR_PMP] - phi[DIR_MPM]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0])- (phi[DIR_PM0] - phi[DIR_MP0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM]))) + + WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) + + +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); } real MultiphaseSharpInterfaceLBMKernel::gradX3_phi() { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + + +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); } real MultiphaseSharpInterfaceLBMKernel::gradX1_rhoInv(real rhoL,real rhoDIV) { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0/(rhoL+rhoDIV*phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP])))) - + WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_P0P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0M])) + (1.0 / (rhoL + rhoDIV * phi[DIR_P0M]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0P]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PM0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MP0])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PP0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MM0]))))) + - +WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_P00]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M00]))); + return 3.0 * ((WEIGTH[dPPP] * (((1.0/(rhoL+rhoDIV*phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) + (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) + (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) + + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) + (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0])) + (1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0]))))) + + +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[dP00]) - 1.0 / (rhoL + rhoDIV * phi[dM00]))); } real MultiphaseSharpInterfaceLBMKernel::gradX2_rhoInv(real rhoL,real rhoDIV) { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])))) - + WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_0PP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_0PM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PP0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MM0])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PM0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MP0]))))) + - +WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_0P0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0M0]))); + return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])) - (1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])))) + + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM])) + (1.0 / (rhoL + rhoDIV * phi[d0PM]) - 1.0 / (rhoL + rhoDIV * phi[d0MP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0])) - (1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0]))))) + + +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d0P0]) - 1.0 / (rhoL + rhoDIV * phi[d0M0]))); } real MultiphaseSharpInterfaceLBMKernel::gradX3_rhoInv(real rhoL, real rhoDIV) { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP])))) - + WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_P0P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0M])) - (1.0 / (rhoL + rhoDIV * phi[DIR_P0M]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0P]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_0MP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0PM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_0PP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MM]))))) + - +WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_00P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_00M]))); + return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) - (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) + + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) - (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[d0MP]) - 1.0 / (rhoL + rhoDIV * phi[d0PM])) + (1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM]))))) + + +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d00P]) - 1.0 / (rhoL + rhoDIV * phi[d00M]))); } real MultiphaseSharpInterfaceLBMKernel::gradX1_phi2() { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) + (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) + (phi2[DIR_PPM] - phi2[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) + (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_PM0] - phi2[DIR_MP0]) + (phi2[DIR_PP0] - phi2[DIR_MM0])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_P00] - phi2[DIR_M00])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP]))) + + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) + + +WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00])); } real MultiphaseSharpInterfaceLBMKernel::gradX2_phi2() { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PPM] - phi2[DIR_MMP]) - (phi2[DIR_PMP] - phi2[DIR_MPM]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_0PP] - phi2[DIR_0MM]) + (phi2[DIR_0PM] - phi2[DIR_0MP])) + ((phi2[DIR_PP0] - phi2[DIR_MM0]) - (phi2[DIR_PM0] - phi2[DIR_MP0])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_0P0] - phi2[DIR_0M0])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM]))) + + WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) + + +WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0])); } real MultiphaseSharpInterfaceLBMKernel::gradX3_phi2() { using namespace D3Q27System; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) + + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + + +WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); } real MultiphaseSharpInterfaceLBMKernel::nabla2_phi() { using namespace D3Q27System; real sum = 0.0; - sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000]))) - + (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000])))); - sum += WEIGTH[DIR_0PP] * ( - (((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000]))) - + (((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000]))) - + (((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000]))) + sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) + + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); + sum += WEIGTH[d0PP] * ( + (((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) + + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) + + (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))) ); - sum += WEIGTH[DIR_00P] * ( - ((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000])) - + ((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000])) - + ((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000])) + sum += WEIGTH[d00P] * ( + ((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) + + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) + + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])) ); return 6.0 * sum; @@ -1557,30 +1557,30 @@ real MultiphaseSharpInterfaceLBMKernel::computeCurvature_phi() real phiX = gradX1_phi(); real phiY = gradX2_phi(); real phiZ = gradX3_phi(); - real phiXX = c4o9*(phi[DIR_P00] - c2o1 * phi[DIR_000] + phi[DIR_M00]) - +(c1o9*(((phi[DIR_PP0] - c2o1 * phi[DIR_0P0] + phi[DIR_MP0])+ (phi[DIR_PM0] - c2o1 * phi[DIR_0M0] + phi[DIR_MM0]))+ ((phi[DIR_P0P] - c2o1 * phi[DIR_00P] + phi[DIR_M0P]) + (phi[DIR_P0M] - c2o1 * phi[DIR_00M] + phi[DIR_M0M]))) - +c1o36* (((phi[DIR_PPP] - c2o1 * phi[DIR_0PP] + phi[DIR_MPP]) + (phi[DIR_PMP] - c2o1 * phi[DIR_0MP] + phi[DIR_MMP])) + ((phi[DIR_PPM] - c2o1 * phi[DIR_0PM] + phi[DIR_MPM]) + (phi[DIR_PMM] - c2o1 * phi[DIR_0MM] + phi[DIR_MMM])))); - real phiYY = c4o9*(phi[DIR_0P0] - c2o1 * phi[DIR_000] + phi[DIR_0M0]) - +(c1o9*(((phi[DIR_PP0] - c2o1 * phi[DIR_P00] + phi[DIR_PM0])+ (phi[DIR_MP0] - c2o1 * phi[DIR_M00] + phi[DIR_MM0]))+ ((phi[DIR_0PP] - c2o1 * phi[DIR_00P] + phi[DIR_0MP]) + (phi[DIR_0PM] - c2o1 * phi[DIR_00M] + phi[DIR_0MM]))) - +c1o36* (((phi[DIR_PPP] - c2o1 * phi[DIR_P0P] + phi[DIR_PMP]) + (phi[DIR_MPM] - c2o1 * phi[DIR_M0M] + phi[DIR_MMM])) + ((phi[DIR_MPP] - c2o1 * phi[DIR_M0P] + phi[DIR_MMP]) + (phi[DIR_PPM] - c2o1 * phi[DIR_P0M] + phi[DIR_PMM])))); - real phiZZ = c4o9*(phi[DIR_00P] - c2o1 * phi[DIR_000] + phi[DIR_00M]) - +(c1o9*(((phi[DIR_M0P] - c2o1 * phi[DIR_M00] + phi[DIR_M0M])+ (phi[DIR_P0P] - c2o1 * phi[DIR_P00] + phi[DIR_P0M]))+ ((phi[DIR_0MP] - c2o1 * phi[DIR_0M0] + phi[DIR_0MM]) + (phi[DIR_0PP] - c2o1 * phi[DIR_0P0] + phi[DIR_0PM]))) - +c1o36* (((phi[DIR_MPP] - c2o1 * phi[DIR_MP0] + phi[DIR_MPM]) + (phi[DIR_PMP] - c2o1 * phi[DIR_PM0] + phi[DIR_PMM])) + ((phi[DIR_MMP] - c2o1 * phi[DIR_MM0] + phi[DIR_MMM]) + (phi[DIR_PPP] - c2o1 * phi[DIR_PP0] + phi[DIR_PPM])))); - real phiXY = c1o4 *(c2o3* (phi[DIR_MM0] - phi[DIR_PM0] + phi[DIR_PP0] - phi[DIR_MP0])+c1o6*((phi[DIR_MMP] - phi[DIR_PMP] + phi[DIR_PPP] - phi[DIR_MPP])+ (phi[DIR_MMM] - phi[DIR_PMM] + phi[DIR_PPM] - phi[DIR_MPM]))); - real phiXZ = c1o4 *(c2o3* (phi[DIR_M0M] - phi[DIR_P0M] + phi[DIR_P0P] - phi[DIR_M0P])+c1o6*((phi[DIR_MPM] - phi[DIR_PPM] + phi[DIR_PPP] - phi[DIR_MPP])+ (phi[DIR_MMM] - phi[DIR_PMM] + phi[DIR_PMP] - phi[DIR_MMP]))); - real phiYZ = c1o4 *(c2o3* (phi[DIR_0MM] - phi[DIR_0MP] + phi[DIR_0PP] - phi[DIR_0PM])+c1o6*((phi[DIR_MMM] - phi[DIR_MMP] + phi[DIR_MPP] - phi[DIR_MPM])+ (phi[DIR_PMM] - phi[DIR_PMP] + phi[DIR_PPP] - phi[DIR_PPM]))); + real phiXX = c4o9*(phi[dP00] - c2o1 * phi[d000] + phi[dM00]) + +(c1o9*(((phi[dPP0] - c2o1 * phi[d0P0] + phi[dMP0])+ (phi[dPM0] - c2o1 * phi[d0M0] + phi[dMM0]))+ ((phi[dP0P] - c2o1 * phi[d00P] + phi[dM0P]) + (phi[dP0M] - c2o1 * phi[d00M] + phi[dM0M]))) + +c1o36* (((phi[dPPP] - c2o1 * phi[d0PP] + phi[dMPP]) + (phi[dPMP] - c2o1 * phi[d0MP] + phi[dMMP])) + ((phi[dPPM] - c2o1 * phi[d0PM] + phi[dMPM]) + (phi[dPMM] - c2o1 * phi[d0MM] + phi[dMMM])))); + real phiYY = c4o9*(phi[d0P0] - c2o1 * phi[d000] + phi[d0M0]) + +(c1o9*(((phi[dPP0] - c2o1 * phi[dP00] + phi[dPM0])+ (phi[dMP0] - c2o1 * phi[dM00] + phi[dMM0]))+ ((phi[d0PP] - c2o1 * phi[d00P] + phi[d0MP]) + (phi[d0PM] - c2o1 * phi[d00M] + phi[d0MM]))) + +c1o36* (((phi[dPPP] - c2o1 * phi[dP0P] + phi[dPMP]) + (phi[dMPM] - c2o1 * phi[dM0M] + phi[dMMM])) + ((phi[dMPP] - c2o1 * phi[dM0P] + phi[dMMP]) + (phi[dPPM] - c2o1 * phi[dP0M] + phi[dPMM])))); + real phiZZ = c4o9*(phi[d00P] - c2o1 * phi[d000] + phi[d00M]) + +(c1o9*(((phi[dM0P] - c2o1 * phi[dM00] + phi[dM0M])+ (phi[dP0P] - c2o1 * phi[dP00] + phi[dP0M]))+ ((phi[d0MP] - c2o1 * phi[d0M0] + phi[d0MM]) + (phi[d0PP] - c2o1 * phi[d0P0] + phi[d0PM]))) + +c1o36* (((phi[dMPP] - c2o1 * phi[dMP0] + phi[dMPM]) + (phi[dPMP] - c2o1 * phi[dPM0] + phi[dPMM])) + ((phi[dMMP] - c2o1 * phi[dMM0] + phi[dMMM]) + (phi[dPPP] - c2o1 * phi[dPP0] + phi[dPPM])))); + real phiXY = c1o4 *(c2o3* (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0])+c1o6*((phi[dMMP] - phi[dPMP] + phi[dPPP] - phi[dMPP])+ (phi[dMMM] - phi[dPMM] + phi[dPPM] - phi[dMPM]))); + real phiXZ = c1o4 *(c2o3* (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P])+c1o6*((phi[dMPM] - phi[dPPM] + phi[dPPP] - phi[dMPP])+ (phi[dMMM] - phi[dPMM] + phi[dPMP] - phi[dMMP]))); + real phiYZ = c1o4 *(c2o3* (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM])+c1o6*((phi[dMMM] - phi[dMMP] + phi[dMPP] - phi[dMPM])+ (phi[dPMM] - phi[dPMP] + phi[dPPP] - phi[dPPM]))); //non isotropic FD (to be improved): - //real phiX = (phi[DIR_P00] - phi[DIR_M00]) * c1o2; //gradX1_phi(); - //real phiY = (phi[DIR_0P0] - phi[DIR_0M0]) * c1o2; //gradX2_phi(); - //real phiZ = (phi[DIR_00P] - phi[DIR_00M]) * c1o2; //gradX3_phi(); - - //real phiXX = phi[DIR_P00] - c2o1 * phi[DIR_000] + phi[DIR_M00]; - //real phiYY = phi[DIR_0P0] - c2o1 * phi[DIR_000] + phi[DIR_0M0]; - //real phiZZ =( phi[DIR_00P] - c2o1 * phi[DIR_000] + phi[DIR_00M]); - //real phiXY = c1o4 * (phi[DIR_MM0] - phi[DIR_PM0] + phi[DIR_PP0] - phi[DIR_MP0]); - //real phiXZ = c1o4 * (phi[DIR_M0M] - phi[DIR_P0M] + phi[DIR_P0P] - phi[DIR_M0P]); - //real phiYZ = c1o4 * (phi[DIR_0MM] - phi[DIR_0MP] + phi[DIR_0PP] - phi[DIR_0PM]); + //real phiX = (phi[dP00] - phi[dM00]) * c1o2; //gradX1_phi(); + //real phiY = (phi[d0P0] - phi[d0M0]) * c1o2; //gradX2_phi(); + //real phiZ = (phi[d00P] - phi[d00M]) * c1o2; //gradX3_phi(); + + //real phiXX = phi[dP00] - c2o1 * phi[d000] + phi[dM00]; + //real phiYY = phi[d0P0] - c2o1 * phi[d000] + phi[d0M0]; + //real phiZZ =( phi[d00P] - c2o1 * phi[d000] + phi[d00M]); + //real phiXY = c1o4 * (phi[dMM0] - phi[dPM0] + phi[dPP0] - phi[dMP0]); + //real phiXZ = c1o4 * (phi[dM0M] - phi[dP0M] + phi[dP0P] - phi[dM0P]); + //real phiYZ = c1o4 * (phi[d0MM] - phi[d0MP] + phi[d0PP] - phi[d0PM]); //real back= (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1 * pow(phiX * phiX + phiY * phiY + phiZ * phiZ, c3o2)); return (c2o1 * (phiX * phiY * phiXY + phiX * phiZ * phiXZ + phiY * phiZ * phiYZ) - phiXX * (phiY * phiY + phiZ * phiZ) - phiYY * (phiX * phiX + phiZ * phiZ) - phiZZ * (phiX * phiX + phiY * phiY)) / (c2o1*pow(phiX*phiX+phiY*phiY+phiZ*phiZ,c3o2)); @@ -1608,35 +1608,35 @@ void MultiphaseSharpInterfaceLBMKernel::computePhasefield() int x2p = x2 + 1; int x3p = x3 + 1; - h[DIR_P00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - h[DIR_0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - h[DIR_00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - h[DIR_PP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - h[DIR_MP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - h[DIR_P0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - h[DIR_M0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - h[DIR_0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - h[DIR_0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - h[DIR_PPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - h[DIR_MPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - h[DIR_PMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - h[DIR_MMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[DIR_M00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - h[DIR_0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - h[DIR_00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - h[DIR_MM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - h[DIR_PM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - h[DIR_M0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - h[DIR_P0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - h[DIR_0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - h[DIR_0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - h[DIR_MMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[DIR_PMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[DIR_MPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[DIR_PPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[DIR_000] = (*this->zeroDistributionsH1)(x1, x2, x3); + h[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); + h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); + h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); + h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); + h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); + h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); + h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); + h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); + h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); + h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); + h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); + h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); + h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); + + h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); + h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); + h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); + h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); + h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); + h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); + h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); + h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); + h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); + h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); + h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); + h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); + h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); + + h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3); } } } @@ -1650,7 +1650,7 @@ void MultiphaseSharpInterfaceLBMKernel::findNeighbors(CbArray3D<real, IndexerX3X SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - phi[DIR_000] = (*ph)(x1, x2, x3); + phi[d000] = (*ph)(x1, x2, x3); for (int k = FSTARTDIR; k <= FENDDIR; k++) { @@ -1671,7 +1671,7 @@ void MultiphaseSharpInterfaceLBMKernel::findNeighbors2(CbArray3D<real, IndexerX3 SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - phi2[DIR_000] = (*ph)(x1, x2, x3); + phi2[d000] = (*ph)(x1, x2, x3); for (int k = FSTARTDIR; k <= FENDDIR; k++) { diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp index 047da3666e9f77cd5624f5a3479b3cb79a43990b..a01c86ff8a63c89cde6405d32b590dd3fefb9825 100644 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp +++ b/src/cpu/MultiphaseFlow/LBM/MultiphaseSimpleVelocityBaseExternalPressureLBMKernel.cpp @@ -476,20 +476,20 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step) - collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[DIR_000] - phiH) / (phiH - phiL); + collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL); - real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi(); + real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); //----------- Calculating Macroscopic Values ------------- - real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH); //Incompressible + real rho = rhoH + rhoToPhi * (phi[d000] - phiH); //Incompressible ///scaled phase field //LBMReal rho = rhoH + rhoToPhi * ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) / ((*phaseField)(x1, x2, x3) * (*phaseField)(x1, x2, x3) + (c1 - (*phaseField)(x1, x2, x3)) * (c1 - (*phaseField)(x1, x2, x3))) - phiH); ///!scaled phase field - //LBMReal rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH)+(one-phi[DIR_000])* (*pressure)(x1, x2, x3)*three; //compressible - //LBMReal rho = rhoL + (rhoH - rhoL) * phi[DIR_000] + (one - phi[DIR_000]) * (*pressure)(x1, x2, x3) * three; //compressible + //LBMReal rho = rhoH + rhoToPhi * (phi[d000] - phiH)+(one-phi[d000])* (*pressure)(x1, x2, x3)*three; //compressible + //LBMReal rho = rhoL + (rhoH - rhoL) * phi[d000] + (one - phi[d000]) * (*pressure)(x1, x2, x3) * three; //compressible real m0, m1, m2; real rhoRef= c1o1; @@ -511,14 +511,14 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step) {{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}}, { {pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere},{pressureHere,pressureHere,pressureHere}} }; //LBMReal LaplaceP = 0.0; - //LaplaceP += WEIGTH[DIR_PPP] * (((((*pressureOld)(x1+1,x2+1,x3+1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 + 1) - pressureHere))) + //LaplaceP += WEIGTH[dPPP] * (((((*pressureOld)(x1+1,x2+1,x3+1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3 + 1) - pressureHere))) // + ((((*pressureOld)(x1 + 1, x2 - 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3 + 1) - pressureHere)))); - //LaplaceP += WEIGTH[DIR_0PP] * ( + //LaplaceP += WEIGTH[d0PP] * ( // ((((*pressureOld)(x1 + 1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 - 1, x3) - pressureHere)) + (((*pressureOld)(x1 + 1, x2 - 1, x3) - pressureHere) + ((*pressureOld)(x1 - 1, x2 + 1, x3) - pressureHere))) // + ((((*pressureOld)(x1 + 1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 -1) - pressureHere)) + (((*pressureOld)(x1 + 1, x2, x3 - 1) - pressureHere) + ((*pressureOld)(x1 - 1, x2, x3 + 1) - pressureHere))) // + ((((*pressureOld)(x1, x2 + 1, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 - 1) - pressureHere)) + (((*pressureOld)(x1, x2 + 1, x3 - 1) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3 + 1) - pressureHere))) // ); - //LaplaceP += WEIGTH[DIR_00P] * ( + //LaplaceP += WEIGTH[d00P] * ( // (((*pressureOld)(x1 + 1, x2, x3) - pressureHere) + ((*pressureOld)(x1, x2-1, x3) - pressureHere)) // + (((*pressureOld)(x1, x2 + 1, x3) - pressureHere) + ((*pressureOld)(x1, x2 - 1, x3) - pressureHere)) // + (((*pressureOld)(x1, x2, x3 + 1) - pressureHere) + ((*pressureOld)(x1, x2, x3 - 1) - pressureHere)) @@ -633,16 +633,16 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step) //} //Viscosity increase by phase field residuum - //LBMReal errPhi = (((1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale)- denom); + //LBMReal errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom); //LBMReal limVis = 0.01;// 0.0000001 * 10;//0.01; // collFactorM =collFactorM/(c1+limVis*(errPhi*errPhi)*collFactorM); // collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM; //errPhi = errPhi * errPhi* errPhi * errPhi * errPhi * errPhi; //collFactorM = collFactorM + (1.8 - collFactorM) * errPhi / (errPhi + limVis); - //3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP]))) - //+WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) + - //+WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M])); + //3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) + //+WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + + //+WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); muRho = rho; @@ -656,34 +656,34 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step) //LBMReal pBefore = ((((((mfaaa + mfccc) + (mfaac + mfcca)) + ((mfcac + mfaca) + (mfcaa + mfacc))) // + (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) // + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb) * c1o3; - //pBefore = -c1o3 * (-1.0e-10)/((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) ); + //pBefore = -c1o3 * (-1.0e-10)/((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) ); ////if (vvx * vvx + vvy * vvy + vvz * vvz > 1.0e-100) { - // mfabb -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_P00] * (rhoH - rhoL) / (phiH - phiL))); - // mfbab -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0P0] * (rhoH - rhoL) / (phiH - phiL))); - // mfbba -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_00P] * (rhoH - rhoL) / (phiH - phiL))); - // mfaab -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PP0] * (rhoH - rhoL) / (phiH - phiL))); - // mfcab -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MP0] * (rhoH - rhoL) / (phiH - phiL))); - // mfaba -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_P0P] * (rhoH - rhoL) / (phiH - phiL))); - // mfcba -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_M0P] * (rhoH - rhoL) / (phiH - phiL))); - // mfbaa -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0PP] * (rhoH - rhoL) / (phiH - phiL))); - // mfbca -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0MP] * (rhoH - rhoL) / (phiH - phiL))); - // mfaaa -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PPP] * (rhoH - rhoL) / (phiH - phiL))); - // mfcaa -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MPP] * (rhoH - rhoL) / (phiH - phiL))); - // mfaca -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PMP] * (rhoH - rhoL) / (phiH - phiL))); - // mfcca -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MMP] * (rhoH - rhoL) / (phiH - phiL))); - // mfcbb -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_M00] * (rhoH - rhoL) / (phiH - phiL))); - // mfbcb -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0M0] * (rhoH - rhoL) / (phiH - phiL))); - // mfbbc -= pBefore * c2o9 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_00M] * (rhoH - rhoL) / (phiH - phiL))); - // mfccb -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MM0] * (rhoH - rhoL) / (phiH - phiL))); - // mfacb -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PM0] * (rhoH - rhoL) / (phiH - phiL))); - // mfcbc -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_M0M] * (rhoH - rhoL) / (phiH - phiL))); - // mfabc -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_P0M] * (rhoH - rhoL) / (phiH - phiL))); - // mfbcc -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0MM] * (rhoH - rhoL) / (phiH - phiL))); - // mfbac -= pBefore * c1o18 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_0PM] * (rhoH - rhoL) / (phiH - phiL))); - // mfccc -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MMM] * (rhoH - rhoL) / (phiH - phiL))); - // mfacc -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PMM] * (rhoH - rhoL) / (phiH - phiL))); - // mfcac -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_MPM] * (rhoH - rhoL) / (phiH - phiL))); - // mfaac -= pBefore * c1o72 * ((rhoL + phi[DIR_000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[DIR_PPM] * (rhoH - rhoL) / (phiH - phiL))); + // mfabb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP00] * (rhoH - rhoL) / (phiH - phiL))); + // mfbab -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0P0] * (rhoH - rhoL) / (phiH - phiL))); + // mfbba -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d00P] * (rhoH - rhoL) / (phiH - phiL))); + // mfaab -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPP0] * (rhoH - rhoL) / (phiH - phiL))); + // mfcab -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMP0] * (rhoH - rhoL) / (phiH - phiL))); + // mfaba -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP0P] * (rhoH - rhoL) / (phiH - phiL))); + // mfcba -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM0P] * (rhoH - rhoL) / (phiH - phiL))); + // mfbaa -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0PP] * (rhoH - rhoL) / (phiH - phiL))); + // mfbca -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0MP] * (rhoH - rhoL) / (phiH - phiL))); + // mfaaa -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPPP] * (rhoH - rhoL) / (phiH - phiL))); + // mfcaa -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMPP] * (rhoH - rhoL) / (phiH - phiL))); + // mfaca -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPMP] * (rhoH - rhoL) / (phiH - phiL))); + // mfcca -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMMP] * (rhoH - rhoL) / (phiH - phiL))); + // mfcbb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM00] * (rhoH - rhoL) / (phiH - phiL))); + // mfbcb -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0M0] * (rhoH - rhoL) / (phiH - phiL))); + // mfbbc -= pBefore * c2o9 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d00M] * (rhoH - rhoL) / (phiH - phiL))); + // mfccb -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMM0] * (rhoH - rhoL) / (phiH - phiL))); + // mfacb -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPM0] * (rhoH - rhoL) / (phiH - phiL))); + // mfcbc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dM0M] * (rhoH - rhoL) / (phiH - phiL))); + // mfabc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dP0M] * (rhoH - rhoL) / (phiH - phiL))); + // mfbcc -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0MM] * (rhoH - rhoL) / (phiH - phiL))); + // mfbac -= pBefore * c1o18 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[d0PM] * (rhoH - rhoL) / (phiH - phiL))); + // mfccc -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMMM] * (rhoH - rhoL) / (phiH - phiL))); + // mfacc -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPMM] * (rhoH - rhoL) / (phiH - phiL))); + // mfcac -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dMPM] * (rhoH - rhoL) / (phiH - phiL))); + // mfaac -= pBefore * c1o72 * ((rhoL + phi[d000] * (rhoH - rhoL) / (phiH - phiL)) / (rhoL + phi[dPPM] * (rhoH - rhoL) / (phiH - phiL))); // mfbbb -= pBefore * 8.0 / 9.0; //} @@ -808,12 +808,12 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step) // + (((mfaab + mfccb) + (mfacb + mfcab)) + ((mfaba + mfcbc) + (mfabc + mfcba)) + ((mfbaa + mfbcc) + (mfbac + mfbca)))) * c2 // + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc)))) * c1o3 ; - //(*phaseFieldOld)(x1, x2, x3) = ((*phaseFieldOld)(x1, x2, x3) > 99.0) ? phi[DIR_000] : (*phaseFieldOld)(x1, x2, x3); - //LBMReal dtPhi = phi[DIR_000] - (*phaseFieldOld)(x1, x2, x3); + //(*phaseFieldOld)(x1, x2, x3) = ((*phaseFieldOld)(x1, x2, x3) > 99.0) ? phi[d000] : (*phaseFieldOld)(x1, x2, x3); + //LBMReal dtPhi = phi[d000] - (*phaseFieldOld)(x1, x2, x3); //LBMReal deltaP = -pStar * (c1 - rho / (rho + c1o2 * rhoToPhi * dtPhi));// -pStar * pStar * pStar * 1.0e-4 * rho * rho * rho; //LBMReal deltaP = pStar * (c1 - mfhbbb*rho) * c1o2;//Explicit //LBMReal deltaP = pStar * (c1 - mfhbbb * rho) / (c1 + mfhbbb * rho);//Semi-Implicit - //(*phaseFieldOld)(x1, x2, x3) = phi[DIR_000]; + //(*phaseFieldOld)(x1, x2, x3) = phi[d000]; //mfabb += c2o9 *deltaP; //mfbab += c2o9 *deltaP; @@ -849,32 +849,32 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step) - //mfabb -= c1o2 * c2o9 *pStar*(phi[DIR_000]-phi[DIR_P00])*rhoToPhi/rho; - //mfbab -= c1o2 * c2o9 *pStar*(phi[DIR_000]-phi[DIR_0P0])*rhoToPhi/rho; - //mfbba -= c1o2 * c2o9 *pStar*(phi[DIR_000]-phi[DIR_00P])*rhoToPhi/rho; - //mfaab -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_PP0])*rhoToPhi/rho; - //mfcab -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_MP0])*rhoToPhi/rho; - //mfaba -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_P0P])*rhoToPhi/rho; - //mfcba -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_M0P])*rhoToPhi/rho; - //mfbaa -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_0PP])*rhoToPhi/rho; - //mfbca -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_0MP])*rhoToPhi/rho; - //mfaaa -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_PPP])*rhoToPhi/rho; - //mfcaa -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_MPP])*rhoToPhi/rho; - //mfaca -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_PMP])*rhoToPhi/rho; - //mfcca -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_MMP])*rhoToPhi/rho; - //mfcbb -= c1o2 * c2o9 *pStar*(phi[DIR_000]-phi[DIR_M00])*rhoToPhi/rho; - //mfbcb -= c1o2 * c2o9 *pStar*(phi[DIR_000]-phi[DIR_0M0])*rhoToPhi/rho; - //mfbbc -= c1o2 * c2o9 *pStar*(phi[DIR_000]-phi[DIR_00M])*rhoToPhi/rho; - //mfccb -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_MM0])*rhoToPhi/rho; - //mfacb -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_PM0])*rhoToPhi/rho; - //mfcbc -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_M0M])*rhoToPhi/rho; - //mfabc -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_P0M])*rhoToPhi/rho; - //mfbcc -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_0MM])*rhoToPhi/rho; - //mfbac -= c1o2 * c1o18*pStar*(phi[DIR_000]-phi[DIR_0PM])*rhoToPhi/rho; - //mfccc -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_MMM])*rhoToPhi/rho; - //mfacc -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_PMM])*rhoToPhi/rho; - //mfcac -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_MPM])*rhoToPhi/rho; - //mfaac -= c1o2 * c1o72*pStar*(phi[DIR_000]-phi[DIR_PPM])*rhoToPhi/rho; + //mfabb -= c1o2 * c2o9 *pStar*(phi[d000]-phi[dP00])*rhoToPhi/rho; + //mfbab -= c1o2 * c2o9 *pStar*(phi[d000]-phi[d0P0])*rhoToPhi/rho; + //mfbba -= c1o2 * c2o9 *pStar*(phi[d000]-phi[d00P])*rhoToPhi/rho; + //mfaab -= c1o2 * c1o18*pStar*(phi[d000]-phi[dPP0])*rhoToPhi/rho; + //mfcab -= c1o2 * c1o18*pStar*(phi[d000]-phi[dMP0])*rhoToPhi/rho; + //mfaba -= c1o2 * c1o18*pStar*(phi[d000]-phi[dP0P])*rhoToPhi/rho; + //mfcba -= c1o2 * c1o18*pStar*(phi[d000]-phi[dM0P])*rhoToPhi/rho; + //mfbaa -= c1o2 * c1o18*pStar*(phi[d000]-phi[d0PP])*rhoToPhi/rho; + //mfbca -= c1o2 * c1o18*pStar*(phi[d000]-phi[d0MP])*rhoToPhi/rho; + //mfaaa -= c1o2 * c1o72*pStar*(phi[d000]-phi[dPPP])*rhoToPhi/rho; + //mfcaa -= c1o2 * c1o72*pStar*(phi[d000]-phi[dMPP])*rhoToPhi/rho; + //mfaca -= c1o2 * c1o72*pStar*(phi[d000]-phi[dPMP])*rhoToPhi/rho; + //mfcca -= c1o2 * c1o72*pStar*(phi[d000]-phi[dMMP])*rhoToPhi/rho; + //mfcbb -= c1o2 * c2o9 *pStar*(phi[d000]-phi[dM00])*rhoToPhi/rho; + //mfbcb -= c1o2 * c2o9 *pStar*(phi[d000]-phi[d0M0])*rhoToPhi/rho; + //mfbbc -= c1o2 * c2o9 *pStar*(phi[d000]-phi[d00M])*rhoToPhi/rho; + //mfccb -= c1o2 * c1o18*pStar*(phi[d000]-phi[dMM0])*rhoToPhi/rho; + //mfacb -= c1o2 * c1o18*pStar*(phi[d000]-phi[dPM0])*rhoToPhi/rho; + //mfcbc -= c1o2 * c1o18*pStar*(phi[d000]-phi[dM0M])*rhoToPhi/rho; + //mfabc -= c1o2 * c1o18*pStar*(phi[d000]-phi[dP0M])*rhoToPhi/rho; + //mfbcc -= c1o2 * c1o18*pStar*(phi[d000]-phi[d0MM])*rhoToPhi/rho; + //mfbac -= c1o2 * c1o18*pStar*(phi[d000]-phi[d0PM])*rhoToPhi/rho; + //mfccc -= c1o2 * c1o72*pStar*(phi[d000]-phi[dMMM])*rhoToPhi/rho; + //mfacc -= c1o2 * c1o72*pStar*(phi[d000]-phi[dPMM])*rhoToPhi/rho; + //mfcac -= c1o2 * c1o72*pStar*(phi[d000]-phi[dMPM])*rhoToPhi/rho; + //mfaac -= c1o2 * c1o72*pStar*(phi[d000]-phi[dPPM])*rhoToPhi/rho; //forcingX1 =/* muForcingX1.Eval() / rho*/ - pStar * dX1_phi * rhoToPhi / rho; @@ -949,9 +949,9 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step) //forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho + pStar * dX1_rhoInv * rho) *c1o2; //forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho + pStar * dX2_rhoInv * rho) *c1o2; //forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho + pStar * dX3_rhoInv * rho) *c1o2; - //LBMReal FdX1_phi = normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale; - //LBMReal FdX2_phi = normX2 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale; - //LBMReal FdX3_phi = normX3 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale; + //LBMReal FdX1_phi = normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; + //LBMReal FdX2_phi = normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; + //LBMReal FdX3_phi = normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; //forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho ) ; @@ -961,7 +961,7 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step) //forcingX1 = (pStar * dRhoInvX* rho *c3) ; //forcingX2 = (pStar * dRhoInvY* rho *c3) ; //forcingX3 = (pStar * dRhoInvZ* rho *c3) ; - //if (phi[DIR_000] > 0.1 && phi[DIR_000] < 0.9) std::cout << phi[DIR_000] << " " << dX1_phi * rhoToPhi / rho << " " << dRhoInvX * rho *3<< std::endl; + //if (phi[d000] > 0.1 && phi[d000] < 0.9) std::cout << phi[d000] << " " << dX1_phi * rhoToPhi / rho << " " << dRhoInvX * rho *3<< std::endl; //LBMReal forcingX1ALTERNAT = ( pStar * dX1_rhoInv * rho) ; //LBMReal forcingX2ALTERNAT = ( pStar * dX2_rhoInv * rho) ; //LBMReal forcingX3ALTERNAT = ( pStar * dX3_rhoInv * rho) ; @@ -970,22 +970,22 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step) //forcingX2 = (fabs(vvy + c1o2 * forcingX2) < fabs(vvy + c1o2 * forcingX2ALTERNAT)) ? forcingX2 : forcingX2ALTERNAT; //forcingX3 = (fabs(vvz + c1o2 * forcingX3) < fabs(vvz + c1o2 * forcingX3ALTERNAT)) ? forcingX3 : forcingX3ALTERNAT; - // forcingX1 = -pStar * rhoToPhi / rho * normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale; - // forcingX2 = -pStar * rhoToPhi / rho * normX2 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale; - // forcingX3 = -pStar * rhoToPhi / rho * normX3 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale; + // forcingX1 = -pStar * rhoToPhi / rho * normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; + // forcingX2 = -pStar * rhoToPhi / rho * normX2 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; + // forcingX3 = -pStar * rhoToPhi / rho * normX3 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale; - //forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho *(c1- phi[DIR_000]) + pStar * dX1_rhoInv * rho*(phi[DIR_000])); - //forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho *(c1- phi[DIR_000]) + pStar * dX2_rhoInv * rho*(phi[DIR_000])); - //forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho *(c1- phi[DIR_000]) + pStar * dX3_rhoInv * rho*(phi[DIR_000])); - //if (phi[DIR_000] > 0.3 && phi[DIR_000] < 0.7) + //forcingX1 = (-pStar * dX1_phi * rhoToPhi / rho *(c1- phi[d000]) + pStar * dX1_rhoInv * rho*(phi[d000])); + //forcingX2 = (-pStar * dX2_phi * rhoToPhi / rho *(c1- phi[d000]) + pStar * dX2_rhoInv * rho*(phi[d000])); + //forcingX3 = (-pStar * dX3_phi * rhoToPhi / rho *(c1- phi[d000]) + pStar * dX3_rhoInv * rho*(phi[d000])); + //if (phi[d000] > 0.3 && phi[d000] < 0.7) //{ // int test = 1; - // std::cout << phi[DIR_000] <<" "<< dX1_phi <<" "<< normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale<<" "<< normX1 * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale/ dX1_phi<< std::endl; + // std::cout << phi[d000] <<" "<< dX1_phi <<" "<< normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale<<" "<< normX1 * (1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale/ dX1_phi<< std::endl; //} - //LBMReal scaleGrad = c2 * phi[DIR_000] * (1.0 - phi[DIR_000]) / ((phi[DIR_000] * phi[DIR_000] + (1.0 - phi[DIR_000]) * (1.0 - phi[DIR_000])) * (phi[DIR_000] * phi[DIR_000] + (1.0 - phi[DIR_000]) * (1.0 - phi[DIR_000]))); + //LBMReal scaleGrad = c2 * phi[d000] * (1.0 - phi[d000]) / ((phi[d000] * phi[d000] + (1.0 - phi[d000]) * (1.0 - phi[d000])) * (phi[d000] * phi[d000] + (1.0 - phi[d000]) * (1.0 - phi[d000]))); //dX1_phi *= scaleGrad; //dX2_phi *= scaleGrad; //dX3_phi *= scaleGrad; @@ -1002,9 +1002,9 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step) forcingX3 += mu * dX3_phi/rho; //LBMReal forcingBIAS = 0.5; - forcingX1 += muForcingX1.Eval() / rho;//*phi[DIR_000]; - forcingX2 += muForcingX2.Eval() / rho;// * phi[DIR_000]; - forcingX3 += muForcingX3.Eval() / rho;// * phi[DIR_000]; + forcingX1 += muForcingX1.Eval() / rho;//*phi[d000]; + forcingX2 += muForcingX2.Eval() / rho;// * phi[d000]; + forcingX3 += muForcingX3.Eval() / rho;// * phi[d000]; // //19.08.2022 //vvx += vvxh / rho * c1o2; @@ -1235,7 +1235,7 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step) //////////////////////////////////////////////////////////////////////////////////// real wadjust; - real qudricLimit = 0.01 / (c1o1 + 1.0e4 * phi[DIR_000] * (c1o1 - phi[DIR_000])); //real qudricLimit = 0.01; + real qudricLimit = 0.01 / (c1o1 + 1.0e4 * phi[d000] * (c1o1 - phi[d000])); //real qudricLimit = 0.01; //////////////////////////////////////////////////////////////////////////////////// //Hin //////////////////////////////////////////////////////////////////////////////////// @@ -1726,9 +1726,9 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step) ////////////////////////////////////////////////////////////////////////////////////// //grad Rho - //LBMReal dX1_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX1_phi - phi[DIR_000] * three * gradPx; - //LBMReal dX2_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX2_phi - phi[DIR_000] * three * gradPy; - //LBMReal dX3_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX3_phi - phi[DIR_000] * three * gradPz; + //LBMReal dX1_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX1_phi - phi[d000] * three * gradPx; + //LBMReal dX2_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX2_phi - phi[d000] * three * gradPy; + //LBMReal dX3_rho = (rhoToPhi - three * (*pressure)(x1, x2, x3)) * dX3_phi - phi[d000] * three * gradPz; //LBMReal dX2_rho = (rhoToPhi ) * dX2_phi ; //LBMReal dX1_rho = (rhoToPhi ) * dX1_phi ; @@ -2356,32 +2356,32 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::calculate(int step) - //mfabb += c1o2 * c2o9 * pStar * (phi[DIR_000] - phi[DIR_M00]) * rhoToPhi / rho; - //mfbab += c1o2 * c2o9 * pStar * (phi[DIR_000] - phi[DIR_0M0]) * rhoToPhi / rho; - //mfbba += c1o2 * c2o9 * pStar * (phi[DIR_000] - phi[DIR_00M]) * rhoToPhi / rho; - //mfaab += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_MM0]) * rhoToPhi / rho; - //mfcab += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_PM0]) * rhoToPhi / rho; - //mfaba += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_M0M]) * rhoToPhi / rho; - //mfcba += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_P0M]) * rhoToPhi / rho; - //mfbaa += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_0MM]) * rhoToPhi / rho; - //mfbca += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_0PM]) * rhoToPhi / rho; - //mfaaa += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_MMM]) * rhoToPhi / rho; - //mfcaa += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_PMM]) * rhoToPhi / rho; - //mfaca += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_MPM]) * rhoToPhi / rho; - //mfcca += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_PPM]) * rhoToPhi / rho; - //mfcbb += c1o2 * c2o9 * pStar * (phi[DIR_000] - phi[DIR_P00]) * rhoToPhi / rho; - //mfbcb += c1o2 * c2o9 * pStar * (phi[DIR_000] - phi[DIR_0P0]) * rhoToPhi / rho; - //mfbbc += c1o2 * c2o9 * pStar * (phi[DIR_000] - phi[DIR_00P]) * rhoToPhi / rho; - //mfccb += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_PP0]) * rhoToPhi / rho; - //mfacb += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_MP0]) * rhoToPhi / rho; - //mfcbc += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_P0P]) * rhoToPhi / rho; - //mfabc += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_M0P]) * rhoToPhi / rho; - //mfbcc += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_0PP]) * rhoToPhi / rho; - //mfbac += c1o2 * c1o18 * pStar * (phi[DIR_000] - phi[DIR_0MP]) * rhoToPhi / rho; - //mfccc += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_PPP]) * rhoToPhi / rho; - //mfacc += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_MPP]) * rhoToPhi / rho; - //mfcac += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_PMP]) * rhoToPhi / rho; - //mfaac += c1o2 * c1o72 * pStar * (phi[DIR_000] - phi[DIR_MMP]) * rhoToPhi / rho; + //mfabb += c1o2 * c2o9 * pStar * (phi[d000] - phi[dM00]) * rhoToPhi / rho; + //mfbab += c1o2 * c2o9 * pStar * (phi[d000] - phi[d0M0]) * rhoToPhi / rho; + //mfbba += c1o2 * c2o9 * pStar * (phi[d000] - phi[d00M]) * rhoToPhi / rho; + //mfaab += c1o2 * c1o18 * pStar * (phi[d000] - phi[dMM0]) * rhoToPhi / rho; + //mfcab += c1o2 * c1o18 * pStar * (phi[d000] - phi[dPM0]) * rhoToPhi / rho; + //mfaba += c1o2 * c1o18 * pStar * (phi[d000] - phi[dM0M]) * rhoToPhi / rho; + //mfcba += c1o2 * c1o18 * pStar * (phi[d000] - phi[dP0M]) * rhoToPhi / rho; + //mfbaa += c1o2 * c1o18 * pStar * (phi[d000] - phi[d0MM]) * rhoToPhi / rho; + //mfbca += c1o2 * c1o18 * pStar * (phi[d000] - phi[d0PM]) * rhoToPhi / rho; + //mfaaa += c1o2 * c1o72 * pStar * (phi[d000] - phi[dMMM]) * rhoToPhi / rho; + //mfcaa += c1o2 * c1o72 * pStar * (phi[d000] - phi[dPMM]) * rhoToPhi / rho; + //mfaca += c1o2 * c1o72 * pStar * (phi[d000] - phi[dMPM]) * rhoToPhi / rho; + //mfcca += c1o2 * c1o72 * pStar * (phi[d000] - phi[dPPM]) * rhoToPhi / rho; + //mfcbb += c1o2 * c2o9 * pStar * (phi[d000] - phi[dP00]) * rhoToPhi / rho; + //mfbcb += c1o2 * c2o9 * pStar * (phi[d000] - phi[d0P0]) * rhoToPhi / rho; + //mfbbc += c1o2 * c2o9 * pStar * (phi[d000] - phi[d00P]) * rhoToPhi / rho; + //mfccb += c1o2 * c1o18 * pStar * (phi[d000] - phi[dPP0]) * rhoToPhi / rho; + //mfacb += c1o2 * c1o18 * pStar * (phi[d000] - phi[dMP0]) * rhoToPhi / rho; + //mfcbc += c1o2 * c1o18 * pStar * (phi[d000] - phi[dP0P]) * rhoToPhi / rho; + //mfabc += c1o2 * c1o18 * pStar * (phi[d000] - phi[dM0P]) * rhoToPhi / rho; + //mfbcc += c1o2 * c1o18 * pStar * (phi[d000] - phi[d0PP]) * rhoToPhi / rho; + //mfbac += c1o2 * c1o18 * pStar * (phi[d000] - phi[d0MP]) * rhoToPhi / rho; + //mfccc += c1o2 * c1o72 * pStar * (phi[d000] - phi[dPPP]) * rhoToPhi / rho; + //mfacc += c1o2 * c1o72 * pStar * (phi[d000] - phi[dMPP]) * rhoToPhi / rho; + //mfcac += c1o2 * c1o72 * pStar * (phi[d000] - phi[dPMP]) * rhoToPhi / rho; + //mfaac += c1o2 * c1o72 * pStar * (phi[d000] - phi[dMMP]) * rhoToPhi / rho; /////////////// //mfabb += (pBefore-pStar) * c2o9 ; @@ -2808,9 +2808,9 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_phi() using namespace vf::lbm::dir; using namespace D3Q27System; - return 3.0* ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00])); + return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + + +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); } real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_phi() @@ -2818,9 +2818,9 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_phi() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP])- (phi[DIR_PMP] - phi[DIR_MPM]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0])- (phi[DIR_PM0] - phi[DIR_MP0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM]))) + + WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) + + +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); } real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_phi() @@ -2828,9 +2828,9 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_phi() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + + +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); } real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_rhoInv(real rhoL,real rhoDIV) @@ -2838,9 +2838,9 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_rhoInv(real r using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0/(rhoL+rhoDIV*phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP])))) - + WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_P0P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0M])) + (1.0 / (rhoL + rhoDIV * phi[DIR_P0M]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0P]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PM0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MP0])) + (1.0 / (rhoL + rhoDIV * phi[DIR_PP0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MM0]))))) + - +WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_P00]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M00]))); + return 3.0 * ((WEIGTH[dPPP] * (((1.0/(rhoL+rhoDIV*phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) + (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) + (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) + + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) + (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0])) + (1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0]))))) + + +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[dP00]) - 1.0 / (rhoL + rhoDIV * phi[dM00]))); } real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_rhoInv(real rhoL,real rhoDIV) @@ -2848,9 +2848,9 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_rhoInv(real r using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])))) - + WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_0PP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_0PM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PP0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MM0])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PM0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MP0]))))) + - +WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_0P0]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0M0]))); + return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])) - (1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])))) + + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM])) + (1.0 / (rhoL + rhoDIV * phi[d0PM]) - 1.0 / (rhoL + rhoDIV * phi[d0MP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPP0]) - 1.0 / (rhoL + rhoDIV * phi[dMM0])) - (1.0 / (rhoL + rhoDIV * phi[dPM0]) - 1.0 / (rhoL + rhoDIV * phi[dMP0]))))) + + +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d0P0]) - 1.0 / (rhoL + rhoDIV * phi[d0M0]))); } real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_rhoInv(real rhoL, real rhoDIV) @@ -2858,9 +2858,9 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_rhoInv(real r using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((1.0 / (rhoL + rhoDIV * phi[DIR_PPP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PMM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPP]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_PMP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MPM])) - (1.0 / (rhoL + rhoDIV * phi[DIR_PPM]) - 1.0 / (rhoL + rhoDIV * phi[DIR_MMP])))) - + WEIGTH[DIR_PP0] * (((1.0 / (rhoL + rhoDIV * phi[DIR_P0P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0M])) - (1.0 / (rhoL + rhoDIV * phi[DIR_P0M]) - 1.0 / (rhoL + rhoDIV * phi[DIR_M0P]))) + ((1.0 / (rhoL + rhoDIV * phi[DIR_0MP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0PM])) + (1.0 / (rhoL + rhoDIV * phi[DIR_0PP]) - 1.0 / (rhoL + rhoDIV * phi[DIR_0MM]))))) + - +WEIGTH[DIR_0P0] * (1.0 / (rhoL + rhoDIV * phi[DIR_00P]) - 1.0 / (rhoL + rhoDIV * phi[DIR_00M]))); + return 3.0 * ((WEIGTH[dPPP] * (((1.0 / (rhoL + rhoDIV * phi[dPPP]) - 1.0 / (rhoL + rhoDIV * phi[dMMM])) - (1.0 / (rhoL + rhoDIV * phi[dPMM]) - 1.0 / (rhoL + rhoDIV * phi[dMPP]))) + ((1.0 / (rhoL + rhoDIV * phi[dPMP]) - 1.0 / (rhoL + rhoDIV * phi[dMPM])) - (1.0 / (rhoL + rhoDIV * phi[dPPM]) - 1.0 / (rhoL + rhoDIV * phi[dMMP])))) + + WEIGTH[dPP0] * (((1.0 / (rhoL + rhoDIV * phi[dP0P]) - 1.0 / (rhoL + rhoDIV * phi[dM0M])) - (1.0 / (rhoL + rhoDIV * phi[dP0M]) - 1.0 / (rhoL + rhoDIV * phi[dM0P]))) + ((1.0 / (rhoL + rhoDIV * phi[d0MP]) - 1.0 / (rhoL + rhoDIV * phi[d0PM])) + (1.0 / (rhoL + rhoDIV * phi[d0PP]) - 1.0 / (rhoL + rhoDIV * phi[d0MM]))))) + + +WEIGTH[d0P0] * (1.0 / (rhoL + rhoDIV * phi[d00P]) - 1.0 / (rhoL + rhoDIV * phi[d00M]))); } real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_phi2() @@ -2868,9 +2868,9 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX1_phi2() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) + (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) + (phi2[DIR_PPM] - phi2[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) + (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_PM0] - phi2[DIR_MP0]) + (phi2[DIR_PP0] - phi2[DIR_MM0])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_P00] - phi2[DIR_M00])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP]))) + + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) + + +WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00])); } real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_phi2() @@ -2878,9 +2878,9 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX2_phi2() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PPM] - phi2[DIR_MMP]) - (phi2[DIR_PMP] - phi2[DIR_MPM]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_0PP] - phi2[DIR_0MM]) + (phi2[DIR_0PM] - phi2[DIR_0MP])) + ((phi2[DIR_PP0] - phi2[DIR_MM0]) - (phi2[DIR_PM0] - phi2[DIR_MP0])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_0P0] - phi2[DIR_0M0])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM]))) + + WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) + + +WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0])); } real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_phi2() @@ -2888,9 +2888,9 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::gradX3_phi2() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) + + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + + +WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); } real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::nabla2_phi() @@ -2899,17 +2899,17 @@ real MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::nabla2_phi() using namespace vf::lbm::dir; real sum = 0.0; - sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000]))) - + (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000])))); - sum += WEIGTH[DIR_0PP] * ( - (((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000]))) - + (((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000]))) - + (((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000]))) + sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) + + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); + sum += WEIGTH[d0PP] * ( + (((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) + + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) + + (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))) ); - sum += WEIGTH[DIR_00P] * ( - ((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000])) - + ((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000])) - + ((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000])) + sum += WEIGTH[d00P] * ( + ((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) + + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) + + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])) ); @@ -2940,35 +2940,35 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::computePhasefield() int x2p = x2 + 1; int x3p = x3 + 1; - h[DIR_P00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - h[DIR_0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - h[DIR_00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - h[DIR_PP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - h[DIR_MP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - h[DIR_P0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - h[DIR_M0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - h[DIR_0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - h[DIR_0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - h[DIR_PPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - h[DIR_MPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - h[DIR_PMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - h[DIR_MMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[DIR_M00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - h[DIR_0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - h[DIR_00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - h[DIR_MM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - h[DIR_PM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - h[DIR_M0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - h[DIR_P0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - h[DIR_0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - h[DIR_0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - h[DIR_MMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[DIR_PMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[DIR_MPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[DIR_PPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[DIR_000] = (*this->zeroDistributionsH1)(x1, x2, x3); + h[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); + h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); + h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); + h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); + h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); + h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); + h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); + h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); + h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); + h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); + h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); + h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); + h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); + + h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); + h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); + h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); + h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); + h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); + h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); + h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); + h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); + h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); + h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); + h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); + h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); + h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); + + h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3); } } } @@ -2984,9 +2984,9 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::findNeighbors(CbArra SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - phi[DIR_000] = (*ph)(x1, x2, x3); - if (phi[DIR_000] < 0) { - phi[DIR_000] = c0o1; + phi[d000] = (*ph)(x1, x2, x3); + if (phi[d000] < 0) { + phi[d000] = c0o1; } @@ -3009,7 +3009,7 @@ void MultiphaseSimpleVelocityBaseExternalPressureLBMKernel::findNeighbors2(CbArr SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - phi2[DIR_000] = (*ph)(x1, x2, x3); + phi2[d000] = (*ph)(x1, x2, x3); for (int k = FSTARTDIR; k <= FENDDIR; k++) { diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp index 8abd71133dd7088199066b1de0975b8efb16ebc8..30e4fa4f8e634dfc629a37ac3e405f245168beff 100644 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp +++ b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsCumulantLBMKernel.cpp @@ -356,13 +356,13 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step) - collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[DIR_000] - phiH) / (phiH - phiL); + collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL); - real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi(); + real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); //----------- Calculating Macroscopic Values ------------- - real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH); + real rho = rhoH + rhoToPhi * (phi[d000] - phiH); ////Incompressible Kernal @@ -456,9 +456,9 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step) // vvxF = vvxF; //} real weightGrad = 1.0;// -denom * denom / (denom * denom + 0.0001 * 0.001); - real dX1_phiF = dX1_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * normX1; - real dX2_phiF = dX2_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * normX2; - real dX3_phiF = dX3_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * normX3; + real dX1_phiF = dX1_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX1; + real dX2_phiF = dX2_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX2; + real dX3_phiF = dX3_phi * weightGrad + (1.0 - weightGrad) * (1.0 - phi[d000]) * (phi[d000]) * normX3; //dX1_phiF *= 1.2; //dX2_phiF *= 1.2; @@ -508,15 +508,15 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step) } - real gamma = WEIGTH[DIR_000] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); - real fac1 = (gamma - WEIGTH[DIR_000]) * c1o3 * rhoToPhi; - forcingTerm[DIR_000] = (-vvxF) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) + + real gamma = WEIGTH[d000] * (1.0 - 1.5 * (ux2 + uy2 + uz2)); + real fac1 = (gamma - WEIGTH[d000]) * c1o3 * rhoToPhi; + forcingTerm[d000] = (-vvxF) * (fac1 * (dX1_phiF * rhoH + dX2_phi2 * rhoL)) + (-vvyF) * (fac1 * (dX2_phiF * rhoH + dX2_phi2 * rhoL)) + (-vvzF) * (fac1 * (dX3_phiF * rhoH + dX3_phi2 * rhoL)); //////// // LBMReal divAfterSource= - //( mfcbb + 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF) *(vvzF)-1)+ + //( mfcbb + 3.0 * (0.5 * forcingTerm[dP00]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF) *(vvzF)-1)+ //( mfbcb + 3.0 * (0.5 * forcingTerm[N]) / rho ) *((vvxF) *(vvxF) +(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ //( mfbbc + 3.0 * (0.5 * forcingTerm[T]) / rho ) *((vvxF) *(vvxF) +(vvyF) *(vvyF) +(vvzF-1)*(vvzF-1)-1)+ //( mfccb + 3.0 * (0.5 * forcingTerm[NE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ @@ -579,7 +579,7 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step) //if (fabs(divAfterSource - divBeforeSource)/(fabs(divAfterSource) + fabs(divBeforeSource)+1e-10) > 1e-5) { // LBMReal scaleDiv =0.95+(1-0.95)* (divBeforeSource) / (divBeforeSource - divAfterSource); - // forcingTerm[DIR_P00] *=scaleDiv; + // forcingTerm[dP00] *=scaleDiv; // forcingTerm[N] *=scaleDiv; // forcingTerm[T] *=scaleDiv; // forcingTerm[NE] *=scaleDiv; @@ -610,33 +610,33 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step) //////// - mfcbb += 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; - mfbcb += 3.0 * (0.5 * forcingTerm[DIR_0P0]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; - mfbbc += 3.0 * (0.5 * forcingTerm[DIR_00P]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; - mfccb += 3.0 * (0.5 * forcingTerm[DIR_PP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; - mfacb += 3.0 * (0.5 * forcingTerm[DIR_MP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; - mfcbc += 3.0 * (0.5 * forcingTerm[DIR_P0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; - mfabc += 3.0 * (0.5 * forcingTerm[DIR_M0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; - mfbcc += 3.0 * (0.5 * forcingTerm[DIR_0PP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; - mfbac += 3.0 * (0.5 * forcingTerm[DIR_0MP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; - mfccc += 3.0 * (0.5 * forcingTerm[DIR_PPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; - mfacc += 3.0 * (0.5 * forcingTerm[DIR_MPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; - mfcac += 3.0 * (0.5 * forcingTerm[DIR_PMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; - mfaac += 3.0 * (0.5 * forcingTerm[DIR_MMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; - mfabb += 3.0 * (0.5 * forcingTerm[DIR_M00]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; - mfbab += 3.0 * (0.5 * forcingTerm[DIR_0M0]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; - mfbba += 3.0 * (0.5 * forcingTerm[DIR_00M]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; - mfaab += 3.0 * (0.5 * forcingTerm[DIR_MM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; - mfcab += 3.0 * (0.5 * forcingTerm[DIR_PM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; - mfaba += 3.0 * (0.5 * forcingTerm[DIR_M0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; - mfcba += 3.0 * (0.5 * forcingTerm[DIR_P0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; - mfbaa += 3.0 * (0.5 * forcingTerm[DIR_0MM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; - mfbca += 3.0 * (0.5 * forcingTerm[DIR_0PM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; - mfaaa += 3.0 * (0.5 * forcingTerm[DIR_MMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; - mfcaa += 3.0 * (0.5 * forcingTerm[DIR_PMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; - mfaca += 3.0 * (0.5 * forcingTerm[DIR_MPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; - mfcca += 3.0 * (0.5 * forcingTerm[DIR_PPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; - mfbbb += 3.0 * (0.5 * forcingTerm[DIR_000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST] + mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; + mfbcb += 3.0 * (0.5 * forcingTerm[d0P0]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; + mfbbc += 3.0 * (0.5 * forcingTerm[d00P]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; + mfccb += 3.0 * (0.5 * forcingTerm[dPP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; + mfacb += 3.0 * (0.5 * forcingTerm[dMP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; + mfcbc += 3.0 * (0.5 * forcingTerm[dP0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; + mfabc += 3.0 * (0.5 * forcingTerm[dM0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; + mfbcc += 3.0 * (0.5 * forcingTerm[d0PP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; + mfbac += 3.0 * (0.5 * forcingTerm[d0MP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; + mfccc += 3.0 * (0.5 * forcingTerm[dPPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; + mfacc += 3.0 * (0.5 * forcingTerm[dMPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; + mfcac += 3.0 * (0.5 * forcingTerm[dPMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; + mfaac += 3.0 * (0.5 * forcingTerm[dMMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; + mfabb += 3.0 * (0.5 * forcingTerm[dM00]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; + mfbab += 3.0 * (0.5 * forcingTerm[d0M0]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; + mfbba += 3.0 * (0.5 * forcingTerm[d00M]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; + mfaab += 3.0 * (0.5 * forcingTerm[dMM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; + mfcab += 3.0 * (0.5 * forcingTerm[dPM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; + mfaba += 3.0 * (0.5 * forcingTerm[dM0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; + mfcba += 3.0 * (0.5 * forcingTerm[dP0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; + mfbaa += 3.0 * (0.5 * forcingTerm[d0MM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; + mfbca += 3.0 * (0.5 * forcingTerm[d0PM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; + mfaaa += 3.0 * (0.5 * forcingTerm[dMMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; + mfcaa += 3.0 * (0.5 * forcingTerm[dPMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; + mfaca += 3.0 * (0.5 * forcingTerm[dMPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; + mfcca += 3.0 * (0.5 * forcingTerm[dPPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; + mfbbb += 3.0 * (0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST] //-------------------------------------------------------- @@ -950,7 +950,7 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step) real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); // LBMReal Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::DIR_00M' ) + //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' ) real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); @@ -1354,33 +1354,33 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step) /////classical source term 8.4.2021 - mfcbb += 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; - mfbcb += 3.0 * (0.5 * forcingTerm[DIR_0P0]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; - mfbbc += 3.0 * (0.5 * forcingTerm[DIR_00P]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; - mfccb += 3.0 * (0.5 * forcingTerm[DIR_PP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; - mfacb += 3.0 * (0.5 * forcingTerm[DIR_MP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; - mfcbc += 3.0 * (0.5 * forcingTerm[DIR_P0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; - mfabc += 3.0 * (0.5 * forcingTerm[DIR_M0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; - mfbcc += 3.0 * (0.5 * forcingTerm[DIR_0PP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; - mfbac += 3.0 * (0.5 * forcingTerm[DIR_0MP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; - mfccc += 3.0 * (0.5 * forcingTerm[DIR_PPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; - mfacc += 3.0 * (0.5 * forcingTerm[DIR_MPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; - mfcac += 3.0 * (0.5 * forcingTerm[DIR_PMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; - mfaac += 3.0 * (0.5 * forcingTerm[DIR_MMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; - mfabb += 3.0 * (0.5 * forcingTerm[DIR_M00]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; - mfbab += 3.0 * (0.5 * forcingTerm[DIR_0M0]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; - mfbba += 3.0 * (0.5 * forcingTerm[DIR_00M]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; - mfaab += 3.0 * (0.5 * forcingTerm[DIR_MM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; - mfcab += 3.0 * (0.5 * forcingTerm[DIR_PM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; - mfaba += 3.0 * (0.5 * forcingTerm[DIR_M0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; - mfcba += 3.0 * (0.5 * forcingTerm[DIR_P0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; - mfbaa += 3.0 * (0.5 * forcingTerm[DIR_0MM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; - mfbca += 3.0 * (0.5 * forcingTerm[DIR_0PM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; - mfaaa += 3.0 * (0.5 * forcingTerm[DIR_MMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; - mfcaa += 3.0 * (0.5 * forcingTerm[DIR_PMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; - mfaca += 3.0 * (0.5 * forcingTerm[DIR_MPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; - mfcca += 3.0 * (0.5 * forcingTerm[DIR_PPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; - mfbbb += 3.0 * (0.5 * forcingTerm[DIR_000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST] + mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; + mfbcb += 3.0 * (0.5 * forcingTerm[d0P0]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; + mfbbc += 3.0 * (0.5 * forcingTerm[d00P]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; + mfccb += 3.0 * (0.5 * forcingTerm[dPP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; + mfacb += 3.0 * (0.5 * forcingTerm[dMP0]) / rho; //-(3.0*p1 - rho)*WEIGTH[NW ]; + mfcbc += 3.0 * (0.5 * forcingTerm[dP0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TE ]; + mfabc += 3.0 * (0.5 * forcingTerm[dM0P]) / rho; //-(3.0*p1 - rho)*WEIGTH[TW ]; + mfbcc += 3.0 * (0.5 * forcingTerm[d0PP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TN ]; + mfbac += 3.0 * (0.5 * forcingTerm[d0MP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TS ]; + mfccc += 3.0 * (0.5 * forcingTerm[dPPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNE]; + mfacc += 3.0 * (0.5 * forcingTerm[dMPP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TNW]; + mfcac += 3.0 * (0.5 * forcingTerm[dPMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSE]; + mfaac += 3.0 * (0.5 * forcingTerm[dMMP]) / rho; //-(3.0*p1 - rho)*WEIGTH[TSW]; + mfabb += 3.0 * (0.5 * forcingTerm[dM00]) / rho; //-(3.0*p1 - rho)*WEIGTH[W ]; + mfbab += 3.0 * (0.5 * forcingTerm[d0M0]) / rho; //-(3.0*p1 - rho)*WEIGTH[S ]; + mfbba += 3.0 * (0.5 * forcingTerm[d00M]) / rho; //-(3.0*p1 - rho)*WEIGTH[B ]; + mfaab += 3.0 * (0.5 * forcingTerm[dMM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SW ]; + mfcab += 3.0 * (0.5 * forcingTerm[dPM0]) / rho; //-(3.0*p1 - rho)*WEIGTH[SE ]; + mfaba += 3.0 * (0.5 * forcingTerm[dM0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BW ]; + mfcba += 3.0 * (0.5 * forcingTerm[dP0M]) / rho; //-(3.0*p1 - rho)*WEIGTH[BE ]; + mfbaa += 3.0 * (0.5 * forcingTerm[d0MM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BS ]; + mfbca += 3.0 * (0.5 * forcingTerm[d0PM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BN ]; + mfaaa += 3.0 * (0.5 * forcingTerm[dMMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSW]; + mfcaa += 3.0 * (0.5 * forcingTerm[dPMM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BSE]; + mfaca += 3.0 * (0.5 * forcingTerm[dMPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNW]; + mfcca += 3.0 * (0.5 * forcingTerm[dPPM]) / rho; //-(3.0*p1 - rho)*WEIGTH[BNE]; + mfbbb += 3.0 * (0.5 * forcingTerm[d000]) / rho; //- (3.0*p1 - rho)*WEIGTH[REST] @@ -1497,7 +1497,7 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step) // // //-------------------------------------------------------- // -// mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[DIR_P00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; +// mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; // mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[N]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; // mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[T]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; // mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[NE]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; @@ -2205,7 +2205,7 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step) // } //#endif // -// mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[DIR_P00]; +// mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00]; // mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[N]; // mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[T]; // mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[NE]; @@ -2432,11 +2432,11 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step) cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + - normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + - normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + - normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx; //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy; @@ -2745,11 +2745,11 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step) // collision of 1st order moments cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + - normX1 * (c1o1 - 0.5 * omegaD) * ( phi[DIR_000]) * (phi2[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX1 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale; cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + - normX2 * (c1o1 - 0.5 * omegaD) * ( phi[DIR_000]) * (phi2[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX2 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale; cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + - normX3 * (c1o1 - 0.5 * omegaD) * ( phi[DIR_000]) * (phi2[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX3 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale; //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx; //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy; @@ -2902,7 +2902,7 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::calculate(int step) ///////////////////// PHASE-FIELD BGK SOLVER /////////////////////////////// - //h[DIR_P00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); + //h[dP00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); //h[N] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); //h[T] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); //h[NE] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); @@ -2996,9 +2996,9 @@ real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX1_phi() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0* ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00])); + return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + + +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX1[k] * phi[k]; @@ -3011,9 +3011,9 @@ real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX2_phi() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP])- (phi[DIR_PMP] - phi[DIR_MPM]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0])- (phi[DIR_PM0] - phi[DIR_MP0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM]))) + + WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) + + +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX2[k] * phi[k]; @@ -3026,9 +3026,9 @@ real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX3_phi() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + + +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX3[k] * phi[k]; @@ -3041,9 +3041,9 @@ real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX1_phi2() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) + (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) + (phi2[DIR_PPM] - phi2[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) + (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_PM0] - phi2[DIR_MP0]) + (phi2[DIR_PP0] - phi2[DIR_MM0])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_P00] - phi2[DIR_M00])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP]))) + + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) + + +WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX1[k] * phi2[k]; @@ -3056,9 +3056,9 @@ real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX2_phi2() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PPM] - phi2[DIR_MMP]) - (phi2[DIR_PMP] - phi2[DIR_MPM]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_0PP] - phi2[DIR_0MM]) + (phi2[DIR_0PM] - phi2[DIR_0MP])) + ((phi2[DIR_PP0] - phi2[DIR_MM0]) - (phi2[DIR_PM0] - phi2[DIR_MP0])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_0P0] - phi2[DIR_0M0])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM]))) + + WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) + + +WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX2[k] * phi2[k]; @@ -3071,9 +3071,9 @@ real MultiphaseTwoPhaseFieldsCumulantLBMKernel::gradX3_phi2() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) + + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + + +WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX3[k] * phi2[k]; @@ -3091,17 +3091,17 @@ real MultiphaseTwoPhaseFieldsCumulantLBMKernel::nabla2_phi() using namespace vf::lbm::dir; real sum = 0.0; - sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000]))) - + (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000])))); - sum += WEIGTH[DIR_0PP] * ( - (((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000]))) - + (((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000]))) - + (((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000]))) + sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) + + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); + sum += WEIGTH[d0PP] * ( + (((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) + + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) + + (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))) ); - sum += WEIGTH[DIR_00P] * ( - ((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000])) - + ((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000])) - + ((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000])) + sum += WEIGTH[d00P] * ( + ((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) + + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) + + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])) ); //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * (phi[k] - phi[REST]); @@ -3133,35 +3133,35 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::computePhasefield() int x2p = x2 + 1; int x3p = x3 + 1; - h[DIR_P00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - h[DIR_0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - h[DIR_00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - h[DIR_PP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - h[DIR_MP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - h[DIR_P0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - h[DIR_M0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - h[DIR_0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - h[DIR_0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - h[DIR_PPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - h[DIR_MPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - h[DIR_PMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - h[DIR_MMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[DIR_M00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - h[DIR_0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - h[DIR_00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - h[DIR_MM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - h[DIR_PM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - h[DIR_M0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - h[DIR_P0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - h[DIR_0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - h[DIR_0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - h[DIR_MMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[DIR_PMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[DIR_MPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[DIR_PPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[DIR_000] = (*this->zeroDistributionsH1)(x1, x2, x3); + h[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); + h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); + h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); + h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); + h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); + h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); + h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); + h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); + h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); + h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); + h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); + h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); + h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); + + h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); + h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); + h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); + h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); + h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); + h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); + h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); + h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); + h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); + h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); + h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); + h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); + h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); + + h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3); } } } @@ -3176,7 +3176,7 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::findNeighbors(CbArray3D<real, In SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - phi[DIR_000] = (*ph)(x1, x2, x3); + phi[d000] = (*ph)(x1, x2, x3); for (int k = FSTARTDIR; k <= FENDDIR; k++) { @@ -3197,7 +3197,7 @@ void MultiphaseTwoPhaseFieldsCumulantLBMKernel::findNeighbors2(CbArray3D<real, I SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - phi2[DIR_000] = (*ph)(x1, x2, x3); + phi2[d000] = (*ph)(x1, x2, x3); for (int k = FSTARTDIR; k <= FENDDIR; k++) { diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.cpp index 8a6c2bde6d5031a1b379bdd391aaa1051ca6217f..df28e16d1a717418aa0474ad4e74c7e85878bdf6 100644 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.cpp +++ b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsPressureFilterLBMKernel.cpp @@ -578,13 +578,13 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step) - collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[DIR_000] - phiH) / (phiH - phiL); + collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL); - real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi(); + real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); //----------- Calculating Macroscopic Values ------------- - real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH); + real rho = rhoH + rhoToPhi * (phi[d000] - phiH); //! variable density -> TRANSFER! //LBMReal rho = rhoH * ((*phaseField)(x1, x2, x3)) + rhoL * ((*phaseField2)(x1, x2, x3)); @@ -652,7 +652,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step) // + WEIGTH[NE] * ( // (((*pressure)(x1 + 1, x2 + 1, x3) - (*pressure)(x1 - 1, x2 - 1, x3)) + ((*pressure)(x1 + 1, x2 - 1, x3) - (*pressure)(x1 - 1, x2 + 1, x3))) // + (((*pressure)(x1 + 1, x2, x3 - 1) - (*pressure)(x1 - 1, x2, x3 + 1)) + ((*pressure)(x1 + 1, x2, x3 + 1) - (*pressure)(x1 - 1, x2, x3 - 1)))) - // + WEIGTH[DIR_P00] * ((*pressure)(x1 + 1, x2, x3) - (*pressure)(x1 - 1, x2, x3))); + // + WEIGTH[dP00] * ((*pressure)(x1 + 1, x2, x3) - (*pressure)(x1 - 1, x2, x3))); //LBMReal gradPy = 3.0 * (WEIGTH[TNE] * ( // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 - 1, x2 + 1, x3 + 1) - (*pressure)(x1 + 1, x2 - 1, x3 - 1))) @@ -660,7 +660,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step) // + WEIGTH[NE] * ( // (((*pressure)(x1 + 1, x2 + 1, x3) - (*pressure)(x1 - 1, x2 - 1, x3)) + ((*pressure)(x1 - 1, x2 + 1, x3) - (*pressure)(x1 + 1, x2 - 1, x3))) // + (((*pressure)(x1, x2+1, x3 - 1) - (*pressure)(x1, x2-1, x3 + 1)) + ((*pressure)(x1, x2+1, x3 + 1) - (*pressure)(x1, x2-1, x3 - 1)))) - // + WEIGTH[DIR_P00] * ((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2-1, x3))); + // + WEIGTH[dP00] * ((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2-1, x3))); //LBMReal gradPz = 3.0 * (WEIGTH[TNE] * ( // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 - 1, x2 + 1, x3 + 1) - (*pressure)(x1 + 1, x2 - 1, x3 - 1))) @@ -668,7 +668,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step) // + WEIGTH[NE] * ( // (((*pressure)(x1 + 1, x2, x3+1) - (*pressure)(x1 - 1, x2, x3-1)) + ((*pressure)(x1 - 1, x2, x3+1) - (*pressure)(x1 + 1, x2, x3-1))) // + (((*pressure)(x1, x2 - 1, x3 + 1) - (*pressure)(x1, x2 + 1, x3 - 1)) + ((*pressure)(x1, x2 + 1, x3 + 1) - (*pressure)(x1, x2 - 1, x3 - 1)))) - // + WEIGTH[DIR_P00] * ((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3-1))); + // + WEIGTH[dP00] * ((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3-1))); real gradPx = 0.0; @@ -723,7 +723,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step) } //Viscosity increase by pressure gradient - real errPhi = (((1.0 - phi[DIR_000]) * (phi[DIR_000]) * oneOverInterfaceScale)- denom); + real errPhi = (((1.0 - phi[d000]) * (phi[d000]) * oneOverInterfaceScale)- denom); //LBMReal limVis = 0.0000001*10;//0.01; // collFactorM =collFactorM/(c1+limVis*(errPhi*errPhi)*collFactorM); // collFactorM = (collFactorM < 1.8) ? 1.8 : collFactorM; @@ -846,7 +846,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step) //////// // LBMReal divAfterSource= - //( mfcbb + 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF) *(vvzF)-1)+ + //( mfcbb + 3.0 * (0.5 * forcingTerm[dP00]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF) *(vvzF)-1)+ //( mfbcb + 3.0 * (0.5 * forcingTerm[N]) / rho ) *((vvxF) *(vvxF) +(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ //( mfbbc + 3.0 * (0.5 * forcingTerm[T]) / rho ) *((vvxF) *(vvxF) +(vvyF) *(vvyF) +(vvzF-1)*(vvzF-1)-1)+ //( mfccb + 3.0 * (0.5 * forcingTerm[NE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ @@ -909,7 +909,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step) //if (fabs(divAfterSource - divBeforeSource)/(fabs(divAfterSource) + fabs(divBeforeSource)+1e-10) > 1e-5) { // LBMReal scaleDiv =0.95+(1-0.95)* (divBeforeSource) / (divBeforeSource - divAfterSource); - // forcingTerm[DIR_P00] *=scaleDiv; + // forcingTerm[dP00] *=scaleDiv; // forcingTerm[N] *=scaleDiv; // forcingTerm[T] *=scaleDiv; // forcingTerm[NE] *=scaleDiv; @@ -940,7 +940,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step) //////// - //mfcbb += 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; + //mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; //mfbcb += 3.0 * (0.5 * forcingTerm[N]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; //mfbbc += 3.0 * (0.5 * forcingTerm[T]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; //mfccb += 3.0 * (0.5 * forcingTerm[NE]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; @@ -1283,7 +1283,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step) real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); // real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::DIR_00M' ) + //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' ) real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); @@ -1708,7 +1708,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step) /////classical source term 8.4.2021 - //mfcbb += 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; + //mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; //mfbcb += 3.0 * (0.5 * forcingTerm[N]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; //mfbbc += 3.0 * (0.5 * forcingTerm[T]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; //mfccb += 3.0 * (0.5 * forcingTerm[NE]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; @@ -1856,7 +1856,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step) // // //-------------------------------------------------------- // -// mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[DIR_P00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; +// mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; // mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[N]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; // mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[T]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; // mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[NE]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; @@ -2564,7 +2564,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step) // } //#endif // -// mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[DIR_P00]; +// mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00]; // mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[N]; // mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[T]; // mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[NE]; @@ -2791,11 +2791,11 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step) cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + - normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + - normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + - normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; //cx = cx * (c1 - omegaD) + omegaD * vvx * concentration + // normX1 * (c1 - 0.5 * omegaD) * (1.0 - phi[REST]) * (phi[REST])*(phi[REST]+phi2[REST]) * c1o3 * oneOverInterfaceScale; @@ -3111,11 +3111,11 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step) // collision of 1st order moments cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + - normX1 * (c1o1 - 0.5 * omegaD) * ( phi[DIR_000]) * (phi2[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX1 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale; cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + - normX2 * (c1o1 - 0.5 * omegaD) * ( phi[DIR_000]) * (phi2[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX2 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale; cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + - normX3 * (c1o1 - 0.5 * omegaD) * ( phi[DIR_000]) * (phi2[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX3 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale; //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx; //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy; @@ -3268,7 +3268,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::calculate(int step) ///////////////////// PHASE-FIELD BGK SOLVER /////////////////////////////// - //h[DIR_P00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); + //h[dP00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); //h[N] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); //h[T] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); //h[NE] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); @@ -3362,9 +3362,9 @@ real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX1_phi() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0* ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00])); + return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + + +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX1[k] * phi[k]; @@ -3377,9 +3377,9 @@ real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX2_phi() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP])- (phi[DIR_PMP] - phi[DIR_MPM]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0])- (phi[DIR_PM0] - phi[DIR_MP0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM]))) + + WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) + + +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX2[k] * phi[k]; @@ -3392,9 +3392,9 @@ real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX3_phi() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + + +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX3[k] * phi[k]; @@ -3407,9 +3407,9 @@ real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX1_phi2() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) + (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) + (phi2[DIR_PPM] - phi2[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) + (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_PM0] - phi2[DIR_MP0]) + (phi2[DIR_PP0] - phi2[DIR_MM0])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_P00] - phi2[DIR_M00])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP]))) + + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) + + +WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX1[k] * phi2[k]; @@ -3422,9 +3422,9 @@ real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX2_phi2() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PPM] - phi2[DIR_MMP]) - (phi2[DIR_PMP] - phi2[DIR_MPM]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_0PP] - phi2[DIR_0MM]) + (phi2[DIR_0PM] - phi2[DIR_0MP])) + ((phi2[DIR_PP0] - phi2[DIR_MM0]) - (phi2[DIR_PM0] - phi2[DIR_MP0])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_0P0] - phi2[DIR_0M0])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM]))) + + WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) + + +WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX2[k] * phi2[k]; @@ -3437,9 +3437,9 @@ real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::gradX3_phi2() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) + + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + + +WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX3[k] * phi2[k]; @@ -3457,17 +3457,17 @@ real MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::nabla2_phi() using namespace vf::lbm::dir; real sum = 0.0; - sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000]))) - + (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000])))); - sum += WEIGTH[DIR_0PP] * ( - (((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000]))) - + (((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000]))) - + (((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000]))) + sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) + + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); + sum += WEIGTH[d0PP] * ( + (((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) + + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) + + (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))) ); - sum += WEIGTH[DIR_00P] * ( - ((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000])) - + ((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000])) - + ((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000])) + sum += WEIGTH[d00P] * ( + ((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) + + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) + + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])) ); //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * (phi[k] - phi[REST]); @@ -3499,35 +3499,35 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::computePhasefield() int x2p = x2 + 1; int x3p = x3 + 1; - h[DIR_P00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - h[DIR_0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - h[DIR_00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - h[DIR_PP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - h[DIR_MP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - h[DIR_P0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - h[DIR_M0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - h[DIR_0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - h[DIR_0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - h[DIR_PPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - h[DIR_MPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - h[DIR_PMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - h[DIR_MMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[DIR_M00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - h[DIR_0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - h[DIR_00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - h[DIR_MM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - h[DIR_PM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - h[DIR_M0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - h[DIR_P0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - h[DIR_0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - h[DIR_0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - h[DIR_MMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[DIR_PMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[DIR_MPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[DIR_PPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[DIR_000] = (*this->zeroDistributionsH1)(x1, x2, x3); + h[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); + h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); + h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); + h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); + h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); + h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); + h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); + h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); + h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); + h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); + h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); + h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); + h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); + + h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); + h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); + h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); + h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); + h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); + h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); + h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); + h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); + h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); + h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); + h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); + h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); + h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); + + h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3); } } } @@ -3542,7 +3542,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::findNeighbors(CbArray3D<re SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - phi[DIR_000] = (*ph)(x1, x2, x3); + phi[d000] = (*ph)(x1, x2, x3); for (int k = FSTARTDIR; k <= FENDDIR; k++) { @@ -3563,7 +3563,7 @@ void MultiphaseTwoPhaseFieldsPressureFilterLBMKernel::findNeighbors2(CbArray3D<r SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - phi2[DIR_000] = (*ph)(x1, x2, x3); + phi2[d000] = (*ph)(x1, x2, x3); for (int k = FSTARTDIR; k <= FENDDIR; k++) { diff --git a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.cpp b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.cpp index ef0d033bc0c255d02e51a08fa1a0a85d1b20f0b4..d15714f6f8da63e020a7ee40ea953779e25e46c6 100644 --- a/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.cpp +++ b/src/cpu/MultiphaseFlow/LBM/MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel.cpp @@ -305,7 +305,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step) + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH); + real rho = rhoH + rhoToPhi * (phi[d000] - phiH); (*pressure)(x1, x2, x3) = (*pressure)(x1, x2, x3) + rho * c1o3 * drho; ////!!!!!! relplace by pointer swap! @@ -555,13 +555,13 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step) - collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[DIR_000] - phiH) / (phiH - phiL); + collFactorM = collFactorL + (collFactorL - collFactorG) * (phi[d000] - phiH) / (phiH - phiL); - real mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi(); + real mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(); //----------- Calculating Macroscopic Values ------------- - real rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH); + real rho = rhoH + rhoToPhi * (phi[d000] - phiH); ////Incompressible Kernal @@ -625,7 +625,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step) // + WEIGTH[NE] * ( // (((*pressure)(x1 + 1, x2 + 1, x3) - (*pressure)(x1 - 1, x2 - 1, x3)) + ((*pressure)(x1 + 1, x2 - 1, x3) - (*pressure)(x1 - 1, x2 + 1, x3))) // + (((*pressure)(x1 + 1, x2, x3 - 1) - (*pressure)(x1 - 1, x2, x3 + 1)) + ((*pressure)(x1 + 1, x2, x3 + 1) - (*pressure)(x1 - 1, x2, x3 - 1)))) - // + WEIGTH[DIR_P00] * ((*pressure)(x1 + 1, x2, x3) - (*pressure)(x1 - 1, x2, x3))); + // + WEIGTH[dP00] * ((*pressure)(x1 + 1, x2, x3) - (*pressure)(x1 - 1, x2, x3))); //LBMReal gradPy = 3.0 * (WEIGTH[TNE] * ( // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 - 1, x2 + 1, x3 + 1) - (*pressure)(x1 + 1, x2 - 1, x3 - 1))) @@ -633,7 +633,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step) // + WEIGTH[NE] * ( // (((*pressure)(x1 + 1, x2 + 1, x3) - (*pressure)(x1 - 1, x2 - 1, x3)) + ((*pressure)(x1 - 1, x2 + 1, x3) - (*pressure)(x1 + 1, x2 - 1, x3))) // + (((*pressure)(x1, x2+1, x3 - 1) - (*pressure)(x1, x2-1, x3 + 1)) + ((*pressure)(x1, x2+1, x3 + 1) - (*pressure)(x1, x2-1, x3 - 1)))) - // + WEIGTH[DIR_P00] * ((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2-1, x3))); + // + WEIGTH[dP00] * ((*pressure)(x1, x2+1, x3) - (*pressure)(x1, x2-1, x3))); //LBMReal gradPz = 3.0 * (WEIGTH[TNE] * ( // (((*pressure)(x1 + 1, x2 + 1, x3 + 1) - (*pressure)(x1 - 1, x2 - 1, x3 - 1)) + ((*pressure)(x1 - 1, x2 + 1, x3 + 1) - (*pressure)(x1 + 1, x2 - 1, x3 - 1))) @@ -641,7 +641,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step) // + WEIGTH[NE] * ( // (((*pressure)(x1 + 1, x2, x3+1) - (*pressure)(x1 - 1, x2, x3-1)) + ((*pressure)(x1 - 1, x2, x3+1) - (*pressure)(x1 + 1, x2, x3-1))) // + (((*pressure)(x1, x2 - 1, x3 + 1) - (*pressure)(x1, x2 + 1, x3 - 1)) + ((*pressure)(x1, x2 + 1, x3 + 1) - (*pressure)(x1, x2 - 1, x3 - 1)))) - // + WEIGTH[DIR_P00] * ((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3-1))); + // + WEIGTH[dP00] * ((*pressure)(x1, x2, x3+1) - (*pressure)(x1, x2, x3-1))); real gradPx = 0.0; @@ -803,7 +803,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step) //////// // LBMReal divAfterSource= - //( mfcbb + 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF) *(vvzF)-1)+ + //( mfcbb + 3.0 * (0.5 * forcingTerm[dP00]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF) *(vvyF) +(vvzF) *(vvzF)-1)+ //( mfbcb + 3.0 * (0.5 * forcingTerm[N]) / rho ) *((vvxF) *(vvxF) +(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ //( mfbbc + 3.0 * (0.5 * forcingTerm[T]) / rho ) *((vvxF) *(vvxF) +(vvyF) *(vvyF) +(vvzF-1)*(vvzF-1)-1)+ //( mfccb + 3.0 * (0.5 * forcingTerm[NE]) / rho ) *((vvxF-1)*(vvxF-1)+(vvyF-1)*(vvyF-1)+(vvzF) *(vvzF)-1)+ @@ -866,7 +866,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step) //if (fabs(divAfterSource - divBeforeSource)/(fabs(divAfterSource) + fabs(divBeforeSource)+1e-10) > 1e-5) { // LBMReal scaleDiv =0.95+(1-0.95)* (divBeforeSource) / (divBeforeSource - divAfterSource); - // forcingTerm[DIR_P00] *=scaleDiv; + // forcingTerm[dP00] *=scaleDiv; // forcingTerm[N] *=scaleDiv; // forcingTerm[T] *=scaleDiv; // forcingTerm[NE] *=scaleDiv; @@ -897,7 +897,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step) //////// - //mfcbb += 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; + //mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; //mfbcb += 3.0 * (0.5 * forcingTerm[N]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; //mfbbc += 3.0 * (0.5 * forcingTerm[T]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; //mfccb += 3.0 * (0.5 * forcingTerm[NE]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; @@ -1240,7 +1240,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step) real OxyyMxzz = 8.0 * (collFactorM - 2.0) * (collFactorM + OxxPyyPzz * (3.0 * collFactorM - 7.0)) / (OxxPyyPzz * (56.0 - 42.0 * collFactorM + 9.0 * collFactorM * collFactorM) - 8.0 * collFactorM); // real Oxyz = 24.0 * (collFactorM - 2.0) * (4.0 * collFactorM * collFactorM + collFactorM * OxxPyyPzz * (18.0 - 13.0 * collFactorM) + OxxPyyPzz * OxxPyyPzz * (2.0 + collFactorM * (6.0 * collFactorM - 11.0))) / (16.0 * collFactorM * collFactorM * (collFactorM - 6.0) - 2.0 * collFactorM * OxxPyyPzz * (216.0 + 5.0 * collFactorM * (9.0 * collFactorM - 46.0)) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (3.0 * collFactorM - 10.0) * (15.0 * collFactorM - 28.0) - 48.0)); real A = (4.0 * collFactorM * collFactorM + 2.0 * collFactorM * OxxPyyPzz * (collFactorM - 6.0) + OxxPyyPzz * OxxPyyPzz * (collFactorM * (10.0 - 3.0 * collFactorM) - 4.0)) / ((collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); - //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::DIR_00M' ) + //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' ) real BB = (4.0 * collFactorM * OxxPyyPzz * (9.0 * collFactorM - 16.0) - 4.0 * collFactorM * collFactorM - 2.0 * OxxPyyPzz * OxxPyyPzz * (2.0 + 9.0 * collFactorM * (collFactorM - 2.0))) / (3.0 * (collFactorM - OxxPyyPzz) * (OxxPyyPzz * (2.0 + 3.0 * collFactorM) - 8.0 * collFactorM)); @@ -1652,7 +1652,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step) /////classical source term 8.4.2021 - //mfcbb += 3.0 * (0.5 * forcingTerm[DIR_P00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; + //mfcbb += 3.0 * (0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; //mfbcb += 3.0 * (0.5 * forcingTerm[N]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; //mfbbc += 3.0 * (0.5 * forcingTerm[T]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; //mfccb += 3.0 * (0.5 * forcingTerm[NE]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; @@ -1794,7 +1794,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step) // // //-------------------------------------------------------- // -// mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[DIR_P00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; +// mfcbb = 3.0 * (mfcbb + 0.5 * forcingTerm[dP00]) / rho; //-(3.0*p1 - rho)*WEIGTH[E ]; // mfbcb = 3.0 * (mfbcb + 0.5 * forcingTerm[N]) / rho; //-(3.0*p1 - rho)*WEIGTH[N ]; // mfbbc = 3.0 * (mfbbc + 0.5 * forcingTerm[T]) / rho; //-(3.0*p1 - rho)*WEIGTH[T ]; // mfccb = 3.0 * (mfccb + 0.5 * forcingTerm[NE]) / rho; //-(3.0*p1 - rho)*WEIGTH[NE ]; @@ -2502,7 +2502,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step) // } //#endif // -// mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[DIR_P00]; +// mfcbb = rho * c1o3 * (mfcbb) + 0.5 * forcingTerm[dP00]; // mfbcb = rho * c1o3 * (mfbcb) + 0.5 * forcingTerm[N]; // mfbbc = rho * c1o3 * (mfbbc) + 0.5 * forcingTerm[T]; // mfccb = rho * c1o3 * (mfccb) + 0.5 * forcingTerm[NE]; @@ -2729,11 +2729,11 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step) cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + - normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX1 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + - normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX2 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + - normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[DIR_000]) * (phi[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX3 * (c1o1 - 0.5 * omegaD) * (1.0 - phi[d000]) * (phi[d000]) * c1o3 * oneOverInterfaceScale; //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx; //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy; @@ -3042,11 +3042,11 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step) // collision of 1st order moments cx = cx * (c1o1 - omegaD) + omegaD * vvx * concentration + - normX1 * (c1o1 - 0.5 * omegaD) * ( phi[DIR_000]) * (phi2[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX1 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale; cy = cy * (c1o1 - omegaD) + omegaD * vvy * concentration + - normX2 * (c1o1 - 0.5 * omegaD) * ( phi[DIR_000]) * (phi2[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX2 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale; cz = cz * (c1o1 - omegaD) + omegaD * vvz * concentration + - normX3 * (c1o1 - 0.5 * omegaD) * ( phi[DIR_000]) * (phi2[DIR_000]) * c1o3 * oneOverInterfaceScale; + normX3 * (c1o1 - 0.5 * omegaD) * ( phi[d000]) * (phi2[d000]) * c1o3 * oneOverInterfaceScale; //mhx = (ux * phi[REST] + normX1 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhx; //mhy = (uy * phi[REST] + normX2 * (tauH - 0.5) * (1.0 - phi[REST]) * (phi[REST])) / tauH + (1.0 - 1.0 / tauH) * mhy; @@ -3199,7 +3199,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::calculate(int step) ///////////////////// PHASE-FIELD BGK SOLVER /////////////////////////////// - //h[DIR_P00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); + //h[dP00] = (*this->localDistributionsH)(D3Q27System::ET_E, x1, x2, x3); //h[N] = (*this->localDistributionsH)(D3Q27System::ET_N, x1, x2, x3); //h[T] = (*this->localDistributionsH)(D3Q27System::ET_T, x1, x2, x3); //h[NE] = (*this->localDistributionsH)(D3Q27System::ET_NE, x1, x2, x3); @@ -3293,9 +3293,9 @@ real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX1_phi() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0* ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) + (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) + (phi[DIR_PPM] - phi[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) + (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_PM0] - phi[DIR_MP0]) + (phi[DIR_PP0] - phi[DIR_MM0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_P00] - phi[DIR_M00])); + return 3.0* ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) + (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) + (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) + (phi[dP0M] - phi[dM0P])) + ((phi[dPM0] - phi[dMP0]) + (phi[dPP0] - phi[dMM0])))) + + +WEIGTH[d0P0] * (phi[dP00] - phi[dM00])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX1[k] * phi[k]; @@ -3308,9 +3308,9 @@ real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX2_phi() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PPM] - phi[DIR_MMP])- (phi[DIR_PMP] - phi[DIR_MPM]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_0PP] - phi[DIR_0MM]) + (phi[DIR_0PM] - phi[DIR_0MP])) + ((phi[DIR_PP0] - phi[DIR_MM0])- (phi[DIR_PM0] - phi[DIR_MP0])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_0P0] - phi[DIR_0M0])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPPM] - phi[dMMP])- (phi[dPMP] - phi[dMPM]))) + + WEIGTH[dPP0] * (((phi[d0PP] - phi[d0MM]) + (phi[d0PM] - phi[d0MP])) + ((phi[dPP0] - phi[dMM0])- (phi[dPM0] - phi[dMP0])))) + + +WEIGTH[d0P0] * (phi[d0P0] - phi[d0M0])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX2[k] * phi[k]; @@ -3323,9 +3323,9 @@ real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX3_phi() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi[DIR_PPP] - phi[DIR_MMM]) - (phi[DIR_PMM] - phi[DIR_MPP])) + ((phi[DIR_PMP] - phi[DIR_MPM]) - (phi[DIR_PPM] - phi[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi[DIR_P0P] - phi[DIR_M0M]) - (phi[DIR_P0M] - phi[DIR_M0P])) + ((phi[DIR_0MP] - phi[DIR_0PM]) + (phi[DIR_0PP] - phi[DIR_0MM])))) + - +WEIGTH[DIR_0P0] * (phi[DIR_00P] - phi[DIR_00M])); + return 3.0 * ((WEIGTH[dPPP] * (((phi[dPPP] - phi[dMMM]) - (phi[dPMM] - phi[dMPP])) + ((phi[dPMP] - phi[dMPM]) - (phi[dPPM] - phi[dMMP]))) + + WEIGTH[dPP0] * (((phi[dP0P] - phi[dM0M]) - (phi[dP0M] - phi[dM0P])) + ((phi[d0MP] - phi[d0PM]) + (phi[d0PP] - phi[d0MM])))) + + +WEIGTH[d0P0] * (phi[d00P] - phi[d00M])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX3[k] * phi[k]; @@ -3338,9 +3338,9 @@ real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX1_phi2() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) + (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) + (phi2[DIR_PPM] - phi2[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) + (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_PM0] - phi2[DIR_MP0]) + (phi2[DIR_PP0] - phi2[DIR_MM0])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_P00] - phi2[DIR_M00])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) + (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) + (phi2[dPPM] - phi2[dMMP]))) + + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) + (phi2[dP0M] - phi2[dM0P])) + ((phi2[dPM0] - phi2[dMP0]) + (phi2[dPP0] - phi2[dMM0])))) + + +WEIGTH[d0P0] * (phi2[dP00] - phi2[dM00])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX1[k] * phi2[k]; @@ -3353,9 +3353,9 @@ real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX2_phi2() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PPM] - phi2[DIR_MMP]) - (phi2[DIR_PMP] - phi2[DIR_MPM]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_0PP] - phi2[DIR_0MM]) + (phi2[DIR_0PM] - phi2[DIR_0MP])) + ((phi2[DIR_PP0] - phi2[DIR_MM0]) - (phi2[DIR_PM0] - phi2[DIR_MP0])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_0P0] - phi2[DIR_0M0])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPPM] - phi2[dMMP]) - (phi2[dPMP] - phi2[dMPM]))) + + WEIGTH[dPP0] * (((phi2[d0PP] - phi2[d0MM]) + (phi2[d0PM] - phi2[d0MP])) + ((phi2[dPP0] - phi2[dMM0]) - (phi2[dPM0] - phi2[dMP0])))) + + +WEIGTH[d0P0] * (phi2[d0P0] - phi2[d0M0])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX2[k] * phi2[k]; @@ -3368,9 +3368,9 @@ real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::gradX3_phi2() using namespace D3Q27System; using namespace vf::lbm::dir; - return 3.0 * ((WEIGTH[DIR_PPP] * (((phi2[DIR_PPP] - phi2[DIR_MMM]) - (phi2[DIR_PMM] - phi2[DIR_MPP])) + ((phi2[DIR_PMP] - phi2[DIR_MPM]) - (phi2[DIR_PPM] - phi2[DIR_MMP]))) - + WEIGTH[DIR_PP0] * (((phi2[DIR_P0P] - phi2[DIR_M0M]) - (phi2[DIR_P0M] - phi2[DIR_M0P])) + ((phi2[DIR_0MP] - phi2[DIR_0PM]) + (phi2[DIR_0PP] - phi2[DIR_0MM])))) + - +WEIGTH[DIR_0P0] * (phi2[DIR_00P] - phi2[DIR_00M])); + return 3.0 * ((WEIGTH[dPPP] * (((phi2[dPPP] - phi2[dMMM]) - (phi2[dPMM] - phi2[dMPP])) + ((phi2[dPMP] - phi2[dMPM]) - (phi2[dPPM] - phi2[dMMP]))) + + WEIGTH[dPP0] * (((phi2[dP0P] - phi2[dM0M]) - (phi2[dP0M] - phi2[dM0P])) + ((phi2[d0MP] - phi2[d0PM]) + (phi2[d0PP] - phi2[d0MM])))) + + +WEIGTH[d0P0] * (phi2[d00P] - phi2[d00M])); //LBMReal sum = 0.0; //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * DX3[k] * phi2[k]; @@ -3388,17 +3388,17 @@ real MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::nabla2_phi() using namespace vf::lbm::dir; real sum = 0.0; - sum += WEIGTH[DIR_PPP] * ((((phi[DIR_PPP] - phi[DIR_000]) + (phi[DIR_MMM] - phi[DIR_000])) + ((phi[DIR_MMP] - phi[DIR_000]) + (phi[DIR_PPM] - phi[DIR_000]))) - + (((phi[DIR_MPP] - phi[DIR_000]) + (phi[DIR_PMM] - phi[DIR_000])) + ((phi[DIR_PMP] - phi[DIR_000]) + (phi[DIR_MPM] - phi[DIR_000])))); - sum += WEIGTH[DIR_0PP] * ( - (((phi[DIR_0PP] - phi[DIR_000]) + (phi[DIR_0MM] - phi[DIR_000])) + ((phi[DIR_0MP] - phi[DIR_000]) + (phi[DIR_0PM] - phi[DIR_000]))) - + (((phi[DIR_P0P] - phi[DIR_000]) + (phi[DIR_M0M] - phi[DIR_000])) + ((phi[DIR_M0P] - phi[DIR_000]) + (phi[DIR_P0M] - phi[DIR_000]))) - + (((phi[DIR_PP0] - phi[DIR_000]) + (phi[DIR_MM0] - phi[DIR_000])) + ((phi[DIR_MP0] - phi[DIR_000]) + (phi[DIR_PM0] - phi[DIR_000]))) + sum += WEIGTH[dPPP] * ((((phi[dPPP] - phi[d000]) + (phi[dMMM] - phi[d000])) + ((phi[dMMP] - phi[d000]) + (phi[dPPM] - phi[d000]))) + + (((phi[dMPP] - phi[d000]) + (phi[dPMM] - phi[d000])) + ((phi[dPMP] - phi[d000]) + (phi[dMPM] - phi[d000])))); + sum += WEIGTH[d0PP] * ( + (((phi[d0PP] - phi[d000]) + (phi[d0MM] - phi[d000])) + ((phi[d0MP] - phi[d000]) + (phi[d0PM] - phi[d000]))) + + (((phi[dP0P] - phi[d000]) + (phi[dM0M] - phi[d000])) + ((phi[dM0P] - phi[d000]) + (phi[dP0M] - phi[d000]))) + + (((phi[dPP0] - phi[d000]) + (phi[dMM0] - phi[d000])) + ((phi[dMP0] - phi[d000]) + (phi[dPM0] - phi[d000]))) ); - sum += WEIGTH[DIR_00P] * ( - ((phi[DIR_00P] - phi[DIR_000]) + (phi[DIR_00M] - phi[DIR_000])) - + ((phi[DIR_0P0] - phi[DIR_000]) + (phi[DIR_0M0] - phi[DIR_000])) - + ((phi[DIR_P00] - phi[DIR_000]) + (phi[DIR_M00] - phi[DIR_000])) + sum += WEIGTH[d00P] * ( + ((phi[d00P] - phi[d000]) + (phi[d00M] - phi[d000])) + + ((phi[d0P0] - phi[d000]) + (phi[d0M0] - phi[d000])) + + ((phi[dP00] - phi[d000]) + (phi[dM00] - phi[d000])) ); //for (int k = FSTARTDIR; k <= FENDDIR; k++) { // sum += WEIGTH[k] * (phi[k] - phi[REST]); @@ -3430,35 +3430,35 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::computePhasefield() int x2p = x2 + 1; int x3p = x3 + 1; - h[DIR_P00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); - h[DIR_0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); - h[DIR_00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); - h[DIR_PP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); - h[DIR_MP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); - h[DIR_P0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); - h[DIR_M0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); - h[DIR_0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); - h[DIR_0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); - h[DIR_PPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); - h[DIR_MPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); - h[DIR_PMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); - h[DIR_MMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); - - h[DIR_M00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); - h[DIR_0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); - h[DIR_00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); - h[DIR_MM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); - h[DIR_PM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); - h[DIR_M0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); - h[DIR_P0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); - h[DIR_0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); - h[DIR_0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); - h[DIR_MMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); - h[DIR_PMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); - h[DIR_MPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); - h[DIR_PPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); - - h[DIR_000] = (*this->zeroDistributionsH1)(x1, x2, x3); + h[dP00] = (*this->localDistributionsH1)(D3Q27System::ET_E, x1, x2, x3); + h[d0P0] = (*this->localDistributionsH1)(D3Q27System::ET_N, x1, x2, x3); + h[d00P] = (*this->localDistributionsH1)(D3Q27System::ET_T, x1, x2, x3); + h[dPP0] = (*this->localDistributionsH1)(D3Q27System::ET_NE, x1, x2, x3); + h[dMP0] = (*this->localDistributionsH1)(D3Q27System::ET_NW, x1p, x2, x3); + h[dP0P] = (*this->localDistributionsH1)(D3Q27System::ET_TE, x1, x2, x3); + h[dM0P] = (*this->localDistributionsH1)(D3Q27System::ET_TW, x1p, x2, x3); + h[d0PP] = (*this->localDistributionsH1)(D3Q27System::ET_TN, x1, x2, x3); + h[d0MP] = (*this->localDistributionsH1)(D3Q27System::ET_TS, x1, x2p, x3); + h[dPPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNE, x1, x2, x3); + h[dMPP] = (*this->localDistributionsH1)(D3Q27System::ET_TNW, x1p, x2, x3); + h[dPMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSE, x1, x2p, x3); + h[dMMP] = (*this->localDistributionsH1)(D3Q27System::ET_TSW, x1p, x2p, x3); + + h[dM00] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_W, x1p, x2, x3); + h[d0M0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_S, x1, x2p, x3); + h[d00M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_B, x1, x2, x3p); + h[dMM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SW, x1p, x2p, x3); + h[dPM0] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_SE, x1, x2p, x3); + h[dM0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BW, x1p, x2, x3p); + h[dP0M] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BE, x1, x2, x3p); + h[d0MM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BS, x1, x2p, x3p); + h[d0PM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BN, x1, x2, x3p); + h[dMMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSW, x1p, x2p, x3p); + h[dPMM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BSE, x1, x2p, x3p); + h[dMPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNW, x1p, x2, x3p); + h[dPPM] = (*this->nonLocalDistributionsH1)(D3Q27System::ET_BNE, x1, x2, x3p); + + h[d000] = (*this->zeroDistributionsH1)(x1, x2, x3); } } } @@ -3473,7 +3473,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::findNeighbors(CbArray3D< SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - phi[DIR_000] = (*ph)(x1, x2, x3); + phi[d000] = (*ph)(x1, x2, x3); for (int k = FSTARTDIR; k <= FENDDIR; k++) { @@ -3494,7 +3494,7 @@ void MultiphaseTwoPhaseFieldsVelocityCumulantLBMKernel::findNeighbors2(CbArray3D SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - phi2[DIR_000] = (*ph)(x1, x2, x3); + phi2[d000] = (*ph)(x1, x2, x3); for (int k = FSTARTDIR; k <= FENDDIR; k++) { diff --git a/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.cpp b/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.cpp index 820c84855c66c695423beec09d1ccfa3953dc4e9..2bf1ac28d3dc1dad3520d023e7bd96f6b6a2372b 100644 --- a/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.cpp +++ b/src/cpu/MultiphaseFlow/SimulationObservers/WriteMultiphaseQuantitiesSimulationObserver.cpp @@ -229,19 +229,19 @@ void WriteMultiphaseQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block) for (int ix2 = minX2; ix2 < maxX2; ix2++) { for (int ix1 = minX1; ix1 < maxX1; ix1++) { if (!bcArray->isUndefined(ix1, ix2, ix3) && !bcArray->isSolid(ix1, ix2, ix3)) { - distributionsH->getDistribution(f, ix1, ix2, ix3); + distributionsH->getPreCollisionDistribution(f, ix1, ix2, ix3); (*phaseField)(ix1, ix2, ix3) = - ((f[DIR_PPP] + f[DIR_MMM]) + (f[DIR_PMP] + f[DIR_MPM])) + ((f[DIR_PMM] + f[DIR_MPP]) + (f[DIR_MMP] + f[DIR_PPM])) + - (((f[DIR_PP0] + f[DIR_MM0]) + (f[DIR_PM0] + f[DIR_MP0])) + ((f[DIR_P0P] + f[DIR_M0M]) + (f[DIR_P0M] + f[DIR_M0P])) + - ((f[DIR_0PM] + f[DIR_0MP]) + (f[DIR_0PP] + f[DIR_0MM]))) + - ((f[DIR_P00] + f[DIR_M00]) + (f[DIR_0P0] + f[DIR_0M0]) + (f[DIR_00P] + f[DIR_00M])) + f[DIR_000]; + ((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) + + (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) + + ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) + + ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000]; if (distributionsH2) { - distributionsH2->getDistribution(f, ix1, ix2, ix3); + distributionsH2->getPreCollisionDistribution(f, ix1, ix2, ix3); (*phaseField2)(ix1, ix2, ix3) = - ((f[DIR_PPP] + f[DIR_MMM]) + (f[DIR_PMP] + f[DIR_MPM])) + ((f[DIR_PMM] + f[DIR_MPP]) + (f[DIR_MMP] + f[DIR_PPM])) + - (((f[DIR_PP0] + f[DIR_MM0]) + (f[DIR_PM0] + f[DIR_MP0])) + ((f[DIR_P0P] + f[DIR_M0M]) + (f[DIR_P0M] + f[DIR_M0P])) + - ((f[DIR_0PM] + f[DIR_0MP]) + (f[DIR_0PP] + f[DIR_0MM]))) + - ((f[DIR_P00] + f[DIR_M00]) + (f[DIR_0P0] + f[DIR_0M0]) + (f[DIR_00P] + f[DIR_00M])) + f[DIR_000]; + ((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) + + (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) + + ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) + + ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000]; } else { (*phaseField2)(ix1, ix2, ix3) = 999.0; } @@ -279,8 +279,8 @@ void WriteMultiphaseQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block) nodes.push_back(UbTupleFloat3(float(worldCoordinates[0]), float(worldCoordinates[1]), float(worldCoordinates[2]))); - phi[DIR_000] = (*phaseField)(ix1, ix2, ix3); - phi2[DIR_000] = (*phaseField2)(ix1, ix2, ix3); + phi[d000] = (*phaseField)(ix1, ix2, ix3); + phi2[d000] = (*phaseField2)(ix1, ix2, ix3); if ((ix1 == 0) || (ix2 == 0) || (ix3 == 0)) { dX1_phi = 0.0; @@ -291,38 +291,38 @@ void WriteMultiphaseQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block) // vx2 = 0.0; // vx3 = 0.0; } else { - phi[DIR_P00] = (*phaseField)(ix1 + DX1[DIR_P00], ix2 + DX2[DIR_P00], ix3 + DX3[DIR_P00]); - phi[DIR_0P0] = (*phaseField)(ix1 + DX1[DIR_0P0], ix2 + DX2[DIR_0P0], ix3 + DX3[DIR_0P0]); - phi[DIR_00P] = (*phaseField)(ix1 + DX1[DIR_00P], ix2 + DX2[DIR_00P], ix3 + DX3[DIR_00P]); - phi[DIR_M00] = (*phaseField)(ix1 + DX1[DIR_M00], ix2 + DX2[DIR_M00], ix3 + DX3[DIR_M00]); - phi[DIR_0M0] = (*phaseField)(ix1 + DX1[DIR_0M0], ix2 + DX2[DIR_0M0], ix3 + DX3[DIR_0M0]); - phi[DIR_00M] = (*phaseField)(ix1 + DX1[DIR_00M], ix2 + DX2[DIR_00M], ix3 + DX3[DIR_00M]); - phi[DIR_PP0] = (*phaseField)(ix1 + DX1[DIR_PP0], ix2 + DX2[DIR_PP0], ix3 + DX3[DIR_PP0]); - phi[DIR_MP0] = (*phaseField)(ix1 + DX1[DIR_MP0], ix2 + DX2[DIR_MP0], ix3 + DX3[DIR_MP0]); - phi[DIR_P0P] = (*phaseField)(ix1 + DX1[DIR_P0P], ix2 + DX2[DIR_P0P], ix3 + DX3[DIR_P0P]); - phi[DIR_M0P] = (*phaseField)(ix1 + DX1[DIR_M0P], ix2 + DX2[DIR_M0P], ix3 + DX3[DIR_M0P]); - phi[DIR_0PP] = (*phaseField)(ix1 + DX1[DIR_0PP], ix2 + DX2[DIR_0PP], ix3 + DX3[DIR_0PP]); - phi[DIR_0MP] = (*phaseField)(ix1 + DX1[DIR_0MP], ix2 + DX2[DIR_0MP], ix3 + DX3[DIR_0MP]); - phi[DIR_MM0] = (*phaseField)(ix1 + DX1[DIR_MM0], ix2 + DX2[DIR_MM0], ix3 + DX3[DIR_MM0]); - phi[DIR_PM0] = (*phaseField)(ix1 + DX1[DIR_PM0], ix2 + DX2[DIR_PM0], ix3 + DX3[DIR_PM0]); - phi[DIR_M0M] = (*phaseField)(ix1 + DX1[DIR_M0M], ix2 + DX2[DIR_M0M], ix3 + DX3[DIR_M0M]); - phi[DIR_P0M] = (*phaseField)(ix1 + DX1[DIR_P0M], ix2 + DX2[DIR_P0M], ix3 + DX3[DIR_P0M]); - phi[DIR_0MM] = (*phaseField)(ix1 + DX1[DIR_0MM], ix2 + DX2[DIR_0MM], ix3 + DX3[DIR_0MM]); - phi[DIR_0PM] = (*phaseField)(ix1 + DX1[DIR_0PM], ix2 + DX2[DIR_0PM], ix3 + DX3[DIR_0PM]); - phi[DIR_MMM] = (*phaseField)(ix1 + DX1[DIR_MMM], ix2 + DX2[DIR_MMM], ix3 + DX3[DIR_MMM]); - phi[DIR_PMM] = (*phaseField)(ix1 + DX1[DIR_PMM], ix2 + DX2[DIR_PMM], ix3 + DX3[DIR_PMM]); - phi[DIR_MPM] = (*phaseField)(ix1 + DX1[DIR_MPM], ix2 + DX2[DIR_MPM], ix3 + DX3[DIR_MPM]); - phi[DIR_PPM] = (*phaseField)(ix1 + DX1[DIR_PPM], ix2 + DX2[DIR_PPM], ix3 + DX3[DIR_PPM]); - phi[DIR_PPP] = (*phaseField)(ix1 + DX1[DIR_PPP], ix2 + DX2[DIR_PPP], ix3 + DX3[DIR_PPP]); - phi[DIR_MPP] = (*phaseField)(ix1 + DX1[DIR_MPP], ix2 + DX2[DIR_MPP], ix3 + DX3[DIR_MPP]); - phi[DIR_PMP] = (*phaseField)(ix1 + DX1[DIR_PMP], ix2 + DX2[DIR_PMP], ix3 + DX3[DIR_PMP]); - phi[DIR_MMP] = (*phaseField)(ix1 + DX1[DIR_MMP], ix2 + DX2[DIR_MMP], ix3 + DX3[DIR_MMP]); + phi[dP00] = (*phaseField)(ix1 + DX1[dP00], ix2 + DX2[dP00], ix3 + DX3[dP00]); + phi[d0P0] = (*phaseField)(ix1 + DX1[d0P0], ix2 + DX2[d0P0], ix3 + DX3[d0P0]); + phi[d00P] = (*phaseField)(ix1 + DX1[d00P], ix2 + DX2[d00P], ix3 + DX3[d00P]); + phi[dM00] = (*phaseField)(ix1 + DX1[dM00], ix2 + DX2[dM00], ix3 + DX3[dM00]); + phi[d0M0] = (*phaseField)(ix1 + DX1[d0M0], ix2 + DX2[d0M0], ix3 + DX3[d0M0]); + phi[d00M] = (*phaseField)(ix1 + DX1[d00M], ix2 + DX2[d00M], ix3 + DX3[d00M]); + phi[dPP0] = (*phaseField)(ix1 + DX1[dPP0], ix2 + DX2[dPP0], ix3 + DX3[dPP0]); + phi[dMP0] = (*phaseField)(ix1 + DX1[dMP0], ix2 + DX2[dMP0], ix3 + DX3[dMP0]); + phi[dP0P] = (*phaseField)(ix1 + DX1[dP0P], ix2 + DX2[dP0P], ix3 + DX3[dP0P]); + phi[dM0P] = (*phaseField)(ix1 + DX1[dM0P], ix2 + DX2[dM0P], ix3 + DX3[dM0P]); + phi[d0PP] = (*phaseField)(ix1 + DX1[d0PP], ix2 + DX2[d0PP], ix3 + DX3[d0PP]); + phi[d0MP] = (*phaseField)(ix1 + DX1[d0MP], ix2 + DX2[d0MP], ix3 + DX3[d0MP]); + phi[dMM0] = (*phaseField)(ix1 + DX1[dMM0], ix2 + DX2[dMM0], ix3 + DX3[dMM0]); + phi[dPM0] = (*phaseField)(ix1 + DX1[dPM0], ix2 + DX2[dPM0], ix3 + DX3[dPM0]); + phi[dM0M] = (*phaseField)(ix1 + DX1[dM0M], ix2 + DX2[dM0M], ix3 + DX3[dM0M]); + phi[dP0M] = (*phaseField)(ix1 + DX1[dP0M], ix2 + DX2[dP0M], ix3 + DX3[dP0M]); + phi[d0MM] = (*phaseField)(ix1 + DX1[d0MM], ix2 + DX2[d0MM], ix3 + DX3[d0MM]); + phi[d0PM] = (*phaseField)(ix1 + DX1[d0PM], ix2 + DX2[d0PM], ix3 + DX3[d0PM]); + phi[dMMM] = (*phaseField)(ix1 + DX1[dMMM], ix2 + DX2[dMMM], ix3 + DX3[dMMM]); + phi[dPMM] = (*phaseField)(ix1 + DX1[dPMM], ix2 + DX2[dPMM], ix3 + DX3[dPMM]); + phi[dMPM] = (*phaseField)(ix1 + DX1[dMPM], ix2 + DX2[dMPM], ix3 + DX3[dMPM]); + phi[dPPM] = (*phaseField)(ix1 + DX1[dPPM], ix2 + DX2[dPPM], ix3 + DX3[dPPM]); + phi[dPPP] = (*phaseField)(ix1 + DX1[dPPP], ix2 + DX2[dPPP], ix3 + DX3[dPPP]); + phi[dMPP] = (*phaseField)(ix1 + DX1[dMPP], ix2 + DX2[dMPP], ix3 + DX3[dMPP]); + phi[dPMP] = (*phaseField)(ix1 + DX1[dPMP], ix2 + DX2[dPMP], ix3 + DX3[dPMP]); + phi[dMMP] = (*phaseField)(ix1 + DX1[dMMP], ix2 + DX2[dMMP], ix3 + DX3[dMMP]); dX1_phi = 0.0 * gradX1_phi(phi); dX2_phi = 0.0 * gradX2_phi(phi); dX3_phi = 0.0 * gradX3_phi(phi); - mu = 2 * beta * phi[DIR_000] * (phi[DIR_000] - 1) * (2 * phi[DIR_000] - 1) - kappa * nabla2_phi(phi); + mu = 2 * beta * phi[d000] * (phi[d000] - 1) * (2 * phi[d000] - 1) - kappa * nabla2_phi(phi); - //phi2[DIR_P00] = (*phaseField2)(ix1 + DX1[DIR_P00], ix2 + DX2[DIR_P00], ix3 + DX3[DIR_P00]); + //phi2[dP00] = (*phaseField2)(ix1 + DX1[dP00], ix2 + DX2[dP00], ix3 + DX3[dP00]); //phi2[N] = (*phaseField2)(ix1 + DX1[N], ix2 + DX2[N], ix3 + DX3[N]); //phi2[T] = (*phaseField2)(ix1 + DX1[T], ix2 + DX2[T], ix3 + DX3[T]); //phi2[W] = (*phaseField2)(ix1 + DX1[W], ix2 + DX2[W], ix3 + DX3[W]); @@ -355,7 +355,7 @@ void WriteMultiphaseQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block) } - distributionsF->getDistribution(f, ix1, ix2, ix3); + distributionsF->getPreCollisionDistribution(f, ix1, ix2, ix3); //real dU = (*divU)(ix1, ix2, ix3); real rhoH = 1.0; @@ -364,47 +364,47 @@ void WriteMultiphaseQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block) real rhoToPhi = (rhoH - rhoL) / (phiH - phiL); // rho = phi[ZERO] + (1.0 - phi[ZERO])*1.0/densityRatio; - rho = rhoH + rhoToPhi * (phi[DIR_000] - phiH); + rho = rhoH + rhoToPhi * (phi[d000] - phiH); if (pressure) { vx1 = - ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_PMM] - f[DIR_MPP]) + (f[DIR_PPM] - f[DIR_MMP]))) + - (((f[DIR_P0M] - f[DIR_M0P]) + (f[DIR_P0P] - f[DIR_M0M])) + ((f[DIR_PM0] - f[DIR_MP0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_P00] - f[DIR_M00])) ; + ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) + + (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00])) ; vx2 = - ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_MPM] - f[DIR_PMP])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_PPM] - f[DIR_MMP]))) + - (((f[DIR_0PM] - f[DIR_0MP]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_MP0] - f[DIR_PM0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_0P0] - f[DIR_0M0])) ; + ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) + + (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0])) ; vx3 = - ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_MMP] - f[DIR_PPM]))) + - (((f[DIR_0MP] - f[DIR_0PM]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_M0P] - f[DIR_P0M]) + (f[DIR_P0P] - f[DIR_M0M]))) + (f[DIR_00P] - f[DIR_00M])); + ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) + + (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M])); } else { vx1 = - ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_PMM] - f[DIR_MPP]) + (f[DIR_PPM] - f[DIR_MMP]))) + - (((f[DIR_P0M] - f[DIR_M0P]) + (f[DIR_P0P] - f[DIR_M0M])) + ((f[DIR_PM0] - f[DIR_MP0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_P00] - f[DIR_M00])) / + ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) + + (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00])) / (rho * c1o3) + mu * dX1_phi / (2 * rho); vx2 = - ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_MPM] - f[DIR_PMP])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_PPM] - f[DIR_MMP]))) + - (((f[DIR_0PM] - f[DIR_0MP]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_MP0] - f[DIR_PM0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_0P0] - f[DIR_0M0])) / + ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) + + (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0])) / (rho * c1o3) + mu * dX2_phi / (2 * rho); vx3 = - ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_MMP] - f[DIR_PPM]))) + - (((f[DIR_0MP] - f[DIR_0PM]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_M0P] - f[DIR_P0M]) + (f[DIR_P0P] - f[DIR_M0M]))) + (f[DIR_00P] - f[DIR_00M])) / + ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) + + (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M])) / (rho * c1o3) + mu * dX3_phi / (2 * rho); } - p1 = (((f[DIR_PPP] + f[DIR_MMM]) + (f[DIR_PMP] + f[DIR_MPM])) + ((f[DIR_PMM] + f[DIR_MPP]) + (f[DIR_MMP] + f[DIR_PPM])) + - (((f[DIR_PP0] + f[DIR_MM0]) + (f[DIR_PM0] + f[DIR_MP0])) + ((f[DIR_P0P] + f[DIR_M0M]) + (f[DIR_P0M] + f[DIR_M0P])) + - ((f[DIR_0PM] + f[DIR_0MP]) + (f[DIR_0PP] + f[DIR_0MM]))) + - ((f[DIR_P00] + f[DIR_M00]) + (f[DIR_0P0] + f[DIR_0M0]) + (f[DIR_00P] + f[DIR_00M])) + f[DIR_000]) + + p1 = (((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) + + (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) + + ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) + + ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000]) + (vx1 * rhoToPhi * dX1_phi * c1o3 + vx2 * rhoToPhi * dX2_phi * c1o3 + vx3 * rhoToPhi * dX3_phi * c1o3) / 2.0; @@ -432,7 +432,7 @@ void WriteMultiphaseQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block) block->toString() + ", node=" + UbSystem::toString(ix1) + "," + UbSystem::toString(ix2) + "," + UbSystem::toString(ix3))); - if (UbMath::isNaN(phi[DIR_000]) || UbMath::isInfinity(phi[DIR_000])) + if (UbMath::isNaN(phi[d000]) || UbMath::isInfinity(phi[d000])) UB_THROW(UbException( UB_EXARGS, "phi is not a number (nan or -1.#IND) or infinity number -1.#INF in block=" + block->toString() + ", node=" + UbSystem::toString(ix1) + "," + @@ -442,12 +442,12 @@ void WriteMultiphaseQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block) UB_THROW( UbException(UB_EXARGS,"p1 is not a number (nan or -1.#IND) or infinity number -1.#INF in block="+block->toString()+ ", node="+UbSystem::toString(ix1)+","+UbSystem::toString(ix2)+","+UbSystem::toString(ix3))); - data[index++].push_back(phi[DIR_000]); + data[index++].push_back(phi[d000]); data[index++].push_back(vx1); data[index++].push_back(vx2); data[index++].push_back(vx3); data[index++].push_back(p1); - data[index++].push_back(phi2[DIR_000]); + data[index++].push_back(phi2[d000]); if (pressure) data[index++].push_back((*pressure)(ix1, ix2, ix3)); } } @@ -510,7 +510,7 @@ real WriteMultiphaseQuantitiesSimulationObserver::nabla2_phi(const real *const & using namespace D3Q27System; real sum = 0.0; for (int k = FSTARTDIR; k <= FENDDIR; k++) { - sum += WEIGTH[k] * (h[k] - h[DIR_000]); + sum += WEIGTH[k] * (h[k] - h[d000]); } return 6.0 * sum; } \ No newline at end of file diff --git a/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.cpp b/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.cpp index 7a0ae87b6cb3674557af510089548d7352913cc6..9e2fd5433c3f30649abd46ef00ffa8a92d0b20ba 100644 --- a/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.cpp +++ b/src/cpu/MultiphaseFlow/SimulationObservers/WriteSharpInterfaceQuantitiesSimulationObserver.cpp @@ -218,12 +218,12 @@ void WriteSharpInterfaceQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> bl for (int ix2 = minX2; ix2 < maxX2; ix2++) { for (int ix1 = minX1; ix1 < maxX1; ix1++) { if (!bcArray->isUndefined(ix1, ix2, ix3) && !bcArray->isSolid(ix1, ix2, ix3)) { - distributionsH->getDistributionInv(f, ix1, ix2, ix3); + distributionsH->getPostCollisionDistribution(f, ix1, ix2, ix3); (*phaseField)(ix1, ix2, ix3) = - ((f[DIR_PPP] + f[DIR_MMM]) + (f[DIR_PMP] + f[DIR_MPM])) + ((f[DIR_PMM] + f[DIR_MPP]) + (f[DIR_MMP] + f[DIR_PPM])) + - (((f[DIR_PP0] + f[DIR_MM0]) + (f[DIR_PM0] + f[DIR_MP0])) + ((f[DIR_P0P] + f[DIR_M0M]) + (f[DIR_P0M] + f[DIR_M0P])) + - ((f[DIR_0PM] + f[DIR_0MP]) + (f[DIR_0PP] + f[DIR_0MM]))) + - ((f[DIR_P00] + f[DIR_M00]) + (f[DIR_0P0] + f[DIR_0M0]) + (f[DIR_00P] + f[DIR_00M])) + f[DIR_000]; + ((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) + + (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) + + ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) + + ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000]; } } } @@ -261,7 +261,7 @@ void WriteSharpInterfaceQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> bl phi = (*phaseField)(ix1, ix2, ix3); - distributionsF->getDistributionInv(f, ix1, ix2, ix3); + distributionsF->getPostCollisionDistribution(f, ix1, ix2, ix3); //real dU = (*divU)(ix1, ix2, ix3); real rhoH = 1.0; @@ -275,23 +275,23 @@ void WriteSharpInterfaceQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> bl rho = (phi>c1o2) ? rhoH : rhoL; // rhoH + rhoToPhi * (phi - phiH); vx1 = - ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_PMM] - f[DIR_MPP]) + (f[DIR_PPM] - f[DIR_MMP]))) + - (((f[DIR_P0M] - f[DIR_M0P]) + (f[DIR_P0P] - f[DIR_M0M])) + ((f[DIR_PM0] - f[DIR_MP0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_P00] - f[DIR_M00])) ; + ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) + + (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00])) ; vx2 = - ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_MPM] - f[DIR_PMP])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_PPM] - f[DIR_MMP]))) + - (((f[DIR_0PM] - f[DIR_0MP]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_MP0] - f[DIR_PM0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_0P0] - f[DIR_0M0])) ; + ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) + + (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0])) ; vx3 = - ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_MMP] - f[DIR_PPM]))) + - (((f[DIR_0MP] - f[DIR_0PM]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_M0P] - f[DIR_P0M]) + (f[DIR_P0P] - f[DIR_M0M]))) + (f[DIR_00P] - f[DIR_00M])); + ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) + + (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M])); - pressure = (((f[DIR_PPP] + f[DIR_MMM]) + (f[DIR_PMP] + f[DIR_MPM])) + ((f[DIR_PMM] + f[DIR_MPP]) + (f[DIR_MMP] + f[DIR_PPM])) + - (((f[DIR_PP0] + f[DIR_MM0]) + (f[DIR_PM0] + f[DIR_MP0])) + ((f[DIR_P0P] + f[DIR_M0M]) + (f[DIR_P0M] + f[DIR_M0P])) + - ((f[DIR_0PM] + f[DIR_0MP]) + (f[DIR_0PP] + f[DIR_0MM]))) + - ((f[DIR_P00] + f[DIR_M00]) + (f[DIR_0P0] + f[DIR_0M0]) + (f[DIR_00P] + f[DIR_00M])) + f[DIR_000])*c1o3*rho; + pressure = (((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) + + (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) + + ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) + + ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000])*c1o3*rho; if (UbMath::isNaN(vx1) || UbMath::isInfinity(vx1)) UB_THROW(UbException( @@ -338,7 +338,7 @@ void WriteSharpInterfaceQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> bl data[index++].push_back(vx2); data[index++].push_back(vx3); //data[index++].push_back(p1); - //data[index++].push_back(phi2[DIR_000]); + //data[index++].push_back(phi2[d000]); //data[index++].push_back(mp); //data[index++].push_back(delmp); data[index++].push_back(pressure); @@ -410,7 +410,7 @@ real WriteSharpInterfaceQuantitiesSimulationObserver::nabla2_phi(const real *con using namespace vf::basics::constant; real sum = c0o1; for (int k = FSTARTDIR; k <= FENDDIR; k++) { - sum += WEIGTH[k] * (h[k] - h[DIR_000]); + sum += WEIGTH[k] * (h[k] - h[d000]); } return 6.0 * sum; } \ No newline at end of file diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.cpp b/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.cpp index ded01d95428ce53dc09f1371961d68ee1b005c00..54ee28571ebf76ca96d3d79cbb49417654517a8c 100644 --- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.cpp +++ b/src/cpu/MultiphaseFlow/Visitors/MultiphaseInitDistributionsBlockVisitor.cpp @@ -222,106 +222,106 @@ void MultiphaseInitDistributionsBlockVisitor::visit(const SPtr<Grid3D> grid, SPt feq[dir] = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx1Sq+vx2Sq+vx3Sq)); //geq[dir] = p1*WEIGTH[dir] + gamma; - //geq[dir] = p1*WEIGTH[dir]/(rho*UbMath::c1o3) + gamma*rho; - //geq[dir] = (p1*WEIGTH[dir]/(rho*UbMath::c1o3) + gamma*rho)*UbMath::c1o3; + //geq[dir] = p1*WEIGTH[dir]/(rho*vf::basics::constant::c1o3) + gamma*rho; + //geq[dir] = (p1*WEIGTH[dir]/(rho*vf::basics::constant::c1o3) + gamma*rho)*vf::basics::constant::c1o3; geq[dir] = (gamma*rho)* vf::basics::constant::c1o3; } - f[DIR_P00] = geq[DIR_P00] ; - f[DIR_M00] = geq[DIR_M00] ; - f[DIR_0P0] = geq[DIR_0P0] ; - f[DIR_0M0] = geq[DIR_0M0] ; - f[DIR_00P] = geq[DIR_00P] ; - f[DIR_00M] = geq[DIR_00M] ; - f[DIR_PP0] = geq[DIR_PP0] ; - f[DIR_MM0] = geq[DIR_MM0] ; - f[DIR_PM0] = geq[DIR_PM0] ; - f[DIR_MP0] = geq[DIR_MP0] ; - f[DIR_P0P] = geq[DIR_P0P] ; - f[DIR_M0M] = geq[DIR_M0M] ; - f[DIR_P0M] = geq[DIR_P0M] ; - f[DIR_M0P] = geq[DIR_M0P] ; - f[DIR_0PP] = geq[DIR_0PP] ; - f[DIR_0MM] = geq[DIR_0MM] ; - f[DIR_0PM] = geq[DIR_0PM] ; - f[DIR_0MP] = geq[DIR_0MP] ; - f[DIR_PPP] = geq[DIR_PPP] ; - f[DIR_MPP] = geq[DIR_MPP] ; - f[DIR_PMP] = geq[DIR_PMP] ; - f[DIR_MMP] = geq[DIR_MMP] ; - f[DIR_PPM] = geq[DIR_PPM] ; - f[DIR_MPM] = geq[DIR_MPM] ; - f[DIR_PMM] = geq[DIR_PMM] ; - f[DIR_MMM] = geq[DIR_MMM] ; - f[DIR_000] = geq[DIR_000] ; + f[dP00] = geq[dP00] ; + f[dM00] = geq[dM00] ; + f[d0P0] = geq[d0P0] ; + f[d0M0] = geq[d0M0] ; + f[d00P] = geq[d00P] ; + f[d00M] = geq[d00M] ; + f[dPP0] = geq[dPP0] ; + f[dMM0] = geq[dMM0] ; + f[dPM0] = geq[dPM0] ; + f[dMP0] = geq[dMP0] ; + f[dP0P] = geq[dP0P] ; + f[dM0M] = geq[dM0M] ; + f[dP0M] = geq[dP0M] ; + f[dM0P] = geq[dM0P] ; + f[d0PP] = geq[d0PP] ; + f[d0MM] = geq[d0MM] ; + f[d0PM] = geq[d0PM] ; + f[d0MP] = geq[d0MP] ; + f[dPPP] = geq[dPPP] ; + f[dMPP] = geq[dMPP] ; + f[dPMP] = geq[dPMP] ; + f[dMMP] = geq[dMMP] ; + f[dPPM] = geq[dPPM] ; + f[dMPM] = geq[dMPM] ; + f[dPMM] = geq[dPMM] ; + f[dMMM] = geq[dMMM] ; + f[d000] = geq[d000] ; - distributionsF->setDistribution(f, ix1, ix2, ix3); - distributionsF->setDistributionInv(f, ix1, ix2, ix3); + distributionsF->setPostCollisionDistribution(f, ix1, ix2, ix3); + distributionsF->setPreCollisionDistribution(f, ix1, ix2, ix3); - f[DIR_P00] = phi * feq[DIR_P00] / rho; - f[DIR_M00] = phi * feq[DIR_M00] / rho; - f[DIR_0P0] = phi * feq[DIR_0P0] / rho; - f[DIR_0M0] = phi * feq[DIR_0M0] / rho; - f[DIR_00P] = phi * feq[DIR_00P] / rho; - f[DIR_00M] = phi * feq[DIR_00M] / rho; - f[DIR_PP0] = phi * feq[DIR_PP0] / rho; - f[DIR_MM0] = phi * feq[DIR_MM0] / rho; - f[DIR_PM0] = phi * feq[DIR_PM0] / rho; - f[DIR_MP0] = phi * feq[DIR_MP0] / rho; - f[DIR_P0P] = phi * feq[DIR_P0P] / rho; - f[DIR_M0M] = phi * feq[DIR_M0M] / rho; - f[DIR_P0M] = phi * feq[DIR_P0M] / rho; - f[DIR_M0P] = phi * feq[DIR_M0P] / rho; - f[DIR_0PP] = phi * feq[DIR_0PP] / rho; - f[DIR_0MM] = phi * feq[DIR_0MM] / rho; - f[DIR_0PM] = phi * feq[DIR_0PM] / rho; - f[DIR_0MP] = phi * feq[DIR_0MP] / rho; - f[DIR_PPP] = phi * feq[DIR_PPP] / rho; - f[DIR_MPP] = phi * feq[DIR_MPP] / rho; - f[DIR_PMP] = phi * feq[DIR_PMP] / rho; - f[DIR_MMP] = phi * feq[DIR_MMP] / rho; - f[DIR_PPM] = phi * feq[DIR_PPM] / rho; - f[DIR_MPM] = phi * feq[DIR_MPM] / rho; - f[DIR_PMM] = phi * feq[DIR_PMM] / rho; - f[DIR_MMM] = phi * feq[DIR_MMM] / rho; - f[DIR_000] = phi * feq[DIR_000] / rho; + f[dP00] = phi * feq[dP00] / rho; + f[dM00] = phi * feq[dM00] / rho; + f[d0P0] = phi * feq[d0P0] / rho; + f[d0M0] = phi * feq[d0M0] / rho; + f[d00P] = phi * feq[d00P] / rho; + f[d00M] = phi * feq[d00M] / rho; + f[dPP0] = phi * feq[dPP0] / rho; + f[dMM0] = phi * feq[dMM0] / rho; + f[dPM0] = phi * feq[dPM0] / rho; + f[dMP0] = phi * feq[dMP0] / rho; + f[dP0P] = phi * feq[dP0P] / rho; + f[dM0M] = phi * feq[dM0M] / rho; + f[dP0M] = phi * feq[dP0M] / rho; + f[dM0P] = phi * feq[dM0P] / rho; + f[d0PP] = phi * feq[d0PP] / rho; + f[d0MM] = phi * feq[d0MM] / rho; + f[d0PM] = phi * feq[d0PM] / rho; + f[d0MP] = phi * feq[d0MP] / rho; + f[dPPP] = phi * feq[dPPP] / rho; + f[dMPP] = phi * feq[dMPP] / rho; + f[dPMP] = phi * feq[dPMP] / rho; + f[dMMP] = phi * feq[dMMP] / rho; + f[dPPM] = phi * feq[dPPM] / rho; + f[dMPM] = phi * feq[dMPM] / rho; + f[dPMM] = phi * feq[dPMM] / rho; + f[dMMM] = phi * feq[dMMM] / rho; + f[d000] = phi * feq[d000] / rho; - distributionsH->setDistribution(f, ix1, ix2, ix3); - distributionsH->setDistributionInv(f, ix1, ix2, ix3); + distributionsH->setPostCollisionDistribution(f, ix1, ix2, ix3); + distributionsH->setPreCollisionDistribution(f, ix1, ix2, ix3); if (distributionsH2) { - f[DIR_P00] = (1.-phi) * feq[DIR_P00] / rho; - f[DIR_M00] = (1.-phi) * feq[DIR_M00] / rho; - f[DIR_0P0] = (1.-phi) * feq[DIR_0P0] / rho; - f[DIR_0M0] = (1.-phi) * feq[DIR_0M0] / rho; - f[DIR_00P] = (1.-phi) * feq[DIR_00P] / rho; - f[DIR_00M] = (1.-phi) * feq[DIR_00M] / rho; - f[DIR_PP0] = (1.-phi) * feq[DIR_PP0] / rho; - f[DIR_MM0] = (1.-phi) * feq[DIR_MM0] / rho; - f[DIR_PM0] = (1.-phi) * feq[DIR_PM0] / rho; - f[DIR_MP0] = (1.-phi) * feq[DIR_MP0] / rho; - f[DIR_P0P] = (1.-phi) * feq[DIR_P0P] / rho; - f[DIR_M0M] = (1.-phi) * feq[DIR_M0M] / rho; - f[DIR_P0M] = (1.-phi) * feq[DIR_P0M] / rho; - f[DIR_M0P] = (1.-phi) * feq[DIR_M0P] / rho; - f[DIR_0PP] = (1.-phi) * feq[DIR_0PP] / rho; - f[DIR_0MM] = (1.-phi) * feq[DIR_0MM] / rho; - f[DIR_0PM] = (1.-phi) * feq[DIR_0PM] / rho; - f[DIR_0MP] = (1.-phi) * feq[DIR_0MP] / rho; - f[DIR_PPP] = (1.-phi) * feq[DIR_PPP] / rho; - f[DIR_MPP] = (1.-phi) * feq[DIR_MPP] / rho; - f[DIR_PMP] = (1.-phi) * feq[DIR_PMP] / rho; - f[DIR_MMP] = (1.-phi) * feq[DIR_MMP] / rho; - f[DIR_PPM] = (1.-phi) * feq[DIR_PPM] / rho; - f[DIR_MPM] = (1.-phi) * feq[DIR_MPM] / rho; - f[DIR_PMM] = (1.-phi) * feq[DIR_PMM] / rho; - f[DIR_MMM] = (1.-phi) * feq[DIR_MMM] / rho; - f[DIR_000] = (1.-phi) * feq[DIR_000] / rho; + f[dP00] = (1.-phi) * feq[dP00] / rho; + f[dM00] = (1.-phi) * feq[dM00] / rho; + f[d0P0] = (1.-phi) * feq[d0P0] / rho; + f[d0M0] = (1.-phi) * feq[d0M0] / rho; + f[d00P] = (1.-phi) * feq[d00P] / rho; + f[d00M] = (1.-phi) * feq[d00M] / rho; + f[dPP0] = (1.-phi) * feq[dPP0] / rho; + f[dMM0] = (1.-phi) * feq[dMM0] / rho; + f[dPM0] = (1.-phi) * feq[dPM0] / rho; + f[dMP0] = (1.-phi) * feq[dMP0] / rho; + f[dP0P] = (1.-phi) * feq[dP0P] / rho; + f[dM0M] = (1.-phi) * feq[dM0M] / rho; + f[dP0M] = (1.-phi) * feq[dP0M] / rho; + f[dM0P] = (1.-phi) * feq[dM0P] / rho; + f[d0PP] = (1.-phi) * feq[d0PP] / rho; + f[d0MM] = (1.-phi) * feq[d0MM] / rho; + f[d0PM] = (1.-phi) * feq[d0PM] / rho; + f[d0MP] = (1.-phi) * feq[d0MP] / rho; + f[dPPP] = (1.-phi) * feq[dPPP] / rho; + f[dMPP] = (1.-phi) * feq[dMPP] / rho; + f[dPMP] = (1.-phi) * feq[dPMP] / rho; + f[dMMP] = (1.-phi) * feq[dMMP] / rho; + f[dPPM] = (1.-phi) * feq[dPPM] / rho; + f[dMPM] = (1.-phi) * feq[dMPM] / rho; + f[dPMM] = (1.-phi) * feq[dPMM] / rho; + f[dMMM] = (1.-phi) * feq[dMMM] / rho; + f[d000] = (1.-phi) * feq[d000] / rho; - distributionsH2->setDistribution(f, ix1, ix2, ix3); - distributionsH2->setDistributionInv(f, ix1, ix2, ix3); + distributionsH2->setPostCollisionDistribution(f, ix1, ix2, ix3); + distributionsH2->setPreCollisionDistribution(f, ix1, ix2, ix3); } } } diff --git a/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp b/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp index 0aca152c1d9d326e73216a86540130dae3dd4ad0..a51bdc0234734282d3c9504fd2d52d7b11355414 100644 --- a/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp +++ b/src/cpu/MultiphaseFlow/Visitors/MultiphaseVelocityFormInitDistributionsBlockVisitor.cpp @@ -234,107 +234,107 @@ void MultiphaseVelocityFormInitDistributionsBlockVisitor::visit(const SPtr<Grid3 //feq[dir] = rho*WEIGTH[dir]*(1 + 3*velProd + 4.5*velSq1 - 1.5*(vx1Sq+vx2Sq+vx3Sq)); feq[dir] = WEIGTH[dir] * (1 + 3 * velProd + 4.5 * velSq1 - 1.5 * (vx1Sq + vx2Sq + vx3Sq)); //geq[dir] = p1*WEIGTH1[dir] + gamma; - //geq[dir] = p1*WEIGTH[dir]/(rho*UbMath::c1o3) + gamma*rho; + //geq[dir] = p1*WEIGTH[dir]/(rho*vf::basics::constant::c1o3) + gamma*rho; geq[dir] = p1 * WEIGTH[dir] / (vf::basics::constant::c1o3) + gamma ; } - f[DIR_000] = geq[DIR_000]; - f[DIR_P00] = geq[DIR_P00]; - f[DIR_M00] = geq[DIR_M00]; - f[DIR_0P0] = geq[DIR_0P0]; - f[DIR_0M0] = geq[DIR_0M0]; - f[DIR_00P] = geq[DIR_00P]; - f[DIR_00M] = geq[DIR_00M]; - f[DIR_PP0] = geq[DIR_PP0]; - f[DIR_MM0] = geq[DIR_MM0]; - f[DIR_PM0] = geq[DIR_PM0]; - f[DIR_MP0] = geq[DIR_MP0]; - f[DIR_P0P] = geq[DIR_P0P]; - f[DIR_M0M] = geq[DIR_M0M]; - f[DIR_P0M] = geq[DIR_P0M]; - f[DIR_M0P] = geq[DIR_M0P]; - f[DIR_0PP] = geq[DIR_0PP]; - f[DIR_0MM] = geq[DIR_0MM]; - f[DIR_0PM] = geq[DIR_0PM]; - f[DIR_0MP] = geq[DIR_0MP]; - f[DIR_PPP] = geq[DIR_PPP]; - f[DIR_MPP] = geq[DIR_MPP]; - f[DIR_PMP] = geq[DIR_PMP]; - f[DIR_MMP] = geq[DIR_MMP]; - f[DIR_PPM] = geq[DIR_PPM]; - f[DIR_MPM] = geq[DIR_MPM]; - f[DIR_PMM] = geq[DIR_PMM]; - f[DIR_MMM] = geq[DIR_MMM]; + f[d000] = geq[d000]; + f[dP00] = geq[dP00]; + f[dM00] = geq[dM00]; + f[d0P0] = geq[d0P0]; + f[d0M0] = geq[d0M0]; + f[d00P] = geq[d00P]; + f[d00M] = geq[d00M]; + f[dPP0] = geq[dPP0]; + f[dMM0] = geq[dMM0]; + f[dPM0] = geq[dPM0]; + f[dMP0] = geq[dMP0]; + f[dP0P] = geq[dP0P]; + f[dM0M] = geq[dM0M]; + f[dP0M] = geq[dP0M]; + f[dM0P] = geq[dM0P]; + f[d0PP] = geq[d0PP]; + f[d0MM] = geq[d0MM]; + f[d0PM] = geq[d0PM]; + f[d0MP] = geq[d0MP]; + f[dPPP] = geq[dPPP]; + f[dMPP] = geq[dMPP]; + f[dPMP] = geq[dPMP]; + f[dMMP] = geq[dMMP]; + f[dPPM] = geq[dPPM]; + f[dMPM] = geq[dMPM]; + f[dPMM] = geq[dPMM]; + f[dMMM] = geq[dMMM]; - distributionsF->setDistribution(f, ix1, ix2, ix3); - distributionsF->setDistributionInv(f, ix1, ix2, ix3); + distributionsF->setPostCollisionDistribution(f, ix1, ix2, ix3); + distributionsF->setPreCollisionDistribution(f, ix1, ix2, ix3); - f[DIR_000] = phi * feq[DIR_000];// / rho; - f[DIR_P00] = phi * feq[DIR_P00];// / rho; - f[DIR_M00] = phi * feq[DIR_M00];// / rho; - f[DIR_0P0] = phi * feq[DIR_0P0];// / rho; - f[DIR_0M0] = phi * feq[DIR_0M0];// / rho; - f[DIR_00P] = phi * feq[DIR_00P];// / rho; - f[DIR_00M] = phi * feq[DIR_00M];// / rho; - f[DIR_PP0] = phi * feq[DIR_PP0];// / rho; - f[DIR_MM0] = phi * feq[DIR_MM0];// / rho; - f[DIR_PM0] = phi * feq[DIR_PM0];// / rho; - f[DIR_MP0] = phi * feq[DIR_MP0];// / rho; - f[DIR_P0P] = phi * feq[DIR_P0P];// / rho; - f[DIR_M0M] = phi * feq[DIR_M0M];// / rho; - f[DIR_P0M] = phi * feq[DIR_P0M];// / rho; - f[DIR_M0P] = phi * feq[DIR_M0P];// / rho; - f[DIR_0PP] = phi * feq[DIR_0PP];// / rho; - f[DIR_0MM] = phi * feq[DIR_0MM];// / rho; - f[DIR_0PM] = phi * feq[DIR_0PM];// / rho; - f[DIR_0MP] = phi * feq[DIR_0MP];// / rho; - f[DIR_PPP] = phi * feq[DIR_PPP];// / rho; - f[DIR_MPP] = phi * feq[DIR_MPP];// / rho; - f[DIR_PMP] = phi * feq[DIR_PMP];// / rho; - f[DIR_MMP] = phi * feq[DIR_MMP];// / rho; - f[DIR_PPM] = phi * feq[DIR_PPM];// / rho; - f[DIR_MPM] = phi * feq[DIR_MPM];// / rho; - f[DIR_PMM] = phi * feq[DIR_PMM];// / rho; - f[DIR_MMM] = phi * feq[DIR_MMM];// / rho; + f[d000] = phi * feq[d000];// / rho; + f[dP00] = phi * feq[dP00];// / rho; + f[dM00] = phi * feq[dM00];// / rho; + f[d0P0] = phi * feq[d0P0];// / rho; + f[d0M0] = phi * feq[d0M0];// / rho; + f[d00P] = phi * feq[d00P];// / rho; + f[d00M] = phi * feq[d00M];// / rho; + f[dPP0] = phi * feq[dPP0];// / rho; + f[dMM0] = phi * feq[dMM0];// / rho; + f[dPM0] = phi * feq[dPM0];// / rho; + f[dMP0] = phi * feq[dMP0];// / rho; + f[dP0P] = phi * feq[dP0P];// / rho; + f[dM0M] = phi * feq[dM0M];// / rho; + f[dP0M] = phi * feq[dP0M];// / rho; + f[dM0P] = phi * feq[dM0P];// / rho; + f[d0PP] = phi * feq[d0PP];// / rho; + f[d0MM] = phi * feq[d0MM];// / rho; + f[d0PM] = phi * feq[d0PM];// / rho; + f[d0MP] = phi * feq[d0MP];// / rho; + f[dPPP] = phi * feq[dPPP];// / rho; + f[dMPP] = phi * feq[dMPP];// / rho; + f[dPMP] = phi * feq[dPMP];// / rho; + f[dMMP] = phi * feq[dMMP];// / rho; + f[dPPM] = phi * feq[dPPM];// / rho; + f[dMPM] = phi * feq[dMPM];// / rho; + f[dPMM] = phi * feq[dPMM];// / rho; + f[dMMM] = phi * feq[dMMM];// / rho; - distributionsH->setDistribution(f, ix1, ix2, ix3); - distributionsH->setDistributionInv(f, ix1, ix2, ix3); + distributionsH->setPostCollisionDistribution(f, ix1, ix2, ix3); + distributionsH->setPreCollisionDistribution(f, ix1, ix2, ix3); if (distributionsH2) { - f[DIR_000] = 0;//(1. - phi) * feq[DIR_000]; // / rho; - f[DIR_P00] = 0;//(1.-phi) * feq[DIR_P00] ;// / rho; - f[DIR_M00] = 0;//(1.-phi) * feq[DIR_M00] ;// / rho; - f[DIR_0P0] = 0;//(1.-phi) * feq[DIR_0P0] ;// / rho; - f[DIR_0M0] = 0;//(1.-phi) * feq[DIR_0M0] ;// / rho; - f[DIR_00P] = 0;//(1.-phi) * feq[DIR_00P] ;// / rho; - f[DIR_00M] = 0;//(1.-phi) * feq[DIR_00M] ;// / rho; - f[DIR_PP0] = 0;//(1.-phi) * feq[DIR_PP0] ;// / rho; - f[DIR_MM0] = 0;//(1.-phi) * feq[DIR_MM0] ;// / rho; - f[DIR_PM0] = 0;//(1.-phi) * feq[DIR_PM0] ;// / rho; - f[DIR_MP0] = 0;//(1.-phi) * feq[DIR_MP0] ;// / rho; - f[DIR_P0P] = 0;//(1.-phi) * feq[DIR_P0P] ;// / rho; - f[DIR_M0M] = 0;//(1.-phi) * feq[DIR_M0M] ;// / rho; - f[DIR_P0M] = 0;//(1.-phi) * feq[DIR_P0M] ;// / rho; - f[DIR_M0P] = 0;//(1.-phi) * feq[DIR_M0P] ;// / rho; - f[DIR_0PP] = 0;//(1.-phi) * feq[DIR_0PP] ;// / rho; - f[DIR_0MM] = 0;//(1.-phi) * feq[DIR_0MM] ;// / rho; - f[DIR_0PM] = 0;//(1.-phi) * feq[DIR_0PM] ;// / rho; - f[DIR_0MP] = 0;//(1.-phi) * feq[DIR_0MP] ;// / rho; - f[DIR_PPP] = 0;//(1.-phi) * feq[DIR_PPP] ;// / rho; - f[DIR_MPP] = 0;//(1.-phi) * feq[DIR_MPP] ;// / rho; - f[DIR_PMP] = 0;//(1.-phi) * feq[DIR_PMP] ;// / rho; - f[DIR_MMP] = 0;//(1.-phi) * feq[DIR_MMP] ;// / rho; - f[DIR_PPM] = 0;//(1.-phi) * feq[DIR_PPM] ;// / rho; - f[DIR_MPM] = 0;//(1.-phi) * feq[DIR_MPM] ;// / rho; - f[DIR_PMM] = 0;//(1.-phi) * feq[DIR_PMM] ;// / rho; - f[DIR_MMM] = 0;//(1.-phi) * feq[DIR_MMM] ;// / rho; + f[d000] = 0;//(1. - phi) * feq[d000]; // / rho; + f[dP00] = 0;//(1.-phi) * feq[dP00] ;// / rho; + f[dM00] = 0;//(1.-phi) * feq[dM00] ;// / rho; + f[d0P0] = 0;//(1.-phi) * feq[d0P0] ;// / rho; + f[d0M0] = 0;//(1.-phi) * feq[d0M0] ;// / rho; + f[d00P] = 0;//(1.-phi) * feq[d00P] ;// / rho; + f[d00M] = 0;//(1.-phi) * feq[d00M] ;// / rho; + f[dPP0] = 0;//(1.-phi) * feq[dPP0] ;// / rho; + f[dMM0] = 0;//(1.-phi) * feq[dMM0] ;// / rho; + f[dPM0] = 0;//(1.-phi) * feq[dPM0] ;// / rho; + f[dMP0] = 0;//(1.-phi) * feq[dMP0] ;// / rho; + f[dP0P] = 0;//(1.-phi) * feq[dP0P] ;// / rho; + f[dM0M] = 0;//(1.-phi) * feq[dM0M] ;// / rho; + f[dP0M] = 0;//(1.-phi) * feq[dP0M] ;// / rho; + f[dM0P] = 0;//(1.-phi) * feq[dM0P] ;// / rho; + f[d0PP] = 0;//(1.-phi) * feq[d0PP] ;// / rho; + f[d0MM] = 0;//(1.-phi) * feq[d0MM] ;// / rho; + f[d0PM] = 0;//(1.-phi) * feq[d0PM] ;// / rho; + f[d0MP] = 0;//(1.-phi) * feq[d0MP] ;// / rho; + f[dPPP] = 0;//(1.-phi) * feq[dPPP] ;// / rho; + f[dMPP] = 0;//(1.-phi) * feq[dMPP] ;// / rho; + f[dPMP] = 0;//(1.-phi) * feq[dPMP] ;// / rho; + f[dMMP] = 0;//(1.-phi) * feq[dMMP] ;// / rho; + f[dPPM] = 0;//(1.-phi) * feq[dPPM] ;// / rho; + f[dMPM] = 0;//(1.-phi) * feq[dMPM] ;// / rho; + f[dPMM] = 0;//(1.-phi) * feq[dPMM] ;// / rho; + f[dMMM] = 0;//(1.-phi) * feq[dMMM] ;// / rho; - distributionsH2->setDistribution(f, ix1, ix2, ix3); - distributionsH2->setDistributionInv(f, ix1, ix2, ix3); + distributionsH2->setPostCollisionDistribution(f, ix1, ix2, ix3); + distributionsH2->setPreCollisionDistribution(f, ix1, ix2, ix3); } } } diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.cpp index 4227b3af8af343de69b15944a5ebb96f5bd5c9d8..f66ec5059ddd3ad0110ac263ffdff2370cc944bc 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.cpp +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyNoSlipBCStrategy.cpp @@ -44,7 +44,7 @@ void RheologyNoSlipBCStrategy::applyBC() { real f[D3Q27System::ENDF + 1]; real feq[D3Q27System::ENDF + 1]; - distributions->getDistribution(f, x1, x2, x3); + distributions->getPreCollisionDistribution(f, x1, x2, x3); real rho, vx1, vx2, vx3; calcMacrosFct(f, rho, vx1, vx2, vx3); calcFeqFct(feq, rho, vx1, vx2, vx3); @@ -60,7 +60,7 @@ void RheologyNoSlipBCStrategy::applyBC() const int invDir = D3Q27System::INVDIR[fDir]; real q = bcPtr->getQ(invDir); real fReturn =(f[invDir] + q * f[fDir] + q * collFactorF * (feq[invDir] - f[invDir] + feq[fDir] - f[fDir])) / (vf::basics::constant::c1o1 + q); - distributions->setDistributionInvForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], invDir); + distributions->setPreCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], invDir); } } } \ No newline at end of file diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.cpp index 706edc7a2efe6ab23dde750b26d2905f16fe4220..24e1f4c14c9d7ac0339ab4214cf7a325b1319f02 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.cpp +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/RheologyVelocityBCStrategy.cpp @@ -55,7 +55,7 @@ void RheologyVelocityBCStrategy::applyBC() real f[D3Q27System::ENDF+1]; real feq[D3Q27System::ENDF+1]; - distributions->getDistribution(f, x1, x2, x3); + distributions->getPreCollisionDistribution(f, x1, x2, x3); real rho, vx1, vx2, vx3, drho; calcMacrosFct(f, drho, vx1, vx2, vx3); calcFeqFct(feq, drho, vx1, vx2, vx3); @@ -75,7 +75,7 @@ void RheologyVelocityBCStrategy::applyBC() real q = bcPtr->getQ(invDir); real velocity = bcPtr->getBoundaryVelocity(invDir); real fReturn = ((c1o1 - q) / (c1o1 + q)) * ((f[invDir])) + ((q * (f[invDir] + f[fdir] - collFactorF * (f[invDir] - feq[invDir] + f[fdir] - feq[fdir])) - velocity * rho) / (c1o1 + q)); - distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); } } diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.cpp index d9c393df348afd8fdb5133df27b1e239ae69d19d..65a730182931f6ddaa63f66b7eeb32375f49c5cc 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.cpp +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyDensityBCStrategy.cpp @@ -77,8 +77,8 @@ void ThixotropyDensityBCStrategy::applyBC() real feq[D3Q27System::ENDF + 1]; real h[D3Q27System::ENDF + 1]; real heq[D3Q27System::ENDF + 1]; - distributions->getDistributionInv(f, x1, x2, x3); - distributionsH->getDistributionInv(h, x1, x2, x3); + distributions->getPostCollisionDistribution(f, x1, x2, x3); + distributionsH->getPostCollisionDistribution(h, x1, x2, x3); real rho, vx1, vx2, vx3; @@ -94,12 +94,12 @@ void ThixotropyDensityBCStrategy::applyBC() int nx3 = x3; //flag points in direction of fluid - if (bcPtr->hasDensityBoundaryFlag(DIR_P00)) { nx1 -= 1; } - else if (bcPtr->hasDensityBoundaryFlag(DIR_M00)) { nx1 += 1; } - else if (bcPtr->hasDensityBoundaryFlag(DIR_0P0)) { nx2 -= 1; } - else if (bcPtr->hasDensityBoundaryFlag(DIR_0M0)) { nx2 += 1; } - else if (bcPtr->hasDensityBoundaryFlag(DIR_00P)) { nx3 -= 1; } - else if (bcPtr->hasDensityBoundaryFlag(DIR_00M)) { nx3 += 1; } + if (bcPtr->hasDensityBoundaryFlag(dP00)) { nx1 -= 1; } + else if (bcPtr->hasDensityBoundaryFlag(dM00)) { nx1 += 1; } + else if (bcPtr->hasDensityBoundaryFlag(d0P0)) { nx2 -= 1; } + else if (bcPtr->hasDensityBoundaryFlag(d0M0)) { nx2 += 1; } + else if (bcPtr->hasDensityBoundaryFlag(d00P)) { nx3 -= 1; } + else if (bcPtr->hasDensityBoundaryFlag(d00M)) { nx3 += 1; } else UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary...")); real rhoBC = bcPtr->getBoundaryDensity(); @@ -110,11 +110,11 @@ void ThixotropyDensityBCStrategy::applyBC() { real ftemp = calcFeqsForDirFct(fdir, rho, vx1, vx2, vx3); ftemp = calcFeqsForDirFct(fdir, rhoBC, vx1, vx2, vx3) + f[fdir] - ftemp; - distributions->setDistributionForDirection(ftemp, nx1, nx2, nx3, fdir); + distributions->setPostCollisionDistributionForDirection(ftemp, nx1, nx2, nx3, fdir); real htemp = D3Q27System::getCompFeqForDirection(fdir, lambda, vx1, vx2, vx3); htemp = D3Q27System::getCompFeqForDirection(fdir,lambdaBC, vx1, vx2, vx3) + h[fdir] - htemp; - distributionsH->setDistributionForDirection(htemp, nx1, nx2, nx3, fdir); + distributionsH->setPostCollisionDistributionForDirection(htemp, nx1, nx2, nx3, fdir); } } } diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.cpp index f8e86ca9d12cf183d43cd9e890a3a97466518a91..f54096ad23a985d152fb282677d9012c6ee478bd 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.cpp +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNoSlipBCStrategy.cpp @@ -71,8 +71,8 @@ void ThixotropyNoSlipBCStrategy::applyBC() real feq[D3Q27System::ENDF + 1]; real h[D3Q27System::ENDF + 1]; real heq[D3Q27System::ENDF + 1]; - distributions->getDistributionInv(f, x1, x2, x3); - distributionsH->getDistributionInv(h, x1, x2, x3); + distributions->getPostCollisionDistribution(f, x1, x2, x3); + distributionsH->getPostCollisionDistribution(h, x1, x2, x3); real rho, vx1, vx2, vx3;//, concentration, fl1, fl2, fl3, m100; calcMacrosFct(f, rho, vx1, vx2, vx3); calcFeqFct(feq, rho, vx1, vx2, vx3); @@ -91,8 +91,8 @@ void ThixotropyNoSlipBCStrategy::applyBC() real fReturnf = ((vf::basics::constant::c1o1 - q) / (vf::basics::constant::c1o1 + q))*((f[invDir] - feq[invDir]) / (vf::basics::constant::c1o1 - collFactor) + feq[invDir]) + ((q / (vf::basics::constant::c1o1 + q))*(f[invDir] + f[fdir])); real fReturnh = ((vf::basics::constant::c1o1 - q) / (vf::basics::constant::c1o1 + q))*((h[invDir] - heq[invDir]) / (vf::basics::constant::c1o1 - collFactor) + heq[invDir]) + ((q / (vf::basics::constant::c1o1 + q))*(h[invDir] + h[fdir])); - distributions->setDistributionForDirection(fReturnf, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); - distributionsH->setDistributionForDirection(fReturnh, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); + distributions->setPostCollisionDistributionForDirection(fReturnf, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); + distributionsH->setPostCollisionDistributionForDirection(fReturnh, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); } } diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.cpp index ff71b99eda23c6fabfd73842d43c24dc67fb526a..a0189f09ab712f29dc400b947178824f9bf467e4 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.cpp +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyNonReflectingOutflowBCStrategy.cpp @@ -80,147 +80,147 @@ void ThixotropyNonReflectingOutflowBCStrategy::applyBC() int direction = -1; //flag points in direction of fluid - if (bcPtr->hasDensityBoundaryFlag(DIR_P00)) { nx1 += 1; direction = DIR_P00; } - else if (bcPtr->hasDensityBoundaryFlag(DIR_M00)) { nx1 -= 1; direction = DIR_M00; } - else if (bcPtr->hasDensityBoundaryFlag(DIR_0P0)) { nx2 += 1; direction = DIR_0P0; } - else if (bcPtr->hasDensityBoundaryFlag(DIR_0M0)) { nx2 -= 1; direction = DIR_0M0; } - else if (bcPtr->hasDensityBoundaryFlag(DIR_00P)) { nx3 += 1; direction = DIR_00P; } - else if (bcPtr->hasDensityBoundaryFlag(DIR_00M)) { nx3 -= 1; direction = DIR_00M; } + if (bcPtr->hasDensityBoundaryFlag(dP00)) { nx1 += 1; direction = dP00; } + else if (bcPtr->hasDensityBoundaryFlag(dM00)) { nx1 -= 1; direction = dM00; } + else if (bcPtr->hasDensityBoundaryFlag(d0P0)) { nx2 += 1; direction = d0P0; } + else if (bcPtr->hasDensityBoundaryFlag(d0M0)) { nx2 -= 1; direction = d0M0; } + else if (bcPtr->hasDensityBoundaryFlag(d00P)) { nx3 += 1; direction = d00P; } + else if (bcPtr->hasDensityBoundaryFlag(d00M)) { nx3 -= 1; direction = d00M; } else UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary...")); - distributions->getDistribution(f, x1, x2, x3); - distributions->getDistribution(ftemp, nx1, nx2, nx3); + distributions->getPreCollisionDistribution(f, x1, x2, x3); + distributions->getPreCollisionDistribution(ftemp, nx1, nx2, nx3); real rho, vx1, vx2, vx3; calcMacrosFct(f, rho, vx1, vx2, vx3); switch (direction) { - case DIR_P00: - f[DIR_P00] = ftemp[DIR_P00] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P00]; - f[DIR_PP0] = ftemp[DIR_PP0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PP0]; - f[DIR_PM0] = ftemp[DIR_PM0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PM0]; - f[DIR_P0P] = ftemp[DIR_P0P] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P0P]; - f[DIR_P0M] = ftemp[DIR_P0M] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_P0M]; - f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PPP]; - f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PMP]; - f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PPM]; - f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * f[DIR_PMM]; + case dP00: + f[dP00] = ftemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP00]; + f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPP0]; + f[dPM0] = ftemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPM0]; + f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0P]; + f[dP0M] = ftemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0M]; + f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPP]; + f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMP]; + f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPM]; + f[dPMM] = ftemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMM]; - distributions->setDistributionInvForDirection(f[DIR_P00], x1 + DX1[DIR_M00], x2 + DX2[DIR_M00], x3 + DX3[DIR_M00], DIR_M00); - distributions->setDistributionInvForDirection(f[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0); - distributions->setDistributionInvForDirection(f[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0); - distributions->setDistributionInvForDirection(f[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M); - distributions->setDistributionInvForDirection(f[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P); - distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM); - distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM); - distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP); - distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP); + distributions->setPreCollisionDistributionForDirection(f[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00); + distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); + distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); + distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); + distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); + distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); break; - case DIR_M00: - f[DIR_M00] = ftemp[DIR_M00] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M00]; - f[DIR_MP0] = ftemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MP0]; - f[DIR_MM0] = ftemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MM0]; - f[DIR_M0P] = ftemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M0P]; - f[DIR_M0M] = ftemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_M0M]; - f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MPP]; - f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MMP]; - f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MPM]; - f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * f[DIR_MMM]; + case dM00: + f[dM00] = ftemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM00]; + f[dMP0] = ftemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMP0]; + f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMM0]; + f[dM0P] = ftemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0P]; + f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0M]; + f[dMPP] = ftemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPP]; + f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMP]; + f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPM]; + f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMM]; - distributions->setDistributionInvForDirection(f[DIR_M00], x1 + DX1[DIR_P00], x2 + DX2[DIR_P00], x3 + DX3[DIR_P00], DIR_P00); - distributions->setDistributionInvForDirection(f[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0); - distributions->setDistributionInvForDirection(f[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0); - distributions->setDistributionInvForDirection(f[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M); - distributions->setDistributionInvForDirection(f[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P); - distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM); - distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM); - distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP); - distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP); + distributions->setPreCollisionDistributionForDirection(f[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00); + distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); + distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); + distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); + distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); + distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); break; - case DIR_0P0: - f[DIR_0P0] = ftemp[DIR_0P0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0P0]; - f[DIR_PP0] = ftemp[DIR_PP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PP0]; - f[DIR_MP0] = ftemp[DIR_MP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MP0]; - f[DIR_0PP] = ftemp[DIR_0PP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0PP]; - f[DIR_0PM] = ftemp[DIR_0PM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_0PM]; - f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PPP]; - f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MPP]; - f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_PPM]; - f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * f[DIR_MPM]; + case d0P0: + f[d0P0] = ftemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0P0]; + f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPP0]; + f[dMP0] = ftemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMP0]; + f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PP]; + f[d0PM] = ftemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PM]; + f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPP]; + f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPP]; + f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPM]; + f[dMPM] = ftemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPM]; - distributions->setDistributionInvForDirection(f[DIR_0P0], x1 + DX1[DIR_0M0], x2 + DX2[DIR_0M0], x3 + DX3[DIR_0M0], DIR_0M0); - distributions->setDistributionInvForDirection(f[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0); - distributions->setDistributionInvForDirection(f[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0); - distributions->setDistributionInvForDirection(f[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM); - distributions->setDistributionInvForDirection(f[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP); - distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM); - distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM); - distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP); - distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP); + distributions->setPreCollisionDistributionForDirection(f[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0); + distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); + distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); + distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); + distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); + distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); break; - case DIR_0M0: - f[DIR_0M0] = ftemp[DIR_0M0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0M0]; - f[DIR_PM0] = ftemp[DIR_PM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PM0]; - f[DIR_MM0] = ftemp[DIR_MM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MM0]; - f[DIR_0MP] = ftemp[DIR_0MP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0MP]; - f[DIR_0MM] = ftemp[DIR_0MM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_0MM]; - f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PMP]; - f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MMP]; - f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_PMM]; - f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * f[DIR_MMM]; + case d0M0: + f[d0M0] = ftemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0M0]; + f[dPM0] = ftemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPM0]; + f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMM0]; + f[d0MP] = ftemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MP]; + f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MM]; + f[dPMP] = ftemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMP]; + f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMP]; + f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMM]; + f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMM]; - distributions->setDistributionInvForDirection(f[DIR_0M0], x1 + DX1[DIR_0P0], x2 + DX2[DIR_0P0], x3 + DX3[DIR_0P0], DIR_0P0); - distributions->setDistributionInvForDirection(f[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0); - distributions->setDistributionInvForDirection(f[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0); - distributions->setDistributionInvForDirection(f[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM); - distributions->setDistributionInvForDirection(f[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP); - distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM); - distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM); - distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP); - distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP); + distributions->setPreCollisionDistributionForDirection(f[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0); + distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); + distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); + distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); + distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); + distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); break; - case DIR_00P: - f[DIR_00P] = ftemp[DIR_00P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_00P]; - f[DIR_P0P] = ftemp[DIR_P0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_P0P]; - f[DIR_M0P] = ftemp[DIR_M0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_M0P]; - f[DIR_0PP] = ftemp[DIR_0PP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_0PP]; - f[DIR_0MP] = ftemp[DIR_0MP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_0MP]; - f[DIR_PPP] = ftemp[DIR_PPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_PPP]; - f[DIR_MPP] = ftemp[DIR_MPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_MPP]; - f[DIR_PMP] = ftemp[DIR_PMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_PMP]; - f[DIR_MMP] = ftemp[DIR_MMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * f[DIR_MMP]; + case d00P: + f[d00P] = ftemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d00P]; + f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dP0P]; + f[dM0P] = ftemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dM0P]; + f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0PP]; + f[d0MP] = ftemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0MP]; + f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPPP]; + f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMPP]; + f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPMP]; + f[dMMP] = ftemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMMP]; - distributions->setDistributionInvForDirection(f[DIR_00P], x1 + DX1[DIR_00M], x2 + DX2[DIR_00M], x3 + DX3[DIR_00M], DIR_00M); - distributions->setDistributionInvForDirection(f[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M); - distributions->setDistributionInvForDirection(f[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M); - distributions->setDistributionInvForDirection(f[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM); - distributions->setDistributionInvForDirection(f[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM); - distributions->setDistributionInvForDirection(f[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM); - distributions->setDistributionInvForDirection(f[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM); - distributions->setDistributionInvForDirection(f[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM); - distributions->setDistributionInvForDirection(f[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM); + distributions->setPreCollisionDistributionForDirection(f[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M); + distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); + distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); + distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); + distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); + distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); break; - case DIR_00M: - f[DIR_00M] = ftemp[DIR_00M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_00M]; - f[DIR_P0M] = ftemp[DIR_P0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_P0M]; - f[DIR_M0M] = ftemp[DIR_M0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_M0M]; - f[DIR_0PM] = ftemp[DIR_0PM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_0PM]; - f[DIR_0MM] = ftemp[DIR_0MM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_0MM]; - f[DIR_PPM] = ftemp[DIR_PPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_PPM]; - f[DIR_MPM] = ftemp[DIR_MPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_MPM]; - f[DIR_PMM] = ftemp[DIR_PMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_PMM]; - f[DIR_MMM] = ftemp[DIR_MMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * f[DIR_MMM]; + case d00M: + f[d00M] = ftemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d00M]; + f[dP0M] = ftemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dP0M]; + f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dM0M]; + f[d0PM] = ftemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0PM]; + f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0MM]; + f[dPPM] = ftemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPPM]; + f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMPM]; + f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPMM]; + f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMMM]; - distributions->setDistributionInvForDirection(f[DIR_00M], x1 + DX1[DIR_00P], x2 + DX2[DIR_00P], x3 + DX3[DIR_00P], DIR_00P); - distributions->setDistributionInvForDirection(f[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P); - distributions->setDistributionInvForDirection(f[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P); - distributions->setDistributionInvForDirection(f[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP); - distributions->setDistributionInvForDirection(f[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP); - distributions->setDistributionInvForDirection(f[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP); - distributions->setDistributionInvForDirection(f[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP); - distributions->setDistributionInvForDirection(f[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP); - distributions->setDistributionInvForDirection(f[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP); + distributions->setPreCollisionDistributionForDirection(f[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P); + distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); + distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); + distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); + distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); + distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); break; default: UB_THROW(UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!")); @@ -228,8 +228,8 @@ void ThixotropyNonReflectingOutflowBCStrategy::applyBC() real h[D3Q27System::ENDF + 1]; real htemp[ENDF + 1]; - distributionsH->getDistribution(h, x1, x2, x3); - distributionsH->getDistribution(htemp, nx1, nx2, nx3); + distributionsH->getPreCollisionDistribution(h, x1, x2, x3); + distributionsH->getPreCollisionDistribution(htemp, nx1, nx2, nx3); vx1 = 0.0; vx2 = 0.0; @@ -240,131 +240,131 @@ void ThixotropyNonReflectingOutflowBCStrategy::applyBC() switch (direction) { - case DIR_P00: - h[DIR_P00] = htemp[DIR_P00] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_P00]; - h[DIR_PP0] = htemp[DIR_PP0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PP0]; - h[DIR_PM0] = htemp[DIR_PM0] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PM0]; - h[DIR_P0P] = htemp[DIR_P0P] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_P0P]; - h[DIR_P0M] = htemp[DIR_P0M] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_P0M]; - h[DIR_PPP] = htemp[DIR_PPP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PPP]; - h[DIR_PMP] = htemp[DIR_PMP] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PMP]; - h[DIR_PPM] = htemp[DIR_PPM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PPM]; - h[DIR_PMM] = htemp[DIR_PMM] * (one_over_sqrt3 + vx1) + (c1o1 - one_over_sqrt3 - vx1) * h[DIR_PMM]; + case dP00: + h[dP00] = htemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP00]; + h[dPP0] = htemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPP0]; + h[dPM0] = htemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPM0]; + h[dP0P] = htemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP0P]; + h[dP0M] = htemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dP0M]; + h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPPP]; + h[dPMP] = htemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPMP]; + h[dPPM] = htemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPPM]; + h[dPMM] = htemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * h[dPMM]; - distributionsH->setDistributionInvForDirection(h[DIR_P00], x1 + DX1[DIR_M00], x2 + DX2[DIR_M00], x3 + DX3[DIR_M00], DIR_M00); - distributionsH->setDistributionInvForDirection(h[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0); - distributionsH->setDistributionInvForDirection(h[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0); - distributionsH->setDistributionInvForDirection(h[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M); - distributionsH->setDistributionInvForDirection(h[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P); - distributionsH->setDistributionInvForDirection(h[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM); - distributionsH->setDistributionInvForDirection(h[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM); - distributionsH->setDistributionInvForDirection(h[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP); - distributionsH->setDistributionInvForDirection(h[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP); + distributionsH->setPreCollisionDistributionForDirection(h[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00); + distributionsH->setPreCollisionDistributionForDirection(h[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); + distributionsH->setPreCollisionDistributionForDirection(h[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); + distributionsH->setPreCollisionDistributionForDirection(h[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); + distributionsH->setPreCollisionDistributionForDirection(h[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); + distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); break; - case DIR_M00: - h[DIR_M00] = htemp[DIR_M00] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_M00]; - h[DIR_MP0] = htemp[DIR_MP0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MP0]; - h[DIR_MM0] = htemp[DIR_MM0] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MM0]; - h[DIR_M0P] = htemp[DIR_M0P] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_M0P]; - h[DIR_M0M] = htemp[DIR_M0M] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_M0M]; - h[DIR_MPP] = htemp[DIR_MPP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MPP]; - h[DIR_MMP] = htemp[DIR_MMP] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MMP]; - h[DIR_MPM] = htemp[DIR_MPM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MPM]; - h[DIR_MMM] = htemp[DIR_MMM] * (one_over_sqrt3 - vx1) + (c1o1 - one_over_sqrt3 + vx1) * h[DIR_MMM]; + case dM00: + h[dM00] = htemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM00]; + h[dMP0] = htemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMP0]; + h[dMM0] = htemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMM0]; + h[dM0P] = htemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM0P]; + h[dM0M] = htemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dM0M]; + h[dMPP] = htemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMPP]; + h[dMMP] = htemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMMP]; + h[dMPM] = htemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMPM]; + h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * h[dMMM]; - distributionsH->setDistributionInvForDirection(h[DIR_M00], x1 + DX1[DIR_P00], x2 + DX2[DIR_P00], x3 + DX3[DIR_P00], DIR_P00); - distributionsH->setDistributionInvForDirection(h[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0); - distributionsH->setDistributionInvForDirection(h[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0); - distributionsH->setDistributionInvForDirection(h[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M); - distributionsH->setDistributionInvForDirection(h[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P); - distributionsH->setDistributionInvForDirection(h[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM); - distributionsH->setDistributionInvForDirection(h[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM); - distributionsH->setDistributionInvForDirection(h[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP); - distributionsH->setDistributionInvForDirection(h[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP); + distributionsH->setPreCollisionDistributionForDirection(h[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00); + distributionsH->setPreCollisionDistributionForDirection(h[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); + distributionsH->setPreCollisionDistributionForDirection(h[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); + distributionsH->setPreCollisionDistributionForDirection(h[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); + distributionsH->setPreCollisionDistributionForDirection(h[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); + distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); break; - case DIR_0P0: - h[DIR_0P0] = htemp[DIR_0P0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_0P0]; - h[DIR_PP0] = htemp[DIR_PP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_PP0]; - h[DIR_MP0] = htemp[DIR_MP0] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_MP0]; - h[DIR_0PP] = htemp[DIR_0PP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_0PP]; - h[DIR_0PM] = htemp[DIR_0PM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_0PM]; - h[DIR_PPP] = htemp[DIR_PPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_PPP]; - h[DIR_MPP] = htemp[DIR_MPP] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_MPP]; - h[DIR_PPM] = htemp[DIR_PPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_PPM]; - h[DIR_MPM] = htemp[DIR_MPM] * (one_over_sqrt3 + vx2) + (c1o1 - one_over_sqrt3 - vx2) * h[DIR_MPM]; + case d0P0: + h[d0P0] = htemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0P0]; + h[dPP0] = htemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPP0]; + h[dMP0] = htemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMP0]; + h[d0PP] = htemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0PP]; + h[d0PM] = htemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[d0PM]; + h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPPP]; + h[dMPP] = htemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMPP]; + h[dPPM] = htemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dPPM]; + h[dMPM] = htemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * h[dMPM]; - distributionsH->setDistributionInvForDirection(h[DIR_0P0], x1 + DX1[DIR_0M0], x2 + DX2[DIR_0M0], x3 + DX3[DIR_0M0], DIR_0M0); - distributionsH->setDistributionInvForDirection(h[DIR_PP0], x1 + DX1[DIR_MM0], x2 + DX2[DIR_MM0], x3 + DX3[DIR_MM0], DIR_MM0); - distributionsH->setDistributionInvForDirection(h[DIR_MP0], x1 + DX1[DIR_PM0], x2 + DX2[DIR_PM0], x3 + DX3[DIR_PM0], DIR_PM0); - distributionsH->setDistributionInvForDirection(h[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM); - distributionsH->setDistributionInvForDirection(h[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP); - distributionsH->setDistributionInvForDirection(h[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM); - distributionsH->setDistributionInvForDirection(h[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM); - distributionsH->setDistributionInvForDirection(h[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP); - distributionsH->setDistributionInvForDirection(h[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP); + distributionsH->setPreCollisionDistributionForDirection(h[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0); + distributionsH->setPreCollisionDistributionForDirection(h[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); + distributionsH->setPreCollisionDistributionForDirection(h[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); + distributionsH->setPreCollisionDistributionForDirection(h[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); + distributionsH->setPreCollisionDistributionForDirection(h[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); + distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); break; - case DIR_0M0: - h[DIR_0M0] = htemp[DIR_0M0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_0M0]; - h[DIR_PM0] = htemp[DIR_PM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_PM0]; - h[DIR_MM0] = htemp[DIR_MM0] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_MM0]; - h[DIR_0MP] = htemp[DIR_0MP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_0MP]; - h[DIR_0MM] = htemp[DIR_0MM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_0MM]; - h[DIR_PMP] = htemp[DIR_PMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_PMP]; - h[DIR_MMP] = htemp[DIR_MMP] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_MMP]; - h[DIR_PMM] = htemp[DIR_PMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_PMM]; - h[DIR_MMM] = htemp[DIR_MMM] * (one_over_sqrt3 - vx2) + (c1o1 - one_over_sqrt3 + vx2) * h[DIR_MMM]; + case d0M0: + h[d0M0] = htemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0M0]; + h[dPM0] = htemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPM0]; + h[dMM0] = htemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMM0]; + h[d0MP] = htemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0MP]; + h[d0MM] = htemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[d0MM]; + h[dPMP] = htemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPMP]; + h[dMMP] = htemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMMP]; + h[dPMM] = htemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dPMM]; + h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * h[dMMM]; - distributionsH->setDistributionInvForDirection(h[DIR_0M0], x1 + DX1[DIR_0P0], x2 + DX2[DIR_0P0], x3 + DX3[DIR_0P0], DIR_0P0); - distributionsH->setDistributionInvForDirection(h[DIR_PM0], x1 + DX1[DIR_MP0], x2 + DX2[DIR_MP0], x3 + DX3[DIR_MP0], DIR_MP0); - distributionsH->setDistributionInvForDirection(h[DIR_MM0], x1 + DX1[DIR_PP0], x2 + DX2[DIR_PP0], x3 + DX3[DIR_PP0], DIR_PP0); - distributionsH->setDistributionInvForDirection(h[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM); - distributionsH->setDistributionInvForDirection(h[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP); - distributionsH->setDistributionInvForDirection(h[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM); - distributionsH->setDistributionInvForDirection(h[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM); - distributionsH->setDistributionInvForDirection(h[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP); - distributionsH->setDistributionInvForDirection(h[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP); + distributionsH->setPreCollisionDistributionForDirection(h[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0); + distributionsH->setPreCollisionDistributionForDirection(h[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); + distributionsH->setPreCollisionDistributionForDirection(h[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); + distributionsH->setPreCollisionDistributionForDirection(h[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); + distributionsH->setPreCollisionDistributionForDirection(h[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); + distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); break; - case DIR_00P: - h[DIR_00P] = htemp[DIR_00P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_00P]; - h[DIR_P0P] = htemp[DIR_P0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_P0P]; - h[DIR_M0P] = htemp[DIR_M0P] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_M0P]; - h[DIR_0PP] = htemp[DIR_0PP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_0PP]; - h[DIR_0MP] = htemp[DIR_0MP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_0MP]; - h[DIR_PPP] = htemp[DIR_PPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_PPP]; - h[DIR_MPP] = htemp[DIR_MPP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_MPP]; - h[DIR_PMP] = htemp[DIR_PMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_PMP]; - h[DIR_MMP] = htemp[DIR_MMP] * (one_over_sqrt3 + vx3) + (c1o1 - one_over_sqrt3 - vx3) * h[DIR_MMP]; + case d00P: + h[d00P] = htemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d00P]; + h[dP0P] = htemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dP0P]; + h[dM0P] = htemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dM0P]; + h[d0PP] = htemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d0PP]; + h[d0MP] = htemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[d0MP]; + h[dPPP] = htemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dPPP]; + h[dMPP] = htemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dMPP]; + h[dPMP] = htemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dPMP]; + h[dMMP] = htemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * h[dMMP]; - distributionsH->setDistributionInvForDirection(h[DIR_00P], x1 + DX1[DIR_00M], x2 + DX2[DIR_00M], x3 + DX3[DIR_00M], DIR_00M); - distributionsH->setDistributionInvForDirection(h[DIR_P0P], x1 + DX1[DIR_M0M], x2 + DX2[DIR_M0M], x3 + DX3[DIR_M0M], DIR_M0M); - distributionsH->setDistributionInvForDirection(h[DIR_M0P], x1 + DX1[DIR_P0M], x2 + DX2[DIR_P0M], x3 + DX3[DIR_P0M], DIR_P0M); - distributionsH->setDistributionInvForDirection(h[DIR_0PP], x1 + DX1[DIR_0MM], x2 + DX2[DIR_0MM], x3 + DX3[DIR_0MM], DIR_0MM); - distributionsH->setDistributionInvForDirection(h[DIR_0MP], x1 + DX1[DIR_0PM], x2 + DX2[DIR_0PM], x3 + DX3[DIR_0PM], DIR_0PM); - distributionsH->setDistributionInvForDirection(h[DIR_PPP], x1 + DX1[DIR_MMM], x2 + DX2[DIR_MMM], x3 + DX3[DIR_MMM], DIR_MMM); - distributionsH->setDistributionInvForDirection(h[DIR_MPP], x1 + DX1[DIR_PMM], x2 + DX2[DIR_PMM], x3 + DX3[DIR_PMM], DIR_PMM); - distributionsH->setDistributionInvForDirection(h[DIR_PMP], x1 + DX1[DIR_MPM], x2 + DX2[DIR_MPM], x3 + DX3[DIR_MPM], DIR_MPM); - distributionsH->setDistributionInvForDirection(h[DIR_MMP], x1 + DX1[DIR_PPM], x2 + DX2[DIR_PPM], x3 + DX3[DIR_PPM], DIR_PPM); + distributionsH->setPreCollisionDistributionForDirection(h[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M); + distributionsH->setPreCollisionDistributionForDirection(h[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); + distributionsH->setPreCollisionDistributionForDirection(h[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); + distributionsH->setPreCollisionDistributionForDirection(h[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); + distributionsH->setPreCollisionDistributionForDirection(h[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); + distributionsH->setPreCollisionDistributionForDirection(h[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributionsH->setPreCollisionDistributionForDirection(h[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributionsH->setPreCollisionDistributionForDirection(h[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributionsH->setPreCollisionDistributionForDirection(h[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); break; - case DIR_00M: - h[DIR_00M] = htemp[DIR_00M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_00M]; - h[DIR_P0M] = htemp[DIR_P0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_P0M]; - h[DIR_M0M] = htemp[DIR_M0M] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_M0M]; - h[DIR_0PM] = htemp[DIR_0PM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_0PM]; - h[DIR_0MM] = htemp[DIR_0MM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_0MM]; - h[DIR_PPM] = htemp[DIR_PPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_PPM]; - h[DIR_MPM] = htemp[DIR_MPM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_MPM]; - h[DIR_PMM] = htemp[DIR_PMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_PMM]; - h[DIR_MMM] = htemp[DIR_MMM] * (one_over_sqrt3 - vx3) + (c1o1 - one_over_sqrt3 + vx3) * h[DIR_MMM]; + case d00M: + h[d00M] = htemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d00M]; + h[dP0M] = htemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dP0M]; + h[dM0M] = htemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dM0M]; + h[d0PM] = htemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d0PM]; + h[d0MM] = htemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[d0MM]; + h[dPPM] = htemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dPPM]; + h[dMPM] = htemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dMPM]; + h[dPMM] = htemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dPMM]; + h[dMMM] = htemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * h[dMMM]; - distributionsH->setDistributionInvForDirection(h[DIR_00M], x1 + DX1[DIR_00P], x2 + DX2[DIR_00P], x3 + DX3[DIR_00P], DIR_00P); - distributionsH->setDistributionInvForDirection(h[DIR_P0M], x1 + DX1[DIR_M0P], x2 + DX2[DIR_M0P], x3 + DX3[DIR_M0P], DIR_M0P); - distributionsH->setDistributionInvForDirection(h[DIR_M0M], x1 + DX1[DIR_P0P], x2 + DX2[DIR_P0P], x3 + DX3[DIR_P0P], DIR_P0P); - distributionsH->setDistributionInvForDirection(h[DIR_0PM], x1 + DX1[DIR_0MP], x2 + DX2[DIR_0MP], x3 + DX3[DIR_0MP], DIR_0MP); - distributionsH->setDistributionInvForDirection(h[DIR_0MM], x1 + DX1[DIR_0PP], x2 + DX2[DIR_0PP], x3 + DX3[DIR_0PP], DIR_0PP); - distributionsH->setDistributionInvForDirection(h[DIR_PPM], x1 + DX1[DIR_MMP], x2 + DX2[DIR_MMP], x3 + DX3[DIR_MMP], DIR_MMP); - distributionsH->setDistributionInvForDirection(h[DIR_MPM], x1 + DX1[DIR_PMP], x2 + DX2[DIR_PMP], x3 + DX3[DIR_PMP], DIR_PMP); - distributionsH->setDistributionInvForDirection(h[DIR_PMM], x1 + DX1[DIR_MPP], x2 + DX2[DIR_MPP], x3 + DX3[DIR_MPP], DIR_MPP); - distributionsH->setDistributionInvForDirection(h[DIR_MMM], x1 + DX1[DIR_PPP], x2 + DX2[DIR_PPP], x3 + DX3[DIR_PPP], DIR_PPP); + distributionsH->setPreCollisionDistributionForDirection(h[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P); + distributionsH->setPreCollisionDistributionForDirection(h[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); + distributionsH->setPreCollisionDistributionForDirection(h[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); + distributionsH->setPreCollisionDistributionForDirection(h[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); + distributionsH->setPreCollisionDistributionForDirection(h[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); + distributionsH->setPreCollisionDistributionForDirection(h[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributionsH->setPreCollisionDistributionForDirection(h[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + distributionsH->setPreCollisionDistributionForDirection(h[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + distributionsH->setPreCollisionDistributionForDirection(h[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); break; default: UB_THROW(UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!")); diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.cpp index 2e69dbaf971350279f34101c783b7f03f9802209..cef42e07f366157ead553f19c938b7d6ce5e4bf2 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.cpp +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityBCStrategy.cpp @@ -75,8 +75,8 @@ void ThixotropyVelocityBCStrategy::applyBC() real feq[D3Q27System::ENDF + 1]; real h[D3Q27System::ENDF + 1]; - distributions->getDistributionInv(f, x1, x2, x3); - distributionsH->getDistributionInv(h, x1, x2, x3); + distributions->getPostCollisionDistribution(f, x1, x2, x3); + distributionsH->getPostCollisionDistribution(h, x1, x2, x3); real rho, vx1, vx2, vx3, drho; calcMacrosFct(f, drho, vx1, vx2, vx3); @@ -92,12 +92,12 @@ void ThixotropyVelocityBCStrategy::applyBC() int nx3 = x3; //flag points in direction of fluid - if (bcPtr->hasVelocityBoundaryFlag(DIR_P00)) { nx1 -= 1; } - else if (bcPtr->hasVelocityBoundaryFlag(DIR_M00)) { nx1 += 1; } - else if (bcPtr->hasVelocityBoundaryFlag(DIR_0P0)) { nx2 -= 1; } - else if (bcPtr->hasVelocityBoundaryFlag(DIR_0M0)) { nx2 += 1; } - else if (bcPtr->hasVelocityBoundaryFlag(DIR_00P)) { nx3 -= 1; } - else if (bcPtr->hasVelocityBoundaryFlag(DIR_00M)) { nx3 += 1; } + if (bcPtr->hasVelocityBoundaryFlag(dP00)) { nx1 -= 1; } + else if (bcPtr->hasVelocityBoundaryFlag(dM00)) { nx1 += 1; } + else if (bcPtr->hasVelocityBoundaryFlag(d0P0)) { nx2 -= 1; } + else if (bcPtr->hasVelocityBoundaryFlag(d0M0)) { nx2 += 1; } + else if (bcPtr->hasVelocityBoundaryFlag(d00P)) { nx3 -= 1; } + else if (bcPtr->hasVelocityBoundaryFlag(d00M)) { nx3 += 1; } else UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on velocity boundary...")); //lambdaBC = bcPtr->getBoundaryThixotropy(); @@ -110,11 +110,11 @@ void ThixotropyVelocityBCStrategy::applyBC() // { // LBMReal ftemp = calcFeqsForDirFct(fdir, rho, vx1, vx2, vx3); // ftemp = calcFeqsForDirFct(fdir, rhoBC, vx1, vx2, vx3) + f[fdir] - ftemp; - // distributions->setDistributionForDirection(ftemp, nx1, nx2, nx3, fdir); + // distributions->setPostCollisionDistributionForDirection(ftemp, nx1, nx2, nx3, fdir); // LBMReal htemp = D3Q27System::getCompFeqForDirection(fdir, lambda, vx1, vx2, vx3); // htemp = D3Q27System::getCompFeqForDirection(fdir,lambdaBC, vx1, vx2, vx3) + h[fdir] - htemp; - // distributionsH->setDistributionForDirection(htemp, nx1, nx2, nx3, fdir); + // distributionsH->setPostCollisionDistributionForDirection(htemp, nx1, nx2, nx3, fdir); // } //} @@ -126,11 +126,11 @@ void ThixotropyVelocityBCStrategy::applyBC() real q = bcPtr->getQ(invDir);// m+m q=0 stabiler real velocity = bcPtr->getBoundaryVelocity(invDir); real fReturn = ((vf::basics::constant::c1o1 - q) / (vf::basics::constant::c1o1 + q)) * ((f[invDir] - feq[invDir]) / (vf::basics::constant::c1o1 - collFactor) + feq[invDir]) + ((q * (f[invDir] + f[fdir]) - velocity * rho) / (vf::basics::constant::c1o1 + q)); - distributions->setDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); + distributions->setPostCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); real htemp = D3Q27System::getCompFeqForDirection(fdir, lambda, vx1, vx2, vx3); htemp = D3Q27System::getCompFeqForDirection(fdir, lambdaBC, vx1, vx2, vx3) + h[fdir] - htemp; - distributionsH->setDistributionForDirection(htemp, nx1, nx2, nx3, fdir); + distributionsH->setPostCollisionDistributionForDirection(htemp, nx1, nx2, nx3, fdir); } } } diff --git a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.cpp b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.cpp index fb43ccc69f94a203932e56fa1efae68ae4759475..c87e4f57bae5438c02f55fd2507b62e331698de2 100644 --- a/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.cpp +++ b/src/cpu/NonNewtonianFluids/BoundaryConditions/ThixotropyVelocityWithDensityBCStrategy.cpp @@ -67,10 +67,10 @@ void ThixotropyVelocityWithDensityBCStrategy::applyBC() //velocity bc for non reflecting pressure bc real f[D3Q27System::ENDF+1]; - distributions->getDistributionInv(f, x1, x2, x3); + distributions->getPostCollisionDistribution(f, x1, x2, x3); real h[D3Q27System::ENDF + 1]; - distributionsH->getDistributionInv(h, x1, x2, x3); + distributionsH->getPostCollisionDistribution(h, x1, x2, x3); real rho, vx1, vx2, vx3, drho; calcMacrosFct(f, drho, vx1, vx2, vx3); @@ -86,12 +86,12 @@ void ThixotropyVelocityWithDensityBCStrategy::applyBC() int nx3 = x3; //flag points in direction of fluid - if (bcPtr->hasVelocityBoundaryFlag(DIR_P00)) { nx1 -= 1; } - else if (bcPtr->hasVelocityBoundaryFlag(DIR_M00)) { nx1 += 1; } - else if (bcPtr->hasVelocityBoundaryFlag(DIR_0P0)) { nx2 -= 1; } - else if (bcPtr->hasVelocityBoundaryFlag(DIR_0M0)) { nx2 += 1; } - else if (bcPtr->hasVelocityBoundaryFlag(DIR_00P)) { nx3 -= 1; } - else if (bcPtr->hasVelocityBoundaryFlag(DIR_00M)) { nx3 += 1; } + if (bcPtr->hasVelocityBoundaryFlag(dP00)) { nx1 -= 1; } + else if (bcPtr->hasVelocityBoundaryFlag(dM00)) { nx1 += 1; } + else if (bcPtr->hasVelocityBoundaryFlag(d0P0)) { nx2 -= 1; } + else if (bcPtr->hasVelocityBoundaryFlag(d0M0)) { nx2 += 1; } + else if (bcPtr->hasVelocityBoundaryFlag(d00P)) { nx3 -= 1; } + else if (bcPtr->hasVelocityBoundaryFlag(d00M)) { nx3 += 1; } else UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on velocity boundary...")); for (int fdir = D3Q27System::FSTARTDIR; fdir <= D3Q27System::FENDDIR; fdir++) @@ -116,7 +116,7 @@ void ThixotropyVelocityWithDensityBCStrategy::applyBC() real velocity = bcPtr->getBoundaryVelocity(fdir); real fReturn = (f[fdir] + f[invDir] - velocity*rho) / vf::basics::constant::c2o1 - drho*D3Q27System::WEIGTH[invDir]; - distributions->setDistributionForDirection(fReturn, nX1, nX2, nX3, invDir); + distributions->setPostCollisionDistributionForDirection(fReturn, nX1, nX2, nX3, invDir); } } @@ -124,7 +124,7 @@ void ThixotropyVelocityWithDensityBCStrategy::applyBC() { real htemp = D3Q27System::getCompFeqForDirection(fdir, lambda, vx1, vx2, vx3); htemp = D3Q27System::getCompFeqForDirection(fdir, lambdaBC, vx1, vx2, vx3) + h[fdir] - htemp; - distributionsH->setDistributionForDirection(htemp, nx1, nx2, nx3, fdir); + distributionsH->setPostCollisionDistributionForDirection(htemp, nx1, nx2, nx3, fdir); } } } diff --git a/src/cpu/NonNewtonianFluids/CMakeLists.txt b/src/cpu/NonNewtonianFluids/CMakeLists.txt index 35765164bce5ce208f1c43fcc7345cbd77f4e999..261919282ce830bfcf1e364443c439338b642d88 100644 --- a/src/cpu/NonNewtonianFluids/CMakeLists.txt +++ b/src/cpu/NonNewtonianFluids/CMakeLists.txt @@ -1 +1 @@ -vf_add_library(PUBLIC_LINK VirtualFluidsCore) \ No newline at end of file +vf_add_library(PUBLIC_LINK cpu_core) \ No newline at end of file diff --git a/src/cpu/NonNewtonianFluids/LBM/Rheology.h b/src/cpu/NonNewtonianFluids/LBM/Rheology.h index 782810ca3f68290310af3e70d440488c27bf96de..54e375de60951129af1e37a9fb1569e2fd4bab4c 100644 --- a/src/cpu/NonNewtonianFluids/LBM/Rheology.h +++ b/src/cpu/NonNewtonianFluids/LBM/Rheology.h @@ -89,7 +89,7 @@ private: ////////////////////////////////////////////////////////////////////////// inline real Rheology::getBinghamCollFactor(real omegaInf, real shearRate, real drho) { - real cs2 = vf::basics::constant::one_over_sqrt3 * vf::basics::constant::one_over_sqrt3; + real cs2 = vf::basics::constant::c1oSqrt3 * vf::basics::constant::c1oSqrt3; real rho = vf::basics::constant::c1o1 + drho; //analytical solution real omega = omegaInf * (vf::basics::constant::c1o1 - (omegaInf * tau0) / (shearRate * cs2 * rho + UbMath::Epsilon<real>::val())); @@ -120,7 +120,7 @@ inline real Rheology::getBinghamCollFactor(real omegaInf, real shearRate, real d inline real Rheology::getBinghamCollFactorOld(real omegaInf, real shearRate, real drho) { - const real cs2 = vf::basics::constant::c1o3; // UbMath::one_over_sqrt3* UbMath::one_over_sqrt3; + const real cs2 = vf::basics::constant::c1o3; // UbMath::c1oSqrt3* UbMath::c1oSqrt3; real rho = vf::basics::constant::c1o1 + drho; if (rho * cs2 * (vf::basics::constant::c1o1 / omegaInf - vf::basics::constant::c1o2) * shearRate < tau0) @@ -131,7 +131,7 @@ inline real Rheology::getBinghamCollFactorOld(real omegaInf, real shearRate, rea ////////////////////////////////////////////////////////////////////////// inline real Rheology::getHerschelBulkleyCollFactor(real omegaInf, real shearRate, real drho) { - real cs2 = vf::basics::constant::one_over_sqrt3 * vf::basics::constant::one_over_sqrt3; + real cs2 = vf::basics::constant::c1oSqrt3 * vf::basics::constant::c1oSqrt3; real rho = vf::basics::constant::c1o1 + drho; real gammaDot = shearRate; real omega = omegaInf; @@ -164,7 +164,7 @@ inline real Rheology::getHerschelBulkleyCollFactorBackward(real shearRate, real { real rho = vf::basics::constant::c1o1 + drho; real gamma = shearRate + UbMath::Epsilon<real>::val(); - real cs2 = vf::basics::constant::one_over_sqrt3 * vf::basics::constant::one_over_sqrt3; + real cs2 = vf::basics::constant::c1oSqrt3 * vf::basics::constant::c1oSqrt3; return 1.0 / ((tau0 + k * std::pow(gamma, n)) / (cs2 * rho * gamma) + vf::basics::constant::c1o2); } @@ -174,7 +174,7 @@ inline real Rheology::getPowellEyringCollFactor(real omegaInf, real shearRate, r // using namespace UbMath; using namespace vf::basics::constant; - real cs2 = c1o3; // UbMath::one_over_sqrt3* UbMath::one_over_sqrt3; + real cs2 = c1o3; // UbMath::c1oSqrt3* UbMath::c1oSqrt3; real rho = c1o1 + drho; real gammaDot = shearRate; real omega = omegaInf; diff --git a/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.cpp b/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.cpp index 8da8886a42b0a9f9c784eca708618217f06c883a..d33bbef61f8731302b8c7b8ba0ce8b17a7bd9703 100644 --- a/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.cpp +++ b/src/cpu/NonNewtonianFluids/LBM/RheologyInterpolator.cpp @@ -117,11 +117,11 @@ void RheologyInterpolator::calcMoments(const real* const f, real omegaInf, real& press = rho; //interpolate rho! - kxy = -3.*omega*((((f[DIR_MMP]+f[DIR_PPM])-(f[DIR_MPP]+f[DIR_PMM]))+((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_MPM]+f[DIR_PMP])))+((f[DIR_MM0]+f[DIR_PP0])-(f[DIR_MP0]+f[DIR_PM0]))-(vx1*vx2));// might not be optimal MG 25.2.13 - kyz = -3.*omega*((((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_PMP]+f[DIR_MPM]))+((f[DIR_PMM]+f[DIR_MPP])-(f[DIR_MMP]+f[DIR_PPM])))+((f[DIR_0MM]+f[DIR_0PP])-(f[DIR_0MP]+f[DIR_0PM]))-(vx2*vx3)); - kxz = -3.*omega*((((f[DIR_MPM]+f[DIR_PMP])-(f[DIR_MMP]+f[DIR_PPM]))+((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_PMM]+f[DIR_MPP])))+((f[DIR_M0M]+f[DIR_P0P])-(f[DIR_M0P]+f[DIR_P0M]))-(vx1*vx3)); - kxxMyy = -3./2.*omega*((((f[DIR_M0M]+f[DIR_P0P])-(f[DIR_0MM]+f[DIR_0PP]))+((f[DIR_M0P]+f[DIR_P0M])-(f[DIR_0MP]+f[DIR_0PM])))+((f[DIR_M00]+f[DIR_P00])-(f[DIR_0M0]+f[DIR_0P0]))-(vx1*vx1-vx2*vx2)); - kxxMzz = -3./2.*omega*((((f[DIR_MP0]+f[DIR_PM0])-(f[DIR_0MM]+f[DIR_0PP]))+((f[DIR_MM0]+f[DIR_PP0])-(f[DIR_0MP]+f[DIR_0PM])))+((f[DIR_M00]+f[DIR_P00])-(f[DIR_00M]+f[DIR_00P]))-(vx1*vx1-vx3*vx3)); + kxy = -3.*omega*((((f[dMMP]+f[dPPM])-(f[dMPP]+f[dPMM]))+((f[dMMM]+f[dPPP])-(f[dMPM]+f[dPMP])))+((f[dMM0]+f[dPP0])-(f[dMP0]+f[dPM0]))-(vx1*vx2));// might not be optimal MG 25.2.13 + kyz = -3.*omega*((((f[dMMM]+f[dPPP])-(f[dPMP]+f[dMPM]))+((f[dPMM]+f[dMPP])-(f[dMMP]+f[dPPM])))+((f[d0MM]+f[d0PP])-(f[d0MP]+f[d0PM]))-(vx2*vx3)); + kxz = -3.*omega*((((f[dMPM]+f[dPMP])-(f[dMMP]+f[dPPM]))+((f[dMMM]+f[dPPP])-(f[dPMM]+f[dMPP])))+((f[dM0M]+f[dP0P])-(f[dM0P]+f[dP0M]))-(vx1*vx3)); + kxxMyy = -3./2.*omega*((((f[dM0M]+f[dP0P])-(f[d0MM]+f[d0PP]))+((f[dM0P]+f[dP0M])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d0M0]+f[d0P0]))-(vx1*vx1-vx2*vx2)); + kxxMzz = -3./2.*omega*((((f[dMP0]+f[dPM0])-(f[d0MM]+f[d0PP]))+((f[dMM0]+f[dPP0])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d00M]+f[d00P]))-(vx1*vx1-vx3*vx3)); } ////////////////////////////////////////////////////////////////////////// void RheologyInterpolator::calcInterpolatedCoefficiets_intern(const D3Q27ICell& icell, @@ -440,33 +440,33 @@ void RheologyInterpolator::calcInterpolatedNode(real* f, /*real omega,*/ real x, real feq[ENDF+1]; D3Q27System::calcIncompFeq(feq,rho,vx1,vx2,vx3); - f[DIR_P00] = f_E + xs*x_E + ys*y_E + zs*z_E + xs*ys*xy_E + xs*zs*xz_E + ys*zs*yz_E + feq[DIR_P00]; - f[DIR_M00] = f_E + xs*x_E + ys*y_E + zs*z_E + xs*ys*xy_E + xs*zs*xz_E + ys*zs*yz_E + feq[DIR_M00]; - f[DIR_0P0] = f_N + xs*x_N + ys*y_N + zs*z_N + xs*ys*xy_N + xs*zs*xz_N + ys*zs*yz_N + feq[DIR_0P0]; - f[DIR_0M0] = f_N + xs*x_N + ys*y_N + zs*z_N + xs*ys*xy_N + xs*zs*xz_N + ys*zs*yz_N + feq[DIR_0M0]; - f[DIR_00P] = f_T + xs*x_T + ys*y_T + zs*z_T + xs*ys*xy_T + xs*zs*xz_T + ys*zs*yz_T + feq[DIR_00P]; - f[DIR_00M] = f_T + xs*x_T + ys*y_T + zs*z_T + xs*ys*xy_T + xs*zs*xz_T + ys*zs*yz_T + feq[DIR_00M]; - f[DIR_PP0] = f_NE + xs*x_NE + ys*y_NE + zs*z_NE + xs*ys*xy_NE + xs*zs*xz_NE + ys*zs*yz_NE + feq[DIR_PP0]; - f[DIR_MM0] = f_NE + xs*x_NE + ys*y_NE + zs*z_NE + xs*ys*xy_NE + xs*zs*xz_NE + ys*zs*yz_NE + feq[DIR_MM0]; - f[DIR_PM0] = f_SE + xs*x_SE + ys*y_SE + zs*z_SE + xs*ys*xy_SE + xs*zs*xz_SE + ys*zs*yz_SE + feq[DIR_PM0]; - f[DIR_MP0] = f_SE + xs*x_SE + ys*y_SE + zs*z_SE + xs*ys*xy_SE + xs*zs*xz_SE + ys*zs*yz_SE + feq[DIR_MP0]; - f[DIR_P0P] = f_TE + xs*x_TE + ys*y_TE + zs*z_TE + xs*ys*xy_TE + xs*zs*xz_TE + ys*zs*yz_TE + feq[DIR_P0P]; - f[DIR_M0M] = f_TE + xs*x_TE + ys*y_TE + zs*z_TE + xs*ys*xy_TE + xs*zs*xz_TE + ys*zs*yz_TE + feq[DIR_M0M]; - f[DIR_P0M] = f_BE + xs*x_BE + ys*y_BE + zs*z_BE + xs*ys*xy_BE + xs*zs*xz_BE + ys*zs*yz_BE + feq[DIR_P0M]; - f[DIR_M0P] = f_BE + xs*x_BE + ys*y_BE + zs*z_BE + xs*ys*xy_BE + xs*zs*xz_BE + ys*zs*yz_BE + feq[DIR_M0P]; - f[DIR_0PP] = f_TN + xs*x_TN + ys*y_TN + zs*z_TN + xs*ys*xy_TN + xs*zs*xz_TN + ys*zs*yz_TN + feq[DIR_0PP]; - f[DIR_0MM] = f_TN + xs*x_TN + ys*y_TN + zs*z_TN + xs*ys*xy_TN + xs*zs*xz_TN + ys*zs*yz_TN + feq[DIR_0MM]; - f[DIR_0PM] = f_BN + xs*x_BN + ys*y_BN + zs*z_BN + xs*ys*xy_BN + xs*zs*xz_BN + ys*zs*yz_BN + feq[DIR_0PM]; - f[DIR_0MP] = f_BN + xs*x_BN + ys*y_BN + zs*z_BN + xs*ys*xy_BN + xs*zs*xz_BN + ys*zs*yz_BN + feq[DIR_0MP]; - f[DIR_PPP] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[DIR_PPP]; - f[DIR_MMP] = f_TSW + xs*x_TSW + ys*y_TSW + zs*z_TSW + xs*ys*xy_TSW + xs*zs*xz_TSW + ys*zs*yz_TSW + feq[DIR_MMP]; - f[DIR_PMP] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[DIR_PMP]; - f[DIR_MPP] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[DIR_MPP]; - f[DIR_PPM] = f_TSW + xs*x_TSW + ys*y_TSW + zs*z_TSW + xs*ys*xy_TSW + xs*zs*xz_TSW + ys*zs*yz_TSW + feq[DIR_PPM]; - f[DIR_MMM] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[DIR_MMM]; - f[DIR_PMM] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[DIR_PMM]; - f[DIR_MPM] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[DIR_MPM]; - f[DIR_000] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO + feq[DIR_000]; + f[dP00] = f_E + xs*x_E + ys*y_E + zs*z_E + xs*ys*xy_E + xs*zs*xz_E + ys*zs*yz_E + feq[dP00]; + f[dM00] = f_E + xs*x_E + ys*y_E + zs*z_E + xs*ys*xy_E + xs*zs*xz_E + ys*zs*yz_E + feq[dM00]; + f[d0P0] = f_N + xs*x_N + ys*y_N + zs*z_N + xs*ys*xy_N + xs*zs*xz_N + ys*zs*yz_N + feq[d0P0]; + f[d0M0] = f_N + xs*x_N + ys*y_N + zs*z_N + xs*ys*xy_N + xs*zs*xz_N + ys*zs*yz_N + feq[d0M0]; + f[d00P] = f_T + xs*x_T + ys*y_T + zs*z_T + xs*ys*xy_T + xs*zs*xz_T + ys*zs*yz_T + feq[d00P]; + f[d00M] = f_T + xs*x_T + ys*y_T + zs*z_T + xs*ys*xy_T + xs*zs*xz_T + ys*zs*yz_T + feq[d00M]; + f[dPP0] = f_NE + xs*x_NE + ys*y_NE + zs*z_NE + xs*ys*xy_NE + xs*zs*xz_NE + ys*zs*yz_NE + feq[dPP0]; + f[dMM0] = f_NE + xs*x_NE + ys*y_NE + zs*z_NE + xs*ys*xy_NE + xs*zs*xz_NE + ys*zs*yz_NE + feq[dMM0]; + f[dPM0] = f_SE + xs*x_SE + ys*y_SE + zs*z_SE + xs*ys*xy_SE + xs*zs*xz_SE + ys*zs*yz_SE + feq[dPM0]; + f[dMP0] = f_SE + xs*x_SE + ys*y_SE + zs*z_SE + xs*ys*xy_SE + xs*zs*xz_SE + ys*zs*yz_SE + feq[dMP0]; + f[dP0P] = f_TE + xs*x_TE + ys*y_TE + zs*z_TE + xs*ys*xy_TE + xs*zs*xz_TE + ys*zs*yz_TE + feq[dP0P]; + f[dM0M] = f_TE + xs*x_TE + ys*y_TE + zs*z_TE + xs*ys*xy_TE + xs*zs*xz_TE + ys*zs*yz_TE + feq[dM0M]; + f[dP0M] = f_BE + xs*x_BE + ys*y_BE + zs*z_BE + xs*ys*xy_BE + xs*zs*xz_BE + ys*zs*yz_BE + feq[dP0M]; + f[dM0P] = f_BE + xs*x_BE + ys*y_BE + zs*z_BE + xs*ys*xy_BE + xs*zs*xz_BE + ys*zs*yz_BE + feq[dM0P]; + f[d0PP] = f_TN + xs*x_TN + ys*y_TN + zs*z_TN + xs*ys*xy_TN + xs*zs*xz_TN + ys*zs*yz_TN + feq[d0PP]; + f[d0MM] = f_TN + xs*x_TN + ys*y_TN + zs*z_TN + xs*ys*xy_TN + xs*zs*xz_TN + ys*zs*yz_TN + feq[d0MM]; + f[d0PM] = f_BN + xs*x_BN + ys*y_BN + zs*z_BN + xs*ys*xy_BN + xs*zs*xz_BN + ys*zs*yz_BN + feq[d0PM]; + f[d0MP] = f_BN + xs*x_BN + ys*y_BN + zs*z_BN + xs*ys*xy_BN + xs*zs*xz_BN + ys*zs*yz_BN + feq[d0MP]; + f[dPPP] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[dPPP]; + f[dMMP] = f_TSW + xs*x_TSW + ys*y_TSW + zs*z_TSW + xs*ys*xy_TSW + xs*zs*xz_TSW + ys*zs*yz_TSW + feq[dMMP]; + f[dPMP] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[dPMP]; + f[dMPP] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[dMPP]; + f[dPPM] = f_TSW + xs*x_TSW + ys*y_TSW + zs*z_TSW + xs*ys*xy_TSW + xs*zs*xz_TSW + ys*zs*yz_TSW + feq[dPPM]; + f[dMMM] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[dMMM]; + f[dPMM] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[dPMM]; + f[dMPM] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[dMPM]; + f[d000] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO + feq[d000]; } ////////////////////////////////////////////////////////////////////////// //Position SWB -0.25, -0.25, -0.25 @@ -630,33 +630,33 @@ void RheologyInterpolator::calcInterpolatedNodeFC(real* f, real omega) f_TSE = eps_new*((ay - az + bx + bz - cx + cy+kxyAverage-kxzAverage+kyzAverage)/(72.*o)); f_TNW = eps_new*((ay + az + bx - bz + cx - cy+kxyAverage+kxzAverage-kyzAverage)/(72.*o)); - f[DIR_P00] = f_E + feq[DIR_P00]; - f[DIR_M00] = f_E + feq[DIR_M00]; - f[DIR_0P0] = f_N + feq[DIR_0P0]; - f[DIR_0M0] = f_N + feq[DIR_0M0]; - f[DIR_00P] = f_T + feq[DIR_00P]; - f[DIR_00M] = f_T + feq[DIR_00M]; - f[DIR_PP0] = f_NE + feq[DIR_PP0]; - f[DIR_MM0] = f_NE + feq[DIR_MM0]; - f[DIR_PM0] = f_SE + feq[DIR_PM0]; - f[DIR_MP0] = f_SE + feq[DIR_MP0]; - f[DIR_P0P] = f_TE + feq[DIR_P0P]; - f[DIR_M0M] = f_TE + feq[DIR_M0M]; - f[DIR_P0M] = f_BE + feq[DIR_P0M]; - f[DIR_M0P] = f_BE + feq[DIR_M0P]; - f[DIR_0PP] = f_TN + feq[DIR_0PP]; - f[DIR_0MM] = f_TN + feq[DIR_0MM]; - f[DIR_0PM] = f_BN + feq[DIR_0PM]; - f[DIR_0MP] = f_BN + feq[DIR_0MP]; - f[DIR_PPP] = f_TNE + feq[DIR_PPP]; - f[DIR_MPP] = f_TNW + feq[DIR_MPP]; - f[DIR_PMP] = f_TSE + feq[DIR_PMP]; - f[DIR_MMP] = f_TSW + feq[DIR_MMP]; - f[DIR_PPM] = f_TSW + feq[DIR_PPM]; - f[DIR_MPM] = f_TSE + feq[DIR_MPM]; - f[DIR_PMM] = f_TNW + feq[DIR_PMM]; - f[DIR_MMM] = f_TNE + feq[DIR_MMM]; - f[DIR_000] = f_ZERO + feq[DIR_000]; + f[dP00] = f_E + feq[dP00]; + f[dM00] = f_E + feq[dM00]; + f[d0P0] = f_N + feq[d0P0]; + f[d0M0] = f_N + feq[d0M0]; + f[d00P] = f_T + feq[d00P]; + f[d00M] = f_T + feq[d00M]; + f[dPP0] = f_NE + feq[dPP0]; + f[dMM0] = f_NE + feq[dMM0]; + f[dPM0] = f_SE + feq[dPM0]; + f[dMP0] = f_SE + feq[dMP0]; + f[dP0P] = f_TE + feq[dP0P]; + f[dM0M] = f_TE + feq[dM0M]; + f[dP0M] = f_BE + feq[dP0M]; + f[dM0P] = f_BE + feq[dM0P]; + f[d0PP] = f_TN + feq[d0PP]; + f[d0MM] = f_TN + feq[d0MM]; + f[d0PM] = f_BN + feq[d0PM]; + f[d0MP] = f_BN + feq[d0MP]; + f[dPPP] = f_TNE + feq[dPPP]; + f[dMPP] = f_TNW + feq[dMPP]; + f[dPMP] = f_TSE + feq[dPMP]; + f[dMMP] = f_TSW + feq[dMMP]; + f[dPPM] = f_TSW + feq[dPPM]; + f[dMPM] = f_TSE + feq[dMPM]; + f[dPMM] = f_TNW + feq[dPMM]; + f[dMMM] = f_TNE + feq[dMMM]; + f[d000] = f_ZERO + feq[d000]; } ////////////////////////////////////////////////////////////////////////// void RheologyInterpolator::calcInterpolatedVelocity(real x, real y, real z, real& vx1, real& vx2, real& vx3) diff --git a/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.cpp b/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.cpp index 7ed670deb9619565e9c11d18041cc522485ba2f6..fc120348cd9a1b1fc2f58139d200dabd4709bd26 100644 --- a/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.cpp +++ b/src/cpu/NonNewtonianFluids/SimulationObservers/CalculateTorqueSimulationObserver.cpp @@ -222,7 +222,7 @@ UbTupleDouble3 CalculateTorqueSimulationObserver::getForcesFromMoments(int x1, i if (bc) { real f[D3Q27System::ENDF + 1]; - distributions->getDistribution(f, x1, x2, x3); + distributions->getPreCollisionDistribution(f, x1, x2, x3); real collFactor = kernel->getCollisionFactor(); real shearRate = D3Q27System::getShearRate(f, collFactor); real rho = D3Q27System::getDensity(f); @@ -256,7 +256,7 @@ UbTupleDouble3 CalculateTorqueSimulationObserver::getForcesFromStressTensor(int if (bc) { real f[D3Q27System::ENDF + 1]; - distributions->getDistribution(f, x1, x2, x3); + distributions->getPreCollisionDistribution(f, x1, x2, x3); real collFactor = kernel->getCollisionFactor(); real shearRate = D3Q27System::getShearRate(f, collFactor); real rho = D3Q27System::getDensity(f); diff --git a/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.cpp b/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.cpp index bc3eab4fb93581a0184d96cddbd5542fa358e8ee..4eb5c20109baa9d2368201bf96b7807de0f5cb41 100644 --- a/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.cpp +++ b/src/cpu/NonNewtonianFluids/SimulationObservers/WriteThixotropyQuantitiesSimulationObserver.cpp @@ -239,7 +239,7 @@ void WriteThixotropyQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block) //data[index++].push_back(gammaDot); //data[index++].push_back(collFactorF); - distributionsF->getDistribution(f, ix1, ix2, ix3); + distributionsF->getPreCollisionDistribution(f, ix1, ix2, ix3); real rho = D3Q27System::getDensity(f); real shearRate = D3Q27System::getShearRate(f, collFactor); //LBMReal omega = Rheology::getHerschelBulkleyCollFactor(collFactor, shearRate, rho); diff --git a/src/cpu/VirtualFluidsCore/LBM/BGKLBMKernel.cpp b/src/cpu/VirtualFluidsCore/LBM/BGKLBMKernel.cpp deleted file mode 100644 index 0145e633de3901f407e93b374eaad7380ffac772..0000000000000000000000000000000000000000 --- a/src/cpu/VirtualFluidsCore/LBM/BGKLBMKernel.cpp +++ /dev/null @@ -1,305 +0,0 @@ -#include "BGKLBMKernel.h" -#include "BCArray3D.h" -#include "BCSet.h" -#include "D3Q27EsoTwist3DSoA.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include "D3Q27System.h" -#include "DataSet3D.h" -#include "Block3D.h" -#include "basics/constants/NumericConstants.h" - -#define PROOF_CORRECTNESS - -////////////////////////////////////////////////////////////////////////// -BGKLBMKernel::BGKLBMKernel() { this->compressible = false; } -////////////////////////////////////////////////////////////////////////// -BGKLBMKernel::~BGKLBMKernel(void) = default; -////////////////////////////////////////////////////////////////////////// -void BGKLBMKernel::initDataSet() -{ - SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9)); - dataSet->setFdistributions(d); -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> BGKLBMKernel::clone() -{ - SPtr<LBMKernel> kernel(new BGKLBMKernel()); - kernel->setNX(nx); - std::dynamic_pointer_cast<BGKLBMKernel>(kernel)->initDataSet(); - kernel->setCollisionFactor(this->collFactor); - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - kernel->setBlock(block.lock()); - return kernel; -} -////////////////////////////////////////////////////////////////////////// -void BGKLBMKernel::calculate(int step) -{ - using namespace D3Q27System; - // using namespace UbMath; - using namespace vf::basics::constant; - using namespace vf::lbm::dir; - - // initializing of forcing stuff - if (withForcing) { - muForcingX1.DefineVar("x1", &muX1); - muForcingX1.DefineVar("x2", &muX2); - muForcingX1.DefineVar("x3", &muX3); - muForcingX2.DefineVar("x1", &muX1); - muForcingX2.DefineVar("x2", &muX2); - muForcingX2.DefineVar("x3", &muX3); - muForcingX3.DefineVar("x1", &muX1); - muForcingX3.DefineVar("x2", &muX2); - muForcingX3.DefineVar("x3", &muX3); - forcingX1 = 0; - forcingX2 = 0; - forcingX3 = 0; - } - ///////////////////////////////////// - - localDistributions = - std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions()) - ->getNonLocalDistributions(); - zeroDistributions = - std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - real f[D3Q27System::ENDF + 1]; - real feq[D3Q27System::ENDF + 1]; - real drho, vx1, vx2, vx3; - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth; - - for (int x3 = minX3; x3 < maxX3; x3++) { - for (int x2 = minX2; x2 < maxX2; x2++) { - for (int x1 = minX1; x1 < maxX1; x1++) { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - ////////////////////////////////////////////////////////////////////////// - // read distribution - //////////////////////////////////////////////////////////////////////////// - f[DIR_000] = (*this->zeroDistributions)(x1, x2, x3); - - f[DIR_P00] = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); - f[DIR_0P0] = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); - f[DIR_00P] = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3); - f[DIR_PP0] = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3); - f[DIR_MP0] = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3); - f[DIR_P0P] = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3); - f[DIR_M0P] = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3); - f[DIR_0PP] = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3); - f[DIR_0MP] = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3); - f[DIR_PPP] = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3); - f[DIR_MPP] = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3); - f[DIR_PMP] = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3); - f[DIR_MMP] = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3); - - f[DIR_M00] = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3); - f[DIR_0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3); - f[DIR_00M] = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p); - f[DIR_MM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3); - f[DIR_PM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3); - f[DIR_M0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p); - f[DIR_P0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p); - f[DIR_0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p); - f[DIR_0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p); - f[DIR_MMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p); - f[DIR_PMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p); - f[DIR_MPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p); - f[DIR_PPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p); - ////////////////////////////////////////////////////////////////////////// - - drho = f[DIR_000] + f[DIR_P00] + f[DIR_M00] + f[DIR_0P0] + f[DIR_0M0] + f[DIR_00P] + f[DIR_00M] + f[DIR_PP0] + f[DIR_MM0] + f[DIR_PM0] + f[DIR_MP0] + f[DIR_P0P] + - f[DIR_M0M] + f[DIR_P0M] + f[DIR_M0P] + f[DIR_0PP] + f[DIR_0MM] + f[DIR_0PM] + f[DIR_0MP] + f[DIR_PPP] + f[DIR_MMP] + f[DIR_PMP] + f[DIR_MPP] + - f[DIR_PPM] + f[DIR_MMM] + f[DIR_PMM] + f[DIR_MPM]; - - vx1 = f[DIR_P00] - f[DIR_M00] + f[DIR_PP0] - f[DIR_MM0] + f[DIR_PM0] - f[DIR_MP0] + f[DIR_P0P] - f[DIR_M0M] + f[DIR_P0M] - f[DIR_M0P] + f[DIR_PPP] - - f[DIR_MMP] + f[DIR_PMP] - f[DIR_MPP] + f[DIR_PPM] - f[DIR_MMM] + f[DIR_PMM] - f[DIR_MPM]; - - vx2 = f[DIR_0P0] - f[DIR_0M0] + f[DIR_PP0] - f[DIR_MM0] - f[DIR_PM0] + f[DIR_MP0] + f[DIR_0PP] - f[DIR_0MM] + f[DIR_0PM] - f[DIR_0MP] + f[DIR_PPP] - - f[DIR_MMP] - f[DIR_PMP] + f[DIR_MPP] + f[DIR_PPM] - f[DIR_MMM] - f[DIR_PMM] + f[DIR_MPM]; - - vx3 = f[DIR_00P] - f[DIR_00M] + f[DIR_P0P] - f[DIR_M0M] - f[DIR_P0M] + f[DIR_M0P] + f[DIR_0PP] - f[DIR_0MM] - f[DIR_0PM] + f[DIR_0MP] + f[DIR_PPP] + - f[DIR_MMP] + f[DIR_PMP] + f[DIR_MPP] - f[DIR_PPM] - f[DIR_MMM] - f[DIR_PMM] - f[DIR_MPM]; - - real cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); - - feq[DIR_000] = c8o27 * (drho - cu_sq); - feq[DIR_P00] = c2o27 * (drho + c3o1 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq); - feq[DIR_M00] = c2o27 * (drho + c3o1 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq); - feq[DIR_0P0] = c2o27 * (drho + c3o1 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq); - feq[DIR_0M0] = c2o27 * (drho + c3o1 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq); - feq[DIR_00P] = c2o27 * (drho + c3o1 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq); - feq[DIR_00M] = c2o27 * (drho + c3o1 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq); - feq[DIR_PP0] = c1o54 * (drho + c3o1 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq); - feq[DIR_MM0] = c1o54 * (drho + c3o1 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq); - feq[DIR_PM0] = c1o54 * (drho + c3o1 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq); - feq[DIR_MP0] = c1o54 * (drho + c3o1 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq); - feq[DIR_P0P] = c1o54 * (drho + c3o1 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq); - feq[DIR_M0M] = c1o54 * (drho + c3o1 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq); - feq[DIR_P0M] = c1o54 * (drho + c3o1 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq); - feq[DIR_M0P] = c1o54 * (drho + c3o1 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq); - feq[DIR_0PP] = c1o54 * (drho + c3o1 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq); - feq[DIR_0MM] = c1o54 * (drho + c3o1 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq); - feq[DIR_0PM] = c1o54 * (drho + c3o1 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq); - feq[DIR_0MP] = c1o54 * (drho + c3o1 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq); - feq[DIR_PPP] = c1o216 * - (drho + c3o1 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq); - feq[DIR_MMM] = c1o216 * (drho + c3o1 * (-vx1 - vx2 - vx3) + - c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq); - feq[DIR_PPM] = c1o216 * - (drho + c3o1 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq); - feq[DIR_MMP] = c1o216 * (drho + c3o1 * (-vx1 - vx2 + vx3) + - c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq); - feq[DIR_PMP] = c1o216 * - (drho + c3o1 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq); - feq[DIR_MPM] = c1o216 * (drho + c3o1 * (-vx1 + vx2 - vx3) + - c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq); - feq[DIR_PMM] = c1o216 * - (drho + c3o1 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq); - feq[DIR_MPP] = c1o216 * (drho + c3o1 * (-vx1 + vx2 + vx3) + - c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq); - - // Relaxation - f[DIR_000] += (feq[DIR_000] - f[DIR_000]) * collFactor; - f[DIR_P00] += (feq[DIR_P00] - f[DIR_P00]) * collFactor; - f[DIR_M00] += (feq[DIR_M00] - f[DIR_M00]) * collFactor; - f[DIR_0P0] += (feq[DIR_0P0] - f[DIR_0P0]) * collFactor; - f[DIR_0M0] += (feq[DIR_0M0] - f[DIR_0M0]) * collFactor; - f[DIR_00P] += (feq[DIR_00P] - f[DIR_00P]) * collFactor; - f[DIR_00M] += (feq[DIR_00M] - f[DIR_00M]) * collFactor; - f[DIR_PP0] += (feq[DIR_PP0] - f[DIR_PP0]) * collFactor; - f[DIR_MM0] += (feq[DIR_MM0] - f[DIR_MM0]) * collFactor; - f[DIR_PM0] += (feq[DIR_PM0] - f[DIR_PM0]) * collFactor; - f[DIR_MP0] += (feq[DIR_MP0] - f[DIR_MP0]) * collFactor; - f[DIR_P0P] += (feq[DIR_P0P] - f[DIR_P0P]) * collFactor; - f[DIR_M0M] += (feq[DIR_M0M] - f[DIR_M0M]) * collFactor; - f[DIR_P0M] += (feq[DIR_P0M] - f[DIR_P0M]) * collFactor; - f[DIR_M0P] += (feq[DIR_M0P] - f[DIR_M0P]) * collFactor; - f[DIR_0PP] += (feq[DIR_0PP] - f[DIR_0PP]) * collFactor; - f[DIR_0MM] += (feq[DIR_0MM] - f[DIR_0MM]) * collFactor; - f[DIR_0PM] += (feq[DIR_0PM] - f[DIR_0PM]) * collFactor; - f[DIR_0MP] += (feq[DIR_0MP] - f[DIR_0MP]) * collFactor; - - f[DIR_PPP] += (feq[DIR_PPP] - f[DIR_PPP]) * collFactor; - f[DIR_MMM] += (feq[DIR_MMM] - f[DIR_MMM]) * collFactor; - f[DIR_PPM] += (feq[DIR_PPM] - f[DIR_PPM]) * collFactor; - f[DIR_MMP] += (feq[DIR_MMP] - f[DIR_MMP]) * collFactor; - f[DIR_PMP] += (feq[DIR_PMP] - f[DIR_PMP]) * collFactor; - f[DIR_MPM] += (feq[DIR_MPM] - f[DIR_MPM]) * collFactor; - f[DIR_PMM] += (feq[DIR_PMM] - f[DIR_PMM]) * collFactor; - f[DIR_MPP] += (feq[DIR_MPP] - f[DIR_MPP]) * collFactor; - - ////////////////////////////////////////////////////////////////////////// - // forcing - if (withForcing) { - muX1 = x1 + ix1 * bcArrayMaxX1; - muX2 = x2 + ix2 * bcArrayMaxX2; - muX3 = x3 + ix3 * bcArrayMaxX3; - - forcingX1 = muForcingX1.Eval(); - forcingX2 = muForcingX2.Eval(); - forcingX3 = muForcingX3.Eval(); - - f[DIR_000] += c0o1; - f[DIR_P00] += c3o1 * c2o27 * (forcingX1); - f[DIR_M00] += c3o1 * c2o27 * (-forcingX1); - f[DIR_0P0] += c3o1 * c2o27 * (forcingX2); - f[DIR_0M0] += c3o1 * c2o27 * (-forcingX2); - f[DIR_00P] += c3o1 * c2o27 * (forcingX3); - f[DIR_00M] += c3o1 * c2o27 * (-forcingX3); - f[DIR_PP0] += c3o1 * c1o54 * (forcingX1 + forcingX2); - f[DIR_MM0] += c3o1 * c1o54 * (-forcingX1 - forcingX2); - f[DIR_PM0] += c3o1 * c1o54 * (forcingX1 - forcingX2); - f[DIR_MP0] += c3o1 * c1o54 * (-forcingX1 + forcingX2); - f[DIR_P0P] += c3o1 * c1o54 * (forcingX1 + forcingX3); - f[DIR_M0M] += c3o1 * c1o54 * (-forcingX1 - forcingX3); - f[DIR_P0M] += c3o1 * c1o54 * (forcingX1 - forcingX3); - f[DIR_M0P] += c3o1 * c1o54 * (-forcingX1 + forcingX3); - f[DIR_0PP] += c3o1 * c1o54 * (forcingX2 + forcingX3); - f[DIR_0MM] += c3o1 * c1o54 * (-forcingX2 - forcingX3); - f[DIR_0PM] += c3o1 * c1o54 * (forcingX2 - forcingX3); - f[DIR_0MP] += c3o1 * c1o54 * (-forcingX2 + forcingX3); - f[DIR_PPP] += c3o1 * c1o216 * (forcingX1 + forcingX2 + forcingX3); - f[DIR_MMM] += c3o1 * c1o216 * (-forcingX1 - forcingX2 - forcingX3); - f[DIR_PPM] += c3o1 * c1o216 * (forcingX1 + forcingX2 - forcingX3); - f[DIR_MMP] += c3o1 * c1o216 * (-forcingX1 - forcingX2 + forcingX3); - f[DIR_PMP] += c3o1 * c1o216 * (forcingX1 - forcingX2 + forcingX3); - f[DIR_MPM] += c3o1 * c1o216 * (-forcingX1 + forcingX2 - forcingX3); - f[DIR_PMM] += c3o1 * c1o216 * (forcingX1 - forcingX2 - forcingX3); - f[DIR_MPP] += c3o1 * c1o216 * (-forcingX1 + forcingX2 + forcingX3); - } - ////////////////////////////////////////////////////////////////////////// -#ifdef PROOF_CORRECTNESS - real rho_post = f[DIR_000] + f[DIR_P00] + f[DIR_M00] + f[DIR_0P0] + f[DIR_0M0] + f[DIR_00P] + f[DIR_00M] + f[DIR_PP0] + f[DIR_MM0] + f[DIR_PM0] + - f[DIR_MP0] + f[DIR_P0P] + f[DIR_M0M] + f[DIR_P0M] + f[DIR_M0P] + f[DIR_0PP] + f[DIR_0MM] + f[DIR_0PM] + f[DIR_0MP] + f[DIR_PPP] + - f[DIR_MMP] + f[DIR_PMP] + f[DIR_MPP] + f[DIR_PPM] + f[DIR_MMM] + f[DIR_PMM] + f[DIR_MPM]; - real dif = drho - rho_post; -#ifdef SINGLEPRECISION - if (dif > 10.0E-7 || dif < -10.0E-7) -#else - if (dif > 10.0E-15 || dif < -10.0E-15) -#endif - { - UB_THROW(UbException(UB_EXARGS, "rho="+UbSystem::toString(drho)+", rho_post="+UbSystem::toString(rho_post) - +" dif="+UbSystem::toString(dif) - +" rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3) - +" in " + block.lock()->toString()+" step = "+UbSystem::toString(step))); - } -#endif - ////////////////////////////////////////////////////////////////////////// - // write distribution - ////////////////////////////////////////////////////////////////////////// - (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[INV_P00]; - (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[INV_0P0]; - (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[INV_00P]; - (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[INV_PP0]; - (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3) = f[INV_MP0]; - (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[INV_P0P]; - (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3) = f[INV_M0P]; - (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[INV_0PP]; - (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3) = f[INV_0MP]; - (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[INV_PPP]; - (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3) = f[INV_MPP]; - (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3) = f[INV_PMP]; - (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[INV_MMP]; - - (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3) = f[INV_M00]; - (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3) = f[INV_0M0]; - (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p) = f[INV_00M]; - (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3) = f[INV_MM0]; - (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3) = f[INV_PM0]; - (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p) = f[INV_M0M]; - (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p) = f[INV_P0M]; - (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p) = f[INV_0MM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p) = f[INV_0PM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[INV_MMM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[INV_PMM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[INV_MPM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = f[INV_PPM]; - - (*this->zeroDistributions)(x1, x2, x3) = f[DIR_000]; - ////////////////////////////////////////////////////////////////////////// - } - } - } - } -} -////////////////////////////////////////////////////////////////////////// -real BGKLBMKernel::getCalculationTime() { return vf::basics::constant::c0o1; } diff --git a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernelUnified.cpp b/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernelUnified.cpp deleted file mode 100644 index 2a791636d42e8f17761873cd5e95c8dcf933e0b6..0000000000000000000000000000000000000000 --- a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernelUnified.cpp +++ /dev/null @@ -1,338 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// 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/>. -// -//! \file CumulantK17LBMKernel.cpp -//! \ingroup LBM -//! \author Konstantin Kutscher, Martin Geier -//======================================================================================= -#include <lbm/KernelParameter.h> -#include <lbm/CumulantChimera.h> -#include <lbm/constants/D3Q27.h> - -#include "CumulantK17LBMKernelUnified.h" -#include "D3Q27System.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include <cmath> -#include "DataSet3D.h" -#include "LBMKernel.h" -#include "Block3D.h" -#include "BCArray3D.h" - - -//#define PROOF_CORRECTNESS - -//using namespace UbMath; -using namespace vf::basics::constant; - -////////////////////////////////////////////////////////////////////////// -CumulantK17LBMKernelUnified::CumulantK17LBMKernelUnified() -{ - this->compressible = true; -} -////////////////////////////////////////////////////////////////////////// -void CumulantK17LBMKernelUnified::initDataSet() -{ - SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9)); - dataSet->setFdistributions(d); -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> CumulantK17LBMKernelUnified::clone() -{ - SPtr<LBMKernel> kernel(new CumulantK17LBMKernelUnified()); - kernel->setNX(nx); - std::dynamic_pointer_cast<CumulantK17LBMKernelUnified>(kernel)->initDataSet(); - kernel->setCollisionFactor(this->collFactor); - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - kernel->setDeltaT(deltaT); - kernel->setBlock(block.lock()); - - return kernel; -} -////////////////////////////////////////////////////////////////////////// -void CumulantK17LBMKernelUnified::calculate(int step) -{ - ////////////////////////////////////////////////////////////////////////// - //! Cumulant K17 Kernel is based on - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! and - //! <a href="https://doi.org/10.1016/j.jcp.2017.07.004"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.07.004 ]</b></a> - //! - //! The cumulant kernel is executed in the following steps - //! - //////////////////////////////////////////////////////////////////////////////// - //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. - //! - - using namespace std; - - //initializing of forcing stuff - if (withForcing) - { - muForcingX1.DefineVar("x1", &muX1); muForcingX1.DefineVar("x2", &muX2); muForcingX1.DefineVar("x3", &muX3); - muForcingX2.DefineVar("x1", &muX1); muForcingX2.DefineVar("x2", &muX2); muForcingX2.DefineVar("x3", &muX3); - muForcingX3.DefineVar("x1", &muX1); muForcingX3.DefineVar("x2", &muX2); muForcingX3.DefineVar("x3", &muX3); - - muDeltaT = deltaT; - - muForcingX1.DefineVar("dt", &muDeltaT); - muForcingX2.DefineVar("dt", &muDeltaT); - muForcingX3.DefineVar("dt", &muDeltaT); - - muNu = (c1o1 / c3o1) * (c1o1 / collFactor - c1o1 / c2o1); - - muForcingX1.DefineVar("nu", &muNu); - muForcingX2.DefineVar("nu", &muNu); - muForcingX3.DefineVar("nu", &muNu); - } - ///////////////////////////////////// - - localDistributions = dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributions = dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - restDistributions = dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1 - ghostLayerWidth; - int maxX2 = bcArrayMaxX2 - ghostLayerWidth; - int maxX3 = bcArrayMaxX3 - ghostLayerWidth; - - real omega = collFactor; - - for (int x3 = minX3; x3 < maxX3; x3++) - { - for (int x2 = minX2; x2 < maxX2; x2++) - { - for (int x1 = minX1; x1 < maxX1; x1++) - { - if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) - { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm - //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - - //E N T - //c c c - ////////// - //W S B - //a a a - - //Rest is b - - //mfxyz - //a - negative - //b - null - //c - positive - - // a b c - //-1 0 1 - - real mfcbb = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); - real mfbcb = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); - real mfbbc = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3); - real mfccb = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3); - real mfacb = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3); - real mfcbc = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3); - real mfabc = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3); - real mfbcc = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3); - real mfbac = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3); - real mfccc = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3); - real mfacc = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3); - real mfcac = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3); - real mfaac = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3); - - real mfabb = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3); - real mfbab = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3); - real mfbba = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p); - real mfaab = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3); - real mfcab = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3); - real mfaba = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p); - real mfcba = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p); - real mfbaa = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p); - real mfbca = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p); - real mfaaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p); - real mfcaa = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p); - real mfaca = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p); - real mfcca = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p); - - real mfbbb = (*this->restDistributions)(x1, x2, x3); - - - real forces[3] = { c0o1, c0o1, c0o1 }; - if (withForcing) - { - muX1 = static_cast<real>(x1 - 1 + ix1 * maxX1); - muX2 = static_cast<real>(x2 - 1 + ix2 * maxX2); - muX3 = static_cast<real>(x3 - 1 + ix3 * maxX3); - - forcingX1 = muForcingX1.Eval(); - forcingX2 = muForcingX2.Eval(); - forcingX3 = muForcingX3.Eval(); - - forces[0] = forcingX1 * deltaT; - forces[1] = forcingX2 * deltaT; - forces[2] = forcingX3 * deltaT; - } - - vf::lbm::Distribution27 distribution; - - distribution.f[vf::lbm::dir::PZZ] = mfcbb; - distribution.f[vf::lbm::dir::MZZ] = mfabb; - distribution.f[vf::lbm::dir::ZPZ] = mfbcb; - distribution.f[vf::lbm::dir::ZMZ] = mfbab; - distribution.f[vf::lbm::dir::ZZP] = mfbbc; - distribution.f[vf::lbm::dir::ZZM] = mfbba; - distribution.f[vf::lbm::dir::PPZ] = mfccb; - distribution.f[vf::lbm::dir::MMZ] = mfaab; - distribution.f[vf::lbm::dir::PMZ] = mfcab; - distribution.f[vf::lbm::dir::MPZ] = mfacb; - distribution.f[vf::lbm::dir::PZP] = mfcbc; - distribution.f[vf::lbm::dir::MZM] = mfaba; - distribution.f[vf::lbm::dir::PZM] = mfcba; - distribution.f[vf::lbm::dir::MZP] = mfabc; - distribution.f[vf::lbm::dir::ZPP] = mfbcc; - distribution.f[vf::lbm::dir::ZMM] = mfbaa; - distribution.f[vf::lbm::dir::ZPM] = mfbca; - distribution.f[vf::lbm::dir::ZMP] = mfbac; - distribution.f[vf::lbm::dir::PPP] = mfccc; - distribution.f[vf::lbm::dir::MPP] = mfacc; - distribution.f[vf::lbm::dir::PMP] = mfcac; - distribution.f[vf::lbm::dir::MMP] = mfaac; - distribution.f[vf::lbm::dir::PPM] = mfcca; - distribution.f[vf::lbm::dir::MPM] = mfaca; - distribution.f[vf::lbm::dir::PMM] = mfcaa; - distribution.f[vf::lbm::dir::MMM] = mfaaa; - distribution.f[vf::lbm::dir::ZZZ] = mfbbb; - - vf::lbm::KernelParameter parameter {distribution, omega, forces}; - vf::lbm::cumulantChimera(parameter, vf::lbm::setRelaxationRatesK17); - - mfcbb = distribution.f[vf::lbm::dir::PZZ]; - mfabb = distribution.f[vf::lbm::dir::MZZ]; - mfbcb = distribution.f[vf::lbm::dir::ZPZ]; - mfbab = distribution.f[vf::lbm::dir::ZMZ]; - mfbbc = distribution.f[vf::lbm::dir::ZZP]; - mfbba = distribution.f[vf::lbm::dir::ZZM]; - mfccb = distribution.f[vf::lbm::dir::PPZ]; - mfaab = distribution.f[vf::lbm::dir::MMZ]; - mfcab = distribution.f[vf::lbm::dir::PMZ]; - mfacb = distribution.f[vf::lbm::dir::MPZ]; - mfcbc = distribution.f[vf::lbm::dir::PZP]; - mfaba = distribution.f[vf::lbm::dir::MZM]; - mfcba = distribution.f[vf::lbm::dir::PZM]; - mfabc = distribution.f[vf::lbm::dir::MZP]; - mfbcc = distribution.f[vf::lbm::dir::ZPP]; - mfbaa = distribution.f[vf::lbm::dir::ZMM]; - mfbca = distribution.f[vf::lbm::dir::ZPM]; - mfbac = distribution.f[vf::lbm::dir::ZMP]; - mfccc = distribution.f[vf::lbm::dir::PPP]; - mfacc = distribution.f[vf::lbm::dir::MPP]; - mfcac = distribution.f[vf::lbm::dir::PMP]; - mfaac = distribution.f[vf::lbm::dir::MMP]; - mfcca = distribution.f[vf::lbm::dir::PPM]; - mfaca = distribution.f[vf::lbm::dir::MPM]; - mfcaa = distribution.f[vf::lbm::dir::PMM]; - mfaaa = distribution.f[vf::lbm::dir::MMM]; - mfbbb = distribution.f[vf::lbm::dir::ZZZ]; - - ////////////////////////////////////////////////////////////////////////// - //proof correctness - ////////////////////////////////////////////////////////////////////////// -#ifdef PROOF_CORRECTNESS - real drho_post = (mfaaa + mfaac + mfaca + mfcaa + mfacc + mfcac + mfccc + mfcca) - + (mfaab + mfacb + mfcab + mfccb) + (mfaba + mfabc + mfcba + mfcbc) + (mfbaa + mfbac + mfbca + mfbcc) - + (mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc) + mfbbb; - real dif = distribution.getDensity_() - drho_post; -#ifdef SINGLEPRECISION - if (dif > 10.0E-7 || dif < -10.0E-7) -#else - if (dif > 10.0E-15 || dif < -10.0E-15) -#endif - { - UB_THROW(UbException(UB_EXARGS, "rho=" + UbSystem::toString(distribution.getDensity_()) + ", rho_post=" + UbSystem::toString(drho_post) - + " dif=" + UbSystem::toString(dif) - + " rho is not correct for node " + UbSystem::toString(x1) + "," + UbSystem::toString(x2) + "," + UbSystem::toString(x3) - + " in " + block.lock()->toString() + " step = " + UbSystem::toString(step))); - } -#endif - - (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = mfcbb; - (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = mfbcb; - (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = mfbbc; - (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = mfccb; - (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3) = mfacb; - (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = mfcbc; - (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3) = mfabc; - (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = mfbcc; - (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3) = mfbac; - (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = mfccc; - (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3) = mfacc; - (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3) = mfcac; - (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = mfaac; - - (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3) = mfabb; - (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3) = mfbab; - (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p) = mfbba; - (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3) = mfaab; - (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3) = mfcab; - (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p) = mfaba; - (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p) = mfcba; - (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p) = mfbaa; - (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p) = mfbca; - (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = mfaaa; - (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p) = mfcaa; - (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = mfaca; - (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = mfcca; - (*this->restDistributions)(x1, x2, x3) = mfbbb; - ////////////////////////////////////////////////////////////////////////// - - } - } - } - } -} -////////////////////////////////////////////////////////////////////////// - diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMKernelETD3Q27BGK.cpp b/src/cpu/VirtualFluidsCore/LBM/LBMKernelETD3Q27BGK.cpp deleted file mode 100644 index 318b8cc037581a2239d0a1a487d70afdcd2d8685..0000000000000000000000000000000000000000 --- a/src/cpu/VirtualFluidsCore/LBM/LBMKernelETD3Q27BGK.cpp +++ /dev/null @@ -1,303 +0,0 @@ -#include "LBMKernelETD3Q27BGK.h" -#include "D3Q27System.h" -#include "D3Q27EsoTwist3DSplittedVector.h" -#include "D3Q27EsoTwist3DSoA.h" -#include "DataSet3D.h" -#include "BCSet.h" -#include "BCArray3D.h" -#include "basics/constants/NumericConstants.h" - -using namespace vf::basics::constant; -//using namespace UbMath; - -//#define PROOF_CORRECTNESS - - -////////////////////////////////////////////////////////////////////////// -LBMKernelETD3Q27BGK::LBMKernelETD3Q27BGK() -{ - this->compressible = false; -} -////////////////////////////////////////////////////////////////////////// -LBMKernelETD3Q27BGK::~LBMKernelETD3Q27BGK(void) -= default; -////////////////////////////////////////////////////////////////////////// -void LBMKernelETD3Q27BGK::initDataSet() -{ - SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.9)); - dataSet->setFdistributions(d); -} -////////////////////////////////////////////////////////////////////////// -SPtr<LBMKernel> LBMKernelETD3Q27BGK::clone() -{ - SPtr<LBMKernel> kernel(new LBMKernelETD3Q27BGK()); - std::dynamic_pointer_cast<LBMKernelETD3Q27BGK>(kernel)->initDataSet(); - kernel->setCollisionFactor(this->collFactor); - kernel->setBCSet(bcSet->clone(kernel)); - kernel->setWithForcing(withForcing); - kernel->setForcingX1(muForcingX1); - kernel->setForcingX2(muForcingX2); - kernel->setForcingX3(muForcingX3); - kernel->setIndex(ix1, ix2, ix3); - return kernel; -} -////////////////////////////////////////////////////////////////////////// -void LBMKernelETD3Q27BGK::calculate(int /*step*/) -{ - using namespace D3Q27System; - using namespace vf::lbm::dir; - - //initializing of forcing stuff - if (withForcing) - { - muForcingX1.DefineVar("x1",&muX1); muForcingX1.DefineVar("x2",&muX2); muForcingX1.DefineVar("x3",&muX3); - muForcingX2.DefineVar("x1",&muX1); muForcingX2.DefineVar("x2",&muX2); muForcingX2.DefineVar("x3",&muX3); - muForcingX3.DefineVar("x1",&muX1); muForcingX3.DefineVar("x2",&muX2); muForcingX3.DefineVar("x3",&muX3); - forcingX1 = c0o1; - forcingX2 = c0o1; - forcingX3 = c0o1; - } - ///////////////////////////////////// - - localDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); - nonLocalDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); - zeroDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); - - SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); - real f[D3Q27System::ENDF+1]; - real feq[D3Q27System::ENDF+1]; - real drho,vx1,vx2,vx3; - const int bcArrayMaxX1 = (int)bcArray->getNX1(); - const int bcArrayMaxX2 = (int)bcArray->getNX2(); - const int bcArrayMaxX3 = (int)bcArray->getNX3(); - - int minX1 = ghostLayerWidth; - int minX2 = ghostLayerWidth; - int minX3 = ghostLayerWidth; - int maxX1 = bcArrayMaxX1-ghostLayerWidth; - int maxX2 = bcArrayMaxX2-ghostLayerWidth; - int maxX3 = bcArrayMaxX3-ghostLayerWidth; - - for(int x3 = minX3; x3 < maxX3; x3++) - { - for(int x2 = minX2; x2 < maxX2; x2++) - { - for(int x1 = minX1; x1 < maxX1; x1++) - { - if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) - { - int x1p = x1 + 1; - int x2p = x2 + 1; - int x3p = x3 + 1; - ////////////////////////////////////////////////////////////////////////// - //read distribution - //////////////////////////////////////////////////////////////////////////// - f[DIR_000] = (*this->zeroDistributions)(x1,x2,x3); - - f[DIR_P00] = (*this->localDistributions)(D3Q27System::ET_E, x1,x2,x3); - f[DIR_0P0] = (*this->localDistributions)(D3Q27System::ET_N,x1,x2,x3); - f[DIR_00P] = (*this->localDistributions)(D3Q27System::ET_T,x1,x2,x3); - f[DIR_PP0] = (*this->localDistributions)(D3Q27System::ET_NE,x1,x2,x3); - f[DIR_MP0] = (*this->localDistributions)(D3Q27System::ET_NW,x1p,x2,x3); - f[DIR_P0P] = (*this->localDistributions)(D3Q27System::ET_TE,x1,x2,x3); - f[DIR_M0P] = (*this->localDistributions)(D3Q27System::ET_TW, x1p,x2,x3); - f[DIR_0PP] = (*this->localDistributions)(D3Q27System::ET_TN,x1,x2,x3); - f[DIR_0MP] = (*this->localDistributions)(D3Q27System::ET_TS,x1,x2p,x3); - f[DIR_PPP] = (*this->localDistributions)(D3Q27System::ET_TNE,x1,x2,x3); - f[DIR_MPP] = (*this->localDistributions)(D3Q27System::ET_TNW,x1p,x2,x3); - f[DIR_PMP] = (*this->localDistributions)(D3Q27System::ET_TSE,x1,x2p,x3); - f[DIR_MMP] = (*this->localDistributions)(D3Q27System::ET_TSW,x1p,x2p,x3); - - f[DIR_M00] = (*this->nonLocalDistributions)(D3Q27System::ET_W,x1p,x2,x3 ); - f[DIR_0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,x2p,x3 ); - f[DIR_00M] = (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,x2,x3p ); - f[DIR_MM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1p,x2p,x3 ); - f[DIR_PM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,x2p,x3 ); - f[DIR_M0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1p,x2,x3p ); - f[DIR_P0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,x2,x3p ); - f[DIR_0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,x2p,x3p ); - f[DIR_0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,x2,x3p ); - f[DIR_MMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1p,x2p,x3p); - f[DIR_PMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,x2p,x3p); - f[DIR_MPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1p,x2,x3p); - f[DIR_PPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,x2,x3p); - ////////////////////////////////////////////////////////////////////////// - - drho = f[DIR_000] + f[DIR_P00] + f[DIR_M00] + f[DIR_0P0] + f[DIR_0M0] + f[DIR_00P] + f[DIR_00M] - + f[DIR_PP0] + f[DIR_MM0] + f[DIR_PM0] + f[DIR_MP0] + f[DIR_P0P] + f[DIR_M0M] + f[DIR_P0M] - + f[DIR_M0P] + f[DIR_0PP] + f[DIR_0MM] + f[DIR_0PM] + f[DIR_0MP] + f[DIR_PPP] + f[DIR_MMP] - + f[DIR_PMP] + f[DIR_MPP] + f[DIR_PPM] + f[DIR_MMM] + f[DIR_PMM] + f[DIR_MPM]; - - vx1 = f[DIR_P00] - f[DIR_M00] + f[DIR_PP0] - f[DIR_MM0] + f[DIR_PM0] - f[DIR_MP0] + f[DIR_P0P] - f[DIR_M0M] - + f[DIR_P0M] - f[DIR_M0P] + f[DIR_PPP] - f[DIR_MMP] + f[DIR_PMP] - f[DIR_MPP] + f[DIR_PPM] - f[DIR_MMM] - + f[DIR_PMM] - f[DIR_MPM]; - - vx2 = f[DIR_0P0] - f[DIR_0M0] + f[DIR_PP0] - f[DIR_MM0] - f[DIR_PM0] + f[DIR_MP0] + f[DIR_0PP] - f[DIR_0MM] + f[DIR_0PM] - - f[DIR_0MP] + f[DIR_PPP] - f[DIR_MMP] - f[DIR_PMP] + f[DIR_MPP] + f[DIR_PPM] - f[DIR_MMM] - f[DIR_PMM] - + f[DIR_MPM]; - - vx3 = f[DIR_00P] - f[DIR_00M] + f[DIR_P0P] - f[DIR_M0M] - f[DIR_P0M] + f[DIR_M0P] + f[DIR_0PP] - f[DIR_0MM] - f[DIR_0PM] - + f[DIR_0MP] + f[DIR_PPP] + f[DIR_MMP] + f[DIR_PMP] + f[DIR_MPP] - f[DIR_PPM] - f[DIR_MMM] - f[DIR_PMM] - - f[DIR_MPM]; - - real cu_sq= c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - feq[DIR_000] = c8o27*(drho-cu_sq); - feq[DIR_P00] = c2o27*(drho+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - feq[DIR_M00] = c2o27*(drho+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - feq[DIR_0P0] = c2o27*(drho+c3o1*( vx2)+c9o2*( vx2)*( vx2)-cu_sq); - feq[DIR_0M0] = c2o27*(drho+c3o1*( -vx2)+c9o2*( -vx2)*( -vx2)-cu_sq); - feq[DIR_00P] = c2o27*(drho+c3o1*( vx3 )+c9o2*( vx3)*( vx3)-cu_sq); - feq[DIR_00M] = c2o27*(drho+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - feq[DIR_PP0] = c1o54*(drho+c3o1*( vx1+vx2)+c9o2*( vx1+vx2)*( vx1+vx2)-cu_sq); - feq[DIR_MM0] = c1o54*(drho+c3o1*(-vx1-vx2)+c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq); - feq[DIR_PM0] = c1o54*(drho+c3o1*( vx1-vx2)+c9o2*( vx1-vx2)*( vx1-vx2)-cu_sq); - feq[DIR_MP0] = c1o54*(drho+c3o1*(-vx1+vx2)+c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq); - feq[DIR_P0P] = c1o54*(drho+c3o1*( vx1+vx3)+c9o2*( vx1+vx3)*( vx1+vx3)-cu_sq); - feq[DIR_M0M] = c1o54*(drho+c3o1*(-vx1-vx3)+c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq); - feq[DIR_P0M] = c1o54*(drho+c3o1*( vx1-vx3)+c9o2*( vx1-vx3)*( vx1-vx3)-cu_sq); - feq[DIR_M0P] = c1o54*(drho+c3o1*(-vx1+vx3)+c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq); - feq[DIR_0PP] = c1o54*(drho+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - feq[DIR_0MM] = c1o54*(drho+c3o1*(-vx2-vx3)+c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq); - feq[DIR_0PM] = c1o54*(drho+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - feq[DIR_0MP] = c1o54*(drho+c3o1*(-vx2+vx3)+c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq); - feq[DIR_PPP]= c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - feq[DIR_MMM]= c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - feq[DIR_PPM]= c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - feq[DIR_MMP]= c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - feq[DIR_PMP]= c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - feq[DIR_MPM]= c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - feq[DIR_PMM]= c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - feq[DIR_MPP]= c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - - //Relaxation - f[DIR_000] += (feq[DIR_000]-f[DIR_000])*collFactor; - f[DIR_P00] += (feq[DIR_P00]-f[DIR_P00])*collFactor; - f[DIR_M00] += (feq[DIR_M00]-f[DIR_M00])*collFactor; - f[DIR_0P0] += (feq[DIR_0P0]-f[DIR_0P0])*collFactor; - f[DIR_0M0] += (feq[DIR_0M0]-f[DIR_0M0])*collFactor; - f[DIR_00P] += (feq[DIR_00P]-f[DIR_00P])*collFactor; - f[DIR_00M] += (feq[DIR_00M]-f[DIR_00M])*collFactor; - f[DIR_PP0] += (feq[DIR_PP0]-f[DIR_PP0])*collFactor; - f[DIR_MM0] += (feq[DIR_MM0]-f[DIR_MM0])*collFactor; - f[DIR_PM0] += (feq[DIR_PM0]-f[DIR_PM0])*collFactor; - f[DIR_MP0] += (feq[DIR_MP0]-f[DIR_MP0])*collFactor; - f[DIR_P0P] += (feq[DIR_P0P]-f[DIR_P0P])*collFactor; - f[DIR_M0M] += (feq[DIR_M0M]-f[DIR_M0M])*collFactor; - f[DIR_P0M] += (feq[DIR_P0M]-f[DIR_P0M])*collFactor; - f[DIR_M0P] += (feq[DIR_M0P]-f[DIR_M0P])*collFactor; - f[DIR_0PP] += (feq[DIR_0PP]-f[DIR_0PP])*collFactor; - f[DIR_0MM] += (feq[DIR_0MM]-f[DIR_0MM])*collFactor; - f[DIR_0PM] += (feq[DIR_0PM]-f[DIR_0PM])*collFactor; - f[DIR_0MP] += (feq[DIR_0MP]-f[DIR_0MP])*collFactor; - - f[DIR_PPP] += (feq[DIR_PPP]-f[DIR_PPP])*collFactor; - f[DIR_MMM] += (feq[DIR_MMM]-f[DIR_MMM])*collFactor; - f[DIR_PPM] += (feq[DIR_PPM]-f[DIR_PPM])*collFactor; - f[DIR_MMP] += (feq[DIR_MMP]-f[DIR_MMP])*collFactor; - f[DIR_PMP] += (feq[DIR_PMP]-f[DIR_PMP])*collFactor; - f[DIR_MPM] += (feq[DIR_MPM]-f[DIR_MPM])*collFactor; - f[DIR_PMM] += (feq[DIR_PMM]-f[DIR_PMM])*collFactor; - f[DIR_MPP] += (feq[DIR_MPP]-f[DIR_MPP])*collFactor; - - ////////////////////////////////////////////////////////////////////////// - //forcing - if (withForcing) - { - muX1 = x1+ix1*bcArrayMaxX1; - muX2 = x2+ix2*bcArrayMaxX2; - muX3 = x3+ix3*bcArrayMaxX3; - - forcingX1 = muForcingX1.Eval(); - forcingX2 = muForcingX2.Eval(); - forcingX3 = muForcingX3.Eval(); - - f[DIR_000] += c0o1; - f[DIR_P00] += c3o1*c2o27 * (forcingX1) ; - f[DIR_M00] += c3o1*c2o27 * (-forcingX1) ; - f[DIR_0P0] += c3o1*c2o27 * (forcingX2) ; - f[DIR_0M0] += c3o1*c2o27 * (-forcingX2) ; - f[DIR_00P] += c3o1*c2o27 * (forcingX3) ; - f[DIR_00M] += c3o1*c2o27 * (-forcingX3); - f[DIR_PP0] += c3o1*c1o54 * ( forcingX1+forcingX2 ) ; - f[DIR_MM0 ] += c3o1*c1o54 * (-forcingX1-forcingX2 ) ; - f[DIR_PM0 ] += c3o1*c1o54 * ( forcingX1-forcingX2 ) ; - f[DIR_MP0 ] += c3o1*c1o54 * (-forcingX1+forcingX2 ) ; - f[DIR_P0P ] += c3o1*c1o54 * ( forcingX1 +forcingX3) ; - f[DIR_M0M ] += c3o1*c1o54 * (-forcingX1 -forcingX3) ; - f[DIR_P0M ] += c3o1*c1o54 * ( forcingX1 -forcingX3) ; - f[DIR_M0P ] += c3o1*c1o54 * (-forcingX1 +forcingX3) ; - f[DIR_0PP ] += c3o1*c1o54 * ( forcingX2+forcingX3) ; - f[DIR_0MM ] += c3o1*c1o54 * ( -forcingX2-forcingX3) ; - f[DIR_0PM ] += c3o1*c1o54 * ( forcingX2-forcingX3) ; - f[DIR_0MP ] += c3o1*c1o54 * ( -forcingX2+forcingX3) ; - f[DIR_PPP] += c3o1*c1o216* ( forcingX1+forcingX2+forcingX3) ; - f[DIR_MMM] += c3o1*c1o216* (-forcingX1-forcingX2-forcingX3) ; - f[DIR_PPM] += c3o1*c1o216* ( forcingX1+forcingX2-forcingX3) ; - f[DIR_MMP] += c3o1*c1o216* (-forcingX1-forcingX2+forcingX3) ; - f[DIR_PMP] += c3o1*c1o216* ( forcingX1-forcingX2+forcingX3) ; - f[DIR_MPM] += c3o1*c1o216* (-forcingX1+forcingX2-forcingX3) ; - f[DIR_PMM] += c3o1*c1o216* ( forcingX1-forcingX2-forcingX3) ; - f[DIR_MPP] += c3o1*c1o216* (-forcingX1+forcingX2+forcingX3) ; - } - ////////////////////////////////////////////////////////////////////////// -#ifdef PROOF_CORRECTNESS - real rho_post = f[REST] + f[DIR_P00] + 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]; - real dif = drho - rho_post; -#ifdef SINGLEPRECISION - if(dif > 10.0E-7 || dif < -10.0E-7) -#else - if(dif > 10.0E-15 || dif < -10.0E-15) -#endif - { - UB_THROW(UbException(UB_EXARGS,"rho is not correct")); - } -#endif - ////////////////////////////////////////////////////////////////////////// - //write distribution - ////////////////////////////////////////////////////////////////////////// - (*this->localDistributions)(D3Q27System::ET_E,x1, x2, x3) = f[INV_P00]; - (*this->localDistributions)(D3Q27System::ET_N,x1, x2, x3) = f[INV_0P0]; - (*this->localDistributions)(D3Q27System::ET_T,x1, x2, x3) = f[INV_00P]; - (*this->localDistributions)(D3Q27System::ET_NE,x1, x2, x3) = f[INV_PP0]; - (*this->localDistributions)(D3Q27System::ET_NW,x1p,x2, x3) = f[INV_MP0]; - (*this->localDistributions)(D3Q27System::ET_TE,x1, x2, x3) = f[INV_P0P]; - (*this->localDistributions)(D3Q27System::ET_TW,x1p,x2, x3) = f[INV_M0P]; - (*this->localDistributions)(D3Q27System::ET_TN,x1, x2, x3) = f[INV_0PP]; - (*this->localDistributions)(D3Q27System::ET_TS,x1, x2p,x3) = f[INV_0MP]; - (*this->localDistributions)(D3Q27System::ET_TNE,x1, x2, x3) = f[INV_PPP]; - (*this->localDistributions)(D3Q27System::ET_TNW,x1p,x2, x3) = f[INV_MPP]; - (*this->localDistributions)(D3Q27System::ET_TSE,x1, x2p,x3) = f[INV_PMP]; - (*this->localDistributions)(D3Q27System::ET_TSW,x1p,x2p,x3) = f[INV_MMP]; - - (*this->nonLocalDistributions)(D3Q27System::ET_W,x1p,x2, x3 ) = f[INV_M00 ]; - (*this->nonLocalDistributions)(D3Q27System::ET_S,x1, x2p,x3 ) = f[INV_0M0 ]; - (*this->nonLocalDistributions)(D3Q27System::ET_B,x1, x2, x3p ) = f[INV_00M ]; - (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1p,x2p,x3 ) = f[INV_MM0]; - (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1, x2p,x3 ) = f[INV_PM0]; - (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1p,x2, x3p ) = f[INV_M0M]; - (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1, x2, x3p ) = f[INV_P0M]; - (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1, x2p,x3p ) = f[INV_0MM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1, x2, x3p ) = f[INV_0PM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1p,x2p,x3p) = f[INV_MMM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1, x2p,x3p) = f[INV_PMM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1p,x2, x3p) = f[INV_MPM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3p) = f[INV_PPM]; - - (*this->zeroDistributions)(x1,x2,x3) = f[DIR_000]; - ////////////////////////////////////////////////////////////////////////// - - - } - } - } - } -} -////////////////////////////////////////////////////////////////////////// -real LBMKernelETD3Q27BGK::getCalculationTime() -{ - return c0o1; -} diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BC.cpp b/src/cpu/core/BoundaryConditions/BC.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BC.cpp rename to src/cpu/core/BoundaryConditions/BC.cpp diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BC.h b/src/cpu/core/BoundaryConditions/BC.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BC.h rename to src/cpu/core/BoundaryConditions/BC.h diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCArray3D.cpp b/src/cpu/core/BoundaryConditions/BCArray3D.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BCArray3D.cpp rename to src/cpu/core/BoundaryConditions/BCArray3D.cpp diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCArray3D.h b/src/cpu/core/BoundaryConditions/BCArray3D.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BCArray3D.h rename to src/cpu/core/BoundaryConditions/BCArray3D.h diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCFunction.cpp b/src/cpu/core/BoundaryConditions/BCFunction.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BCFunction.cpp rename to src/cpu/core/BoundaryConditions/BCFunction.cpp diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCFunction.h b/src/cpu/core/BoundaryConditions/BCFunction.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BCFunction.h rename to src/cpu/core/BoundaryConditions/BCFunction.h diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCSet.cpp b/src/cpu/core/BoundaryConditions/BCSet.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BCSet.cpp rename to src/cpu/core/BoundaryConditions/BCSet.cpp diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCSet.h b/src/cpu/core/BoundaryConditions/BCSet.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BCSet.h rename to src/cpu/core/BoundaryConditions/BCSet.h diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategy.cpp b/src/cpu/core/BoundaryConditions/BCStrategy.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategy.cpp rename to src/cpu/core/BoundaryConditions/BCStrategy.cpp diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategy.h b/src/cpu/core/BoundaryConditions/BCStrategy.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategy.h rename to src/cpu/core/BoundaryConditions/BCStrategy.h diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategyRegistry.cpp b/src/cpu/core/BoundaryConditions/BCStrategyRegistry.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategyRegistry.cpp rename to src/cpu/core/BoundaryConditions/BCStrategyRegistry.cpp diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategyRegistry.h b/src/cpu/core/BoundaryConditions/BCStrategyRegistry.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BCStrategyRegistry.h rename to src/cpu/core/BoundaryConditions/BCStrategyRegistry.h diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.cpp b/src/cpu/core/BoundaryConditions/BoundaryConditions.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.cpp rename to src/cpu/core/BoundaryConditions/BoundaryConditions.cpp diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h b/src/cpu/core/BoundaryConditions/BoundaryConditions.h similarity index 95% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h rename to src/cpu/core/BoundaryConditions/BoundaryConditions.h index 9d09e5b440cc0cbe45739d681c172865e9cc8b83..917f5c6f38cb9af76ee5bbb535eb850ac9878570 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/BoundaryConditions.h +++ b/src/cpu/core/BoundaryConditions/BoundaryConditions.h @@ -196,59 +196,59 @@ public: using namespace vf::lbm::dir; switch (direction) { - case DIR_P00: + case dP00: return (float)(vf::basics::constant::c4o9 * (+bcVelocityX1)); //(2/cs^2)(=6)*rho_0(=1 bei inkompr)*wi*u*ei mit cs=1/sqrt(3) - case DIR_M00: + case dM00: return (float)(vf::basics::constant::c4o9 * (-bcVelocityX1)); // z.B. aus paper manfred MRT LB models in three dimensions (2002) - case DIR_0P0: + case d0P0: return (float)(vf::basics::constant::c4o9 * (+bcVelocityX2)); - case DIR_0M0: + case d0M0: return (float)(vf::basics::constant::c4o9 * (-bcVelocityX2)); - case DIR_00P: + case d00P: return (float)(vf::basics::constant::c4o9 * (+bcVelocityX3)); - case DIR_00M: + case d00M: return (float)(vf::basics::constant::c4o9 * (-bcVelocityX3)); - case DIR_PP0: + case dPP0: return (float)(vf::basics::constant::c1o9 * (+bcVelocityX1 + bcVelocityX2)); - case DIR_MM0: + case dMM0: return (float)(vf::basics::constant::c1o9 * (-bcVelocityX1 - bcVelocityX2)); - case DIR_PM0: + case dPM0: return (float)(vf::basics::constant::c1o9 * (+bcVelocityX1 - bcVelocityX2)); - case DIR_MP0: + case dMP0: return (float)(vf::basics::constant::c1o9 * (-bcVelocityX1 + bcVelocityX2)); - case DIR_P0P: + case dP0P: return (float)(vf::basics::constant::c1o9 * (+bcVelocityX1 + bcVelocityX3)); - case DIR_M0M: + case dM0M: return (float)(vf::basics::constant::c1o9 * (-bcVelocityX1 - bcVelocityX3)); - case DIR_P0M: + case dP0M: return (float)(vf::basics::constant::c1o9 * (+bcVelocityX1 - bcVelocityX3)); - case DIR_M0P: + case dM0P: return (float)(vf::basics::constant::c1o9 * (-bcVelocityX1 + bcVelocityX3)); - case DIR_0PP: + case d0PP: return (float)(vf::basics::constant::c1o9 * (+bcVelocityX2 + bcVelocityX3)); - case DIR_0MM: + case d0MM: return (float)(vf::basics::constant::c1o9 * (-bcVelocityX2 - bcVelocityX3)); - case DIR_0PM: + case d0PM: return (float)(vf::basics::constant::c1o9 * (+bcVelocityX2 - bcVelocityX3)); - case DIR_0MP: + case d0MP: return (float)(vf::basics::constant::c1o9 * (-bcVelocityX2 + bcVelocityX3)); - case DIR_PPP: + case dPPP: return (float)(vf::basics::constant::c1o36 * (+bcVelocityX1 + bcVelocityX2 + bcVelocityX3)); - case DIR_MMM: + case dMMM: return (float)(vf::basics::constant::c1o36 * (-bcVelocityX1 - bcVelocityX2 - bcVelocityX3)); - case DIR_PPM: + case dPPM: return (float)(vf::basics::constant::c1o36 * (+bcVelocityX1 + bcVelocityX2 - bcVelocityX3)); - case DIR_MMP: + case dMMP: return (float)(vf::basics::constant::c1o36 * (-bcVelocityX1 - bcVelocityX2 + bcVelocityX3)); - case DIR_PMP: + case dPMP: return (float)(vf::basics::constant::c1o36 * (+bcVelocityX1 - bcVelocityX2 + bcVelocityX3)); - case DIR_MPM: + case dMPM: return (float)(vf::basics::constant::c1o36 * (-bcVelocityX1 + bcVelocityX2 - bcVelocityX3)); - case DIR_PMM: + case dPMM: return (float)(vf::basics::constant::c1o36 * (+bcVelocityX1 - bcVelocityX2 - bcVelocityX3)); - case DIR_MPP: + case dMPP: return (float)(vf::basics::constant::c1o36 * (-bcVelocityX1 + bcVelocityX2 + bcVelocityX3)); default: throw UbException(UB_EXARGS, "unknown error"); diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/DensityBC.cpp b/src/cpu/core/BoundaryConditions/DensityBC.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/DensityBC.cpp rename to src/cpu/core/BoundaryConditions/DensityBC.cpp diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/DensityBC.h b/src/cpu/core/BoundaryConditions/DensityBC.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/DensityBC.h rename to src/cpu/core/BoundaryConditions/DensityBC.h diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/EqDensityBCStrategy.cpp b/src/cpu/core/BoundaryConditions/EqDensityBCStrategy.cpp similarity index 88% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/EqDensityBCStrategy.cpp rename to src/cpu/core/BoundaryConditions/EqDensityBCStrategy.cpp index 26004e89bfbfa9e8c87e64199ad285593ecd61a9..5ee5066b221db04f7680a7bae8374026741af087 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/EqDensityBCStrategy.cpp +++ b/src/cpu/core/BoundaryConditions/EqDensityBCStrategy.cpp @@ -58,23 +58,23 @@ void EqDensityBCStrategy::applyBC() real f[D3Q27System::ENDF + 1]; - distributions->getDistributionInv(f, x1, x2, x3); + distributions->getPostCollisionDistribution(f, x1, x2, x3); int nx1 = x1; int nx2 = x2; int nx3 = x3; // flag points in direction of fluid - if (bcPtr->hasDensityBoundaryFlag(DIR_P00)) { + if (bcPtr->hasDensityBoundaryFlag(dP00)) { nx1 -= 1; - } else if (bcPtr->hasDensityBoundaryFlag(DIR_M00)) { + } else if (bcPtr->hasDensityBoundaryFlag(dM00)) { nx1 += 1; - } else if (bcPtr->hasDensityBoundaryFlag(DIR_0P0)) { + } else if (bcPtr->hasDensityBoundaryFlag(d0P0)) { nx2 -= 1; - } else if (bcPtr->hasDensityBoundaryFlag(DIR_0M0)) { + } else if (bcPtr->hasDensityBoundaryFlag(d0M0)) { nx2 += 1; - } else if (bcPtr->hasDensityBoundaryFlag(DIR_00P)) { + } else if (bcPtr->hasDensityBoundaryFlag(d00P)) { nx3 -= 1; - } else if (bcPtr->hasDensityBoundaryFlag(DIR_00M)) { + } else if (bcPtr->hasDensityBoundaryFlag(d00M)) { nx3 += 1; } else UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary...")); @@ -86,7 +86,7 @@ void EqDensityBCStrategy::applyBC() if (bcPtr->hasDensityBoundaryFlag(fdir)) { // Ehsan: 15.2.2013: real ftemp = calcFeqsForDirFct(fdir, rhoBC, vx1, vx2, vx3); - distributions->setDistributionForDirection(ftemp, nx1, nx2, nx3, fdir); + distributions->setPostCollisionDistributionForDirection(ftemp, nx1, nx2, nx3, fdir); } } } diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/EqDensityBCStrategy.h b/src/cpu/core/BoundaryConditions/EqDensityBCStrategy.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/EqDensityBCStrategy.h rename to src/cpu/core/BoundaryConditions/EqDensityBCStrategy.h diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/HighViscosityNoSlipBCStrategy.cpp b/src/cpu/core/BoundaryConditions/HighViscosityNoSlipBCStrategy.cpp similarity index 95% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/HighViscosityNoSlipBCStrategy.cpp rename to src/cpu/core/BoundaryConditions/HighViscosityNoSlipBCStrategy.cpp index cae6af9edb183d7bdff8208bf530a502cde9abf9..680fd5201bbc065c938c2509aa8ffa33c4842abf 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/HighViscosityNoSlipBCStrategy.cpp +++ b/src/cpu/core/BoundaryConditions/HighViscosityNoSlipBCStrategy.cpp @@ -56,7 +56,7 @@ void HighViscosityNoSlipBCStrategy::applyBC() { real f[D3Q27System::ENDF + 1]; real feq[D3Q27System::ENDF + 1]; - distributions->getDistribution(f, x1, x2, x3); + distributions->getPreCollisionDistribution(f, x1, x2, x3); real rho, vx1, vx2, vx3; calcMacrosFct(f, rho, vx1, vx2, vx3); calcFeqFct(feq, rho, vx1, vx2, vx3); @@ -69,7 +69,7 @@ void HighViscosityNoSlipBCStrategy::applyBC() real fReturn = (f[invDir] + q * f[fDir] + q * collFactor * (feq[invDir] - f[invDir] + feq[fDir] - f[fDir])) / (vf::basics::constant::c1o1 + q); - distributions->setDistributionInvForDirection(fReturn, x1 + D3Q27System::DX1[invDir], + distributions->setPreCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], invDir); } diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/HighViscosityNoSlipBCStrategy.h b/src/cpu/core/BoundaryConditions/HighViscosityNoSlipBCStrategy.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/HighViscosityNoSlipBCStrategy.h rename to src/cpu/core/BoundaryConditions/HighViscosityNoSlipBCStrategy.h diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBC.cpp b/src/cpu/core/BoundaryConditions/NoSlipBC.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBC.cpp rename to src/cpu/core/BoundaryConditions/NoSlipBC.cpp diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBC.h b/src/cpu/core/BoundaryConditions/NoSlipBC.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBC.h rename to src/cpu/core/BoundaryConditions/NoSlipBC.h diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCStrategy.cpp b/src/cpu/core/BoundaryConditions/NoSlipBCStrategy.cpp similarity index 94% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCStrategy.cpp rename to src/cpu/core/BoundaryConditions/NoSlipBCStrategy.cpp index 45c2ea759bec8055a96761be6292ffa0577e91bb..f3e7c9a2ab1bf0ff1a09d2b95d16e63659aa2e48 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCStrategy.cpp +++ b/src/cpu/core/BoundaryConditions/NoSlipBCStrategy.cpp @@ -57,7 +57,7 @@ void NoSlipBCStrategy::applyBC() using namespace D3Q27System; real f[ENDF + 1]; real feq[ENDF + 1]; - distributions->getDistributionInv(f, x1, x2, x3); + distributions->getPostCollisionDistribution(f, x1, x2, x3); real rho, vx1, vx2, vx3; calcMacrosFct(f, rho, vx1, vx2, vx3); calcFeqFct(feq, rho, vx1, vx2, vx3); @@ -68,7 +68,7 @@ void NoSlipBCStrategy::applyBC() const int invDir = INVDIR[fdir]; real q = bcPtr->getQ(invDir); real fReturn = ((c1o1 - q) / (c1o1 + q)) * ((f[invDir] - feq[invDir]) / (c1o1 - collFactor) + feq[invDir]) + ((q / (c1o1 + q)) * (f[invDir] + f[fdir])); - distributions->setDistributionForDirection(fReturn, x1 + DX1[invDir], x2 + DX2[invDir], x3 + DX3[invDir], fdir); + distributions->setPostCollisionDistributionForDirection(fReturn, x1 + DX1[invDir], x2 + DX2[invDir], x3 + DX3[invDir], fdir); } } } diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCStrategy.h b/src/cpu/core/BoundaryConditions/NoSlipBCStrategy.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/NoSlipBCStrategy.h rename to src/cpu/core/BoundaryConditions/NoSlipBCStrategy.h diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonEqDensityBCStrategy.cpp b/src/cpu/core/BoundaryConditions/NonEqDensityBCStrategy.cpp similarity index 89% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/NonEqDensityBCStrategy.cpp rename to src/cpu/core/BoundaryConditions/NonEqDensityBCStrategy.cpp index dd27f84e92e81cb775f575266d58e8d8220de50c..5e82bf9c0b1a4ffceac49c24d10cba6acce30bee 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonEqDensityBCStrategy.cpp +++ b/src/cpu/core/BoundaryConditions/NonEqDensityBCStrategy.cpp @@ -58,23 +58,23 @@ void NonEqDensityBCStrategy::applyBC() using namespace vf::lbm::dir; real f[D3Q27System::ENDF + 1]; - distributions->getDistributionInv(f, x1, x2, x3); + distributions->getPostCollisionDistribution(f, x1, x2, x3); int nx1 = x1; int nx2 = x2; int nx3 = x3; // flag points in direction of fluid - if (bcPtr->hasDensityBoundaryFlag(DIR_P00)) { + if (bcPtr->hasDensityBoundaryFlag(dP00)) { nx1 -= 1; - } else if (bcPtr->hasDensityBoundaryFlag(DIR_M00)) { + } else if (bcPtr->hasDensityBoundaryFlag(dM00)) { nx1 += 1; - } else if (bcPtr->hasDensityBoundaryFlag(DIR_0P0)) { + } else if (bcPtr->hasDensityBoundaryFlag(d0P0)) { nx2 -= 1; - } else if (bcPtr->hasDensityBoundaryFlag(DIR_0M0)) { + } else if (bcPtr->hasDensityBoundaryFlag(d0M0)) { nx2 += 1; - } else if (bcPtr->hasDensityBoundaryFlag(DIR_00P)) { + } else if (bcPtr->hasDensityBoundaryFlag(d00P)) { nx3 -= 1; - } else if (bcPtr->hasDensityBoundaryFlag(DIR_00M)) { + } else if (bcPtr->hasDensityBoundaryFlag(d00M)) { nx3 += 1; } else return; // UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary...")); @@ -93,7 +93,7 @@ void NonEqDensityBCStrategy::applyBC() real ftemp = calcFeqsForDirFct(fdir, rho, vx1, vx2, vx3); // rhoBC=(rho>rhoBC)? rhoBC : rho; //Limiter 08.08.2018 ftemp = calcFeqsForDirFct(fdir, rhoBC, vx1, vx2, vx3) + f[fdir] - ftemp; - distributions->setDistributionForDirection(ftemp, nx1, nx2, nx3, fdir); + distributions->setPostCollisionDistributionForDirection(ftemp, nx1, nx2, nx3, fdir); } } } diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonEqDensityBCStrategy.h b/src/cpu/core/BoundaryConditions/NonEqDensityBCStrategy.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/NonEqDensityBCStrategy.h rename to src/cpu/core/BoundaryConditions/NonEqDensityBCStrategy.h diff --git a/src/cpu/core/BoundaryConditions/NonReflectingInflowBCStrategy.cpp b/src/cpu/core/BoundaryConditions/NonReflectingInflowBCStrategy.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d84a8fac2874a93d520b6f7dda86fb9554988145 --- /dev/null +++ b/src/cpu/core/BoundaryConditions/NonReflectingInflowBCStrategy.cpp @@ -0,0 +1,341 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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/>. +// +//! \file NonReflectingInflowBCStrategy.cpp +//! \ingroup BoundarConditions +//! \author Hussein Alihussein +//======================================================================================= +#include "NonReflectingInflowBCStrategy.h" + +#include "BoundaryConditions.h" +#include "D3Q27System.h" +#include "DistributionArray3D.h" + +NonReflectingInflowBCStrategy::NonReflectingInflowBCStrategy() +{ + BCStrategy::type = BCStrategy::NonReflectingInflowBCStrategy; + BCStrategy::preCollision = true; +} +////////////////////////////////////////////////////////////////////////// +NonReflectingInflowBCStrategy::~NonReflectingInflowBCStrategy() = default; +////////////////////////////////////////////////////////////////////////// +SPtr<BCStrategy> NonReflectingInflowBCStrategy::clone() +{ + SPtr<BCStrategy> bc(new NonReflectingInflowBCStrategy()); + return bc; +} +////////////////////////////////////////////////////////////////////////// +void NonReflectingInflowBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) +{ + this->distributions = distributions; +} +////////////////////////////////////////////////////////////////////////// +void NonReflectingInflowBCStrategy::applyBC() +{ + using namespace vf::lbm::dir; + using namespace D3Q27System; + // using namespace UbMath; + using namespace vf::basics::constant; + + LBMReal f[ENDF + 1]; + LBMReal ftemp[ENDF + 1]; + + int nx1 = x1; + int nx2 = x2; + int nx3 = x3; + int direction = -1; + + // flag points in direction of fluid + if (bcPtr->hasDensityBoundaryFlag(dP00)) { + nx1 += 1; + direction = dP00; + } else if (bcPtr->hasDensityBoundaryFlag(dM00)) { + nx1 -= 1; + direction = dM00; + } else if (bcPtr->hasDensityBoundaryFlag(d0P0)) { + nx2 += 1; + direction = d0P0; + } else if (bcPtr->hasDensityBoundaryFlag(d0M0)) { + nx2 -= 1; + direction = d0M0; + } else if (bcPtr->hasDensityBoundaryFlag(d00P)) { + nx3 += 1; + direction = d00P; + } else if (bcPtr->hasDensityBoundaryFlag(d00M)) { + nx3 -= 1; + direction = d00M; + } else + UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary...")); + + distributions->getPreCollisionDistribution(f, x1, x2, x3); + distributions->getPreCollisionDistribution(ftemp, nx1, nx2, nx3); + + LBMReal rho, vx1, vx2, vx3; + calcMacrosFct(f, rho, vx1, vx2, vx3); + //vx1 = 0.; + LBMReal BCVeloWeight = c1o2; + // LBMReal velocity = 0.004814077025232405; + // LBMReal velocity = 0.00057735; + //LBMReal velocity = 0.04; + // LBMReal velocity = 0.01; + // LBMReal velocity = 1./112.; + // LBMReal velocity = 1./126.; + LBMReal velocity = c1o100/2; + // LBMReal velocity = 0.005; + //LBMReal delf =(-velocity+vx1)*0.5 ; + LBMReal delf; + + switch (direction) { + case dP00: + delf = (-velocity + vx1) * BCVeloWeight; + // delf = (-velocity ) * BCVeloWeight; + f[dP00] = ftemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP00] - delf* WEIGTH[dP00]; + f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPP0]- delf* WEIGTH[dPP0]; + f[dPM0] = ftemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPM0]- delf* WEIGTH[dPM0]; + f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0P]- delf* WEIGTH[dP0P]; + f[dP0M] = ftemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0M]- delf* WEIGTH[dP0M]; + f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPP]- delf* WEIGTH[dPPP]; + f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMP]- delf* WEIGTH[dPMP]; + f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPM]- delf* WEIGTH[dPPM]; + f[dPMM] = ftemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMM]- delf* WEIGTH[dPMM]; + //f[dP00] = (ftemp[dP00] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dP00]) * + // (1 - BCVeloWeight) + + // (ftemp[dM00] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dM00] + + // velocity*(6)*WEIGTH[dP00]/* bcPtr->getBoundaryVelocity(INVDIR[dM00])*/) * + // (BCVeloWeight) ; + //f[dPP0] = (ftemp[dPP0] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dPP0]) * + // (1 - BCVeloWeight) + + // (ftemp[dMM0] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dMM0] + + // velocity * (6) * WEIGTH[dPP0] /*bcPtr->getBoundaryVelocity(INVDIR[dMM0])*/) * + // (BCVeloWeight); + //f[dPM0] = (ftemp[dPM0] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dPM0]) * + // (1 - BCVeloWeight) + + // (ftemp[dMP0] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dMP0] + + // velocity*(6)*WEIGTH[dPP0]/* bcPtr->getBoundaryVelocity(INVDIR[dMP0])*/) * + // (BCVeloWeight); + //f[dP0P] = (ftemp[dP0P] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dP0P]) * + // (1 - BCVeloWeight) + + // (ftemp[dM0M] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dM0M] + + // velocity*(6)*WEIGTH[dP0P]/* bcPtr->getBoundaryVelocity(INVDIR[dM0M])*/) * + // (BCVeloWeight); + //f[dP0M] = (ftemp[dP0M] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dP0M])* + // (1 - BCVeloWeight) + + // (ftemp[dM0P] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dM0P] + + // velocity*(6)*WEIGTH[dP0M]/* bcPtr->getBoundaryVelocity(INVDIR[dM0P])*/) * + // (BCVeloWeight); + //f[dPPP] = (ftemp[dPPP] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dPPP])* + // (1 - BCVeloWeight) + + // (ftemp[dMMM] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dMMM] + + // velocity * (6) * WEIGTH[dPPP] /* bcPtr->getBoundaryVelocity(INVDIR[dMMM])*/) * + // (BCVeloWeight); + //f[dPMP] = (ftemp[dPMP] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dPMP]) * + // (1 - BCVeloWeight) + + // (ftemp[dMPM] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dMPM] + + // velocity * (6) * WEIGTH[dPPP] /*bcPtr->getBoundaryVelocity(INVDIR[dMPM])*/) * + // (BCVeloWeight); + //f[dPPM] = (ftemp[dPPM] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dPPM]) * + // (1 - BCVeloWeight) + + // (ftemp[dMMP] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dMMP] + + // velocity * (6) * WEIGTH[dPPP] /* bcPtr->getBoundaryVelocity(INVDIR[dMMP])*/) * + // (BCVeloWeight); + //f[dPMM] = (ftemp[dPMM] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dPMM]) * + // (1 - BCVeloWeight) + + // (ftemp[dMPP] * (c1oSqrt3 + vx1) + (1.0 - c1oSqrt3 - vx1) * f[dMPP] + + // velocity * (6) * WEIGTH[dPPP] /* bcPtr->getBoundaryVelocity(INVDIR[dMPP])*/) * + // (BCVeloWeight); + + distributions->setPreCollisionDistributionForDirection(f[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00); + distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); + distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); + distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); + distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); + distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + break; + case dM00: + delf = (-velocity - vx1) * BCVeloWeight; + f[dM00] = ftemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM00] - + delf * WEIGTH[dM00]; + f[dMP0] = ftemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMP0] - + delf * WEIGTH[dMP0]; + f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMM0] - + delf * WEIGTH[dMM0]; + f[dM0P] = ftemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0P] - + delf * WEIGTH[dM0P]; + f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0M] - + delf * WEIGTH[dM0M]; + f[dMPP] = ftemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPP] - + delf * WEIGTH[dMPP]; + f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMP] - + delf * WEIGTH[dMMP]; + f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPM] - + delf * WEIGTH[dMPM]; + f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMM] - + delf * WEIGTH[dMMM]; + + distributions->setPreCollisionDistributionForDirection(f[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00); + distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); + distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); + distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); + distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); + distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); + break; + case d0P0: + delf = (-velocity + vx2) * BCVeloWeight; + f[d0P0] = ftemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0P0] - + delf * WEIGTH[d0P0]; + f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPP0] - + delf * WEIGTH[dPP0]; + f[dMP0] = ftemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMP0] - + delf * WEIGTH[dMP0]; + f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PP] - + delf * WEIGTH[d0PP]; + f[d0PM] = ftemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PM] - + delf * WEIGTH[d0PM]; + f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPP] - + delf * WEIGTH[dPPP]; + f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPP] - + delf * WEIGTH[dMPP]; + f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPM] - + delf * WEIGTH[dPPM]; + f[dMPM] = ftemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPM] - + delf * WEIGTH[dMPM]; + + distributions->setPreCollisionDistributionForDirection(f[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0); + distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); + distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); + distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); + distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); + distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + break; + case d0M0: + delf = (-velocity - vx2) * BCVeloWeight; + f[d0M0] = ftemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0M0] - + delf * WEIGTH[d0M0]; + f[dPM0] = ftemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPM0] - + delf * WEIGTH[dPM0]; + f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMM0] - + delf * WEIGTH[dMM0]; + f[d0MP] = ftemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MP] - + delf * WEIGTH[d0MP]; + f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MM] - + delf * WEIGTH[d0MM]; + f[dPMP] = ftemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMP] - + delf * WEIGTH[dPMP]; + f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMP] - + delf * WEIGTH[dMMP]; + f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMM] - + delf * WEIGTH[dPMM]; + f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMM] - + delf * WEIGTH[dMMM]; + + distributions->setPreCollisionDistributionForDirection(f[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0); + distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); + distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); + distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); + distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); + distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); + break; + case d00P: + delf = (-velocity + vx3) * BCVeloWeight; + f[d00P] = ftemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d00P] - + delf * WEIGTH[d00P]; + f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dP0P] - + delf * WEIGTH[dP0P]; + f[dM0P] = ftemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dM0P] - + delf * WEIGTH[dM0P]; + f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0PP] - + delf * WEIGTH[d0PP]; + f[d0MP] = ftemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0MP] - + delf * WEIGTH[d0MP]; + f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPPP] - + delf * WEIGTH[dPPP]; + f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMPP] - + delf * WEIGTH[dMPP]; + f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPMP] - + delf * WEIGTH[dPMP]; + f[dMMP] = ftemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMMP] - + delf * WEIGTH[dMMP]; + + distributions->setPreCollisionDistributionForDirection(f[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M); + distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); + distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); + distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); + distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); + distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + break; + case d00M: + delf = (-velocity - vx3) * BCVeloWeight; + f[d00M] = ftemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d00M] - + delf * WEIGTH[d00M]; + f[dP0M] = ftemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dP0M] - + delf * WEIGTH[dP0M]; + f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dM0M] - + delf * WEIGTH[dM0M]; + f[d0PM] = ftemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0PM] - + delf * WEIGTH[d0PM]; + f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0MM] - + delf * WEIGTH[d0MM]; + f[dPPM] = ftemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPPM] - + delf * WEIGTH[dPPM]; + f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMPM] - + delf * WEIGTH[dMPM]; + f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPMM] - + delf * WEIGTH[dPMM]; + f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMMM] - + delf * WEIGTH[dMMM]; + + distributions->setPreCollisionDistributionForDirection(f[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P); + distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); + distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); + distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); + distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); + distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); + break; + default: + UB_THROW( + UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!")); + } +} diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingInflowBCStrategy.h b/src/cpu/core/BoundaryConditions/NonReflectingInflowBCStrategy.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingInflowBCStrategy.h rename to src/cpu/core/BoundaryConditions/NonReflectingInflowBCStrategy.h diff --git a/src/cpu/core/BoundaryConditions/NonReflectingOutflowBCStrategy.cpp b/src/cpu/core/BoundaryConditions/NonReflectingOutflowBCStrategy.cpp new file mode 100644 index 0000000000000000000000000000000000000000..fe8407bc5e36a6dbec4a914058fa206fe6a8dfad --- /dev/null +++ b/src/cpu/core/BoundaryConditions/NonReflectingOutflowBCStrategy.cpp @@ -0,0 +1,233 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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/>. +// +//! \file NonReflectingOutflowBCStrategy.cpp +//! \ingroup BoundarConditions +//! \author Konstantin Kutscher +//======================================================================================= +#include "NonReflectingOutflowBCStrategy.h" + +#include "BoundaryConditions.h" +#include "D3Q27System.h" +#include "DistributionArray3D.h" + +NonReflectingOutflowBCStrategy::NonReflectingOutflowBCStrategy() +{ + BCStrategy::type = BCStrategy::NonReflectingOutflowBCStrategy; + BCStrategy::preCollision = true; +} +////////////////////////////////////////////////////////////////////////// +NonReflectingOutflowBCStrategy::~NonReflectingOutflowBCStrategy() = default; +////////////////////////////////////////////////////////////////////////// +SPtr<BCStrategy> NonReflectingOutflowBCStrategy::clone() +{ + SPtr<BCStrategy> bc(new NonReflectingOutflowBCStrategy()); + return bc; +} +////////////////////////////////////////////////////////////////////////// +void NonReflectingOutflowBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) +{ + this->distributions = distributions; +} +////////////////////////////////////////////////////////////////////////// +void NonReflectingOutflowBCStrategy::applyBC() +{ + using namespace vf::lbm::dir; + + using namespace D3Q27System; + // using namespace UbMath; + using namespace vf::basics::constant; + + real f[ENDF + 1]; + real ftemp[ENDF + 1]; + + int nx1 = x1; + int nx2 = x2; + int nx3 = x3; + int direction = -1; + + // flag points in direction of fluid + if (bcPtr->hasDensityBoundaryFlag(dP00)) { + nx1 += 1; + direction = dP00; + } else if (bcPtr->hasDensityBoundaryFlag(dM00)) { + nx1 -= 1; + direction = dM00; + } else if (bcPtr->hasDensityBoundaryFlag(d0P0)) { + nx2 += 1; + direction = d0P0; + } else if (bcPtr->hasDensityBoundaryFlag(d0M0)) { + nx2 -= 1; + direction = d0M0; + } else if (bcPtr->hasDensityBoundaryFlag(d00P)) { + nx3 += 1; + direction = d00P; + } else if (bcPtr->hasDensityBoundaryFlag(d00M)) { + nx3 -= 1; + direction = d00M; + } else + UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary...")); + + distributions->getPreCollisionDistribution(f, x1, x2, x3); + distributions->getPreCollisionDistribution(ftemp, nx1, nx2, nx3); + + real rho, vx1, vx2, vx3; + calcMacrosFct(f, rho, vx1, vx2, vx3); + + switch (direction) { + case dP00: + f[dP00] = ftemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP00]; + f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPP0]; + f[dPM0] = ftemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPM0]; + f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0P]; + f[dP0M] = ftemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0M]; + f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPP]; + f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMP]; + f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPM]; + f[dPMM] = ftemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMM]; + + distributions->setPreCollisionDistributionForDirection(f[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00); + distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); + distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); + distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); + distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); + distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + break; + case dM00: + f[dM00] = ftemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM00]; + f[dMP0] = ftemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMP0]; + f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMM0]; + f[dM0P] = ftemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0P]; + f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0M]; + f[dMPP] = ftemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPP]; + f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMP]; + f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPM]; + f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMM]; + + distributions->setPreCollisionDistributionForDirection(f[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00); + distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); + distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); + distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); + distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); + distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); + break; + case d0P0: + f[d0P0] = ftemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0P0]; + f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPP0]; + f[dMP0] = ftemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMP0]; + f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PP]; + f[d0PM] = ftemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PM]; + f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPP]; + f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPP]; + f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPM]; + f[dMPM] = ftemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPM]; + + distributions->setPreCollisionDistributionForDirection(f[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0); + distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); + distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); + distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); + distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); + distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + break; + case d0M0: + f[d0M0] = ftemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0M0]; + f[dPM0] = ftemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPM0]; + f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMM0]; + f[d0MP] = ftemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MP]; + f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MM]; + f[dPMP] = ftemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMP]; + f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMP]; + f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMM]; + f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMM]; + + distributions->setPreCollisionDistributionForDirection(f[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0); + distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); + distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); + distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); + distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); + distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); + break; + case d00P: + f[d00P] = ftemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d00P]; + f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dP0P]; + f[dM0P] = ftemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dM0P]; + f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0PP]; + f[d0MP] = ftemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0MP]; + f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPPP]; + f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMPP]; + f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPMP]; + f[dMMP] = ftemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMMP]; + + distributions->setPreCollisionDistributionForDirection(f[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M); + distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); + distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); + distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); + distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); + distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + break; + case d00M: + f[d00M] = ftemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d00M]; + f[dP0M] = ftemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dP0M]; + f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dM0M]; + f[d0PM] = ftemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0PM]; + f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0MM]; + f[dPPM] = ftemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPPM]; + f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMPM]; + f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPMM]; + f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMMM]; + + distributions->setPreCollisionDistributionForDirection(f[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P); + distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); + distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); + distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); + distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); + distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); + break; + default: + UB_THROW( + UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!")); + } +} diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCStrategy.h b/src/cpu/core/BoundaryConditions/NonReflectingOutflowBCStrategy.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowBCStrategy.h rename to src/cpu/core/BoundaryConditions/NonReflectingOutflowBCStrategy.h diff --git a/src/cpu/core/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.cpp b/src/cpu/core/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a80a2d4e2c089c749b3bafac2c1f4461d88ede82 --- /dev/null +++ b/src/cpu/core/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.cpp @@ -0,0 +1,233 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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/>. +// +//! \file NonReflectingOutflowWithRelaxationBCStrategy.cpp +//! \ingroup BoundarConditions +//! \author Konstantin Kutscher, Hussein Alihussein +//======================================================================================= +#include "NonReflectingOutflowWithRelaxationBCStrategy.h" + +#include "BoundaryConditions.h" +#include "D3Q27System.h" +#include "DistributionArray3D.h" + +NonReflectingOutflowWithRelaxationBCStrategy::NonReflectingOutflowWithRelaxationBCStrategy() +{ + BCStrategy::type = BCStrategy::NonReflectingOutflowWithRelaxationBCStrategy; + BCStrategy::preCollision = true; +} +////////////////////////////////////////////////////////////////////////// +NonReflectingOutflowWithRelaxationBCStrategy::~NonReflectingOutflowWithRelaxationBCStrategy() = default; +////////////////////////////////////////////////////////////////////////// +SPtr<BCStrategy> NonReflectingOutflowWithRelaxationBCStrategy::clone() +{ + SPtr<BCStrategy> bc(new NonReflectingOutflowWithRelaxationBCStrategy()); + return bc; +} +////////////////////////////////////////////////////////////////////////// +void NonReflectingOutflowWithRelaxationBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) +{ + this->distributions = distributions; +} +////////////////////////////////////////////////////////////////////////// +void NonReflectingOutflowWithRelaxationBCStrategy::applyBC() +{ + using namespace vf::lbm::dir; + + using namespace D3Q27System; + // using namespace UbMath; + using namespace vf::basics::constant; + + LBMReal f[ENDF + 1]; + LBMReal ftemp[ENDF + 1]; + + int nx1 = x1; + int nx2 = x2; + int nx3 = x3; + int direction = -1; + + // flag points in direction of fluid + if (bcPtr->hasDensityBoundaryFlag(dP00)) { + nx1 += 1; + direction = dP00; + } else if (bcPtr->hasDensityBoundaryFlag(dM00)) { + nx1 -= 1; + direction = dM00; + } else if (bcPtr->hasDensityBoundaryFlag(d0P0)) { + nx2 += 1; + direction = d0P0; + } else if (bcPtr->hasDensityBoundaryFlag(d0M0)) { + nx2 -= 1; + direction = d0M0; + } else if (bcPtr->hasDensityBoundaryFlag(d00P)) { + nx3 += 1; + direction = d00P; + } else if (bcPtr->hasDensityBoundaryFlag(d00M)) { + nx3 -= 1; + direction = d00M; + } else + UB_THROW(UbException(UB_EXARGS, "Danger...no orthogonal BC-Flag on density boundary...")); + + distributions->getPreCollisionDistribution(f, x1, x2, x3); + distributions->getPreCollisionDistribution(ftemp, nx1, nx2, nx3); + + LBMReal rho, vx1, vx2, vx3; + calcMacrosFct(f, rho, vx1, vx2, vx3); + LBMReal delf = rho* c1o100; + switch (direction) { + case dP00: + f[dP00] = ftemp[dP00] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP00] - delf* WEIGTH[dP00]; + f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPP0]- delf* WEIGTH[dPP0]; + f[dPM0] = ftemp[dPM0] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPM0]- delf* WEIGTH[dPM0]; + f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0P]- delf* WEIGTH[dP0P]; + f[dP0M] = ftemp[dP0M] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dP0M]- delf* WEIGTH[dP0M]; + f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPP]- delf* WEIGTH[dPPP]; + f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMP]- delf* WEIGTH[dPMP]; + f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPPM]- delf* WEIGTH[dPPM]; + f[dPMM] = ftemp[dPMM] * (c1oSqrt3 + vx1) + (c1o1 - c1oSqrt3 - vx1) * f[dPMM]- delf* WEIGTH[dPMM]; + + distributions->setPreCollisionDistributionForDirection(f[dP00], x1 + DX1[dM00], x2 + DX2[dM00], x3 + DX3[dM00], dM00); + distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); + distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); + distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); + distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); + distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + break; + case dM00: + f[dM00] = ftemp[dM00] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM00]- delf* WEIGTH[dM00]; + f[dMP0] = ftemp[dMP0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMP0]- delf* WEIGTH[dMP0]; + f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMM0]- delf* WEIGTH[dMM0]; + f[dM0P] = ftemp[dM0P] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0P]- delf* WEIGTH[dM0P]; + f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dM0M]- delf* WEIGTH[dM0M]; + f[dMPP] = ftemp[dMPP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPP]- delf* WEIGTH[dMPP]; + f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMP]- delf* WEIGTH[dMMP]; + f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMPM]- delf* WEIGTH[dMPM]; + f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx1) + (c1o1 - c1oSqrt3 + vx1) * f[dMMM]- delf* WEIGTH[dMMM]; + + distributions->setPreCollisionDistributionForDirection(f[dM00], x1 + DX1[dP00], x2 + DX2[dP00], x3 + DX3[dP00], dP00); + distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); + distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); + distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); + distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); + distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); + break; + case d0P0: + f[d0P0] = ftemp[d0P0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0P0]- delf* WEIGTH[d0P0]; + f[dPP0] = ftemp[dPP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPP0]- delf* WEIGTH[dPP0]; + f[dMP0] = ftemp[dMP0] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMP0]- delf* WEIGTH[dMP0]; + f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PP]- delf* WEIGTH[d0PP]; + f[d0PM] = ftemp[d0PM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[d0PM]- delf* WEIGTH[d0PM]; + f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPP]- delf* WEIGTH[dPPP]; + f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPP]- delf* WEIGTH[dMPP]; + f[dPPM] = ftemp[dPPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dPPM]- delf* WEIGTH[dPPM]; + f[dMPM] = ftemp[dMPM] * (c1oSqrt3 + vx2) + (c1o1 - c1oSqrt3 - vx2) * f[dMPM]- delf* WEIGTH[dMPM]; + + distributions->setPreCollisionDistributionForDirection(f[d0P0], x1 + DX1[d0M0], x2 + DX2[d0M0], x3 + DX3[d0M0], d0M0); + distributions->setPreCollisionDistributionForDirection(f[dPP0], x1 + DX1[dMM0], x2 + DX2[dMM0], x3 + DX3[dMM0], dMM0); + distributions->setPreCollisionDistributionForDirection(f[dMP0], x1 + DX1[dPM0], x2 + DX2[dPM0], x3 + DX3[dPM0], dPM0); + distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); + distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); + distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + break; + case d0M0: + f[d0M0] = ftemp[d0M0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0M0]- delf* WEIGTH[d0M0]; + f[dPM0] = ftemp[dPM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPM0]- delf* WEIGTH[dPM0]; + f[dMM0] = ftemp[dMM0] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMM0]- delf* WEIGTH[dMM0]; + f[d0MP] = ftemp[d0MP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MP]- delf* WEIGTH[d0MP]; + f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[d0MM]- delf* WEIGTH[d0MM]; + f[dPMP] = ftemp[dPMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMP]- delf* WEIGTH[dPMP]; + f[dMMP] = ftemp[dMMP] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMP]- delf* WEIGTH[dMMP]; + f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dPMM]- delf* WEIGTH[dPMM]; + f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx2) + (c1o1 - c1oSqrt3 + vx2) * f[dMMM]- delf* WEIGTH[dMMM]; + + distributions->setPreCollisionDistributionForDirection(f[d0M0], x1 + DX1[d0P0], x2 + DX2[d0P0], x3 + DX3[d0P0], d0P0); + distributions->setPreCollisionDistributionForDirection(f[dPM0], x1 + DX1[dMP0], x2 + DX2[dMP0], x3 + DX3[dMP0], dMP0); + distributions->setPreCollisionDistributionForDirection(f[dMM0], x1 + DX1[dPP0], x2 + DX2[dPP0], x3 + DX3[dPP0], dPP0); + distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); + distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); + distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); + break; + case d00P: + f[d00P] = ftemp[d00P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d00P]- delf* WEIGTH[d00P]; + f[dP0P] = ftemp[dP0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dP0P]- delf* WEIGTH[dP0P]; + f[dM0P] = ftemp[dM0P] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dM0P]- delf* WEIGTH[dM0P]; + f[d0PP] = ftemp[d0PP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0PP]- delf* WEIGTH[d0PP]; + f[d0MP] = ftemp[d0MP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[d0MP]- delf* WEIGTH[d0MP]; + f[dPPP] = ftemp[dPPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPPP]- delf* WEIGTH[dPPP]; + f[dMPP] = ftemp[dMPP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMPP]- delf* WEIGTH[dMPP]; + f[dPMP] = ftemp[dPMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dPMP]- delf* WEIGTH[dPMP]; + f[dMMP] = ftemp[dMMP] * (c1oSqrt3 + vx3) + (c1o1 - c1oSqrt3 - vx3) * f[dMMP]- delf* WEIGTH[dMMP]; + + distributions->setPreCollisionDistributionForDirection(f[d00P], x1 + DX1[d00M], x2 + DX2[d00M], x3 + DX3[d00M], d00M); + distributions->setPreCollisionDistributionForDirection(f[dP0P], x1 + DX1[dM0M], x2 + DX2[dM0M], x3 + DX3[dM0M], dM0M); + distributions->setPreCollisionDistributionForDirection(f[dM0P], x1 + DX1[dP0M], x2 + DX2[dP0M], x3 + DX3[dP0M], dP0M); + distributions->setPreCollisionDistributionForDirection(f[d0PP], x1 + DX1[d0MM], x2 + DX2[d0MM], x3 + DX3[d0MM], d0MM); + distributions->setPreCollisionDistributionForDirection(f[d0MP], x1 + DX1[d0PM], x2 + DX2[d0PM], x3 + DX3[d0PM], d0PM); + distributions->setPreCollisionDistributionForDirection(f[dPPP], x1 + DX1[dMMM], x2 + DX2[dMMM], x3 + DX3[dMMM], dMMM); + distributions->setPreCollisionDistributionForDirection(f[dMPP], x1 + DX1[dPMM], x2 + DX2[dPMM], x3 + DX3[dPMM], dPMM); + distributions->setPreCollisionDistributionForDirection(f[dPMP], x1 + DX1[dMPM], x2 + DX2[dMPM], x3 + DX3[dMPM], dMPM); + distributions->setPreCollisionDistributionForDirection(f[dMMP], x1 + DX1[dPPM], x2 + DX2[dPPM], x3 + DX3[dPPM], dPPM); + break; + case d00M: + f[d00M] = ftemp[d00M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d00M]- delf* WEIGTH[d00M]; + f[dP0M] = ftemp[dP0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dP0M]- delf* WEIGTH[dP0M]; + f[dM0M] = ftemp[dM0M] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dM0M]- delf* WEIGTH[dM0M]; + f[d0PM] = ftemp[d0PM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0PM]- delf* WEIGTH[d0PM]; + f[d0MM] = ftemp[d0MM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[d0MM]- delf* WEIGTH[d0MM]; + f[dPPM] = ftemp[dPPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPPM]- delf* WEIGTH[dPPM]; + f[dMPM] = ftemp[dMPM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMPM]- delf* WEIGTH[dMPM]; + f[dPMM] = ftemp[dPMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dPMM]- delf* WEIGTH[dPMM]; + f[dMMM] = ftemp[dMMM] * (c1oSqrt3 - vx3) + (c1o1 - c1oSqrt3 + vx3) * f[dMMM]- delf* WEIGTH[dMMM]; + + distributions->setPreCollisionDistributionForDirection(f[d00M], x1 + DX1[d00P], x2 + DX2[d00P], x3 + DX3[d00P], d00P); + distributions->setPreCollisionDistributionForDirection(f[dP0M], x1 + DX1[dM0P], x2 + DX2[dM0P], x3 + DX3[dM0P], dM0P); + distributions->setPreCollisionDistributionForDirection(f[dM0M], x1 + DX1[dP0P], x2 + DX2[dP0P], x3 + DX3[dP0P], dP0P); + distributions->setPreCollisionDistributionForDirection(f[d0PM], x1 + DX1[d0MP], x2 + DX2[d0MP], x3 + DX3[d0MP], d0MP); + distributions->setPreCollisionDistributionForDirection(f[d0MM], x1 + DX1[d0PP], x2 + DX2[d0PP], x3 + DX3[d0PP], d0PP); + distributions->setPreCollisionDistributionForDirection(f[dPPM], x1 + DX1[dMMP], x2 + DX2[dMMP], x3 + DX3[dMMP], dMMP); + distributions->setPreCollisionDistributionForDirection(f[dMPM], x1 + DX1[dPMP], x2 + DX2[dPMP], x3 + DX3[dPMP], dPMP); + distributions->setPreCollisionDistributionForDirection(f[dPMM], x1 + DX1[dMPP], x2 + DX2[dMPP], x3 + DX3[dMPP], dMPP); + distributions->setPreCollisionDistributionForDirection(f[dMMM], x1 + DX1[dPPP], x2 + DX2[dPPP], x3 + DX3[dPPP], dPPP); + break; + default: + UB_THROW( + UbException(UB_EXARGS, "It isn't implemented non reflecting density boundary for this direction!")); + } +} diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.h b/src/cpu/core/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.h rename to src/cpu/core/BoundaryConditions/NonReflectingOutflowWithRelaxationBCStrategy.h diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleSlipBCStrategy.cpp b/src/cpu/core/BoundaryConditions/SimpleSlipBCStrategy.cpp similarity index 61% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleSlipBCStrategy.cpp rename to src/cpu/core/BoundaryConditions/SimpleSlipBCStrategy.cpp index c06725760720a6d1c0ac4d238e9171ca146031bc..0c358d8e0281b3e29df49c51ea343fa61d157123 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleSlipBCStrategy.cpp +++ b/src/cpu/core/BoundaryConditions/SimpleSlipBCStrategy.cpp @@ -61,7 +61,7 @@ void SimpleSlipBCStrategy::applyBC() real f[D3Q27System::ENDF+1]; real feq[D3Q27System::ENDF+1]; - distributions->getDistributionInv(f, x1, x2, x3); + distributions->getPostCollisionDistribution(f, x1, x2, x3); real vx1, vx2, vx3, drho, rho; calcMacrosFct(f, drho, vx1, vx2, vx3); calcFeqFct(feq, drho, vx1, vx2, vx3); @@ -84,36 +84,36 @@ void SimpleSlipBCStrategy::applyBC() real velocity = vf::basics::constant::c0o1; switch (invDir) { - case DIR_P00: velocity = (vf::basics::constant::c4o9*(+vx1)); break; //(2/cs^2)(=6)*rho_0(=1 bei imkompr)*wi*u*ei mit cs=1/sqrt(3) - case DIR_M00: velocity = (vf::basics::constant::c4o9*(-vx1)); break; //z.B. aus paper manfred MRT LB models in three dimensions (2002) - case DIR_0P0: velocity = (vf::basics::constant::c4o9*(+vx2)); break; - case DIR_0M0: velocity = (vf::basics::constant::c4o9*(-vx2)); break; - case DIR_00P: velocity = (vf::basics::constant::c4o9*(+vx3)); break; - case DIR_00M: velocity = (vf::basics::constant::c4o9*(-vx3)); break; - case DIR_PP0: velocity = (vf::basics::constant::c1o9*(+vx1+vx2)); break; - case DIR_MM0: velocity = (vf::basics::constant::c1o9*(-vx1-vx2)); break; - case DIR_PM0: velocity = (vf::basics::constant::c1o9*(+vx1-vx2)); break; - case DIR_MP0: velocity = (vf::basics::constant::c1o9*(-vx1+vx2)); break; - case DIR_P0P: velocity = (vf::basics::constant::c1o9*(+vx1+vx3)); break; - case DIR_M0M: velocity = (vf::basics::constant::c1o9*(-vx1-vx3)); break; - case DIR_P0M: velocity = (vf::basics::constant::c1o9*(+vx1-vx3)); break; - case DIR_M0P: velocity = (vf::basics::constant::c1o9*(-vx1+vx3)); break; - case DIR_0PP: velocity = (vf::basics::constant::c1o9*(+vx2+vx3)); break; - case DIR_0MM: velocity = (vf::basics::constant::c1o9*(-vx2-vx3)); break; - case DIR_0PM: velocity = (vf::basics::constant::c1o9*(+vx2-vx3)); break; - case DIR_0MP: velocity = (vf::basics::constant::c1o9*(-vx2+vx3)); break; - case DIR_PPP: velocity = (vf::basics::constant::c1o36*(+vx1+vx2+vx3)); break; - case DIR_MMM: velocity = (vf::basics::constant::c1o36*(-vx1-vx2-vx3)); break; - case DIR_PPM: velocity = (vf::basics::constant::c1o36*(+vx1+vx2-vx3)); break; - case DIR_MMP: velocity = (vf::basics::constant::c1o36*(-vx1-vx2+vx3)); break; - case DIR_PMP: velocity = (vf::basics::constant::c1o36*(+vx1-vx2+vx3)); break; - case DIR_MPM: velocity = (vf::basics::constant::c1o36*(-vx1+vx2-vx3)); break; - case DIR_PMM: velocity = (vf::basics::constant::c1o36*(+vx1-vx2-vx3)); break; - case DIR_MPP: velocity = (vf::basics::constant::c1o36*(-vx1+vx2+vx3)); break; + case dP00: velocity = (vf::basics::constant::c4o9*(+vx1)); break; //(2/cs^2)(=6)*rho_0(=1 bei imkompr)*wi*u*ei mit cs=1/sqrt(3) + case dM00: velocity = (vf::basics::constant::c4o9*(-vx1)); break; //z.B. aus paper manfred MRT LB models in three dimensions (2002) + case d0P0: velocity = (vf::basics::constant::c4o9*(+vx2)); break; + case d0M0: velocity = (vf::basics::constant::c4o9*(-vx2)); break; + case d00P: velocity = (vf::basics::constant::c4o9*(+vx3)); break; + case d00M: velocity = (vf::basics::constant::c4o9*(-vx3)); break; + case dPP0: velocity = (vf::basics::constant::c1o9*(+vx1+vx2)); break; + case dMM0: velocity = (vf::basics::constant::c1o9*(-vx1-vx2)); break; + case dPM0: velocity = (vf::basics::constant::c1o9*(+vx1-vx2)); break; + case dMP0: velocity = (vf::basics::constant::c1o9*(-vx1+vx2)); break; + case dP0P: velocity = (vf::basics::constant::c1o9*(+vx1+vx3)); break; + case dM0M: velocity = (vf::basics::constant::c1o9*(-vx1-vx3)); break; + case dP0M: velocity = (vf::basics::constant::c1o9*(+vx1-vx3)); break; + case dM0P: velocity = (vf::basics::constant::c1o9*(-vx1+vx3)); break; + case d0PP: velocity = (vf::basics::constant::c1o9*(+vx2+vx3)); break; + case d0MM: velocity = (vf::basics::constant::c1o9*(-vx2-vx3)); break; + case d0PM: velocity = (vf::basics::constant::c1o9*(+vx2-vx3)); break; + case d0MP: velocity = (vf::basics::constant::c1o9*(-vx2+vx3)); break; + case dPPP: velocity = (vf::basics::constant::c1o36*(+vx1+vx2+vx3)); break; + case dMMM: velocity = (vf::basics::constant::c1o36*(-vx1-vx2-vx3)); break; + case dPPM: velocity = (vf::basics::constant::c1o36*(+vx1+vx2-vx3)); break; + case dMMP: velocity = (vf::basics::constant::c1o36*(-vx1-vx2+vx3)); break; + case dPMP: velocity = (vf::basics::constant::c1o36*(+vx1-vx2+vx3)); break; + case dMPM: velocity = (vf::basics::constant::c1o36*(-vx1+vx2-vx3)); break; + case dPMM: velocity = (vf::basics::constant::c1o36*(+vx1-vx2-vx3)); break; + case dMPP: velocity = (vf::basics::constant::c1o36*(-vx1+vx2+vx3)); break; default: throw UbException(UB_EXARGS, "unknown error"); } real fReturn = f[invDir] - velocity * rho; - distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); } } } \ No newline at end of file diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleSlipBCStrategy.h b/src/cpu/core/BoundaryConditions/SimpleSlipBCStrategy.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleSlipBCStrategy.h rename to src/cpu/core/BoundaryConditions/SimpleSlipBCStrategy.h diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleVelocityBCStrategy.cpp b/src/cpu/core/BoundaryConditions/SimpleVelocityBCStrategy.cpp similarity index 93% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleVelocityBCStrategy.cpp rename to src/cpu/core/BoundaryConditions/SimpleVelocityBCStrategy.cpp index b37d04922d4df90674f9d6861cf1bfdf0496f9df..6277e4183df42eb4a73936d60079efe10318cd1f 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleVelocityBCStrategy.cpp +++ b/src/cpu/core/BoundaryConditions/SimpleVelocityBCStrategy.cpp @@ -59,7 +59,7 @@ void SimpleVelocityBCStrategy::applyBC() { real f[D3Q27System::ENDF+1]; real feq[D3Q27System::ENDF+1]; - distributions->getDistributionInv(f, x1, x2, x3); + distributions->getPostCollisionDistribution(f, x1, x2, x3); real vx1, vx2, vx3, drho; calcMacrosFct(f, drho, vx1, vx2, vx3); calcFeqFct(feq, drho, vx1, vx2, vx3); @@ -71,7 +71,7 @@ void SimpleVelocityBCStrategy::applyBC() const int invDir = D3Q27System::INVDIR[fdir]; real velocity = bcPtr->getBoundaryVelocity(invDir); real fReturn = f[invDir] - velocity; - distributions->setDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); } } diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleVelocityBCStrategy.h b/src/cpu/core/BoundaryConditions/SimpleVelocityBCStrategy.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/SimpleVelocityBCStrategy.h rename to src/cpu/core/BoundaryConditions/SimpleVelocityBCStrategy.h diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBC.cpp b/src/cpu/core/BoundaryConditions/SlipBC.cpp similarity index 93% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBC.cpp rename to src/cpu/core/BoundaryConditions/SlipBC.cpp index 35b9e22ec44bbbda79f9c6d6b15ce84ca5107e16..50b0cbc390cd99b77faa435cba30d8afde88d22c 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBC.cpp +++ b/src/cpu/core/BoundaryConditions/SlipBC.cpp @@ -58,17 +58,17 @@ void SlipBC::adaptBC(const D3Q27Interactor &interactor, SPtr<BoundaryConditions> if (!geo) throw UbException(UB_EXARGS, "derzeit nur fuer Cubes valide"); - if (bc->hasSlipBoundaryFlag(DIR_P00)) + if (bc->hasSlipBoundaryFlag(dP00)) bc->setNormalVector(vf::basics::constant::c1o1, vf::basics::constant::c0o1, vf::basics::constant::c0o1); - else if (bc->hasSlipBoundaryFlag(DIR_M00)) + else if (bc->hasSlipBoundaryFlag(dM00)) bc->setNormalVector(-vf::basics::constant::c1o1, vf::basics::constant::c0o1, vf::basics::constant::c0o1); - else if (bc->hasSlipBoundaryFlag(DIR_0P0)) + else if (bc->hasSlipBoundaryFlag(d0P0)) bc->setNormalVector(vf::basics::constant::c0o1, vf::basics::constant::c1o1, vf::basics::constant::c0o1); - else if (bc->hasSlipBoundaryFlag(DIR_0M0)) + else if (bc->hasSlipBoundaryFlag(d0M0)) bc->setNormalVector(vf::basics::constant::c0o1, -vf::basics::constant::c1o1, vf::basics::constant::c0o1); - else if (bc->hasSlipBoundaryFlag(DIR_00P)) + else if (bc->hasSlipBoundaryFlag(d00P)) bc->setNormalVector(vf::basics::constant::c0o1, vf::basics::constant::c0o1, vf::basics::constant::c1o1); - else if (bc->hasSlipBoundaryFlag(DIR_00M)) + else if (bc->hasSlipBoundaryFlag(d00M)) bc->setNormalVector(vf::basics::constant::c0o1, vf::basics::constant::c0o1, -vf::basics::constant::c1o1); bc->setBCStrategyKey(bcStrategyKey); diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBC.h b/src/cpu/core/BoundaryConditions/SlipBC.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBC.h rename to src/cpu/core/BoundaryConditions/SlipBC.h diff --git a/src/cpu/core/BoundaryConditions/SlipBCStrategy.cpp b/src/cpu/core/BoundaryConditions/SlipBCStrategy.cpp new file mode 100644 index 0000000000000000000000000000000000000000..5245de010674522f8e7a95b2c5f39b0036dea7a6 --- /dev/null +++ b/src/cpu/core/BoundaryConditions/SlipBCStrategy.cpp @@ -0,0 +1,84 @@ +#include "SlipBCStrategy.h" +#include "BoundaryConditions.h" +#include "DistributionArray3D.h" + +SlipBCStrategy::SlipBCStrategy() +{ + BCStrategy::type = BCStrategy::SlipBCStrategy; + BCStrategy::preCollision = false; +} +////////////////////////////////////////////////////////////////////////// +SlipBCStrategy::~SlipBCStrategy() = default; +////////////////////////////////////////////////////////////////////////// +SPtr<BCStrategy> SlipBCStrategy::clone() +{ + SPtr<BCStrategy> bc(new SlipBCStrategy()); + return bc; +} +////////////////////////////////////////////////////////////////////////// +void SlipBCStrategy::addDistributions(SPtr<DistributionArray3D> distributions) { this->distributions = distributions; } +////////////////////////////////////////////////////////////////////////// +void SlipBCStrategy::applyBC() +{ + using namespace vf::lbm::dir; + + real f[D3Q27System::ENDF + 1]; + real feq[D3Q27System::ENDF + 1]; + distributions->getPostCollisionDistribution(f, x1, x2, x3); + real rho, vx1, vx2, vx3, drho; + calcMacrosFct(f, drho, vx1, vx2, vx3); + calcFeqFct(feq, drho, vx1, vx2, vx3); + + UbTupleFloat3 normale = bcPtr->getNormalVector(); + real amp = vx1 * val<1>(normale) + vx2 * val<2>(normale) + vx3 * val<3>(normale); + + vx1 = vx1 - amp * val<1>(normale); // normale zeigt von struktur weg! + vx2 = vx2 - amp * val<2>(normale); // normale zeigt von struktur weg! + vx3 = vx3 - amp * val<3>(normale); // normale zeigt von struktur weg! + + rho = vf::basics::constant::c1o1 + drho * compressibleFactor; + + for (int fdir = D3Q27System::FSTARTDIR; fdir<=D3Q27System::FENDDIR; fdir++) + { + if (bcPtr->hasSlipBoundaryFlag(fdir)) + { + //quadratic bounce back + const int invDir = D3Q27System::INVDIR[fdir]; + real q = bcPtr->getQ(invDir);// m+m q=0 stabiler + //vx3=0; + real velocity = vf::basics::constant::c0o1; + switch (invDir) + { + case dP00: velocity = (vf::basics::constant::c4o9*(+vx1)); break; //(2/cs^2)(=6)*rho_0(=1 bei imkompr)*wi*u*ei mit cs=1/sqrt(3) + case dM00: velocity = (vf::basics::constant::c4o9*(-vx1)); break; //z.B. aus paper manfred MRT LB models in three dimensions (2002) + case d0P0: velocity = (vf::basics::constant::c4o9*(+vx2)); break; + case d0M0: velocity = (vf::basics::constant::c4o9*(-vx2)); break; + case d00P: velocity = (vf::basics::constant::c4o9*(+vx3)); break; + case d00M: velocity = (vf::basics::constant::c4o9*(-vx3)); break; + case dPP0: velocity = (vf::basics::constant::c1o9*(+vx1+vx2)); break; + case dMM0: velocity = (vf::basics::constant::c1o9*(-vx1-vx2)); break; + case dPM0: velocity = (vf::basics::constant::c1o9*(+vx1-vx2)); break; + case dMP0: velocity = (vf::basics::constant::c1o9*(-vx1+vx2)); break; + case dP0P: velocity = (vf::basics::constant::c1o9*(+vx1+vx3)); break; + case dM0M: velocity = (vf::basics::constant::c1o9*(-vx1-vx3)); break; + case dP0M: velocity = (vf::basics::constant::c1o9*(+vx1-vx3)); break; + case dM0P: velocity = (vf::basics::constant::c1o9*(-vx1+vx3)); break; + case d0PP: velocity = (vf::basics::constant::c1o9*(+vx2+vx3)); break; + case d0MM: velocity = (vf::basics::constant::c1o9*(-vx2-vx3)); break; + case d0PM: velocity = (vf::basics::constant::c1o9*(+vx2-vx3)); break; + case d0MP: velocity = (vf::basics::constant::c1o9*(-vx2+vx3)); break; + case dPPP: velocity = (vf::basics::constant::c1o36*(+vx1+vx2+vx3)); break; + case dMMM: velocity = (vf::basics::constant::c1o36*(-vx1-vx2-vx3)); break; + case dPPM: velocity = (vf::basics::constant::c1o36*(+vx1+vx2-vx3)); break; + case dMMP: velocity = (vf::basics::constant::c1o36*(-vx1-vx2+vx3)); break; + case dPMP: velocity = (vf::basics::constant::c1o36*(+vx1-vx2+vx3)); break; + case dMPM: velocity = (vf::basics::constant::c1o36*(-vx1+vx2-vx3)); break; + case dPMM: velocity = (vf::basics::constant::c1o36*(+vx1-vx2-vx3)); break; + case dMPP: velocity = (vf::basics::constant::c1o36*(-vx1+vx2+vx3)); break; + default: throw UbException(UB_EXARGS, "unknown error"); + } + real fReturn = ((vf::basics::constant::c1o1-q)/(vf::basics::constant::c1o1+q))*((f[invDir]-feq[invDir])/(vf::basics::constant::c1o1-collFactor)+feq[invDir])+((q*(f[invDir]+f[fdir])-velocity*rho)/(vf::basics::constant::c1o1+q)); + distributions->setPostCollisionDistributionForDirection(fReturn, x1+D3Q27System::DX1[invDir], x2+D3Q27System::DX2[invDir], x3+D3Q27System::DX3[invDir], fdir); + } + } +} \ No newline at end of file diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCStrategy.h b/src/cpu/core/BoundaryConditions/SlipBCStrategy.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/SlipBCStrategy.h rename to src/cpu/core/BoundaryConditions/SlipBCStrategy.h diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallBCSet.cpp b/src/cpu/core/BoundaryConditions/ThinWallBCSet.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallBCSet.cpp rename to src/cpu/core/BoundaryConditions/ThinWallBCSet.cpp diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallBCSet.h b/src/cpu/core/BoundaryConditions/ThinWallBCSet.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallBCSet.h rename to src/cpu/core/BoundaryConditions/ThinWallBCSet.h diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallNoSlipBCStrategy.cpp b/src/cpu/core/BoundaryConditions/ThinWallNoSlipBCStrategy.cpp similarity index 94% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallNoSlipBCStrategy.cpp rename to src/cpu/core/BoundaryConditions/ThinWallNoSlipBCStrategy.cpp index 01f0d6a4c2fb1fbf099cd0a3a8372fcd4eb5f16c..842026ca4ef15b432b9e74fcbfed9246843513ce 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallNoSlipBCStrategy.cpp +++ b/src/cpu/core/BoundaryConditions/ThinWallNoSlipBCStrategy.cpp @@ -53,7 +53,7 @@ void ThinWallNoSlipBCStrategy::applyBC() { real f[D3Q27System::ENDF + 1]; real feq[D3Q27System::ENDF + 1]; - distributions->getDistributionInv(f, x1, x2, x3); + distributions->getPostCollisionDistribution(f, x1, x2, x3); real rho, vx1, vx2, vx3; calcMacrosFct(f, rho, vx1, vx2, vx3); calcFeqFct(feq, rho, vx1, vx2, vx3); @@ -68,7 +68,7 @@ void ThinWallNoSlipBCStrategy::applyBC() fReturn = ((vf::basics::constant::c1o1 - q) / (vf::basics::constant::c1o1 + q)) * vf::basics::constant::c1o2 * (f[invDir] - f[fdir] + (f[invDir] + f[fdir] - collFactor * (feq[fdir] + feq[invDir])) / (vf::basics::constant::c1o1 - collFactor)); - // distributionsTemp->setDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + + // distributionsTemp->setPostCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + // D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); fTemp[fdir] = fReturn; } else { @@ -76,7 +76,7 @@ void ThinWallNoSlipBCStrategy::applyBC() // fReturn = distributionsTemp->getDistributionInvForDirection(x1 + D3Q27System::DX1[invDir], x2 + // D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); fReturn = fTemp[fdir]; - distributions->setDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], + distributions->setPostCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); } diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallNoSlipBCStrategy.h b/src/cpu/core/BoundaryConditions/ThinWallNoSlipBCStrategy.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/ThinWallNoSlipBCStrategy.h rename to src/cpu/core/BoundaryConditions/ThinWallNoSlipBCStrategy.h diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBC.cpp b/src/cpu/core/BoundaryConditions/VelocityBC.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBC.cpp rename to src/cpu/core/BoundaryConditions/VelocityBC.cpp diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBC.h b/src/cpu/core/BoundaryConditions/VelocityBC.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBC.h rename to src/cpu/core/BoundaryConditions/VelocityBC.h diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCStrategy.cpp b/src/cpu/core/BoundaryConditions/VelocityBCStrategy.cpp similarity index 95% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCStrategy.cpp rename to src/cpu/core/BoundaryConditions/VelocityBCStrategy.cpp index 1b84b2de61ab3c5cb5e7927ff906cb26c2470753..0479b198fcdff041a7fe80d302a8cc079f230aa4 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCStrategy.cpp +++ b/src/cpu/core/BoundaryConditions/VelocityBCStrategy.cpp @@ -56,7 +56,7 @@ void VelocityBCStrategy::applyBC() { real f[D3Q27System::ENDF + 1]; real feq[D3Q27System::ENDF + 1]; - distributions->getDistributionInv(f, x1, x2, x3); + distributions->getPostCollisionDistribution(f, x1, x2, x3); real rho, vx1, vx2, vx3, drho; calcMacrosFct(f, drho, vx1, vx2, vx3); calcFeqFct(feq, drho, vx1, vx2, vx3); @@ -73,7 +73,7 @@ void VelocityBCStrategy::applyBC() real velocity = bcPtr->getBoundaryVelocity(invDir); real fReturn = ((vf::basics::constant::c1o1 - q) / (vf::basics::constant::c1o1 + q)) * ((f[invDir] - feq[invDir]) / (vf::basics::constant::c1o1 - collFactor) + feq[invDir]) + ((q * (f[invDir] + f[fdir]) - velocity * rho) / (vf::basics::constant::c1o1 + q)); - distributions->setDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], + distributions->setPostCollisionDistributionForDirection(fReturn, x1 + D3Q27System::DX1[invDir], x2 + D3Q27System::DX2[invDir], x3 + D3Q27System::DX3[invDir], fdir); } diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCStrategy.h b/src/cpu/core/BoundaryConditions/VelocityBCStrategy.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityBCStrategy.h rename to src/cpu/core/BoundaryConditions/VelocityBCStrategy.h diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityWithDensityBCStrategy.cpp b/src/cpu/core/BoundaryConditions/VelocityWithDensityBCStrategy.cpp similarity index 96% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityWithDensityBCStrategy.cpp rename to src/cpu/core/BoundaryConditions/VelocityWithDensityBCStrategy.cpp index b6a2548ae4422acc87e95408c383e00c4b4fc847..a89df720ce8943356c042d77107f9ef4592bfb0b 100644 --- a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityWithDensityBCStrategy.cpp +++ b/src/cpu/core/BoundaryConditions/VelocityWithDensityBCStrategy.cpp @@ -59,7 +59,7 @@ void VelocityWithDensityBCStrategy::applyBC() //velocity bc for non reflecting pressure bc real f[D3Q27System::ENDF+1]; //real feq[D3Q27System::ENDF+1]; - distributions->getDistributionInv(f, x1, x2, x3); + distributions->getPostCollisionDistribution(f, x1, x2, x3); real rho, vx1, vx2, vx3, drho; calcMacrosFct(f, drho, vx1, vx2, vx3); //calcFeqFct(feq, drho, vx1, vx2, vx3); @@ -95,7 +95,7 @@ void VelocityWithDensityBCStrategy::applyBC() // q))-drho*D3Q27System::WEIGTH[invDir]; real fReturn = (f[fdir] + f[invDir] - velocity * rho) / vf::basics::constant::c2o1 - drho * D3Q27System::WEIGTH[invDir]; - distributions->setDistributionForDirection(fReturn, nX1, nX2, nX3, invDir); + distributions->setPostCollisionDistributionForDirection(fReturn, nX1, nX2, nX3, invDir); } } } diff --git a/src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityWithDensityBCStrategy.h b/src/cpu/core/BoundaryConditions/VelocityWithDensityBCStrategy.h similarity index 100% rename from src/cpu/VirtualFluidsCore/BoundaryConditions/VelocityWithDensityBCStrategy.h rename to src/cpu/core/BoundaryConditions/VelocityWithDensityBCStrategy.h diff --git a/src/cpu/VirtualFluidsCore/CMakeLists.txt b/src/cpu/core/CMakeLists.txt similarity index 90% rename from src/cpu/VirtualFluidsCore/CMakeLists.txt rename to src/cpu/core/CMakeLists.txt index 3e767e49c6cc0d35c2c8706a20b77f17a625b9a4..ee8f4ed209673acfc4bbfbd8bff39379e28d5255 100644 --- a/src/cpu/VirtualFluidsCore/CMakeLists.txt +++ b/src/cpu/core/CMakeLists.txt @@ -20,11 +20,11 @@ if(BUILD_USE_OPENMP) list(APPEND VF_LIBRARIES OpenMP::OpenMP_CXX) endif() -vf_add_library(BUILDTYPE static PUBLIC_LINK basics muparser ${VF_LIBRARIES} parallel PRIVATE_LINK lbm logger) +set(library_name cpu_core) -vf_add_tests() +vf_add_library(NAME ${library_name} BUILDTYPE static PUBLIC_LINK basics muparser ${VF_LIBRARIES} parallel PRIVATE_LINK lbm logger) -vf_get_library_name(library_name) +vf_add_tests(NAME ${library_name}) target_include_directories(${library_name} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/BoundaryConditions) target_include_directories(${library_name} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/Connectors) diff --git a/src/cpu/VirtualFluidsCore/Connectors/Block3DConnector.h b/src/cpu/core/Connectors/Block3DConnector.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/Block3DConnector.h rename to src/cpu/core/Connectors/Block3DConnector.h diff --git a/src/cpu/VirtualFluidsCore/Connectors/CoarseToFineVectorConnector.cpp b/src/cpu/core/Connectors/CoarseToFineVectorConnector.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/CoarseToFineVectorConnector.cpp rename to src/cpu/core/Connectors/CoarseToFineVectorConnector.cpp diff --git a/src/cpu/VirtualFluidsCore/Connectors/CoarseToFineVectorConnector.h b/src/cpu/core/Connectors/CoarseToFineVectorConnector.h similarity index 90% rename from src/cpu/VirtualFluidsCore/Connectors/CoarseToFineVectorConnector.h rename to src/cpu/core/Connectors/CoarseToFineVectorConnector.h index 331e923ea6b94841c2d0c293b9f5680bab4cb400..9a0612f2afa4d226341ea4ab8132566203454226 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/CoarseToFineVectorConnector.h +++ b/src/cpu/core/Connectors/CoarseToFineVectorConnector.h @@ -159,15 +159,15 @@ CoarseToFineVectorConnector<VectorTransmitter>::CoarseToFineVectorConnector( { using namespace vf::lbm::dir; - if (!(sendDir == DIR_P00 || sendDir == DIR_M00 || sendDir == DIR_0P0 || - sendDir == DIR_0M0 || sendDir == DIR_00P || sendDir == DIR_00M || - sendDir == DIR_PP0 || sendDir == DIR_MM0 || sendDir == DIR_PM0 || - sendDir == DIR_MP0 || sendDir == DIR_P0P || sendDir == DIR_M0M || - sendDir == DIR_P0M || sendDir == DIR_M0P || sendDir == DIR_0PP || - sendDir == DIR_0MM || sendDir == DIR_0PM || sendDir == DIR_0MP || - sendDir == DIR_PPP || sendDir == DIR_MPP || sendDir == DIR_PMP || - sendDir == DIR_MMP || sendDir == DIR_PPM || sendDir == DIR_MPM || - sendDir == DIR_PMM || sendDir == DIR_MMM)) { + if (!(sendDir == dP00 || sendDir == dM00 || sendDir == d0P0 || + sendDir == d0M0 || sendDir == d00P || sendDir == d00M || + sendDir == dPP0 || sendDir == dMM0 || sendDir == dPM0 || + sendDir == dMP0 || sendDir == dP0P || sendDir == dM0M || + sendDir == dP0M || sendDir == dM0P || sendDir == d0PP || + sendDir == d0MM || sendDir == d0PM || sendDir == d0MP || + sendDir == dPPP || sendDir == dMPP || sendDir == dPMP || + sendDir == dMMP || sendDir == dPPM || sendDir == dMPM || + sendDir == dPMM || sendDir == dMMM)) { throw UbException(UB_EXARGS, "invalid constructor for this direction"); } } @@ -314,44 +314,44 @@ void CoarseToFineVectorConnector<VectorTransmitter>::init() int iCellSize = 8; // size of interpolation cell switch (this->sendDir) { - case DIR_P00: - case DIR_M00: + case dP00: + case dM00: sendSize = bMaxX2 * bMaxX3 * sendDataPerNode * iCellSize; break; - case DIR_0P0: - case DIR_0M0: + case d0P0: + case d0M0: sendSize = bMaxX1 * bMaxX3 * sendDataPerNode * iCellSize; break; - case DIR_00P: - case DIR_00M: + case d00P: + case d00M: sendSize = bMaxX1 * bMaxX2 * sendDataPerNode * iCellSize; break; - case DIR_PP0: - case DIR_MM0: - case DIR_PM0: - case DIR_MP0: + case dPP0: + case dMM0: + case dPM0: + case dMP0: sendSize = 2 * bMaxX3 * sendDataPerNode * iCellSize; break; - case DIR_P0P: - case DIR_M0M: - case DIR_P0M: - case DIR_M0P: + case dP0P: + case dM0M: + case dP0M: + case dM0P: sendSize = 2 * bMaxX2 * sendDataPerNode * iCellSize; break; - case DIR_0PP: - case DIR_0MM: - case DIR_0PM: - case DIR_0MP: + case d0PP: + case d0MM: + case d0PM: + case d0MP: sendSize = 2 * bMaxX1 * sendDataPerNode * iCellSize; break; - case DIR_PPP: - case DIR_MPP: - case DIR_PMP: - case DIR_MMP: - case DIR_PPM: - case DIR_MPM: - case DIR_PMM: - case DIR_MMM: + case dPPP: + case dMPP: + case dPMP: + case dMMP: + case dPPM: + case dMPM: + case dPMM: + case dMMM: sendSize = 6 * bMaxX1 * sendDataPerNode * iCellSize; break; default: @@ -413,7 +413,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() int lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3; switch (sendDir) { - case DIR_P00: + case dP00: lMinX1 = maxX1 - 3; lMaxX1 = lMinX1 + 1; @@ -433,7 +433,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() getLocalMinMax(minX3, maxX3, false, lMinX3, lMaxX3, false); fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd); break; - case DIR_M00: + case dM00: lMinX1 = 1; lMaxX1 = lMinX1 + 1; @@ -453,7 +453,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() getLocalMinMax(minX3, maxX3, false, lMinX3, lMaxX3, false); fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd); break; - case DIR_0P0: + case d0P0: lMinX2 = maxX2 - 3; lMaxX2 = lMinX2 + 1; @@ -473,7 +473,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() getLocalMinMax(minX3, maxX3, false, lMinX3, lMaxX3, false); fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd); break; - case DIR_0M0: + case d0M0: lMinX2 = 1; lMaxX2 = lMinX2 + 1; @@ -493,7 +493,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() getLocalMinMax(minX3, maxX3, false, lMinX3, lMaxX3, false); fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd); break; - case DIR_00P: + case d00P: lMinX3 = maxX3 - 3; lMaxX3 = lMinX3 + 1; @@ -513,7 +513,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() getLocalMinMax(minX2, maxX2, false, lMinX2, lMaxX2, false); fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd); break; - case DIR_00M: + case d00M: lMinX3 = 1; lMaxX3 = lMinX3 + 1; @@ -534,7 +534,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd); break; /// N-S-E-W - case DIR_PP0: + case dPP0: lMinX1 = maxX1 - 3; lMaxX1 = lMinX1 + 2; lMinX2 = maxX2 - 3; @@ -548,7 +548,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() break; - case DIR_MM0: + case dMM0: lMinX1 = 0; lMaxX1 = lMinX1 + 2; lMinX2 = 0; @@ -562,7 +562,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() break; - case DIR_PM0: + case dPM0: lMinX1 = maxX1 - 3; lMaxX1 = lMinX1 + 2; lMinX2 = 0; @@ -576,7 +576,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() break; - case DIR_MP0: + case dMP0: lMinX1 = 0; lMaxX1 = lMinX1 + 2; lMinX2 = maxX2 - 3; @@ -590,7 +590,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() break; /////T-B-E-W - case DIR_P0P: + case dP0P: lMinX1 = maxX1 - 3; lMaxX1 = lMinX1 + 2; lMinX3 = maxX3 - 3; @@ -604,7 +604,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() break; - case DIR_M0M: + case dM0M: lMinX1 = 0; lMaxX1 = lMinX1 + 2; lMinX3 = 0; @@ -618,7 +618,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() break; - case DIR_P0M: + case dP0M: lMinX1 = maxX1 - 3; lMaxX1 = lMinX1 + 2; lMinX3 = 0; @@ -632,7 +632,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() break; - case DIR_M0P: + case dM0P: lMinX1 = 0; lMaxX1 = lMinX1 + 2; lMinX3 = maxX3 - 3; @@ -647,7 +647,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() break; //// /////T-B-N-S - case DIR_0PP: + case d0PP: lMinX2 = maxX2 - 3; lMaxX2 = lMinX2 + 2; lMinX3 = maxX3 - 3; @@ -661,7 +661,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() break; - case DIR_0MM: + case d0MM: lMinX2 = 0; lMaxX2 = lMinX2 + 2; lMinX3 = 0; @@ -675,7 +675,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() break; - case DIR_0PM: + case d0PM: lMinX2 = maxX2 - 3; lMaxX2 = lMinX2 + 2; lMinX3 = 0; @@ -689,7 +689,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() break; - case DIR_0MP: + case d0MP: lMinX2 = 0; lMaxX2 = lMinX2 + 2; lMinX3 = maxX3 - 3; @@ -704,7 +704,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() break; // TNE - case DIR_PPP: + case dPPP: lMinX1 = maxX1 - 3; lMaxX1 = maxX1 - 1; lMinX2 = maxX2 - 3; @@ -715,7 +715,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv); break; // TNW - case DIR_MPP: + case dMPP: lMinX1 = 0; lMaxX1 = 2; lMinX2 = maxX2 - 3; @@ -726,7 +726,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv); break; // TSE - case DIR_PMP: + case dPMP: lMinX1 = maxX1 - 3; lMaxX1 = maxX1 - 1; lMinX2 = 0; @@ -737,7 +737,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv); break; // TSW - case DIR_MMP: + case dMMP: lMinX1 = 0; lMaxX1 = 2; lMinX2 = 0; @@ -748,7 +748,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv); break; // BNE - case DIR_PPM: + case dPPM: lMinX1 = maxX1 - 3; lMaxX1 = maxX1 - 1; lMinX2 = maxX2 - 3; @@ -759,7 +759,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv); break; // BNW - case DIR_MPM: + case dMPM: lMinX1 = 0; lMaxX1 = 2; lMinX2 = maxX2 - 3; @@ -770,7 +770,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv); break; // BSE - case DIR_PMM: + case dPMM: lMinX1 = maxX1 - 3; lMaxX1 = maxX1 - 1; lMinX2 = 0; @@ -781,7 +781,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::fillSendVectors() fillSendVectorExt(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv); break; // BSW - case DIR_MMM: + case dMMM: lMinX1 = 0; lMaxX1 = 2; lMinX2 = 0; @@ -920,7 +920,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() int dummy; switch (sendDir) { - case DIR_P00: + case dP00: lMinX1 = maxX1 - 4; lMaxX1 = lMinX1 + 1; getLocalMinMax(minX2, maxX2, true, lMinX2, lMaxX2, true); @@ -943,7 +943,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() getLocalMinMax(dummy, dummy, dummy, dummy, lMaxX2, lMaxX3); distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd); break; - case DIR_M00: + case dM00: lMinX1 = 3; lMaxX1 = lMinX1 + 1; getLocalMinMax(minX2, maxX2, true, lMinX2, lMaxX2, true); @@ -966,7 +966,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() getLocalMinMax(dummy, dummy, dummy, dummy, lMaxX2, lMaxX3); distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd); break; - case DIR_0P0: + case d0P0: lMinX2 = maxX2 - 4; lMaxX2 = lMinX2 + 1; getLocalMinMax(minX1, maxX1, true, lMinX1, lMaxX1, true); @@ -989,7 +989,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() getLocalMinMax(dummy, dummy, dummy, lMaxX1, dummy, lMaxX3); distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd); break; - case DIR_0M0: + case d0M0: lMinX2 = 3; lMaxX2 = lMinX2 + 1; getLocalMinMax(minX1, maxX1, true, lMinX1, lMaxX1, true); @@ -1012,7 +1012,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() getLocalMinMax(dummy, dummy, dummy, lMaxX1, dummy, lMaxX3); distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd); break; - case DIR_00P: + case d00P: lMinX3 = maxX3 - 4; lMaxX3 = lMinX3 + 1; getLocalMinMax(minX1, maxX1, true, lMinX1, lMaxX1, true); @@ -1035,7 +1035,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() getLocalMinMax(dummy, dummy, dummy, lMaxX1, lMaxX2, dummy); distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd); break; - case DIR_00M: + case d00M: lMinX3 = 3; lMaxX3 = lMinX3 + 1; getLocalMinMax(minX1, maxX1, true, lMinX1, lMaxX1, true); @@ -1060,7 +1060,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() break; // /////E-W-N-S - case DIR_PP0: + case dPP0: lMinX1 = maxX1 - 4; lMaxX1 = lMinX1 + 3; lMinX2 = maxX2 - 4; @@ -1087,7 +1087,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() break; - case DIR_MM0: + case dMM0: lMinX1 = 1; lMaxX1 = lMinX1 + 3; lMinX2 = 3; @@ -1114,7 +1114,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() break; - case DIR_PM0: + case dPM0: lMinX1 = maxX1 - 4; lMaxX1 = lMinX1 + 3; lMinX2 = 3; @@ -1141,7 +1141,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() break; - case DIR_MP0: + case dMP0: lMinX1 = 1; lMaxX1 = lMinX1 + 3; lMinX2 = maxX2 - 4; @@ -1168,7 +1168,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() break; // /////T-B-E-W - case DIR_P0P: + case dP0P: lMinX1 = maxX1 - 4; lMaxX1 = lMinX1 + 3; lMinX3 = maxX3 - 4; @@ -1195,7 +1195,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() break; - case DIR_M0M: + case dM0M: lMinX1 = 1; lMaxX1 = lMinX1 + 3; lMinX3 = 3; @@ -1222,7 +1222,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() break; - case DIR_P0M: + case dP0M: lMinX1 = maxX1 - 4; lMaxX1 = lMinX1 + 3; lMinX3 = 3; @@ -1249,7 +1249,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() break; - case DIR_M0P: + case dM0P: lMinX1 = 1; lMaxX1 = lMinX1 + 3; lMinX3 = maxX3 - 4; @@ -1277,7 +1277,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() break; /////////////////////////T-N-B-S - case DIR_0PP: + case d0PP: lMinX2 = maxX2 - 4; lMaxX2 = lMinX2 + 3; lMinX3 = maxX3 - 4; @@ -1304,7 +1304,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() break; - case DIR_0MM: + case d0MM: lMinX2 = 1; lMaxX2 = lMinX2 + 3; lMinX3 = 3; @@ -1331,7 +1331,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() break; - case DIR_0PM: + case d0PM: lMinX2 = maxX2 - 4; lMaxX2 = lMinX2 + 3; lMinX3 = 3; @@ -1358,7 +1358,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() break; - case DIR_0MP: + case d0MP: lMinX2 = 1; lMaxX2 = lMinX2 + 3; lMinX3 = maxX3 - 4; @@ -1386,7 +1386,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() break; // TNE - case DIR_PPP: + case dPPP: lMinX1 = maxX1 - 4; lMaxX1 = maxX1 - 3; lMinX2 = maxX2 - 4; @@ -1413,7 +1413,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() break; // TNW - case DIR_MPP: + case dMPP: lMinX1 = 3; lMaxX1 = 4; lMinX2 = maxX2 - 4; @@ -1440,7 +1440,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() break; // TSE - case DIR_PMP: + case dPMP: lMinX1 = maxX1 - 4; lMaxX1 = maxX1 - 3; lMinX2 = 1; @@ -1466,7 +1466,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv); break; // TSW - case DIR_MMP: + case dMMP: lMinX1 = 3; lMaxX1 = 4; lMinX2 = 1; @@ -1492,7 +1492,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv); break; // BNE - case DIR_PPM: + case dPPM: lMinX1 = maxX1 - 4; lMaxX1 = maxX1 - 3; lMinX2 = maxX2 - 4; @@ -1519,7 +1519,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() break; // BNW - case DIR_MPM: + case dMPM: lMinX1 = 3; lMaxX1 = 4; lMinX2 = maxX2 - 4; @@ -1545,7 +1545,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv); break; // BSE - case DIR_PMM: + case dPMM: lMinX1 = maxX1 - 4; lMaxX1 = maxX1 - 3; lMinX2 = 1; @@ -1571,7 +1571,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataEvEv, indexEvEv); break; // BSW - case DIR_MMM: + case dMMM: lMinX1 = 3; lMaxX1 = 4; lMinX2 = 1; @@ -1644,55 +1644,55 @@ void CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1, int TmaxX2 = maxX2; int TmaxX3 = maxX3; - if (block.lock()->hasInterpolationFlagCF(DIR_P00)) { + if (block.lock()->hasInterpolationFlagCF(dP00)) { if (maxX1 == TmaxX1) maxX1 -= 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_M00)) { + if (block.lock()->hasInterpolationFlagCF(dM00)) { if (minX1 == TminX1) minX1 += 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_0P0)) { + if (block.lock()->hasInterpolationFlagCF(d0P0)) { if (maxX2 == TmaxX2) maxX2 -= 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_0M0)) { + if (block.lock()->hasInterpolationFlagCF(d0M0)) { if (minX2 == TminX2) minX2 += 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_00P)) { + if (block.lock()->hasInterpolationFlagCF(d00P)) { if (maxX3 == TmaxX3) maxX3 -= 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_00M)) { + if (block.lock()->hasInterpolationFlagCF(d00M)) { if (minX3 == TminX3) minX3 += 2; } // E-W-N-S - if (block.lock()->hasInterpolationFlagCF(DIR_PP0) && !block.lock()->hasInterpolationFlagCF(DIR_0P0) && - !block.lock()->hasInterpolationFlagCF(DIR_P00)) { + if (block.lock()->hasInterpolationFlagCF(dPP0) && !block.lock()->hasInterpolationFlagCF(d0P0) && + !block.lock()->hasInterpolationFlagCF(dP00)) { if (maxX1 == TmaxX1) maxX1 -= 2; if (maxX2 == TmaxX2) maxX2 -= 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_MM0) && !block.lock()->hasInterpolationFlagCF(DIR_M00) && - !block.lock()->hasInterpolationFlagCF(DIR_0M0)) { + if (block.lock()->hasInterpolationFlagCF(dMM0) && !block.lock()->hasInterpolationFlagCF(dM00) && + !block.lock()->hasInterpolationFlagCF(d0M0)) { if (minX1 == TminX1) minX1 += 2; if (minX2 == TminX2) minX2 += 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_PM0) && !block.lock()->hasInterpolationFlagCF(DIR_P00) && - !block.lock()->hasInterpolationFlagCF(DIR_0M0)) { + if (block.lock()->hasInterpolationFlagCF(dPM0) && !block.lock()->hasInterpolationFlagCF(dP00) && + !block.lock()->hasInterpolationFlagCF(d0M0)) { if (maxX1 == TmaxX1) maxX1 -= 2; if (minX2 == TminX2) minX2 += 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_MP0) && !block.lock()->hasInterpolationFlagCF(DIR_0P0) && - !block.lock()->hasInterpolationFlagCF(DIR_M00)) { + if (block.lock()->hasInterpolationFlagCF(dMP0) && !block.lock()->hasInterpolationFlagCF(d0P0) && + !block.lock()->hasInterpolationFlagCF(dM00)) { if (minX1 == TminX1) minX1 += 2; if (maxX2 == TmaxX2) @@ -1700,29 +1700,29 @@ void CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1, } // ////T-B-E-W - if (block.lock()->hasInterpolationFlagCF(DIR_P0P) && !block.lock()->hasInterpolationFlagCF(DIR_P00) && - !block.lock()->hasInterpolationFlagCF(DIR_00P)) { + if (block.lock()->hasInterpolationFlagCF(dP0P) && !block.lock()->hasInterpolationFlagCF(dP00) && + !block.lock()->hasInterpolationFlagCF(d00P)) { if (maxX1 == TmaxX1) maxX1 -= 2; if (maxX3 == TmaxX3) maxX3 -= 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_M0M) && !block.lock()->hasInterpolationFlagCF(DIR_M00) && - !block.lock()->hasInterpolationFlagCF(DIR_00M)) { + if (block.lock()->hasInterpolationFlagCF(dM0M) && !block.lock()->hasInterpolationFlagCF(dM00) && + !block.lock()->hasInterpolationFlagCF(d00M)) { if (minX1 == TminX1) minX1 += 2; if (minX3 == TminX3) minX3 += 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_P0M) && !block.lock()->hasInterpolationFlagCF(DIR_P00) && - !block.lock()->hasInterpolationFlagCF(DIR_00M)) { + if (block.lock()->hasInterpolationFlagCF(dP0M) && !block.lock()->hasInterpolationFlagCF(dP00) && + !block.lock()->hasInterpolationFlagCF(d00M)) { if (maxX1 == TmaxX1) maxX1 -= 2; if (minX3 == TminX3) minX3 += 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_M0P) && !block.lock()->hasInterpolationFlagCF(DIR_M00) && - !block.lock()->hasInterpolationFlagCF(DIR_00P)) { + if (block.lock()->hasInterpolationFlagCF(dM0P) && !block.lock()->hasInterpolationFlagCF(dM00) && + !block.lock()->hasInterpolationFlagCF(d00P)) { if (minX1 == TminX1) minX1 += 2; if (maxX3 == TmaxX3) @@ -1730,29 +1730,29 @@ void CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1, } ////T-B-N-S - if (block.lock()->hasInterpolationFlagCF(DIR_0PP) && !block.lock()->hasInterpolationFlagCF(DIR_0P0) && - !block.lock()->hasInterpolationFlagCF(DIR_00P)) { + if (block.lock()->hasInterpolationFlagCF(d0PP) && !block.lock()->hasInterpolationFlagCF(d0P0) && + !block.lock()->hasInterpolationFlagCF(d00P)) { if (maxX2 == TmaxX2) maxX2 -= 2; if (maxX3 == TmaxX3) maxX3 -= 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_0MM) && !block.lock()->hasInterpolationFlagCF(DIR_0M0) && - !block.lock()->hasInterpolationFlagCF(DIR_00M)) { + if (block.lock()->hasInterpolationFlagCF(d0MM) && !block.lock()->hasInterpolationFlagCF(d0M0) && + !block.lock()->hasInterpolationFlagCF(d00M)) { if (minX2 == TminX2) minX2 += 2; if (minX3 == TminX3) minX3 += 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_0PM) && !block.lock()->hasInterpolationFlagCF(DIR_0P0) && - !block.lock()->hasInterpolationFlagCF(DIR_00M)) { + if (block.lock()->hasInterpolationFlagCF(d0PM) && !block.lock()->hasInterpolationFlagCF(d0P0) && + !block.lock()->hasInterpolationFlagCF(d00M)) { if (maxX2 == TmaxX2) maxX2 -= 2; if (minX3 == TminX3) minX3 += 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_0MP) && !block.lock()->hasInterpolationFlagCF(DIR_0M0) && - !block.lock()->hasInterpolationFlagCF(DIR_00P)) { + if (block.lock()->hasInterpolationFlagCF(d0MP) && !block.lock()->hasInterpolationFlagCF(d0M0) && + !block.lock()->hasInterpolationFlagCF(d00P)) { if (minX2 == TminX2) minX2 += 2; if (maxX3 == TmaxX3) @@ -1760,10 +1760,10 @@ void CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1, } // if - // (block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_PPP)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_P0P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_0PP)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_PP0)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_00P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_0P0) - // && !block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_P00)) if - // (!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_P0P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_00P)&& - // !block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_P00)) + // (block.lock()->hasInterpolationFlagCF(D3Q27System::dPPP)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::dP0P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::d0PP)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::dPP0)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::d00P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::d0P0) + // && !block.lock()->hasInterpolationFlagCF(D3Q27System::dP00)) if + // (!block.lock()->hasInterpolationFlagCF(D3Q27System::dP0P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::d00P)&& + // !block.lock()->hasInterpolationFlagCF(D3Q27System::dP00)) //{ // if (maxX1==TmaxX1) maxX1 -= 2; // if (maxX2==TmaxX2) maxX2 -= 2; @@ -1786,55 +1786,55 @@ void CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1, int TmaxX2 = maxX2; int TmaxX3 = maxX3; - if (block.lock()->hasInterpolationFlagCF(DIR_P00)) { + if (block.lock()->hasInterpolationFlagCF(dP00)) { if (maxX1 == TmaxX1) maxX1 -= 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_M00)) { + if (block.lock()->hasInterpolationFlagCF(dM00)) { if (minX1 == TminX1) minX1 += 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_0P0)) { + if (block.lock()->hasInterpolationFlagCF(d0P0)) { if (maxX2 == TmaxX2) maxX2 -= 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_0M0)) { + if (block.lock()->hasInterpolationFlagCF(d0M0)) { if (minX2 == TminX2) minX2 += 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_00P)) { + if (block.lock()->hasInterpolationFlagCF(d00P)) { if (maxX3 == TmaxX3) maxX3 -= 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_00M)) { + if (block.lock()->hasInterpolationFlagCF(d00M)) { if (minX3 == TminX3) minX3 += 2; } // E-W-N-S - if (block.lock()->hasInterpolationFlagCF(DIR_PP0) && !block.lock()->hasInterpolationFlagCF(DIR_0P0) && - !block.lock()->hasInterpolationFlagCF(DIR_P00)) { + if (block.lock()->hasInterpolationFlagCF(dPP0) && !block.lock()->hasInterpolationFlagCF(d0P0) && + !block.lock()->hasInterpolationFlagCF(dP00)) { if (maxX1 == TmaxX1) maxX1 -= 2; if (maxX2 == TmaxX2) maxX2 -= 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_MM0) && !block.lock()->hasInterpolationFlagCF(DIR_M00) && - !block.lock()->hasInterpolationFlagCF(DIR_0M0)) { + if (block.lock()->hasInterpolationFlagCF(dMM0) && !block.lock()->hasInterpolationFlagCF(dM00) && + !block.lock()->hasInterpolationFlagCF(d0M0)) { if (minX1 == TminX1) minX1 += 2; if (minX2 == TminX2) minX2 += 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_PM0) && !block.lock()->hasInterpolationFlagCF(DIR_P00) && - !block.lock()->hasInterpolationFlagCF(DIR_0M0)) { + if (block.lock()->hasInterpolationFlagCF(dPM0) && !block.lock()->hasInterpolationFlagCF(dP00) && + !block.lock()->hasInterpolationFlagCF(d0M0)) { if (maxX1 == TmaxX1) maxX1 -= 2; if (minX2 == TminX2) minX2 += 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_MP0) && !block.lock()->hasInterpolationFlagCF(DIR_0P0) && - !block.lock()->hasInterpolationFlagCF(DIR_M00)) { + if (block.lock()->hasInterpolationFlagCF(dMP0) && !block.lock()->hasInterpolationFlagCF(d0P0) && + !block.lock()->hasInterpolationFlagCF(dM00)) { if (minX1 == TminX1) minX1 += 2; if (maxX2 == TmaxX2) @@ -1842,29 +1842,29 @@ void CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1, } // ////T-B-E-W - if (block.lock()->hasInterpolationFlagCF(DIR_P0P) && !block.lock()->hasInterpolationFlagCF(DIR_P00) && - !block.lock()->hasInterpolationFlagCF(DIR_00P)) { + if (block.lock()->hasInterpolationFlagCF(dP0P) && !block.lock()->hasInterpolationFlagCF(dP00) && + !block.lock()->hasInterpolationFlagCF(d00P)) { if (maxX1 == TmaxX1) maxX1 -= 2; if (maxX3 == TmaxX3) maxX3 -= 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_M0M) && !block.lock()->hasInterpolationFlagCF(DIR_M00) && - !block.lock()->hasInterpolationFlagCF(DIR_00M)) { + if (block.lock()->hasInterpolationFlagCF(dM0M) && !block.lock()->hasInterpolationFlagCF(dM00) && + !block.lock()->hasInterpolationFlagCF(d00M)) { if (minX1 == TminX1) minX1 += 2; if (minX3 == TminX3) minX3 += 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_P0M) && !block.lock()->hasInterpolationFlagCF(DIR_P00) && - !block.lock()->hasInterpolationFlagCF(DIR_00M)) { + if (block.lock()->hasInterpolationFlagCF(dP0M) && !block.lock()->hasInterpolationFlagCF(dP00) && + !block.lock()->hasInterpolationFlagCF(d00M)) { if (maxX1 == TmaxX1) maxX1 -= 2; if (minX3 == TminX3) minX3 += 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_M0P) && !block.lock()->hasInterpolationFlagCF(DIR_M00) && - !block.lock()->hasInterpolationFlagCF(DIR_00P)) { + if (block.lock()->hasInterpolationFlagCF(dM0P) && !block.lock()->hasInterpolationFlagCF(dM00) && + !block.lock()->hasInterpolationFlagCF(d00P)) { if (minX1 == TminX1) minX1 += 2; if (maxX3 == TmaxX3) @@ -1872,29 +1872,29 @@ void CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1, } ////T-B-N-S - if (block.lock()->hasInterpolationFlagCF(DIR_0PP) && !block.lock()->hasInterpolationFlagCF(DIR_0P0) && - !block.lock()->hasInterpolationFlagCF(DIR_00P)) { + if (block.lock()->hasInterpolationFlagCF(d0PP) && !block.lock()->hasInterpolationFlagCF(d0P0) && + !block.lock()->hasInterpolationFlagCF(d00P)) { if (maxX2 == TmaxX2) maxX2 -= 2; if (maxX3 == TmaxX3) maxX3 -= 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_0MM) && !block.lock()->hasInterpolationFlagCF(DIR_0M0) && - !block.lock()->hasInterpolationFlagCF(DIR_00M)) { + if (block.lock()->hasInterpolationFlagCF(d0MM) && !block.lock()->hasInterpolationFlagCF(d0M0) && + !block.lock()->hasInterpolationFlagCF(d00M)) { if (minX2 == TminX2) minX2 += 2; if (minX3 == TminX3) minX3 += 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_0PM) && !block.lock()->hasInterpolationFlagCF(DIR_0P0) && - !block.lock()->hasInterpolationFlagCF(DIR_00M)) { + if (block.lock()->hasInterpolationFlagCF(d0PM) && !block.lock()->hasInterpolationFlagCF(d0P0) && + !block.lock()->hasInterpolationFlagCF(d00M)) { if (maxX2 == TmaxX2) maxX2 -= 2; if (minX3 == TminX3) minX3 += 2; } - if (block.lock()->hasInterpolationFlagCF(DIR_0MP) && !block.lock()->hasInterpolationFlagCF(DIR_0M0) && - !block.lock()->hasInterpolationFlagCF(DIR_00P)) { + if (block.lock()->hasInterpolationFlagCF(d0MP) && !block.lock()->hasInterpolationFlagCF(d0M0) && + !block.lock()->hasInterpolationFlagCF(d00P)) { if (minX2 == TminX2) minX2 += 2; if (maxX3 == TmaxX3) @@ -1902,8 +1902,8 @@ void CoarseToFineVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1, } // if - // (block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_PPP)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_P0P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_0PP)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_PP0)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_00P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_0P0) - // && !block.lock()->hasInterpolationFlagCF(D3Q27System::DIR_P00)) + // (block.lock()->hasInterpolationFlagCF(D3Q27System::dPPP)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::dP0P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::d0PP)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::dPP0)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::d00P)&&!block.lock()->hasInterpolationFlagCF(D3Q27System::d0P0) + // && !block.lock()->hasInterpolationFlagCF(D3Q27System::dP00)) //{ // if (maxX1==TmaxX1) maxX1 -= 2; // if (maxX2==TmaxX2) maxX2 -= 2; @@ -1937,7 +1937,7 @@ void CoarseToFineVectorConnector<VectorTransmitter>::findCFnodes() using namespace D3Q27System; using namespace vf::lbm::dir; - if (block.lock()->hasInterpolationFlagCF(DIR_M00)) { + if (block.lock()->hasInterpolationFlagCF(dM00)) { lMinX1 = 1; lMaxX1 = lMinX1 + 1; @@ -1957,8 +1957,8 @@ void CoarseToFineVectorConnector<VectorTransmitter>::findCFnodes() getLocalMinMax(minX3, maxX3, false, lMinX3, lMaxX3, false); findCFnodes(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, dataOdOd, indexOdOd); } - if (block.lock()->hasInterpolationFlagCF(DIR_0PP) && !block.lock()->hasInterpolationFlagCF(DIR_0P0) && - !block.lock()->hasInterpolationFlagCF(DIR_00P)) { + if (block.lock()->hasInterpolationFlagCF(d0PP) && !block.lock()->hasInterpolationFlagCF(d0P0) && + !block.lock()->hasInterpolationFlagCF(d00P)) { lMinX2 = maxX2 - 3; lMaxX2 = lMinX2 + 1; lMinX3 = maxX3 - 3; diff --git a/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseVectorConnector.cpp b/src/cpu/core/Connectors/FineToCoarseVectorConnector.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/FineToCoarseVectorConnector.cpp rename to src/cpu/core/Connectors/FineToCoarseVectorConnector.cpp diff --git a/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseVectorConnector.h b/src/cpu/core/Connectors/FineToCoarseVectorConnector.h similarity index 85% rename from src/cpu/VirtualFluidsCore/Connectors/FineToCoarseVectorConnector.h rename to src/cpu/core/Connectors/FineToCoarseVectorConnector.h index 94222fee2940dc13411b4c7520ac64a5ab942478..7b92bac07e2cd606fcf4f5531c6992e442bf4ee1 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseVectorConnector.h +++ b/src/cpu/core/Connectors/FineToCoarseVectorConnector.h @@ -147,16 +147,16 @@ FineToCoarseVectorConnector<VectorTransmitter>::FineToCoarseVectorConnector(SPtr { using namespace vf::lbm::dir; - if (!(sendDir == DIR_P00 || sendDir == DIR_M00 || sendDir == DIR_0P0 || - sendDir == DIR_0M0 || sendDir == DIR_00P || sendDir == DIR_00M || - sendDir == DIR_PP0 || sendDir == DIR_MM0 || sendDir == DIR_PM0 || - sendDir == DIR_MP0 || sendDir == DIR_P0P || sendDir == DIR_M0M || - sendDir == DIR_P0M || sendDir == DIR_M0P || sendDir == DIR_0PP || - sendDir == DIR_0MM || sendDir == DIR_0PM || sendDir == DIR_0MP + if (!(sendDir == dP00 || sendDir == dM00 || sendDir == d0P0 || + sendDir == d0M0 || sendDir == d00P || sendDir == d00M || + sendDir == dPP0 || sendDir == dMM0 || sendDir == dPM0 || + sendDir == dMP0 || sendDir == dP0P || sendDir == dM0M || + sendDir == dP0M || sendDir == dM0P || sendDir == d0PP || + sendDir == d0MM || sendDir == d0PM || sendDir == d0MP - || sendDir == DIR_PPP || sendDir == DIR_MPP || sendDir == DIR_PMP || - sendDir == DIR_MMP || sendDir == DIR_PPM || sendDir == DIR_MPM || - sendDir == DIR_PMM || sendDir == DIR_MMM + || sendDir == dPPP || sendDir == dMPP || sendDir == dPMP || + sendDir == dMMP || sendDir == dPPM || sendDir == dMPM || + sendDir == dPMM || sendDir == dMMM )) { throw UbException(UB_EXARGS, "invalid constructor for this direction"); @@ -240,44 +240,44 @@ void FineToCoarseVectorConnector<VectorTransmitter>::init() int iCellSize = 1; // size of interpolation cell switch (this->sendDir) { - case DIR_P00: - case DIR_M00: + case dP00: + case dM00: sendSize = (bMaxX2 - 1) / 2 * (bMaxX3 - 1) / 2 * sendDataPerNode * iCellSize; break; - case DIR_0P0: - case DIR_0M0: + case d0P0: + case d0M0: sendSize = (bMaxX1 - 1) / 2 * (bMaxX3 - 1) / 2 * sendDataPerNode * iCellSize; break; - case DIR_00P: - case DIR_00M: + case d00P: + case d00M: sendSize = (bMaxX1 - 1) / 2 * (bMaxX2 - 1) / 2 * sendDataPerNode * iCellSize; break; - case DIR_PP0: - case DIR_MM0: - case DIR_PM0: - case DIR_MP0: + case dPP0: + case dMM0: + case dPM0: + case dMP0: sendSize = (3 * bMaxX3 - 3) * sendDataPerNode * iCellSize; break; // buffer overhead, should be (3*bMaxX3-6) for even bMax3 - case DIR_P0P: - case DIR_M0M: - case DIR_P0M: - case DIR_M0P: + case dP0P: + case dM0M: + case dP0M: + case dM0P: sendSize = (3 * bMaxX2 - 3) * sendDataPerNode * iCellSize; break; - case DIR_0PP: - case DIR_0MM: - case DIR_0PM: - case DIR_0MP: + case d0PP: + case d0MM: + case d0PM: + case d0MP: sendSize = (3 * bMaxX1 - 3) * sendDataPerNode * iCellSize; break; - case DIR_PPP: - case DIR_MPP: - case DIR_PMP: - case DIR_MMP: - case DIR_PPM: - case DIR_MPM: - case DIR_PMM: - case DIR_MMM: + case dPPP: + case dMPP: + case dPMP: + case dMMP: + case dPPM: + case dMPM: + case dPMM: + case dMMM: sendSize = 3 * (3 * bMaxX1 - 3) * sendDataPerNode * iCellSize; break; default: @@ -327,42 +327,42 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() ////////////// switch (sendDir) { - case DIR_P00: + case dP00: getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3); getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3); lMinX1 = maxX1 - 7; lMaxX1 = lMinX1 + 1; fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_M00: + case dM00: getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3); getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3); lMinX1 = 5; lMaxX1 = lMinX1 + 1; fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_0P0: + case d0P0: getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3); getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3); lMinX2 = maxX2 - 7; lMaxX2 = lMinX2 + 1; fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_0M0: + case d0M0: getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3); getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3); lMinX2 = 5; lMaxX2 = lMinX2 + 1; fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_00P: + case d00P: getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3); getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3); lMinX3 = maxX3 - 7; lMaxX3 = lMinX3 + 1; fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_00M: + case d00M: getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3); getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3); lMinX3 = 5; @@ -371,7 +371,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() break; // ////N-S-E-W - case DIR_PP0: + case dPP0: getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3); getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3); lMinX1 = maxX1 - 7; @@ -386,7 +386,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() lMaxX2 = lMinX2 + 5; fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_MM0: + case dMM0: getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3); getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3); @@ -403,7 +403,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_PM0: + case dPM0: getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3); getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3); lMinX1 = maxX1 - 7; @@ -420,7 +420,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() break; - case DIR_MP0: + case dMP0: getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3); getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3); lMinX1 = 1; @@ -436,7 +436,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; //////T-B-E-W - case DIR_P0P: + case dP0P: getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3); getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3); lMinX1 = maxX1 - 7; @@ -452,7 +452,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_M0M: + case dM0M: getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3); getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3); lMinX1 = 1; @@ -468,7 +468,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_P0M: + case dP0M: getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3); getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3); lMinX1 = maxX1 - 7; @@ -484,7 +484,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_M0P: + case dM0P: getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3); getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3); lMinX1 = 1; @@ -501,7 +501,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() break; ///////////////T-B-N-S // - case DIR_0PP: + case d0PP: getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3); getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3); lMinX2 = maxX2 - 7; @@ -517,7 +517,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_0MM: + case d0MM: getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3); getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3); lMinX2 = 1; @@ -533,7 +533,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_0PM: + case d0PM: getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3); getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3); lMinX2 = maxX2 - 7; @@ -549,7 +549,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() fillSendVector(fFrom, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_0MP: + case d0MP: getLocalMinMax(lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3); getLocalMins(lMinX1, lMinX2, lMinX3, oMinX1, oMinX2, oMinX3); lMinX2 = 1; @@ -566,7 +566,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() break; // TNE - case DIR_PPP: + case dPPP: lMinX1 = maxX1 - 7; lMaxX1 = maxX1 - 6; lMinX2 = maxX2 - 7; @@ -593,7 +593,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() break; // TNW - case DIR_MPP: + case dMPP: lMinX1 = 5; lMaxX1 = 6; lMinX2 = maxX2 - 7; @@ -622,7 +622,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() break; // TSE - case DIR_PMP: + case dPMP: lMinX1 = maxX1 - 7; lMaxX1 = maxX1 - 6; lMinX2 = 1; @@ -649,7 +649,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() break; // TSW - case DIR_MMP: + case dMMP: lMinX1 = 5; lMaxX1 = 6; lMinX2 = 1; @@ -676,7 +676,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() break; // BNE - case DIR_PPM: + case dPPM: lMinX1 = maxX1 - 7; lMaxX1 = maxX1 - 6; lMinX2 = maxX2 - 7; @@ -703,7 +703,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() break; // BNW - case DIR_MPM: + case dMPM: lMinX1 = 5; lMaxX1 = 6; lMinX2 = maxX2 - 7; @@ -731,7 +731,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() break; // BSE - case DIR_PMM: + case dPMM: lMinX1 = maxX1 - 7; lMaxX1 = maxX1 - 6; lMinX2 = 1; @@ -759,7 +759,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::fillSendVectors() break; // BSW - case DIR_MMM: + case dMMM: lMinX1 = 5; lMaxX1 = 6; lMinX2 = 1; @@ -878,42 +878,42 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() lMaxX3 = maxX3 - 1; switch (sendDir) { - case DIR_P00: + case dP00: lMinX1 = maxX1 - 4; lMaxX1 = lMinX1 + 1; getLocalMinMaxCF(maxX2, lMinX2, lMaxX2); getLocalMinMaxCF(maxX3, lMinX3, lMaxX3); distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_M00: + case dM00: lMinX1 = 2; lMaxX1 = lMinX1 + 1; getLocalMinMaxCF(maxX2, lMinX2, lMaxX2); getLocalMinMaxCF(maxX3, lMinX3, lMaxX3); distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_0P0: + case d0P0: lMinX2 = maxX2 - 4; lMaxX2 = lMinX2 + 1; getLocalMinMaxCF(maxX1, lMinX1, lMaxX1); getLocalMinMaxCF(maxX3, lMinX3, lMaxX3); distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_0M0: + case d0M0: lMinX2 = 2; lMaxX2 = lMinX2 + 1; getLocalMinMaxCF(maxX1, lMinX1, lMaxX1); getLocalMinMaxCF(maxX3, lMinX3, lMaxX3); distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_00P: + case d00P: lMinX3 = maxX3 - 4; lMaxX3 = lMinX3 + 1; getLocalMinMaxCF(maxX1, lMinX1, lMaxX1); getLocalMinMaxCF(maxX2, lMinX2, lMaxX2); distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_00M: + case d00M: lMinX3 = 2; lMaxX3 = lMinX3 + 1; getLocalMinMaxCF(maxX1, lMinX1, lMaxX1); @@ -922,7 +922,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() break; /////E-W-N-S - case DIR_PP0: + case dPP0: lMinX1 = maxX1 - 4; lMaxX1 = lMinX1 + 3; lMinX2 = maxX2 - 4; @@ -931,7 +931,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_MM0: + case dMM0: lMinX1 = 0; lMaxX1 = lMinX1 + 3; lMinX2 = 0; @@ -940,7 +940,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_PM0: + case dPM0: lMinX1 = maxX1 - 4; lMaxX1 = lMinX1 + 3; lMinX2 = 0; @@ -949,7 +949,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_MP0: + case dMP0: lMinX1 = 0; lMaxX1 = lMinX1 + 3; lMinX2 = maxX2 - 4; @@ -959,7 +959,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() break; // // /////T-B-E-W - case DIR_P0P: + case dP0P: lMinX1 = maxX1 - 4; lMaxX1 = lMinX1 + 3; lMinX3 = maxX3 - 4; @@ -968,7 +968,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_M0M: + case dM0M: lMinX1 = 0; lMaxX1 = lMinX1 + 3; lMinX3 = 0; @@ -977,7 +977,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_P0M: + case dP0M: lMinX1 = maxX1 - 4; lMaxX1 = lMinX1 + 3; lMinX3 = 0; @@ -986,7 +986,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_M0P: + case dM0P: lMinX1 = 0; lMaxX1 = lMinX1 + 3; lMinX3 = maxX3 - 4; @@ -997,7 +997,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() // ////////////////T-B-N-S // - case DIR_0PP: + case d0PP: lMinX2 = maxX2 - 4; lMaxX2 = lMinX2 + 3; lMinX3 = maxX3 - 4; @@ -1006,7 +1006,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_0MM: + case d0MM: lMinX2 = 0; lMaxX2 = lMinX2 + 3; lMinX3 = 0; @@ -1015,7 +1015,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_0PM: + case d0PM: lMinX2 = maxX2 - 4; lMaxX2 = lMinX2 + 3; lMinX3 = 0; @@ -1024,7 +1024,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; - case DIR_0MP: + case d0MP: lMinX2 = 0; lMaxX2 = lMinX2 + 3; lMinX3 = maxX3 - 4; @@ -1034,7 +1034,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() break; // //TNE - case DIR_PPP: + case dPPP: lMinX1 = maxX1 - 4; lMaxX1 = maxX1 - 1; lMinX2 = maxX2 - 4; @@ -1044,7 +1044,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; // TNW - case DIR_MPP: + case dMPP: lMinX1 = 0; lMaxX1 = 3; lMinX2 = maxX2 - 4; @@ -1054,7 +1054,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; // TSE - case DIR_PMP: + case dPMP: lMinX1 = maxX1 - 4; lMaxX1 = maxX1 - 1; lMinX2 = 0; @@ -1064,7 +1064,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; // TSW - case DIR_MMP: + case dMMP: lMinX1 = 0; lMaxX1 = 3; lMinX2 = 0; @@ -1074,7 +1074,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; // BNE - case DIR_PPM: + case dPPM: lMinX1 = maxX1 - 4; lMaxX1 = maxX1 - 1; lMinX2 = maxX2 - 4; @@ -1084,7 +1084,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; // BNW - case DIR_MPM: + case dMPM: lMinX1 = 0; lMaxX1 = 3; lMinX2 = maxX2 - 4; @@ -1094,7 +1094,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; // BSE - case DIR_PMM: + case dPMM: lMinX1 = maxX1 - 4; lMaxX1 = maxX1 - 1; lMinX2 = 0; @@ -1104,7 +1104,7 @@ void FineToCoarseVectorConnector<VectorTransmitter>::distributeReceiveVectors() distributeReceiveVector(fTo, lMinX1, lMinX2, lMinX3, lMaxX1, lMaxX2, lMaxX3, data, index); break; // BSW - case DIR_MMM: + case dMMM: lMinX1 = 0; lMaxX1 = 3; lMinX2 = 0; @@ -1174,56 +1174,56 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1, int TmaxX2 = maxX2; int TmaxX3 = maxX3; - if (block.lock()->hasInterpolationFlagFC(DIR_P00)) { + if (block.lock()->hasInterpolationFlagFC(dP00)) { if (maxX1 == TmaxX1) maxX1 -= 3; } - if (block.lock()->hasInterpolationFlagFC(DIR_M00)) { + if (block.lock()->hasInterpolationFlagFC(dM00)) { if (minX1 == TminX1) minX1 += 4; } - if (block.lock()->hasInterpolationFlagFC(DIR_0P0)) { + if (block.lock()->hasInterpolationFlagFC(d0P0)) { if (maxX2 == TmaxX2) maxX2 -= 3; } - if (block.lock()->hasInterpolationFlagFC(DIR_0M0)) { + if (block.lock()->hasInterpolationFlagFC(d0M0)) { if (minX2 == TminX2) minX2 += 4; } - if (block.lock()->hasInterpolationFlagFC(DIR_00P)) { + if (block.lock()->hasInterpolationFlagFC(d00P)) { if (maxX3 == TmaxX3) maxX3 -= 3; } - if (block.lock()->hasInterpolationFlagFC(DIR_00M)) { + if (block.lock()->hasInterpolationFlagFC(d00M)) { if (minX3 == TminX3) minX3 += 4; } //////////// /////E-W-N-S - if (block.lock()->hasInterpolationFlagFC(DIR_PP0) && !block.lock()->hasInterpolationFlagFC(DIR_0P0) && - !block.lock()->hasInterpolationFlagFC(DIR_P00)) { + if (block.lock()->hasInterpolationFlagFC(dPP0) && !block.lock()->hasInterpolationFlagFC(d0P0) && + !block.lock()->hasInterpolationFlagFC(dP00)) { if (maxX1 == TmaxX1) maxX1 -= 3; if (maxX2 == TmaxX2) maxX2 -= 3; } - if (block.lock()->hasInterpolationFlagFC(DIR_MM0) && !block.lock()->hasInterpolationFlagFC(DIR_M00) && - !block.lock()->hasInterpolationFlagFC(DIR_0M0)) { + if (block.lock()->hasInterpolationFlagFC(dMM0) && !block.lock()->hasInterpolationFlagFC(dM00) && + !block.lock()->hasInterpolationFlagFC(d0M0)) { if (minX1 == TminX1) minX1 += 4; if (minX2 == TminX2) minX2 += 4; } - if (block.lock()->hasInterpolationFlagFC(DIR_PM0) && !block.lock()->hasInterpolationFlagFC(DIR_P00) && - !block.lock()->hasInterpolationFlagFC(DIR_0M0)) { + if (block.lock()->hasInterpolationFlagFC(dPM0) && !block.lock()->hasInterpolationFlagFC(dP00) && + !block.lock()->hasInterpolationFlagFC(d0M0)) { if (maxX1 == TmaxX1) maxX1 -= 3; if (minX2 == TminX2) minX2 += 4; } - if (block.lock()->hasInterpolationFlagFC(DIR_MP0) && !block.lock()->hasInterpolationFlagFC(DIR_0P0) && - !block.lock()->hasInterpolationFlagFC(DIR_M00)) { + if (block.lock()->hasInterpolationFlagFC(dMP0) && !block.lock()->hasInterpolationFlagFC(d0P0) && + !block.lock()->hasInterpolationFlagFC(dM00)) { if (minX1 == TminX1) minX1 += 4; if (maxX2 == TmaxX2) @@ -1231,29 +1231,29 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1, } //////T-B-E-W - if (block.lock()->hasInterpolationFlagFC(DIR_P0P) && !block.lock()->hasInterpolationFlagFC(DIR_P00) && - !block.lock()->hasInterpolationFlagFC(DIR_00P)) { + if (block.lock()->hasInterpolationFlagFC(dP0P) && !block.lock()->hasInterpolationFlagFC(dP00) && + !block.lock()->hasInterpolationFlagFC(d00P)) { if (maxX1 == TmaxX1) maxX1 -= 3; if (maxX3 == TmaxX3) maxX3 -= 3; } - if (block.lock()->hasInterpolationFlagFC(DIR_M0M) && !block.lock()->hasInterpolationFlagFC(DIR_M00) && - !block.lock()->hasInterpolationFlagFC(DIR_00M)) { + if (block.lock()->hasInterpolationFlagFC(dM0M) && !block.lock()->hasInterpolationFlagFC(dM00) && + !block.lock()->hasInterpolationFlagFC(d00M)) { if (minX1 == TminX1) minX1 += 4; if (minX3 == TminX3) minX3 += 4; } - if (block.lock()->hasInterpolationFlagFC(DIR_P0M) && !block.lock()->hasInterpolationFlagFC(DIR_P00) && - !block.lock()->hasInterpolationFlagFC(DIR_00M)) { + if (block.lock()->hasInterpolationFlagFC(dP0M) && !block.lock()->hasInterpolationFlagFC(dP00) && + !block.lock()->hasInterpolationFlagFC(d00M)) { if (maxX1 == TmaxX1) maxX1 -= 3; if (minX3 == TminX3) minX3 += 4; } - if (block.lock()->hasInterpolationFlagFC(DIR_M0P) && !block.lock()->hasInterpolationFlagFC(DIR_M00) && - !block.lock()->hasInterpolationFlagFC(DIR_00P)) { + if (block.lock()->hasInterpolationFlagFC(dM0P) && !block.lock()->hasInterpolationFlagFC(dM00) && + !block.lock()->hasInterpolationFlagFC(d00P)) { if (minX1 == TminX1) minX1 += 4; if (maxX3 == TmaxX3) @@ -1261,29 +1261,29 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1, } ////T-B-N-S - if (block.lock()->hasInterpolationFlagFC(DIR_0PP) && !block.lock()->hasInterpolationFlagFC(DIR_0P0) && - !block.lock()->hasInterpolationFlagFC(DIR_00P)) { + if (block.lock()->hasInterpolationFlagFC(d0PP) && !block.lock()->hasInterpolationFlagFC(d0P0) && + !block.lock()->hasInterpolationFlagFC(d00P)) { if (maxX2 == TmaxX2) maxX2 -= 3; if (maxX3 == TmaxX3) maxX3 -= 3; } - if (block.lock()->hasInterpolationFlagFC(DIR_0MM) && !block.lock()->hasInterpolationFlagFC(DIR_0M0) && - !block.lock()->hasInterpolationFlagFC(DIR_00M)) { + if (block.lock()->hasInterpolationFlagFC(d0MM) && !block.lock()->hasInterpolationFlagFC(d0M0) && + !block.lock()->hasInterpolationFlagFC(d00M)) { if (minX2 == TminX2) minX2 += 4; if (minX3 == TminX3) minX3 += 4; } - if (block.lock()->hasInterpolationFlagFC(DIR_0PM) && !block.lock()->hasInterpolationFlagFC(DIR_0P0) && - !block.lock()->hasInterpolationFlagFC(DIR_00M)) { + if (block.lock()->hasInterpolationFlagFC(d0PM) && !block.lock()->hasInterpolationFlagFC(d0P0) && + !block.lock()->hasInterpolationFlagFC(d00M)) { if (maxX2 == TmaxX2) maxX2 -= 3; if (minX3 == TminX3) minX3 += 4; } - if (block.lock()->hasInterpolationFlagFC(DIR_0MP) && !block.lock()->hasInterpolationFlagFC(DIR_0M0) && - !block.lock()->hasInterpolationFlagFC(DIR_00P)) { + if (block.lock()->hasInterpolationFlagFC(d0MP) && !block.lock()->hasInterpolationFlagFC(d0M0) && + !block.lock()->hasInterpolationFlagFC(d00P)) { if (minX2 == TminX2) minX2 += 4; if (maxX3 == TmaxX3) @@ -1291,10 +1291,10 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1, } // if - // (block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_PPP)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_P0P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_0PP)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_PP0)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_00P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_0P0) - // && !block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_P00)) if - // (!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_P0P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_00P) && - // !block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_P00)) + // (block.lock()->hasInterpolationFlagFC(D3Q27System::dPPP)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::dP0P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::d0PP)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::dPP0)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::d00P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::d0P0) + // && !block.lock()->hasInterpolationFlagFC(D3Q27System::dP00)) if + // (!block.lock()->hasInterpolationFlagFC(D3Q27System::dP0P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::d00P) && + // !block.lock()->hasInterpolationFlagFC(D3Q27System::dP00)) //{ // if (maxX1==TmaxX1) maxX1 -= 3; // if (maxX2==TmaxX2) maxX2 -= 3; @@ -1317,56 +1317,56 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1, int TmaxX2 = maxX2; int TmaxX3 = maxX3; - if (block.lock()->hasInterpolationFlagFC(DIR_P00)) { + if (block.lock()->hasInterpolationFlagFC(dP00)) { if (maxX1 == TmaxX1) maxX1 -= 3; } - if (block.lock()->hasInterpolationFlagFC(DIR_M00)) { + if (block.lock()->hasInterpolationFlagFC(dM00)) { if (minX1 == TminX1) minX1 += 4; } - if (block.lock()->hasInterpolationFlagFC(DIR_0P0)) { + if (block.lock()->hasInterpolationFlagFC(d0P0)) { if (maxX2 == TmaxX2) maxX2 -= 3; } - if (block.lock()->hasInterpolationFlagFC(DIR_0M0)) { + if (block.lock()->hasInterpolationFlagFC(d0M0)) { if (minX2 == TminX2) minX2 += 4; } - if (block.lock()->hasInterpolationFlagFC(DIR_00P)) { + if (block.lock()->hasInterpolationFlagFC(d00P)) { if (maxX3 == TmaxX3) maxX3 -= 3; } - if (block.lock()->hasInterpolationFlagFC(DIR_00M)) { + if (block.lock()->hasInterpolationFlagFC(d00M)) { if (minX3 == TminX3) minX3 += 4; } //////////// /////E-W-N-S - if (block.lock()->hasInterpolationFlagFC(DIR_PP0) && !block.lock()->hasInterpolationFlagFC(DIR_0P0) && - !block.lock()->hasInterpolationFlagFC(DIR_P00)) { + if (block.lock()->hasInterpolationFlagFC(dPP0) && !block.lock()->hasInterpolationFlagFC(d0P0) && + !block.lock()->hasInterpolationFlagFC(dP00)) { if (maxX1 == TmaxX1) maxX1 -= 3; if (maxX2 == TmaxX2) maxX2 -= 3; } - if (block.lock()->hasInterpolationFlagFC(DIR_MM0) && !block.lock()->hasInterpolationFlagFC(DIR_M00) && - !block.lock()->hasInterpolationFlagFC(DIR_0M0)) { + if (block.lock()->hasInterpolationFlagFC(dMM0) && !block.lock()->hasInterpolationFlagFC(dM00) && + !block.lock()->hasInterpolationFlagFC(d0M0)) { if (minX1 == TminX1) minX1 += 4; if (minX2 == TminX2) minX2 += 4; } - if (block.lock()->hasInterpolationFlagFC(DIR_PM0) && !block.lock()->hasInterpolationFlagFC(DIR_P00) && - !block.lock()->hasInterpolationFlagFC(DIR_0M0)) { + if (block.lock()->hasInterpolationFlagFC(dPM0) && !block.lock()->hasInterpolationFlagFC(dP00) && + !block.lock()->hasInterpolationFlagFC(d0M0)) { if (maxX1 == TmaxX1) maxX1 -= 3; if (minX2 == TminX2) minX2 += 4; } - if (block.lock()->hasInterpolationFlagFC(DIR_MP0) && !block.lock()->hasInterpolationFlagFC(DIR_0P0) && - !block.lock()->hasInterpolationFlagFC(DIR_M00)) { + if (block.lock()->hasInterpolationFlagFC(dMP0) && !block.lock()->hasInterpolationFlagFC(d0P0) && + !block.lock()->hasInterpolationFlagFC(dM00)) { if (minX1 == TminX1) minX1 += 4; if (maxX2 == TmaxX2) @@ -1374,29 +1374,29 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1, } //////T-B-E-W - if (block.lock()->hasInterpolationFlagFC(DIR_P0P) && !block.lock()->hasInterpolationFlagFC(DIR_P00) && - !block.lock()->hasInterpolationFlagFC(DIR_00P)) { + if (block.lock()->hasInterpolationFlagFC(dP0P) && !block.lock()->hasInterpolationFlagFC(dP00) && + !block.lock()->hasInterpolationFlagFC(d00P)) { if (maxX1 == TmaxX1) maxX1 -= 3; if (maxX3 == TmaxX3) maxX3 -= 3; } - if (block.lock()->hasInterpolationFlagFC(DIR_M0M) && !block.lock()->hasInterpolationFlagFC(DIR_M00) && - !block.lock()->hasInterpolationFlagFC(DIR_00M)) { + if (block.lock()->hasInterpolationFlagFC(dM0M) && !block.lock()->hasInterpolationFlagFC(dM00) && + !block.lock()->hasInterpolationFlagFC(d00M)) { if (minX1 == TminX1) minX1 += 4; if (minX3 == TminX3) minX3 += 4; } - if (block.lock()->hasInterpolationFlagFC(DIR_P0M) && !block.lock()->hasInterpolationFlagFC(DIR_P00) && - !block.lock()->hasInterpolationFlagFC(DIR_00M)) { + if (block.lock()->hasInterpolationFlagFC(dP0M) && !block.lock()->hasInterpolationFlagFC(dP00) && + !block.lock()->hasInterpolationFlagFC(d00M)) { if (maxX1 == TmaxX1) maxX1 -= 3; if (minX3 == TminX3) minX3 += 4; } - if (block.lock()->hasInterpolationFlagFC(DIR_M0P) && !block.lock()->hasInterpolationFlagFC(DIR_M00) && - !block.lock()->hasInterpolationFlagFC(DIR_00P)) { + if (block.lock()->hasInterpolationFlagFC(dM0P) && !block.lock()->hasInterpolationFlagFC(dM00) && + !block.lock()->hasInterpolationFlagFC(d00P)) { if (minX1 == TminX1) minX1 += 4; if (maxX3 == TmaxX3) @@ -1404,29 +1404,29 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1, } ////T-B-N-S - if (block.lock()->hasInterpolationFlagFC(DIR_0PP) && !block.lock()->hasInterpolationFlagFC(DIR_0P0) && - !block.lock()->hasInterpolationFlagFC(DIR_00P)) { + if (block.lock()->hasInterpolationFlagFC(d0PP) && !block.lock()->hasInterpolationFlagFC(d0P0) && + !block.lock()->hasInterpolationFlagFC(d00P)) { if (maxX2 == TmaxX2) maxX2 -= 3; if (maxX3 == TmaxX3) maxX3 -= 3; } - if (block.lock()->hasInterpolationFlagFC(DIR_0MM) && !block.lock()->hasInterpolationFlagFC(DIR_0M0) && - !block.lock()->hasInterpolationFlagFC(DIR_00M)) { + if (block.lock()->hasInterpolationFlagFC(d0MM) && !block.lock()->hasInterpolationFlagFC(d0M0) && + !block.lock()->hasInterpolationFlagFC(d00M)) { if (minX2 == TminX2) minX2 += 4; if (minX3 == TminX3) minX3 += 4; } - if (block.lock()->hasInterpolationFlagFC(DIR_0PM) && !block.lock()->hasInterpolationFlagFC(DIR_0P0) && - !block.lock()->hasInterpolationFlagFC(DIR_00M)) { + if (block.lock()->hasInterpolationFlagFC(d0PM) && !block.lock()->hasInterpolationFlagFC(d0P0) && + !block.lock()->hasInterpolationFlagFC(d00M)) { if (maxX2 == TmaxX2) maxX2 -= 3; if (minX3 == TminX3) minX3 += 4; } - if (block.lock()->hasInterpolationFlagFC(DIR_0MP) && !block.lock()->hasInterpolationFlagFC(DIR_0M0) && - !block.lock()->hasInterpolationFlagFC(DIR_00P)) { + if (block.lock()->hasInterpolationFlagFC(d0MP) && !block.lock()->hasInterpolationFlagFC(d0M0) && + !block.lock()->hasInterpolationFlagFC(d00P)) { if (minX2 == TminX2) minX2 += 4; if (maxX3 == TmaxX3) @@ -1434,8 +1434,8 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMinMax(int &minX1, } // if - // (block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_PPP)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_P0P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_0PP)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_PP0)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_00P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_0P0) - // && !block.lock()->hasInterpolationFlagFC(D3Q27System::DIR_P00)) + // (block.lock()->hasInterpolationFlagFC(D3Q27System::dPPP)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::dP0P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::d0PP)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::dPP0)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::d00P)&&!block.lock()->hasInterpolationFlagFC(D3Q27System::d0P0) + // && !block.lock()->hasInterpolationFlagFC(D3Q27System::dP00)) //{ // if (maxX1==TmaxX1) maxX1 -= 3; // if (maxX2==TmaxX2) maxX2 -= 3; @@ -1462,8 +1462,8 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMins(int &minX1, in using namespace vf::lbm::dir; switch (sendDir) { - case DIR_P00: - case DIR_M00: + case dP00: + case dM00: if (connType == OddEvenSE) minX2 += oMinX2; if (connType == OddOddNE) { @@ -1473,8 +1473,8 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMins(int &minX1, in if (connType == EvenOddNW) minX3 += oMinX3; break; - case DIR_0P0: - case DIR_0M0: + case d0P0: + case d0M0: if (connType == OddEvenSE) minX1 += oMinX1; if (connType == OddOddNE) { @@ -1484,8 +1484,8 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMins(int &minX1, in if (connType == EvenOddNW) minX3 += oMinX3; break; - case DIR_00P: - case DIR_00M: + case d00P: + case d00M: if (connType == OddEvenSE) minX1 += oMinX1; if (connType == OddOddNE) { @@ -1497,10 +1497,10 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMins(int &minX1, in break; ///// - case DIR_PP0: - case DIR_MM0: - case DIR_PM0: - case DIR_MP0: + case dPP0: + case dMM0: + case dPM0: + case dMP0: // case SW: if (connType == OddEvenSE) // minX2 += oMinX2; @@ -1513,10 +1513,10 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMins(int &minX1, in break; ////// - case DIR_P0P: - case DIR_M0M: - case DIR_P0M: - case DIR_M0P: + case dP0P: + case dM0M: + case dP0M: + case dM0P: if (connType == OddEvenSE) // minX1 += oMinX1; if (connType == OddOddNE) { @@ -1528,10 +1528,10 @@ void FineToCoarseVectorConnector<VectorTransmitter>::getLocalMins(int &minX1, in break; // ////// - case DIR_0PP: - case DIR_0MM: - case DIR_0PM: - case DIR_0MP: + case d0PP: + case d0MM: + case d0PM: + case d0MP: if (connType == OddEvenSE) minX1 += oMinX1; if (connType == OddOddNE) { diff --git a/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseVectorConnectorTest.cpp b/src/cpu/core/Connectors/FineToCoarseVectorConnectorTest.cpp similarity index 98% rename from src/cpu/VirtualFluidsCore/Connectors/FineToCoarseVectorConnectorTest.cpp rename to src/cpu/core/Connectors/FineToCoarseVectorConnectorTest.cpp index 1d400f74e8e4a2def9419c4e5288c512db7af936..81d56102ef98b6dfd6695e087fcad181dbcac7e0 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/FineToCoarseVectorConnectorTest.cpp +++ b/src/cpu/core/Connectors/FineToCoarseVectorConnectorTest.cpp @@ -27,7 +27,7 @@ TEST_F(FineToCoarseVectorConnectorTest, getLocalMinMax) { using namespace vf::lbm::dir; - int sendDir = DIR_P00; + int sendDir = dP00; block->setInterpolationFlagFC(sendDir); //FineToCoarseVectorConnector(SPtr<Block3D> block, VectorTransmitterPtr sender, VectorTransmitterPtr receiver, //int sendDir, InterpolationProcessorPtr iprocessor, CFconnectorType connType); diff --git a/src/cpu/VirtualFluidsCore/Connectors/FullDirectConnector.cpp b/src/cpu/core/Connectors/FullDirectConnector.cpp similarity index 87% rename from src/cpu/VirtualFluidsCore/Connectors/FullDirectConnector.cpp rename to src/cpu/core/Connectors/FullDirectConnector.cpp index 7a12ef1bb30796bd2aa24fd6c61c07f26295950d..d40fc36cb9a15e1b7d1664be2ab2beeee74df394 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/FullDirectConnector.cpp +++ b/src/cpu/core/Connectors/FullDirectConnector.cpp @@ -62,7 +62,7 @@ void FullDirectConnector::exchangeData() using namespace vf::lbm::dir; // EAST - if (sendDir == DIR_P00) { + if (sendDir == dP00) { for (int x3 = 1; x3 < maxX3; x3++) { for (int x2 = 1; x2 < maxX2; x2++) { exchangeData(maxX1 - 1, x2, x3, 0, x2, x3); @@ -70,7 +70,7 @@ void FullDirectConnector::exchangeData() } } // WEST - else if (sendDir == DIR_M00) { + else if (sendDir == dM00) { for (int x3 = 1; x3 < maxX3; x3++) { for (int x2 = 1; x2 < maxX2; x2++) { exchangeData(1, x2, x3, maxX1, x2, x3); @@ -78,7 +78,7 @@ void FullDirectConnector::exchangeData() } } // NORTH - else if (sendDir == DIR_0P0) { + else if (sendDir == d0P0) { for (int x3 = 1; x3 < maxX3; x3++) { for (int x1 = 1; x1 < maxX1; x1++) { exchangeData(x1, maxX2 - 1, x3, x1, 0, x3); @@ -86,7 +86,7 @@ void FullDirectConnector::exchangeData() } } // SOUTH - else if (sendDir == DIR_0M0) { + else if (sendDir == d0M0) { for (int x3 = 1; x3 < maxX3; x3++) { for (int x1 = 1; x1 < maxX1; x1++) { exchangeData(x1, 1, x3, x1, maxX2, x3); @@ -95,7 +95,7 @@ void FullDirectConnector::exchangeData() } // TOP - else if (sendDir == DIR_00P) { + else if (sendDir == d00P) { for (int x2 = 1; x2 < maxX2; x2++) { for (int x1 = 1; x1 < maxX1; x1++) { exchangeData(x1, x2, maxX3 - 1, x1, x2, 0); @@ -103,7 +103,7 @@ void FullDirectConnector::exchangeData() } } // BOTTOM - else if (sendDir == DIR_00M) { + else if (sendDir == d00M) { for (int x2 = 1; x2 < maxX2; x2++) { for (int x1 = 1; x1 < maxX1; x1++) { exchangeData(x1, x2, 1, x1, x2, maxX3); @@ -111,77 +111,77 @@ void FullDirectConnector::exchangeData() } } // NORTHEAST - else if (sendDir == DIR_PP0) { + else if (sendDir == dPP0) { for (int x3 = 1; x3 < maxX3; x3++) { exchangeData(maxX1 - 1, maxX2 - 1, x3, 0, 0, x3); } } // NORTHWEST - else if (sendDir == DIR_MP0) { + else if (sendDir == dMP0) { for (int x3 = 1; x3 < maxX3; x3++) { exchangeData(1, maxX2 - 1, x3, maxX1, 0, x3); } } // SOUTHWEST - else if (sendDir == DIR_MM0) { + else if (sendDir == dMM0) { for (int x3 = 1; x3 < maxX3; x3++) { exchangeData(1, 1, x3, maxX1, maxX2, x3); } } // SOUTHEAST - else if (sendDir == DIR_PM0) { + else if (sendDir == dPM0) { for (int x3 = 1; x3 < maxX3; x3++) { exchangeData(maxX1 - 1, 1, x3, 0, maxX2, x3); } - } else if (sendDir == DIR_P0P) + } else if (sendDir == dP0P) for (int x2 = 1; x2 < maxX2; x2++) { exchangeData(maxX1 - 1, x2, maxX3 - 1, 0, x2, 0); } - else if (sendDir == DIR_M0M) + else if (sendDir == dM0M) for (int x2 = 1; x2 < maxX2; x2++) { exchangeData(1, x2, 1, maxX1, x2, maxX3); } - else if (sendDir == DIR_P0M) + else if (sendDir == dP0M) for (int x2 = 1; x2 < maxX2; x2++) { exchangeData(maxX1 - 1, x2, 1, 0, x2, maxX3); } - else if (sendDir == DIR_M0P) + else if (sendDir == dM0P) for (int x2 = 1; x2 < maxX2; x2++) { exchangeData(1, x2, maxX3 - 1, maxX1, x2, 0); } - else if (sendDir == DIR_0PP) + else if (sendDir == d0PP) for (int x1 = 1; x1 < maxX1; x1++) { exchangeData(x1, maxX2 - 1, maxX3 - 1, x1, 0, 0); } - else if (sendDir == DIR_0MM) + else if (sendDir == d0MM) for (int x1 = 1; x1 < maxX1; x1++) { exchangeData(x1, 1, 1, x1, maxX2, maxX3); } - else if (sendDir == DIR_0PM) + else if (sendDir == d0PM) for (int x1 = 1; x1 < maxX1; x1++) { exchangeData(x1, maxX2 - 1, 1, x1, 0, maxX3); } - else if (sendDir == DIR_0MP) + else if (sendDir == d0MP) for (int x1 = 1; x1 < maxX1; x1++) { exchangeData(x1, 1, maxX3 - 1, x1, maxX2, 0); } - else if (sendDir == DIR_MMP) { + else if (sendDir == dMMP) { exchangeData(1, 1, maxX3 - 1, maxX1, maxX2, 0); - } else if (sendDir == DIR_PMP) { + } else if (sendDir == dPMP) { exchangeData(maxX1 - 1, 1, maxX3 - 1, 0, maxX2, 0); - } else if (sendDir == DIR_MPP) { + } else if (sendDir == dMPP) { exchangeData(1, maxX2 - 1, maxX3 - 1, maxX1, 0, 0); - } else if (sendDir == DIR_PPP) { + } else if (sendDir == dPPP) { exchangeData(maxX1 - 1, maxX2 - 1, maxX3 - 1, 0, 0, 0); - } else if (sendDir == DIR_MMM) { + } else if (sendDir == dMMM) { exchangeData(1, 1, 1, maxX1, maxX2, maxX3); - } else if (sendDir == DIR_PMM) { + } else if (sendDir == dPMM) { exchangeData(maxX1 - 1, 1, 1, 0, maxX2, maxX3); - } else if (sendDir == DIR_MPM) { + } else if (sendDir == dMPM) { exchangeData(1, maxX2 - 1, 1, maxX1, 0, maxX3); - } else if (sendDir == DIR_PPM) { + } else if (sendDir == dPPM) { exchangeData(maxX1 - 1, maxX2 - 1, 1, 0, 0, maxX3); } else UB_THROW(UbException(UB_EXARGS, "unknown dir")); diff --git a/src/cpu/VirtualFluidsCore/Connectors/FullDirectConnector.h b/src/cpu/core/Connectors/FullDirectConnector.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/FullDirectConnector.h rename to src/cpu/core/Connectors/FullDirectConnector.h diff --git a/src/cpu/VirtualFluidsCore/Connectors/FullVectorConnector.cpp b/src/cpu/core/Connectors/FullVectorConnector.cpp similarity index 81% rename from src/cpu/VirtualFluidsCore/Connectors/FullVectorConnector.cpp rename to src/cpu/core/Connectors/FullVectorConnector.cpp index d4cb17d156016815b20f8420a4699a428899af51..ff501a8ecfc123ffba8eb1a0906126281b22ead8 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/FullVectorConnector.cpp +++ b/src/cpu/core/Connectors/FullVectorConnector.cpp @@ -65,7 +65,7 @@ void FullVectorConnector::fillData() int index = 0; // EAST - if (sendDir == DIR_P00) { + if (sendDir == dP00) { for (int x3 = 1; x3 < maxX3; x3++) { for (int x2 = 1; x2 < maxX2; x2++) { fillData(sdata, index, maxX1 - 1, x2, x3); @@ -73,7 +73,7 @@ void FullVectorConnector::fillData() } } // WEST - else if (sendDir == DIR_M00) { + else if (sendDir == dM00) { for (int x3 = 1; x3 < maxX3; x3++) { for (int x2 = 1; x2 < maxX2; x2++) { fillData(sdata, index, 1, x2, x3); @@ -81,7 +81,7 @@ void FullVectorConnector::fillData() } } // NORTH - else if (sendDir == DIR_0P0) { + else if (sendDir == d0P0) { for (int x3 = 1; x3 < maxX3; x3++) { for (int x1 = 1; x1 < maxX1; x1++) { fillData(sdata, index, x1, maxX2 - 1, x3); @@ -89,7 +89,7 @@ void FullVectorConnector::fillData() } } // SOUTH - else if (sendDir == DIR_0M0) { + else if (sendDir == d0M0) { for (int x3 = 1; x3 < maxX3; x3++) { for (int x1 = 1; x1 < maxX1; x1++) { fillData(sdata, index, x1, 1, x3); @@ -97,7 +97,7 @@ void FullVectorConnector::fillData() } } // TOP - else if (sendDir == DIR_00P) { + else if (sendDir == d00P) { for (int x2 = 1; x2 < maxX2; x2++) { for (int x1 = 1; x1 < maxX1; x1++) { fillData(sdata, index, x1, x2, maxX3 - 1); @@ -105,7 +105,7 @@ void FullVectorConnector::fillData() } } // BOTTOM - else if (sendDir == DIR_00M) { + else if (sendDir == d00M) { for (int x2 = 1; x2 < maxX2; x2++) { for (int x1 = 1; x1 < maxX1; x1++) { fillData(sdata, index, x1, x2, 1); @@ -113,24 +113,24 @@ void FullVectorConnector::fillData() } } // NE NW SW SE - else if (sendDir == DIR_PP0 || sendDir == DIR_MP0 || sendDir == DIR_MM0 || - sendDir == DIR_PM0) { + else if (sendDir == dPP0 || sendDir == dMP0 || sendDir == dMM0 || + sendDir == dPM0) { int x1 = 0; int x2 = 0; switch (sendDir) { - case DIR_PP0: + case dPP0: x1 = maxX1 - 1; x2 = maxX2 - 1; break; - case DIR_MP0: + case dMP0: x1 = 1; x2 = maxX2 - 1; break; - case DIR_MM0: + case dMM0: x1 = 1; x2 = 1; break; - case DIR_PM0: + case dPM0: x1 = maxX1 - 1; x2 = 1; break; @@ -140,24 +140,24 @@ void FullVectorConnector::fillData() } } // TE TW BW BE - else if (sendDir == DIR_P0P || sendDir == DIR_M0P || sendDir == DIR_M0M || - sendDir == DIR_P0M) { + else if (sendDir == dP0P || sendDir == dM0P || sendDir == dM0M || + sendDir == dP0M) { int x1 = 0; int x3 = 0; switch (sendDir) { - case DIR_P0P: + case dP0P: x1 = maxX1 - 1; x3 = maxX3 - 1; break; - case DIR_M0P: + case dM0P: x1 = 1; x3 = maxX3 - 1; break; - case DIR_M0M: + case dM0M: x1 = 1; x3 = 1; break; - case DIR_P0M: + case dP0M: x1 = maxX1 - 1; x3 = 1; break; @@ -167,24 +167,24 @@ void FullVectorConnector::fillData() } } // TN BN BS TS - else if (sendDir == DIR_0PP || sendDir == DIR_0PM || sendDir == DIR_0MM || - sendDir == DIR_0MP) { + else if (sendDir == d0PP || sendDir == d0PM || sendDir == d0MM || + sendDir == d0MP) { int x2 = 0; int x3 = 0; switch (sendDir) { - case DIR_0PP: + case d0PP: x3 = maxX3 - 1; x2 = maxX2 - 1; break; - case DIR_0PM: + case d0PM: x3 = 1; x2 = maxX2 - 1; break; - case DIR_0MM: + case d0MM: x3 = 1; x2 = 1; break; - case DIR_0MP: + case d0MP: x3 = maxX3 - 1; x2 = 1; break; @@ -194,49 +194,49 @@ void FullVectorConnector::fillData() } } // TNE TNW TSW TSE BNE BNW BSW BSE - else if (sendDir == DIR_PPP || sendDir == DIR_MPP || sendDir == DIR_MMP || - sendDir == DIR_PMP || sendDir == DIR_PPM || sendDir == DIR_MPM || - sendDir == DIR_MMM || sendDir == DIR_PMM) { + else if (sendDir == dPPP || sendDir == dMPP || sendDir == dMMP || + sendDir == dPMP || sendDir == dPPM || sendDir == dMPM || + sendDir == dMMM || sendDir == dPMM) { int x1 = 0; int x2 = 0; int x3 = 0; switch (sendDir) { - case DIR_PPP: + case dPPP: x1 = maxX1 - 1; x2 = maxX2 - 1; x3 = maxX3 - 1; break; - case DIR_MPP: + case dMPP: x1 = 1; x2 = maxX2 - 1; x3 = maxX3 - 1; break; - case DIR_MMP: + case dMMP: x1 = 1; x2 = 1; x3 = maxX3 - 1; break; - case DIR_PMP: + case dPMP: x1 = maxX1 - 1; x2 = 1; x3 = maxX3 - 1; break; - case DIR_PPM: + case dPPM: x1 = maxX1 - 1; x2 = maxX2 - 1; x3 = 1; break; - case DIR_MPM: + case dMPM: x1 = 1; x2 = maxX2 - 1; x3 = 1; break; - case DIR_MMM: + case dMMM: x1 = 1; x2 = 1; x3 = 1; break; - case DIR_PMM: + case dPMM: x1 = maxX1 - 1; x2 = 1; x3 = 1; @@ -261,37 +261,37 @@ void FullVectorConnector::distributeData() int index = 0; - if (sendDir == DIR_M00) { + if (sendDir == dM00) { for (int x3 = 1; x3 < maxX3; x3++) { for (int x2 = 1; x2 < maxX2; x2++) { distributeData(rdata, index, 0, x2, x3); } } - } else if (sendDir == DIR_P00) { + } else if (sendDir == dP00) { for (int x3 = 1; x3 < maxX3; x3++) { for (int x2 = 1; x2 < maxX2; x2++) { distributeData(rdata, index, maxX1, x2, x3); } } - } else if (sendDir == DIR_0M0) { + } else if (sendDir == d0M0) { for (int x3 = 1; x3 < maxX3; x3++) { for (int x1 = 1; x1 < maxX1; x1++) { distributeData(rdata, index, x1, 0, x3); } } - } else if (sendDir == DIR_0P0) { + } else if (sendDir == d0P0) { for (int x3 = 1; x3 < maxX3; x3++) { for (int x1 = 1; x1 < maxX1; x1++) { distributeData(rdata, index, x1, maxX2, x3); } } - } else if (sendDir == DIR_00M) { + } else if (sendDir == d00M) { for (int x2 = 1; x2 < maxX2; x2++) { for (int x1 = 1; x1 < maxX1; x1++) { distributeData(rdata, index, x1, x2, 0); } } - } else if (sendDir == DIR_00P) { + } else if (sendDir == d00P) { for (int x2 = 1; x2 < maxX2; x2++) { for (int x1 = 1; x1 < maxX1; x1++) { distributeData(rdata, index, x1, x2, maxX3); @@ -299,25 +299,25 @@ void FullVectorConnector::distributeData() } } // NE NW SW SE - else if (sendDir == DIR_PP0 || sendDir == DIR_MP0 || sendDir == DIR_MM0 || - sendDir == DIR_PM0) { + else if (sendDir == dPP0 || sendDir == dMP0 || sendDir == dMM0 || + sendDir == dPM0) { int x1 = 0; int x2 = 0; switch (sendDir) // wenn sendir NE dann kommen werte von SW { - case DIR_PP0: + case dPP0: x1 = maxX1; x2 = maxX2; break; - case DIR_MP0: + case dMP0: x1 = 0; x2 = maxX2; break; - case DIR_MM0: + case dMM0: x1 = 0; x2 = 0; break; - case DIR_PM0: + case dPM0: x1 = maxX1; x2 = 0; break; @@ -328,27 +328,27 @@ void FullVectorConnector::distributeData() } // TE TW BW BE - else if (sendDir == DIR_P0P || sendDir == DIR_M0P || sendDir == DIR_M0M || - sendDir == DIR_P0M) + else if (sendDir == dP0P || sendDir == dM0P || sendDir == dM0M || + sendDir == dP0M) { int x1 = 0; int x3 = 0; switch (sendDir) // wenn sendir NE dann kommen werte von SW { - case DIR_P0P: + case dP0P: x1 = maxX1; x3 = maxX3; break; - case DIR_M0P: + case dM0P: x1 = 0; x3 = maxX3; break; - case DIR_M0M: + case dM0M: x1 = 0; x3 = 0; break; - case DIR_P0M: + case dP0M: x1 = maxX1; x3 = 0; break; @@ -358,24 +358,24 @@ void FullVectorConnector::distributeData() } } // TN BN BS TS - else if (sendDir == DIR_0PP || sendDir == DIR_0PM || sendDir == DIR_0MM || - sendDir == DIR_0MP) { + else if (sendDir == d0PP || sendDir == d0PM || sendDir == d0MM || + sendDir == d0MP) { int x2 = 0; int x3 = 0; switch (sendDir) { - case DIR_0PP: + case d0PP: x3 = maxX3; x2 = maxX2; break; - case DIR_0PM: + case d0PM: x3 = 0; x2 = maxX2; break; - case DIR_0MM: + case d0MM: x3 = 0; x2 = 0; break; - case DIR_0MP: + case d0MP: x3 = maxX3; x2 = 0; break; @@ -385,50 +385,50 @@ void FullVectorConnector::distributeData() } } // TNE TNW TSW TSE BNE BNW BSW BSE - else if (sendDir == DIR_PPP || sendDir == DIR_MPP || sendDir == DIR_MMP || - sendDir == DIR_PMP || sendDir == DIR_PPM || sendDir == DIR_MPM || - sendDir == DIR_MMM || sendDir == DIR_PMM) { + else if (sendDir == dPPP || sendDir == dMPP || sendDir == dMMP || + sendDir == dPMP || sendDir == dPPM || sendDir == dMPM || + sendDir == dMMM || sendDir == dPMM) { int x1 = 0; int x2 = 0; int x3 = 0; switch (sendDir) { - case DIR_PPP: + case dPPP: x1 = maxX1; x2 = maxX2; x3 = maxX3; break; - case DIR_MPP: + case dMPP: x1 = 0; x2 = maxX2; x3 = maxX3; break; - case DIR_MMP: + case dMMP: x1 = 0; x2 = 0; x3 = maxX3; break; - case DIR_PMP: + case dPMP: x1 = maxX1; x2 = 0; x3 = maxX3; break; - case DIR_PPM: + case dPPM: x1 = maxX1; x2 = maxX2; x3 = 0; break; - case DIR_MPM: + case dMPM: x1 = 0; x2 = maxX2; x3 = 0; break; - case DIR_MMM: + case dMMM: x1 = 0; x2 = 0; x3 = 0; break; - case DIR_PMM: + case dPMM: x1 = maxX1; x2 = 0; x3 = 0; diff --git a/src/cpu/VirtualFluidsCore/Connectors/FullVectorConnector.h b/src/cpu/core/Connectors/FullVectorConnector.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/FullVectorConnector.h rename to src/cpu/core/Connectors/FullVectorConnector.h diff --git a/src/cpu/VirtualFluidsCore/Connectors/LocalBlock3DConnector.h b/src/cpu/core/Connectors/LocalBlock3DConnector.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/LocalBlock3DConnector.h rename to src/cpu/core/Connectors/LocalBlock3DConnector.h diff --git a/src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullDirectConnector.cpp b/src/cpu/core/Connectors/OneDistributionFullDirectConnector.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullDirectConnector.cpp rename to src/cpu/core/Connectors/OneDistributionFullDirectConnector.cpp diff --git a/src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullDirectConnector.h b/src/cpu/core/Connectors/OneDistributionFullDirectConnector.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullDirectConnector.h rename to src/cpu/core/Connectors/OneDistributionFullDirectConnector.h diff --git a/src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullVectorConnector.cpp b/src/cpu/core/Connectors/OneDistributionFullVectorConnector.cpp similarity index 75% rename from src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullVectorConnector.cpp rename to src/cpu/core/Connectors/OneDistributionFullVectorConnector.cpp index be66dfb5b0785198e826f3fe2017aa479b92b53a..2ce640d47d00836d8b289ccb159a07455c280b45 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullVectorConnector.cpp +++ b/src/cpu/core/Connectors/OneDistributionFullVectorConnector.cpp @@ -21,51 +21,51 @@ void OneDistributionFullVectorConnector::init() int anz = 27; switch (sendDir) { - case DIR_000: + case d000: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break; - case DIR_P00: - case DIR_M00: + case dP00: + case dM00: sender->getData().resize(maxX2 * maxX3 * anz, c0o1); break; - case DIR_0P0: - case DIR_0M0: + case d0P0: + case d0M0: sender->getData().resize(maxX1 * maxX3 * anz, c0o1); break; - case DIR_00P: - case DIR_00M: + case d00P: + case d00M: sender->getData().resize(maxX1 * maxX2 * anz, c0o1); break; - case DIR_PP0: - case DIR_MM0: - case DIR_PM0: - case DIR_MP0: + case dPP0: + case dMM0: + case dPM0: + case dMP0: sender->getData().resize(maxX3 * anz, c0o1); break; - case DIR_P0P: - case DIR_M0M: - case DIR_P0M: - case DIR_M0P: + case dP0P: + case dM0M: + case dP0M: + case dM0P: sender->getData().resize(maxX2 * anz, c0o1); break; - case DIR_0PP: - case DIR_0MM: - case DIR_0PM: - case DIR_0MP: + case d0PP: + case d0MM: + case d0PM: + case d0MP: sender->getData().resize(maxX1 * anz, c0o1); break; - case DIR_PPP: - case DIR_MMM: - case DIR_PPM: - case DIR_MMP: - case DIR_PMP: - case DIR_MPM: - case DIR_PMM: - case DIR_MPP: + case dPPP: + case dMMM: + case dPPM: + case dMMP: + case dPMP: + case dMPM: + case dPMM: + case dMPP: sender->getData().resize(anz, c0o1); break; diff --git a/src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullVectorConnector.h b/src/cpu/core/Connectors/OneDistributionFullVectorConnector.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/OneDistributionFullVectorConnector.h rename to src/cpu/core/Connectors/OneDistributionFullVectorConnector.h diff --git a/src/cpu/VirtualFluidsCore/Connectors/RemoteBlock3DConnector.cpp b/src/cpu/core/Connectors/RemoteBlock3DConnector.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/RemoteBlock3DConnector.cpp rename to src/cpu/core/Connectors/RemoteBlock3DConnector.cpp diff --git a/src/cpu/VirtualFluidsCore/Connectors/RemoteBlock3DConnector.h b/src/cpu/core/Connectors/RemoteBlock3DConnector.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/RemoteBlock3DConnector.h rename to src/cpu/core/Connectors/RemoteBlock3DConnector.h diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.cpp b/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.cpp similarity index 94% rename from src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.cpp rename to src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.cpp index 4856743128041bbfef3048fb53c9d8110de498fb..ce4f88cb7760c412a27fa53e9823353bcfa1f494 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.cpp +++ b/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.cpp @@ -96,7 +96,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() int maxX3m3 = maxX3 - 3; // EAST - if (sendDir == DIR_P00) { + if (sendDir == dP00) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { exchangeData(maxX1m3, x2, x3, minX1, x2, x3); @@ -105,7 +105,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() } } // WEST - else if (sendDir == DIR_M00) { + else if (sendDir == dM00) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { exchangeData(minX1p3, x2, x3, maxX1, x2, x3); @@ -114,7 +114,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() } } // NORTH - else if (sendDir == DIR_0P0) { + else if (sendDir == d0P0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { exchangeData(x1, maxX2m3, x3, x1, minX2, x3); @@ -123,7 +123,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() } } // SOUTH - else if (sendDir == DIR_0M0) { + else if (sendDir == d0M0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { exchangeData(x1, minX2p3, x3, x1, maxX2, x3); @@ -133,7 +133,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() } // TOP - else if (sendDir == DIR_00P) { + else if (sendDir == d00P) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { exchangeData(x1, x2, maxX3m3, x1, x2, minX3); @@ -142,7 +142,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() } } // BOTTOM - else if (sendDir == DIR_00M) { + else if (sendDir == d00M) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { exchangeData(x1, x2, minX3p3, x1, x2, maxX3); @@ -151,7 +151,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() } } // NORTHEAST - else if (sendDir == DIR_PP0) { + else if (sendDir == dPP0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { exchangeData(maxX1m3, maxX2m3, x3, minX1, minX2, x3); exchangeData(maxX1m2, maxX2m2, x3, minX1p1, minX2p1, x3); @@ -160,7 +160,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() } } // NORTHWEST - else if (sendDir == DIR_MP0) { + else if (sendDir == dMP0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { exchangeData(minX1p3, maxX2m3, x3, maxX1, minX2, x3); exchangeData(minX1p2, maxX2m2, x3, maxX1m1, minX2p1, x3); @@ -169,7 +169,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() } } // SOUTHWEST - else if (sendDir == DIR_MM0) { + else if (sendDir == dMM0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { exchangeData(minX1p3, minX2p3, x3, maxX1, maxX2, x3); exchangeData(minX1p2, minX2p2, x3, maxX1m1, maxX2m1, x3); @@ -178,70 +178,70 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() } } // SOUTHEAST - else if (sendDir == DIR_PM0) { + else if (sendDir == dPM0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { exchangeData(maxX1m3, minX2p3, x3, minX1, maxX2, x3); exchangeData(maxX1m2, minX2p2, x3, minX1p1, maxX2m1, x3); exchangeData(maxX1m3, minX2p2, x3, minX1, maxX2m1, x3); exchangeData(maxX1m2, minX2p3, x3, minX1p1, maxX2, x3); } - } else if (sendDir == DIR_P0P) + } else if (sendDir == dP0P) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { exchangeData(maxX1m3, x2, maxX3m3, minX1, x2, minX3); exchangeData(maxX1m2, x2, maxX3m2, minX1p1, x2, minX3p1); exchangeData(maxX1m3, x2, maxX3m2, minX1, x2, minX3p1); exchangeData(maxX1m2, x2, maxX3m3, minX1p1, x2, minX3); } - else if (sendDir == DIR_M0M) + else if (sendDir == dM0M) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { exchangeData(minX1p3, x2, minX3p3, maxX1, x2, maxX3); exchangeData(minX1p2, x2, minX3p2, maxX1m1, x2, maxX3m1); exchangeData(minX1p3, x2, minX3p2, maxX1, x2, maxX3m1); exchangeData(minX1p2, x2, minX3p3, maxX1m1, x2, maxX3); } - else if (sendDir == DIR_P0M) + else if (sendDir == dP0M) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { exchangeData(maxX1m3, x2, minX3p3, minX1, x2, maxX3); exchangeData(maxX1m2, x2, minX3p2, minX1p1, x2, maxX3m1); exchangeData(maxX1m3, x2, minX3p2, minX1, x2, maxX3m1); exchangeData(maxX1m2, x2, minX3p3, minX1p1, x2, maxX3); } - else if (sendDir == DIR_M0P) + else if (sendDir == dM0P) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { exchangeData(minX1p3, x2, maxX3m3, maxX1, x2, minX3); exchangeData(minX1p2, x2, maxX3m2, maxX1m1, x2, minX3p1); exchangeData(minX1p3, x2, maxX3m2, maxX1, x2, minX3p1); exchangeData(minX1p2, x2, maxX3m3, maxX1m1, x2, minX3); } - else if (sendDir == DIR_0PP) + else if (sendDir == d0PP) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { exchangeData(x1, maxX2m3, maxX3m3, x1, minX2, minX3); exchangeData(x1, maxX2m2, maxX3m2, x1, minX2p1, minX3p1); exchangeData(x1, maxX2m3, maxX3m2, x1, minX2, minX3p1); exchangeData(x1, maxX2m2, maxX3m3, x1, minX2p1, minX3); } - else if (sendDir == DIR_0MM) + else if (sendDir == d0MM) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { exchangeData(x1, minX2p3, minX3p3, x1, maxX2, maxX3); exchangeData(x1, minX2p2, minX3p2, x1, maxX2m1, maxX3m1); exchangeData(x1, minX2p3, minX3p2, x1, maxX2, maxX3m1); exchangeData(x1, minX2p2, minX3p3, x1, maxX2m1, maxX3); } - else if (sendDir == DIR_0PM) + else if (sendDir == d0PM) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { exchangeData(x1, maxX2m3, minX3p3, x1, minX2, maxX3); exchangeData(x1, maxX2m2, minX3p2, x1, minX2p1, maxX3m1); exchangeData(x1, maxX2m3, minX3p2, x1, minX2, maxX3m1); exchangeData(x1, maxX2m2, minX3p3, x1, minX2p1, maxX3); } - else if (sendDir == DIR_0MP) + else if (sendDir == d0MP) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { exchangeData(x1, minX2p3, maxX3m3, x1, maxX2, minX3); exchangeData(x1, minX2p2, maxX3m2, x1, maxX2m1, minX3p1); exchangeData(x1, minX2p3, maxX3m2, x1, maxX2, minX3p1); exchangeData(x1, minX2p2, maxX3m3, x1, maxX2m1, minX3); } - else if (sendDir == DIR_MMP) { + else if (sendDir == dMMP) { exchangeData(minX1p3, minX2p3, maxX3m3, maxX1, maxX2, minX3); exchangeData(minX1p2, minX2p2, maxX3m2, maxX1m1, maxX2m1, minX3p1); exchangeData(minX1p3, minX2p2, maxX3m2, maxX1, maxX2m1, minX3p1); @@ -250,7 +250,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() exchangeData(minX1p3, minX2p3, maxX3m2, maxX1, maxX2, minX3p1); exchangeData(minX1p3, minX2p2, maxX3m3, maxX1, maxX2m1, minX3); exchangeData(minX1p2, minX2p3, maxX3m3, maxX1m1, maxX2, minX3); - } else if (sendDir == DIR_PMP) { + } else if (sendDir == dPMP) { exchangeData(maxX1m3, minX1p3, maxX3m3, minX1, maxX2, minX3); exchangeData(maxX1m2, minX1p2, maxX3m2, minX1p1, maxX2m1, minX3p1); exchangeData(maxX1m3, minX1p2, maxX3m2, minX1, maxX2m1, minX3p1); @@ -259,7 +259,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() exchangeData(maxX1m3, minX1p3, maxX3m2, minX1, maxX2, minX3p1); exchangeData(maxX1m3, minX1p2, maxX3m3, minX1, maxX2m1, minX3); exchangeData(maxX1m2, minX1p3, maxX3m3, minX1p1, maxX2, minX3); - } else if (sendDir == DIR_MPP) { + } else if (sendDir == dMPP) { exchangeData(minX1p3, maxX2m3, maxX3m3, maxX1, minX2, minX3); exchangeData(minX1p2, maxX2m2, maxX3m2, maxX1m1, minX2p1, minX3p1); exchangeData(minX1p3, maxX2m2, maxX3m2, maxX1, minX2p1, minX3p1); @@ -268,7 +268,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() exchangeData(minX1p3, maxX2m3, maxX3m2, maxX1, minX2, minX3p1); exchangeData(minX1p3, maxX2m2, maxX3m3, maxX1, minX2p1, minX3); exchangeData(minX1p2, maxX2m3, maxX3m3, maxX1m1, minX2, minX3); - } else if (sendDir == DIR_PPP) { + } else if (sendDir == dPPP) { exchangeData(maxX1m3, maxX2m3, maxX3m3, minX1, minX2, minX3); exchangeData(maxX1m2, maxX2m2, maxX3m2, minX1p1, minX2p1, minX3p1); exchangeData(maxX1m3, maxX2m2, maxX3m2, minX1, minX2p1, minX3p1); @@ -277,7 +277,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() exchangeData(maxX1m3, maxX2m3, maxX3m2, minX1, minX2, minX3p1); exchangeData(maxX1m3, maxX2m2, maxX3m3, minX1, minX2p1, minX3); exchangeData(maxX1m2, maxX2m3, maxX3m3, minX1p1, minX2, minX3); - } else if (sendDir == DIR_MMM) { + } else if (sendDir == dMMM) { exchangeData(minX1p3, minX2p3, minX3p3, maxX1, maxX2, maxX3); exchangeData(minX1p2, minX2p2, minX3p2, maxX1m1, maxX2m1, maxX3m1); exchangeData(minX1p3, minX2p2, minX3p2, maxX1, maxX2m1, maxX3m1); @@ -286,7 +286,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() exchangeData(minX1p3, minX2p3, minX3p2, maxX1, maxX2, maxX3m1); exchangeData(minX1p3, minX2p2, minX3p3, maxX1, maxX2m1, maxX3); exchangeData(minX1p2, minX2p3, minX3p3, maxX1m1, maxX2, maxX3); - } else if (sendDir == DIR_PMM) { + } else if (sendDir == dPMM) { exchangeData(maxX1m3, minX2p3, minX3p3, minX1, maxX2, maxX3); exchangeData(maxX1m2, minX2p2, minX3p2, minX1p1, maxX2m1, maxX3m1); exchangeData(maxX1m3, minX2p2, minX3p2, minX1, maxX2m1, maxX3m1); @@ -295,7 +295,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() exchangeData(maxX1m3, minX2p3, minX3p2, minX1, maxX2, maxX3m1); exchangeData(maxX1m3, minX2p2, minX3p3, minX1, maxX2m1, maxX3); exchangeData(maxX1m2, minX2p3, minX3p3, minX1p1, maxX2, maxX3); - } else if (sendDir == DIR_MPM) { + } else if (sendDir == dMPM) { exchangeData(minX1p3, maxX2m3, minX3p3, maxX1, minX2, maxX3); exchangeData(minX1p2, maxX2m2, minX3p2, maxX1m1, minX2p1, maxX3m1); exchangeData(minX1p3, maxX2m2, minX3p2, maxX1, minX2p1, maxX3m1); @@ -304,7 +304,7 @@ void ThreeDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() exchangeData(minX1p3, maxX2m3, minX3p2, maxX1, minX2, maxX3m1); exchangeData(minX1p3, maxX2m2, minX3p3, maxX1, minX2p1, maxX3); exchangeData(minX1p2, maxX2m3, minX3p3, maxX1m1, minX2, maxX3); - } else if (sendDir == DIR_PPM) { + } else if (sendDir == dPPM) { exchangeData(maxX1m3, maxX2m3, minX3p3, minX1, minX2, maxX3); exchangeData(maxX1m2, maxX2m2, minX3p2, minX1p1, minX2p1, maxX3m1); exchangeData(maxX1m3, maxX2m2, minX3p2, minX1, minX2p1, maxX3m1); diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.h b/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.h rename to src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullDirectConnector.h diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.cpp b/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.cpp similarity index 90% rename from src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.cpp rename to src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.cpp index a94da62ef440c3f1ff67f48d75d0ba18c34887ec..3f6789e01d31108bb1fe4d879bde5a32a295eb51 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.cpp +++ b/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.cpp @@ -63,37 +63,37 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::init() int anz = 3*27+1; switch (sendDir) { - case DIR_000: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break; - case DIR_P00: - case DIR_M00: sender->getData().resize(maxX2*maxX3*anz*2, c0o1); break; - case DIR_0P0: - case DIR_0M0: sender->getData().resize(maxX1*maxX3*anz*2, c0o1); break; - case DIR_00P: - case DIR_00M: sender->getData().resize(maxX1*maxX2*anz*2, c0o1); break; + case d000: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break; + case dP00: + case dM00: sender->getData().resize(maxX2*maxX3*anz*2, c0o1); break; + case d0P0: + case d0M0: sender->getData().resize(maxX1*maxX3*anz*2, c0o1); break; + case d00P: + case d00M: sender->getData().resize(maxX1*maxX2*anz*2, c0o1); break; - case DIR_PP0: - case DIR_MM0: - case DIR_PM0: - case DIR_MP0: sender->getData().resize(maxX3*anz*4, c0o1); break; + case dPP0: + case dMM0: + case dPM0: + case dMP0: sender->getData().resize(maxX3*anz*4, c0o1); break; - case DIR_P0P: - case DIR_M0M: - case DIR_P0M: - case DIR_M0P: sender->getData().resize(maxX2*anz*4, c0o1); break; + case dP0P: + case dM0M: + case dP0M: + case dM0P: sender->getData().resize(maxX2*anz*4, c0o1); break; - case DIR_0PP: - case DIR_0MM: - case DIR_0PM: - case DIR_0MP: sender->getData().resize(maxX1*anz*4, c0o1); break; + case d0PP: + case d0MM: + case d0PM: + case d0MP: sender->getData().resize(maxX1*anz*4, c0o1); break; - case DIR_PPP: - case DIR_MMM: - case DIR_PPM: - case DIR_MMP: - case DIR_PMP: - case DIR_MPM: - case DIR_PMM: - case DIR_MPP: sender->getData().resize(anz*8, c0o1); break; + case dPPP: + case dMMM: + case dPPM: + case dMMP: + case dPMP: + case dMPM: + case dPMM: + case dMPP: sender->getData().resize(anz*8, c0o1); break; default: UB_THROW(UbException(UB_EXARGS, "unknown sendDir")); } @@ -143,7 +143,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData() int index = 0; // EAST - if (sendDir == DIR_P00) { + if (sendDir == dP00) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { fillData(sdata, index, maxX1m3, x2, x3); @@ -152,7 +152,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData() } } // WEST - else if (sendDir == DIR_M00) { + else if (sendDir == dM00) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { fillData(sdata, index, minX1p3, x2, x3); @@ -161,7 +161,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData() } } // NORTH - else if (sendDir == DIR_0P0) { + else if (sendDir == d0P0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { fillData(sdata, index, x1, maxX2m3, x3); @@ -170,7 +170,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData() } } // SOUTH - else if (sendDir == DIR_0M0) { + else if (sendDir == d0M0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { fillData(sdata, index, x1, minX2p3, x3); @@ -180,7 +180,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData() } // TOP - else if (sendDir == DIR_00P) { + else if (sendDir == d00P) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { fillData(sdata, index, x1, x2, maxX3m3); @@ -189,7 +189,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData() } } // BOTTOM - else if (sendDir == DIR_00M) { + else if (sendDir == d00M) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { fillData(sdata, index, x1, x2, minX3p3); @@ -198,7 +198,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData() } } // NORTHEAST - else if (sendDir == DIR_PP0) { + else if (sendDir == dPP0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { fillData(sdata, index, maxX1m3, maxX2m3, x3); fillData(sdata, index, maxX1m2, maxX2m2, x3); @@ -207,7 +207,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData() } } // NORTHWEST - else if (sendDir == DIR_MP0) { + else if (sendDir == dMP0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { fillData(sdata, index, minX1p3, maxX2m3, x3); fillData(sdata, index, minX1p2, maxX2m2, x3); @@ -216,7 +216,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData() } } // SOUTHWEST - else if (sendDir == DIR_MM0) { + else if (sendDir == dMM0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { fillData(sdata, index, minX1p3, minX2p3, x3); fillData(sdata, index, minX1p2, minX2p2, x3); @@ -225,70 +225,70 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData() } } // SOUTHEAST - else if (sendDir == DIR_PM0) { + else if (sendDir == dPM0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { fillData(sdata, index, maxX1m3, minX2p3, x3); fillData(sdata, index, maxX1m2, minX2p2, x3); fillData(sdata, index, maxX1m3, minX2p2, x3); fillData(sdata, index, maxX1m2, minX2p3, x3); } - } else if (sendDir == DIR_P0P) + } else if (sendDir == dP0P) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { fillData(sdata, index, maxX1m3, x2, maxX3m3); fillData(sdata, index, maxX1m2, x2, maxX3m2); fillData(sdata, index, maxX1m3, x2, maxX3m2); fillData(sdata, index, maxX1m2, x2, maxX3m3); } - else if (sendDir == DIR_M0M) + else if (sendDir == dM0M) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { fillData(sdata, index, minX1p3, x2, minX3p3); fillData(sdata, index, minX1p2, x2, minX3p2); fillData(sdata, index, minX1p3, x2, minX3p2); fillData(sdata, index, minX1p2, x2, minX3p3); } - else if (sendDir == DIR_P0M) + else if (sendDir == dP0M) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { fillData(sdata, index, maxX1m3, x2, minX3p3); fillData(sdata, index, maxX1m2, x2, minX3p2); fillData(sdata, index, maxX1m3, x2, minX3p2); fillData(sdata, index, maxX1m2, x2, minX3p3); } - else if (sendDir == DIR_M0P) + else if (sendDir == dM0P) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { fillData(sdata, index, minX1p3, x2, maxX3m3); fillData(sdata, index, minX1p2, x2, maxX3m2); fillData(sdata, index, minX1p3, x2, maxX3m2); fillData(sdata, index, minX1p2, x2, maxX3m3); } - else if (sendDir == DIR_0PP) + else if (sendDir == d0PP) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { fillData(sdata, index, x1, maxX2m3, maxX3m3); fillData(sdata, index, x1, maxX2m2, maxX3m2); fillData(sdata, index, x1, maxX2m3, maxX3m2); fillData(sdata, index, x1, maxX2m2, maxX3m3); } - else if (sendDir == DIR_0MM) + else if (sendDir == d0MM) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { fillData(sdata, index, x1, minX2p3, minX3p3); fillData(sdata, index, x1, minX2p2, minX3p2); fillData(sdata, index, x1, minX2p3, minX3p2); fillData(sdata, index, x1, minX2p2, minX3p3); } - else if (sendDir == DIR_0PM) + else if (sendDir == d0PM) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { fillData(sdata, index, x1, maxX2m3, minX3p3); fillData(sdata, index, x1, maxX2m2, minX3p2); fillData(sdata, index, x1, maxX2m3, minX3p2); fillData(sdata, index, x1, maxX2m2, minX3p3); } - else if (sendDir == DIR_0MP) + else if (sendDir == d0MP) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { fillData(sdata, index, x1, minX2p3, maxX3m3); fillData(sdata, index, x1, minX2p2, maxX3m2); fillData(sdata, index, x1, minX2p3, maxX3m2); fillData(sdata, index, x1, minX2p2, maxX3m3); } - else if (sendDir == DIR_MMP) { + else if (sendDir == dMMP) { fillData(sdata, index, minX1p3, minX2p3, maxX3m3); fillData(sdata, index, minX1p2, minX2p2, maxX3m2); fillData(sdata, index, minX1p3, minX2p2, maxX3m2); @@ -297,7 +297,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData() fillData(sdata, index, minX1p3, minX2p3, maxX3m2); fillData(sdata, index, minX1p3, minX2p2, maxX3m3); fillData(sdata, index, minX1p2, minX2p3, maxX3m3); - } else if (sendDir == DIR_PMP) { + } else if (sendDir == dPMP) { fillData(sdata, index, maxX1m3, minX1p3, maxX3m3); fillData(sdata, index, maxX1m2, minX1p2, maxX3m2); fillData(sdata, index, maxX1m3, minX1p2, maxX3m2); @@ -306,7 +306,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData() fillData(sdata, index, maxX1m3, minX1p3, maxX3m2); fillData(sdata, index, maxX1m3, minX1p2, maxX3m3); fillData(sdata, index, maxX1m2, minX1p3, maxX3m3); - } else if (sendDir == DIR_MPP) { + } else if (sendDir == dMPP) { fillData(sdata, index, minX1p3, maxX2m3, maxX3m3); fillData(sdata, index, minX1p2, maxX2m2, maxX3m2); fillData(sdata, index, minX1p3, maxX2m2, maxX3m2); @@ -315,7 +315,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData() fillData(sdata, index, minX1p3, maxX2m3, maxX3m2); fillData(sdata, index, minX1p3, maxX2m2, maxX3m3); fillData(sdata, index, minX1p2, maxX2m3, maxX3m3); - } else if (sendDir == DIR_PPP) { + } else if (sendDir == dPPP) { fillData(sdata, index, maxX1m3, maxX2m3, maxX3m3); fillData(sdata, index, maxX1m2, maxX2m2, maxX3m2); fillData(sdata, index, maxX1m3, maxX2m2, maxX3m2); @@ -324,7 +324,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData() fillData(sdata, index, maxX1m3, maxX2m3, maxX3m2); fillData(sdata, index, maxX1m3, maxX2m2, maxX3m3); fillData(sdata, index, maxX1m2, maxX2m3, maxX3m3); - } else if (sendDir == DIR_MMM) { + } else if (sendDir == dMMM) { fillData(sdata, index, minX1p3, minX2p3, minX3p3); fillData(sdata, index, minX1p2, minX2p2, minX3p2); fillData(sdata, index, minX1p3, minX2p2, minX3p2); @@ -333,7 +333,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData() fillData(sdata, index, minX1p3, minX2p3, minX3p2); fillData(sdata, index, minX1p3, minX2p2, minX3p3); fillData(sdata, index, minX1p2, minX2p3, minX3p3); - } else if (sendDir == DIR_PMM) { + } else if (sendDir == dPMM) { fillData(sdata, index, maxX1m3, minX2p3, minX3p3); fillData(sdata, index, maxX1m2, minX2p2, minX3p2); fillData(sdata, index, maxX1m3, minX2p2, minX3p2); @@ -342,7 +342,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData() fillData(sdata, index, maxX1m3, minX2p3, minX3p2); fillData(sdata, index, maxX1m3, minX2p2, minX3p3); fillData(sdata, index, maxX1m2, minX2p3, minX3p3); - } else if (sendDir == DIR_MPM) { + } else if (sendDir == dMPM) { fillData(sdata, index, minX1p3, maxX2m3, minX3p3); fillData(sdata, index, minX1p2, maxX2m2, minX3p2); fillData(sdata, index, minX1p3, maxX2m2, minX3p2); @@ -351,7 +351,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::fillData() fillData(sdata, index, minX1p3, maxX2m3, minX3p2); fillData(sdata, index, minX1p3, maxX2m2, minX3p3); fillData(sdata, index, minX1p2, maxX2m3, minX3p3); - } else if (sendDir == DIR_PPM) { + } else if (sendDir == dPPM) { fillData(sdata, index, maxX1m3, maxX2m3, minX3p3); fillData(sdata, index, maxX1m2, maxX2m2, minX3p2); fillData(sdata, index, maxX1m3, maxX2m2, minX3p2); @@ -407,7 +407,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData() int maxX3m2 = maxX3 - 2; //int maxX3m3 = maxX3 - 3; - if (sendDir == DIR_M00) { + if (sendDir == dM00) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { distributeData(rdata, index, minX1, x2, x3); @@ -415,7 +415,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData() } } } - else if (sendDir == DIR_P00) { + else if (sendDir == dP00) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { distributeData(rdata, index, maxX1, x2, x3); @@ -423,7 +423,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData() } } } - else if (sendDir == DIR_0M0) { + else if (sendDir == d0M0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { distributeData(rdata, index, x1, minX2, x3); @@ -431,7 +431,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData() } } } - else if (sendDir == DIR_0P0) { + else if (sendDir == d0P0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { distributeData(rdata, index, x1, maxX2, x3); @@ -439,7 +439,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData() } } } - else if (sendDir == DIR_00M) { + else if (sendDir == d00M) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { distributeData(rdata, index, x1, x2, minX3); @@ -447,7 +447,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData() } } } - else if (sendDir == DIR_00P) { + else if (sendDir == d00P) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { distributeData(rdata, index, x1, x2, maxX3); @@ -455,7 +455,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData() } } } - else if (sendDir == DIR_MM0) { + else if (sendDir == dMM0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { distributeData(rdata, index, minX1, minX2, x3); distributeData(rdata, index, minX1p1, minX2p1, x3); @@ -463,7 +463,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, minX1p1, minX2, x3); } } - else if (sendDir == DIR_PM0) { + else if (sendDir == dPM0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { distributeData(rdata, index, maxX1, minX2, x3); distributeData(rdata, index, maxX1m1, minX2p1, x3); @@ -471,7 +471,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, maxX1m1, minX2, x3); } } - else if (sendDir == DIR_PP0) { + else if (sendDir == dPP0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { distributeData(rdata, index, maxX1, maxX2, x3); distributeData(rdata, index, maxX1m1, maxX2m1, x3); @@ -479,70 +479,70 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, maxX1m1, maxX2, x3); } } - else if (sendDir == DIR_MP0) { + else if (sendDir == dMP0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { distributeData(rdata, index, minX1, maxX2, x3); distributeData(rdata, index, minX1p1, maxX2m1, x3); distributeData(rdata, index, minX1, maxX2m1, x3); distributeData(rdata, index, minX1p1, maxX2, x3); } - } else if (sendDir == DIR_M0M) + } else if (sendDir == dM0M) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { distributeData(rdata, index, minX1, x2, minX3); distributeData(rdata, index, minX1p1, x2, minX3p1); distributeData(rdata, index, minX1, x2, minX3p1); distributeData(rdata, index, minX1p1, x2, minX3); } - else if (sendDir == DIR_P0P) + else if (sendDir == dP0P) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { distributeData(rdata, index, maxX1, x2, maxX3); distributeData(rdata, index, maxX1m1, x2, maxX3m1); distributeData(rdata, index, maxX1, x2, maxX3m1); distributeData(rdata, index, maxX1m1, x2, maxX3); } - else if (sendDir == DIR_M0P) + else if (sendDir == dM0P) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { distributeData(rdata, index, minX1, x2, maxX3); distributeData(rdata, index, minX1p1, x2, maxX3m1); distributeData(rdata, index, minX1, x2, maxX3m1); distributeData(rdata, index, minX1p1, x2, maxX3); } - else if (sendDir == DIR_P0M) + else if (sendDir == dP0M) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { distributeData(rdata, index, maxX1, x2, minX3); distributeData(rdata, index, maxX1m1, x2, minX3p1); distributeData(rdata, index, maxX1, x2, minX3p1); distributeData(rdata, index, maxX1m1, x2, minX3); } - else if (sendDir == DIR_0MM) + else if (sendDir == d0MM) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { distributeData(rdata, index, x1, minX2, minX3); distributeData(rdata, index, x1, minX2p1, minX3p1); distributeData(rdata, index, x1, minX2, minX3p1); distributeData(rdata, index, x1, minX2p1, minX3); } - else if (sendDir == DIR_0PP) + else if (sendDir == d0PP) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { distributeData(rdata, index, x1, maxX2, maxX3); distributeData(rdata, index, x1, maxX2m1, maxX3m1); distributeData(rdata, index, x1, maxX2, maxX3m1); distributeData(rdata, index, x1, maxX2m1, maxX3); } - else if (sendDir == DIR_0MP) + else if (sendDir == d0MP) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { distributeData(rdata, index, x1, minX2, maxX3); distributeData(rdata, index, x1, minX2p1, maxX3m1); distributeData(rdata, index, x1, minX2, maxX3m1); distributeData(rdata, index, x1, minX2p1, maxX3); } - else if (sendDir == DIR_0PM) + else if (sendDir == d0PM) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { distributeData(rdata, index, x1, maxX2, minX3); distributeData(rdata, index, x1, maxX2m1, minX3p1); distributeData(rdata, index, x1, maxX2, minX3p1); distributeData(rdata, index, x1, maxX2m1, minX3); } - else if (sendDir == DIR_PPM) { + else if (sendDir == dPPM) { distributeData(rdata, index, maxX1, maxX2, minX3); distributeData(rdata, index, maxX1m1, maxX2m1, minX3p1); distributeData(rdata, index, maxX1, maxX2m1, minX3p1); @@ -551,7 +551,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, maxX1, maxX2, minX3p1); distributeData(rdata, index, maxX1, maxX2m1, minX3); distributeData(rdata, index, maxX1m1, maxX2, minX3); - } else if (sendDir == DIR_MPM) { + } else if (sendDir == dMPM) { distributeData(rdata, index, minX1, maxX2, minX3); distributeData(rdata, index, minX1p1, maxX2m1, minX3p1); distributeData(rdata, index, minX1, maxX2m1, minX3p1); @@ -560,7 +560,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, minX1, maxX2, minX3p1); distributeData(rdata, index, minX1, maxX2m1, minX3); distributeData(rdata, index, minX1p1, maxX2, minX3); - } else if (sendDir == DIR_PMM) { + } else if (sendDir == dPMM) { distributeData(rdata, index, maxX1, minX2, minX3); distributeData(rdata, index, maxX1m1, minX2p1, minX3p1); distributeData(rdata, index, maxX1, minX2p1, minX3p1); @@ -569,7 +569,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, maxX1, minX2, minX3p1); distributeData(rdata, index, maxX1, minX2p1, minX3); distributeData(rdata, index, maxX1m1, minX2, minX3); - } else if (sendDir == DIR_MMM) { + } else if (sendDir == dMMM) { distributeData(rdata, index, minX1, minX2, minX3); distributeData(rdata, index, minX1p1, minX2p1, minX3p1); distributeData(rdata, index, minX1, minX2p1, minX3p1); @@ -578,7 +578,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, minX1, minX2, minX3p1); distributeData(rdata, index, minX1, minX2p1, minX3); distributeData(rdata, index, minX1p1, minX2, minX3); - } else if (sendDir == DIR_PPP) { + } else if (sendDir == dPPP) { distributeData(rdata, index, maxX1, maxX2, maxX3); distributeData(rdata, index, maxX1m1, maxX2m1, maxX3m1); distributeData(rdata, index, maxX1, maxX2m1, maxX3m1); @@ -587,7 +587,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, maxX1, maxX2, maxX3m1); distributeData(rdata, index, maxX1, maxX2m1, maxX3); distributeData(rdata, index, maxX1m1, maxX2, maxX3); - } else if (sendDir == DIR_MPP) { + } else if (sendDir == dMPP) { distributeData(rdata, index, minX1, maxX2, maxX3); distributeData(rdata, index, minX1p1, maxX2m1, maxX3m1); distributeData(rdata, index, minX1, maxX2m1, maxX3m1); @@ -596,7 +596,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, minX1, maxX2, maxX3m1); distributeData(rdata, index, minX1, maxX2m1, maxX3); distributeData(rdata, index, minX1p1, maxX2, maxX3); - } else if (sendDir == DIR_PMP) { + } else if (sendDir == dPMP) { distributeData(rdata, index, maxX1, minX2, maxX3); distributeData(rdata, index, maxX1m1, minX2p1, maxX3m1); distributeData(rdata, index, maxX1, minX2p1, maxX3m1); @@ -605,7 +605,7 @@ void ThreeDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, maxX1, minX2, maxX3m1); distributeData(rdata, index, maxX1, minX2p1, maxX3); distributeData(rdata, index, maxX1m1, minX2, maxX3); - } else if (sendDir == DIR_MMP) { + } else if (sendDir == dMMP) { distributeData(rdata, index, minX1, minX2, maxX3); distributeData(rdata, index, minX1p1, minX2p1, maxX3m1); distributeData(rdata, index, minX1, minX2p1, maxX3m1); diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.h b/src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.h rename to src/cpu/core/Connectors/ThreeDistributionsDoubleGhostLayerFullVectorConnector.h diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullDirectConnector.cpp b/src/cpu/core/Connectors/ThreeDistributionsFullDirectConnector.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullDirectConnector.cpp rename to src/cpu/core/Connectors/ThreeDistributionsFullDirectConnector.cpp diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullDirectConnector.h b/src/cpu/core/Connectors/ThreeDistributionsFullDirectConnector.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullDirectConnector.h rename to src/cpu/core/Connectors/ThreeDistributionsFullDirectConnector.h diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullVectorConnector.cpp b/src/cpu/core/Connectors/ThreeDistributionsFullVectorConnector.cpp similarity index 79% rename from src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullVectorConnector.cpp rename to src/cpu/core/Connectors/ThreeDistributionsFullVectorConnector.cpp index 65315b4f33ea1d64df96cb919d2335f8130e950e..25d838b81f6dad17ba81c15882c50b4b30be2b40 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullVectorConnector.cpp +++ b/src/cpu/core/Connectors/ThreeDistributionsFullVectorConnector.cpp @@ -62,37 +62,37 @@ void ThreeDistributionsFullVectorConnector::init() int anz = 3*27; switch (sendDir) { - case DIR_000: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break; - case DIR_P00: - case DIR_M00: sender->getData().resize(maxX2*maxX3*anz, c0o1); break; - case DIR_0P0: - case DIR_0M0: sender->getData().resize(maxX1*maxX3*anz, c0o1); break; - case DIR_00P: - case DIR_00M: sender->getData().resize(maxX1*maxX2*anz, c0o1); break; + case d000: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break; + case dP00: + case dM00: sender->getData().resize(maxX2*maxX3*anz, c0o1); break; + case d0P0: + case d0M0: sender->getData().resize(maxX1*maxX3*anz, c0o1); break; + case d00P: + case d00M: sender->getData().resize(maxX1*maxX2*anz, c0o1); break; - case DIR_PP0: - case DIR_MM0: - case DIR_PM0: - case DIR_MP0: sender->getData().resize(maxX3*anz, c0o1); break; + case dPP0: + case dMM0: + case dPM0: + case dMP0: sender->getData().resize(maxX3*anz, c0o1); break; - case DIR_P0P: - case DIR_M0M: - case DIR_P0M: - case DIR_M0P: sender->getData().resize(maxX2*anz, c0o1); break; + case dP0P: + case dM0M: + case dP0M: + case dM0P: sender->getData().resize(maxX2*anz, c0o1); break; - case DIR_0PP: - case DIR_0MM: - case DIR_0PM: - case DIR_0MP: sender->getData().resize(maxX1*anz, c0o1); break; + case d0PP: + case d0MM: + case d0PM: + case d0MP: sender->getData().resize(maxX1*anz, c0o1); break; - case DIR_PPP: - case DIR_MMM: - case DIR_PPM: - case DIR_MMP: - case DIR_PMP: - case DIR_MPM: - case DIR_PMM: - case DIR_MPP: sender->getData().resize(anz, c0o1); break; + case dPPP: + case dMMM: + case dPPM: + case dMMP: + case dPMP: + case dMPM: + case dPMM: + case dMPP: sender->getData().resize(anz, c0o1); break; default: UB_THROW(UbException(UB_EXARGS, "unknown sendDir")); } diff --git a/src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullVectorConnector.h b/src/cpu/core/Connectors/ThreeDistributionsFullVectorConnector.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/ThreeDistributionsFullVectorConnector.h rename to src/cpu/core/Connectors/ThreeDistributionsFullVectorConnector.h diff --git a/src/cpu/VirtualFluidsCore/Connectors/TransmitterType.h b/src/cpu/core/Connectors/TransmitterType.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/TransmitterType.h rename to src/cpu/core/Connectors/TransmitterType.h diff --git a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.cpp b/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.cpp similarity index 94% rename from src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.cpp rename to src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.cpp index 121fef6b86040aab370e9ffd925bea0033d61446..7413f237ecc603a73ad6d39a61689b0f9785b042 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.cpp +++ b/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.cpp @@ -94,7 +94,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() int maxX3m3 = maxX3 - 3; // EAST - if (sendDir == DIR_P00) { + if (sendDir == dP00) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { exchangeData(maxX1m3, x2, x3, minX1, x2, x3); @@ -103,7 +103,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() } } // WEST - else if (sendDir == DIR_M00) { + else if (sendDir == dM00) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { exchangeData(minX1p3, x2, x3, maxX1, x2, x3); @@ -112,7 +112,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() } } // NORTH - else if (sendDir == DIR_0P0) { + else if (sendDir == d0P0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { exchangeData(x1, maxX2m3, x3, x1, minX2, x3); @@ -121,7 +121,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() } } // SOUTH - else if (sendDir == DIR_0M0) { + else if (sendDir == d0M0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { exchangeData(x1, minX2p3, x3, x1, maxX2, x3); @@ -131,7 +131,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() } // TOP - else if (sendDir == DIR_00P) { + else if (sendDir == d00P) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { exchangeData(x1, x2, maxX3m3, x1, x2, minX3); @@ -140,7 +140,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() } } // BOTTOM - else if (sendDir == DIR_00M) { + else if (sendDir == d00M) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { exchangeData(x1, x2, minX3p3, x1, x2, maxX3); @@ -149,7 +149,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() } } // NORTHEAST - else if (sendDir == DIR_PP0) { + else if (sendDir == dPP0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { exchangeData(maxX1m3, maxX2m3, x3, minX1, minX2, x3); exchangeData(maxX1m2, maxX2m2, x3, minX1p1, minX2p1, x3); @@ -158,7 +158,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() } } // NORTHWEST - else if (sendDir == DIR_MP0) { + else if (sendDir == dMP0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { exchangeData(minX1p3, maxX2m3, x3, maxX1, minX2, x3); exchangeData(minX1p2, maxX2m2, x3, maxX1m1, minX2p1, x3); @@ -167,7 +167,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() } } // SOUTHWEST - else if (sendDir == DIR_MM0) { + else if (sendDir == dMM0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { exchangeData(minX1p3, minX2p3, x3, maxX1, maxX2, x3); exchangeData(minX1p2, minX2p2, x3, maxX1m1, maxX2m1, x3); @@ -176,70 +176,70 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() } } // SOUTHEAST - else if (sendDir == DIR_PM0) { + else if (sendDir == dPM0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { exchangeData(maxX1m3, minX2p3, x3, minX1, maxX2, x3); exchangeData(maxX1m2, minX2p2, x3, minX1p1, maxX2m1, x3); exchangeData(maxX1m3, minX2p2, x3, minX1, maxX2m1, x3); exchangeData(maxX1m2, minX2p3, x3, minX1p1, maxX2, x3); } - } else if (sendDir == DIR_P0P) + } else if (sendDir == dP0P) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { exchangeData(maxX1m3, x2, maxX3m3, minX1, x2, minX3); exchangeData(maxX1m2, x2, maxX3m2, minX1p1, x2, minX3p1); exchangeData(maxX1m3, x2, maxX3m2, minX1, x2, minX3p1); exchangeData(maxX1m2, x2, maxX3m3, minX1p1, x2, minX3); } - else if (sendDir == DIR_M0M) + else if (sendDir == dM0M) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { exchangeData(minX1p3, x2, minX3p3, maxX1, x2, maxX3); exchangeData(minX1p2, x2, minX3p2, maxX1m1, x2, maxX3m1); exchangeData(minX1p3, x2, minX3p2, maxX1, x2, maxX3m1); exchangeData(minX1p2, x2, minX3p3, maxX1m1, x2, maxX3); } - else if (sendDir == DIR_P0M) + else if (sendDir == dP0M) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { exchangeData(maxX1m3, x2, minX3p3, minX1, x2, maxX3); exchangeData(maxX1m2, x2, minX3p2, minX1p1, x2, maxX3m1); exchangeData(maxX1m3, x2, minX3p2, minX1, x2, maxX3m1); exchangeData(maxX1m2, x2, minX3p3, minX1p1, x2, maxX3); } - else if (sendDir == DIR_M0P) + else if (sendDir == dM0P) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { exchangeData(minX1p3, x2, maxX3m3, maxX1, x2, minX3); exchangeData(minX1p2, x2, maxX3m2, maxX1m1, x2, minX3p1); exchangeData(minX1p3, x2, maxX3m2, maxX1, x2, minX3p1); exchangeData(minX1p2, x2, maxX3m3, maxX1m1, x2, minX3); } - else if (sendDir == DIR_0PP) + else if (sendDir == d0PP) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { exchangeData(x1, maxX2m3, maxX3m3, x1, minX2, minX3); exchangeData(x1, maxX2m2, maxX3m2, x1, minX2p1, minX3p1); exchangeData(x1, maxX2m3, maxX3m2, x1, minX2, minX3p1); exchangeData(x1, maxX2m2, maxX3m3, x1, minX2p1, minX3); } - else if (sendDir == DIR_0MM) + else if (sendDir == d0MM) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { exchangeData(x1, minX2p3, minX3p3, x1, maxX2, maxX3); exchangeData(x1, minX2p2, minX3p2, x1, maxX2m1, maxX3m1); exchangeData(x1, minX2p3, minX3p2, x1, maxX2, maxX3m1); exchangeData(x1, minX2p2, minX3p3, x1, maxX2m1, maxX3); } - else if (sendDir == DIR_0PM) + else if (sendDir == d0PM) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { exchangeData(x1, maxX2m3, minX3p3, x1, minX2, maxX3); exchangeData(x1, maxX2m2, minX3p2, x1, minX2p1, maxX3m1); exchangeData(x1, maxX2m3, minX3p2, x1, minX2, maxX3m1); exchangeData(x1, maxX2m2, minX3p3, x1, minX2p1, maxX3); } - else if (sendDir == DIR_0MP) + else if (sendDir == d0MP) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { exchangeData(x1, minX2p3, maxX3m3, x1, maxX2, minX3); exchangeData(x1, minX2p2, maxX3m2, x1, maxX2m1, minX3p1); exchangeData(x1, minX2p3, maxX3m2, x1, maxX2, minX3p1); exchangeData(x1, minX2p2, maxX3m3, x1, maxX2m1, minX3); } - else if (sendDir == DIR_MMP) { + else if (sendDir == dMMP) { exchangeData(minX1p3, minX2p3, maxX3m3, maxX1, maxX2, minX3); exchangeData(minX1p2, minX2p2, maxX3m2, maxX1m1, maxX2m1, minX3p1); exchangeData(minX1p3, minX2p2, maxX3m2, maxX1, maxX2m1, minX3p1); @@ -248,7 +248,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() exchangeData(minX1p3, minX2p3, maxX3m2, maxX1, maxX2, minX3p1); exchangeData(minX1p3, minX2p2, maxX3m3, maxX1, maxX2m1, minX3); exchangeData(minX1p2, minX2p3, maxX3m3, maxX1m1, maxX2, minX3); - } else if (sendDir == DIR_PMP) { + } else if (sendDir == dPMP) { exchangeData(maxX1m3, minX1p3, maxX3m3, minX1, maxX2, minX3); exchangeData(maxX1m2, minX1p2, maxX3m2, minX1p1, maxX2m1, minX3p1); exchangeData(maxX1m3, minX1p2, maxX3m2, minX1, maxX2m1, minX3p1); @@ -257,7 +257,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() exchangeData(maxX1m3, minX1p3, maxX3m2, minX1, maxX2, minX3p1); exchangeData(maxX1m3, minX1p2, maxX3m3, minX1, maxX2m1, minX3); exchangeData(maxX1m2, minX1p3, maxX3m3, minX1p1, maxX2, minX3); - } else if (sendDir == DIR_MPP) { + } else if (sendDir == dMPP) { exchangeData(minX1p3, maxX2m3, maxX3m3, maxX1, minX2, minX3); exchangeData(minX1p2, maxX2m2, maxX3m2, maxX1m1, minX2p1, minX3p1); exchangeData(minX1p3, maxX2m2, maxX3m2, maxX1, minX2p1, minX3p1); @@ -266,7 +266,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() exchangeData(minX1p3, maxX2m3, maxX3m2, maxX1, minX2, minX3p1); exchangeData(minX1p3, maxX2m2, maxX3m3, maxX1, minX2p1, minX3); exchangeData(minX1p2, maxX2m3, maxX3m3, maxX1m1, minX2, minX3); - } else if (sendDir == DIR_PPP) { + } else if (sendDir == dPPP) { exchangeData(maxX1m3, maxX2m3, maxX3m3, minX1, minX2, minX3); exchangeData(maxX1m2, maxX2m2, maxX3m2, minX1p1, minX2p1, minX3p1); exchangeData(maxX1m3, maxX2m2, maxX3m2, minX1, minX2p1, minX3p1); @@ -275,7 +275,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() exchangeData(maxX1m3, maxX2m3, maxX3m2, minX1, minX2, minX3p1); exchangeData(maxX1m3, maxX2m2, maxX3m3, minX1, minX2p1, minX3); exchangeData(maxX1m2, maxX2m3, maxX3m3, minX1p1, minX2, minX3); - } else if (sendDir == DIR_MMM) { + } else if (sendDir == dMMM) { exchangeData(minX1p3, minX2p3, minX3p3, maxX1, maxX2, maxX3); exchangeData(minX1p2, minX2p2, minX3p2, maxX1m1, maxX2m1, maxX3m1); exchangeData(minX1p3, minX2p2, minX3p2, maxX1, maxX2m1, maxX3m1); @@ -284,7 +284,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() exchangeData(minX1p3, minX2p3, minX3p2, maxX1, maxX2, maxX3m1); exchangeData(minX1p3, minX2p2, minX3p3, maxX1, maxX2m1, maxX3); exchangeData(minX1p2, minX2p3, minX3p3, maxX1m1, maxX2, maxX3); - } else if (sendDir == DIR_PMM) { + } else if (sendDir == dPMM) { exchangeData(maxX1m3, minX2p3, minX3p3, minX1, maxX2, maxX3); exchangeData(maxX1m2, minX2p2, minX3p2, minX1p1, maxX2m1, maxX3m1); exchangeData(maxX1m3, minX2p2, minX3p2, minX1, maxX2m1, maxX3m1); @@ -293,7 +293,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() exchangeData(maxX1m3, minX2p3, minX3p2, minX1, maxX2, maxX3m1); exchangeData(maxX1m3, minX2p2, minX3p3, minX1, maxX2m1, maxX3); exchangeData(maxX1m2, minX2p3, minX3p3, minX1p1, maxX2, maxX3); - } else if (sendDir == DIR_MPM) { + } else if (sendDir == dMPM) { exchangeData(minX1p3, maxX2m3, minX3p3, maxX1, minX2, maxX3); exchangeData(minX1p2, maxX2m2, minX3p2, maxX1m1, minX2p1, maxX3m1); exchangeData(minX1p3, maxX2m2, minX3p2, maxX1, minX2p1, maxX3m1); @@ -302,7 +302,7 @@ void TwoDistributionsDoubleGhostLayerFullDirectConnector::exchangeData() exchangeData(minX1p3, maxX2m3, minX3p2, maxX1, minX2, maxX3m1); exchangeData(minX1p3, maxX2m2, minX3p3, maxX1, minX2p1, maxX3); exchangeData(minX1p2, maxX2m3, minX3p3, maxX1m1, minX2, maxX3); - } else if (sendDir == DIR_PPM) { + } else if (sendDir == dPPM) { exchangeData(maxX1m3, maxX2m3, minX3p3, minX1, minX2, maxX3); exchangeData(maxX1m2, maxX2m2, minX3p2, minX1p1, minX2p1, maxX3m1); exchangeData(maxX1m3, maxX2m2, minX3p2, minX1, minX2p1, maxX3m1); diff --git a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.h b/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.h rename to src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullDirectConnector.h diff --git a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.cpp b/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.cpp similarity index 90% rename from src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.cpp rename to src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.cpp index f8ff7d5c28bb04e41f51a5223dc9a64bcd0cf317..00f6348a4e3c5d5309ca6a4eb5f5e730f71c13c7 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.cpp +++ b/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.cpp @@ -62,37 +62,37 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::init() int anz = 2*27+1; switch (sendDir) { - case DIR_000: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break; - case DIR_P00: - case DIR_M00: sender->getData().resize(maxX2*maxX3*anz*2, c0o1); break; - case DIR_0P0: - case DIR_0M0: sender->getData().resize(maxX1*maxX3*anz*2, c0o1); break; - case DIR_00P: - case DIR_00M: sender->getData().resize(maxX1*maxX2*anz*2, c0o1); break; + case d000: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break; + case dP00: + case dM00: sender->getData().resize(maxX2*maxX3*anz*2, c0o1); break; + case d0P0: + case d0M0: sender->getData().resize(maxX1*maxX3*anz*2, c0o1); break; + case d00P: + case d00M: sender->getData().resize(maxX1*maxX2*anz*2, c0o1); break; - case DIR_PP0: - case DIR_MM0: - case DIR_PM0: - case DIR_MP0: sender->getData().resize(maxX3*anz*4, c0o1); break; + case dPP0: + case dMM0: + case dPM0: + case dMP0: sender->getData().resize(maxX3*anz*4, c0o1); break; - case DIR_P0P: - case DIR_M0M: - case DIR_P0M: - case DIR_M0P: sender->getData().resize(maxX2*anz*4, c0o1); break; + case dP0P: + case dM0M: + case dP0M: + case dM0P: sender->getData().resize(maxX2*anz*4, c0o1); break; - case DIR_0PP: - case DIR_0MM: - case DIR_0PM: - case DIR_0MP: sender->getData().resize(maxX1*anz*4, c0o1); break; + case d0PP: + case d0MM: + case d0PM: + case d0MP: sender->getData().resize(maxX1*anz*4, c0o1); break; - case DIR_PPP: - case DIR_MMM: - case DIR_PPM: - case DIR_MMP: - case DIR_PMP: - case DIR_MPM: - case DIR_PMM: - case DIR_MPP: sender->getData().resize(anz*8, c0o1); break; + case dPPP: + case dMMM: + case dPPM: + case dMMP: + case dPMP: + case dMPM: + case dPMM: + case dMPP: sender->getData().resize(anz*8, c0o1); break; default: UB_THROW(UbException(UB_EXARGS, "unknown sendDir")); } @@ -142,7 +142,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData() int index = 0; // EAST - if (sendDir == DIR_P00) { + if (sendDir == dP00) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { fillData(sdata, index, maxX1m3, x2, x3); @@ -151,7 +151,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData() } } // WEST - else if (sendDir == DIR_M00) { + else if (sendDir == dM00) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { fillData(sdata, index, minX1p3, x2, x3); @@ -160,7 +160,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData() } } // NORTH - else if (sendDir == DIR_0P0) { + else if (sendDir == d0P0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { fillData(sdata, index, x1, maxX2m3, x3); @@ -169,7 +169,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData() } } // SOUTH - else if (sendDir == DIR_0M0) { + else if (sendDir == d0M0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { fillData(sdata, index, x1, minX2p3, x3); @@ -179,7 +179,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData() } // TOP - else if (sendDir == DIR_00P) { + else if (sendDir == d00P) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { fillData(sdata, index, x1, x2, maxX3m3); @@ -188,7 +188,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData() } } // BOTTOM - else if (sendDir == DIR_00M) { + else if (sendDir == d00M) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { fillData(sdata, index, x1, x2, minX3p3); @@ -197,7 +197,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData() } } // NORTHEAST - else if (sendDir == DIR_PP0) { + else if (sendDir == dPP0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { fillData(sdata, index, maxX1m3, maxX2m3, x3); fillData(sdata, index, maxX1m2, maxX2m2, x3); @@ -206,7 +206,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData() } } // NORTHWEST - else if (sendDir == DIR_MP0) { + else if (sendDir == dMP0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { fillData(sdata, index, minX1p3, maxX2m3, x3); fillData(sdata, index, minX1p2, maxX2m2, x3); @@ -215,7 +215,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData() } } // SOUTHWEST - else if (sendDir == DIR_MM0) { + else if (sendDir == dMM0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { fillData(sdata, index, minX1p3, minX2p3, x3); fillData(sdata, index, minX1p2, minX2p2, x3); @@ -224,70 +224,70 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData() } } // SOUTHEAST - else if (sendDir == DIR_PM0) { + else if (sendDir == dPM0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { fillData(sdata, index, maxX1m3, minX2p3, x3); fillData(sdata, index, maxX1m2, minX2p2, x3); fillData(sdata, index, maxX1m3, minX2p2, x3); fillData(sdata, index, maxX1m2, minX2p3, x3); } - } else if (sendDir == DIR_P0P) + } else if (sendDir == dP0P) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { fillData(sdata, index, maxX1m3, x2, maxX3m3); fillData(sdata, index, maxX1m2, x2, maxX3m2); fillData(sdata, index, maxX1m3, x2, maxX3m2); fillData(sdata, index, maxX1m2, x2, maxX3m3); } - else if (sendDir == DIR_M0M) + else if (sendDir == dM0M) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { fillData(sdata, index, minX1p3, x2, minX3p3); fillData(sdata, index, minX1p2, x2, minX3p2); fillData(sdata, index, minX1p3, x2, minX3p2); fillData(sdata, index, minX1p2, x2, minX3p3); } - else if (sendDir == DIR_P0M) + else if (sendDir == dP0M) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { fillData(sdata, index, maxX1m3, x2, minX3p3); fillData(sdata, index, maxX1m2, x2, minX3p2); fillData(sdata, index, maxX1m3, x2, minX3p2); fillData(sdata, index, maxX1m2, x2, minX3p3); } - else if (sendDir == DIR_M0P) + else if (sendDir == dM0P) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { fillData(sdata, index, minX1p3, x2, maxX3m3); fillData(sdata, index, minX1p2, x2, maxX3m2); fillData(sdata, index, minX1p3, x2, maxX3m2); fillData(sdata, index, minX1p2, x2, maxX3m3); } - else if (sendDir == DIR_0PP) + else if (sendDir == d0PP) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { fillData(sdata, index, x1, maxX2m3, maxX3m3); fillData(sdata, index, x1, maxX2m2, maxX3m2); fillData(sdata, index, x1, maxX2m3, maxX3m2); fillData(sdata, index, x1, maxX2m2, maxX3m3); } - else if (sendDir == DIR_0MM) + else if (sendDir == d0MM) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { fillData(sdata, index, x1, minX2p3, minX3p3); fillData(sdata, index, x1, minX2p2, minX3p2); fillData(sdata, index, x1, minX2p3, minX3p2); fillData(sdata, index, x1, minX2p2, minX3p3); } - else if (sendDir == DIR_0PM) + else if (sendDir == d0PM) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { fillData(sdata, index, x1, maxX2m3, minX3p3); fillData(sdata, index, x1, maxX2m2, minX3p2); fillData(sdata, index, x1, maxX2m3, minX3p2); fillData(sdata, index, x1, maxX2m2, minX3p3); } - else if (sendDir == DIR_0MP) + else if (sendDir == d0MP) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { fillData(sdata, index, x1, minX2p3, maxX3m3); fillData(sdata, index, x1, minX2p2, maxX3m2); fillData(sdata, index, x1, minX2p3, maxX3m2); fillData(sdata, index, x1, minX2p2, maxX3m3); } - else if (sendDir == DIR_MMP) { + else if (sendDir == dMMP) { fillData(sdata, index, minX1p3, minX2p3, maxX3m3); fillData(sdata, index, minX1p2, minX2p2, maxX3m2); fillData(sdata, index, minX1p3, minX2p2, maxX3m2); @@ -296,7 +296,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData() fillData(sdata, index, minX1p3, minX2p3, maxX3m2); fillData(sdata, index, minX1p3, minX2p2, maxX3m3); fillData(sdata, index, minX1p2, minX2p3, maxX3m3); - } else if (sendDir == DIR_PMP) { + } else if (sendDir == dPMP) { fillData(sdata, index, maxX1m3, minX1p3, maxX3m3); fillData(sdata, index, maxX1m2, minX1p2, maxX3m2); fillData(sdata, index, maxX1m3, minX1p2, maxX3m2); @@ -305,7 +305,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData() fillData(sdata, index, maxX1m3, minX1p3, maxX3m2); fillData(sdata, index, maxX1m3, minX1p2, maxX3m3); fillData(sdata, index, maxX1m2, minX1p3, maxX3m3); - } else if (sendDir == DIR_MPP) { + } else if (sendDir == dMPP) { fillData(sdata, index, minX1p3, maxX2m3, maxX3m3); fillData(sdata, index, minX1p2, maxX2m2, maxX3m2); fillData(sdata, index, minX1p3, maxX2m2, maxX3m2); @@ -314,7 +314,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData() fillData(sdata, index, minX1p3, maxX2m3, maxX3m2); fillData(sdata, index, minX1p3, maxX2m2, maxX3m3); fillData(sdata, index, minX1p2, maxX2m3, maxX3m3); - } else if (sendDir == DIR_PPP) { + } else if (sendDir == dPPP) { fillData(sdata, index, maxX1m3, maxX2m3, maxX3m3); fillData(sdata, index, maxX1m2, maxX2m2, maxX3m2); fillData(sdata, index, maxX1m3, maxX2m2, maxX3m2); @@ -323,7 +323,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData() fillData(sdata, index, maxX1m3, maxX2m3, maxX3m2); fillData(sdata, index, maxX1m3, maxX2m2, maxX3m3); fillData(sdata, index, maxX1m2, maxX2m3, maxX3m3); - } else if (sendDir == DIR_MMM) { + } else if (sendDir == dMMM) { fillData(sdata, index, minX1p3, minX2p3, minX3p3); fillData(sdata, index, minX1p2, minX2p2, minX3p2); fillData(sdata, index, minX1p3, minX2p2, minX3p2); @@ -332,7 +332,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData() fillData(sdata, index, minX1p3, minX2p3, minX3p2); fillData(sdata, index, minX1p3, minX2p2, minX3p3); fillData(sdata, index, minX1p2, minX2p3, minX3p3); - } else if (sendDir == DIR_PMM) { + } else if (sendDir == dPMM) { fillData(sdata, index, maxX1m3, minX2p3, minX3p3); fillData(sdata, index, maxX1m2, minX2p2, minX3p2); fillData(sdata, index, maxX1m3, minX2p2, minX3p2); @@ -341,7 +341,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData() fillData(sdata, index, maxX1m3, minX2p3, minX3p2); fillData(sdata, index, maxX1m3, minX2p2, minX3p3); fillData(sdata, index, maxX1m2, minX2p3, minX3p3); - } else if (sendDir == DIR_MPM) { + } else if (sendDir == dMPM) { fillData(sdata, index, minX1p3, maxX2m3, minX3p3); fillData(sdata, index, minX1p2, maxX2m2, minX3p2); fillData(sdata, index, minX1p3, maxX2m2, minX3p2); @@ -350,7 +350,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::fillData() fillData(sdata, index, minX1p3, maxX2m3, minX3p2); fillData(sdata, index, minX1p3, maxX2m2, minX3p3); fillData(sdata, index, minX1p2, maxX2m3, minX3p3); - } else if (sendDir == DIR_PPM) { + } else if (sendDir == dPPM) { fillData(sdata, index, maxX1m3, maxX2m3, minX3p3); fillData(sdata, index, maxX1m2, maxX2m2, minX3p2); fillData(sdata, index, maxX1m3, maxX2m2, minX3p2); @@ -406,7 +406,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData() int maxX3m2 = maxX3 - 2; //int maxX3m3 = maxX3 - 3; - if (sendDir == DIR_M00) { + if (sendDir == dM00) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { distributeData(rdata, index, minX1, x2, x3); @@ -414,7 +414,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData() } } } - else if (sendDir == DIR_P00) { + else if (sendDir == dP00) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { distributeData(rdata, index, maxX1, x2, x3); @@ -422,7 +422,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData() } } } - else if (sendDir == DIR_0M0) { + else if (sendDir == d0M0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { distributeData(rdata, index, x1, minX2, x3); @@ -430,7 +430,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData() } } } - else if (sendDir == DIR_0P0) { + else if (sendDir == d0P0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { distributeData(rdata, index, x1, maxX2, x3); @@ -438,7 +438,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData() } } } - else if (sendDir == DIR_00M) { + else if (sendDir == d00M) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { distributeData(rdata, index, x1, x2, minX3); @@ -446,7 +446,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData() } } } - else if (sendDir == DIR_00P) { + else if (sendDir == d00P) { for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { distributeData(rdata, index, x1, x2, maxX3); @@ -454,7 +454,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData() } } } - else if (sendDir == DIR_MM0) { + else if (sendDir == dMM0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { distributeData(rdata, index, minX1, minX2, x3); distributeData(rdata, index, minX1p1, minX2p1, x3); @@ -462,7 +462,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, minX1p1, minX2, x3); } } - else if (sendDir == DIR_PM0) { + else if (sendDir == dPM0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { distributeData(rdata, index, maxX1, minX2, x3); distributeData(rdata, index, maxX1m1, minX2p1, x3); @@ -470,7 +470,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, maxX1m1, minX2, x3); } } - else if (sendDir == DIR_PP0) { + else if (sendDir == dPP0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { distributeData(rdata, index, maxX1, maxX2, x3); distributeData(rdata, index, maxX1m1, maxX2m1, x3); @@ -478,70 +478,70 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, maxX1m1, maxX2, x3); } } - else if (sendDir == DIR_MP0) { + else if (sendDir == dMP0) { for (int x3 = minX3p2; x3 <= maxX3m2; x3++) { distributeData(rdata, index, minX1, maxX2, x3); distributeData(rdata, index, minX1p1, maxX2m1, x3); distributeData(rdata, index, minX1, maxX2m1, x3); distributeData(rdata, index, minX1p1, maxX2, x3); } - } else if (sendDir == DIR_M0M) + } else if (sendDir == dM0M) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { distributeData(rdata, index, minX1, x2, minX3); distributeData(rdata, index, minX1p1, x2, minX3p1); distributeData(rdata, index, minX1, x2, minX3p1); distributeData(rdata, index, minX1p1, x2, minX3); } - else if (sendDir == DIR_P0P) + else if (sendDir == dP0P) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { distributeData(rdata, index, maxX1, x2, maxX3); distributeData(rdata, index, maxX1m1, x2, maxX3m1); distributeData(rdata, index, maxX1, x2, maxX3m1); distributeData(rdata, index, maxX1m1, x2, maxX3); } - else if (sendDir == DIR_M0P) + else if (sendDir == dM0P) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { distributeData(rdata, index, minX1, x2, maxX3); distributeData(rdata, index, minX1p1, x2, maxX3m1); distributeData(rdata, index, minX1, x2, maxX3m1); distributeData(rdata, index, minX1p1, x2, maxX3); } - else if (sendDir == DIR_P0M) + else if (sendDir == dP0M) for (int x2 = minX2p2; x2 <= maxX2m2; x2++) { distributeData(rdata, index, maxX1, x2, minX3); distributeData(rdata, index, maxX1m1, x2, minX3p1); distributeData(rdata, index, maxX1, x2, minX3p1); distributeData(rdata, index, maxX1m1, x2, minX3); } - else if (sendDir == DIR_0MM) + else if (sendDir == d0MM) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { distributeData(rdata, index, x1, minX2, minX3); distributeData(rdata, index, x1, minX2p1, minX3p1); distributeData(rdata, index, x1, minX2, minX3p1); distributeData(rdata, index, x1, minX2p1, minX3); } - else if (sendDir == DIR_0PP) + else if (sendDir == d0PP) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { distributeData(rdata, index, x1, maxX2, maxX3); distributeData(rdata, index, x1, maxX2m1, maxX3m1); distributeData(rdata, index, x1, maxX2, maxX3m1); distributeData(rdata, index, x1, maxX2m1, maxX3); } - else if (sendDir == DIR_0MP) + else if (sendDir == d0MP) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { distributeData(rdata, index, x1, minX2, maxX3); distributeData(rdata, index, x1, minX2p1, maxX3m1); distributeData(rdata, index, x1, minX2, maxX3m1); distributeData(rdata, index, x1, minX2p1, maxX3); } - else if (sendDir == DIR_0PM) + else if (sendDir == d0PM) for (int x1 = minX1p2; x1 <= maxX1m2; x1++) { distributeData(rdata, index, x1, maxX2, minX3); distributeData(rdata, index, x1, maxX2m1, minX3p1); distributeData(rdata, index, x1, maxX2, minX3p1); distributeData(rdata, index, x1, maxX2m1, minX3); } - else if (sendDir == DIR_PPM) { + else if (sendDir == dPPM) { distributeData(rdata, index, maxX1, maxX2, minX3); distributeData(rdata, index, maxX1m1, maxX2m1, minX3p1); distributeData(rdata, index, maxX1, maxX2m1, minX3p1); @@ -550,7 +550,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, maxX1, maxX2, minX3p1); distributeData(rdata, index, maxX1, maxX2m1, minX3); distributeData(rdata, index, maxX1m1, maxX2, minX3); - } else if (sendDir == DIR_MPM) { + } else if (sendDir == dMPM) { distributeData(rdata, index, minX1, maxX2, minX3); distributeData(rdata, index, minX1p1, maxX2m1, minX3p1); distributeData(rdata, index, minX1, maxX2m1, minX3p1); @@ -559,7 +559,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, minX1, maxX2, minX3p1); distributeData(rdata, index, minX1, maxX2m1, minX3); distributeData(rdata, index, minX1p1, maxX2, minX3); - } else if (sendDir == DIR_PMM) { + } else if (sendDir == dPMM) { distributeData(rdata, index, maxX1, minX2, minX3); distributeData(rdata, index, maxX1m1, minX2p1, minX3p1); distributeData(rdata, index, maxX1, minX2p1, minX3p1); @@ -568,7 +568,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, maxX1, minX2, minX3p1); distributeData(rdata, index, maxX1, minX2p1, minX3); distributeData(rdata, index, maxX1m1, minX2, minX3); - } else if (sendDir == DIR_MMM) { + } else if (sendDir == dMMM) { distributeData(rdata, index, minX1, minX2, minX3); distributeData(rdata, index, minX1p1, minX2p1, minX3p1); distributeData(rdata, index, minX1, minX2p1, minX3p1); @@ -577,7 +577,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, minX1, minX2, minX3p1); distributeData(rdata, index, minX1, minX2p1, minX3); distributeData(rdata, index, minX1p1, minX2, minX3); - } else if (sendDir == DIR_PPP) { + } else if (sendDir == dPPP) { distributeData(rdata, index, maxX1, maxX2, maxX3); distributeData(rdata, index, maxX1m1, maxX2m1, maxX3m1); distributeData(rdata, index, maxX1, maxX2m1, maxX3m1); @@ -586,7 +586,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, maxX1, maxX2, maxX3m1); distributeData(rdata, index, maxX1, maxX2m1, maxX3); distributeData(rdata, index, maxX1m1, maxX2, maxX3); - } else if (sendDir == DIR_MPP) { + } else if (sendDir == dMPP) { distributeData(rdata, index, minX1, maxX2, maxX3); distributeData(rdata, index, minX1p1, maxX2m1, maxX3m1); distributeData(rdata, index, minX1, maxX2m1, maxX3m1); @@ -595,7 +595,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, minX1, maxX2, maxX3m1); distributeData(rdata, index, minX1, maxX2m1, maxX3); distributeData(rdata, index, minX1p1, maxX2, maxX3); - } else if (sendDir == DIR_PMP) { + } else if (sendDir == dPMP) { distributeData(rdata, index, maxX1, minX2, maxX3); distributeData(rdata, index, maxX1m1, minX2p1, maxX3m1); distributeData(rdata, index, maxX1, minX2p1, maxX3m1); @@ -604,7 +604,7 @@ void TwoDistributionsDoubleGhostLayerFullVectorConnector::distributeData() distributeData(rdata, index, maxX1, minX2, maxX3m1); distributeData(rdata, index, maxX1, minX2p1, maxX3); distributeData(rdata, index, maxX1m1, minX2, maxX3); - } else if (sendDir == DIR_MMP) { + } else if (sendDir == dMMP) { distributeData(rdata, index, minX1, minX2, maxX3); distributeData(rdata, index, minX1p1, minX2p1, maxX3m1); distributeData(rdata, index, minX1, minX2p1, maxX3m1); diff --git a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.h b/src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.h rename to src/cpu/core/Connectors/TwoDistributionsDoubleGhostLayerFullVectorConnector.h diff --git a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullDirectConnector.cpp b/src/cpu/core/Connectors/TwoDistributionsFullDirectConnector.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullDirectConnector.cpp rename to src/cpu/core/Connectors/TwoDistributionsFullDirectConnector.cpp diff --git a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullDirectConnector.h b/src/cpu/core/Connectors/TwoDistributionsFullDirectConnector.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullDirectConnector.h rename to src/cpu/core/Connectors/TwoDistributionsFullDirectConnector.h diff --git a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullVectorConnector.cpp b/src/cpu/core/Connectors/TwoDistributionsFullVectorConnector.cpp similarity index 79% rename from src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullVectorConnector.cpp rename to src/cpu/core/Connectors/TwoDistributionsFullVectorConnector.cpp index 36e34321d0bcaecec63b70d2b059542dc5514b95..a615bb51decac01730be1107a2c693d973d802fd 100644 --- a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullVectorConnector.cpp +++ b/src/cpu/core/Connectors/TwoDistributionsFullVectorConnector.cpp @@ -61,37 +61,37 @@ void TwoDistributionsFullVectorConnector::init() int anz = 2*27; switch (sendDir) { - case DIR_000: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break; - case DIR_P00: - case DIR_M00: sender->getData().resize(maxX2*maxX3*anz, c0o1); break; - case DIR_0P0: - case DIR_0M0: sender->getData().resize(maxX1*maxX3*anz, c0o1); break; - case DIR_00P: - case DIR_00M: sender->getData().resize(maxX1*maxX2*anz, c0o1); break; + case d000: UB_THROW(UbException(UB_EXARGS, "ZERO not allowed")); break; + case dP00: + case dM00: sender->getData().resize(maxX2*maxX3*anz, c0o1); break; + case d0P0: + case d0M0: sender->getData().resize(maxX1*maxX3*anz, c0o1); break; + case d00P: + case d00M: sender->getData().resize(maxX1*maxX2*anz, c0o1); break; - case DIR_PP0: - case DIR_MM0: - case DIR_PM0: - case DIR_MP0: sender->getData().resize(maxX3*anz, c0o1); break; + case dPP0: + case dMM0: + case dPM0: + case dMP0: sender->getData().resize(maxX3*anz, c0o1); break; - case DIR_P0P: - case DIR_M0M: - case DIR_P0M: - case DIR_M0P: sender->getData().resize(maxX2*anz, c0o1); break; + case dP0P: + case dM0M: + case dP0M: + case dM0P: sender->getData().resize(maxX2*anz, c0o1); break; - case DIR_0PP: - case DIR_0MM: - case DIR_0PM: - case DIR_0MP: sender->getData().resize(maxX1*anz, c0o1); break; + case d0PP: + case d0MM: + case d0PM: + case d0MP: sender->getData().resize(maxX1*anz, c0o1); break; - case DIR_PPP: - case DIR_MMM: - case DIR_PPM: - case DIR_MMP: - case DIR_PMP: - case DIR_MPM: - case DIR_PMM: - case DIR_MPP: sender->getData().resize(anz, c0o1); break; + case dPPP: + case dMMM: + case dPPM: + case dMMP: + case dPMP: + case dMPM: + case dPMM: + case dMPP: sender->getData().resize(anz, c0o1); break; default: UB_THROW(UbException(UB_EXARGS, "unknown sendDir")); } diff --git a/src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullVectorConnector.h b/src/cpu/core/Connectors/TwoDistributionsFullVectorConnector.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Connectors/TwoDistributionsFullVectorConnector.h rename to src/cpu/core/Connectors/TwoDistributionsFullVectorConnector.h diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.cpp b/src/cpu/core/Data/D3Q27EsoTwist3DSoA.cpp similarity index 72% rename from src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.cpp rename to src/cpu/core/Data/D3Q27EsoTwist3DSoA.cpp index 07e62e78a57fa8817ec8f4b7c20bce693697788d..14d5904ebbf30dd6b3d5694cd89c6753357536f6 100644 --- a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.cpp +++ b/src/cpu/core/Data/D3Q27EsoTwist3DSoA.cpp @@ -85,7 +85,7 @@ void D3Q27EsoTwist3DSoA::swap() std::swap(d.TSW, d.BNE); } ////////////////////////////////////////////////////////////////////////// -void D3Q27EsoTwist3DSoA::getDistribution(real *const f, size_t x1, size_t x2, size_t x3) +void D3Q27EsoTwist3DSoA::getPreCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) { using namespace vf::lbm::dir; @@ -93,38 +93,38 @@ void D3Q27EsoTwist3DSoA::getDistribution(real *const f, size_t x1, size_t x2, si size_t x2p = x2 + 1; size_t x3p = x3 + 1; - f[DIR_P00] = (*d.E)(x1, x2, x3); - f[DIR_0P0] = (*d.N)(x1, x2, x3); - f[DIR_00P] = (*d.T)(x1, x2, x3); - f[DIR_PP0] = (*d.NE)(x1, x2, x3); - f[DIR_MP0] = (*d.NW)(x1p, x2, x3); - f[DIR_P0P] = (*d.TE)(x1, x2, x3); - f[DIR_M0P] = (*d.TW)(x1p, x2, x3); - f[DIR_0PP] = (*d.TN)(x1, x2, x3); - f[DIR_0MP] = (*d.TS)(x1, x2p, x3); - f[DIR_PPP] = (*d.TNE)(x1, x2, x3); - f[DIR_MPP] = (*d.TNW)(x1p, x2, x3); - f[DIR_PMP] = (*d.TSE)(x1, x2p, x3); - f[DIR_MMP] = (*d.TSW)(x1p, x2p, x3); + f[dP00] = (*d.E)(x1, x2, x3); + f[d0P0] = (*d.N)(x1, x2, x3); + f[d00P] = (*d.T)(x1, x2, x3); + f[dPP0] = (*d.NE)(x1, x2, x3); + f[dMP0] = (*d.NW)(x1p, x2, x3); + f[dP0P] = (*d.TE)(x1, x2, x3); + f[dM0P] = (*d.TW)(x1p, x2, x3); + f[d0PP] = (*d.TN)(x1, x2, x3); + f[d0MP] = (*d.TS)(x1, x2p, x3); + f[dPPP] = (*d.TNE)(x1, x2, x3); + f[dMPP] = (*d.TNW)(x1p, x2, x3); + f[dPMP] = (*d.TSE)(x1, x2p, x3); + f[dMMP] = (*d.TSW)(x1p, x2p, x3); - f[DIR_M00] = (*d.W)(x1p, x2, x3); - f[DIR_0M0] = (*d.S)(x1, x2p, x3); - f[DIR_00M] = (*d.B)(x1, x2, x3p); - f[DIR_MM0] = (*d.SW)(x1p, x2p, x3); - f[DIR_PM0] = (*d.SE)(x1, x2p, x3); - f[DIR_M0M] = (*d.BW)(x1p, x2, x3p); - f[DIR_P0M] = (*d.BE)(x1, x2, x3p); - f[DIR_0MM] = (*d.BS)(x1, x2p, x3p); - f[DIR_0PM] = (*d.BN)(x1, x2, x3p); - f[DIR_MMM] = (*d.BSW)(x1p, x2p, x3p); - f[DIR_PMM] = (*d.BSE)(x1, x2p, x3p); - f[DIR_MPM] = (*d.BNW)(x1p, x2, x3p); - f[DIR_PPM] = (*d.BNE)(x1, x2, x3p); + f[dM00] = (*d.W)(x1p, x2, x3); + f[d0M0] = (*d.S)(x1, x2p, x3); + f[d00M] = (*d.B)(x1, x2, x3p); + f[dMM0] = (*d.SW)(x1p, x2p, x3); + f[dPM0] = (*d.SE)(x1, x2p, x3); + f[dM0M] = (*d.BW)(x1p, x2, x3p); + f[dP0M] = (*d.BE)(x1, x2, x3p); + f[d0MM] = (*d.BS)(x1, x2p, x3p); + f[d0PM] = (*d.BN)(x1, x2, x3p); + f[dMMM] = (*d.BSW)(x1p, x2p, x3p); + f[dPMM] = (*d.BSE)(x1, x2p, x3p); + f[dMPM] = (*d.BNW)(x1p, x2, x3p); + f[dPPM] = (*d.BNE)(x1, x2, x3p); - f[DIR_000] = (*d.REST)(x1, x2, x3); + f[d000] = (*d.REST)(x1, x2, x3); } ////////////////////////////////////////////////////////////////////////// -void D3Q27EsoTwist3DSoA::setDistribution(const real *const f, size_t x1, size_t x2, size_t x3) +void D3Q27EsoTwist3DSoA::setPostCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) { using namespace vf::lbm::dir; @@ -132,97 +132,97 @@ void D3Q27EsoTwist3DSoA::setDistribution(const real *const f, size_t x1, size_t size_t x2p = x2 + 1; size_t x3p = x3 + 1; - (*d.E)(x1, x2, x3) = f[INV_P00]; - (*d.N)(x1, x2, x3) = f[INV_0P0]; - (*d.T)(x1, x2, x3) = f[INV_00P]; - (*d.NE)(x1, x2, x3) = f[INV_PP0]; - (*d.NW)(x1p, x2, x3) = f[INV_MP0]; - (*d.TE)(x1, x2, x3) = f[INV_P0P]; - (*d.TW)(x1p, x2, x3) = f[INV_M0P]; - (*d.TN)(x1, x2, x3) = f[INV_0PP]; - (*d.TS)(x1, x2p, x3) = f[INV_0MP]; - (*d.TNE)(x1, x2, x3) = f[INV_PPP]; - (*d.TNW)(x1p, x2, x3) = f[INV_MPP]; - (*d.TSE)(x1, x2p, x3) = f[INV_PMP]; - (*d.TSW)(x1p, x2p, x3) = f[INV_MMP]; + (*d.E)(x1, x2, x3) = f[iP00]; + (*d.N)(x1, x2, x3) = f[i0P0]; + (*d.T)(x1, x2, x3) = f[i00P]; + (*d.NE)(x1, x2, x3) = f[iPP0]; + (*d.NW)(x1p, x2, x3) = f[iMP0]; + (*d.TE)(x1, x2, x3) = f[iP0P]; + (*d.TW)(x1p, x2, x3) = f[iM0P]; + (*d.TN)(x1, x2, x3) = f[i0PP]; + (*d.TS)(x1, x2p, x3) = f[i0MP]; + (*d.TNE)(x1, x2, x3) = f[iPPP]; + (*d.TNW)(x1p, x2, x3) = f[iMPP]; + (*d.TSE)(x1, x2p, x3) = f[iPMP]; + (*d.TSW)(x1p, x2p, x3) = f[iMMP]; - (*d.W)(x1p, x2, x3) = f[INV_M00]; - (*d.S)(x1, x2p, x3) = f[INV_0M0]; - (*d.B)(x1, x2, x3p) = f[INV_00M]; - (*d.SW)(x1p, x2p, x3) = f[INV_MM0]; - (*d.SE)(x1, x2p, x3) = f[INV_PM0]; - (*d.BW)(x1p, x2, x3p) = f[INV_M0M]; - (*d.BE)(x1, x2, x3p) = f[INV_P0M]; - (*d.BS)(x1, x2p, x3p) = f[INV_0MM]; - (*d.BN)(x1, x2, x3p) = f[INV_0PM]; - (*d.BSW)(x1p, x2p, x3p) = f[INV_MMM]; - (*d.BSE)(x1, x2p, x3p) = f[INV_PMM]; - (*d.BNW)(x1p, x2, x3p) = f[INV_MPM]; - (*d.BNE)(x1, x2, x3p) = f[INV_PPM]; + (*d.W)(x1p, x2, x3) = f[iM00]; + (*d.S)(x1, x2p, x3) = f[i0M0]; + (*d.B)(x1, x2, x3p) = f[i00M]; + (*d.SW)(x1p, x2p, x3) = f[iMM0]; + (*d.SE)(x1, x2p, x3) = f[iPM0]; + (*d.BW)(x1p, x2, x3p) = f[iM0M]; + (*d.BE)(x1, x2, x3p) = f[iP0M]; + (*d.BS)(x1, x2p, x3p) = f[i0MM]; + (*d.BN)(x1, x2, x3p) = f[i0PM]; + (*d.BSW)(x1p, x2p, x3p) = f[iMMM]; + (*d.BSE)(x1, x2p, x3p) = f[iPMM]; + (*d.BNW)(x1p, x2, x3p) = f[iMPM]; + (*d.BNE)(x1, x2, x3p) = f[iPPM]; - (*d.REST)(x1, x2, x3) = f[DIR_000]; + (*d.REST)(x1, x2, x3) = f[d000]; } ////////////////////////////////////////////////////////////////////////// -void D3Q27EsoTwist3DSoA::getDistributionInv(real *const f, size_t x1, size_t x2, size_t x3) +void D3Q27EsoTwist3DSoA::getPostCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) { using namespace vf::lbm::dir; - f[INV_P00] = (*d.E)(x1, x2, x3); - f[INV_0P0] = (*d.N)(x1, x2, x3); - f[INV_00P] = (*d.T)(x1, x2, x3); - f[INV_PP0] = (*d.NE)(x1, x2, x3); - f[INV_MP0] = (*d.NW)(x1 + 1, x2, x3); - f[INV_P0P] = (*d.TE)(x1, x2, x3); - f[INV_M0P] = (*d.TW)(x1 + 1, x2, x3); - f[INV_0PP] = (*d.TN)(x1, x2, x3); - f[INV_0MP] = (*d.TS)(x1, x2 + 1, x3); - f[INV_PPP] = (*d.TNE)(x1, x2, x3); - f[INV_MPP] = (*d.TNW)(x1 + 1, x2, x3); - f[INV_PMP] = (*d.TSE)(x1, x2 + 1, x3); - f[INV_MMP] = (*d.TSW)(x1 + 1, x2 + 1, x3); + f[iP00] = (*d.E)(x1, x2, x3); + f[i0P0] = (*d.N)(x1, x2, x3); + f[i00P] = (*d.T)(x1, x2, x3); + f[iPP0] = (*d.NE)(x1, x2, x3); + f[iMP0] = (*d.NW)(x1 + 1, x2, x3); + f[iP0P] = (*d.TE)(x1, x2, x3); + f[iM0P] = (*d.TW)(x1 + 1, x2, x3); + f[i0PP] = (*d.TN)(x1, x2, x3); + f[i0MP] = (*d.TS)(x1, x2 + 1, x3); + f[iPPP] = (*d.TNE)(x1, x2, x3); + f[iMPP] = (*d.TNW)(x1 + 1, x2, x3); + f[iPMP] = (*d.TSE)(x1, x2 + 1, x3); + f[iMMP] = (*d.TSW)(x1 + 1, x2 + 1, x3); - f[INV_M00] = (*d.W)(x1 + 1, x2, x3); - f[INV_0M0] = (*d.S)(x1, x2 + 1, x3); - f[INV_00M] = (*d.B)(x1, x2, x3 + 1); - f[INV_MM0] = (*d.SW)(x1 + 1, x2 + 1, x3); - f[INV_PM0] = (*d.SE)(x1, x2 + 1, x3); - f[INV_M0M] = (*d.BW)(x1 + 1, x2, x3 + 1); - f[INV_P0M] = (*d.BE)(x1, x2, x3 + 1); - f[INV_0MM] = (*d.BS)(x1, x2 + 1, x3 + 1); - f[INV_0PM] = (*d.BN)(x1, x2, x3 + 1); - f[INV_MMM] = (*d.BSW)(x1 + 1, x2 + 1, x3 + 1); - f[INV_PMM] = (*d.BSE)(x1, x2 + 1, x3 + 1); - f[INV_MPM] = (*d.BNW)(x1 + 1, x2, x3 + 1); - f[INV_PPM] = (*d.BNE)(x1, x2, x3 + 1); + f[iM00] = (*d.W)(x1 + 1, x2, x3); + f[i0M0] = (*d.S)(x1, x2 + 1, x3); + f[i00M] = (*d.B)(x1, x2, x3 + 1); + f[iMM0] = (*d.SW)(x1 + 1, x2 + 1, x3); + f[iPM0] = (*d.SE)(x1, x2 + 1, x3); + f[iM0M] = (*d.BW)(x1 + 1, x2, x3 + 1); + f[iP0M] = (*d.BE)(x1, x2, x3 + 1); + f[i0MM] = (*d.BS)(x1, x2 + 1, x3 + 1); + f[i0PM] = (*d.BN)(x1, x2, x3 + 1); + f[iMMM] = (*d.BSW)(x1 + 1, x2 + 1, x3 + 1); + f[iPMM] = (*d.BSE)(x1, x2 + 1, x3 + 1); + f[iMPM] = (*d.BNW)(x1 + 1, x2, x3 + 1); + f[iPPM] = (*d.BNE)(x1, x2, x3 + 1); - f[DIR_000] = (*d.REST)(x1, x2, x3); + f[d000] = (*d.REST)(x1, x2, x3); } ////////////////////////////////////////////////////////////////////////// -void D3Q27EsoTwist3DSoA::setDistributionInv(const real *const f, size_t x1, size_t x2, size_t x3) +void D3Q27EsoTwist3DSoA::setPreCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) { - //(*this->localDistributions)(D3Q27System::ET_E,x1, x2, x3) = f[D3Q27System::DIR_P00]; - //(*this->localDistributions)(D3Q27System::ET_N,x1, x2, x3) = f[D3Q27System::DIR_0P0]; - //(*this->localDistributions)(D3Q27System::ET_T,x1, x2, x3) = f[D3Q27System::DIR_00P]; - //(*this->localDistributions)(D3Q27System::ET_NE,x1, x2, x3) = f[D3Q27System::DIR_PP0]; - //(*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2, x3) = f[D3Q27System::DIR_MP0]; - //(*this->localDistributions)(D3Q27System::ET_TE,x1, x2, x3) = f[D3Q27System::DIR_P0P]; - //(*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2, x3) = f[D3Q27System::DIR_M0P]; - //(*this->localDistributions)(D3Q27System::ET_TN,x1, x2, x3) = f[D3Q27System::DIR_0PP]; - //(*this->localDistributions)(D3Q27System::ET_TS,x1, x2+1,x3) = f[D3Q27System::DIR_0MP]; - //(*this->localDistributions)(D3Q27System::ET_TNE,x1, x2, x3) = f[D3Q27System::DIR_PPP]; - //(*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2, x3) = f[D3Q27System::DIR_MPP]; - //(*this->localDistributions)(D3Q27System::ET_TSE,x1, x2+1,x3) = f[D3Q27System::DIR_PMP]; - //(*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f[D3Q27System::DIR_MMP]; + //(*this->localDistributions)(D3Q27System::ET_E,x1, x2, x3) = f[D3Q27System::dP00]; + //(*this->localDistributions)(D3Q27System::ET_N,x1, x2, x3) = f[D3Q27System::d0P0]; + //(*this->localDistributions)(D3Q27System::ET_T,x1, x2, x3) = f[D3Q27System::d00P]; + //(*this->localDistributions)(D3Q27System::ET_NE,x1, x2, x3) = f[D3Q27System::dPP0]; + //(*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2, x3) = f[D3Q27System::dMP0]; + //(*this->localDistributions)(D3Q27System::ET_TE,x1, x2, x3) = f[D3Q27System::dP0P]; + //(*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2, x3) = f[D3Q27System::dM0P]; + //(*this->localDistributions)(D3Q27System::ET_TN,x1, x2, x3) = f[D3Q27System::d0PP]; + //(*this->localDistributions)(D3Q27System::ET_TS,x1, x2+1,x3) = f[D3Q27System::d0MP]; + //(*this->localDistributions)(D3Q27System::ET_TNE,x1, x2, x3) = f[D3Q27System::dPPP]; + //(*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2, x3) = f[D3Q27System::dMPP]; + //(*this->localDistributions)(D3Q27System::ET_TSE,x1, x2+1,x3) = f[D3Q27System::dPMP]; + //(*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f[D3Q27System::dMMP]; - //(*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2, x3 ) = f[D3Q27System::DIR_M00 ]; - //(*this->nonLocalDistributions)(D3Q27System::ET_S,x1, x2+1,x3 ) = f[D3Q27System::DIR_0M0 ]; - //(*this->nonLocalDistributions)(D3Q27System::ET_B,x1, x2, x3+1 ) = f[D3Q27System::DIR_00M ]; - //(*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3 ) = f[D3Q27System::DIR_MM0]; - //(*this->nonLocalDistributions)(D3Q27System::ET_SE,x1, x2+1,x3 ) = f[D3Q27System::DIR_PM0]; - //(*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2, x3+1 ) = f[D3Q27System::DIR_M0M]; - //(*this->nonLocalDistributions)(D3Q27System::ET_BE,x1, x2, x3+1 ) = f[D3Q27System::DIR_P0M]; - //(*this->nonLocalDistributions)(D3Q27System::ET_BS,x1, x2+1,x3+1 ) = f[D3Q27System::DIR_0MM]; - //(*this->nonLocalDistributions)(D3Q27System::ET_BN,x1, x2, x3+1 ) = f[D3Q27System::DIR_0PM]; + //(*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2, x3 ) = f[D3Q27System::dM00 ]; + //(*this->nonLocalDistributions)(D3Q27System::ET_S,x1, x2+1,x3 ) = f[D3Q27System::d0M0 ]; + //(*this->nonLocalDistributions)(D3Q27System::ET_B,x1, x2, x3+1 ) = f[D3Q27System::d00M ]; + //(*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3 ) = f[D3Q27System::dMM0]; + //(*this->nonLocalDistributions)(D3Q27System::ET_SE,x1, x2+1,x3 ) = f[D3Q27System::dPM0]; + //(*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2, x3+1 ) = f[D3Q27System::dM0M]; + //(*this->nonLocalDistributions)(D3Q27System::ET_BE,x1, x2, x3+1 ) = f[D3Q27System::dP0M]; + //(*this->nonLocalDistributions)(D3Q27System::ET_BS,x1, x2+1,x3+1 ) = f[D3Q27System::d0MM]; + //(*this->nonLocalDistributions)(D3Q27System::ET_BN,x1, x2, x3+1 ) = f[D3Q27System::d0PM]; //(*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1) = f[D3Q27System::BSW]; //(*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1, x2+1,x3+1) = f[D3Q27System::BSE]; //(*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2, x3+1) = f[D3Q27System::BNW]; @@ -231,62 +231,62 @@ void D3Q27EsoTwist3DSoA::setDistributionInv(const real *const f, size_t x1, size //(*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::REST]; } ////////////////////////////////////////////////////////////////////////// -void D3Q27EsoTwist3DSoA::setDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, +void D3Q27EsoTwist3DSoA::setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) { // bool directionFlag = false; // if ((direction & EsoTwistD3Q27System::etE) == EsoTwistD3Q27System::etE) - // (*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2, x3 ) = f[D3Q27System::DIR_P00]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2, x3 ) = f[D3Q27System::dP00]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etW) == EsoTwistD3Q27System::etW) - // (*this->localDistributions)(D3Q27System::ET_E,x1, x2, x3) = f[D3Q27System::DIR_M00]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_E,x1, x2, x3) = f[D3Q27System::dM00]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etS) == EsoTwistD3Q27System::etS) - // (*this->localDistributions)(D3Q27System::ET_N,x1, x2, x3) = f[D3Q27System::DIR_0M0]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_N,x1, x2, x3) = f[D3Q27System::d0M0]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etN) == EsoTwistD3Q27System::etN) - // (*this->nonLocalDistributions)(D3Q27System::ET_S,x1, x2+1,x3 ) = f[D3Q27System::DIR_0P0]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_S,x1, x2+1,x3 ) = f[D3Q27System::d0P0]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etB) == EsoTwistD3Q27System::etB) - // (*this->localDistributions)(D3Q27System::ET_T,x1, x2, x3) = f[D3Q27System::DIR_00M]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_T,x1, x2, x3) = f[D3Q27System::d00M]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etT) == EsoTwistD3Q27System::etT) - // (*this->nonLocalDistributions)(D3Q27System::ET_B,x1, x2, x3+1 ) = f[D3Q27System::DIR_00P]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_B,x1, x2, x3+1 ) = f[D3Q27System::d00P]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etSW) == EsoTwistD3Q27System::etSW) - // (*this->localDistributions)(D3Q27System::ET_NE,x1, x2, x3) = f[D3Q27System::DIR_MM0]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_NE,x1, x2, x3) = f[D3Q27System::dMM0]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etNE) == EsoTwistD3Q27System::etNE) - // (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3 ) = f[D3Q27System::DIR_PP0]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3 ) = f[D3Q27System::dPP0]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etNW) == EsoTwistD3Q27System::etNW) - // (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1, x2+1,x3 ) = f[D3Q27System::DIR_MP0]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1, x2+1,x3 ) = f[D3Q27System::dMP0]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etSE) == EsoTwistD3Q27System::etSE) - // (*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2, x3) = f[D3Q27System::DIR_PM0]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2, x3) = f[D3Q27System::dPM0]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etBW) == EsoTwistD3Q27System::etBW) - // (*this->localDistributions)(D3Q27System::ET_TE,x1, x2, x3) = f[D3Q27System::DIR_M0M]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_TE,x1, x2, x3) = f[D3Q27System::dM0M]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTE) == EsoTwistD3Q27System::etTE) - // (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2, x3+1 ) = f[D3Q27System::DIR_P0P]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2, x3+1 ) = f[D3Q27System::dP0P]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTW) == EsoTwistD3Q27System::etTW) - // (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1, x2, x3+1 ) = f[D3Q27System::DIR_M0P]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1, x2, x3+1 ) = f[D3Q27System::dM0P]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etBE) == EsoTwistD3Q27System::etBE) - // (*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2, x3) = f[D3Q27System::DIR_P0M]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2, x3) = f[D3Q27System::dP0M]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etBS) == EsoTwistD3Q27System::etBS) - // (*this->localDistributions)(D3Q27System::ET_TN,x1, x2, x3) = f[D3Q27System::DIR_0MM]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_TN,x1, x2, x3) = f[D3Q27System::d0MM]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTN) == EsoTwistD3Q27System::etTN) - // (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1, x2+1,x3+1 ) = f[D3Q27System::DIR_0PP]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1, x2+1,x3+1 ) = f[D3Q27System::d0PP]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTS) == EsoTwistD3Q27System::etTS) - // (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1, x2, x3+1 ) = f[D3Q27System::DIR_0MP]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1, x2, x3+1 ) = f[D3Q27System::d0MP]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etBN) == EsoTwistD3Q27System::etBN) - // (*this->localDistributions)(D3Q27System::ET_TS,x1, x2+1,x3) = f[D3Q27System::DIR_0PM]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_TS,x1, x2+1,x3) = f[D3Q27System::d0PM]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etBSW) == EsoTwistD3Q27System::etBSW) // (*this->localDistributions)(D3Q27System::ET_TNE,x1, x2, x3) = f[D3Q27System::BSW]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTNE) == EsoTwistD3Q27System::etTNE) - // (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1) = f[D3Q27System::DIR_PPP]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1) = f[D3Q27System::dPPP]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etBSE) == EsoTwistD3Q27System::etBSE) // (*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2, x3) = f[D3Q27System::BSE]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTNW) == EsoTwistD3Q27System::etTNW) - // (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1, x2+1,x3+1) = f[D3Q27System::DIR_MPP]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1, x2+1,x3+1) = f[D3Q27System::dMPP]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etBNW) == EsoTwistD3Q27System::etBNW) // (*this->localDistributions)(D3Q27System::ET_TSE,x1, x2+1,x3) = f[D3Q27System::BNW]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTSE) == EsoTwistD3Q27System::etTSE) - // (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2, x3+1) = f[D3Q27System::DIR_PMP]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2, x3+1) = f[D3Q27System::dPMP]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etBNE) == EsoTwistD3Q27System::etBNE) // (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f[D3Q27System::DIR_DIR_PPM]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW) - // (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3+1) = f[D3Q27System::DIR_MMP]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3+1) = f[D3Q27System::dMMP]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST) // (*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::REST]; directionFlag=true; //#ifdef _DEBUG @@ -294,86 +294,86 @@ void D3Q27EsoTwist3DSoA::setDistributionForDirection(const real *const f, size_t //#endif //DEBUG } ////////////////////////////////////////////////////////////////////////// -void D3Q27EsoTwist3DSoA::setDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) +void D3Q27EsoTwist3DSoA::setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) { // switch (direction) //{ - // case D3Q27System::DIR_P00 : + // case D3Q27System::dP00 : // (*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2, x3 ) = f; // break; - // case D3Q27System::DIR_M00 : + // case D3Q27System::dM00 : // (*this->localDistributions)(D3Q27System::ET_E,x1, x2, x3) = f; // break; - // case D3Q27System::DIR_0M0 : + // case D3Q27System::d0M0 : // (*this->localDistributions)(D3Q27System::ET_N,x1, x2, x3) = f; // break; - // case D3Q27System::DIR_0P0 : + // case D3Q27System::d0P0 : // (*this->nonLocalDistributions)(D3Q27System::ET_S,x1, x2+1,x3 ) = f; // break; - // case D3Q27System::DIR_00M : + // case D3Q27System::d00M : // (*this->localDistributions)(D3Q27System::ET_T,x1, x2, x3) = f; // break; - // case D3Q27System::DIR_00P : + // case D3Q27System::d00P : // (*this->nonLocalDistributions)(D3Q27System::ET_B,x1, x2, x3+1 ) = f; // break; - // case D3Q27System::DIR_MM0 : + // case D3Q27System::dMM0 : // (*this->localDistributions)(D3Q27System::ET_NE,x1, x2, x3) = f; // break; - // case D3Q27System::DIR_PP0 : + // case D3Q27System::dPP0 : // (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3 ) = f; // break; - // case D3Q27System::DIR_MP0 : + // case D3Q27System::dMP0 : // (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1, x2+1,x3 ) = f; // break; - // case D3Q27System::DIR_PM0 : + // case D3Q27System::dPM0 : // (*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2, x3) = f; // break; - // case D3Q27System::DIR_M0M : + // case D3Q27System::dM0M : // (*this->localDistributions)(D3Q27System::ET_TE,x1, x2, x3) = f; // break; - // case D3Q27System::DIR_P0P : + // case D3Q27System::dP0P : // (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2, x3+1 ) = f; // break; - // case D3Q27System::DIR_M0P : + // case D3Q27System::dM0P : // (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1, x2, x3+1 ) = f; // break; - // case D3Q27System::DIR_P0M : + // case D3Q27System::dP0M : // (*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2, x3) = f; // break; - // case D3Q27System::DIR_0MM : + // case D3Q27System::d0MM : // (*this->localDistributions)(D3Q27System::ET_TN,x1, x2, x3) = f; // break; - // case D3Q27System::DIR_0PP : + // case D3Q27System::d0PP : // (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1, x2+1,x3+1 ) = f; // break; - // case D3Q27System::DIR_0MP : + // case D3Q27System::d0MP : // (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1, x2, x3+1 ) = f; // break; - // case D3Q27System::DIR_0PM : + // case D3Q27System::d0PM : // (*this->localDistributions)(D3Q27System::ET_TS,x1, x2+1,x3) = f; // break; // case D3Q27System::BSW : // (*this->localDistributions)(D3Q27System::ET_TNE,x1, x2, x3) = f; // break; - // case D3Q27System::DIR_PPP : + // case D3Q27System::dPPP : // (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1) = f; // break; // case D3Q27System::BSE : // (*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2, x3) = f; // break; - // case D3Q27System::DIR_MPP : + // case D3Q27System::dMPP : // (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1, x2+1,x3+1) = f; // break; // case D3Q27System::BNW : // (*this->localDistributions)(D3Q27System::ET_TSE,x1, x2+1,x3) = f; // break; - // case D3Q27System::DIR_PMP : + // case D3Q27System::dPMP : // (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2, x3+1) = f; // break; // case D3Q27System::DIR_DIR_PPM : // (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f; // break; - // case D3Q27System::DIR_MMP : + // case D3Q27System::dMMP : // (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3+1) = f; // break; // case D3Q27System::REST : @@ -384,65 +384,65 @@ void D3Q27EsoTwist3DSoA::setDistributionForDirection(real f, size_t x1, size_t x //} } ////////////////////////////////////////////////////////////////////////// -void D3Q27EsoTwist3DSoA::setDistributionInvForDirection(const real *const f, size_t x1, size_t x2, size_t x3, +void D3Q27EsoTwist3DSoA::setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) { // bool directionFlag = false; // if ((direction & EsoTwistD3Q27System::etE) == EsoTwistD3Q27System::etE) - // (*this->localDistributions)(D3Q27System::ET_E,x1, x2, x3) = f[D3Q27System::DIR_P00]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_E,x1, x2, x3) = f[D3Q27System::dP00]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etW) == EsoTwistD3Q27System::etW) - // (*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2, x3 ) = f[D3Q27System::DIR_M00]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2, x3 ) = f[D3Q27System::dM00]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etS) == EsoTwistD3Q27System::etS) - // (*this->nonLocalDistributions)(D3Q27System::ET_S,x1, x2+1,x3 ) = f[D3Q27System::DIR_0M0]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_S,x1, x2+1,x3 ) = f[D3Q27System::d0M0]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etN) == EsoTwistD3Q27System::etN) - // (*this->localDistributions)(D3Q27System::ET_N,x1, x2, x3) = f[D3Q27System::DIR_0P0]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_N,x1, x2, x3) = f[D3Q27System::d0P0]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etB) == EsoTwistD3Q27System::etB) - // (*this->nonLocalDistributions)(D3Q27System::ET_B,x1, x2, x3+1 ) = f[D3Q27System::DIR_00M]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_B,x1, x2, x3+1 ) = f[D3Q27System::d00M]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etT) == EsoTwistD3Q27System::etT) - // (*this->localDistributions)(D3Q27System::ET_T,x1, x2, x3) = f[D3Q27System::DIR_00P]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_T,x1, x2, x3) = f[D3Q27System::d00P]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etSW) == EsoTwistD3Q27System::etSW) - // (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3 ) = f[D3Q27System::DIR_MM0]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3 ) = f[D3Q27System::dMM0]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etNE) == EsoTwistD3Q27System::etNE) - // (*this->localDistributions)(D3Q27System::ET_NE,x1, x2, x3) = f[D3Q27System::DIR_PP0]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_NE,x1, x2, x3) = f[D3Q27System::dPP0]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etNW) == EsoTwistD3Q27System::etNW) - // (*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2, x3) = f[D3Q27System::DIR_MP0]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2, x3) = f[D3Q27System::dMP0]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etSE) == EsoTwistD3Q27System::etSE) - // (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1, x2+1,x3 ) = f[D3Q27System::DIR_PM0]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1, x2+1,x3 ) = f[D3Q27System::dPM0]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etBW) == EsoTwistD3Q27System::etBW) - // (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2, x3+1 ) = f[D3Q27System::DIR_M0M]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2, x3+1 ) = f[D3Q27System::dM0M]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTE) == EsoTwistD3Q27System::etTE) - // (*this->localDistributions)(D3Q27System::ET_TE,x1, x2, x3) = f[D3Q27System::DIR_P0P]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_TE,x1, x2, x3) = f[D3Q27System::dP0P]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTW) == EsoTwistD3Q27System::etTW) - // (*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2, x3) = f[D3Q27System::DIR_M0P]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2, x3) = f[D3Q27System::dM0P]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etBE) == EsoTwistD3Q27System::etBE) - // (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1, x2, x3+1 ) = f[D3Q27System::DIR_P0M]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1, x2, x3+1 ) = f[D3Q27System::dP0M]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etBS) == EsoTwistD3Q27System::etBS) - // (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1, x2+1,x3+1 ) = f[D3Q27System::DIR_0MM]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1, x2+1,x3+1 ) = f[D3Q27System::d0MM]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTN) == EsoTwistD3Q27System::etTN) - // (*this->localDistributions)(D3Q27System::ET_TN,x1, x2, x3) = f[D3Q27System::DIR_0PP]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_TN,x1, x2, x3) = f[D3Q27System::d0PP]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTS) == EsoTwistD3Q27System::etTS) - // (*this->localDistributions)(D3Q27System::ET_TS,x1, x2+1,x3) = f[D3Q27System::DIR_0MP]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_TS,x1, x2+1,x3) = f[D3Q27System::d0MP]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etBN) == EsoTwistD3Q27System::etBN) - // (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1, x2, x3+1 ) = f[D3Q27System::DIR_0PM]; directionFlag=true; + // (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1, x2, x3+1 ) = f[D3Q27System::d0PM]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etBSW) == EsoTwistD3Q27System::etBSW) // (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1) = f[D3Q27System::BSW]; // directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTNE) == EsoTwistD3Q27System::etTNE) - // (*this->localDistributions)(D3Q27System::ET_TNE,x1, x2, x3) = f[D3Q27System::DIR_PPP]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_TNE,x1, x2, x3) = f[D3Q27System::dPPP]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etBSE) == EsoTwistD3Q27System::etBSE) // (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1, x2+1,x3+1) = f[D3Q27System::BSE]; // directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTNW) == EsoTwistD3Q27System::etTNW) - // (*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2, x3) = f[D3Q27System::DIR_MPP]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2, x3) = f[D3Q27System::dMPP]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etBNW) == EsoTwistD3Q27System::etBNW) // (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2, x3+1) = f[D3Q27System::BNW]; // directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTSE) == EsoTwistD3Q27System::etTSE) - // (*this->localDistributions)(D3Q27System::ET_TSE,x1, x2+1,x3) = f[D3Q27System::DIR_PMP]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_TSE,x1, x2+1,x3) = f[D3Q27System::dPMP]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etBNE) == EsoTwistD3Q27System::etBNE) // (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3+1)= f[D3Q27System::DIR_DIR_PPM]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW) - // (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f[D3Q27System::DIR_MMP]; directionFlag=true; + // (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f[D3Q27System::dMMP]; directionFlag=true; // if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST) // (*this->zeroDistributions)(x1,x2,x3) = f[D3Q27System::REST]; directionFlag=true; //#ifdef _DEBUG @@ -450,87 +450,87 @@ void D3Q27EsoTwist3DSoA::setDistributionInvForDirection(const real *const f, siz //#endif //DEBUG } ////////////////////////////////////////////////////////////////////////// -void D3Q27EsoTwist3DSoA::setDistributionInvForDirection(real f, size_t x1, size_t x2, size_t x3, +void D3Q27EsoTwist3DSoA::setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, unsigned long int direction) { // switch (direction) //{ - // case D3Q27System::DIR_P00 : + // case D3Q27System::dP00 : // (*this->localDistributions)(D3Q27System::ET_E,x1, x2, x3) = f; // break; - // case D3Q27System::DIR_M00 : + // case D3Q27System::dM00 : // (*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2, x3 ) = f; // break; - // case D3Q27System::DIR_0M0 : + // case D3Q27System::d0M0 : // (*this->nonLocalDistributions)(D3Q27System::ET_S,x1, x2+1,x3 ) = f; // break; - // case D3Q27System::DIR_0P0 : + // case D3Q27System::d0P0 : // (*this->localDistributions)(D3Q27System::ET_N,x1, x2, x3) = f; // break; - // case D3Q27System::DIR_00M : + // case D3Q27System::d00M : // (*this->nonLocalDistributions)(D3Q27System::ET_B,x1, x2, x3+1 ) = f; // break; - // case D3Q27System::DIR_00P : + // case D3Q27System::d00P : // (*this->localDistributions)(D3Q27System::ET_T,x1, x2, x3) = f; // break; - // case D3Q27System::DIR_MM0 : + // case D3Q27System::dMM0 : // (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3 ) = f; // break; - // case D3Q27System::DIR_PP0 : + // case D3Q27System::dPP0 : // (*this->localDistributions)(D3Q27System::ET_NE,x1, x2, x3) = f; // break; - // case D3Q27System::DIR_MP0 : + // case D3Q27System::dMP0 : // (*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2, x3) = f; // break; - // case D3Q27System::DIR_PM0 : + // case D3Q27System::dPM0 : // (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1, x2+1,x3 ) = f; // break; - // case D3Q27System::DIR_M0M : + // case D3Q27System::dM0M : // (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2, x3+1 ) = f; // break; - // case D3Q27System::DIR_P0P : + // case D3Q27System::dP0P : // (*this->localDistributions)(D3Q27System::ET_TE,x1, x2, x3) = f; // break; - // case D3Q27System::DIR_M0P : + // case D3Q27System::dM0P : // (*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2, x3) = f; // break; - // case D3Q27System::DIR_P0M : + // case D3Q27System::dP0M : // (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1, x2, x3+1 ) = f; // break; - // case D3Q27System::DIR_0MM : + // case D3Q27System::d0MM : // (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1, x2+1,x3+1 ) = f; // break; - // case D3Q27System::DIR_0PP : + // case D3Q27System::d0PP : // (*this->localDistributions)(D3Q27System::ET_TN,x1, x2, x3) = f; // break; - // case D3Q27System::DIR_0MP : + // case D3Q27System::d0MP : // (*this->localDistributions)(D3Q27System::ET_TS,x1, x2+1,x3) = f; // break; - // case D3Q27System::DIR_0PM : + // case D3Q27System::d0PM : // (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1, x2, x3+1 ) = f; // break; // case D3Q27System::BSW : // (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1) = f; // break; - // case D3Q27System::DIR_PPP : + // case D3Q27System::dPPP : // (*this->localDistributions)(D3Q27System::ET_TNE,x1, x2, x3) = f; // break; // case D3Q27System::BSE : // (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1, x2+1,x3+1) = f; // break; - // case D3Q27System::DIR_MPP : + // case D3Q27System::dMPP : // (*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2, x3) = f; // break; // case D3Q27System::BNW : // (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2, x3+1) = f; // break; - // case D3Q27System::DIR_PMP : + // case D3Q27System::dPMP : // (*this->localDistributions)(D3Q27System::ET_TSE,x1, x2+1,x3) = f; // break; // case D3Q27System::DIR_DIR_PPM : // (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3+1) = f; // break; - // case D3Q27System::DIR_MMP : + // case D3Q27System::dMMP : // (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3) = f; // break; // case D3Q27System::REST : @@ -546,57 +546,57 @@ real D3Q27EsoTwist3DSoA::getDistributionInvForDirection(size_t /*x1*/, size_t /* { // switch (direction) //{ - // case D3Q27System::DIR_P00 : + // case D3Q27System::dP00 : // return (*this->nonLocalDistributions)(D3Q27System::ET_W,x1+1,x2, x3 ); - // case D3Q27System::DIR_M00 : + // case D3Q27System::dM00 : // return (*this->localDistributions)(D3Q27System::ET_E,x1, x2, x3); - // case D3Q27System::DIR_0M0 : + // case D3Q27System::d0M0 : // return (*this->localDistributions)(D3Q27System::ET_N,x1, x2, x3); - // case D3Q27System::DIR_0P0 : + // case D3Q27System::d0P0 : // return (*this->nonLocalDistributions)(D3Q27System::ET_S,x1, x2+1,x3 ); - // case D3Q27System::DIR_00M : + // case D3Q27System::d00M : // return (*this->localDistributions)(D3Q27System::ET_T,x1, x2, x3); - // case D3Q27System::DIR_00P : + // case D3Q27System::d00P : // return (*this->nonLocalDistributions)(D3Q27System::ET_B,x1, x2, x3+1 ); - // case D3Q27System::DIR_MM0 : + // case D3Q27System::dMM0 : // return (*this->localDistributions)(D3Q27System::ET_NE,x1, x2, x3); - // case D3Q27System::DIR_PP0 : + // case D3Q27System::dPP0 : // return (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1+1,x2+1,x3 ); - // case D3Q27System::DIR_MP0 : + // case D3Q27System::dMP0 : // return (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1, x2+1,x3 ); - // case D3Q27System::DIR_PM0 : + // case D3Q27System::dPM0 : // return (*this->localDistributions)(D3Q27System::ET_NW,x1+1,x2, x3); - // case D3Q27System::DIR_M0M : + // case D3Q27System::dM0M : // return (*this->localDistributions)(D3Q27System::ET_TE,x1, x2, x3); - // case D3Q27System::DIR_P0P : + // case D3Q27System::dP0P : // return (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1+1,x2, x3+1 ); - // case D3Q27System::DIR_M0P : + // case D3Q27System::dM0P : // return (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1, x2, x3+1 ); - // case D3Q27System::DIR_P0M : + // case D3Q27System::dP0M : // return (*this->localDistributions)(D3Q27System::ET_TW,x1+1,x2, x3); - // case D3Q27System::DIR_0MM : + // case D3Q27System::d0MM : // return (*this->localDistributions)(D3Q27System::ET_TN,x1, x2, x3); - // case D3Q27System::DIR_0PP : + // case D3Q27System::d0PP : // return (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1, x2+1,x3+1 ); - // case D3Q27System::DIR_0MP : + // case D3Q27System::d0MP : // return (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1, x2, x3+1 ); - // case D3Q27System::DIR_0PM : + // case D3Q27System::d0PM : // return (*this->localDistributions)(D3Q27System::ET_TS,x1, x2+1,x3); // case D3Q27System::BSW : // return (*this->localDistributions)(D3Q27System::ET_TNE,x1, x2, x3); - // case D3Q27System::DIR_PPP : + // case D3Q27System::dPPP : // return (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1+1,x2+1,x3+1); // case D3Q27System::BSE : // return (*this->localDistributions)(D3Q27System::ET_TNW,x1+1,x2, x3); - // case D3Q27System::DIR_MPP : + // case D3Q27System::dMPP : // return (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1, x2+1,x3+1); // case D3Q27System::BNW : // return (*this->localDistributions)(D3Q27System::ET_TSE,x1, x2+1,x3); - // case D3Q27System::DIR_PMP : + // case D3Q27System::dPMP : // return (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1+1,x2, x3+1); // case D3Q27System::DIR_DIR_PPM : // return (*this->localDistributions)(D3Q27System::ET_TSW,x1+1,x2+1,x3); - // case D3Q27System::DIR_MMP : + // case D3Q27System::dMMP : // return (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3+1); // case D3Q27System::REST : // return (*this->zeroDistributions)(x1,x2,x3); diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.h b/src/cpu/core/Data/D3Q27EsoTwist3DSoA.h similarity index 81% rename from src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.h rename to src/cpu/core/Data/D3Q27EsoTwist3DSoA.h index 204e6fe15f69a387c289ae8c60f63d59ef62ddc3..503054373c0ef6cf7fbbc4bd24cf1d06c769995a 100644 --- a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSoA.h +++ b/src/cpu/core/Data/D3Q27EsoTwist3DSoA.h @@ -48,28 +48,28 @@ public: ////////////////////////////////////////////////////////////////////////// void swap() override; ////////////////////////////////////////////////////////////////////////// - void getDistribution(real *const f, size_t x1, size_t x2, size_t x3) override; + void getPreCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override; ////////////////////////////////////////////////////////////////////////// - void setDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override; + void setPostCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override; //////////////////////////////////////////////////////////////////////// - void getDistributionInv(real *const f, size_t x1, size_t x2, size_t x3) override; + void getPostCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override; ////////////////////////////////////////////////////////////////////////// - void setDistributionInv(const real *const f, size_t x1, size_t x2, size_t x3) override; + void setPreCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override; ////////////////////////////////////////////////////////////////////////// - void setDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, + void setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) override; ////////////////////////////////////////////////////////////////////////// - void setDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override; + void setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override; ////////////////////////////////////////////////////////////////////////// real getDistributionInvForDirection(size_t x1, size_t x2, size_t x3, int direction) override; ////////////////////////////////////////////////////////////////////////// - void setDistributionInvForDirection(const real *const f, size_t x1, size_t x2, size_t x3, + void setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) override; ////////////////////////////////////////////////////////////////////////// - void setDistributionInvForDirection(real f, size_t x1, size_t x2, size_t x3, + void setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, unsigned long int direction) override; ////////////////////////////////////////////////////////////////////////// - real getDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) override; + real getPreCollisionDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) override; ////////////////////////////////////////////////////////////////////////// size_t getNX1() const override; ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.cpp b/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.cpp similarity index 64% rename from src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.cpp rename to src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.cpp index 11119ecbd59f1a4d145fb130b3d0fe2b2a671fac..f40adc2eab55c3292faaec698ff0bdb666adf13c 100644 --- a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.cpp +++ b/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.cpp @@ -54,292 +54,294 @@ D3Q27EsoTwist3DSplittedVector::~D3Q27EsoTwist3DSplittedVector() = default; ////////////////////////////////////////////////////////////////////////// void D3Q27EsoTwist3DSplittedVector::swap() { std::swap(this->localDistributions, this->nonLocalDistributions); } ////////////////////////////////////////////////////////////////////////// -void D3Q27EsoTwist3DSplittedVector::getDistribution(real *const f, size_t x1, size_t x2, size_t x3) +void D3Q27EsoTwist3DSplittedVector::getPreCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) { - using namespace vf::lbm::dir; + const size_t x1p = x1 + 1; + const size_t x2p = x2 + 1; + const size_t x3p = x3 + 1; - f[DIR_P00] = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); - f[DIR_0P0] = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); - f[DIR_00P] = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3); - f[DIR_PP0] = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3); - f[DIR_MP0] = (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3); - f[DIR_P0P] = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3); - f[DIR_M0P] = (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3); - f[DIR_0PP] = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3); - f[DIR_0MP] = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3); - f[DIR_PPP] = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3); - f[DIR_MPP] = (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3); - f[DIR_PMP] = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3); - f[DIR_MMP] = (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3); + f[vf::lbm::dir::dP00] = (*this->localDistributions)(D3Q27System::ET_P00, x1, x2, x3); + f[vf::lbm::dir::d0P0] = (*this->localDistributions)(D3Q27System::ET_0P0, x1, x2, x3); + f[vf::lbm::dir::d00P] = (*this->localDistributions)(D3Q27System::ET_00P, x1, x2, x3); + f[vf::lbm::dir::dPP0] = (*this->localDistributions)(D3Q27System::ET_PP0, x1, x2, x3); + f[vf::lbm::dir::dMP0] = (*this->localDistributions)(D3Q27System::ET_MP0, x1p, x2, x3); + f[vf::lbm::dir::dP0P] = (*this->localDistributions)(D3Q27System::ET_P0P, x1, x2, x3); + f[vf::lbm::dir::dM0P] = (*this->localDistributions)(D3Q27System::ET_M0P, x1p, x2, x3); + f[vf::lbm::dir::d0PP] = (*this->localDistributions)(D3Q27System::ET_0PP, x1, x2, x3); + f[vf::lbm::dir::d0MP] = (*this->localDistributions)(D3Q27System::ET_0MP, x1, x2p, x3); + f[vf::lbm::dir::dPPP] = (*this->localDistributions)(D3Q27System::ET_PPP, x1, x2, x3); + f[vf::lbm::dir::dMPP] = (*this->localDistributions)(D3Q27System::ET_MPP, x1p, x2, x3); + f[vf::lbm::dir::dPMP] = (*this->localDistributions)(D3Q27System::ET_PMP, x1, x2p, x3); + f[vf::lbm::dir::dMMP] = (*this->localDistributions)(D3Q27System::ET_MMP, x1p, x2p, x3); - f[DIR_M00] = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3); - f[DIR_0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3); - f[DIR_00M] = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1); - f[DIR_MM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3); - f[DIR_PM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3); - f[DIR_M0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1); - f[DIR_P0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1); - f[DIR_0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1); - f[DIR_0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1); - f[DIR_MMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1); - f[DIR_PMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1); - f[DIR_MPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1); - f[DIR_PPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1); + f[vf::lbm::dir::dM00] = (*this->nonLocalDistributions)(D3Q27System::ET_M00, x1p, x2, x3); + f[vf::lbm::dir::d0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_0M0, x1, x2p, x3); + f[vf::lbm::dir::d00M] = (*this->nonLocalDistributions)(D3Q27System::ET_00M, x1, x2, x3p); + f[vf::lbm::dir::dMM0] = (*this->nonLocalDistributions)(D3Q27System::ET_MM0, x1p, x2p, x3); + f[vf::lbm::dir::dPM0] = (*this->nonLocalDistributions)(D3Q27System::ET_PM0, x1, x2p, x3); + f[vf::lbm::dir::dM0M] = (*this->nonLocalDistributions)(D3Q27System::ET_M0M, x1p, x2, x3p); + f[vf::lbm::dir::dP0M] = (*this->nonLocalDistributions)(D3Q27System::ET_P0M, x1, x2, x3p); + f[vf::lbm::dir::d0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_0MM, x1, x2p, x3p); + f[vf::lbm::dir::d0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_0PM, x1, x2, x3p); + f[vf::lbm::dir::dMMM] = (*this->nonLocalDistributions)(D3Q27System::ET_MMM, x1p, x2p, x3p); + f[vf::lbm::dir::dPMM] = (*this->nonLocalDistributions)(D3Q27System::ET_PMM, x1, x2p, x3p); + f[vf::lbm::dir::dMPM] = (*this->nonLocalDistributions)(D3Q27System::ET_MPM, x1p, x2, x3p); + f[vf::lbm::dir::dPPM] = (*this->nonLocalDistributions)(D3Q27System::ET_PPM, x1, x2, x3p); - f[DIR_000] = (*this->zeroDistributions)(x1, x2, x3); + f[vf::lbm::dir::d000] = (*this->zeroDistributions)(x1, x2, x3); } ////////////////////////////////////////////////////////////////////////// -void D3Q27EsoTwist3DSplittedVector::setDistribution(const real *const f, size_t x1, size_t x2, size_t x3) +void D3Q27EsoTwist3DSplittedVector::setPostCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) { using namespace vf::lbm::dir; - (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[INV_P00]; - (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[INV_0P0]; - (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[INV_00P]; - (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[INV_PP0]; - (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = f[INV_MP0]; - (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[INV_P0P]; - (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = f[INV_M0P]; - (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[INV_0PP]; - (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = f[INV_0MP]; - (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[INV_PPP]; - (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = f[INV_MPP]; - (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = f[INV_PMP]; - (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f[INV_MMP]; + (*this->localDistributions)(D3Q27System::ET_P00, x1, x2, x3) = f[iP00]; + (*this->localDistributions)(D3Q27System::ET_0P0, x1, x2, x3) = f[i0P0]; + (*this->localDistributions)(D3Q27System::ET_00P, x1, x2, x3) = f[i00P]; + (*this->localDistributions)(D3Q27System::ET_PP0, x1, x2, x3) = f[iPP0]; + (*this->localDistributions)(D3Q27System::ET_MP0, x1 + 1, x2, x3) = f[iMP0]; + (*this->localDistributions)(D3Q27System::ET_P0P, x1, x2, x3) = f[iP0P]; + (*this->localDistributions)(D3Q27System::ET_M0P, x1 + 1, x2, x3) = f[iM0P]; + (*this->localDistributions)(D3Q27System::ET_0PP, x1, x2, x3) = f[i0PP]; + (*this->localDistributions)(D3Q27System::ET_0MP, x1, x2 + 1, x3) = f[i0MP]; + (*this->localDistributions)(D3Q27System::ET_PPP, x1, x2, x3) = f[iPPP]; + (*this->localDistributions)(D3Q27System::ET_MPP, x1 + 1, x2, x3) = f[iMPP]; + (*this->localDistributions)(D3Q27System::ET_PMP, x1, x2 + 1, x3) = f[iPMP]; + (*this->localDistributions)(D3Q27System::ET_MMP, x1 + 1, x2 + 1, x3) = f[iMMP]; - (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = f[INV_M00]; - (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = f[INV_0M0]; - (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = f[INV_00M]; - (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = f[INV_MM0]; - (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = f[INV_PM0]; - (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = f[INV_M0M]; - (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = f[INV_P0M]; - (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = f[INV_0MM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = f[INV_0PM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = f[INV_MMM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = f[INV_PMM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f[INV_MPM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[INV_PPM]; + (*this->nonLocalDistributions)(D3Q27System::ET_M00, x1 + 1, x2, x3) = f[iM00]; + (*this->nonLocalDistributions)(D3Q27System::ET_0M0, x1, x2 + 1, x3) = f[i0M0]; + (*this->nonLocalDistributions)(D3Q27System::ET_00M, x1, x2, x3 + 1) = f[i00M]; + (*this->nonLocalDistributions)(D3Q27System::ET_MM0, x1 + 1, x2 + 1, x3) = f[iMM0]; + (*this->nonLocalDistributions)(D3Q27System::ET_PM0, x1, x2 + 1, x3) = f[iPM0]; + (*this->nonLocalDistributions)(D3Q27System::ET_M0M, x1 + 1, x2, x3 + 1) = f[iM0M]; + (*this->nonLocalDistributions)(D3Q27System::ET_P0M, x1, x2, x3 + 1) = f[iP0M]; + (*this->nonLocalDistributions)(D3Q27System::ET_0MM, x1, x2 + 1, x3 + 1) = f[i0MM]; + (*this->nonLocalDistributions)(D3Q27System::ET_0PM, x1, x2, x3 + 1) = f[i0PM]; + (*this->nonLocalDistributions)(D3Q27System::ET_MMM, x1 + 1, x2 + 1, x3 + 1) = f[iMMM]; + (*this->nonLocalDistributions)(D3Q27System::ET_PMM, x1, x2 + 1, x3 + 1) = f[iPMM]; + (*this->nonLocalDistributions)(D3Q27System::ET_MPM, x1 + 1, x2, x3 + 1) = f[iMPM]; + (*this->nonLocalDistributions)(D3Q27System::ET_PPM, x1, x2, x3 + 1) = f[iPPM]; - (*this->zeroDistributions)(x1, x2, x3) = f[DIR_000]; + (*this->zeroDistributions)(x1, x2, x3) = f[d000]; } ////////////////////////////////////////////////////////////////////////// -void D3Q27EsoTwist3DSplittedVector::getDistributionInv(real *const f, size_t x1, size_t x2, size_t x3) +void D3Q27EsoTwist3DSplittedVector::getPostCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) { using namespace vf::lbm::dir; - f[INV_P00] = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); - f[INV_0P0] = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); - f[INV_00P] = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3); - f[INV_PP0] = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3); - f[INV_MP0] = (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3); - f[INV_P0P] = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3); - f[INV_M0P] = (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3); - f[INV_0PP] = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3); - f[INV_0MP] = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3); - f[INV_PPP] = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3); - f[INV_MPP] = (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3); - f[INV_PMP] = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3); - f[INV_MMP] = (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3); + f[iP00] = (*this->localDistributions)(D3Q27System::ET_P00, x1, x2, x3); + f[i0P0] = (*this->localDistributions)(D3Q27System::ET_0P0, x1, x2, x3); + f[i00P] = (*this->localDistributions)(D3Q27System::ET_00P, x1, x2, x3); + f[iPP0] = (*this->localDistributions)(D3Q27System::ET_PP0, x1, x2, x3); + f[iMP0] = (*this->localDistributions)(D3Q27System::ET_MP0, x1 + 1, x2, x3); + f[iP0P] = (*this->localDistributions)(D3Q27System::ET_P0P, x1, x2, x3); + f[iM0P] = (*this->localDistributions)(D3Q27System::ET_M0P, x1 + 1, x2, x3); + f[i0PP] = (*this->localDistributions)(D3Q27System::ET_0PP, x1, x2, x3); + f[i0MP] = (*this->localDistributions)(D3Q27System::ET_0MP, x1, x2 + 1, x3); + f[iPPP] = (*this->localDistributions)(D3Q27System::ET_PPP, x1, x2, x3); + f[iMPP] = (*this->localDistributions)(D3Q27System::ET_MPP, x1 + 1, x2, x3); + f[iPMP] = (*this->localDistributions)(D3Q27System::ET_PMP, x1, x2 + 1, x3); + f[iMMP] = (*this->localDistributions)(D3Q27System::ET_MMP, x1 + 1, x2 + 1, x3); - f[INV_M00] = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3); - f[INV_0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3); - f[INV_00M] = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1); - f[INV_MM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3); - f[INV_PM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3); - f[INV_M0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1); - f[INV_P0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1); - f[INV_0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1); - f[INV_0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1); - f[INV_MMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1); - f[INV_PMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1); - f[INV_MPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1); - f[INV_PPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1); + f[iM00] = (*this->nonLocalDistributions)(D3Q27System::ET_M00, x1 + 1, x2, x3); + f[i0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_0M0, x1, x2 + 1, x3); + f[i00M] = (*this->nonLocalDistributions)(D3Q27System::ET_00M, x1, x2, x3 + 1); + f[iMM0] = (*this->nonLocalDistributions)(D3Q27System::ET_MM0, x1 + 1, x2 + 1, x3); + f[iPM0] = (*this->nonLocalDistributions)(D3Q27System::ET_PM0, x1, x2 + 1, x3); + f[iM0M] = (*this->nonLocalDistributions)(D3Q27System::ET_M0M, x1 + 1, x2, x3 + 1); + f[iP0M] = (*this->nonLocalDistributions)(D3Q27System::ET_P0M, x1, x2, x3 + 1); + f[i0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_0MM, x1, x2 + 1, x3 + 1); + f[i0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_0PM, x1, x2, x3 + 1); + f[iMMM] = (*this->nonLocalDistributions)(D3Q27System::ET_MMM, x1 + 1, x2 + 1, x3 + 1); + f[iPMM] = (*this->nonLocalDistributions)(D3Q27System::ET_PMM, x1, x2 + 1, x3 + 1); + f[iMPM] = (*this->nonLocalDistributions)(D3Q27System::ET_MPM, x1 + 1, x2, x3 + 1); + f[iPPM] = (*this->nonLocalDistributions)(D3Q27System::ET_PPM, x1, x2, x3 + 1); - f[DIR_000] = (*this->zeroDistributions)(x1, x2, x3); + f[d000] = (*this->zeroDistributions)(x1, x2, x3); } ////////////////////////////////////////////////////////////////////////// -void D3Q27EsoTwist3DSplittedVector::setDistributionInv(const real *const f, size_t x1, size_t x2, size_t x3) +void D3Q27EsoTwist3DSplittedVector::setPreCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) { using namespace vf::lbm::dir; - (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[DIR_P00]; - (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[DIR_0P0]; - (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[DIR_00P]; - (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[DIR_PP0]; - (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = f[DIR_MP0]; - (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[DIR_P0P]; - (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = f[DIR_M0P]; - (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[DIR_0PP]; - (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = f[DIR_0MP]; - (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[DIR_PPP]; - (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = f[DIR_MPP]; - (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = f[DIR_PMP]; - (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f[DIR_MMP]; + (*this->localDistributions)(D3Q27System::ET_P00, x1, x2, x3) = f[dP00]; + (*this->localDistributions)(D3Q27System::ET_0P0, x1, x2, x3) = f[d0P0]; + (*this->localDistributions)(D3Q27System::ET_00P, x1, x2, x3) = f[d00P]; + (*this->localDistributions)(D3Q27System::ET_PP0, x1, x2, x3) = f[dPP0]; + (*this->localDistributions)(D3Q27System::ET_MP0, x1 + 1, x2, x3) = f[dMP0]; + (*this->localDistributions)(D3Q27System::ET_P0P, x1, x2, x3) = f[dP0P]; + (*this->localDistributions)(D3Q27System::ET_M0P, x1 + 1, x2, x3) = f[dM0P]; + (*this->localDistributions)(D3Q27System::ET_0PP, x1, x2, x3) = f[d0PP]; + (*this->localDistributions)(D3Q27System::ET_0MP, x1, x2 + 1, x3) = f[d0MP]; + (*this->localDistributions)(D3Q27System::ET_PPP, x1, x2, x3) = f[dPPP]; + (*this->localDistributions)(D3Q27System::ET_MPP, x1 + 1, x2, x3) = f[dMPP]; + (*this->localDistributions)(D3Q27System::ET_PMP, x1, x2 + 1, x3) = f[dPMP]; + (*this->localDistributions)(D3Q27System::ET_MMP, x1 + 1, x2 + 1, x3) = f[dMMP]; - (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = f[DIR_M00]; - (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = f[DIR_0M0]; - (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = f[DIR_00M]; - (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = f[DIR_MM0]; - (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = f[DIR_PM0]; - (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = f[DIR_M0M]; - (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = f[DIR_P0M]; - (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = f[DIR_0MM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = f[DIR_0PM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = f[DIR_MMM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = f[DIR_PMM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f[DIR_MPM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[DIR_PPM]; + (*this->nonLocalDistributions)(D3Q27System::ET_M00, x1 + 1, x2, x3) = f[dM00]; + (*this->nonLocalDistributions)(D3Q27System::ET_0M0, x1, x2 + 1, x3) = f[d0M0]; + (*this->nonLocalDistributions)(D3Q27System::ET_00M, x1, x2, x3 + 1) = f[d00M]; + (*this->nonLocalDistributions)(D3Q27System::ET_MM0, x1 + 1, x2 + 1, x3) = f[dMM0]; + (*this->nonLocalDistributions)(D3Q27System::ET_PM0, x1, x2 + 1, x3) = f[dPM0]; + (*this->nonLocalDistributions)(D3Q27System::ET_M0M, x1 + 1, x2, x3 + 1) = f[dM0M]; + (*this->nonLocalDistributions)(D3Q27System::ET_P0M, x1, x2, x3 + 1) = f[dP0M]; + (*this->nonLocalDistributions)(D3Q27System::ET_0MM, x1, x2 + 1, x3 + 1) = f[d0MM]; + (*this->nonLocalDistributions)(D3Q27System::ET_0PM, x1, x2, x3 + 1) = f[d0PM]; + (*this->nonLocalDistributions)(D3Q27System::ET_MMM, x1 + 1, x2 + 1, x3 + 1) = f[dMMM]; + (*this->nonLocalDistributions)(D3Q27System::ET_PMM, x1, x2 + 1, x3 + 1) = f[dPMM]; + (*this->nonLocalDistributions)(D3Q27System::ET_MPM, x1 + 1, x2, x3 + 1) = f[dMPM]; + (*this->nonLocalDistributions)(D3Q27System::ET_PPM, x1, x2, x3 + 1) = f[dPPM]; - (*this->zeroDistributions)(x1, x2, x3) = f[DIR_000]; + (*this->zeroDistributions)(x1, x2, x3) = f[d000]; } ////////////////////////////////////////////////////////////////////////// -void D3Q27EsoTwist3DSplittedVector::setDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, +void D3Q27EsoTwist3DSplittedVector::setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) { using namespace vf::lbm::dir; if ((direction & EsoTwistD3Q27System::etE) == EsoTwistD3Q27System::etE) - (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = f[DIR_P00]; + (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = f[dP00]; if ((direction & EsoTwistD3Q27System::etW) == EsoTwistD3Q27System::etW) - (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[DIR_M00]; + (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[dM00]; if ((direction & EsoTwistD3Q27System::etS) == EsoTwistD3Q27System::etS) - (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[DIR_0M0]; + (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[d0M0]; if ((direction & EsoTwistD3Q27System::etN) == EsoTwistD3Q27System::etN) - (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = f[DIR_0P0]; + (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = f[d0P0]; if ((direction & EsoTwistD3Q27System::etB) == EsoTwistD3Q27System::etB) - (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[DIR_00M]; + (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[d00M]; if ((direction & EsoTwistD3Q27System::etT) == EsoTwistD3Q27System::etT) - (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = f[DIR_00P]; + (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = f[d00P]; if ((direction & EsoTwistD3Q27System::etSW) == EsoTwistD3Q27System::etSW) - (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[DIR_MM0]; + (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[dMM0]; if ((direction & EsoTwistD3Q27System::etNE) == EsoTwistD3Q27System::etNE) - (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = f[DIR_PP0]; + (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = f[dPP0]; if ((direction & EsoTwistD3Q27System::etNW) == EsoTwistD3Q27System::etNW) - (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = f[DIR_MP0]; + (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = f[dMP0]; if ((direction & EsoTwistD3Q27System::etSE) == EsoTwistD3Q27System::etSE) - (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = f[DIR_PM0]; + (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = f[dPM0]; if ((direction & EsoTwistD3Q27System::etBW) == EsoTwistD3Q27System::etBW) - (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[DIR_M0M]; + (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[dM0M]; if ((direction & EsoTwistD3Q27System::etTE) == EsoTwistD3Q27System::etTE) - (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = f[DIR_P0P]; + (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = f[dP0P]; if ((direction & EsoTwistD3Q27System::etTW) == EsoTwistD3Q27System::etTW) - (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = f[DIR_M0P]; + (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = f[dM0P]; if ((direction & EsoTwistD3Q27System::etBE) == EsoTwistD3Q27System::etBE) - (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = f[DIR_P0M]; + (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = f[dP0M]; if ((direction & EsoTwistD3Q27System::etBS) == EsoTwistD3Q27System::etBS) - (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[DIR_0MM]; + (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[d0MM]; if ((direction & EsoTwistD3Q27System::etTN) == EsoTwistD3Q27System::etTN) - (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = f[DIR_0PP]; + (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = f[d0PP]; if ((direction & EsoTwistD3Q27System::etTS) == EsoTwistD3Q27System::etTS) - (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = f[DIR_0MP]; + (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = f[d0MP]; if ((direction & EsoTwistD3Q27System::etBN) == EsoTwistD3Q27System::etBN) - (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = f[DIR_0PM]; + (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = f[d0PM]; if ((direction & EsoTwistD3Q27System::etBSW) == EsoTwistD3Q27System::etBSW) - (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[DIR_MMM]; + (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[dMMM]; if ((direction & EsoTwistD3Q27System::etTNE) == EsoTwistD3Q27System::etTNE) - (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = f[DIR_PPP]; + (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = f[dPPP]; if ((direction & EsoTwistD3Q27System::etBSE) == EsoTwistD3Q27System::etBSE) - (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = f[DIR_PMM]; + (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = f[dPMM]; if ((direction & EsoTwistD3Q27System::etTNW) == EsoTwistD3Q27System::etTNW) - (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = f[DIR_MPP]; + (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = f[dMPP]; if ((direction & EsoTwistD3Q27System::etBNW) == EsoTwistD3Q27System::etBNW) - (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = f[DIR_MPM]; + (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = f[dMPM]; if ((direction & EsoTwistD3Q27System::etTSE) == EsoTwistD3Q27System::etTSE) - (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f[DIR_PMP]; + (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f[dPMP]; if ((direction & EsoTwistD3Q27System::etBNE) == EsoTwistD3Q27System::etBNE) - (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f[DIR_PPM]; + (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f[dPPM]; if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW) - (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[DIR_MMP]; + (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[dMMP]; if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST) - (*this->zeroDistributions)(x1, x2, x3) = f[DIR_000]; + (*this->zeroDistributions)(x1, x2, x3) = f[d000]; } ////////////////////////////////////////////////////////////////////////// -void D3Q27EsoTwist3DSplittedVector::setDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, +void D3Q27EsoTwist3DSplittedVector::setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) { using namespace vf::lbm::dir; switch (direction) { - case DIR_P00: + case dP00: (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = f; break; - case DIR_M00: + case dM00: (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f; break; - case DIR_0M0: + case d0M0: (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f; break; - case DIR_0P0: + case d0P0: (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = f; break; - case DIR_00M: + case d00M: (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f; break; - case DIR_00P: + case d00P: (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = f; break; - case DIR_MM0: + case dMM0: (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f; break; - case DIR_PP0: + case dPP0: (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = f; break; - case DIR_MP0: + case dMP0: (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = f; break; - case DIR_PM0: + case dPM0: (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = f; break; - case DIR_M0M: + case dM0M: (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f; break; - case DIR_P0P: + case dP0P: (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = f; break; - case DIR_M0P: + case dM0P: (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = f; break; - case DIR_P0M: + case dP0M: (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = f; break; - case DIR_0MM: + case d0MM: (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f; break; - case DIR_0PP: + case d0PP: (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = f; break; - case DIR_0MP: + case d0MP: (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = f; break; - case DIR_0PM: + case d0PM: (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = f; break; - case DIR_MMM: + case dMMM: (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f; break; - case DIR_PPP: + case dPPP: (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = f; break; - case DIR_PMM: + case dPMM: (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = f; break; - case DIR_MPP: + case dMPP: (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = f; break; - case DIR_MPM: + case dMPM: (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = f; break; - case DIR_PMP: + case dPMP: (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f; break; - case DIR_PPM: + case dPPM: (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f; break; - case DIR_MMP: + case dMMP: (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f; break; - case DIR_000: + case d000: (*this->zeroDistributions)(x1, x2, x3) = f; break; default: @@ -347,152 +349,152 @@ void D3Q27EsoTwist3DSplittedVector::setDistributionForDirection(real f, size_t x } } ////////////////////////////////////////////////////////////////////////// -void D3Q27EsoTwist3DSplittedVector::setDistributionInvForDirection(const real *const f, size_t x1, size_t x2, +void D3Q27EsoTwist3DSplittedVector::setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) { using namespace vf::lbm::dir; if ((direction & EsoTwistD3Q27System::etE) == EsoTwistD3Q27System::etE) - (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[DIR_P00]; + (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[dP00]; if ((direction & EsoTwistD3Q27System::etW) == EsoTwistD3Q27System::etW) - (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = f[DIR_M00]; + (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = f[dM00]; if ((direction & EsoTwistD3Q27System::etS) == EsoTwistD3Q27System::etS) - (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = f[DIR_0M0]; + (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = f[d0M0]; if ((direction & EsoTwistD3Q27System::etN) == EsoTwistD3Q27System::etN) - (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[DIR_0P0]; + (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[d0P0]; if ((direction & EsoTwistD3Q27System::etB) == EsoTwistD3Q27System::etB) - (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = f[DIR_00M]; + (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = f[d00M]; if ((direction & EsoTwistD3Q27System::etT) == EsoTwistD3Q27System::etT) - (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[DIR_00P]; + (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[d00P]; if ((direction & EsoTwistD3Q27System::etSW) == EsoTwistD3Q27System::etSW) - (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = f[DIR_MM0]; + (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = f[dMM0]; if ((direction & EsoTwistD3Q27System::etNE) == EsoTwistD3Q27System::etNE) - (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[DIR_PP0]; + (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[dPP0]; if ((direction & EsoTwistD3Q27System::etNW) == EsoTwistD3Q27System::etNW) - (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = f[DIR_MP0]; + (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = f[dMP0]; if ((direction & EsoTwistD3Q27System::etSE) == EsoTwistD3Q27System::etSE) - (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = f[DIR_PM0]; + (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = f[dPM0]; if ((direction & EsoTwistD3Q27System::etBW) == EsoTwistD3Q27System::etBW) - (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = f[DIR_M0M]; + (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = f[dM0M]; if ((direction & EsoTwistD3Q27System::etTE) == EsoTwistD3Q27System::etTE) - (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[DIR_P0P]; + (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[dP0P]; if ((direction & EsoTwistD3Q27System::etTW) == EsoTwistD3Q27System::etTW) - (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = f[DIR_M0P]; + (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = f[dM0P]; if ((direction & EsoTwistD3Q27System::etBE) == EsoTwistD3Q27System::etBE) - (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = f[DIR_P0M]; + (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = f[dP0M]; if ((direction & EsoTwistD3Q27System::etBS) == EsoTwistD3Q27System::etBS) - (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = f[DIR_0MM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = f[d0MM]; if ((direction & EsoTwistD3Q27System::etTN) == EsoTwistD3Q27System::etTN) - (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[DIR_0PP]; + (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[d0PP]; if ((direction & EsoTwistD3Q27System::etTS) == EsoTwistD3Q27System::etTS) - (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = f[DIR_0MP]; + (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = f[d0MP]; if ((direction & EsoTwistD3Q27System::etBN) == EsoTwistD3Q27System::etBN) - (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = f[DIR_0PM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = f[d0PM]; if ((direction & EsoTwistD3Q27System::etBSW) == EsoTwistD3Q27System::etBSW) - (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = f[DIR_MMM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = f[dMMM]; if ((direction & EsoTwistD3Q27System::etTNE) == EsoTwistD3Q27System::etTNE) - (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[DIR_PPP]; + (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[dPPP]; if ((direction & EsoTwistD3Q27System::etBSE) == EsoTwistD3Q27System::etBSE) - (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = f[DIR_PMM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = f[dPMM]; if ((direction & EsoTwistD3Q27System::etTNW) == EsoTwistD3Q27System::etTNW) - (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = f[DIR_MPP]; + (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = f[dMPP]; if ((direction & EsoTwistD3Q27System::etBNW) == EsoTwistD3Q27System::etBNW) - (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f[DIR_MPM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f[dMPM]; if ((direction & EsoTwistD3Q27System::etTSE) == EsoTwistD3Q27System::etTSE) - (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = f[DIR_PMP]; + (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = f[dPMP]; if ((direction & EsoTwistD3Q27System::etBNE) == EsoTwistD3Q27System::etBNE) - (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[DIR_PPM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f[dPPM]; if ((direction & EsoTwistD3Q27System::etTSW) == EsoTwistD3Q27System::etTSW) - (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f[DIR_MMP]; + (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f[dMMP]; if ((direction & EsoTwistD3Q27System::REST) == EsoTwistD3Q27System::REST) - (*this->zeroDistributions)(x1, x2, x3) = f[DIR_000]; + (*this->zeroDistributions)(x1, x2, x3) = f[d000]; } ////////////////////////////////////////////////////////////////////////// -void D3Q27EsoTwist3DSplittedVector::setDistributionInvForDirection(real f, size_t x1, size_t x2, size_t x3, +void D3Q27EsoTwist3DSplittedVector::setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, unsigned long int direction) { using namespace vf::lbm::dir; switch (direction) { - case DIR_P00: + case dP00: (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f; break; - case DIR_M00: + case dM00: (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3) = f; break; - case DIR_0M0: + case d0M0: (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3) = f; break; - case DIR_0P0: + case d0P0: (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f; break; - case DIR_00M: + case d00M: (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1) = f; break; - case DIR_00P: + case d00P: (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f; break; - case DIR_MM0: + case dMM0: (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3) = f; break; - case DIR_PP0: + case dPP0: (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f; break; - case DIR_MP0: + case dMP0: (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3) = f; break; - case DIR_PM0: + case dPM0: (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3) = f; break; - case DIR_M0M: + case dM0M: (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1) = f; break; - case DIR_P0P: + case dP0P: (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f; break; - case DIR_M0P: + case dM0P: (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3) = f; break; - case DIR_P0M: + case dP0M: (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1) = f; break; - case DIR_0MM: + case d0MM: (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1) = f; break; - case DIR_0PP: + case d0PP: (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f; break; - case DIR_0MP: + case d0MP: (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3) = f; break; - case DIR_0PM: + case d0PM: (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1) = f; break; - case DIR_MMM: + case dMMM: (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1) = f; break; - case DIR_PPP: + case dPPP: (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f; break; - case DIR_PMM: + case dPMM: (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1) = f; break; - case DIR_MPP: + case dMPP: (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3) = f; break; - case DIR_MPM: + case dMPM: (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1) = f; break; - case DIR_PMP: + case dPMP: (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3) = f; break; - case DIR_PPM: + case dPPM: (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1) = f; break; - case DIR_MMP: + case dMMP: (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3) = f; break; - case DIR_000: + case d000: (*this->zeroDistributions)(x1, x2, x3) = f; break; default: @@ -500,64 +502,64 @@ void D3Q27EsoTwist3DSplittedVector::setDistributionInvForDirection(real f, size_ } } ////////////////////////////////////////////////////////////////////////// -real D3Q27EsoTwist3DSplittedVector::getDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) +real D3Q27EsoTwist3DSplittedVector::getPreCollisionDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) { using namespace vf::lbm::dir; switch (direction) { - case DIR_M00: + case dM00: return (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3); - case DIR_P00: + case dP00: return (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); - case DIR_0P0: + case d0P0: return (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); - case DIR_0M0: + case d0M0: return (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3); - case DIR_00P: + case d00P: return (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3); - case DIR_00M: + case d00M: return (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1); - case DIR_PP0: + case dPP0: return (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3); - case DIR_MM0: + case dMM0: return (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3); - case DIR_PM0: + case dPM0: return (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3); - case DIR_MP0: + case dMP0: return (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3); - case DIR_P0P: + case dP0P: return (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3); - case DIR_M0M: + case dM0M: return (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1); - case DIR_P0M: + case dP0M: return (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1); - case DIR_M0P: + case dM0P: return (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3); - case DIR_0PP: + case d0PP: return (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3); - case DIR_0MM: + case d0MM: return (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1); - case DIR_0PM: + case d0PM: return (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1); - case DIR_0MP: + case d0MP: return (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3); - case DIR_PPP: + case dPPP: return (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3); - case DIR_MMM: + case dMMM: return (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1); - case DIR_MPP: + case dMPP: return (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3); - case DIR_PMM: + case dPMM: return (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1); - case DIR_PMP: + case dPMP: return (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3); - case DIR_MPM: + case dMPM: return (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1); - case DIR_MMP: + case dMMP: return (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3); - case DIR_PPM: + case dPPM: return (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1); - case DIR_000: + case d000: return (*this->zeroDistributions)(x1, x2, x3); default: UB_THROW(UbException(UB_EXARGS, "Direction didn't find")); @@ -569,59 +571,59 @@ real D3Q27EsoTwist3DSplittedVector::getDistributionInvForDirection(size_t x1, si using namespace vf::lbm::dir; switch (direction) { - case DIR_P00: + case dP00: return (*this->nonLocalDistributions)(D3Q27System::ET_W, x1 + 1, x2, x3); - case DIR_M00: + case dM00: return (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); - case DIR_0M0: + case d0M0: return (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); - case DIR_0P0: + case d0P0: return (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2 + 1, x3); - case DIR_00M: + case d00M: return (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3); - case DIR_00P: + case d00P: return (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3 + 1); - case DIR_MM0: + case dMM0: return (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3); - case DIR_PP0: + case dPP0: return (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1 + 1, x2 + 1, x3); - case DIR_MP0: + case dMP0: return (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2 + 1, x3); - case DIR_PM0: + case dPM0: return (*this->localDistributions)(D3Q27System::ET_NW, x1 + 1, x2, x3); - case DIR_M0M: + case dM0M: return (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3); - case DIR_P0P: + case dP0P: return (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1 + 1, x2, x3 + 1); - case DIR_M0P: + case dM0P: return (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3 + 1); - case DIR_P0M: + case dP0M: return (*this->localDistributions)(D3Q27System::ET_TW, x1 + 1, x2, x3); - case DIR_0MM: + case d0MM: return (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3); - case DIR_0PP: + case d0PP: return (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2 + 1, x3 + 1); - case DIR_0MP: + case d0MP: return (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3 + 1); - case DIR_0PM: + case d0PM: return (*this->localDistributions)(D3Q27System::ET_TS, x1, x2 + 1, x3); - case DIR_MMM: + case dMMM: return (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3); - case DIR_PPP: + case dPPP: return (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1 + 1, x2 + 1, x3 + 1); - case DIR_PMM: + case dPMM: return (*this->localDistributions)(D3Q27System::ET_TNW, x1 + 1, x2, x3); - case DIR_MPP: + case dMPP: return (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2 + 1, x3 + 1); - case DIR_MPM: + case dMPM: return (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2 + 1, x3); - case DIR_PMP: + case dPMP: return (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1 + 1, x2, x3 + 1); - case DIR_PPM: + case dPPM: return (*this->localDistributions)(D3Q27System::ET_TSW, x1 + 1, x2 + 1, x3); - case DIR_MMP: + case dMMP: return (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3 + 1); - case DIR_000: + case d000: return (*this->zeroDistributions)(x1, x2, x3); default: UB_THROW(UbException(UB_EXARGS, "Direction didn't find")); diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.h b/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.h similarity index 86% rename from src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.h rename to src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.h index 21f1610641706dac82e1314b1a01be5959c8b0b2..5705df3965d6afc3218f996ae7c6164f5c3830e0 100644 --- a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVector.h +++ b/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVector.h @@ -55,28 +55,28 @@ public: ////////////////////////////////////////////////////////////////////////// void swap() override; ////////////////////////////////////////////////////////////////////////// - void getDistribution(real *const f, size_t x1, size_t x2, size_t x3) override; + void getPreCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override; ////////////////////////////////////////////////////////////////////////// - void setDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override; + void setPostCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override; //////////////////////////////////////////////////////////////////////// - void getDistributionInv(real *const f, size_t x1, size_t x2, size_t x3) override; + void getPostCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override; ////////////////////////////////////////////////////////////////////////// - void setDistributionInv(const real *const f, size_t x1, size_t x2, size_t x3) override; + void setPreCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override; ////////////////////////////////////////////////////////////////////////// - void setDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, + void setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) override; ////////////////////////////////////////////////////////////////////////// - void setDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override; + void setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override; ////////////////////////////////////////////////////////////////////////// real getDistributionInvForDirection(size_t x1, size_t x2, size_t x3, int direction) override; ////////////////////////////////////////////////////////////////////////// - void setDistributionInvForDirection(const real *const f, size_t x1, size_t x2, size_t x3, + void setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) override; ////////////////////////////////////////////////////////////////////////// - void setDistributionInvForDirection(real f, size_t x1, size_t x2, size_t x3, + void setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, unsigned long int direction) override; ////////////////////////////////////////////////////////////////////////// - real getDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) override; + real getPreCollisionDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) override; ////////////////////////////////////////////////////////////////////////// size_t getNX1() const override; ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVectorEx.cpp b/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVectorEx.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVectorEx.cpp rename to src/cpu/core/Data/D3Q27EsoTwist3DSplittedVectorEx.cpp diff --git a/src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVectorEx.h b/src/cpu/core/Data/D3Q27EsoTwist3DSplittedVectorEx.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Data/D3Q27EsoTwist3DSplittedVectorEx.h rename to src/cpu/core/Data/D3Q27EsoTwist3DSplittedVectorEx.h diff --git a/src/cpu/VirtualFluidsCore/Data/DataSet3D.h b/src/cpu/core/Data/DataSet3D.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Data/DataSet3D.h rename to src/cpu/core/Data/DataSet3D.h diff --git a/src/cpu/VirtualFluidsCore/Data/DistributionArray3D.h b/src/cpu/core/Data/DistributionArray3D.h similarity index 80% rename from src/cpu/VirtualFluidsCore/Data/DistributionArray3D.h rename to src/cpu/core/Data/DistributionArray3D.h index fff57191d5172e2f3c085b6f8753018c58fae42a..21b9c23e998ae971130f918463cfe670f018b7a4 100644 --- a/src/cpu/VirtualFluidsCore/Data/DistributionArray3D.h +++ b/src/cpu/core/Data/DistributionArray3D.h @@ -55,39 +55,39 @@ public: //! \param x1 coordinate x1 //! \param x2 coordinate x2 //! \param x3 coordinate x3 - virtual void getDistribution(real *const f, size_t x1, size_t x2, size_t x3) = 0; + virtual void getPreCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) = 0; //! set distribution //! \param f distribution //! \param x1 coordinate x1 //! \param x2 coordinate x2 //! \param x3 coordinate x3 - virtual void setDistribution(const real *const f, size_t x1, size_t x2, size_t x3) = 0; + virtual void setPostCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) = 0; //! get distribution in inverse order //! \param f distribution //! \param x1 coordinate x1 //! \param x2 coordinate x2 //! \param x3 coordinate x3 - virtual void getDistributionInv(real *const f, size_t x1, size_t x2, size_t x3) = 0; + virtual void getPostCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) = 0; //! set distribution in inverse order //! \param f distribution //! \param x1 coordinate x1 //! \param x1 coordinate x2 //! \param x1 coordinate x3 - virtual void setDistributionInv(const real *const f, size_t x1, size_t x2, size_t x3) = 0; + virtual void setPreCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) = 0; //! set distribution in inverse order //! \param f distribution //! \param x1 coordinate x1 //! \param x1 coordinate x2 //! \param x1 coordinate x3 - virtual void setDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, + virtual void setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) = 0; - virtual void setDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) = 0; + virtual void setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) = 0; virtual real getDistributionInvForDirection(size_t x1, size_t x2, size_t x3, int direction) = 0; - virtual void setDistributionInvForDirection(const real *const f, size_t x1, size_t x2, size_t x3, + virtual void setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) = 0; - virtual void setDistributionInvForDirection(real f, size_t x1, size_t x2, size_t x3, + virtual void setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, unsigned long int direction) = 0; - virtual real getDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) = 0; + virtual real getPreCollisionDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) = 0; virtual void swap() = 0; protected: diff --git a/src/cpu/VirtualFluidsCore/Data/EsoTwist3D.h b/src/cpu/core/Data/EsoTwist3D.h similarity index 83% rename from src/cpu/VirtualFluidsCore/Data/EsoTwist3D.h rename to src/cpu/core/Data/EsoTwist3D.h index 6a65255adfaf48d415c76b66364f3f34966572c0..1642c09daddadb7add0e16c5c833e5cb79c21dd3 100644 --- a/src/cpu/VirtualFluidsCore/Data/EsoTwist3D.h +++ b/src/cpu/core/Data/EsoTwist3D.h @@ -43,16 +43,6 @@ // Geier, M., & Schönherr, M. (2017). Esoteric twist: an efficient in-place streaming algorithmus for the lattice // Boltzmann method on massively parallel hardware. Computation, 5(2), 19. -class EsoTwistD3Q27UnrollArray -{ -}; -class EsoTwistPlusD3Q27UnrollArray -{ -}; -class EsoTwistPlusD3Q19UnrollArray -{ -}; - class EsoTwist3D : public DistributionArray3D { public: @@ -63,31 +53,31 @@ public: ////////////////////////////////////////////////////////////////////////// void swap() override = 0; ////////////////////////////////////////////////////////////////////////// - void getDistribution(real *const f, size_t x1, size_t x2, size_t x3) override = 0; + void getPreCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override = 0; ////////////////////////////////////////////////////////////////////////// - void setDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override = 0; + void setPostCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override = 0; //////////////////////////////////////////////////////////////////////// - void getDistributionInv(real *const f, size_t x1, size_t x2, size_t x3) override = 0; + void getPostCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override = 0; ////////////////////////////////////////////////////////////////////////// - void setDistributionInv(const real *const f, size_t x1, size_t x2, size_t x3) override = 0; + void setPreCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override = 0; ////////////////////////////////////////////////////////////////////////// - void setDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, + void setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) override = 0; ////////////////////////////////////////////////////////////////////////// - void setDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override = 0; + void setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override = 0; ////////////////////////////////////////////////////////////////////////// // virtual void getDistributionInvForDirection(real* const& f, const size_t& x1, const size_t& x2, const size_t& // x3, const unsigned long int& direction) = 0; ////////////////////////////////////////////////////////////////////////// real getDistributionInvForDirection(size_t x1, size_t x2, size_t x3, int direction) override = 0; ////////////////////////////////////////////////////////////////////////// - void setDistributionInvForDirection(const real *const f, size_t x1, size_t x2, size_t x3, + void setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) override = 0; ////////////////////////////////////////////////////////////////////////// - void setDistributionInvForDirection(real f, size_t x1, size_t x2, size_t x3, + void setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, unsigned long int direction) override = 0; ////////////////////////////////////////////////////////////////////////// - real getDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) override = 0; + real getPreCollisionDistributionForDirection(size_t x1, size_t x2, size_t x3, int direction) override = 0; ////////////////////////////////////////////////////////////////////////// size_t getNX1() const override = 0; ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.cpp b/src/cpu/core/Data/EsoTwistD3Q27System.cpp similarity index 88% rename from src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.cpp rename to src/cpu/core/Data/EsoTwistD3Q27System.cpp index c28f1d4896619d72f27d7cd99579295fa46c68a5..8f249ceeca6e0270a4396e6100fc1a7d0af0c3c6 100644 --- a/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.cpp +++ b/src/cpu/core/Data/EsoTwistD3Q27System.cpp @@ -45,12 +45,12 @@ const int EsoTwistD3Q27System::ETX3[EsoTwistD3Q27System::ENDF + 1] = { 0, 0, 0, const int EsoTwistD3Q27System::etINVDIR[EsoTwistD3Q27System::ENDF + 1] = { - vf::lbm::dir::INV_P00, vf::lbm::dir::INV_M00, vf::lbm::dir::INV_0P0, vf::lbm::dir::INV_0M0, vf::lbm::dir::INV_00P, - vf::lbm::dir::INV_00M, vf::lbm::dir::INV_PP0, vf::lbm::dir::INV_MM0, vf::lbm::dir::INV_PM0, vf::lbm::dir::INV_MP0, - vf::lbm::dir::INV_P0P, vf::lbm::dir::INV_M0M, vf::lbm::dir::INV_P0M, vf::lbm::dir::INV_M0P, vf::lbm::dir::INV_0PP, - vf::lbm::dir::INV_0MM, vf::lbm::dir::INV_0PM, vf::lbm::dir::INV_0MP, vf::lbm::dir::INV_PPP, vf::lbm::dir::INV_MPP, - vf::lbm::dir::INV_PMP, vf::lbm::dir::INV_MMP, vf::lbm::dir::INV_PPM, vf::lbm::dir::INV_MPM, vf::lbm::dir::INV_PMM, - vf::lbm::dir::INV_MMM, vf::lbm::dir::DIR_000 + vf::lbm::dir::iP00, vf::lbm::dir::iM00, vf::lbm::dir::i0P0, vf::lbm::dir::i0M0, vf::lbm::dir::i00P, + vf::lbm::dir::i00M, vf::lbm::dir::iPP0, vf::lbm::dir::iMM0, vf::lbm::dir::iPM0, vf::lbm::dir::iMP0, + vf::lbm::dir::iP0P, vf::lbm::dir::iM0M, vf::lbm::dir::iP0M, vf::lbm::dir::iM0P, vf::lbm::dir::i0PP, + vf::lbm::dir::i0MM, vf::lbm::dir::i0PM, vf::lbm::dir::i0MP, vf::lbm::dir::iPPP, vf::lbm::dir::iMPP, + vf::lbm::dir::iPMP, vf::lbm::dir::iMMP, vf::lbm::dir::iPPM, vf::lbm::dir::iMPM, vf::lbm::dir::iPMM, + vf::lbm::dir::iMMM, vf::lbm::dir::d000 }; const unsigned long int EsoTwistD3Q27System::etDIR[EsoTwistD3Q27System::ENDF + 1] = { diff --git a/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.h b/src/cpu/core/Data/EsoTwistD3Q27System.h similarity index 59% rename from src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.h rename to src/cpu/core/Data/EsoTwistD3Q27System.h index 74cd5b9b8fe0aeb58fad65c34c5231abb8eb4b8c..77db3dd1dc2d8406e0f0777ced845c8df54fca1a 100644 --- a/src/cpu/VirtualFluidsCore/Data/EsoTwistD3Q27System.h +++ b/src/cpu/core/Data/EsoTwistD3Q27System.h @@ -47,60 +47,60 @@ struct EsoTwistD3Q27System { // const static int STARTDIR = D3Q27System::STARTDIR; const static int ENDDIR = D3Q27System::ENDDIR; - static const int REST = vf::lbm::dir::DIR_000; /*f0 */ - static const int E = vf::lbm::dir::DIR_P00; /*f1 */ - static const int W = vf::lbm::dir::DIR_M00; /*f2 */ - static const int N = vf::lbm::dir::DIR_0P0; /*f3 */ - static const int S = vf::lbm::dir::DIR_0M0; /*f4 */ - static const int T = vf::lbm::dir::DIR_00P; /*f5 */ - static const int B = vf::lbm::dir::DIR_00M; /*f6 */ - static const int NE = vf::lbm::dir::DIR_PP0; /*f7 */ - static const int SW = vf::lbm::dir::DIR_MM0; /*f8 */ - static const int SE = vf::lbm::dir::DIR_PM0; /*f9 */ - static const int NW = vf::lbm::dir::DIR_MP0; /*f10*/ - static const int TE = vf::lbm::dir::DIR_P0P; /*f11*/ - static const int BW = vf::lbm::dir::DIR_M0M; /*f12*/ - static const int BE = vf::lbm::dir::DIR_P0M; /*f13*/ - static const int TW = vf::lbm::dir::DIR_M0P; /*f14*/ - static const int TN = vf::lbm::dir::DIR_0PP; /*f15*/ - static const int BS = vf::lbm::dir::DIR_0MM; /*f16*/ - static const int BN = vf::lbm::dir::DIR_0PM; /*f17*/ - static const int TS = vf::lbm::dir::DIR_0MP; /*f18*/ - static const int TNE = vf::lbm::dir::DIR_PPP; - static const int TNW = vf::lbm::dir::DIR_MPP; - static const int TSE = vf::lbm::dir::DIR_PMP; - static const int TSW = vf::lbm::dir::DIR_MMP; - static const int BNE = vf::lbm::dir::DIR_PPM; - static const int BNW = vf::lbm::dir::DIR_MPM; - static const int BSE = vf::lbm::dir::DIR_PMM; - static const int BSW = vf::lbm::dir::DIR_MMM; + static const int REST = vf::lbm::dir::d000; /*f0 */ + static const int E = vf::lbm::dir::dP00; /*f1 */ + static const int W = vf::lbm::dir::dM00; /*f2 */ + static const int N = vf::lbm::dir::d0P0; /*f3 */ + static const int S = vf::lbm::dir::d0M0; /*f4 */ + static const int T = vf::lbm::dir::d00P; /*f5 */ + static const int B = vf::lbm::dir::d00M; /*f6 */ + static const int NE = vf::lbm::dir::dPP0; /*f7 */ + static const int SW = vf::lbm::dir::dMM0; /*f8 */ + static const int SE = vf::lbm::dir::dPM0; /*f9 */ + static const int NW = vf::lbm::dir::dMP0; /*f10*/ + static const int TE = vf::lbm::dir::dP0P; /*f11*/ + static const int BW = vf::lbm::dir::dM0M; /*f12*/ + static const int BE = vf::lbm::dir::dP0M; /*f13*/ + static const int TW = vf::lbm::dir::dM0P; /*f14*/ + static const int TN = vf::lbm::dir::d0PP; /*f15*/ + static const int BS = vf::lbm::dir::d0MM; /*f16*/ + static const int BN = vf::lbm::dir::d0PM; /*f17*/ + static const int TS = vf::lbm::dir::d0MP; /*f18*/ + static const int TNE = vf::lbm::dir::dPPP; + static const int TNW = vf::lbm::dir::dMPP; + static const int TSE = vf::lbm::dir::dPMP; + static const int TSW = vf::lbm::dir::dMMP; + static const int BNE = vf::lbm::dir::dPPM; + static const int BNW = vf::lbm::dir::dMPM; + static const int BSE = vf::lbm::dir::dPMM; + static const int BSW = vf::lbm::dir::dMMM; - static const int INV_E = vf::lbm::dir::DIR_M00; - static const int INV_W = vf::lbm::dir::DIR_P00; - static const int INV_N = vf::lbm::dir::DIR_0M0; - static const int INV_S = vf::lbm::dir::DIR_0P0; - static const int INV_T = vf::lbm::dir::DIR_00M; - static const int INV_B = vf::lbm::dir::DIR_00P; - static const int INV_NE = vf::lbm::dir::DIR_MM0; - static const int INV_SW = vf::lbm::dir::DIR_PP0; - static const int INV_SE = vf::lbm::dir::DIR_MP0; - static const int INV_NW = vf::lbm::dir::DIR_PM0; - static const int INV_TE = vf::lbm::dir::DIR_M0M; - static const int INV_BW = vf::lbm::dir::DIR_P0P; - static const int INV_BE = vf::lbm::dir::DIR_M0P; - static const int INV_TW = vf::lbm::dir::DIR_P0M; - static const int INV_TN = vf::lbm::dir::DIR_0MM; - static const int INV_BS = vf::lbm::dir::DIR_0PP; - static const int INV_BN = vf::lbm::dir::DIR_0MP; - static const int INV_TS = vf::lbm::dir::DIR_0PM; - static const int INV_TNE = vf::lbm::dir::DIR_MMM; - static const int INV_TNW = vf::lbm::dir::DIR_PMM; - static const int INV_TSE = vf::lbm::dir::DIR_MPM; - static const int INV_TSW = vf::lbm::dir::DIR_PPM; - static const int INV_BNE = vf::lbm::dir::DIR_MMP; - static const int INV_BNW = vf::lbm::dir::DIR_PMP; - static const int INV_BSE = vf::lbm::dir::DIR_MPP; - static const int INV_BSW = vf::lbm::dir::DIR_PPP; + static const int INV_E = vf::lbm::dir::dM00; + static const int INV_W = vf::lbm::dir::dP00; + static const int INV_N = vf::lbm::dir::d0M0; + static const int INV_S = vf::lbm::dir::d0P0; + static const int INV_T = vf::lbm::dir::d00M; + static const int INV_B = vf::lbm::dir::d00P; + static const int INV_NE = vf::lbm::dir::dMM0; + static const int INV_SW = vf::lbm::dir::dPP0; + static const int INV_SE = vf::lbm::dir::dMP0; + static const int INV_NW = vf::lbm::dir::dPM0; + static const int INV_TE = vf::lbm::dir::dM0M; + static const int INV_BW = vf::lbm::dir::dP0P; + static const int INV_BE = vf::lbm::dir::dM0P; + static const int INV_TW = vf::lbm::dir::dP0M; + static const int INV_TN = vf::lbm::dir::d0MM; + static const int INV_BS = vf::lbm::dir::d0PP; + static const int INV_BN = vf::lbm::dir::d0MP; + static const int INV_TS = vf::lbm::dir::d0PM; + static const int INV_TNE = vf::lbm::dir::dMMM; + static const int INV_TNW = vf::lbm::dir::dPMM; + static const int INV_TSE = vf::lbm::dir::dMPM; + static const int INV_TSW = vf::lbm::dir::dPPM; + static const int INV_BNE = vf::lbm::dir::dMMP; + static const int INV_BNW = vf::lbm::dir::dPMP; + static const int INV_BSE = vf::lbm::dir::dMPP; + static const int INV_BSW = vf::lbm::dir::dPPP; static const unsigned long int etZERO; // 1;/*f0 */ static const unsigned long int etE; // 2; /*f1 */ diff --git a/src/cpu/VirtualFluidsCore/Data/VoidData3D.h b/src/cpu/core/Data/VoidData3D.h similarity index 52% rename from src/cpu/VirtualFluidsCore/Data/VoidData3D.h rename to src/cpu/core/Data/VoidData3D.h index 25fe5dde2a5a874fdefe0eaf2502c86df29faa95..2b47d397149fbc06d03045d46c95d9b3c3c7a4fc 100644 --- a/src/cpu/VirtualFluidsCore/Data/VoidData3D.h +++ b/src/cpu/core/Data/VoidData3D.h @@ -19,28 +19,28 @@ public: size_t getNX1() const override { return NX1; } size_t getNX2() const override { return NX2; } size_t getNX3() const override { return NX3; } - void getDistribution(real *const f, size_t x1, size_t x2, size_t x3) override {} - void setDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override {} - void getDistributionInv(real *const f, size_t x1, size_t x2, size_t x3) override {} - void setDistributionInv(const real *const f, size_t x1, size_t x2, size_t x3) override {} - void setDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, + void getPreCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override {} + void setPostCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override {} + void getPostCollisionDistribution(real *const f, size_t x1, size_t x2, size_t x3) override {} + void setPreCollisionDistribution(const real *const f, size_t x1, size_t x2, size_t x3) override {} + void setPostCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) override { } - void setDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override {} + void setPostCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, int direction) override {} real getDistributionInvForDirection(size_t /*x1*/, size_t /*x2*/, size_t /*x3*/, int /*direction*/) override { return 0.0; } - void setDistributionInvForDirection(const real *const f, size_t x1, size_t x2, size_t x3, + void setPreCollisionDistributionForDirection(const real *const f, size_t x1, size_t x2, size_t x3, unsigned long int direction) override { } - void setDistributionInvForDirection(real f, size_t x1, size_t x2, size_t x3, + void setPreCollisionDistributionForDirection(real f, size_t x1, size_t x2, size_t x3, unsigned long int direction) override { } - real getDistributionForDirection(size_t /*x1*/, size_t /*x2*/, size_t /*x3*/, int /*direction*/) override + real getPreCollisionDistributionForDirection(size_t /*x1*/, size_t /*x2*/, size_t /*x3*/, int /*direction*/) override { return 0.0; } diff --git a/src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.cpp b/src/cpu/core/Interactors/D3Q27Interactor.cpp similarity index 90% rename from src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.cpp rename to src/cpu/core/Interactors/D3Q27Interactor.cpp index d9c605a587c90a96d0e070f9528fefb028307cf6..598cfe5b07174a230ae7437ec7217b3d05c94f6e 100644 --- a/src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.cpp +++ b/src/cpu/core/Interactors/D3Q27Interactor.cpp @@ -91,110 +91,110 @@ void D3Q27Interactor::initRayVectors() using namespace vf::basics::constant; int fdir; - real c1oS2 = vf::basics::constant::one_over_sqrt2; - real c1oS3 = vf::basics::constant::one_over_sqrt3; - fdir = DIR_P00; + real c1oS2 = vf::basics::constant::c1oSqrt2; + real c1oS3 = vf::basics::constant::c1oSqrt3; + fdir = dP00; rayX1[fdir] = c1o1; rayX2[fdir] = c0o1; rayX3[fdir] = c0o1; - fdir = DIR_M00; + fdir = dM00; rayX1[fdir] = -c1o1; rayX2[fdir] = c0o1; rayX3[fdir] = c0o1; - fdir = DIR_0P0; + fdir = d0P0; rayX1[fdir] = c0o1; rayX2[fdir] = c1o1; rayX3[fdir] = c0o1; - fdir = DIR_0M0; + fdir = d0M0; rayX1[fdir] = c0o1; rayX2[fdir] = -c1o1; rayX3[fdir] = c0o1; - fdir = DIR_00P; + fdir = d00P; rayX1[fdir] = c0o1; rayX2[fdir] = c0o1; rayX3[fdir] = c1o1; - fdir = DIR_00M; + fdir = d00M; rayX1[fdir] = c0o1; rayX2[fdir] = c0o1; rayX3[fdir] = -c1o1; - fdir = DIR_PP0; + fdir = dPP0; rayX1[fdir] = c1oS2; rayX2[fdir] = c1oS2; rayX3[fdir] = c0o1; - fdir = DIR_MM0; + fdir = dMM0; rayX1[fdir] = -c1oS2; rayX2[fdir] = -c1oS2; rayX3[fdir] = c0o1; - fdir = DIR_PM0; + fdir = dPM0; rayX1[fdir] = c1oS2; rayX2[fdir] = -c1oS2; rayX3[fdir] = c0o1; - fdir = DIR_MP0; + fdir = dMP0; rayX1[fdir] = -c1oS2; rayX2[fdir] = c1oS2; rayX3[fdir] = c0o1; - fdir = DIR_P0P; + fdir = dP0P; rayX1[fdir] = c1oS2; rayX2[fdir] = c0o1; rayX3[fdir] = c1oS2; - fdir = DIR_M0M; + fdir = dM0M; rayX1[fdir] = -c1oS2; rayX2[fdir] = c0o1; rayX3[fdir] = -c1oS2; - fdir = DIR_P0M; + fdir = dP0M; rayX1[fdir] = c1oS2; rayX2[fdir] = c0o1; rayX3[fdir] = -c1oS2; - fdir = DIR_M0P; + fdir = dM0P; rayX1[fdir] = -c1oS2; rayX2[fdir] = c0o1; rayX3[fdir] = c1oS2; - fdir = DIR_0PP; + fdir = d0PP; rayX1[fdir] = c0o1; rayX2[fdir] = c1oS2; rayX3[fdir] = c1oS2; - fdir = DIR_0MM; + fdir = d0MM; rayX1[fdir] = c0o1; rayX2[fdir] = -c1oS2; rayX3[fdir] = -c1oS2; - fdir = DIR_0PM; + fdir = d0PM; rayX1[fdir] = c0o1; rayX2[fdir] = c1oS2; rayX3[fdir] = -c1oS2; - fdir = DIR_0MP; + fdir = d0MP; rayX1[fdir] = c0o1; rayX2[fdir] = -c1oS2; rayX3[fdir] = c1oS2; - fdir = DIR_MPP; + fdir = dMPP; rayX1[fdir] = -c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = c1oS3; - fdir = DIR_PPP; + fdir = dPPP; rayX1[fdir] = c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = c1oS3; - fdir = DIR_MMP; + fdir = dMMP; rayX1[fdir] = -c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = c1oS3; - fdir = DIR_PMP; + fdir = dPMP; rayX1[fdir] = c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = c1oS3; - fdir = DIR_MPM; + fdir = dMPM; rayX1[fdir] = -c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = -c1oS3; - fdir = DIR_PPM; + fdir = dPPM; rayX1[fdir] = c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = -c1oS3; - fdir = DIR_MMM; + fdir = dMMM; rayX1[fdir] = -c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = -c1oS3; - fdir = DIR_PMM; + fdir = dPMM; rayX1[fdir] = c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = -c1oS3; @@ -332,19 +332,19 @@ bool D3Q27Interactor::setDifferencesToGbObject3D(const SPtr<Block3D> block) throw UbException( UB_EXARGS, "fuer den bei LB nicht vorkommenden Fall deltaX1!=deltaX2!=deltaX3 nicht implementiert "); - vector<real> distNeigh(D3Q27System::FENDDIR + 1, vf::basics::constant::sqrt2 * deltaX1); - distNeigh[DIR_P00] = distNeigh[DIR_M00] = distNeigh[DIR_0P0] = deltaX1; - distNeigh[DIR_0M0] = distNeigh[DIR_00P] = distNeigh[DIR_00M] = deltaX1; - distNeigh[DIR_PP0] = distNeigh[DIR_MP0] = distNeigh[DIR_MM0] = - distNeigh[DIR_PM0] = vf::basics::constant::sqrt2 * deltaX1; - distNeigh[DIR_P0P] = distNeigh[DIR_0PP] = distNeigh[DIR_M0P] = - distNeigh[DIR_0MP] = vf::basics::constant::sqrt2 * deltaX1; - distNeigh[DIR_P0M] = distNeigh[DIR_0PM] = distNeigh[DIR_M0M] = - distNeigh[DIR_0MM] = vf::basics::constant::sqrt2 * deltaX1; - distNeigh[DIR_PPP] = distNeigh[DIR_MPP] = distNeigh[DIR_PMP] = - distNeigh[DIR_MMP] = vf::basics::constant::sqrt3 * deltaX1; - distNeigh[DIR_PPM] = distNeigh[DIR_MPM] = distNeigh[DIR_PMM] = - distNeigh[DIR_MMM] = vf::basics::constant::sqrt3 * deltaX1; + vector<real> distNeigh(D3Q27System::FENDDIR + 1, vf::basics::constant::cSqrt2 * deltaX1); + distNeigh[dP00] = distNeigh[dM00] = distNeigh[d0P0] = deltaX1; + distNeigh[d0M0] = distNeigh[d00P] = distNeigh[d00M] = deltaX1; + distNeigh[dPP0] = distNeigh[dMP0] = distNeigh[dMM0] = + distNeigh[dPM0] = vf::basics::constant::cSqrt2 * deltaX1; + distNeigh[dP0P] = distNeigh[d0PP] = distNeigh[dM0P] = + distNeigh[d0MP] = vf::basics::constant::cSqrt2 * deltaX1; + distNeigh[dP0M] = distNeigh[d0PM] = distNeigh[dM0M] = + distNeigh[d0MM] = vf::basics::constant::cSqrt2 * deltaX1; + distNeigh[dPPP] = distNeigh[dMPP] = distNeigh[dPMP] = + distNeigh[dMMP] = vf::basics::constant::cSqrt3 * deltaX1; + distNeigh[dPPM] = distNeigh[dMPM] = distNeigh[dPMM] = + distNeigh[dMMM] = vf::basics::constant::cSqrt3 * deltaX1; real q; bool pointOnBoundary = false; @@ -621,132 +621,132 @@ void D3Q27Interactor::addQsLineSet(std::vector<UbTupleFloat3> &nodes, std::vecto if (bc->hasBoundaryConditionFlag(D3Q27System::INVDIR[dir])) { real x1b, x2b, x3b, q = bc->getQ(dir); switch (dir) { - case DIR_P00: + case dP00: x1b = x1a + q * dx; x2b = x2a; x3b = x3a; break; - case DIR_0P0: + case d0P0: x1b = x1a; x2b = x2a + q * dx; x3b = x3a; break; - case DIR_M00: + case dM00: x1b = x1a - q * dx; x2b = x2a; x3b = x3a; break; - case DIR_0M0: + case d0M0: x1b = x1a; x2b = x2a - q * dx; x3b = x3a; break; - case DIR_PP0: + case dPP0: x1b = x1a + q * dx; x2b = x2a + q * dx; x3b = x3a; break; - case DIR_MP0: + case dMP0: x1b = x1a - q * dx; x2b = x2a + q * dx; x3b = x3a; break; - case DIR_MM0: + case dMM0: x1b = x1a - q * dx; x2b = x2a - q * dx; x3b = x3a; break; - case DIR_PM0: + case dPM0: x1b = x1a + q * dx; x2b = x2a - q * dx; x3b = x3a; break; - case DIR_00P: + case d00P: x1b = x1a; x2b = x2a; x3b = x3a + q * dx; break; - case DIR_P0P: + case dP0P: x1b = x1a + q * dx; x2b = x2a; x3b = x3a + q * dx; break; - case DIR_0PP: + case d0PP: x1b = x1a; x2b = x2a + q * dx; x3b = x3a + q * dx; break; - case DIR_M0P: + case dM0P: x1b = x1a - q * dx; x2b = x2a; x3b = x3a + q * dx; break; - case DIR_0MP: + case d0MP: x1b = x1a; x2b = x2a - q * dx; x3b = x3a + q * dx; break; - case DIR_00M: + case d00M: x1b = x1a; x2b = x2a; x3b = x3a - q * dx; break; - case DIR_P0M: + case dP0M: x1b = x1a + q * dx; x2b = x2a; x3b = x3a - q * dx; break; - case DIR_0PM: + case d0PM: x1b = x1a; x2b = x2a + q * dx; x3b = x3a - q * dx; break; - case DIR_M0M: + case dM0M: x1b = x1a - q * dx; x2b = x2a; x3b = x3a - q * dx; break; - case DIR_0MM: + case d0MM: x1b = x1a; x2b = x2a - q * dx; x3b = x3a - q * dx; break; - case DIR_PPP: + case dPPP: x1b = x1a + q * dx; x2b = x2a + q * dx; x3b = x3a + q * dx; break; - case DIR_MMM: + case dMMM: x1b = x1a - q * dx; x2b = x2a - q * dx; x3b = x3a - q * dx; break; - case DIR_PPM: + case dPPM: x1b = x1a + q * dx; x2b = x2a + q * dx; x3b = x3a - q * dx; break; - case DIR_MMP: + case dMMP: x1b = x1a - q * dx; x2b = x2a - q * dx; x3b = x3a + q * dx; break; - case DIR_PMP: + case dPMP: x1b = x1a + q * dx; x2b = x2a - q * dx; x3b = x3a + q * dx; break; - case DIR_MPM: + case dMPM: x1b = x1a - q * dx; x2b = x2a + q * dx; x3b = x3a - q * dx; break; - case DIR_PMM: + case dPMM: x1b = x1a + q * dx; x2b = x2a - q * dx; x3b = x3a - q * dx; break; - case DIR_MPP: + case dMPP: x1b = x1a - q * dx; x2b = x2a + q * dx; x3b = x3a + q * dx; @@ -792,17 +792,17 @@ vector<pair<GbPoint3D, GbPoint3D>> D3Q27Interactor::getQsLineSet() bool include_TN_Edge = false; //(x1/x2/x3)=([0..blocknx1[/blocknx2/blocknx1) bool include_TE_Edge = false; //(x1/x2/x3)=(blocknx1/[0..blocknx2[/blocknx2) if (block) { - if (!block->getConnector(DIR_0P0)) + if (!block->getConnector(d0P0)) include_N_Face = true; - if (!block->getConnector(DIR_P00)) + if (!block->getConnector(dP00)) include_E_Face = true; - if (!block->getConnector(DIR_00P)) + if (!block->getConnector(d00P)) include_T_Face = true; - if (!block->getConnector(DIR_PP0) && include_N_Face && include_E_Face) + if (!block->getConnector(dPP0) && include_N_Face && include_E_Face) include_NE_Edge = true; - if (!block->getConnector(DIR_0PP) && include_T_Face && include_N_Face) + if (!block->getConnector(d0PP) && include_T_Face && include_N_Face) include_TN_Edge = true; - if (!block->getConnector(DIR_P0P) && include_T_Face && include_E_Face) + if (!block->getConnector(dP0P) && include_T_Face && include_E_Face) include_TE_Edge = true; } @@ -844,132 +844,132 @@ vector<pair<GbPoint3D, GbPoint3D>> D3Q27Interactor::getQsLineSet() if (bc->hasBoundaryConditionFlag(D3Q27System::INVDIR[dir])) { real x1b, x2b, x3b, q = bc->getQ(dir); switch (dir) { - case DIR_P00: + case dP00: x1b = x1a + q * dx; x2b = x2a; x3b = x3a; break; - case DIR_0P0: + case d0P0: x1b = x1a; x2b = x2a + q * dx; x3b = x3a; break; - case DIR_M00: + case dM00: x1b = x1a - q * dx; x2b = x2a; x3b = x3a; break; - case DIR_0M0: + case d0M0: x1b = x1a; x2b = x2a - q * dx; x3b = x3a; break; - case DIR_PP0: + case dPP0: x1b = x1a + q * dx; x2b = x2a + q * dx; x3b = x3a; break; - case DIR_MP0: + case dMP0: x1b = x1a - q * dx; x2b = x2a + q * dx; x3b = x3a; break; - case DIR_MM0: + case dMM0: x1b = x1a - q * dx; x2b = x2a - q * dx; x3b = x3a; break; - case DIR_PM0: + case dPM0: x1b = x1a + q * dx; x2b = x2a - q * dx; x3b = x3a; break; - case DIR_00P: + case d00P: x1b = x1a; x2b = x2a; x3b = x3a + q * dx; break; - case DIR_P0P: + case dP0P: x1b = x1a + q * dx; x2b = x2a; x3b = x3a + q * dx; break; - case DIR_0PP: + case d0PP: x1b = x1a; x2b = x2a + q * dx; x3b = x3a + q * dx; break; - case DIR_M0P: + case dM0P: x1b = x1a - q * dx; x2b = x2a; x3b = x3a + q * dx; break; - case DIR_0MP: + case d0MP: x1b = x1a; x2b = x2a - q * dx; x3b = x3a + q * dx; break; - case DIR_00M: + case d00M: x1b = x1a; x2b = x2a; x3b = x3a - q * dx; break; - case DIR_P0M: + case dP0M: x1b = x1a + q * dx; x2b = x2a; x3b = x3a - q * dx; break; - case DIR_0PM: + case d0PM: x1b = x1a; x2b = x2a + q * dx; x3b = x3a - q * dx; break; - case DIR_M0M: + case dM0M: x1b = x1a - q * dx; x2b = x2a; x3b = x3a - q * dx; break; - case DIR_0MM: + case d0MM: x1b = x1a; x2b = x2a - q * dx; x3b = x3a - q * dx; break; - case DIR_PPP: + case dPPP: x1b = x1a + q * dx; x2b = x2a + q * dx; x3b = x3a + q * dx; break; - case DIR_MMM: + case dMMM: x1b = x1a - q * dx; x2b = x2a - q * dx; x3b = x3a - q * dx; break; - case DIR_PPM: + case dPPM: x1b = x1a + q * dx; x2b = x2a + q * dx; x3b = x3a - q * dx; break; - case DIR_MMP: + case dMMP: x1b = x1a - q * dx; x2b = x2a - q * dx; x3b = x3a + q * dx; break; - case DIR_PMP: + case dPMP: x1b = x1a + q * dx; x2b = x2a - q * dx; x3b = x3a + q * dx; break; - case DIR_MPM: + case dMPM: x1b = x1a - q * dx; x2b = x2a + q * dx; x3b = x3a - q * dx; break; - case DIR_PMM: + case dPMM: x1b = x1a + q * dx; x2b = x2a - q * dx; x3b = x3a - q * dx; break; - case DIR_MPP: + case dMPP: x1b = x1a - q * dx; x2b = x2a + q * dx; x3b = x3a + q * dx; diff --git a/src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.h b/src/cpu/core/Interactors/D3Q27Interactor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Interactors/D3Q27Interactor.h rename to src/cpu/core/Interactors/D3Q27Interactor.h diff --git a/src/cpu/VirtualFluidsCore/Interactors/D3Q27TriFaceMeshInteractor.cpp b/src/cpu/core/Interactors/D3Q27TriFaceMeshInteractor.cpp similarity index 99% rename from src/cpu/VirtualFluidsCore/Interactors/D3Q27TriFaceMeshInteractor.cpp rename to src/cpu/core/Interactors/D3Q27TriFaceMeshInteractor.cpp index 98906576c44b5abf3895eb429d37ee0a065ae9ec..f655ac84d1c12b9206dad27d53250f1ff9702f02 100644 --- a/src/cpu/VirtualFluidsCore/Interactors/D3Q27TriFaceMeshInteractor.cpp +++ b/src/cpu/core/Interactors/D3Q27TriFaceMeshInteractor.cpp @@ -365,9 +365,9 @@ void D3Q27TriFaceMeshInteractor::setQs(const real &timeStep) // tmpSolidNodesFromOtherInteractors[block]; double q, distance; - double &nodeDx1 = nodeDeltaToNeigh[level][DIR_P00]; - double &nodeDx2 = nodeDeltaToNeigh[level][DIR_0P0]; - double &nodeDx3 = nodeDeltaToNeigh[level][DIR_00P]; + double &nodeDx1 = nodeDeltaToNeigh[level][dP00]; + double &nodeDx2 = nodeDeltaToNeigh[level][d0P0]; + double &nodeDx3 = nodeDeltaToNeigh[level][d00P]; // fuer OBB-Test double qEinflussDelta = 1.1 * sqrt(nodeDx1 * nodeDx1 + nodeDx2 * nodeDx2 + nodeDx3 * nodeDx3); @@ -775,10 +775,10 @@ void D3Q27TriFaceMeshInteractor::initInteractor2(const real &timeStep) // FeTriFaceMesh3D::VertexAttributes& vAttribut2 = (*attributes)[triangle.v2]; // FeTriFaceMesh3D::VertexAttributes& vAttribut3 = (*attributes)[triangle.v3]; // vx1 = - // (float)(UbMath::c1o3*(vAttribut1.getVelocityX()+vAttribut2.getVelocityX()+vAttribut3.getVelocityX())); vx2 - // = (float)(UbMath::c1o3*(vAttribut1.getVelocityY()+vAttribut2.getVelocityY()+vAttribut3.getVelocityY())); + // (float)(vf::basics::constant::c1o3*(vAttribut1.getVelocityX()+vAttribut2.getVelocityX()+vAttribut3.getVelocityX())); vx2 + // = (float)(vf::basics::constant::c1o3*(vAttribut1.getVelocityY()+vAttribut2.getVelocityY()+vAttribut3.getVelocityY())); // vx3 = - // (float)(UbMath::c1o3*(vAttribut1.getVelocityZ()+vAttribut2.getVelocityZ()+vAttribut3.getVelocityZ())); + // (float)(vf::basics::constant::c1o3*(vAttribut1.getVelocityZ()+vAttribut2.getVelocityZ()+vAttribut3.getVelocityZ())); //} ////////////////////////////////////////////////////////////////////////// @@ -881,9 +881,9 @@ void D3Q27TriFaceMeshInteractor::initInteractor2(const real &timeStep) std::set<std::vector<int>> &solidsFromOtherInteractors = tmpSolidNodesFromOtherInteractors[block]; double q, internX1, internX2, internX3, distance; - double &nodeDx1 = nodeDeltaToNeigh[level][DIR_P00]; - double &nodeDx2 = nodeDeltaToNeigh[level][DIR_0P0]; - double &nodeDx3 = nodeDeltaToNeigh[level][DIR_00P]; + double &nodeDx1 = nodeDeltaToNeigh[level][dP00]; + double &nodeDx2 = nodeDeltaToNeigh[level][d0P0]; + double &nodeDx3 = nodeDeltaToNeigh[level][d00P]; // fuer OBB-Test double qEinflussDelta = 1.1 * sqrt(nodeDx1 * nodeDx1 + nodeDx2 * nodeDx2 + nodeDx3 * nodeDx3); @@ -1181,9 +1181,9 @@ void D3Q27TriFaceMeshInteractor::initInteractor2(const real &timeStep) std::set<UbTupleInt3> &solidNodeIndices = this->solidNodeIndicesMap[block]; - float nodeDeltaX1 = (float)nodeDeltaToNeigh[level][DIR_P00]; - float nodeDeltaX2 = (float)nodeDeltaToNeigh[level][DIR_0P0]; - float nodeDeltaX3 = (float)nodeDeltaToNeigh[level][DIR_00P]; + float nodeDeltaX1 = (float)nodeDeltaToNeigh[level][dP00]; + float nodeDeltaX2 = (float)nodeDeltaToNeigh[level][d0P0]; + float nodeDeltaX3 = (float)nodeDeltaToNeigh[level][d00P]; // flagfield matrix initialisieren CbArray3D<FLAGS> flagField(blocknx1, blocknx2, blocknx3, UNDEF_FLAG); diff --git a/src/cpu/VirtualFluidsCore/Interactors/D3Q27TriFaceMeshInteractor.h b/src/cpu/core/Interactors/D3Q27TriFaceMeshInteractor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Interactors/D3Q27TriFaceMeshInteractor.h rename to src/cpu/core/Interactors/D3Q27TriFaceMeshInteractor.h diff --git a/src/cpu/VirtualFluidsCore/Interactors/Interactor3D.cpp b/src/cpu/core/Interactors/Interactor3D.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Interactors/Interactor3D.cpp rename to src/cpu/core/Interactors/Interactor3D.cpp diff --git a/src/cpu/VirtualFluidsCore/Interactors/Interactor3D.h b/src/cpu/core/Interactors/Interactor3D.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Interactors/Interactor3D.h rename to src/cpu/core/Interactors/Interactor3D.h diff --git a/src/cpu/VirtualFluidsCore/Interactors/InteractorsHelper.cpp b/src/cpu/core/Interactors/InteractorsHelper.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Interactors/InteractorsHelper.cpp rename to src/cpu/core/Interactors/InteractorsHelper.cpp diff --git a/src/cpu/VirtualFluidsCore/Interactors/InteractorsHelper.h b/src/cpu/core/Interactors/InteractorsHelper.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Interactors/InteractorsHelper.h rename to src/cpu/core/Interactors/InteractorsHelper.h diff --git a/src/cpu/core/LBM/BGKLBMKernel.cpp b/src/cpu/core/LBM/BGKLBMKernel.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d5cae00398a4156db28feea98a616363cef0671d --- /dev/null +++ b/src/cpu/core/LBM/BGKLBMKernel.cpp @@ -0,0 +1,305 @@ +#include "BGKLBMKernel.h" +#include "BCArray3D.h" +#include "BCSet.h" +#include "D3Q27EsoTwist3DSoA.h" +#include "D3Q27EsoTwist3DSplittedVector.h" +#include "D3Q27System.h" +#include "DataSet3D.h" +#include "Block3D.h" +#include "basics/constants/NumericConstants.h" + +#define PROOF_CORRECTNESS + +////////////////////////////////////////////////////////////////////////// +BGKLBMKernel::BGKLBMKernel() { this->compressible = false; } +////////////////////////////////////////////////////////////////////////// +BGKLBMKernel::~BGKLBMKernel(void) = default; +////////////////////////////////////////////////////////////////////////// +void BGKLBMKernel::initDataSet() +{ + SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9)); + dataSet->setFdistributions(d); +} +////////////////////////////////////////////////////////////////////////// +SPtr<LBMKernel> BGKLBMKernel::clone() +{ + SPtr<LBMKernel> kernel(new BGKLBMKernel()); + kernel->setNX(nx); + std::dynamic_pointer_cast<BGKLBMKernel>(kernel)->initDataSet(); + kernel->setCollisionFactor(this->collFactor); + kernel->setBCSet(bcSet->clone(kernel)); + kernel->setWithForcing(withForcing); + kernel->setForcingX1(muForcingX1); + kernel->setForcingX2(muForcingX2); + kernel->setForcingX3(muForcingX3); + kernel->setIndex(ix1, ix2, ix3); + kernel->setDeltaT(deltaT); + kernel->setBlock(block.lock()); + return kernel; +} +////////////////////////////////////////////////////////////////////////// +void BGKLBMKernel::calculate(int step) +{ + using namespace D3Q27System; + // using namespace UbMath; + using namespace vf::basics::constant; + using namespace vf::lbm::dir; + + // initializing of forcing stuff + if (withForcing) { + muForcingX1.DefineVar("x1", &muX1); + muForcingX1.DefineVar("x2", &muX2); + muForcingX1.DefineVar("x3", &muX3); + muForcingX2.DefineVar("x1", &muX1); + muForcingX2.DefineVar("x2", &muX2); + muForcingX2.DefineVar("x3", &muX3); + muForcingX3.DefineVar("x1", &muX1); + muForcingX3.DefineVar("x2", &muX2); + muForcingX3.DefineVar("x3", &muX3); + forcingX1 = 0; + forcingX2 = 0; + forcingX3 = 0; + } + ///////////////////////////////////// + + localDistributions = + std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); + nonLocalDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions()) + ->getNonLocalDistributions(); + zeroDistributions = + std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); + + SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); + real f[D3Q27System::ENDF + 1]; + real feq[D3Q27System::ENDF + 1]; + real drho, vx1, vx2, vx3; + const int bcArrayMaxX1 = (int)bcArray->getNX1(); + const int bcArrayMaxX2 = (int)bcArray->getNX2(); + const int bcArrayMaxX3 = (int)bcArray->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = bcArrayMaxX1 - ghostLayerWidth; + int maxX2 = bcArrayMaxX2 - ghostLayerWidth; + int maxX3 = bcArrayMaxX3 - ghostLayerWidth; + + for (int x3 = minX3; x3 < maxX3; x3++) { + for (int x2 = minX2; x2 < maxX2; x2++) { + for (int x1 = minX1; x1 < maxX1; x1++) { + if (!bcArray->isSolid(x1, x2, x3) && !bcArray->isUndefined(x1, x2, x3)) { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + ////////////////////////////////////////////////////////////////////////// + // read distribution + //////////////////////////////////////////////////////////////////////////// + f[d000] = (*this->zeroDistributions)(x1, x2, x3); + + f[dP00] = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); + f[d0P0] = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); + f[d00P] = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3); + f[dPP0] = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3); + f[dMP0] = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3); + f[dP0P] = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3); + f[dM0P] = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3); + f[d0PP] = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3); + f[d0MP] = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3); + f[dPPP] = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3); + f[dMPP] = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3); + f[dPMP] = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3); + f[dMMP] = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3); + + f[dM00] = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3); + f[d0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3); + f[d00M] = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p); + f[dMM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3); + f[dPM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3); + f[dM0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p); + f[dP0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p); + f[d0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p); + f[d0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p); + f[dMMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p); + f[dPMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p); + f[dMPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p); + f[dPPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p); + ////////////////////////////////////////////////////////////////////////// + + drho = f[d000] + f[dP00] + f[dM00] + f[d0P0] + f[d0M0] + f[d00P] + f[d00M] + f[dPP0] + f[dMM0] + f[dPM0] + f[dMP0] + f[dP0P] + + f[dM0M] + f[dP0M] + f[dM0P] + f[d0PP] + f[d0MM] + f[d0PM] + f[d0MP] + f[dPPP] + f[dMMP] + f[dPMP] + f[dMPP] + + f[dPPM] + f[dMMM] + f[dPMM] + f[dMPM]; + + vx1 = f[dP00] - f[dM00] + f[dPP0] - f[dMM0] + f[dPM0] - f[dMP0] + f[dP0P] - f[dM0M] + f[dP0M] - f[dM0P] + f[dPPP] - + f[dMMP] + f[dPMP] - f[dMPP] + f[dPPM] - f[dMMM] + f[dPMM] - f[dMPM]; + + vx2 = f[d0P0] - f[d0M0] + f[dPP0] - f[dMM0] - f[dPM0] + f[dMP0] + f[d0PP] - f[d0MM] + f[d0PM] - f[d0MP] + f[dPPP] - + f[dMMP] - f[dPMP] + f[dMPP] + f[dPPM] - f[dMMM] - f[dPMM] + f[dMPM]; + + vx3 = f[d00P] - f[d00M] + f[dP0P] - f[dM0M] - f[dP0M] + f[dM0P] + f[d0PP] - f[d0MM] - f[d0PM] + f[d0MP] + f[dPPP] + + f[dMMP] + f[dPMP] + f[dMPP] - f[dPPM] - f[dMMM] - f[dPMM] - f[dMPM]; + + real cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); + + feq[d000] = c8o27 * (drho - cu_sq); + feq[dP00] = c2o27 * (drho + c3o1 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq); + feq[dM00] = c2o27 * (drho + c3o1 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq); + feq[d0P0] = c2o27 * (drho + c3o1 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq); + feq[d0M0] = c2o27 * (drho + c3o1 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq); + feq[d00P] = c2o27 * (drho + c3o1 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq); + feq[d00M] = c2o27 * (drho + c3o1 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq); + feq[dPP0] = c1o54 * (drho + c3o1 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq); + feq[dMM0] = c1o54 * (drho + c3o1 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq); + feq[dPM0] = c1o54 * (drho + c3o1 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq); + feq[dMP0] = c1o54 * (drho + c3o1 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq); + feq[dP0P] = c1o54 * (drho + c3o1 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq); + feq[dM0M] = c1o54 * (drho + c3o1 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq); + feq[dP0M] = c1o54 * (drho + c3o1 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq); + feq[dM0P] = c1o54 * (drho + c3o1 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq); + feq[d0PP] = c1o54 * (drho + c3o1 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq); + feq[d0MM] = c1o54 * (drho + c3o1 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq); + feq[d0PM] = c1o54 * (drho + c3o1 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq); + feq[d0MP] = c1o54 * (drho + c3o1 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq); + feq[dPPP] = c1o216 * + (drho + c3o1 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq); + feq[dMMM] = c1o216 * (drho + c3o1 * (-vx1 - vx2 - vx3) + + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq); + feq[dPPM] = c1o216 * + (drho + c3o1 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq); + feq[dMMP] = c1o216 * (drho + c3o1 * (-vx1 - vx2 + vx3) + + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq); + feq[dPMP] = c1o216 * + (drho + c3o1 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq); + feq[dMPM] = c1o216 * (drho + c3o1 * (-vx1 + vx2 - vx3) + + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq); + feq[dPMM] = c1o216 * + (drho + c3o1 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq); + feq[dMPP] = c1o216 * (drho + c3o1 * (-vx1 + vx2 + vx3) + + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq); + + // Relaxation + f[d000] += (feq[d000] - f[d000]) * collFactor; + f[dP00] += (feq[dP00] - f[dP00]) * collFactor; + f[dM00] += (feq[dM00] - f[dM00]) * collFactor; + f[d0P0] += (feq[d0P0] - f[d0P0]) * collFactor; + f[d0M0] += (feq[d0M0] - f[d0M0]) * collFactor; + f[d00P] += (feq[d00P] - f[d00P]) * collFactor; + f[d00M] += (feq[d00M] - f[d00M]) * collFactor; + f[dPP0] += (feq[dPP0] - f[dPP0]) * collFactor; + f[dMM0] += (feq[dMM0] - f[dMM0]) * collFactor; + f[dPM0] += (feq[dPM0] - f[dPM0]) * collFactor; + f[dMP0] += (feq[dMP0] - f[dMP0]) * collFactor; + f[dP0P] += (feq[dP0P] - f[dP0P]) * collFactor; + f[dM0M] += (feq[dM0M] - f[dM0M]) * collFactor; + f[dP0M] += (feq[dP0M] - f[dP0M]) * collFactor; + f[dM0P] += (feq[dM0P] - f[dM0P]) * collFactor; + f[d0PP] += (feq[d0PP] - f[d0PP]) * collFactor; + f[d0MM] += (feq[d0MM] - f[d0MM]) * collFactor; + f[d0PM] += (feq[d0PM] - f[d0PM]) * collFactor; + f[d0MP] += (feq[d0MP] - f[d0MP]) * collFactor; + + f[dPPP] += (feq[dPPP] - f[dPPP]) * collFactor; + f[dMMM] += (feq[dMMM] - f[dMMM]) * collFactor; + f[dPPM] += (feq[dPPM] - f[dPPM]) * collFactor; + f[dMMP] += (feq[dMMP] - f[dMMP]) * collFactor; + f[dPMP] += (feq[dPMP] - f[dPMP]) * collFactor; + f[dMPM] += (feq[dMPM] - f[dMPM]) * collFactor; + f[dPMM] += (feq[dPMM] - f[dPMM]) * collFactor; + f[dMPP] += (feq[dMPP] - f[dMPP]) * collFactor; + + ////////////////////////////////////////////////////////////////////////// + // forcing + if (withForcing) { + muX1 = x1 + ix1 * bcArrayMaxX1; + muX2 = x2 + ix2 * bcArrayMaxX2; + muX3 = x3 + ix3 * bcArrayMaxX3; + + forcingX1 = muForcingX1.Eval(); + forcingX2 = muForcingX2.Eval(); + forcingX3 = muForcingX3.Eval(); + + f[d000] += c0o1; + f[dP00] += c3o1 * c2o27 * (forcingX1); + f[dM00] += c3o1 * c2o27 * (-forcingX1); + f[d0P0] += c3o1 * c2o27 * (forcingX2); + f[d0M0] += c3o1 * c2o27 * (-forcingX2); + f[d00P] += c3o1 * c2o27 * (forcingX3); + f[d00M] += c3o1 * c2o27 * (-forcingX3); + f[dPP0] += c3o1 * c1o54 * (forcingX1 + forcingX2); + f[dMM0] += c3o1 * c1o54 * (-forcingX1 - forcingX2); + f[dPM0] += c3o1 * c1o54 * (forcingX1 - forcingX2); + f[dMP0] += c3o1 * c1o54 * (-forcingX1 + forcingX2); + f[dP0P] += c3o1 * c1o54 * (forcingX1 + forcingX3); + f[dM0M] += c3o1 * c1o54 * (-forcingX1 - forcingX3); + f[dP0M] += c3o1 * c1o54 * (forcingX1 - forcingX3); + f[dM0P] += c3o1 * c1o54 * (-forcingX1 + forcingX3); + f[d0PP] += c3o1 * c1o54 * (forcingX2 + forcingX3); + f[d0MM] += c3o1 * c1o54 * (-forcingX2 - forcingX3); + f[d0PM] += c3o1 * c1o54 * (forcingX2 - forcingX3); + f[d0MP] += c3o1 * c1o54 * (-forcingX2 + forcingX3); + f[dPPP] += c3o1 * c1o216 * (forcingX1 + forcingX2 + forcingX3); + f[dMMM] += c3o1 * c1o216 * (-forcingX1 - forcingX2 - forcingX3); + f[dPPM] += c3o1 * c1o216 * (forcingX1 + forcingX2 - forcingX3); + f[dMMP] += c3o1 * c1o216 * (-forcingX1 - forcingX2 + forcingX3); + f[dPMP] += c3o1 * c1o216 * (forcingX1 - forcingX2 + forcingX3); + f[dMPM] += c3o1 * c1o216 * (-forcingX1 + forcingX2 - forcingX3); + f[dPMM] += c3o1 * c1o216 * (forcingX1 - forcingX2 - forcingX3); + f[dMPP] += c3o1 * c1o216 * (-forcingX1 + forcingX2 + forcingX3); + } + ////////////////////////////////////////////////////////////////////////// +#ifdef PROOF_CORRECTNESS + real rho_post = f[d000] + f[dP00] + f[dM00] + f[d0P0] + f[d0M0] + f[d00P] + f[d00M] + f[dPP0] + f[dMM0] + f[dPM0] + + f[dMP0] + f[dP0P] + f[dM0M] + f[dP0M] + f[dM0P] + f[d0PP] + f[d0MM] + f[d0PM] + f[d0MP] + f[dPPP] + + f[dMMP] + f[dPMP] + f[dMPP] + f[dPPM] + f[dMMM] + f[dPMM] + f[dMPM]; + real dif = drho - rho_post; +#ifdef SINGLEPRECISION + if (dif > 10.0E-7 || dif < -10.0E-7) +#else + if (dif > 10.0E-15 || dif < -10.0E-15) +#endif + { + UB_THROW(UbException(UB_EXARGS, "rho="+UbSystem::toString(drho)+", rho_post="+UbSystem::toString(rho_post) + +" dif="+UbSystem::toString(dif) + +" rho is not correct for node "+UbSystem::toString(x1)+","+UbSystem::toString(x2)+","+UbSystem::toString(x3) + +" in " + block.lock()->toString()+" step = "+UbSystem::toString(step))); + } +#endif + ////////////////////////////////////////////////////////////////////////// + // write distribution + ////////////////////////////////////////////////////////////////////////// + (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[iP00]; + (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[i0P0]; + (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[i00P]; + (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[iPP0]; + (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3) = f[iMP0]; + (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[iP0P]; + (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3) = f[iM0P]; + (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[i0PP]; + (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3) = f[i0MP]; + (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[iPPP]; + (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3) = f[iMPP]; + (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3) = f[iPMP]; + (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[iMMP]; + + (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3) = f[iM00]; + (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3) = f[i0M0]; + (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p) = f[i00M]; + (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3) = f[iMM0]; + (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3) = f[iPM0]; + (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p) = f[iM0M]; + (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p) = f[iP0M]; + (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p) = f[i0MM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p) = f[i0PM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[iMMM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[iPMM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[iMPM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = f[iPPM]; + + (*this->zeroDistributions)(x1, x2, x3) = f[d000]; + ////////////////////////////////////////////////////////////////////////// + } + } + } + } +} +////////////////////////////////////////////////////////////////////////// +real BGKLBMKernel::getCalculationTime() { return vf::basics::constant::c0o1; } diff --git a/src/cpu/VirtualFluidsCore/LBM/BGKLBMKernel.h b/src/cpu/core/LBM/BGKLBMKernel.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/BGKLBMKernel.h rename to src/cpu/core/LBM/BGKLBMKernel.h diff --git a/src/cpu/VirtualFluidsCore/LBM/BasicLBMKernel.cpp b/src/cpu/core/LBM/BasicLBMKernel.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/BasicLBMKernel.cpp rename to src/cpu/core/LBM/BasicLBMKernel.cpp diff --git a/src/cpu/VirtualFluidsCore/LBM/BasicLBMKernel.h b/src/cpu/core/LBM/BasicLBMKernel.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/BasicLBMKernel.h rename to src/cpu/core/LBM/BasicLBMKernel.h diff --git a/src/cpu/VirtualFluidsCore/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.cpp b/src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.cpp similarity index 99% rename from src/cpu/VirtualFluidsCore/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.cpp rename to src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.cpp index c6349de8f1d281d31d0be4e684c54da457d3029f..e4d0017015b71a465c317b1bd8ce105e24c938bb 100644 --- a/src/cpu/VirtualFluidsCore/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.cpp +++ b/src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.cpp @@ -118,7 +118,7 @@ void CompressibleCumulant4thOrderViscosityLBMKernel::calculate(int step) //LBMReal B = (four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega); real A = (c4o1*omega*omega+c2o1*omega*OxxPyyPzz*(omega-c6o1)+OxxPyyPzz*OxxPyyPzz*(omega*(c10o1-c3o1*omega)-c4o1))/((omega-OxxPyyPzz)*(OxxPyyPzz*(c2o1+c3o1*omega)-c8o1*omega)); - //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::DIR_00M' ) + //FIXME: warning C4459: declaration of 'B' hides global declaration (message : see declaration of 'D3Q27System::d00M' ) real B = (c4o1*omega*OxxPyyPzz*(c9o1*omega-c16o1)-c4o1*omega*omega-c2o1*OxxPyyPzz*OxxPyyPzz*(c2o1+c9o1*omega*(omega-c2o1)))/(c3o1*(omega-OxxPyyPzz)*(OxxPyyPzz*(c2o1+c3o1*omega)-c8o1*omega)); for (int x3 = minX3; x3 < maxX3; x3++) diff --git a/src/cpu/VirtualFluidsCore/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.h b/src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.h rename to src/cpu/core/LBM/CompressibleCumulant4thOrderViscosityLBMKernel.h diff --git a/src/cpu/VirtualFluidsCore/LBM/CompressibleCumulantLBMKernel.cpp b/src/cpu/core/LBM/CompressibleCumulantLBMKernel.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/CompressibleCumulantLBMKernel.cpp rename to src/cpu/core/LBM/CompressibleCumulantLBMKernel.cpp diff --git a/src/cpu/VirtualFluidsCore/LBM/CompressibleCumulantLBMKernel.h b/src/cpu/core/LBM/CompressibleCumulantLBMKernel.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/CompressibleCumulantLBMKernel.h rename to src/cpu/core/LBM/CompressibleCumulantLBMKernel.h diff --git a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.cpp b/src/cpu/core/LBM/CumulantK17LBMKernel.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.cpp rename to src/cpu/core/LBM/CumulantK17LBMKernel.cpp diff --git a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.h b/src/cpu/core/LBM/CumulantK17LBMKernel.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernel.h rename to src/cpu/core/LBM/CumulantK17LBMKernel.h diff --git a/src/cpu/VirtualFluidsCore/LBM/CumulantLBMKernel.cpp b/src/cpu/core/LBM/CumulantLBMKernel.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/CumulantLBMKernel.cpp rename to src/cpu/core/LBM/CumulantLBMKernel.cpp diff --git a/src/cpu/VirtualFluidsCore/LBM/CumulantLBMKernel.h b/src/cpu/core/LBM/CumulantLBMKernel.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/CumulantLBMKernel.h rename to src/cpu/core/LBM/CumulantLBMKernel.h diff --git a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.cpp b/src/cpu/core/LBM/D3Q27System.cpp similarity index 89% rename from src/cpu/VirtualFluidsCore/LBM/D3Q27System.cpp rename to src/cpu/core/LBM/D3Q27System.cpp index a35465e8cfde1f84a5446e4bbfcb02fc5478b8f1..174c7d8e30b5604da6a5dc71acbcd7b51bf0197a 100644 --- a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.cpp +++ b/src/cpu/core/LBM/D3Q27System.cpp @@ -25,9 +25,9 @@ const real WEIGTH[] = { c8o27, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o54, c1o216, c1o216, c1o216, c1o216, c1o216, c1o216, c1o216, c1o216 }; -const int INVDIR[] = { DIR_000, INV_P00, INV_M00, INV_0P0, INV_0M0, INV_00P, INV_00M, - INV_PP0, INV_MM0, INV_PM0, INV_MP0, INV_P0P, INV_M0M, INV_P0M, INV_M0P, INV_0PP, INV_0MM, INV_0PM, INV_0MP, - INV_PPP, INV_MPP, INV_PMP, INV_MMP, INV_PPM, INV_MPM, INV_PMM, INV_MMM }; +const int INVDIR[] = { d000, iP00, iM00, i0P0, i0M0, i00P, i00M, + iPP0, iMM0, iPM0, iMP0, iP0P, iM0M, iP0M, iM0P, i0PP, i0MM, i0PM, i0MP, + iPPP, iMPP, iPMP, iMMP, iPPM, iMPM, iPMM, iMMM }; // index 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 // direction: E, W, N, S, T, B, NE, SW, SE, NW, TE, BW, BE, TW, TN, BS, BN, TS, TNE TNW TSE TSW BNE BNW BSE diff --git a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h b/src/cpu/core/LBM/D3Q27System.h similarity index 72% rename from src/cpu/VirtualFluidsCore/LBM/D3Q27System.h rename to src/cpu/core/LBM/D3Q27System.h index 2f5cbdc30ea8ae1368b59b6888a464700c1d8af5..0f284a2cbe30e8c181c6de8ea7ed589c3c35bf75 100644 --- a/src/cpu/VirtualFluidsCore/LBM/D3Q27System.h +++ b/src/cpu/core/LBM/D3Q27System.h @@ -131,60 +131,60 @@ extern const int EX3[ENDDIR + 1]; //static constexpr int BSE = 25; //static constexpr int BSW = 26; -//static constexpr int DIR_000 = 0; -//static constexpr int DIR_P00 = 1; -//static constexpr int DIR_M00 = 2; -//static constexpr int DIR_0P0 = 3; -//static constexpr int DIR_0M0 = 4; -//static constexpr int DIR_00P = 5; -//static constexpr int DIR_00M = 6; -//static constexpr int DIR_PP0 = 7; -//static constexpr int DIR_MM0 = 8; -//static constexpr int DIR_PM0 = 9; -//static constexpr int DIR_MP0 = 10; -//static constexpr int DIR_P0P = 11; -//static constexpr int DIR_M0M = 12; -//static constexpr int DIR_P0M = 13; -//static constexpr int DIR_M0P = 14; -//static constexpr int DIR_0PP = 15; -//static constexpr int DIR_0MM = 16; -//static constexpr int DIR_0PM = 17; -//static constexpr int DIR_0MP = 18; -//static constexpr int DIR_PPP = 19; -//static constexpr int DIR_MPP = 20; -//static constexpr int DIR_PMP = 21; -//static constexpr int DIR_MMP = 22; -//static constexpr int DIR_PPM = 23; -//static constexpr int DIR_MPM = 24; -//static constexpr int DIR_PMM = 25; -//static constexpr int DIR_MMM = 26; - -//static constexpr int INV_P00 = DIR_M00; -//static constexpr int INV_M00 = DIR_P00; -//static constexpr int INV_0P0 = DIR_0M0; -//static constexpr int INV_0M0 = DIR_0P0; -//static constexpr int INV_00P = DIR_00M; -//static constexpr int INV_00M = DIR_00P; -//static constexpr int INV_PP0 = DIR_MM0; -//static constexpr int INV_MM0 = DIR_PP0; -//static constexpr int INV_PM0 = DIR_MP0; -//static constexpr int INV_MP0 = DIR_PM0; -//static constexpr int INV_P0P = DIR_M0M; -//static constexpr int INV_M0M = DIR_P0P; -//static constexpr int INV_P0M = DIR_M0P; -//static constexpr int INV_M0P = DIR_P0M; -//static constexpr int INV_0PP = DIR_0MM; -//static constexpr int INV_0MM = DIR_0PP; -//static constexpr int INV_0PM = DIR_0MP; -//static constexpr int INV_0MP = DIR_0PM; -//static constexpr int INV_PPP = DIR_MMM; -//static constexpr int INV_MPP = DIR_PMM; -//static constexpr int INV_PMP = DIR_MPM; -//static constexpr int INV_MMP = DIR_PPM; -//static constexpr int INV_PPM = DIR_MMP; -//static constexpr int INV_MPM = DIR_PMP; -//static constexpr int INV_PMM = DIR_MPP; -//static constexpr int INV_MMM = DIR_PPP; +//static constexpr int d000 = 0; +//static constexpr int dP00 = 1; +//static constexpr int dM00 = 2; +//static constexpr int d0P0 = 3; +//static constexpr int d0M0 = 4; +//static constexpr int d00P = 5; +//static constexpr int d00M = 6; +//static constexpr int dPP0 = 7; +//static constexpr int dMM0 = 8; +//static constexpr int dPM0 = 9; +//static constexpr int dMP0 = 10; +//static constexpr int dP0P = 11; +//static constexpr int dM0M = 12; +//static constexpr int dP0M = 13; +//static constexpr int dM0P = 14; +//static constexpr int d0PP = 15; +//static constexpr int d0MM = 16; +//static constexpr int d0PM = 17; +//static constexpr int d0MP = 18; +//static constexpr int dPPP = 19; +//static constexpr int dMPP = 20; +//static constexpr int dPMP = 21; +//static constexpr int dMMP = 22; +//static constexpr int dPPM = 23; +//static constexpr int dMPM = 24; +//static constexpr int dPMM = 25; +//static constexpr int dMMM = 26; + +//static constexpr int iP00 = dM00; +//static constexpr int iM00 = dP00; +//static constexpr int i0P0 = d0M0; +//static constexpr int i0M0 = d0P0; +//static constexpr int i00P = d00M; +//static constexpr int i00M = d00P; +//static constexpr int iPP0 = dMM0; +//static constexpr int iMM0 = dPP0; +//static constexpr int iPM0 = dMP0; +//static constexpr int iMP0 = dPM0; +//static constexpr int iP0P = dM0M; +//static constexpr int iM0M = dP0P; +//static constexpr int iP0M = dM0P; +//static constexpr int iM0P = dP0M; +//static constexpr int i0PP = d0MM; +//static constexpr int i0MM = d0PP; +//static constexpr int i0PM = d0MP; +//static constexpr int i0MP = d0PM; +//static constexpr int iPPP = dMMM; +//static constexpr int iMPP = dPMM; +//static constexpr int iPMP = dMPM; +//static constexpr int iMMP = dPPM; +//static constexpr int iPPM = dMMP; +//static constexpr int iMPM = dPMP; +//static constexpr int iPMM = dMPP; +//static constexpr int iMMM = dPPP; extern const int INVDIR[ENDDIR + 1]; @@ -215,63 +215,90 @@ static const int ET_BNW = 11; static const int ET_TSW = 12; static const int ET_BNE = 12; +static const int ET_P00 = 0; +static const int ET_M00 = 0; +static const int ET_0P0 = 1; +static const int ET_0M0 = 1; +static const int ET_00P = 2; +static const int ET_00M = 2; +static const int ET_PP0 = 3; +static const int ET_MM0 = 3; +static const int ET_PM0 = 4; +static const int ET_MP0 = 4; +static const int ET_P0P = 5; +static const int ET_M0M = 5; +static const int ET_P0M = 6; +static const int ET_M0P = 6; +static const int ET_0PP = 7; +static const int ET_0MM = 7; +static const int ET_0PM = 8; +static const int ET_0MP = 8; +static const int ET_PPP = 9; +static const int ET_MMM = 9; +static const int ET_MPP = 10; +static const int ET_PMM = 10; +static const int ET_PMP = 11; +static const int ET_MPM = 11; +static const int ET_MMP = 12; +static const int ET_PPM = 12; + ////////////////////////////////////////////////////////////////////////// inline std::string getDirectionString(int direction) { using namespace vf::lbm::dir; switch (direction) { - case DIR_P00: + case dP00: return "E"; - case DIR_M00: + case dM00: return "W"; - case DIR_0P0: + case d0P0: return "N"; - case DIR_0M0: + case d0M0: return "S"; - case DIR_00P: + case d00P: return "T"; - case DIR_00M: + case d00M: return "B"; - case DIR_PP0: + case dPP0: return "NE"; - case DIR_MP0: + case dMP0: return "NW"; - case DIR_PM0: + case dPM0: return "SE"; - case DIR_MM0: + case dMM0: return "SW"; - case DIR_P0P: + case dP0P: return "TE"; - case DIR_M0P: + case dM0P: return "TW"; - case DIR_P0M: + case dP0M: return "BE"; - case DIR_M0M: + case dM0M: return "BW"; - case DIR_0PP: + case d0PP: return "TN"; - case DIR_0MP: + case d0MP: return "TS"; - case DIR_0PM: + case d0PM: return "BN"; - case DIR_0MM: + case d0MM: return "BS"; - case DIR_PPP: + case dPPP: return "TNE"; - case DIR_MPP: + case dMPP: return "TNW"; - case DIR_PMP: + case dPMP: return "TSE"; - case DIR_MMP: + case dMMP: return "TSW"; - case DIR_PPM: + case dPPM: return "BNE"; - case DIR_MPM: + case dMPM: return "BNW"; - case DIR_PMM: + case dPMM: return "BSE"; - case DIR_MMM: + case dMMM: return "BSW"; default: return "Cell3DSystem::getDrectionString(...) - unknown dir"; @@ -283,108 +310,108 @@ static inline void setNeighborCoordinatesForDirection(int &x1, int &x2, int &x3, using namespace vf::lbm::dir; switch (direction) { - case DIR_P00: + case dP00: x1++; break; - case DIR_0P0: + case d0P0: x2++; break; - case DIR_00P: + case d00P: x3++; break; - case DIR_M00: + case dM00: x1--; break; - case DIR_0M0: + case d0M0: x2--; break; - case DIR_00M: + case d00M: x3--; break; - case DIR_PP0: + case dPP0: x1++; x2++; break; - case DIR_MP0: + case dMP0: x1--; x2++; break; - case DIR_MM0: + case dMM0: x1--; x2--; break; - case DIR_PM0: + case dPM0: x1++; x2--; break; - case DIR_P0P: + case dP0P: x1++; x3++; break; - case DIR_M0M: + case dM0M: x1--; x3--; break; - case DIR_P0M: + case dP0M: x1++; x3--; break; - case DIR_M0P: + case dM0P: x1--; x3++; break; - case DIR_0PP: + case d0PP: x2++; x3++; break; - case DIR_0MM: + case d0MM: x2--; x3--; break; - case DIR_0PM: + case d0PM: x2++; x3--; break; - case DIR_0MP: + case d0MP: x2--; x3++; break; - case DIR_PPP: + case dPPP: x1++; x2++; x3++; break; - case DIR_MPP: + case dMPP: x1--; x2++; x3++; break; - case DIR_PMP: + case dPMP: x1++; x2--; x3++; break; - case DIR_MMP: + case dMMP: x1--; x2--; x3++; break; - case DIR_PPM: + case dPPM: x1++; x2++; x3--; break; - case DIR_MPM: + case dMPM: x1--; x2++; x3--; break; - case DIR_PMM: + case dPMM: x1++; x2--; x3--; break; - case DIR_MMM: + case dMMM: x1--; x2--; x3--; @@ -413,42 +440,42 @@ static void calcDensity(const real *const &f /*[27]*/, real &rho) { using namespace vf::lbm::dir; - rho = ((f[DIR_PPP] + f[DIR_MMM]) + (f[DIR_PMP] + f[DIR_MPM])) + ((f[DIR_PMM] + f[DIR_MPP]) + (f[DIR_MMP] + f[DIR_PPM])) + - (((f[DIR_PP0] + f[DIR_MM0]) + (f[DIR_PM0] + f[DIR_MP0])) + ((f[DIR_P0P] + f[DIR_M0M]) + (f[DIR_P0M] + f[DIR_M0P])) + - ((f[DIR_0PM] + f[DIR_0MP]) + (f[DIR_0PP] + f[DIR_0MM]))) + - ((f[DIR_P00] + f[DIR_M00]) + (f[DIR_0P0] + f[DIR_0M0]) + (f[DIR_00P] + f[DIR_00M])) + f[DIR_000]; + rho = ((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) + + (((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) + ((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) + + ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) + + ((f[dP00] + f[dM00]) + (f[d0P0] + f[d0M0]) + (f[d00P] + f[d00M])) + f[d000]; } /*=====================================================================*/ static void calcIncompVelocityX1(const real *const &f /*[27]*/, real &vx1) { using namespace vf::lbm::dir; - vx1 = ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_PMM] - f[DIR_MPP]) + (f[DIR_PPM] - f[DIR_MMP]))) + - (((f[DIR_P0M] - f[DIR_M0P]) + (f[DIR_P0P] - f[DIR_M0M])) + ((f[DIR_PM0] - f[DIR_MP0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_P00] - f[DIR_M00])); + vx1 = ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) + + (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00])); } /*=====================================================================*/ static void calcIncompVelocityX2(const real *const &f /*[27]*/, real &vx2) { using namespace vf::lbm::dir; - vx2 = ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_MPM] - f[DIR_PMP])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_PPM] - f[DIR_MMP]))) + - (((f[DIR_0PM] - f[DIR_0MP]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_MP0] - f[DIR_PM0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_0P0] - f[DIR_0M0])); + vx2 = ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) + + (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0])); } /*=====================================================================*/ static void calcIncompVelocityX3(const real *const &f /*[27]*/, real &vx3) { using namespace vf::lbm::dir; - vx3 = ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_MMP] - f[DIR_PPM]))) + - (((f[DIR_0MP] - f[DIR_0PM]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_M0P] - f[DIR_P0M]) + (f[DIR_P0P] - f[DIR_M0M]))) + (f[DIR_00P] - f[DIR_00M])); + vx3 = ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) + + (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M])); } /*=====================================================================*/ static real getCompVelocityX1(const real *const &f /*[27]*/) { using namespace vf::lbm::dir; - return ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_PMM] - f[DIR_MPP]) + (f[DIR_PPM] - f[DIR_MMP]))) + - (((f[DIR_P0M] - f[DIR_M0P]) + (f[DIR_P0P] - f[DIR_M0M])) + ((f[DIR_PM0] - f[DIR_MP0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_P00] - f[DIR_M00])) / + return ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) + + (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00])) / getDensity(f); } /*=====================================================================*/ @@ -456,8 +483,8 @@ static real getCompVelocityX2(const real *const &f /*[27]*/) { using namespace vf::lbm::dir; - return ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_MPM] - f[DIR_PMP])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_PPM] - f[DIR_MMP]))) + - (((f[DIR_0PM] - f[DIR_0MP]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_MP0] - f[DIR_PM0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_0P0] - f[DIR_0M0])) / + return ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) + + (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0])) / getDensity(f); } /*=====================================================================*/ @@ -465,8 +492,8 @@ static real getCompVelocityX3(const real *const &f /*[27]*/) { using namespace vf::lbm::dir; - return ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_MMP] - f[DIR_PPM]))) + - (((f[DIR_0MP] - f[DIR_0PM]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_M0P] - f[DIR_P0M]) + (f[DIR_P0P] - f[DIR_M0M]))) + (f[DIR_00P] - f[DIR_00M])) / + return ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) + + (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M])) / getDensity(f); } /*=====================================================================*/ @@ -474,8 +501,8 @@ static void calcCompVelocityX1(const real *const &f /*[27]*/, real &vx1) { using namespace vf::lbm::dir; - vx1 = ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_PMM] - f[DIR_MPP]) + (f[DIR_PPM] - f[DIR_MMP]))) + - (((f[DIR_P0M] - f[DIR_M0P]) + (f[DIR_P0P] - f[DIR_M0M])) + ((f[DIR_PM0] - f[DIR_MP0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_P00] - f[DIR_M00])) / + vx1 = ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) + + (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00])) / getDensity(f); } /*=====================================================================*/ @@ -483,8 +510,8 @@ static void calcCompVelocityX2(const real *const &f /*[27]*/, real &vx2) { using namespace vf::lbm::dir; - vx2 = ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_MPM] - f[DIR_PMP])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_PPM] - f[DIR_MMP]))) + - (((f[DIR_0PM] - f[DIR_0MP]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_MP0] - f[DIR_PM0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_0P0] - f[DIR_0M0])) / + vx2 = ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) + + (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0])) / getDensity(f); } /*=====================================================================*/ @@ -492,8 +519,8 @@ static void calcCompVelocityX3(const real *const &f /*[27]*/, real &vx3) { using namespace vf::lbm::dir; - vx3 = ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_MMP] - f[DIR_PPM]))) + - (((f[DIR_0MP] - f[DIR_0PM]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_M0P] - f[DIR_P0M]) + (f[DIR_P0P] - f[DIR_M0M]))) + (f[DIR_00P] - f[DIR_00M])) / + vx3 = ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) + + (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M])) / getDensity(f); } /*=====================================================================*/ @@ -529,85 +556,85 @@ static real getCompFeqForDirection(const int &direction, const real &drho, const real cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); real rho = drho + vf::basics::constant::c1o1; switch (direction) { - case DIR_000: + case d000: return REAL_CAST(vf::basics::constant::c8o27 * (drho + rho * (-cu_sq))); - case DIR_P00: + case dP00: return REAL_CAST(vf::basics::constant::c2o27 * (drho + rho * (3.0 * (vx1) +vf::basics::constant::c9o2 * (vx1) * (vx1)-cu_sq))); - case DIR_M00: + case dM00: return REAL_CAST(vf::basics::constant::c2o27 * (drho + rho * (3.0 * (-vx1) + vf::basics::constant::c9o2 * (-vx1) * (-vx1) - cu_sq))); - case DIR_0P0: + case d0P0: return REAL_CAST(vf::basics::constant::c2o27 * (drho + rho * (3.0 * (vx2) +vf::basics::constant::c9o2 * (vx2) * (vx2)-cu_sq))); - case DIR_0M0: + case d0M0: return REAL_CAST(vf::basics::constant::c2o27 * (drho + rho * (3.0 * (-vx2) + vf::basics::constant::c9o2 * (-vx2) * (-vx2) - cu_sq))); - case DIR_00P: + case d00P: return REAL_CAST(vf::basics::constant::c2o27 * (drho + rho * (3.0 * (vx3) + vf::basics::constant::c9o2 * (vx3) * (vx3)-cu_sq))); - case DIR_00M: + case d00M: return REAL_CAST(vf::basics::constant::c2o27 * (drho + rho * (3.0 * (-vx3) + vf::basics::constant::c9o2 * (-vx3) * (-vx3) - cu_sq))); - case DIR_PP0: + case dPP0: return REAL_CAST(vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 + vx2) + vf::basics::constant::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq))); - case DIR_MM0: + case dMM0: return REAL_CAST(vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 - vx2) + vf::basics::constant::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq))); - case DIR_PM0: + case dPM0: return REAL_CAST(vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 - vx2) + vf::basics::constant::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq))); - case DIR_MP0: + case dMP0: return REAL_CAST(vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 + vx2) + vf::basics::constant::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq))); - case DIR_P0P: + case dP0P: return REAL_CAST(vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 + vx3) + vf::basics::constant::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq))); - case DIR_M0M: + case dM0M: return REAL_CAST(vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 - vx3) + vf::basics::constant::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq))); - case DIR_P0M: + case dP0M: return REAL_CAST(vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 - vx3) + vf::basics::constant::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq))); - case DIR_M0P: + case dM0P: return REAL_CAST(vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 + vx3) + vf::basics::constant::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq))); - case DIR_0PP: + case d0PP: return REAL_CAST(vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx2 + vx3) + vf::basics::constant::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq))); - case DIR_0MM: + case d0MM: return REAL_CAST(vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx2 - vx3) + vf::basics::constant::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq))); - case DIR_0PM: + case d0PM: return REAL_CAST(vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx2 - vx3) + vf::basics::constant::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq))); - case DIR_0MP: + case d0MP: return REAL_CAST(vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx2 + vx3) + vf::basics::constant::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq))); - case DIR_PPP: + case dPPP: return REAL_CAST(vf::basics::constant::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 + vx3) + vf::basics::constant::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq))); - case DIR_MMM: + case dMMM: return REAL_CAST(vf::basics::constant::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 - vx3) + vf::basics::constant::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq))); - case DIR_PPM: + case dPPM: return REAL_CAST(vf::basics::constant::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 - vx3) + vf::basics::constant::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq))); - case DIR_MMP: + case dMMP: return REAL_CAST(vf::basics::constant::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 + vx3) + vf::basics::constant::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq))); - case DIR_PMP: + case dPMP: return REAL_CAST(vf::basics::constant::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 + vx3) + vf::basics::constant::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq))); - case DIR_MPM: + case dMPM: return REAL_CAST(vf::basics::constant::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 - vx3) + vf::basics::constant::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq))); - case DIR_PMM: + case dPMM: return REAL_CAST(vf::basics::constant::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 - vx3) + vf::basics::constant::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq))); - case DIR_MPP: + case dMPP: return REAL_CAST(vf::basics::constant::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 + vx3) + vf::basics::constant::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq))); @@ -624,43 +651,43 @@ static void calcCompFeq(real *const &feq /*[27]*/, const real &drho, const real real cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); real rho = drho + vf::basics::constant::c1o1; - feq[DIR_000] = vf::basics::constant::c8o27 * (drho + rho * (-cu_sq)); - feq[DIR_P00] = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (vx1) + vf::basics::constant::c9o2 * (vx1) * (vx1)-cu_sq)); - feq[DIR_M00] = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (-vx1) + vf::basics::constant::c9o2 * (-vx1) * (-vx1) - cu_sq)); - feq[DIR_0P0] = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (vx2) + vf::basics::constant::c9o2 * (vx2) * (vx2)-cu_sq)); - feq[DIR_0M0] = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (-vx2) + vf::basics::constant::c9o2 * (-vx2) * (-vx2) - cu_sq)); - feq[DIR_00P] = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (vx3) + vf::basics::constant::c9o2 * (vx3) * (vx3)-cu_sq)); - feq[DIR_00M] = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (-vx3) + vf::basics::constant::c9o2 * (-vx3) * (-vx3) - cu_sq)); - feq[DIR_PP0] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 + vx2) + vf::basics::constant::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)); - feq[DIR_MM0] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 - vx2) + vf::basics::constant::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)); - feq[DIR_PM0] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 - vx2) + vf::basics::constant::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)); - feq[DIR_MP0] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 + vx2) + vf::basics::constant::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)); - feq[DIR_P0P] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 + vx3) + vf::basics::constant::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)); - feq[DIR_M0M] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 - vx3) + vf::basics::constant::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)); - feq[DIR_P0M] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 - vx3) + vf::basics::constant::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)); - feq[DIR_M0P] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 + vx3) + vf::basics::constant::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)); - feq[DIR_0PP] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx2 + vx3) + vf::basics::constant::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)); - feq[DIR_0MM] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx2 - vx3) + vf::basics::constant::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)); - feq[DIR_0PM] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx2 - vx3) + vf::basics::constant::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)); - feq[DIR_0MP] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx2 + vx3) + vf::basics::constant::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)); - feq[DIR_PPP] = vf::basics::constant::c1o216 * + feq[d000] = vf::basics::constant::c8o27 * (drho + rho * (-cu_sq)); + feq[dP00] = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (vx1) + vf::basics::constant::c9o2 * (vx1) * (vx1)-cu_sq)); + feq[dM00] = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (-vx1) + vf::basics::constant::c9o2 * (-vx1) * (-vx1) - cu_sq)); + feq[d0P0] = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (vx2) + vf::basics::constant::c9o2 * (vx2) * (vx2)-cu_sq)); + feq[d0M0] = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (-vx2) + vf::basics::constant::c9o2 * (-vx2) * (-vx2) - cu_sq)); + feq[d00P] = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (vx3) + vf::basics::constant::c9o2 * (vx3) * (vx3)-cu_sq)); + feq[d00M] = vf::basics::constant::c2o27 * (drho + rho * (3.0 * (-vx3) + vf::basics::constant::c9o2 * (-vx3) * (-vx3) - cu_sq)); + feq[dPP0] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 + vx2) + vf::basics::constant::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)); + feq[dMM0] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 - vx2) + vf::basics::constant::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)); + feq[dPM0] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 - vx2) + vf::basics::constant::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)); + feq[dMP0] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 + vx2) + vf::basics::constant::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)); + feq[dP0P] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 + vx3) + vf::basics::constant::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)); + feq[dM0M] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 - vx3) + vf::basics::constant::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)); + feq[dP0M] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx1 - vx3) + vf::basics::constant::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)); + feq[dM0P] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx1 + vx3) + vf::basics::constant::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)); + feq[d0PP] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx2 + vx3) + vf::basics::constant::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)); + feq[d0MM] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx2 - vx3) + vf::basics::constant::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)); + feq[d0PM] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (vx2 - vx3) + vf::basics::constant::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)); + feq[d0MP] = vf::basics::constant::c1o54 * (drho + rho * (3.0 * (-vx2 + vx3) + vf::basics::constant::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)); + feq[dPPP] = vf::basics::constant::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 + vx3) + vf::basics::constant::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)); - feq[DIR_MMM] = + feq[dMMM] = vf::basics::constant::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 - vx3) + vf::basics::constant::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)); - feq[DIR_PPM] = vf::basics::constant::c1o216 * + feq[dPPM] = vf::basics::constant::c1o216 * (drho + rho * (3.0 * (vx1 + vx2 - vx3) + vf::basics::constant::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)); - feq[DIR_MMP] = + feq[dMMP] = vf::basics::constant::c1o216 * (drho + rho * (3.0 * (-vx1 - vx2 + vx3) + vf::basics::constant::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)); - feq[DIR_PMP] = vf::basics::constant::c1o216 * + feq[dPMP] = vf::basics::constant::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 + vx3) + vf::basics::constant::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)); - feq[DIR_MPM] = + feq[dMPM] = vf::basics::constant::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 - vx3) + vf::basics::constant::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)); - feq[DIR_PMM] = vf::basics::constant::c1o216 * + feq[dPMM] = vf::basics::constant::c1o216 * (drho + rho * (3.0 * (vx1 - vx2 - vx3) + vf::basics::constant::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)); - feq[DIR_MPP] = + feq[dMPP] = vf::basics::constant::c1o216 * (drho + rho * (3.0 * (-vx1 + vx2 + vx3) + vf::basics::constant::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)); } @@ -673,78 +700,78 @@ static real getIncompFeqForDirection(const int &direction, const real &drho, con real cu_sq = 1.5f * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); switch (direction) { - case DIR_000: + case d000: return REAL_CAST(vf::basics::constant::c8o27 * (drho - cu_sq)); - case DIR_P00: + case dP00: return REAL_CAST(vf::basics::constant::c2o27 * (drho + 3.0 * (vx1) + vf::basics::constant::c9o2 * (vx1) * (vx1)-cu_sq)); - case DIR_M00: + case dM00: return REAL_CAST(vf::basics::constant::c2o27 * (drho + 3.0 * (-vx1) + vf::basics::constant::c9o2 * (-vx1) * (-vx1) - cu_sq)); - case DIR_0P0: + case d0P0: return REAL_CAST(vf::basics::constant::c2o27 * (drho + 3.0 * (vx2) + vf::basics::constant::c9o2 * (vx2) * (vx2)-cu_sq)); - case DIR_0M0: + case d0M0: return REAL_CAST(vf::basics::constant::c2o27 * (drho + 3.0 * (-vx2) + vf::basics::constant::c9o2 * (-vx2) * (-vx2) - cu_sq)); - case DIR_00P: + case d00P: return REAL_CAST(vf::basics::constant::c2o27 * (drho + 3.0 * (vx3) + vf::basics::constant::c9o2 * (vx3) * (vx3)-cu_sq)); - case DIR_00M: + case d00M: return REAL_CAST(vf::basics::constant::c2o27 * (drho + 3.0 * (-vx3) + vf::basics::constant::c9o2 * (-vx3) * (-vx3) - cu_sq)); - case DIR_PP0: + case dPP0: return REAL_CAST(vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 + vx2) + vf::basics::constant::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)); - case DIR_MM0: + case dMM0: return REAL_CAST(vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 - vx2) + vf::basics::constant::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)); - case DIR_PM0: + case dPM0: return REAL_CAST(vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 - vx2) + vf::basics::constant::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)); - case DIR_MP0: + case dMP0: return REAL_CAST(vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 + vx2) + vf::basics::constant::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)); - case DIR_P0P: + case dP0P: return REAL_CAST(vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 + vx3) + vf::basics::constant::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)); - case DIR_M0M: + case dM0M: return REAL_CAST(vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 - vx3) + vf::basics::constant::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)); - case DIR_P0M: + case dP0M: return REAL_CAST(vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 - vx3) + vf::basics::constant::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)); - case DIR_M0P: + case dM0P: return REAL_CAST(vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 + vx3) + vf::basics::constant::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)); - case DIR_0PP: + case d0PP: return REAL_CAST(vf::basics::constant::c1o54 * (drho + 3.0 * (vx2 + vx3) + vf::basics::constant::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)); - case DIR_0MM: + case d0MM: return REAL_CAST(vf::basics::constant::c1o54 * (drho + 3.0 * (-vx2 - vx3) + vf::basics::constant::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)); - case DIR_0PM: + case d0PM: return REAL_CAST(vf::basics::constant::c1o54 * (drho + 3.0 * (vx2 - vx3) + vf::basics::constant::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)); - case DIR_0MP: + case d0MP: return REAL_CAST(vf::basics::constant::c1o54 * (drho + 3.0 * (-vx2 + vx3) + vf::basics::constant::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)); - case DIR_PPP: + case dPPP: return REAL_CAST(vf::basics::constant::c1o216 * (drho + 3.0 * (vx1 + vx2 + vx3) + vf::basics::constant::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)); - case DIR_MMM: + case dMMM: return REAL_CAST(vf::basics::constant::c1o216 * (drho + 3.0 * (-vx1 - vx2 - vx3) + vf::basics::constant::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)); - case DIR_PPM: + case dPPM: return REAL_CAST(vf::basics::constant::c1o216 * (drho + 3.0 * (vx1 + vx2 - vx3) + vf::basics::constant::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)); - case DIR_MMP: + case dMMP: return REAL_CAST(vf::basics::constant::c1o216 * (drho + 3.0 * (-vx1 - vx2 + vx3) + vf::basics::constant::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)); - case DIR_PMP: + case dPMP: return REAL_CAST(vf::basics::constant::c1o216 * (drho + 3.0 * (vx1 - vx2 + vx3) + vf::basics::constant::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)); - case DIR_MPM: + case dMPM: return REAL_CAST(vf::basics::constant::c1o216 * (drho + 3.0 * (-vx1 + vx2 - vx3) + vf::basics::constant::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)); - case DIR_PMM: + case dPMM: return REAL_CAST(vf::basics::constant::c1o216 * (drho + 3.0 * (vx1 - vx2 - vx3) + vf::basics::constant::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)); - case DIR_MPP: + case dMPP: return REAL_CAST(vf::basics::constant::c1o216 * (drho + 3.0 * (-vx1 + vx2 + vx3) + vf::basics::constant::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)); default: @@ -759,40 +786,40 @@ static void calcIncompFeq(real *const &feq /*[27]*/, const real &drho, const rea real cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); - feq[DIR_000] = vf::basics::constant::c8o27 * (drho - cu_sq); - feq[DIR_P00] = vf::basics::constant::c2o27 * (drho + 3.0 * (vx1) + vf::basics::constant::c9o2 * (vx1) * (vx1)-cu_sq); - feq[DIR_M00] = vf::basics::constant::c2o27 * (drho + 3.0 * (-vx1) + vf::basics::constant::c9o2 * (-vx1) * (-vx1) - cu_sq); - feq[DIR_0P0] = vf::basics::constant::c2o27 * (drho + 3.0 * (vx2) + vf::basics::constant::c9o2 * (vx2) * (vx2)-cu_sq); - feq[DIR_0M0] = vf::basics::constant::c2o27 * (drho + 3.0 * (-vx2) + vf::basics::constant::c9o2 * (-vx2) * (-vx2) - cu_sq); - feq[DIR_00P] = vf::basics::constant::c2o27 * (drho + 3.0 * (vx3) + vf::basics::constant::c9o2 * (vx3) * (vx3)-cu_sq); - feq[DIR_00M] = vf::basics::constant::c2o27 * (drho + 3.0 * (-vx3) + vf::basics::constant::c9o2 * (-vx3) * (-vx3) - cu_sq); - feq[DIR_PP0] = vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 + vx2) + vf::basics::constant::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq); - feq[DIR_MM0] = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 - vx2) + vf::basics::constant::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq); - feq[DIR_PM0] = vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 - vx2) + vf::basics::constant::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq); - feq[DIR_MP0] = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 + vx2) + vf::basics::constant::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq); - feq[DIR_P0P] = vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 + vx3) + vf::basics::constant::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq); - feq[DIR_M0M] = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 - vx3) + vf::basics::constant::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq); - feq[DIR_P0M] = vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 - vx3) + vf::basics::constant::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq); - feq[DIR_M0P] = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 + vx3) + vf::basics::constant::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq); - feq[DIR_0PP] = vf::basics::constant::c1o54 * (drho + 3.0 * (vx2 + vx3) + vf::basics::constant::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq); - feq[DIR_0MM] = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx2 - vx3) + vf::basics::constant::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq); - feq[DIR_0PM] = vf::basics::constant::c1o54 * (drho + 3.0 * (vx2 - vx3) + vf::basics::constant::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq); - feq[DIR_0MP] = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx2 + vx3) + vf::basics::constant::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq); - feq[DIR_PPP] = vf::basics::constant::c1o216 * + feq[d000] = vf::basics::constant::c8o27 * (drho - cu_sq); + feq[dP00] = vf::basics::constant::c2o27 * (drho + 3.0 * (vx1) + vf::basics::constant::c9o2 * (vx1) * (vx1)-cu_sq); + feq[dM00] = vf::basics::constant::c2o27 * (drho + 3.0 * (-vx1) + vf::basics::constant::c9o2 * (-vx1) * (-vx1) - cu_sq); + feq[d0P0] = vf::basics::constant::c2o27 * (drho + 3.0 * (vx2) + vf::basics::constant::c9o2 * (vx2) * (vx2)-cu_sq); + feq[d0M0] = vf::basics::constant::c2o27 * (drho + 3.0 * (-vx2) + vf::basics::constant::c9o2 * (-vx2) * (-vx2) - cu_sq); + feq[d00P] = vf::basics::constant::c2o27 * (drho + 3.0 * (vx3) + vf::basics::constant::c9o2 * (vx3) * (vx3)-cu_sq); + feq[d00M] = vf::basics::constant::c2o27 * (drho + 3.0 * (-vx3) + vf::basics::constant::c9o2 * (-vx3) * (-vx3) - cu_sq); + feq[dPP0] = vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 + vx2) + vf::basics::constant::c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq); + feq[dMM0] = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 - vx2) + vf::basics::constant::c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq); + feq[dPM0] = vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 - vx2) + vf::basics::constant::c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq); + feq[dMP0] = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 + vx2) + vf::basics::constant::c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq); + feq[dP0P] = vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 + vx3) + vf::basics::constant::c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq); + feq[dM0M] = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 - vx3) + vf::basics::constant::c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq); + feq[dP0M] = vf::basics::constant::c1o54 * (drho + 3.0 * (vx1 - vx3) + vf::basics::constant::c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq); + feq[dM0P] = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx1 + vx3) + vf::basics::constant::c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq); + feq[d0PP] = vf::basics::constant::c1o54 * (drho + 3.0 * (vx2 + vx3) + vf::basics::constant::c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq); + feq[d0MM] = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx2 - vx3) + vf::basics::constant::c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq); + feq[d0PM] = vf::basics::constant::c1o54 * (drho + 3.0 * (vx2 - vx3) + vf::basics::constant::c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq); + feq[d0MP] = vf::basics::constant::c1o54 * (drho + 3.0 * (-vx2 + vx3) + vf::basics::constant::c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq); + feq[dPPP] = vf::basics::constant::c1o216 * (drho + 3.0 * (vx1 + vx2 + vx3) + vf::basics::constant::c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq); - feq[DIR_MMM] = vf::basics::constant::c1o216 * + feq[dMMM] = vf::basics::constant::c1o216 * (drho + 3.0 * (-vx1 - vx2 - vx3) + vf::basics::constant::c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq); - feq[DIR_PPM] = vf::basics::constant::c1o216 * + feq[dPPM] = vf::basics::constant::c1o216 * (drho + 3.0 * (vx1 + vx2 - vx3) + vf::basics::constant::c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq); - feq[DIR_MMP] = vf::basics::constant::c1o216 * + feq[dMMP] = vf::basics::constant::c1o216 * (drho + 3.0 * (-vx1 - vx2 + vx3) + vf::basics::constant::c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq); - feq[DIR_PMP] = vf::basics::constant::c1o216 * + feq[dPMP] = vf::basics::constant::c1o216 * (drho + 3.0 * (vx1 - vx2 + vx3) + vf::basics::constant::c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq); - feq[DIR_MPM] = vf::basics::constant::c1o216 * + feq[dMPM] = vf::basics::constant::c1o216 * (drho + 3.0 * (-vx1 + vx2 - vx3) + vf::basics::constant::c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq); - feq[DIR_PMM] = vf::basics::constant::c1o216 * + feq[dPMM] = vf::basics::constant::c1o216 * (drho + 3.0 * (vx1 - vx2 - vx3) + vf::basics::constant::c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq); - feq[DIR_MPP] = vf::basics::constant::c1o216 * + feq[dMPP] = vf::basics::constant::c1o216 * (drho + 3.0 * (-vx1 + vx2 + vx3) + vf::basics::constant::c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq); } ////////////////////////////////////////////////////////////////////////// @@ -802,57 +829,57 @@ static inline real getBoundaryVelocityForDirection(const int &direction, const r using namespace vf::lbm::dir; switch (direction) { - case DIR_P00: + case dP00: return (real)(vf::basics::constant::c4o9 * (+bcVelocityX1)); - case DIR_M00: + case dM00: return (real)(vf::basics::constant::c4o9 * (-bcVelocityX1)); - case DIR_0P0: + case d0P0: return (real)(vf::basics::constant::c4o9 * (+bcVelocityX2)); - case DIR_0M0: + case d0M0: return (real)(vf::basics::constant::c4o9 * (-bcVelocityX2)); - case DIR_00P: + case d00P: return (real)(vf::basics::constant::c4o9 * (+bcVelocityX3)); - case DIR_00M: + case d00M: return (real)(vf::basics::constant::c4o9 * (-bcVelocityX3)); - case DIR_PP0: + case dPP0: return (real)(vf::basics::constant::c1o9 * (+bcVelocityX1 + bcVelocityX2)); - case DIR_MM0: + case dMM0: return (real)(vf::basics::constant::c1o9 * (-bcVelocityX1 - bcVelocityX2)); - case DIR_PM0: + case dPM0: return (real)(vf::basics::constant::c1o9 * (+bcVelocityX1 - bcVelocityX2)); - case DIR_MP0: + case dMP0: return (real)(vf::basics::constant::c1o9 * (-bcVelocityX1 + bcVelocityX2)); - case DIR_P0P: + case dP0P: return (real)(vf::basics::constant::c1o9 * (+bcVelocityX1 + bcVelocityX3)); - case DIR_M0M: + case dM0M: return (real)(vf::basics::constant::c1o9 * (-bcVelocityX1 - bcVelocityX3)); - case DIR_P0M: + case dP0M: return (real)(vf::basics::constant::c1o9 * (+bcVelocityX1 - bcVelocityX3)); - case DIR_M0P: + case dM0P: return (real)(vf::basics::constant::c1o9 * (-bcVelocityX1 + bcVelocityX3)); - case DIR_0PP: + case d0PP: return (real)(vf::basics::constant::c1o9 * (+bcVelocityX2 + bcVelocityX3)); - case DIR_0MM: + case d0MM: return (real)(vf::basics::constant::c1o9 * (-bcVelocityX2 - bcVelocityX3)); - case DIR_0PM: + case d0PM: return (real)(vf::basics::constant::c1o9 * (+bcVelocityX2 - bcVelocityX3)); - case DIR_0MP: + case d0MP: return (real)(vf::basics::constant::c1o9 * (-bcVelocityX2 + bcVelocityX3)); - case DIR_PPP: + case dPPP: return (real)(vf::basics::constant::c1o36 * (+bcVelocityX1 + bcVelocityX2 + bcVelocityX3)); - case DIR_MMM: + case dMMM: return (real)(vf::basics::constant::c1o36 * (-bcVelocityX1 - bcVelocityX2 - bcVelocityX3)); - case DIR_PPM: + case dPPM: return (real)(vf::basics::constant::c1o36 * (+bcVelocityX1 + bcVelocityX2 - bcVelocityX3)); - case DIR_MMP: + case dMMP: return (real)(vf::basics::constant::c1o36 * (-bcVelocityX1 - bcVelocityX2 + bcVelocityX3)); - case DIR_PMP: + case dPMP: return (real)(vf::basics::constant::c1o36 * (+bcVelocityX1 - bcVelocityX2 + bcVelocityX3)); - case DIR_MPM: + case dMPM: return (real)(vf::basics::constant::c1o36 * (-bcVelocityX1 + bcVelocityX2 - bcVelocityX3)); - case DIR_PMM: + case dPMM: return (real)(vf::basics::constant::c1o36 * (+bcVelocityX1 - bcVelocityX2 - bcVelocityX3)); - case DIR_MPP: + case dMPP: return (real)(vf::basics::constant::c1o36 * (-bcVelocityX1 + bcVelocityX2 + bcVelocityX3)); default: throw UbException(UB_EXARGS, "unknown direction"); @@ -910,15 +937,15 @@ static inline void calcDistanceToNeighbors(std::vector<real> &distNeigh, const r { using namespace vf::lbm::dir; - // distNeigh.resize(FENDDIR+1, UbMath::sqrt2*deltaX1); + // distNeigh.resize(FENDDIR+1, UbMath::cSqrt2*deltaX1); - distNeigh[DIR_P00] = distNeigh[DIR_M00] = distNeigh[DIR_0P0] = deltaX1; - distNeigh[DIR_0M0] = distNeigh[DIR_00P] = distNeigh[DIR_00M] = deltaX1; - distNeigh[DIR_PP0] = distNeigh[DIR_MP0] = distNeigh[DIR_MM0] = distNeigh[DIR_PM0] = vf::basics::constant::sqrt2 * deltaX1; - distNeigh[DIR_P0P] = distNeigh[DIR_0PP] = distNeigh[DIR_M0P] = distNeigh[DIR_0MP] = vf::basics::constant::sqrt2 * deltaX1; - distNeigh[DIR_P0M] = distNeigh[DIR_0PM] = distNeigh[DIR_M0M] = distNeigh[DIR_0MM] = vf::basics::constant::sqrt2 * deltaX1; - distNeigh[DIR_PPP] = distNeigh[DIR_MPP] = distNeigh[DIR_PMP] = distNeigh[DIR_MMP] = vf::basics::constant::sqrt3 * deltaX1; - distNeigh[DIR_PPM] = distNeigh[DIR_MPM] = distNeigh[DIR_PMM] = distNeigh[DIR_MMM] = vf::basics::constant::sqrt3 * deltaX1; + distNeigh[dP00] = distNeigh[dM00] = distNeigh[d0P0] = deltaX1; + distNeigh[d0M0] = distNeigh[d00P] = distNeigh[d00M] = deltaX1; + distNeigh[dPP0] = distNeigh[dMP0] = distNeigh[dMM0] = distNeigh[dPM0] = vf::basics::constant::cSqrt2 * deltaX1; + distNeigh[dP0P] = distNeigh[d0PP] = distNeigh[dM0P] = distNeigh[d0MP] = vf::basics::constant::cSqrt2 * deltaX1; + distNeigh[dP0M] = distNeigh[d0PM] = distNeigh[dM0M] = distNeigh[d0MM] = vf::basics::constant::cSqrt2 * deltaX1; + distNeigh[dPPP] = distNeigh[dMPP] = distNeigh[dPMP] = distNeigh[dMMP] = vf::basics::constant::cSqrt3 * deltaX1; + distNeigh[dPPM] = distNeigh[dMPM] = distNeigh[dPMM] = distNeigh[dMMM] = vf::basics::constant::cSqrt3 * deltaX1; } ////////////////////////////////////////////////////////////////////////// static inline void calcDistanceToNeighbors(std::vector<real> &distNeigh, const real &deltaX1, const real &deltaX2, @@ -926,16 +953,16 @@ static inline void calcDistanceToNeighbors(std::vector<real> &distNeigh, const r { using namespace vf::lbm::dir; - // distNeigh.resize(FENDDIR+1, UbMath::sqrt2*deltaX1); - distNeigh[DIR_P00] = distNeigh[DIR_M00] = deltaX1; - distNeigh[DIR_0P0] = distNeigh[DIR_0M0] = deltaX2; - distNeigh[DIR_00P] = distNeigh[DIR_00M] = deltaX3; - distNeigh[DIR_PP0] = distNeigh[DIR_MP0] = distNeigh[DIR_MM0] = distNeigh[DIR_PM0] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2); - distNeigh[DIR_P0P] = distNeigh[DIR_0PP] = distNeigh[DIR_M0P] = distNeigh[DIR_0MP] = sqrt(deltaX1 * deltaX1 + deltaX3 * deltaX3); - distNeigh[DIR_P0M] = distNeigh[DIR_0PM] = distNeigh[DIR_M0M] = distNeigh[DIR_0MM] = sqrt(deltaX2 * deltaX2 + deltaX3 * deltaX3); - distNeigh[DIR_PPP] = distNeigh[DIR_MPP] = distNeigh[DIR_PMP] = distNeigh[DIR_MMP] = + // distNeigh.resize(FENDDIR+1, UbMath::cSqrt2*deltaX1); + distNeigh[dP00] = distNeigh[dM00] = deltaX1; + distNeigh[d0P0] = distNeigh[d0M0] = deltaX2; + distNeigh[d00P] = distNeigh[d00M] = deltaX3; + distNeigh[dPP0] = distNeigh[dMP0] = distNeigh[dMM0] = distNeigh[dPM0] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2); + distNeigh[dP0P] = distNeigh[d0PP] = distNeigh[dM0P] = distNeigh[d0MP] = sqrt(deltaX1 * deltaX1 + deltaX3 * deltaX3); + distNeigh[dP0M] = distNeigh[d0PM] = distNeigh[dM0M] = distNeigh[d0MM] = sqrt(deltaX2 * deltaX2 + deltaX3 * deltaX3); + distNeigh[dPPP] = distNeigh[dMPP] = distNeigh[dPMP] = distNeigh[dMMP] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2 + deltaX3 * deltaX3); - distNeigh[DIR_PPM] = distNeigh[DIR_MPM] = distNeigh[DIR_PMM] = distNeigh[DIR_MMM] = + distNeigh[dPPM] = distNeigh[dMPM] = distNeigh[dPMM] = distNeigh[dMMM] = sqrt(deltaX1 * deltaX1 + deltaX2 * deltaX2 + deltaX3 * deltaX3); } ////////////////////////////////////////////////////////////////////////// @@ -944,109 +971,109 @@ static inline void initRayVectors(real *const &rayX1, real *const &rayX2, real * using namespace vf::lbm::dir; int fdir; - real c1oS2 = vf::basics::constant::one_over_sqrt2; - real c1oS3 = vf::basics::constant::one_over_sqrt3; - fdir = DIR_P00; + real c1oS2 = vf::basics::constant::c1oSqrt2; + real c1oS3 = vf::basics::constant::c1oSqrt3; + fdir = dP00; rayX1[fdir] = 1.0; rayX2[fdir] = 0.0; rayX3[fdir] = 0.0; - fdir = DIR_M00; + fdir = dM00; rayX1[fdir] = -1.0; rayX2[fdir] = 0.0; rayX3[fdir] = 0.0; - fdir = DIR_0P0; + fdir = d0P0; rayX1[fdir] = 0.0; rayX2[fdir] = 1.0; rayX3[fdir] = 0.0; - fdir = DIR_0M0; + fdir = d0M0; rayX1[fdir] = 0.0; rayX2[fdir] = -1.0; rayX3[fdir] = 0.0; - fdir = DIR_00P; + fdir = d00P; rayX1[fdir] = 0.0; rayX2[fdir] = 0.0; rayX3[fdir] = 1.0; - fdir = DIR_00M; + fdir = d00M; rayX1[fdir] = 0.0; rayX2[fdir] = 0.0; rayX3[fdir] = -1.0; - fdir = DIR_PP0; + fdir = dPP0; rayX1[fdir] = c1oS2; rayX2[fdir] = c1oS2; rayX3[fdir] = 0.0; - fdir = DIR_MM0; + fdir = dMM0; rayX1[fdir] = -c1oS2; rayX2[fdir] = -c1oS2; rayX3[fdir] = 0.0; - fdir = DIR_PM0; + fdir = dPM0; rayX1[fdir] = c1oS2; rayX2[fdir] = -c1oS2; rayX3[fdir] = 0.0; - fdir = DIR_MP0; + fdir = dMP0; rayX1[fdir] = -c1oS2; rayX2[fdir] = c1oS2; rayX3[fdir] = 0.0; - fdir = DIR_P0P; + fdir = dP0P; rayX1[fdir] = c1oS2; rayX2[fdir] = 0.0; rayX3[fdir] = c1oS2; - fdir = DIR_M0M; + fdir = dM0M; rayX1[fdir] = -c1oS2; rayX2[fdir] = 0.0; rayX3[fdir] = -c1oS2; - fdir = DIR_P0M; + fdir = dP0M; rayX1[fdir] = c1oS2; rayX2[fdir] = 0.0; rayX3[fdir] = -c1oS2; - fdir = DIR_M0P; + fdir = dM0P; rayX1[fdir] = -c1oS2; rayX2[fdir] = 0.0; rayX3[fdir] = c1oS2; - fdir = DIR_0PP; + fdir = d0PP; rayX1[fdir] = 0.0; rayX2[fdir] = c1oS2; rayX3[fdir] = c1oS2; - fdir = DIR_0MM; + fdir = d0MM; rayX1[fdir] = 0.0; rayX2[fdir] = -c1oS2; rayX3[fdir] = -c1oS2; - fdir = DIR_0PM; + fdir = d0PM; rayX1[fdir] = 0.0; rayX2[fdir] = c1oS2; rayX3[fdir] = -c1oS2; - fdir = DIR_0MP; + fdir = d0MP; rayX1[fdir] = 0.0; rayX2[fdir] = -c1oS2; rayX3[fdir] = c1oS2; - fdir = DIR_PPP; + fdir = dPPP; rayX1[fdir] = c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = c1oS3; - fdir = DIR_MPP; + fdir = dMPP; rayX1[fdir] = -c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = c1oS3; - fdir = DIR_PMP; + fdir = dPMP; rayX1[fdir] = c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = c1oS3; - fdir = DIR_MMP; + fdir = dMMP; rayX1[fdir] = -c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = c1oS3; - fdir = DIR_PPM; + fdir = dPPM; rayX1[fdir] = c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = -c1oS3; - fdir = DIR_MPM; + fdir = dMPM; rayX1[fdir] = -c1oS3; rayX2[fdir] = c1oS3; rayX3[fdir] = -c1oS3; - fdir = DIR_PMM; + fdir = dPMM; rayX1[fdir] = c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = -c1oS3; - fdir = DIR_MMM; + fdir = dMMM; rayX1[fdir] = -c1oS3; rayX2[fdir] = -c1oS3; rayX3[fdir] = -c1oS3; @@ -1057,9 +1084,9 @@ static inline real calcPress(const real *const f, real rho, real vx1, real vx2, using namespace vf::lbm::dir; real op = 1.0; - return ((f[DIR_P00] + f[DIR_M00] + f[DIR_0P0] + f[DIR_0M0] + f[DIR_00P] + f[DIR_00M] + - 2. * (f[DIR_PP0] + f[DIR_MM0] + f[DIR_PM0] + f[DIR_MP0] + f[DIR_P0P] + f[DIR_M0M] + f[DIR_P0M] + f[DIR_M0P] + f[DIR_0PP] + f[DIR_0MM] + f[DIR_0PM] + f[DIR_0MP]) + - 3. * (f[DIR_PPP] + f[DIR_MMP] + f[DIR_PMP] + f[DIR_MPP] + f[DIR_PPM] + f[DIR_MMM] + f[DIR_PMM] + f[DIR_MPM]) - + return ((f[dP00] + f[dM00] + f[d0P0] + f[d0M0] + f[d00P] + f[d00M] + + 2. * (f[dPP0] + f[dMM0] + f[dPM0] + f[dMP0] + f[dP0P] + f[dM0M] + f[dP0M] + f[dM0P] + f[d0PP] + f[d0MM] + f[d0PM] + f[d0MP]) + + 3. * (f[dPPP] + f[dMMP] + f[dPMP] + f[dMPP] + f[dPPM] + f[dMMM] + f[dPMM] + f[dMPM]) - (vx1 * vx1 + vx2 * vx2 + vx3 * vx3)) * (1 - 0.5 * op) + op * 0.5 * (rho)) * @@ -1070,35 +1097,35 @@ static inline real getShearRate(const real *const f, real collFactorF) { using namespace vf::lbm::dir; - real mfcbb = f[DIR_P00]; - real mfbcb = f[DIR_0P0]; - real mfbbc = f[DIR_00P]; - real mfccb = f[DIR_PP0]; - real mfacb = f[DIR_MP0]; - real mfcbc = f[DIR_P0P]; - real mfabc = f[DIR_M0P]; - real mfbcc = f[DIR_0PP]; - real mfbac = f[DIR_0MP]; - real mfccc = f[DIR_PPP]; - real mfacc = f[DIR_MPP]; - real mfcac = f[DIR_PMP]; - real mfaac = f[DIR_MMP]; - - real mfabb = f[DIR_M00]; - real mfbab = f[DIR_0M0]; - real mfbba = f[DIR_00M]; - real mfaab = f[DIR_MM0]; - real mfcab = f[DIR_PM0]; - real mfaba = f[DIR_M0M]; - real mfcba = f[DIR_P0M]; - real mfbaa = f[DIR_0MM]; - real mfbca = f[DIR_0PM]; - real mfaaa = f[DIR_MMM]; - real mfcaa = f[DIR_PMM]; - real mfaca = f[DIR_MPM]; - real mfcca = f[DIR_PPM]; - - real mfbbb = f[DIR_000]; + real mfcbb = f[dP00]; + real mfbcb = f[d0P0]; + real mfbbc = f[d00P]; + real mfccb = f[dPP0]; + real mfacb = f[dMP0]; + real mfcbc = f[dP0P]; + real mfabc = f[dM0P]; + real mfbcc = f[d0PP]; + real mfbac = f[d0MP]; + real mfccc = f[dPPP]; + real mfacc = f[dMPP]; + real mfcac = f[dPMP]; + real mfaac = f[dMMP]; + + real mfabb = f[dM00]; + real mfbab = f[d0M0]; + real mfbba = f[d00M]; + real mfaab = f[dMM0]; + real mfcab = f[dPM0]; + real mfaba = f[dM0M]; + real mfcba = f[dP0M]; + real mfbaa = f[d0MM]; + real mfbca = f[d0PM]; + real mfaaa = f[dMMM]; + real mfcaa = f[dPMM]; + real mfaca = f[dMPM]; + real mfcca = f[dPPM]; + + real mfbbb = f[d000]; real m0, m1, m2; @@ -1400,35 +1427,35 @@ static inline std::array<real,6> getSecondMoments(const real *const f, real coll using namespace vf::lbm::dir; using namespace vf::basics::constant; - real mfcbb = f[DIR_P00]; - real mfbcb = f[DIR_0P0]; - real mfbbc = f[DIR_00P]; - real mfccb = f[DIR_PP0]; - real mfacb = f[DIR_MP0]; - real mfcbc = f[DIR_P0P]; - real mfabc = f[DIR_M0P]; - real mfbcc = f[DIR_0PP]; - real mfbac = f[DIR_0MP]; - real mfccc = f[DIR_PPP]; - real mfacc = f[DIR_MPP]; - real mfcac = f[DIR_PMP]; - real mfaac = f[DIR_MMP]; - - real mfabb = f[DIR_M00]; - real mfbab = f[DIR_0M0]; - real mfbba = f[DIR_00M]; - real mfaab = f[DIR_MM0]; - real mfcab = f[DIR_PM0]; - real mfaba = f[DIR_M0M]; - real mfcba = f[DIR_P0M]; - real mfbaa = f[DIR_0MM]; - real mfbca = f[DIR_0PM]; - real mfaaa = f[DIR_MMM]; - real mfcaa = f[DIR_PMM]; - real mfaca = f[DIR_MPM]; - real mfcca = f[DIR_PPM]; - - real mfbbb = f[DIR_000]; + real mfcbb = f[dP00]; + real mfbcb = f[d0P0]; + real mfbbc = f[d00P]; + real mfccb = f[dPP0]; + real mfacb = f[dMP0]; + real mfcbc = f[dP0P]; + real mfabc = f[dM0P]; + real mfbcc = f[d0PP]; + real mfbac = f[d0MP]; + real mfccc = f[dPPP]; + real mfacc = f[dMPP]; + real mfcac = f[dPMP]; + real mfaac = f[dMMP]; + + real mfabb = f[dM00]; + real mfbab = f[d0M0]; + real mfbba = f[d00M]; + real mfaab = f[dMM0]; + real mfcab = f[dPM0]; + real mfaba = f[dM0M]; + real mfcba = f[dP0M]; + real mfbaa = f[d0MM]; + real mfbca = f[d0PM]; + real mfaaa = f[dMMM]; + real mfcaa = f[dPMM]; + real mfaca = f[dMPM]; + real mfcca = f[dPPM]; + + real mfbbb = f[d000]; real m0, m1, m2; @@ -1725,35 +1752,35 @@ static inline std::array<real, 6> getStressTensor(const real *const f, real coll using namespace vf::lbm::dir; using namespace vf::basics::constant; - real mfcbb = f[DIR_P00]; - real mfbcb = f[DIR_0P0]; - real mfbbc = f[DIR_00P]; - real mfccb = f[DIR_PP0]; - real mfacb = f[DIR_MP0]; - real mfcbc = f[DIR_P0P]; - real mfabc = f[DIR_M0P]; - real mfbcc = f[DIR_0PP]; - real mfbac = f[DIR_0MP]; - real mfccc = f[DIR_PPP]; - real mfacc = f[DIR_MPP]; - real mfcac = f[DIR_PMP]; - real mfaac = f[DIR_MMP]; - - real mfabb = f[DIR_M00]; - real mfbab = f[DIR_0M0]; - real mfbba = f[DIR_00M]; - real mfaab = f[DIR_MM0]; - real mfcab = f[DIR_PM0]; - real mfaba = f[DIR_M0M]; - real mfcba = f[DIR_P0M]; - real mfbaa = f[DIR_0MM]; - real mfbca = f[DIR_0PM]; - real mfaaa = f[DIR_MMM]; - real mfcaa = f[DIR_PMM]; - real mfaca = f[DIR_MPM]; - real mfcca = f[DIR_PPM]; - - real mfbbb = f[DIR_000]; + real mfcbb = f[dP00]; + real mfbcb = f[d0P0]; + real mfbbc = f[d00P]; + real mfccb = f[dPP0]; + real mfacb = f[dMP0]; + real mfcbc = f[dP0P]; + real mfabc = f[dM0P]; + real mfbcc = f[d0PP]; + real mfbac = f[d0MP]; + real mfccc = f[dPPP]; + real mfacc = f[dMPP]; + real mfcac = f[dPMP]; + real mfaac = f[dMMP]; + + real mfabb = f[dM00]; + real mfbab = f[d0M0]; + real mfbba = f[d00M]; + real mfaab = f[dMM0]; + real mfcab = f[dPM0]; + real mfaba = f[dM0M]; + real mfcba = f[dP0M]; + real mfbaa = f[d0MM]; + real mfbca = f[d0PM]; + real mfaaa = f[dMMM]; + real mfcaa = f[dPMM]; + real mfaca = f[dMPM]; + real mfcca = f[dPPM]; + + real mfbbb = f[d000]; real m0, m1, m2; @@ -2060,40 +2087,40 @@ static void calcMultiphaseFeq(real *const &feq /*[27]*/, const real &rho, const using namespace vf::basics::constant; real cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); - feq[DIR_000] = c8o27 * (p1 + rho * c1o3 * (-cu_sq)); - feq[DIR_P00] = c2o27 * (p1 + rho * c1o3 * (3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq)); - feq[DIR_M00] = c2o27 * (p1 + rho * c1o3 * (3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq)); - feq[DIR_0P0] = c2o27 * (p1 + rho * c1o3 * (3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq)); - feq[DIR_0M0] = c2o27 * (p1 + rho * c1o3 * (3.0 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq)); - feq[DIR_00P] = c2o27 * (p1 + rho * c1o3 * (3.0 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq)); - feq[DIR_00M] = c2o27 * (p1 + rho * c1o3 * (3.0 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq)); - feq[DIR_PP0] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)); - feq[DIR_MM0] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)); - feq[DIR_PM0] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)); - feq[DIR_MP0] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)); - feq[DIR_P0P] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)); - feq[DIR_M0M] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)); - feq[DIR_P0M] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)); - feq[DIR_M0P] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)); - feq[DIR_0PP] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)); - feq[DIR_0MM] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)); - feq[DIR_0PM] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)); - feq[DIR_0MP] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)); - feq[DIR_PPP] = + feq[d000] = c8o27 * (p1 + rho * c1o3 * (-cu_sq)); + feq[dP00] = c2o27 * (p1 + rho * c1o3 * (3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq)); + feq[dM00] = c2o27 * (p1 + rho * c1o3 * (3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq)); + feq[d0P0] = c2o27 * (p1 + rho * c1o3 * (3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq)); + feq[d0M0] = c2o27 * (p1 + rho * c1o3 * (3.0 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq)); + feq[d00P] = c2o27 * (p1 + rho * c1o3 * (3.0 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq)); + feq[d00M] = c2o27 * (p1 + rho * c1o3 * (3.0 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq)); + feq[dPP0] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)); + feq[dMM0] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)); + feq[dPM0] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)); + feq[dMP0] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)); + feq[dP0P] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)); + feq[dM0M] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)); + feq[dP0M] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)); + feq[dM0P] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)); + feq[d0PP] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)); + feq[d0MM] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)); + feq[d0PM] = c1o54 * (p1 + rho * c1o3 * (3.0 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)); + feq[d0MP] = c1o54 * (p1 + rho * c1o3 * (3.0 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)); + feq[dPPP] = c1o216 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)); - feq[DIR_MMM] = c1o216 * + feq[dMMM] = c1o216 * (p1 + rho * c1o3 * (3.0 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)); - feq[DIR_PPM] = + feq[dPPM] = c1o216 * (p1 + rho * c1o3 * (3.0 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)); - feq[DIR_MMP] = c1o216 * + feq[dMMP] = c1o216 * (p1 + rho * c1o3 * (3.0 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)); - feq[DIR_PMP] = + feq[dPMP] = c1o216 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)); - feq[DIR_MPM] = c1o216 * + feq[dMPM] = c1o216 * (p1 + rho * c1o3 * (3.0 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)); - feq[DIR_PMM] = + feq[dPMM] = c1o216 * (p1 + rho * c1o3 * (3.0 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)); - feq[DIR_MPP] = c1o216 * + feq[dMPP] = c1o216 * (p1 + rho * c1o3 * (3.0 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)); } ////////////////////////////////////////////////////////////////////////// @@ -2105,33 +2132,33 @@ static void calcMultiphaseFeqVB(real *const &feq /*[27]*/, const real &p1, const using namespace vf::basics::constant; real cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); - feq[DIR_000] = p1 + c8o27 * (-cu_sq); - feq[DIR_P00] = c2o27 * ((3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq)); - feq[DIR_M00] = c2o27 * ((3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq)); - feq[DIR_0P0] = c2o27 * ((3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq)); - feq[DIR_0M0] = c2o27 * ((3.0 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq)); - feq[DIR_00P] = c2o27 * ((3.0 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq)); - feq[DIR_00M] = c2o27 * ((3.0 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq)); - feq[DIR_PP0] = c1o54 * ((3.0 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)); - feq[DIR_MM0] = c1o54 * ((3.0 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)); - feq[DIR_PM0] = c1o54 * ((3.0 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)); - feq[DIR_MP0] = c1o54 * ((3.0 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)); - feq[DIR_P0P] = c1o54 * ((3.0 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)); - feq[DIR_M0M] = c1o54 * ((3.0 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)); - feq[DIR_P0M] = c1o54 * ((3.0 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)); - feq[DIR_M0P] = c1o54 * ((3.0 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)); - feq[DIR_0PP] = c1o54 * ((3.0 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)); - feq[DIR_0MM] = c1o54 * ((3.0 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)); - feq[DIR_0PM] = c1o54 * ((3.0 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)); - feq[DIR_0MP] = c1o54 * ((3.0 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)); - feq[DIR_PPP] = c1o216 * ((3.0 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)); - feq[DIR_MMM] = c1o216 * ((3.0 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)); - feq[DIR_PPM] = c1o216 * ((3.0 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)); - feq[DIR_MMP] = c1o216 * ((3.0 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)); - feq[DIR_PMP] = c1o216 * ((3.0 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)); - feq[DIR_MPM] = c1o216 * ((3.0 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)); - feq[DIR_PMM] = c1o216 * ((3.0 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)); - feq[DIR_MPP] = c1o216 * ((3.0 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)); + feq[d000] = p1 + c8o27 * (-cu_sq); + feq[dP00] = c2o27 * ((3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq)); + feq[dM00] = c2o27 * ((3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq)); + feq[d0P0] = c2o27 * ((3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq)); + feq[d0M0] = c2o27 * ((3.0 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq)); + feq[d00P] = c2o27 * ((3.0 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq)); + feq[d00M] = c2o27 * ((3.0 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq)); + feq[dPP0] = c1o54 * ((3.0 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq)); + feq[dMM0] = c1o54 * ((3.0 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq)); + feq[dPM0] = c1o54 * ((3.0 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq)); + feq[dMP0] = c1o54 * ((3.0 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq)); + feq[dP0P] = c1o54 * ((3.0 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq)); + feq[dM0M] = c1o54 * ((3.0 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq)); + feq[dP0M] = c1o54 * ((3.0 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq)); + feq[dM0P] = c1o54 * ((3.0 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq)); + feq[d0PP] = c1o54 * ((3.0 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq)); + feq[d0MM] = c1o54 * ((3.0 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq)); + feq[d0PM] = c1o54 * ((3.0 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq)); + feq[d0MP] = c1o54 * ((3.0 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq)); + feq[dPPP] = c1o216 * ((3.0 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq)); + feq[dMMM] = c1o216 * ((3.0 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq)); + feq[dPPM] = c1o216 * ((3.0 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq)); + feq[dMMP] = c1o216 * ((3.0 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq)); + feq[dPMP] = c1o216 * ((3.0 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq)); + feq[dMPM] = c1o216 * ((3.0 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq)); + feq[dPMM] = c1o216 * ((3.0 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq)); + feq[dMPP] = c1o216 * ((3.0 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq)); } ////////////////////////////////////////////////////////////////////////// static void calcMultiphaseHeq(real *const &heq /*[27]*/, const real &phi, const real &vx1, const real &vx2, @@ -2142,33 +2169,33 @@ static void calcMultiphaseHeq(real *const &heq /*[27]*/, const real &phi, const real cu_sq = 1.5 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); - heq[DIR_000] = c8o27 * phi * (1.0 - cu_sq); - heq[DIR_P00] = c2o27 * phi * (1.0 + 3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq); - heq[DIR_M00] = c2o27 * phi * (1.0 + 3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq); - heq[DIR_0P0] = c2o27 * phi * (1.0 + 3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq); - heq[DIR_0M0] = c2o27 * phi * (1.0 + 3.0 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq); - heq[DIR_00P] = c2o27 * phi * (1.0 + 3.0 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq); - heq[DIR_00M] = c2o27 * phi * (1.0 + 3.0 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq); - heq[DIR_PP0] = c1o54 * phi * (1.0 + 3.0 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq); - heq[DIR_MM0] = c1o54 * phi * (1.0 + 3.0 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq); - heq[DIR_PM0] = c1o54 * phi * (1.0 + 3.0 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq); - heq[DIR_MP0] = c1o54 * phi * (1.0 + 3.0 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq); - heq[DIR_P0P] = c1o54 * phi * (1.0 + 3.0 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq); - heq[DIR_M0M] = c1o54 * phi * (1.0 + 3.0 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq); - heq[DIR_P0M] = c1o54 * phi * (1.0 + 3.0 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq); - heq[DIR_M0P] = c1o54 * phi * (1.0 + 3.0 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq); - heq[DIR_0PP] = c1o54 * phi * (1.0 + 3.0 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq); - heq[DIR_0MM] = c1o54 * phi * (1.0 + 3.0 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq); - heq[DIR_0PM] = c1o54 * phi * (1.0 + 3.0 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq); - heq[DIR_0MP] = c1o54 * phi * (1.0 + 3.0 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq); - heq[DIR_PPP] = c1o216 * phi * (1.0 + 3.0 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq); - heq[DIR_MMM] = c1o216 * phi * (1.0 + 3.0 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq); - heq[DIR_PPM] = c1o216 * phi * (1.0 + 3.0 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq); - heq[DIR_MMP] = c1o216 * phi * (1.0 + 3.0 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq); - heq[DIR_PMP] = c1o216 * phi * (1.0 + 3.0 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq); - heq[DIR_MPM] = c1o216 * phi * (1.0 + 3.0 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq); - heq[DIR_PMM] = c1o216 * phi * (1.0 + 3.0 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq); - heq[DIR_MPP] = c1o216 * phi * (1.0 + 3.0 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq); + heq[d000] = c8o27 * phi * (1.0 - cu_sq); + heq[dP00] = c2o27 * phi * (1.0 + 3.0 * (vx1) + c9o2 * (vx1) * (vx1)-cu_sq); + heq[dM00] = c2o27 * phi * (1.0 + 3.0 * (-vx1) + c9o2 * (-vx1) * (-vx1) - cu_sq); + heq[d0P0] = c2o27 * phi * (1.0 + 3.0 * (vx2) + c9o2 * (vx2) * (vx2)-cu_sq); + heq[d0M0] = c2o27 * phi * (1.0 + 3.0 * (-vx2) + c9o2 * (-vx2) * (-vx2) - cu_sq); + heq[d00P] = c2o27 * phi * (1.0 + 3.0 * (vx3) + c9o2 * (vx3) * (vx3)-cu_sq); + heq[d00M] = c2o27 * phi * (1.0 + 3.0 * (-vx3) + c9o2 * (-vx3) * (-vx3) - cu_sq); + heq[dPP0] = c1o54 * phi * (1.0 + 3.0 * (vx1 + vx2) + c9o2 * (vx1 + vx2) * (vx1 + vx2) - cu_sq); + heq[dMM0] = c1o54 * phi * (1.0 + 3.0 * (-vx1 - vx2) + c9o2 * (-vx1 - vx2) * (-vx1 - vx2) - cu_sq); + heq[dPM0] = c1o54 * phi * (1.0 + 3.0 * (vx1 - vx2) + c9o2 * (vx1 - vx2) * (vx1 - vx2) - cu_sq); + heq[dMP0] = c1o54 * phi * (1.0 + 3.0 * (-vx1 + vx2) + c9o2 * (-vx1 + vx2) * (-vx1 + vx2) - cu_sq); + heq[dP0P] = c1o54 * phi * (1.0 + 3.0 * (vx1 + vx3) + c9o2 * (vx1 + vx3) * (vx1 + vx3) - cu_sq); + heq[dM0M] = c1o54 * phi * (1.0 + 3.0 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq); + heq[dP0M] = c1o54 * phi * (1.0 + 3.0 * (vx1 - vx3) + c9o2 * (vx1 - vx3) * (vx1 - vx3) - cu_sq); + heq[dM0P] = c1o54 * phi * (1.0 + 3.0 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq); + heq[d0PP] = c1o54 * phi * (1.0 + 3.0 * (vx2 + vx3) + c9o2 * (vx2 + vx3) * (vx2 + vx3) - cu_sq); + heq[d0MM] = c1o54 * phi * (1.0 + 3.0 * (-vx2 - vx3) + c9o2 * (-vx2 - vx3) * (-vx2 - vx3) - cu_sq); + heq[d0PM] = c1o54 * phi * (1.0 + 3.0 * (vx2 - vx3) + c9o2 * (vx2 - vx3) * (vx2 - vx3) - cu_sq); + heq[d0MP] = c1o54 * phi * (1.0 + 3.0 * (-vx2 + vx3) + c9o2 * (-vx2 + vx3) * (-vx2 + vx3) - cu_sq); + heq[dPPP] = c1o216 * phi * (1.0 + 3.0 * (vx1 + vx2 + vx3) + c9o2 * (vx1 + vx2 + vx3) * (vx1 + vx2 + vx3) - cu_sq); + heq[dMMM] = c1o216 * phi * (1.0 + 3.0 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq); + heq[dPPM] = c1o216 * phi * (1.0 + 3.0 * (vx1 + vx2 - vx3) + c9o2 * (vx1 + vx2 - vx3) * (vx1 + vx2 - vx3) - cu_sq); + heq[dMMP] = c1o216 * phi * (1.0 + 3.0 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq); + heq[dPMP] = c1o216 * phi * (1.0 + 3.0 * (vx1 - vx2 + vx3) + c9o2 * (vx1 - vx2 + vx3) * (vx1 - vx2 + vx3) - cu_sq); + heq[dMPM] = c1o216 * phi * (1.0 + 3.0 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq); + heq[dPMM] = c1o216 * phi * (1.0 + 3.0 * (vx1 - vx2 - vx3) + c9o2 * (vx1 - vx2 - vx3) * (vx1 - vx2 - vx3) - cu_sq); + heq[dMPP] = c1o216 * phi * (1.0 + 3.0 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq); } } // namespace D3Q27System diff --git a/src/cpu/VirtualFluidsCore/LBM/ICell.h b/src/cpu/core/LBM/ICell.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/ICell.h rename to src/cpu/core/LBM/ICell.h diff --git a/src/cpu/VirtualFluidsCore/LBM/ILBMKernel.h b/src/cpu/core/LBM/ILBMKernel.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/ILBMKernel.h rename to src/cpu/core/LBM/ILBMKernel.h diff --git a/src/cpu/VirtualFluidsCore/LBM/IncompressibleCumulantLBMKernel.cpp b/src/cpu/core/LBM/IncompressibleCumulantLBMKernel.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/IncompressibleCumulantLBMKernel.cpp rename to src/cpu/core/LBM/IncompressibleCumulantLBMKernel.cpp diff --git a/src/cpu/VirtualFluidsCore/LBM/IncompressibleCumulantLBMKernel.h b/src/cpu/core/LBM/IncompressibleCumulantLBMKernel.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/IncompressibleCumulantLBMKernel.h rename to src/cpu/core/LBM/IncompressibleCumulantLBMKernel.h diff --git a/src/cpu/VirtualFluidsCore/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp b/src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp similarity index 99% rename from src/cpu/VirtualFluidsCore/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp rename to src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp index 0ac578d90615b0ab0ba4989b6b70d680eb0e8c44..d052f4f71a4e03ad64c4bf26e9372e0b23423f00 100644 --- a/src/cpu/VirtualFluidsCore/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp +++ b/src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.cpp @@ -71,37 +71,37 @@ void IncompressibleCumulantWithSpongeLayerLBMKernel::initRelaxFactor(int vdir, r { switch (direction) { - case DIR_P00: + case dP00: muX1 = (real)(x1 + ix1 * maxX1); if (muX1 >= (sizeX - sizeSP) / deltaT) spongeFactor = (sizeX - (muX1 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2; else spongeFactor = c1o1; break; - case DIR_M00: + case dM00: muX1 = (real)(x1 + ix1 * maxX1); if (muX1 <= sizeSP / deltaT) spongeFactor = (sizeSP - (muX1 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2; else spongeFactor = c1o1; break; - case DIR_0P0: + case d0P0: muX2 = (real)(x2 + ix2 * maxX2); if (muX2 >= (sizeX - sizeSP) / deltaT) spongeFactor = (sizeX - (muX2 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2; else spongeFactor = c1o1; break; - case DIR_0M0: + case d0M0: muX2 = (real)(x2 + ix2 * maxX2); if (muX2 <= sizeSP / deltaT) spongeFactor = (sizeSP - (muX2 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2; else spongeFactor = c1o1; break; - case DIR_00P: + case d00P: muX3 = (real)(x3 + ix3 * maxX3); if (muX3 >= (sizeX - sizeSP) / deltaT) spongeFactor = (sizeX - (muX3 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2; else spongeFactor = c1o1; break; - case DIR_00M: + case d00M: muX3 = (real)(x3 + ix3 * maxX3); if (muX3 <= sizeSP / deltaT) spongeFactor = (sizeSP - (muX3 * deltaT + c1o1)) / sizeSP / c2o1 + c1o2; diff --git a/src/cpu/VirtualFluidsCore/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.h b/src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.h rename to src/cpu/core/LBM/IncompressibleCumulantWithSpongeLayerLBMKernel.h diff --git a/src/cpu/VirtualFluidsCore/LBM/InitDensityLBMKernel.cpp b/src/cpu/core/LBM/InitDensityLBMKernel.cpp similarity index 86% rename from src/cpu/VirtualFluidsCore/LBM/InitDensityLBMKernel.cpp rename to src/cpu/core/LBM/InitDensityLBMKernel.cpp index 574014992fe58993aa5720d482b0931293be5d6d..734e2e33fd478e86151309d78c24b48fc9e0a401 100644 --- a/src/cpu/VirtualFluidsCore/LBM/InitDensityLBMKernel.cpp +++ b/src/cpu/core/LBM/InitDensityLBMKernel.cpp @@ -897,45 +897,45 @@ void InitDensityLBMKernel::calculate(int /*step*/) ////////////////////////////////////////////////////////////////////////// //read distribution //////////////////////////////////////////////////////////////////////////// - f[DIR_000] = (*this->zeroDistributions)(x1, x2, x3); + f[d000] = (*this->zeroDistributions)(x1, x2, x3); - f[DIR_P00] = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); - f[DIR_0P0] = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); - f[DIR_00P] = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3); - f[DIR_PP0] = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3); - f[DIR_MP0] = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3); - f[DIR_P0P] = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3); - f[DIR_M0P] = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3); - f[DIR_0PP] = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3); - f[DIR_0MP] = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3); - f[DIR_PPP] = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3); - f[DIR_MPP] = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3); - f[DIR_PMP] = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3); - f[DIR_MMP] = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3); + f[dP00] = (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3); + f[d0P0] = (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3); + f[d00P] = (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3); + f[dPP0] = (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3); + f[dMP0] = (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3); + f[dP0P] = (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3); + f[dM0P] = (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3); + f[d0PP] = (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3); + f[d0MP] = (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3); + f[dPPP] = (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3); + f[dMPP] = (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3); + f[dPMP] = (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3); + f[dMMP] = (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3); - f[DIR_M00] = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3); - f[DIR_0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3); - f[DIR_00M] = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p); - f[DIR_MM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3); - f[DIR_PM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3); - f[DIR_M0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p); - f[DIR_P0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p); - f[DIR_0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p); - f[DIR_0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p); - f[DIR_MMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p); - f[DIR_PMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p); - f[DIR_MPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p); - f[DIR_PPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p); + f[dM00] = (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3); + f[d0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3); + f[d00M] = (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p); + f[dMM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3); + f[dPM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3); + f[dM0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p); + f[dP0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p); + f[d0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p); + f[d0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p); + f[dMMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p); + f[dPMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p); + f[dMPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p); + f[dPPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p); ////////////////////////////////////////////////////////////////////////// - drho = ((f[DIR_PPP]+f[DIR_MMM])+(f[DIR_PMP]+f[DIR_MPM]))+((f[DIR_PMM]+f[DIR_MPP])+(f[DIR_MMP]+f[DIR_PPM])) - +(((f[DIR_PP0]+f[DIR_MM0])+(f[DIR_PM0]+f[DIR_MP0]))+((f[DIR_P0P]+f[DIR_M0M])+(f[DIR_P0M]+f[DIR_M0P])) - +((f[DIR_0PM]+f[DIR_0MP])+(f[DIR_0PP]+f[DIR_0MM])))+((f[DIR_P00]+f[DIR_M00])+(f[DIR_0P0]+f[DIR_0M0]) - +(f[DIR_00P]+f[DIR_00M]))+f[DIR_000]; + drho = ((f[dPPP]+f[dMMM])+(f[dPMP]+f[dMPM]))+((f[dPMM]+f[dMPP])+(f[dMMP]+f[dPPM])) + +(((f[dPP0]+f[dMM0])+(f[dPM0]+f[dMP0]))+((f[dP0P]+f[dM0M])+(f[dP0M]+f[dM0P])) + +((f[d0PM]+f[d0MP])+(f[d0PP]+f[d0MM])))+((f[dP00]+f[dM00])+(f[d0P0]+f[d0M0]) + +(f[d00P]+f[d00M]))+f[d000]; //vx1 = ((((f[TNE]-f[BSW])+(f[TSE]-f[BNW]))+((f[BSE]-f[TNW])+(f[BNE]-f[TSW])))+ // (((f[BE]-f[TW])+(f[TE]-f[BW]))+((f[SE]-f[NW])+(f[NE]-f[SW])))+ - // (f[DIR_P00]-f[W])); + // (f[dP00]-f[W])); //vx2 = ((((f[TNE]-f[BSW])+(f[BNW]-f[TSE]))+((f[TNW]-f[BSE])+(f[BNE]-f[TSW])))+ // (((f[BN]-f[TS])+(f[TN]-f[BS]))+((f[NW]-f[SE])+(f[NE]-f[SW])))+ @@ -959,67 +959,67 @@ void InitDensityLBMKernel::calculate(int /*step*/) real cu_sq = c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - feq[DIR_000] = c8o27*(drho-cu_sq); - feq[DIR_P00] = c2o27*(drho+c3o1*(vx1)+c9o2*(vx1)*(vx1)-cu_sq); - feq[DIR_M00] = c2o27*(drho+c3o1*(-vx1)+c9o2*(-vx1)*(-vx1)-cu_sq); - feq[DIR_0P0] = c2o27*(drho+c3o1*(vx2)+c9o2*(vx2)*(vx2)-cu_sq); - feq[DIR_0M0] = c2o27*(drho+c3o1*(-vx2)+c9o2*(-vx2)*(-vx2)-cu_sq); - feq[DIR_00P] = c2o27*(drho+c3o1*(vx3)+c9o2*(vx3)*(vx3)-cu_sq); - feq[DIR_00M] = c2o27*(drho+c3o1*(-vx3)+c9o2*(-vx3)*(-vx3)-cu_sq); - feq[DIR_PP0] = c1o54*(drho+c3o1*(vx1+vx2)+c9o2*(vx1+vx2)*(vx1+vx2)-cu_sq); - feq[DIR_MM0] = c1o54*(drho+c3o1*(-vx1-vx2)+c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq); - feq[DIR_PM0] = c1o54*(drho+c3o1*(vx1-vx2)+c9o2*(vx1-vx2)*(vx1-vx2)-cu_sq); - feq[DIR_MP0] = c1o54*(drho+c3o1*(-vx1+vx2)+c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq); - feq[DIR_P0P] = c1o54*(drho+c3o1*(vx1+vx3)+c9o2*(vx1+vx3)*(vx1+vx3)-cu_sq); - feq[DIR_M0M] = c1o54*(drho+c3o1*(-vx1-vx3)+c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq); - feq[DIR_P0M] = c1o54*(drho+c3o1*(vx1-vx3)+c9o2*(vx1-vx3)*(vx1-vx3)-cu_sq); - feq[DIR_M0P] = c1o54*(drho+c3o1*(-vx1+vx3)+c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq); - feq[DIR_0PP] = c1o54*(drho+c3o1*(vx2+vx3)+c9o2*(vx2+vx3)*(vx2+vx3)-cu_sq); - feq[DIR_0MM] = c1o54*(drho+c3o1*(-vx2-vx3)+c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq); - feq[DIR_0PM] = c1o54*(drho+c3o1*(vx2-vx3)+c9o2*(vx2-vx3)*(vx2-vx3)-cu_sq); - feq[DIR_0MP] = c1o54*(drho+c3o1*(-vx2+vx3)+c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq); - feq[DIR_PPP] = c1o216*(drho+c3o1*(vx1+vx2+vx3)+c9o2*(vx1+vx2+vx3)*(vx1+vx2+vx3)-cu_sq); - feq[DIR_MMM] = c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - feq[DIR_PPM] = c1o216*(drho+c3o1*(vx1+vx2-vx3)+c9o2*(vx1+vx2-vx3)*(vx1+vx2-vx3)-cu_sq); - feq[DIR_MMP] = c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - feq[DIR_PMP] = c1o216*(drho+c3o1*(vx1-vx2+vx3)+c9o2*(vx1-vx2+vx3)*(vx1-vx2+vx3)-cu_sq); - feq[DIR_MPM] = c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - feq[DIR_PMM] = c1o216*(drho+c3o1*(vx1-vx2-vx3)+c9o2*(vx1-vx2-vx3)*(vx1-vx2-vx3)-cu_sq); - feq[DIR_MPP] = c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); + feq[d000] = c8o27*(drho-cu_sq); + feq[dP00] = c2o27*(drho+c3o1*(vx1)+c9o2*(vx1)*(vx1)-cu_sq); + feq[dM00] = c2o27*(drho+c3o1*(-vx1)+c9o2*(-vx1)*(-vx1)-cu_sq); + feq[d0P0] = c2o27*(drho+c3o1*(vx2)+c9o2*(vx2)*(vx2)-cu_sq); + feq[d0M0] = c2o27*(drho+c3o1*(-vx2)+c9o2*(-vx2)*(-vx2)-cu_sq); + feq[d00P] = c2o27*(drho+c3o1*(vx3)+c9o2*(vx3)*(vx3)-cu_sq); + feq[d00M] = c2o27*(drho+c3o1*(-vx3)+c9o2*(-vx3)*(-vx3)-cu_sq); + feq[dPP0] = c1o54*(drho+c3o1*(vx1+vx2)+c9o2*(vx1+vx2)*(vx1+vx2)-cu_sq); + feq[dMM0] = c1o54*(drho+c3o1*(-vx1-vx2)+c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq); + feq[dPM0] = c1o54*(drho+c3o1*(vx1-vx2)+c9o2*(vx1-vx2)*(vx1-vx2)-cu_sq); + feq[dMP0] = c1o54*(drho+c3o1*(-vx1+vx2)+c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq); + feq[dP0P] = c1o54*(drho+c3o1*(vx1+vx3)+c9o2*(vx1+vx3)*(vx1+vx3)-cu_sq); + feq[dM0M] = c1o54*(drho+c3o1*(-vx1-vx3)+c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq); + feq[dP0M] = c1o54*(drho+c3o1*(vx1-vx3)+c9o2*(vx1-vx3)*(vx1-vx3)-cu_sq); + feq[dM0P] = c1o54*(drho+c3o1*(-vx1+vx3)+c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq); + feq[d0PP] = c1o54*(drho+c3o1*(vx2+vx3)+c9o2*(vx2+vx3)*(vx2+vx3)-cu_sq); + feq[d0MM] = c1o54*(drho+c3o1*(-vx2-vx3)+c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq); + feq[d0PM] = c1o54*(drho+c3o1*(vx2-vx3)+c9o2*(vx2-vx3)*(vx2-vx3)-cu_sq); + feq[d0MP] = c1o54*(drho+c3o1*(-vx2+vx3)+c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq); + feq[dPPP] = c1o216*(drho+c3o1*(vx1+vx2+vx3)+c9o2*(vx1+vx2+vx3)*(vx1+vx2+vx3)-cu_sq); + feq[dMMM] = c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); + feq[dPPM] = c1o216*(drho+c3o1*(vx1+vx2-vx3)+c9o2*(vx1+vx2-vx3)*(vx1+vx2-vx3)-cu_sq); + feq[dMMP] = c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); + feq[dPMP] = c1o216*(drho+c3o1*(vx1-vx2+vx3)+c9o2*(vx1-vx2+vx3)*(vx1-vx2+vx3)-cu_sq); + feq[dMPM] = c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); + feq[dPMM] = c1o216*(drho+c3o1*(vx1-vx2-vx3)+c9o2*(vx1-vx2-vx3)*(vx1-vx2-vx3)-cu_sq); + feq[dMPP] = c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); //Relaxation - f[DIR_000] += (feq[DIR_000]-f[DIR_000])*collFactor; - f[DIR_P00] += (feq[DIR_P00]-f[DIR_P00])*collFactor; - f[DIR_M00] += (feq[DIR_M00]-f[DIR_M00])*collFactor; - f[DIR_0P0] += (feq[DIR_0P0]-f[DIR_0P0])*collFactor; - f[DIR_0M0] += (feq[DIR_0M0]-f[DIR_0M0])*collFactor; - f[DIR_00P] += (feq[DIR_00P]-f[DIR_00P])*collFactor; - f[DIR_00M] += (feq[DIR_00M]-f[DIR_00M])*collFactor; - f[DIR_PP0] += (feq[DIR_PP0]-f[DIR_PP0])*collFactor; - f[DIR_MM0] += (feq[DIR_MM0]-f[DIR_MM0])*collFactor; - f[DIR_PM0] += (feq[DIR_PM0]-f[DIR_PM0])*collFactor; - f[DIR_MP0] += (feq[DIR_MP0]-f[DIR_MP0])*collFactor; - f[DIR_P0P] += (feq[DIR_P0P]-f[DIR_P0P])*collFactor; - f[DIR_M0M] += (feq[DIR_M0M]-f[DIR_M0M])*collFactor; - f[DIR_P0M] += (feq[DIR_P0M]-f[DIR_P0M])*collFactor; - f[DIR_M0P] += (feq[DIR_M0P]-f[DIR_M0P])*collFactor; - f[DIR_0PP] += (feq[DIR_0PP]-f[DIR_0PP])*collFactor; - f[DIR_0MM] += (feq[DIR_0MM]-f[DIR_0MM])*collFactor; - f[DIR_0PM] += (feq[DIR_0PM]-f[DIR_0PM])*collFactor; - f[DIR_0MP] += (feq[DIR_0MP]-f[DIR_0MP])*collFactor; + f[d000] += (feq[d000]-f[d000])*collFactor; + f[dP00] += (feq[dP00]-f[dP00])*collFactor; + f[dM00] += (feq[dM00]-f[dM00])*collFactor; + f[d0P0] += (feq[d0P0]-f[d0P0])*collFactor; + f[d0M0] += (feq[d0M0]-f[d0M0])*collFactor; + f[d00P] += (feq[d00P]-f[d00P])*collFactor; + f[d00M] += (feq[d00M]-f[d00M])*collFactor; + f[dPP0] += (feq[dPP0]-f[dPP0])*collFactor; + f[dMM0] += (feq[dMM0]-f[dMM0])*collFactor; + f[dPM0] += (feq[dPM0]-f[dPM0])*collFactor; + f[dMP0] += (feq[dMP0]-f[dMP0])*collFactor; + f[dP0P] += (feq[dP0P]-f[dP0P])*collFactor; + f[dM0M] += (feq[dM0M]-f[dM0M])*collFactor; + f[dP0M] += (feq[dP0M]-f[dP0M])*collFactor; + f[dM0P] += (feq[dM0P]-f[dM0P])*collFactor; + f[d0PP] += (feq[d0PP]-f[d0PP])*collFactor; + f[d0MM] += (feq[d0MM]-f[d0MM])*collFactor; + f[d0PM] += (feq[d0PM]-f[d0PM])*collFactor; + f[d0MP] += (feq[d0MP]-f[d0MP])*collFactor; - f[DIR_PPP] += (feq[DIR_PPP]-f[DIR_PPP])*collFactor; - f[DIR_MMM] += (feq[DIR_MMM]-f[DIR_MMM])*collFactor; - f[DIR_PPM] += (feq[DIR_PPM]-f[DIR_PPM])*collFactor; - f[DIR_MMP] += (feq[DIR_MMP]-f[DIR_MMP])*collFactor; - f[DIR_PMP] += (feq[DIR_PMP]-f[DIR_PMP])*collFactor; - f[DIR_MPM] += (feq[DIR_MPM]-f[DIR_MPM])*collFactor; - f[DIR_PMM] += (feq[DIR_PMM]-f[DIR_PMM])*collFactor; - f[DIR_MPP] += (feq[DIR_MPP]-f[DIR_MPP])*collFactor; + f[dPPP] += (feq[dPPP]-f[dPPP])*collFactor; + f[dMMM] += (feq[dMMM]-f[dMMM])*collFactor; + f[dPPM] += (feq[dPPM]-f[dPPM])*collFactor; + f[dMMP] += (feq[dMMP]-f[dMMP])*collFactor; + f[dPMP] += (feq[dPMP]-f[dPMP])*collFactor; + f[dMPM] += (feq[dMPM]-f[dMPM])*collFactor; + f[dPMM] += (feq[dPMM]-f[dPMM])*collFactor; + f[dMPP] += (feq[dMPP]-f[dMPP])*collFactor; ////////////////////////////////////////////////////////////////////////// #ifdef PROOF_CORRECTNESS - real rho_post = f[REST]+f[DIR_P00]+f[W]+f[N]+f[S]+f[T]+f[B] + real rho_post = f[REST]+f[dP00]+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]; @@ -1036,35 +1036,35 @@ void InitDensityLBMKernel::calculate(int /*step*/) ////////////////////////////////////////////////////////////////////////// //write distribution ////////////////////////////////////////////////////////////////////////// - (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[INV_P00]; - (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[INV_0P0]; - (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[INV_00P]; - (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[INV_PP0]; - (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3) = f[INV_MP0]; - (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[INV_P0P]; - (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3) = f[INV_M0P]; - (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[INV_0PP]; - (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3) = f[INV_0MP]; - (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[INV_PPP]; - (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3) = f[INV_MPP]; - (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3) = f[INV_PMP]; - (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[INV_MMP]; + (*this->localDistributions)(D3Q27System::ET_E, x1, x2, x3) = f[iP00]; + (*this->localDistributions)(D3Q27System::ET_N, x1, x2, x3) = f[i0P0]; + (*this->localDistributions)(D3Q27System::ET_T, x1, x2, x3) = f[i00P]; + (*this->localDistributions)(D3Q27System::ET_NE, x1, x2, x3) = f[iPP0]; + (*this->localDistributions)(D3Q27System::ET_NW, x1p, x2, x3) = f[iMP0]; + (*this->localDistributions)(D3Q27System::ET_TE, x1, x2, x3) = f[iP0P]; + (*this->localDistributions)(D3Q27System::ET_TW, x1p, x2, x3) = f[iM0P]; + (*this->localDistributions)(D3Q27System::ET_TN, x1, x2, x3) = f[i0PP]; + (*this->localDistributions)(D3Q27System::ET_TS, x1, x2p, x3) = f[i0MP]; + (*this->localDistributions)(D3Q27System::ET_TNE, x1, x2, x3) = f[iPPP]; + (*this->localDistributions)(D3Q27System::ET_TNW, x1p, x2, x3) = f[iMPP]; + (*this->localDistributions)(D3Q27System::ET_TSE, x1, x2p, x3) = f[iPMP]; + (*this->localDistributions)(D3Q27System::ET_TSW, x1p, x2p, x3) = f[iMMP]; - (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3) = f[INV_M00]; - (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3) = f[INV_0M0]; - (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p) = f[INV_00M]; - (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3) = f[INV_MM0]; - (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3) = f[INV_PM0]; - (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p) = f[INV_M0M]; - (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p) = f[INV_P0M]; - (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p) = f[INV_0MM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p) = f[INV_0PM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[INV_MMM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[INV_PMM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[INV_MPM]; - (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = f[INV_PPM]; + (*this->nonLocalDistributions)(D3Q27System::ET_W, x1p, x2, x3) = f[iM00]; + (*this->nonLocalDistributions)(D3Q27System::ET_S, x1, x2p, x3) = f[i0M0]; + (*this->nonLocalDistributions)(D3Q27System::ET_B, x1, x2, x3p) = f[i00M]; + (*this->nonLocalDistributions)(D3Q27System::ET_SW, x1p, x2p, x3) = f[iMM0]; + (*this->nonLocalDistributions)(D3Q27System::ET_SE, x1, x2p, x3) = f[iPM0]; + (*this->nonLocalDistributions)(D3Q27System::ET_BW, x1p, x2, x3p) = f[iM0M]; + (*this->nonLocalDistributions)(D3Q27System::ET_BE, x1, x2, x3p) = f[iP0M]; + (*this->nonLocalDistributions)(D3Q27System::ET_BS, x1, x2p, x3p) = f[i0MM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BN, x1, x2, x3p) = f[i0PM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BSW, x1p, x2p, x3p) = f[iMMM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BSE, x1, x2p, x3p) = f[iPMM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BNW, x1p, x2, x3p) = f[iMPM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BNE, x1, x2, x3p) = f[iPPM]; - (*this->zeroDistributions)(x1, x2, x3) = f[DIR_000]; + (*this->zeroDistributions)(x1, x2, x3) = f[d000]; ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/LBM/InitDensityLBMKernel.h b/src/cpu/core/LBM/InitDensityLBMKernel.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/InitDensityLBMKernel.h rename to src/cpu/core/LBM/InitDensityLBMKernel.h diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetInterpolator.cpp b/src/cpu/core/LBM/Interpolation/CompressibleOffsetInterpolator.cpp similarity index 88% rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetInterpolator.cpp rename to src/cpu/core/LBM/Interpolation/CompressibleOffsetInterpolator.cpp index a5450b3b4b467143e0286ef7f7757a75c2e8457f..de2e4a01fe7c272900d40a8daa58ba4d6c0fb8b4 100644 --- a/src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetInterpolator.cpp +++ b/src/cpu/core/LBM/Interpolation/CompressibleOffsetInterpolator.cpp @@ -69,11 +69,11 @@ void CompressibleOffsetInterpolator::calcMoments(const real* const f, real omega press = drho; //interpolate rho! - kxy = -c3o1*omega*((((f[DIR_MMP]+f[DIR_PPM])-(f[DIR_MPP]+f[DIR_PMM]))+((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_MPM]+f[DIR_PMP])))+((f[DIR_MM0]+f[DIR_PP0])-(f[DIR_MP0]+f[DIR_PM0]))/(c1o1 + drho)-(vx1*vx2));// might not be optimal MG 25.2.13 - kyz = -c3o1*omega*((((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_PMP]+f[DIR_MPM]))+((f[DIR_PMM]+f[DIR_MPP])-(f[DIR_MMP]+f[DIR_PPM])))+((f[DIR_0MM]+f[DIR_0PP])-(f[DIR_0MP]+f[DIR_0PM]))/(c1o1 + drho)-(vx2*vx3)); - kxz = -c3o1*omega*((((f[DIR_MPM]+f[DIR_PMP])-(f[DIR_MMP]+f[DIR_PPM]))+((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_PMM]+f[DIR_MPP])))+((f[DIR_M0M]+f[DIR_P0P])-(f[DIR_M0P]+f[DIR_P0M]))/(c1o1 + drho)-(vx1*vx3)); - kxxMyy = -c3o1/c2o1*omega*((((f[DIR_M0M]+f[DIR_P0P])-(f[DIR_0MM]+f[DIR_0PP]))+((f[DIR_M0P]+f[DIR_P0M])-(f[DIR_0MP]+f[DIR_0PM])))+((f[DIR_M00]+f[DIR_P00])-(f[DIR_0M0]+f[DIR_0P0]))/(c1o1 + drho)-(vx1*vx1-vx2*vx2)); - kxxMzz = -c3o1/c2o1*omega*((((f[DIR_MP0]+f[DIR_PM0])-(f[DIR_0MM]+f[DIR_0PP]))+((f[DIR_MM0]+f[DIR_PP0])-(f[DIR_0MP]+f[DIR_0PM])))+((f[DIR_M00]+f[DIR_P00])-(f[DIR_00M]+f[DIR_00P]))/(c1o1 + drho)-(vx1*vx1-vx3*vx3)); + kxy = -c3o1*omega*((((f[dMMP]+f[dPPM])-(f[dMPP]+f[dPMM]))+((f[dMMM]+f[dPPP])-(f[dMPM]+f[dPMP])))+((f[dMM0]+f[dPP0])-(f[dMP0]+f[dPM0]))/(c1o1 + drho)-(vx1*vx2));// might not be optimal MG 25.2.13 + kyz = -c3o1*omega*((((f[dMMM]+f[dPPP])-(f[dPMP]+f[dMPM]))+((f[dPMM]+f[dMPP])-(f[dMMP]+f[dPPM])))+((f[d0MM]+f[d0PP])-(f[d0MP]+f[d0PM]))/(c1o1 + drho)-(vx2*vx3)); + kxz = -c3o1*omega*((((f[dMPM]+f[dPMP])-(f[dMMP]+f[dPPM]))+((f[dMMM]+f[dPPP])-(f[dPMM]+f[dMPP])))+((f[dM0M]+f[dP0P])-(f[dM0P]+f[dP0M]))/(c1o1 + drho)-(vx1*vx3)); + kxxMyy = -c3o1/c2o1*omega*((((f[dM0M]+f[dP0P])-(f[d0MM]+f[d0PP]))+((f[dM0P]+f[dP0M])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d0M0]+f[d0P0]))/(c1o1 + drho)-(vx1*vx1-vx2*vx2)); + kxxMzz = -c3o1/c2o1*omega*((((f[dMP0]+f[dPM0])-(f[d0MM]+f[d0PP]))+((f[dMM0]+f[dPP0])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d00M]+f[d00P]))/(c1o1 + drho)-(vx1*vx1-vx3*vx3)); } ////////////////////////////////////////////////////////////////////////// void CompressibleOffsetInterpolator::calcInterpolatedCoefficiets(const D3Q27ICell& icell, real omega, real eps_new) @@ -475,33 +475,33 @@ void CompressibleOffsetInterpolator::calcInterpolatedNodeCF(real* f, real /*ome real feq[ENDF+1]; D3Q27System::calcCompFeq(feq,rho,vx1,vx2,vx3); - f[DIR_P00] = f_E + xs*x_E + ys*y_E + zs*z_E + xs*ys*xy_E + xs*zs*xz_E + ys*zs*yz_E + feq[DIR_P00]; - f[DIR_M00] = f_E + xs*x_E + ys*y_E + zs*z_E + xs*ys*xy_E + xs*zs*xz_E + ys*zs*yz_E + feq[DIR_M00]; - f[DIR_0P0] = f_N + xs*x_N + ys*y_N + zs*z_N + xs*ys*xy_N + xs*zs*xz_N + ys*zs*yz_N + feq[DIR_0P0]; - f[DIR_0M0] = f_N + xs*x_N + ys*y_N + zs*z_N + xs*ys*xy_N + xs*zs*xz_N + ys*zs*yz_N + feq[DIR_0M0]; - f[DIR_00P] = f_T + xs*x_T + ys*y_T + zs*z_T + xs*ys*xy_T + xs*zs*xz_T + ys*zs*yz_T + feq[DIR_00P]; - f[DIR_00M] = f_T + xs*x_T + ys*y_T + zs*z_T + xs*ys*xy_T + xs*zs*xz_T + ys*zs*yz_T + feq[DIR_00M]; - f[DIR_PP0] = f_NE + xs*x_NE + ys*y_NE + zs*z_NE + xs*ys*xy_NE + xs*zs*xz_NE + ys*zs*yz_NE + feq[DIR_PP0]; - f[DIR_MM0] = f_NE + xs*x_NE + ys*y_NE + zs*z_NE + xs*ys*xy_NE + xs*zs*xz_NE + ys*zs*yz_NE + feq[DIR_MM0]; - f[DIR_PM0] = f_SE + xs*x_SE + ys*y_SE + zs*z_SE + xs*ys*xy_SE + xs*zs*xz_SE + ys*zs*yz_SE + feq[DIR_PM0]; - f[DIR_MP0] = f_SE + xs*x_SE + ys*y_SE + zs*z_SE + xs*ys*xy_SE + xs*zs*xz_SE + ys*zs*yz_SE + feq[DIR_MP0]; - f[DIR_P0P] = f_TE + xs*x_TE + ys*y_TE + zs*z_TE + xs*ys*xy_TE + xs*zs*xz_TE + ys*zs*yz_TE + feq[DIR_P0P]; - f[DIR_M0M] = f_TE + xs*x_TE + ys*y_TE + zs*z_TE + xs*ys*xy_TE + xs*zs*xz_TE + ys*zs*yz_TE + feq[DIR_M0M]; - f[DIR_P0M] = f_BE + xs*x_BE + ys*y_BE + zs*z_BE + xs*ys*xy_BE + xs*zs*xz_BE + ys*zs*yz_BE + feq[DIR_P0M]; - f[DIR_M0P] = f_BE + xs*x_BE + ys*y_BE + zs*z_BE + xs*ys*xy_BE + xs*zs*xz_BE + ys*zs*yz_BE + feq[DIR_M0P]; - f[DIR_0PP] = f_TN + xs*x_TN + ys*y_TN + zs*z_TN + xs*ys*xy_TN + xs*zs*xz_TN + ys*zs*yz_TN + feq[DIR_0PP]; - f[DIR_0MM] = f_TN + xs*x_TN + ys*y_TN + zs*z_TN + xs*ys*xy_TN + xs*zs*xz_TN + ys*zs*yz_TN + feq[DIR_0MM]; - f[DIR_0PM] = f_BN + xs*x_BN + ys*y_BN + zs*z_BN + xs*ys*xy_BN + xs*zs*xz_BN + ys*zs*yz_BN + feq[DIR_0PM]; - f[DIR_0MP] = f_BN + xs*x_BN + ys*y_BN + zs*z_BN + xs*ys*xy_BN + xs*zs*xz_BN + ys*zs*yz_BN + feq[DIR_0MP]; - f[DIR_PPP] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[DIR_PPP]; - f[DIR_MMP] = f_TSW + xs*x_TSW + ys*y_TSW + zs*z_TSW + xs*ys*xy_TSW + xs*zs*xz_TSW + ys*zs*yz_TSW + feq[DIR_MMP]; - f[DIR_PMP] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[DIR_PMP]; - f[DIR_MPP] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[DIR_MPP]; - f[DIR_PPM] = f_TSW + xs*x_TSW + ys*y_TSW + zs*z_TSW + xs*ys*xy_TSW + xs*zs*xz_TSW + ys*zs*yz_TSW + feq[DIR_PPM]; - f[DIR_MMM] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[DIR_MMM]; - f[DIR_PMM] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[DIR_PMM]; - f[DIR_MPM] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[DIR_MPM]; - f[DIR_000] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO + feq[DIR_000]; + f[dP00] = f_E + xs*x_E + ys*y_E + zs*z_E + xs*ys*xy_E + xs*zs*xz_E + ys*zs*yz_E + feq[dP00]; + f[dM00] = f_E + xs*x_E + ys*y_E + zs*z_E + xs*ys*xy_E + xs*zs*xz_E + ys*zs*yz_E + feq[dM00]; + f[d0P0] = f_N + xs*x_N + ys*y_N + zs*z_N + xs*ys*xy_N + xs*zs*xz_N + ys*zs*yz_N + feq[d0P0]; + f[d0M0] = f_N + xs*x_N + ys*y_N + zs*z_N + xs*ys*xy_N + xs*zs*xz_N + ys*zs*yz_N + feq[d0M0]; + f[d00P] = f_T + xs*x_T + ys*y_T + zs*z_T + xs*ys*xy_T + xs*zs*xz_T + ys*zs*yz_T + feq[d00P]; + f[d00M] = f_T + xs*x_T + ys*y_T + zs*z_T + xs*ys*xy_T + xs*zs*xz_T + ys*zs*yz_T + feq[d00M]; + f[dPP0] = f_NE + xs*x_NE + ys*y_NE + zs*z_NE + xs*ys*xy_NE + xs*zs*xz_NE + ys*zs*yz_NE + feq[dPP0]; + f[dMM0] = f_NE + xs*x_NE + ys*y_NE + zs*z_NE + xs*ys*xy_NE + xs*zs*xz_NE + ys*zs*yz_NE + feq[dMM0]; + f[dPM0] = f_SE + xs*x_SE + ys*y_SE + zs*z_SE + xs*ys*xy_SE + xs*zs*xz_SE + ys*zs*yz_SE + feq[dPM0]; + f[dMP0] = f_SE + xs*x_SE + ys*y_SE + zs*z_SE + xs*ys*xy_SE + xs*zs*xz_SE + ys*zs*yz_SE + feq[dMP0]; + f[dP0P] = f_TE + xs*x_TE + ys*y_TE + zs*z_TE + xs*ys*xy_TE + xs*zs*xz_TE + ys*zs*yz_TE + feq[dP0P]; + f[dM0M] = f_TE + xs*x_TE + ys*y_TE + zs*z_TE + xs*ys*xy_TE + xs*zs*xz_TE + ys*zs*yz_TE + feq[dM0M]; + f[dP0M] = f_BE + xs*x_BE + ys*y_BE + zs*z_BE + xs*ys*xy_BE + xs*zs*xz_BE + ys*zs*yz_BE + feq[dP0M]; + f[dM0P] = f_BE + xs*x_BE + ys*y_BE + zs*z_BE + xs*ys*xy_BE + xs*zs*xz_BE + ys*zs*yz_BE + feq[dM0P]; + f[d0PP] = f_TN + xs*x_TN + ys*y_TN + zs*z_TN + xs*ys*xy_TN + xs*zs*xz_TN + ys*zs*yz_TN + feq[d0PP]; + f[d0MM] = f_TN + xs*x_TN + ys*y_TN + zs*z_TN + xs*ys*xy_TN + xs*zs*xz_TN + ys*zs*yz_TN + feq[d0MM]; + f[d0PM] = f_BN + xs*x_BN + ys*y_BN + zs*z_BN + xs*ys*xy_BN + xs*zs*xz_BN + ys*zs*yz_BN + feq[d0PM]; + f[d0MP] = f_BN + xs*x_BN + ys*y_BN + zs*z_BN + xs*ys*xy_BN + xs*zs*xz_BN + ys*zs*yz_BN + feq[d0MP]; + f[dPPP] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[dPPP]; + f[dMMP] = f_TSW + xs*x_TSW + ys*y_TSW + zs*z_TSW + xs*ys*xy_TSW + xs*zs*xz_TSW + ys*zs*yz_TSW + feq[dMMP]; + f[dPMP] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[dPMP]; + f[dMPP] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[dMPP]; + f[dPPM] = f_TSW + xs*x_TSW + ys*y_TSW + zs*z_TSW + xs*ys*xy_TSW + xs*zs*xz_TSW + ys*zs*yz_TSW + feq[dPPM]; + f[dMMM] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[dMMM]; + f[dPMM] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[dPMM]; + f[dMPM] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[dMPM]; + f[d000] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO + feq[d000]; } ////////////////////////////////////////////////////////////////////////// //Position SWB -0.25, -0.25, -0.25 @@ -670,33 +670,33 @@ void CompressibleOffsetInterpolator::calcInterpolatedNodeFC(real* f, real omega) f_TSE = eps_new*((ay - az + bx + bz - cx + cy+kxyAverage-kxzAverage+kyzAverage)/(c72o1*o)); f_TNW = eps_new*((ay + az + bx - bz + cx - cy+kxyAverage+kxzAverage-kyzAverage)/(c72o1*o)); - f[DIR_P00] = f_E + feq[DIR_P00]; - f[DIR_M00] = f_E + feq[DIR_M00]; - f[DIR_0P0] = f_N + feq[DIR_0P0]; - f[DIR_0M0] = f_N + feq[DIR_0M0]; - f[DIR_00P] = f_T + feq[DIR_00P]; - f[DIR_00M] = f_T + feq[DIR_00M]; - f[DIR_PP0] = f_NE + feq[DIR_PP0]; - f[DIR_MM0] = f_NE + feq[DIR_MM0]; - f[DIR_PM0] = f_SE + feq[DIR_PM0]; - f[DIR_MP0] = f_SE + feq[DIR_MP0]; - f[DIR_P0P] = f_TE + feq[DIR_P0P]; - f[DIR_M0M] = f_TE + feq[DIR_M0M]; - f[DIR_P0M] = f_BE + feq[DIR_P0M]; - f[DIR_M0P] = f_BE + feq[DIR_M0P]; - f[DIR_0PP] = f_TN + feq[DIR_0PP]; - f[DIR_0MM] = f_TN + feq[DIR_0MM]; - f[DIR_0PM] = f_BN + feq[DIR_0PM]; - f[DIR_0MP] = f_BN + feq[DIR_0MP]; - f[DIR_PPP] = f_TNE + feq[DIR_PPP]; - f[DIR_MPP] = f_TNW + feq[DIR_MPP]; - f[DIR_PMP] = f_TSE + feq[DIR_PMP]; - f[DIR_MMP] = f_TSW + feq[DIR_MMP]; - f[DIR_PPM] = f_TSW + feq[DIR_PPM]; - f[DIR_MPM] = f_TSE + feq[DIR_MPM]; - f[DIR_PMM] = f_TNW + feq[DIR_PMM]; - f[DIR_MMM] = f_TNE + feq[DIR_MMM]; - f[DIR_000] = f_ZERO + feq[DIR_000]; + f[dP00] = f_E + feq[dP00]; + f[dM00] = f_E + feq[dM00]; + f[d0P0] = f_N + feq[d0P0]; + f[d0M0] = f_N + feq[d0M0]; + f[d00P] = f_T + feq[d00P]; + f[d00M] = f_T + feq[d00M]; + f[dPP0] = f_NE + feq[dPP0]; + f[dMM0] = f_NE + feq[dMM0]; + f[dPM0] = f_SE + feq[dPM0]; + f[dMP0] = f_SE + feq[dMP0]; + f[dP0P] = f_TE + feq[dP0P]; + f[dM0M] = f_TE + feq[dM0M]; + f[dP0M] = f_BE + feq[dP0M]; + f[dM0P] = f_BE + feq[dM0P]; + f[d0PP] = f_TN + feq[d0PP]; + f[d0MM] = f_TN + feq[d0MM]; + f[d0PM] = f_BN + feq[d0PM]; + f[d0MP] = f_BN + feq[d0MP]; + f[dPPP] = f_TNE + feq[dPPP]; + f[dMPP] = f_TNW + feq[dMPP]; + f[dPMP] = f_TSE + feq[dPMP]; + f[dMMP] = f_TSW + feq[dMMP]; + f[dPPM] = f_TSW + feq[dPPM]; + f[dMPM] = f_TSE + feq[dMPM]; + f[dPMM] = f_TNW + feq[dPMM]; + f[dMMM] = f_TNE + feq[dMMM]; + f[d000] = f_ZERO + feq[d000]; } ////////////////////////////////////////////////////////////////////////// void CompressibleOffsetInterpolator::calcInterpolatedVelocity(real x, real y, real z, real& vx1, real& vx2, real& vx3) diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetInterpolator.h b/src/cpu/core/LBM/Interpolation/CompressibleOffsetInterpolator.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetInterpolator.h rename to src/cpu/core/LBM/Interpolation/CompressibleOffsetInterpolator.h diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetMomentsInterpolator.cpp b/src/cpu/core/LBM/Interpolation/CompressibleOffsetMomentsInterpolator.cpp similarity index 89% rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetMomentsInterpolator.cpp rename to src/cpu/core/LBM/Interpolation/CompressibleOffsetMomentsInterpolator.cpp index 9003b120688997efbe22d51f4178153a66231e38..e659227a0b09cb7ba214770efa9b19da33b2ee37 100644 --- a/src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetMomentsInterpolator.cpp +++ b/src/cpu/core/LBM/Interpolation/CompressibleOffsetMomentsInterpolator.cpp @@ -6,10 +6,10 @@ #include <lbm/refinement/InterpolationCF.h> #include <lbm/refinement/InterpolationFC.h> -#include <lbm/refinement/Coefficients.h> +#include <lbm/interpolation/InterpolationCoefficients.h> -void calculateCoefficients(vf::lbm::Coefficients& coefficients, const D3Q27ICell& icell, real omega, real xoff, real yoff, real zoff) +void calculateCoefficients(vf::lbm::InterpolationCoefficients& coefficients, const D3Q27ICell& icell, real omega, real xoff, real yoff, real zoff) { vf::lbm::MomentsOnSourceNodeSet momentsSet; @@ -43,7 +43,7 @@ void CompressibleOffsetMomentsInterpolator::setOmegas(real omegaC, real omegaF) void CompressibleOffsetMomentsInterpolator::interpolateCoarseToFine(D3Q27ICell& icellC, D3Q27ICell& icellF, real xoff, real yoff, real zoff) { - vf::lbm::Coefficients coefficients; + vf::lbm::InterpolationCoefficients coefficients; calculateCoefficients(coefficients, icellC, omegaC, xoff, yoff, zoff); vf::lbm::interpolateCF(icellF.BSW, omegaF, vf::basics::constant::c1o2, coefficients, -c1o4, -c1o4, -c1o4); @@ -58,7 +58,7 @@ void CompressibleOffsetMomentsInterpolator::interpolateCoarseToFine(D3Q27ICell& void CompressibleOffsetMomentsInterpolator::interpolateFineToCoarse(D3Q27ICell& icellF, real* icellC, real xoff, real yoff, real zoff) { - vf::lbm::Coefficients coefficients; + vf::lbm::InterpolationCoefficients coefficients; calculateCoefficients(coefficients, icellF, omegaF, xoff, yoff, zoff); vf::lbm::interpolateFC(icellC, vf::basics::constant::c2o1, omegaC, coefficients); diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetMomentsInterpolator.h b/src/cpu/core/LBM/Interpolation/CompressibleOffsetMomentsInterpolator.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetMomentsInterpolator.h rename to src/cpu/core/LBM/Interpolation/CompressibleOffsetMomentsInterpolator.h diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.cpp b/src/cpu/core/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.cpp similarity index 96% rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.cpp rename to src/cpu/core/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.cpp index 3b5d7386ae4e615a6f89d6ed07eb78d02b295799..c7fba8407e71e423c5e5231cc4ae220b438fefc9 100644 --- a/src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.cpp +++ b/src/cpu/core/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.cpp @@ -87,11 +87,11 @@ void CompressibleOffsetSquarePressureInterpolator::calcMoments(const real* const press = drho; //interpolate rho! - kxy = -c3o1*omega*((((f[DIR_MMP]+f[DIR_PPM])-(f[DIR_MPP]+f[DIR_PMM]))+((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_MPM]+f[DIR_PMP])))+((f[DIR_MM0]+f[DIR_PP0])-(f[DIR_MP0]+f[DIR_PM0]))/(c1o1 + drho)-(vx1*vx2));// might not be optimal MG 25.2.13 - kyz = -c3o1*omega*((((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_PMP]+f[DIR_MPM]))+((f[DIR_PMM]+f[DIR_MPP])-(f[DIR_MMP]+f[DIR_PPM])))+((f[DIR_0MM]+f[DIR_0PP])-(f[DIR_0MP]+f[DIR_0PM]))/(c1o1 + drho)-(vx2*vx3)); - kxz = -c3o1*omega*((((f[DIR_MPM]+f[DIR_PMP])-(f[DIR_MMP]+f[DIR_PPM]))+((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_PMM]+f[DIR_MPP])))+((f[DIR_M0M]+f[DIR_P0P])-(f[DIR_M0P]+f[DIR_P0M]))/(c1o1 + drho)-(vx1*vx3)); - kxxMyy = -c3o1/c2o1*omega*((((f[DIR_M0M]+f[DIR_P0P])-(f[DIR_0MM]+f[DIR_0PP]))+((f[DIR_M0P]+f[DIR_P0M])-(f[DIR_0MP]+f[DIR_0PM])))+((f[DIR_M00]+f[DIR_P00])-(f[DIR_0M0]+f[DIR_0P0]))/(c1o1 + drho)-(vx1*vx1-vx2*vx2)); - kxxMzz = -c3o1/c2o1*omega*((((f[DIR_MP0]+f[DIR_PM0])-(f[DIR_0MM]+f[DIR_0PP]))+((f[DIR_MM0]+f[DIR_PP0])-(f[DIR_0MP]+f[DIR_0PM])))+((f[DIR_M00]+f[DIR_P00])-(f[DIR_00M]+f[DIR_00P]))/(c1o1 + drho)-(vx1*vx1-vx3*vx3)); + kxy = -c3o1*omega*((((f[dMMP]+f[dPPM])-(f[dMPP]+f[dPMM]))+((f[dMMM]+f[dPPP])-(f[dMPM]+f[dPMP])))+((f[dMM0]+f[dPP0])-(f[dMP0]+f[dPM0]))/(c1o1 + drho)-(vx1*vx2));// might not be optimal MG 25.2.13 + kyz = -c3o1*omega*((((f[dMMM]+f[dPPP])-(f[dPMP]+f[dMPM]))+((f[dPMM]+f[dMPP])-(f[dMMP]+f[dPPM])))+((f[d0MM]+f[d0PP])-(f[d0MP]+f[d0PM]))/(c1o1 + drho)-(vx2*vx3)); + kxz = -c3o1*omega*((((f[dMPM]+f[dPMP])-(f[dMMP]+f[dPPM]))+((f[dMMM]+f[dPPP])-(f[dPMM]+f[dMPP])))+((f[dM0M]+f[dP0P])-(f[dM0P]+f[dP0M]))/(c1o1 + drho)-(vx1*vx3)); + kxxMyy = -c3o1/c2o1*omega*((((f[dM0M]+f[dP0P])-(f[d0MM]+f[d0PP]))+((f[dM0P]+f[dP0M])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d0M0]+f[d0P0]))/(c1o1 + drho)-(vx1*vx1-vx2*vx2)); + kxxMzz = -c3o1/c2o1*omega*((((f[dMP0]+f[dPM0])-(f[d0MM]+f[d0PP]))+((f[dMM0]+f[dPP0])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d00M]+f[d00P]))/(c1o1 + drho)-(vx1*vx1-vx3*vx3)); } ////////////////////////////////////////////////////////////////////////// void CompressibleOffsetSquarePressureInterpolator::calcInterpolatedCoefficiets(const D3Q27ICell& icell, real omega, real eps_new) @@ -783,33 +783,33 @@ void CompressibleOffsetSquarePressureInterpolator::calcInterpolatedNodeCF(real* mfccc = m2; //////////////////////////////////////////////////////////////////////////////////// - f[DIR_P00] = mfcbb; - f[DIR_M00] = mfabb; - f[DIR_0P0] = mfbcb; - f[DIR_0M0] = mfbab; - f[DIR_00P] = mfbbc; - f[DIR_00M] = mfbba; - f[DIR_PP0] = mfccb; - f[DIR_MM0] = mfaab; - f[DIR_PM0] = mfcab; - f[DIR_MP0] = mfacb; - f[DIR_P0P] = mfcbc; - f[DIR_M0M] = mfaba; - f[DIR_P0M] = mfcba; - f[DIR_M0P] = mfabc; - f[DIR_0PP] = mfbcc; - f[DIR_0MM] = mfbaa; - f[DIR_0PM] = mfbca; - f[DIR_0MP] = mfbac; - f[DIR_000] = mfbbb; - f[DIR_PPP] = mfccc; - f[DIR_PMP] = mfcac; - f[DIR_PPM] = mfcca; - f[DIR_PMM] = mfcaa; - f[DIR_MPP] = mfacc; - f[DIR_MMP] = mfaac; - f[DIR_MPM] = mfaca; - f[DIR_MMM] = mfaaa; + f[dP00] = mfcbb; + f[dM00] = mfabb; + f[d0P0] = mfbcb; + f[d0M0] = mfbab; + f[d00P] = mfbbc; + f[d00M] = mfbba; + f[dPP0] = mfccb; + f[dMM0] = mfaab; + f[dPM0] = mfcab; + f[dMP0] = mfacb; + f[dP0P] = mfcbc; + f[dM0M] = mfaba; + f[dP0M] = mfcba; + f[dM0P] = mfabc; + f[d0PP] = mfbcc; + f[d0MM] = mfbaa; + f[d0PM] = mfbca; + f[d0MP] = mfbac; + f[d000] = mfbbb; + f[dPPP] = mfccc; + f[dPMP] = mfcac; + f[dPPM] = mfcca; + f[dPMM] = mfcaa; + f[dMPP] = mfacc; + f[dMMP] = mfaac; + f[dMPM] = mfaca; + f[dMMM] = mfaaa; } ////////////////////////////////////////////////////////////////////////// //Position SWB -0.25, -0.25, -0.25 @@ -1237,33 +1237,33 @@ void CompressibleOffsetSquarePressureInterpolator::calcInterpolatedNodeFC(real* mfccc = m2; //////////////////////////////////////////////////////////////////////////////////// - f[DIR_P00] = mfcbb; - f[DIR_M00] = mfabb; - f[DIR_0P0] = mfbcb; - f[DIR_0M0] = mfbab; - f[DIR_00P] = mfbbc; - f[DIR_00M] = mfbba; - f[DIR_PP0] = mfccb; - f[DIR_MM0] = mfaab; - f[DIR_PM0] = mfcab; - f[DIR_MP0] = mfacb; - f[DIR_P0P] = mfcbc; - f[DIR_M0M] = mfaba; - f[DIR_P0M] = mfcba; - f[DIR_M0P] = mfabc; - f[DIR_0PP] = mfbcc; - f[DIR_0MM] = mfbaa; - f[DIR_0PM] = mfbca; - f[DIR_0MP] = mfbac; - f[DIR_000] = mfbbb; - f[DIR_PPP] = mfccc; - f[DIR_PMP] = mfcac; - f[DIR_PPM] = mfcca; - f[DIR_PMM] = mfcaa; - f[DIR_MPP] = mfacc; - f[DIR_MMP] = mfaac; - f[DIR_MPM] = mfaca; - f[DIR_MMM] = mfaaa; + f[dP00] = mfcbb; + f[dM00] = mfabb; + f[d0P0] = mfbcb; + f[d0M0] = mfbab; + f[d00P] = mfbbc; + f[d00M] = mfbba; + f[dPP0] = mfccb; + f[dMM0] = mfaab; + f[dPM0] = mfcab; + f[dMP0] = mfacb; + f[dP0P] = mfcbc; + f[dM0M] = mfaba; + f[dP0M] = mfcba; + f[dM0P] = mfabc; + f[d0PP] = mfbcc; + f[d0MM] = mfbaa; + f[d0PM] = mfbca; + f[d0MP] = mfbac; + f[d000] = mfbbb; + f[dPPP] = mfccc; + f[dPMP] = mfcac; + f[dPPM] = mfcca; + f[dPMM] = mfcaa; + f[dMPP] = mfacc; + f[dMMP] = mfaac; + f[dMPM] = mfaca; + f[dMMM] = mfaaa; } ////////////////////////////////////////////////////////////////////////// void CompressibleOffsetSquarePressureInterpolator::calcInterpolatedVelocity(real x, real y, real z, real& vx1, real& vx2, real& vx3) diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.h b/src/cpu/core/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.h rename to src/cpu/core/LBM/Interpolation/CompressibleOffsetSquarePressureInterpolator.h diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/IncompressibleOffsetInterpolator.cpp b/src/cpu/core/LBM/Interpolation/IncompressibleOffsetInterpolator.cpp similarity index 88% rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/IncompressibleOffsetInterpolator.cpp rename to src/cpu/core/LBM/Interpolation/IncompressibleOffsetInterpolator.cpp index a00c266191353e2124d1999b370d5ec6e51ec697..d8f7efac4cfab144e163bb0263993dc8ba997d17 100644 --- a/src/cpu/VirtualFluidsCore/LBM/Interpolation/IncompressibleOffsetInterpolator.cpp +++ b/src/cpu/core/LBM/Interpolation/IncompressibleOffsetInterpolator.cpp @@ -65,7 +65,7 @@ void IncompressibleOffsetInterpolator::calcMoments(const real* const f, real ome using namespace vf::lbm::dir; using namespace vf::basics::constant; - //UBLOG(logINFO,"D3Q27System::DIR_M0M = " << D3Q27System::DIR_M0M); + //UBLOG(logINFO,"D3Q27System::dM0M = " << D3Q27System::dM0M); //UBLOG(logINFO,"BW = " << BW);; real rho = c0o1; @@ -86,14 +86,14 @@ void IncompressibleOffsetInterpolator::calcMoments(const real* const f, real ome //press = D3Q27System::calcPress(f,rho,vx1,vx2,vx3); press = rho; //interpolate rho! - kxy = -c3o1*omega*((((f[DIR_MMP]+f[DIR_PPM])-(f[DIR_MPP]+f[DIR_PMM]))+((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_MPM]+f[DIR_PMP])))+((f[DIR_MM0]+f[DIR_PP0])-(f[DIR_MP0]+f[DIR_PM0]))-(vx1*vx2));// might not be optimal MG 25.2.13 - kyz = -c3o1*omega*((((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_PMP]+f[DIR_MPM]))+((f[DIR_PMM]+f[DIR_MPP])-(f[DIR_MMP]+f[DIR_PPM])))+((f[DIR_0MM]+f[DIR_0PP])-(f[DIR_0MP]+f[DIR_0PM]))-(vx2*vx3)); - kxz = -c3o1*omega*((((f[DIR_MPM]+f[DIR_PMP])-(f[DIR_MMP]+f[DIR_PPM]))+((f[DIR_MMM]+f[DIR_PPP])-(f[DIR_PMM]+f[DIR_MPP])))+((f[DIR_M0M]+f[DIR_P0P])-(f[DIR_M0P]+f[DIR_P0M]))-(vx1*vx3)); - kxxMyy = -c3o1/c2o1*omega*((((f[DIR_M0M]+f[DIR_P0P])-(f[DIR_0MM]+f[DIR_0PP]))+((f[DIR_M0P]+f[DIR_P0M])-(f[DIR_0MP]+f[DIR_0PM])))+((f[DIR_M00]+f[DIR_P00])-(f[DIR_0M0]+f[DIR_0P0]))-(vx1*vx1-vx2*vx2)); - kxxMzz = -c3o1/c2o1*omega*((((f[DIR_MP0]+f[DIR_PM0])-(f[DIR_0MM]+f[DIR_0PP]))+((f[DIR_MM0]+f[DIR_PP0])-(f[DIR_0MP]+f[DIR_0PM])))+((f[DIR_M00]+f[DIR_P00])-(f[DIR_00M]+f[DIR_00P]))-(vx1*vx1-vx3*vx3)); - //kxxMzz = -c3o1/c2o1*omega*(((((f[NW]+f[SE])-(f[BS]+f[TN]))+((f[SW]+f[NE])-(f[17]+f[BN])))+((f[W]+f[DIR_P00])-(f[B]+f[T])))-(vx1*vx1-vx3*vx3)); + kxy = -c3o1*omega*((((f[dMMP]+f[dPPM])-(f[dMPP]+f[dPMM]))+((f[dMMM]+f[dPPP])-(f[dMPM]+f[dPMP])))+((f[dMM0]+f[dPP0])-(f[dMP0]+f[dPM0]))-(vx1*vx2));// might not be optimal MG 25.2.13 + kyz = -c3o1*omega*((((f[dMMM]+f[dPPP])-(f[dPMP]+f[dMPM]))+((f[dPMM]+f[dMPP])-(f[dMMP]+f[dPPM])))+((f[d0MM]+f[d0PP])-(f[d0MP]+f[d0PM]))-(vx2*vx3)); + kxz = -c3o1*omega*((((f[dMPM]+f[dPMP])-(f[dMMP]+f[dPPM]))+((f[dMMM]+f[dPPP])-(f[dPMM]+f[dMPP])))+((f[dM0M]+f[dP0P])-(f[dM0P]+f[dP0M]))-(vx1*vx3)); + kxxMyy = -c3o1/c2o1*omega*((((f[dM0M]+f[dP0P])-(f[d0MM]+f[d0PP]))+((f[dM0P]+f[dP0M])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d0M0]+f[d0P0]))-(vx1*vx1-vx2*vx2)); + kxxMzz = -c3o1/c2o1*omega*((((f[dMP0]+f[dPM0])-(f[d0MM]+f[d0PP]))+((f[dMM0]+f[dPP0])-(f[d0MP]+f[d0PM])))+((f[dM00]+f[dP00])-(f[d00M]+f[d00P]))-(vx1*vx1-vx3*vx3)); + //kxxMzz = -c3o1/c2o1*omega*(((((f[NW]+f[SE])-(f[BS]+f[TN]))+((f[SW]+f[NE])-(f[17]+f[BN])))+((f[W]+f[dP00])-(f[B]+f[T])))-(vx1*vx1-vx3*vx3)); - //UBLOG(logINFO, "t1 = "<<(((f[NW]+f[SE])-(f[BS]+f[TN]))+((f[SW]+f[NE])-(f[17]+f[BN])))+((f[W]+f[DIR_P00])-(f[B]+f[T]))); + //UBLOG(logINFO, "t1 = "<<(((f[NW]+f[SE])-(f[BS]+f[TN]))+((f[SW]+f[NE])-(f[17]+f[BN])))+((f[W]+f[dP00])-(f[B]+f[T]))); //UBLOG(logINFO, "kxxMzz = "<<kxxMzz); //UBLOG(logINFO,"f[BW] = " << f[BW] << " BW = " << BW); @@ -551,33 +551,33 @@ void IncompressibleOffsetInterpolator::calcInterpolatedNode(real* f, real /*ome real feq[ENDF+1]; D3Q27System::calcIncompFeq(feq,rho,vx1,vx2,vx3); - f[DIR_P00] = f_E + xs*x_E + ys*y_E + zs*z_E + xs*ys*xy_E + xs*zs*xz_E + ys*zs*yz_E + feq[DIR_P00]; - f[DIR_M00] = f_E + xs*x_E + ys*y_E + zs*z_E + xs*ys*xy_E + xs*zs*xz_E + ys*zs*yz_E + feq[DIR_M00]; - f[DIR_0P0] = f_N + xs*x_N + ys*y_N + zs*z_N + xs*ys*xy_N + xs*zs*xz_N + ys*zs*yz_N + feq[DIR_0P0]; - f[DIR_0M0] = f_N + xs*x_N + ys*y_N + zs*z_N + xs*ys*xy_N + xs*zs*xz_N + ys*zs*yz_N + feq[DIR_0M0]; - f[DIR_00P] = f_T + xs*x_T + ys*y_T + zs*z_T + xs*ys*xy_T + xs*zs*xz_T + ys*zs*yz_T + feq[DIR_00P]; - f[DIR_00M] = f_T + xs*x_T + ys*y_T + zs*z_T + xs*ys*xy_T + xs*zs*xz_T + ys*zs*yz_T + feq[DIR_00M]; - f[DIR_PP0] = f_NE + xs*x_NE + ys*y_NE + zs*z_NE + xs*ys*xy_NE + xs*zs*xz_NE + ys*zs*yz_NE + feq[DIR_PP0]; - f[DIR_MM0] = f_NE + xs*x_NE + ys*y_NE + zs*z_NE + xs*ys*xy_NE + xs*zs*xz_NE + ys*zs*yz_NE + feq[DIR_MM0]; - f[DIR_PM0] = f_SE + xs*x_SE + ys*y_SE + zs*z_SE + xs*ys*xy_SE + xs*zs*xz_SE + ys*zs*yz_SE + feq[DIR_PM0]; - f[DIR_MP0] = f_SE + xs*x_SE + ys*y_SE + zs*z_SE + xs*ys*xy_SE + xs*zs*xz_SE + ys*zs*yz_SE + feq[DIR_MP0]; - f[DIR_P0P] = f_TE + xs*x_TE + ys*y_TE + zs*z_TE + xs*ys*xy_TE + xs*zs*xz_TE + ys*zs*yz_TE + feq[DIR_P0P]; - f[DIR_M0M] = f_TE + xs*x_TE + ys*y_TE + zs*z_TE + xs*ys*xy_TE + xs*zs*xz_TE + ys*zs*yz_TE + feq[DIR_M0M]; - f[DIR_P0M] = f_BE + xs*x_BE + ys*y_BE + zs*z_BE + xs*ys*xy_BE + xs*zs*xz_BE + ys*zs*yz_BE + feq[DIR_P0M]; - f[DIR_M0P] = f_BE + xs*x_BE + ys*y_BE + zs*z_BE + xs*ys*xy_BE + xs*zs*xz_BE + ys*zs*yz_BE + feq[DIR_M0P]; - f[DIR_0PP] = f_TN + xs*x_TN + ys*y_TN + zs*z_TN + xs*ys*xy_TN + xs*zs*xz_TN + ys*zs*yz_TN + feq[DIR_0PP]; - f[DIR_0MM] = f_TN + xs*x_TN + ys*y_TN + zs*z_TN + xs*ys*xy_TN + xs*zs*xz_TN + ys*zs*yz_TN + feq[DIR_0MM]; - f[DIR_0PM] = f_BN + xs*x_BN + ys*y_BN + zs*z_BN + xs*ys*xy_BN + xs*zs*xz_BN + ys*zs*yz_BN + feq[DIR_0PM]; - f[DIR_0MP] = f_BN + xs*x_BN + ys*y_BN + zs*z_BN + xs*ys*xy_BN + xs*zs*xz_BN + ys*zs*yz_BN + feq[DIR_0MP]; - f[DIR_PPP] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[DIR_PPP]; - f[DIR_MMP] = f_TSW + xs*x_TSW + ys*y_TSW + zs*z_TSW + xs*ys*xy_TSW + xs*zs*xz_TSW + ys*zs*yz_TSW + feq[DIR_MMP]; - f[DIR_PMP] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[DIR_PMP]; - f[DIR_MPP] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[DIR_MPP]; - f[DIR_PPM] = f_TSW + xs*x_TSW + ys*y_TSW + zs*z_TSW + xs*ys*xy_TSW + xs*zs*xz_TSW + ys*zs*yz_TSW + feq[DIR_PPM]; - f[DIR_MMM] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[DIR_MMM]; - f[DIR_PMM] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[DIR_PMM]; - f[DIR_MPM] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[DIR_MPM]; - f[DIR_000] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO + feq[DIR_000]; + f[dP00] = f_E + xs*x_E + ys*y_E + zs*z_E + xs*ys*xy_E + xs*zs*xz_E + ys*zs*yz_E + feq[dP00]; + f[dM00] = f_E + xs*x_E + ys*y_E + zs*z_E + xs*ys*xy_E + xs*zs*xz_E + ys*zs*yz_E + feq[dM00]; + f[d0P0] = f_N + xs*x_N + ys*y_N + zs*z_N + xs*ys*xy_N + xs*zs*xz_N + ys*zs*yz_N + feq[d0P0]; + f[d0M0] = f_N + xs*x_N + ys*y_N + zs*z_N + xs*ys*xy_N + xs*zs*xz_N + ys*zs*yz_N + feq[d0M0]; + f[d00P] = f_T + xs*x_T + ys*y_T + zs*z_T + xs*ys*xy_T + xs*zs*xz_T + ys*zs*yz_T + feq[d00P]; + f[d00M] = f_T + xs*x_T + ys*y_T + zs*z_T + xs*ys*xy_T + xs*zs*xz_T + ys*zs*yz_T + feq[d00M]; + f[dPP0] = f_NE + xs*x_NE + ys*y_NE + zs*z_NE + xs*ys*xy_NE + xs*zs*xz_NE + ys*zs*yz_NE + feq[dPP0]; + f[dMM0] = f_NE + xs*x_NE + ys*y_NE + zs*z_NE + xs*ys*xy_NE + xs*zs*xz_NE + ys*zs*yz_NE + feq[dMM0]; + f[dPM0] = f_SE + xs*x_SE + ys*y_SE + zs*z_SE + xs*ys*xy_SE + xs*zs*xz_SE + ys*zs*yz_SE + feq[dPM0]; + f[dMP0] = f_SE + xs*x_SE + ys*y_SE + zs*z_SE + xs*ys*xy_SE + xs*zs*xz_SE + ys*zs*yz_SE + feq[dMP0]; + f[dP0P] = f_TE + xs*x_TE + ys*y_TE + zs*z_TE + xs*ys*xy_TE + xs*zs*xz_TE + ys*zs*yz_TE + feq[dP0P]; + f[dM0M] = f_TE + xs*x_TE + ys*y_TE + zs*z_TE + xs*ys*xy_TE + xs*zs*xz_TE + ys*zs*yz_TE + feq[dM0M]; + f[dP0M] = f_BE + xs*x_BE + ys*y_BE + zs*z_BE + xs*ys*xy_BE + xs*zs*xz_BE + ys*zs*yz_BE + feq[dP0M]; + f[dM0P] = f_BE + xs*x_BE + ys*y_BE + zs*z_BE + xs*ys*xy_BE + xs*zs*xz_BE + ys*zs*yz_BE + feq[dM0P]; + f[d0PP] = f_TN + xs*x_TN + ys*y_TN + zs*z_TN + xs*ys*xy_TN + xs*zs*xz_TN + ys*zs*yz_TN + feq[d0PP]; + f[d0MM] = f_TN + xs*x_TN + ys*y_TN + zs*z_TN + xs*ys*xy_TN + xs*zs*xz_TN + ys*zs*yz_TN + feq[d0MM]; + f[d0PM] = f_BN + xs*x_BN + ys*y_BN + zs*z_BN + xs*ys*xy_BN + xs*zs*xz_BN + ys*zs*yz_BN + feq[d0PM]; + f[d0MP] = f_BN + xs*x_BN + ys*y_BN + zs*z_BN + xs*ys*xy_BN + xs*zs*xz_BN + ys*zs*yz_BN + feq[d0MP]; + f[dPPP] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[dPPP]; + f[dMMP] = f_TSW + xs*x_TSW + ys*y_TSW + zs*z_TSW + xs*ys*xy_TSW + xs*zs*xz_TSW + ys*zs*yz_TSW + feq[dMMP]; + f[dPMP] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[dPMP]; + f[dMPP] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[dMPP]; + f[dPPM] = f_TSW + xs*x_TSW + ys*y_TSW + zs*z_TSW + xs*ys*xy_TSW + xs*zs*xz_TSW + ys*zs*yz_TSW + feq[dPPM]; + f[dMMM] = f_TNE + xs*x_TNE + ys*y_TNE + zs*z_TNE + xs*ys*xy_TNE + xs*zs*xz_TNE + ys*zs*yz_TNE + feq[dMMM]; + f[dPMM] = f_TNW + xs*x_TNW + ys*y_TNW + zs*z_TNW + xs*ys*xy_TNW + xs*zs*xz_TNW + ys*zs*yz_TNW + feq[dPMM]; + f[dMPM] = f_TSE + xs*x_TSE + ys*y_TSE + zs*z_TSE + xs*ys*xy_TSE + xs*zs*xz_TSE + ys*zs*yz_TSE + feq[dMPM]; + f[d000] = f_ZERO + xs*x_ZERO + ys*y_ZERO + zs*z_ZERO + feq[d000]; } ////////////////////////////////////////////////////////////////////////// //Position SWB -0.25, -0.25, -0.25 @@ -763,33 +763,33 @@ void IncompressibleOffsetInterpolator::calcInterpolatedNodeFC(real* f, real omeg f_TSE = eps_new*((ay - az + bx + bz - cx + cy+kxyAverage-kxzAverage+kyzAverage)/(c72o1*o)); f_TNW = eps_new*((ay + az + bx - bz + cx - cy+kxyAverage+kxzAverage-kyzAverage)/(c72o1*o)); - f[DIR_P00] = f_E + feq[DIR_P00]; - f[DIR_M00] = f_E + feq[DIR_M00]; - f[DIR_0P0] = f_N + feq[DIR_0P0]; - f[DIR_0M0] = f_N + feq[DIR_0M0]; - f[DIR_00P] = f_T + feq[DIR_00P]; - f[DIR_00M] = f_T + feq[DIR_00M]; - f[DIR_PP0] = f_NE + feq[DIR_PP0]; - f[DIR_MM0] = f_NE + feq[DIR_MM0]; - f[DIR_PM0] = f_SE + feq[DIR_PM0]; - f[DIR_MP0] = f_SE + feq[DIR_MP0]; - f[DIR_P0P] = f_TE + feq[DIR_P0P]; - f[DIR_M0M] = f_TE + feq[DIR_M0M]; - f[DIR_P0M] = f_BE + feq[DIR_P0M]; - f[DIR_M0P] = f_BE + feq[DIR_M0P]; - f[DIR_0PP] = f_TN + feq[DIR_0PP]; - f[DIR_0MM] = f_TN + feq[DIR_0MM]; - f[DIR_0PM] = f_BN + feq[DIR_0PM]; - f[DIR_0MP] = f_BN + feq[DIR_0MP]; - f[DIR_PPP] = f_TNE + feq[DIR_PPP]; - f[DIR_MPP] = f_TNW + feq[DIR_MPP]; - f[DIR_PMP] = f_TSE + feq[DIR_PMP]; - f[DIR_MMP] = f_TSW + feq[DIR_MMP]; - f[DIR_PPM] = f_TSW + feq[DIR_PPM]; - f[DIR_MPM] = f_TSE + feq[DIR_MPM]; - f[DIR_PMM] = f_TNW + feq[DIR_PMM]; - f[DIR_MMM] = f_TNE + feq[DIR_MMM]; - f[DIR_000] = f_ZERO + feq[DIR_000]; + f[dP00] = f_E + feq[dP00]; + f[dM00] = f_E + feq[dM00]; + f[d0P0] = f_N + feq[d0P0]; + f[d0M0] = f_N + feq[d0M0]; + f[d00P] = f_T + feq[d00P]; + f[d00M] = f_T + feq[d00M]; + f[dPP0] = f_NE + feq[dPP0]; + f[dMM0] = f_NE + feq[dMM0]; + f[dPM0] = f_SE + feq[dPM0]; + f[dMP0] = f_SE + feq[dMP0]; + f[dP0P] = f_TE + feq[dP0P]; + f[dM0M] = f_TE + feq[dM0M]; + f[dP0M] = f_BE + feq[dP0M]; + f[dM0P] = f_BE + feq[dM0P]; + f[d0PP] = f_TN + feq[d0PP]; + f[d0MM] = f_TN + feq[d0MM]; + f[d0PM] = f_BN + feq[d0PM]; + f[d0MP] = f_BN + feq[d0MP]; + f[dPPP] = f_TNE + feq[dPPP]; + f[dMPP] = f_TNW + feq[dMPP]; + f[dPMP] = f_TSE + feq[dPMP]; + f[dMMP] = f_TSW + feq[dMMP]; + f[dPPM] = f_TSW + feq[dPPM]; + f[dMPM] = f_TSE + feq[dMPM]; + f[dPMM] = f_TNW + feq[dPMM]; + f[dMMM] = f_TNE + feq[dMMM]; + f[d000] = f_ZERO + feq[d000]; } ////////////////////////////////////////////////////////////////////////// void IncompressibleOffsetInterpolator::calcInterpolatedVelocity(real x, real y, real z, real& vx1, real& vx2, real& vx3) diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/IncompressibleOffsetInterpolator.h b/src/cpu/core/LBM/Interpolation/IncompressibleOffsetInterpolator.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/IncompressibleOffsetInterpolator.h rename to src/cpu/core/LBM/Interpolation/IncompressibleOffsetInterpolator.h diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/Interpolator.cpp b/src/cpu/core/LBM/Interpolation/Interpolator.cpp similarity index 86% rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/Interpolator.cpp rename to src/cpu/core/LBM/Interpolation/Interpolator.cpp index f28b1efed4836ca71b09a390078dd2aaf5463710..8bbd38b51b8351a93c4a544c50abc6194aed6648 100644 --- a/src/cpu/VirtualFluidsCore/LBM/Interpolation/Interpolator.cpp +++ b/src/cpu/core/LBM/Interpolation/Interpolator.cpp @@ -18,49 +18,49 @@ struct Range ////////////////////////////////////////////////////////////////////////// void Interpolator::readICell(SPtr<DistributionArray3D> f, D3Q27ICell &icell, int x1, int x2, int x3) { - f->getDistribution(icell.BSW, x1, x2, x3); - f->getDistribution(icell.BSE, x1 + 1, x2, x3); - f->getDistribution(icell.BNW, x1, x2 + 1, x3); - f->getDistribution(icell.BNE, x1 + 1, x2 + 1, x3); - f->getDistribution(icell.TSW, x1, x2, x3 + 1); - f->getDistribution(icell.TSE, x1 + 1, x2, x3 + 1); - f->getDistribution(icell.TNW, x1, x2 + 1, x3 + 1); - f->getDistribution(icell.TNE, x1 + 1, x2 + 1, x3 + 1); + f->getPreCollisionDistribution(icell.BSW, x1, x2, x3); + f->getPreCollisionDistribution(icell.BSE, x1 + 1, x2, x3); + f->getPreCollisionDistribution(icell.BNW, x1, x2 + 1, x3); + f->getPreCollisionDistribution(icell.BNE, x1 + 1, x2 + 1, x3); + f->getPreCollisionDistribution(icell.TSW, x1, x2, x3 + 1); + f->getPreCollisionDistribution(icell.TSE, x1 + 1, x2, x3 + 1); + f->getPreCollisionDistribution(icell.TNW, x1, x2 + 1, x3 + 1); + f->getPreCollisionDistribution(icell.TNE, x1 + 1, x2 + 1, x3 + 1); } ////////////////////////////////////////////////////////////////////////// void Interpolator::writeICell(SPtr<DistributionArray3D> f, const D3Q27ICell &icell, int x1, int x2, int x3) { - f->setDistribution(icell.BSW, x1, x2, x3); - f->setDistribution(icell.BSE, x1 + 1, x2, x3); - f->setDistribution(icell.BNW, x1, x2 + 1, x3); - f->setDistribution(icell.BNE, x1 + 1, x2 + 1, x3); - f->setDistribution(icell.TSW, x1, x2, x3 + 1); - f->setDistribution(icell.TSE, x1 + 1, x2, x3 + 1); - f->setDistribution(icell.TNW, x1, x2 + 1, x3 + 1); - f->setDistribution(icell.TNE, x1 + 1, x2 + 1, x3 + 1); + f->setPostCollisionDistribution(icell.BSW, x1, x2, x3); + f->setPostCollisionDistribution(icell.BSE, x1 + 1, x2, x3); + f->setPostCollisionDistribution(icell.BNW, x1, x2 + 1, x3); + f->setPostCollisionDistribution(icell.BNE, x1 + 1, x2 + 1, x3); + f->setPostCollisionDistribution(icell.TSW, x1, x2, x3 + 1); + f->setPostCollisionDistribution(icell.TSE, x1 + 1, x2, x3 + 1); + f->setPostCollisionDistribution(icell.TNW, x1, x2 + 1, x3 + 1); + f->setPostCollisionDistribution(icell.TNE, x1 + 1, x2 + 1, x3 + 1); } ////////////////////////////////////////////////////////////////////////// void Interpolator::writeICellInv(SPtr<DistributionArray3D> f, const D3Q27ICell &icell, int x1, int x2, int x3) { - f->setDistributionInv(icell.BSW, x1, x2, x3); - f->setDistributionInv(icell.BSE, x1 + 1, x2, x3); - f->setDistributionInv(icell.BNW, x1, x2 + 1, x3); - f->setDistributionInv(icell.BNE, x1 + 1, x2 + 1, x3); - f->setDistributionInv(icell.TSW, x1, x2, x3 + 1); - f->setDistributionInv(icell.TSE, x1 + 1, x2, x3 + 1); - f->setDistributionInv(icell.TNW, x1, x2 + 1, x3 + 1); - f->setDistributionInv(icell.TNE, x1 + 1, x2 + 1, x3 + 1); + f->setPreCollisionDistribution(icell.BSW, x1, x2, x3); + f->setPreCollisionDistribution(icell.BSE, x1 + 1, x2, x3); + f->setPreCollisionDistribution(icell.BNW, x1, x2 + 1, x3); + f->setPreCollisionDistribution(icell.BNE, x1 + 1, x2 + 1, x3); + f->setPreCollisionDistribution(icell.TSW, x1, x2, x3 + 1); + f->setPreCollisionDistribution(icell.TSE, x1 + 1, x2, x3 + 1); + f->setPreCollisionDistribution(icell.TNW, x1, x2 + 1, x3 + 1); + f->setPreCollisionDistribution(icell.TNE, x1 + 1, x2 + 1, x3 + 1); } ////////////////////////////////////////////////////////////////////////// void Interpolator::writeINode(SPtr<DistributionArray3D> f, const real *const inode, int x1, int x2, int x3) { - f->setDistribution(inode, x1, x2, x3); + f->setPostCollisionDistribution(inode, x1, x2, x3); } ////////////////////////////////////////////////////////////////////////// void Interpolator::writeINodeInv(SPtr<DistributionArray3D> f, const real *const inode, int x1, int x2, int x3) { - f->setDistributionInv(inode, x1, x2, x3); + f->setPreCollisionDistribution(inode, x1, x2, x3); } ////////////////////////////////////////////////////////////////////////// bool Interpolator::iCellHasSolid(const SPtr<BCArray3D> bcArray, int x1, int x2, int x3) diff --git a/src/cpu/VirtualFluidsCore/LBM/Interpolation/Interpolator.h b/src/cpu/core/LBM/Interpolation/Interpolator.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/Interpolation/Interpolator.h rename to src/cpu/core/LBM/Interpolation/Interpolator.h diff --git a/src/cpu/core/LBM/K17CompressibleNavierStokes.cpp b/src/cpu/core/LBM/K17CompressibleNavierStokes.cpp new file mode 100644 index 0000000000000000000000000000000000000000..4287254015ad9ee8c6d1250636c15989cd81242b --- /dev/null +++ b/src/cpu/core/LBM/K17CompressibleNavierStokes.cpp @@ -0,0 +1,163 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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/>. +// +//! \file CumulantK17LBMKernel.cpp +//! \ingroup LBM +//! \author Konstantin Kutscher, Martin Geier +//======================================================================================= +#include "K17CompressibleNavierStokes.h" + +#include <lbm/collision/CollisionParameter.h> +#include <lbm/collision/K17CompressibleNavierStokes.h> +#include <lbm/collision/TurbulentViscosity.h> + +#include "BCArray3D.h" +#include "BCSet.h" +#include "Block3D.h" +#include "D3Q27EsoTwist3DSplittedVector.h" +#include "D3Q27System.h" +#include "DataSet3D.h" +#include "LBMKernel.h" + +K17CompressibleNavierStokes::K17CompressibleNavierStokes() +{ + this->compressible = true; +} + +void K17CompressibleNavierStokes::initDataSet() +{ + SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0] + 2, nx[1] + 2, nx[2] + 2, -999.9)); + dataSet->setFdistributions(d); +} + +SPtr<LBMKernel> K17CompressibleNavierStokes::clone() +{ + SPtr<LBMKernel> kernel(new K17CompressibleNavierStokes()); + kernel->setNX(nx); + std::dynamic_pointer_cast<K17CompressibleNavierStokes>(kernel)->initDataSet(); + kernel->setCollisionFactor(this->collFactor); + kernel->setBCSet(bcSet->clone(kernel)); + kernel->setWithForcing(withForcing); + kernel->setForcingX1(muForcingX1); + kernel->setForcingX2(muForcingX2); + kernel->setForcingX3(muForcingX3); + kernel->setIndex(ix1, ix2, ix3); + kernel->setDeltaT(deltaT); + kernel->setBlock(block.lock()); + + return kernel; +} + +void K17CompressibleNavierStokes::calculate(int step) +{ + (void)step; // parameter unused + + mu::value_type muX1, muX2, muX3; + mu::value_type muDeltaT; + mu::value_type muNu; + + if (withForcing) { + muForcingX1.DefineVar("x1", &muX1); muForcingX1.DefineVar("x2", &muX2); muForcingX1.DefineVar("x3", &muX3); + muForcingX2.DefineVar("x1", &muX1); muForcingX2.DefineVar("x2", &muX2); muForcingX2.DefineVar("x3", &muX3); + muForcingX3.DefineVar("x1", &muX1); muForcingX3.DefineVar("x2", &muX2); muForcingX3.DefineVar("x3", &muX3); + + muDeltaT = deltaT; + + muForcingX1.DefineVar("dt", &muDeltaT); + muForcingX2.DefineVar("dt", &muDeltaT); + muForcingX3.DefineVar("dt", &muDeltaT); + + muNu = (c1o1 / c3o1) * (c1o1 / collFactor - c1o1 / c2o1); + + muForcingX1.DefineVar("nu", &muNu); + muForcingX2.DefineVar("nu", &muNu); + muForcingX3.DefineVar("nu", &muNu); + } + + auto localDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); + auto nonLocalDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); + auto restDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); + + SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); + + const int bcArrayMaxX1 = (int)bcArray->getNX1(); + const int bcArrayMaxX2 = (int)bcArray->getNX2(); + const int bcArrayMaxX3 = (int)bcArray->getNX3(); + + const int minX1 = ghostLayerWidth; + const int minX2 = ghostLayerWidth; + const int minX3 = ghostLayerWidth; + const int maxX1 = bcArrayMaxX1 - ghostLayerWidth; + const int maxX2 = bcArrayMaxX2 - ghostLayerWidth; + const int maxX3 = bcArrayMaxX3 - ghostLayerWidth; + + const real omega = collFactor; + + for (int x3 = minX3; x3 < maxX3; x3++) { + for (int x2 = minX2; x2 < maxX2; x2++) { + for (int x1 = minX1; x1 < maxX1; x1++) { + + if (bcArray->isSolid(x1, x2, x3) || bcArray->isUndefined(x1, x2, x3)) { + continue; + } + + vf::lbm::CollisionParameter parameter; + dataSet->getFdistributions()->getPreCollisionDistribution(parameter.distribution, x1, x2, x3); + + real forces[3] = { c0o1, c0o1, c0o1 }; + if (withForcing) // TODO: add level factor? + { + muX1 = static_cast<real>(x1 - 1 + ix1 * maxX1); + muX2 = static_cast<real>(x2 - 1 + ix2 * maxX2); + muX3 = static_cast<real>(x3 - 1 + ix3 * maxX3); + + const real forcingX1 = muForcingX1.Eval(); + const real forcingX2 = muForcingX2.Eval(); + const real forcingX3 = muForcingX3.Eval(); + + forces[0] = forcingX1 * deltaT; + forces[1] = forcingX2 * deltaT; + forces[2] = forcingX3 * deltaT; + } + parameter.forceX = forces[0]; + parameter.forceY = forces[1]; + parameter.forceZ = forces[2]; + + parameter.omega = omega; + + real quadricLimiter[3] = { 0.01, 0.01, 0.01 }; // TODO: Where do we configure the quadricLimiter? + parameter.quadricLimiter = quadricLimiter; + + vf::lbm::MacroscopicValues mv; // not used + vf::lbm::TurbulentViscosity tv; // not used + vf::lbm::runK17CompressibleNavierStokes<vf::lbm::TurbulenceModel::None>(parameter, mv, tv); + dataSet->getFdistributions()->setPostCollisionDistribution(parameter.distribution, x1, x2, x3); + } + } + } +} diff --git a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernelUnified.h b/src/cpu/core/LBM/K17CompressibleNavierStokes.h similarity index 73% rename from src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernelUnified.h rename to src/cpu/core/LBM/K17CompressibleNavierStokes.h index 9c6876f4d4de855f931ea90e8764cb1e9a39202a..6c6268206b09398ab07150f3a03fd2cdeaf40e30 100644 --- a/src/cpu/VirtualFluidsCore/LBM/CumulantK17LBMKernelUnified.h +++ b/src/cpu/core/LBM/K17CompressibleNavierStokes.h @@ -31,15 +31,14 @@ //! \author Konstantin Kutscher, Martin Geier //======================================================================================= -#ifndef CumulantK17LBMKernelUnified_h__ -#define CumulantK17LBMKernelUnified_h__ +#ifndef CPU_K17COMPRESSIBLENAVIERSTOKES_H +#define CPU_K17COMPRESSIBLENAVIERSTOKES_H + +#include <memory> + +#include <basics/DataTypes.h> #include "LBMKernel.h" -#include "BCSet.h" -#include "D3Q27System.h" -#include "basics/utilities/UbTiming.h" -#include "basics/container/CbArray4D.h" -#include "basics/container/CbArray3D.h" //! \brief Compressible cumulant LBM kernel. //! \details LBM implementation that use Cascaded Cumulant Lattice Boltzmann method for D3Q27 model @@ -48,30 +47,19 @@ //! <a href="http://dx.doi.org/10.1016/j.jcp.2017.05.040"><b>[ Geier et al., (2017), 10.1016/j.jcp.2017.05.040]</b></a>, //! <a href="http://dx.doi.org/10.1016/j.jcp.2017.07.004"><b>[ Geier et al., (2017), 10.1016/j.jcp.2017.07.004]</b></a> //! -class CumulantK17LBMKernelUnified : public LBMKernel +class K17CompressibleNavierStokes : public LBMKernel { public: - CumulantK17LBMKernelUnified(); - ~CumulantK17LBMKernelUnified() = default; + K17CompressibleNavierStokes(); void calculate(int step) override; - SPtr<LBMKernel> clone() override; - real getCalculationTime() override { return .0; } - -protected: - virtual void initDataSet(); - real f[D3Q27System::ENDF + 1]; + std::shared_ptr<LBMKernel> clone() override; + real getCalculationTime() override + { + return .0; + } - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr localDistributions; - CbArray4D<real, IndexerX4X3X2X1>::CbArray4DPtr nonLocalDistributions; - CbArray3D<real, IndexerX3X2X1>::CbArray3DPtr restDistributions; - - mu::value_type muX1, muX2, muX3; - mu::value_type muDeltaT; - mu::value_type muNu; - real forcingX1; - real forcingX2; - real forcingX3; +private: + void initDataSet(); }; - -#endif // CumulantK17LBMKernel_h__ \ No newline at end of file +#endif diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMKernel.cpp b/src/cpu/core/LBM/LBMKernel.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/LBMKernel.cpp rename to src/cpu/core/LBM/LBMKernel.cpp diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMKernel.h b/src/cpu/core/LBM/LBMKernel.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/LBMKernel.h rename to src/cpu/core/LBM/LBMKernel.h diff --git a/src/cpu/core/LBM/LBMKernelETD3Q27BGK.cpp b/src/cpu/core/LBM/LBMKernelETD3Q27BGK.cpp new file mode 100644 index 0000000000000000000000000000000000000000..a154ee477b83d13c1d65a4acd53f9e8fe75e63a8 --- /dev/null +++ b/src/cpu/core/LBM/LBMKernelETD3Q27BGK.cpp @@ -0,0 +1,303 @@ +#include "LBMKernelETD3Q27BGK.h" +#include "D3Q27System.h" +#include "D3Q27EsoTwist3DSplittedVector.h" +#include "D3Q27EsoTwist3DSoA.h" +#include "DataSet3D.h" +#include "BCSet.h" +#include "BCArray3D.h" +#include "basics/constants/NumericConstants.h" + +using namespace vf::basics::constant; +//using namespace UbMath; + +//#define PROOF_CORRECTNESS + + +////////////////////////////////////////////////////////////////////////// +LBMKernelETD3Q27BGK::LBMKernelETD3Q27BGK() +{ + this->compressible = false; +} +////////////////////////////////////////////////////////////////////////// +LBMKernelETD3Q27BGK::~LBMKernelETD3Q27BGK(void) += default; +////////////////////////////////////////////////////////////////////////// +void LBMKernelETD3Q27BGK::initDataSet() +{ + SPtr<DistributionArray3D> d(new D3Q27EsoTwist3DSplittedVector(nx[0]+2, nx[1]+2, nx[2]+2, -999.9)); + dataSet->setFdistributions(d); +} +////////////////////////////////////////////////////////////////////////// +SPtr<LBMKernel> LBMKernelETD3Q27BGK::clone() +{ + SPtr<LBMKernel> kernel(new LBMKernelETD3Q27BGK()); + std::dynamic_pointer_cast<LBMKernelETD3Q27BGK>(kernel)->initDataSet(); + kernel->setCollisionFactor(this->collFactor); + kernel->setBCSet(bcSet->clone(kernel)); + kernel->setWithForcing(withForcing); + kernel->setForcingX1(muForcingX1); + kernel->setForcingX2(muForcingX2); + kernel->setForcingX3(muForcingX3); + kernel->setIndex(ix1, ix2, ix3); + return kernel; +} +////////////////////////////////////////////////////////////////////////// +void LBMKernelETD3Q27BGK::calculate(int /*step*/) +{ + using namespace D3Q27System; + using namespace vf::lbm::dir; + + //initializing of forcing stuff + if (withForcing) + { + muForcingX1.DefineVar("x1",&muX1); muForcingX1.DefineVar("x2",&muX2); muForcingX1.DefineVar("x3",&muX3); + muForcingX2.DefineVar("x1",&muX1); muForcingX2.DefineVar("x2",&muX2); muForcingX2.DefineVar("x3",&muX3); + muForcingX3.DefineVar("x1",&muX1); muForcingX3.DefineVar("x2",&muX2); muForcingX3.DefineVar("x3",&muX3); + forcingX1 = c0o1; + forcingX2 = c0o1; + forcingX3 = c0o1; + } + ///////////////////////////////////// + + localDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getLocalDistributions(); + nonLocalDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getNonLocalDistributions(); + zeroDistributions = std::dynamic_pointer_cast<D3Q27EsoTwist3DSplittedVector>(dataSet->getFdistributions())->getZeroDistributions(); + + SPtr<BCArray3D> bcArray = this->getBCSet()->getBCArray(); + real f[D3Q27System::ENDF+1]; + real feq[D3Q27System::ENDF+1]; + real drho,vx1,vx2,vx3; + const int bcArrayMaxX1 = (int)bcArray->getNX1(); + const int bcArrayMaxX2 = (int)bcArray->getNX2(); + const int bcArrayMaxX3 = (int)bcArray->getNX3(); + + int minX1 = ghostLayerWidth; + int minX2 = ghostLayerWidth; + int minX3 = ghostLayerWidth; + int maxX1 = bcArrayMaxX1-ghostLayerWidth; + int maxX2 = bcArrayMaxX2-ghostLayerWidth; + int maxX3 = bcArrayMaxX3-ghostLayerWidth; + + for(int x3 = minX3; x3 < maxX3; x3++) + { + for(int x2 = minX2; x2 < maxX2; x2++) + { + for(int x1 = minX1; x1 < maxX1; x1++) + { + if(!bcArray->isSolid(x1,x2,x3) && !bcArray->isUndefined(x1,x2,x3)) + { + int x1p = x1 + 1; + int x2p = x2 + 1; + int x3p = x3 + 1; + ////////////////////////////////////////////////////////////////////////// + //read distribution + //////////////////////////////////////////////////////////////////////////// + f[d000] = (*this->zeroDistributions)(x1,x2,x3); + + f[dP00] = (*this->localDistributions)(D3Q27System::ET_E, x1,x2,x3); + f[d0P0] = (*this->localDistributions)(D3Q27System::ET_N,x1,x2,x3); + f[d00P] = (*this->localDistributions)(D3Q27System::ET_T,x1,x2,x3); + f[dPP0] = (*this->localDistributions)(D3Q27System::ET_NE,x1,x2,x3); + f[dMP0] = (*this->localDistributions)(D3Q27System::ET_NW,x1p,x2,x3); + f[dP0P] = (*this->localDistributions)(D3Q27System::ET_TE,x1,x2,x3); + f[dM0P] = (*this->localDistributions)(D3Q27System::ET_TW, x1p,x2,x3); + f[d0PP] = (*this->localDistributions)(D3Q27System::ET_TN,x1,x2,x3); + f[d0MP] = (*this->localDistributions)(D3Q27System::ET_TS,x1,x2p,x3); + f[dPPP] = (*this->localDistributions)(D3Q27System::ET_TNE,x1,x2,x3); + f[dMPP] = (*this->localDistributions)(D3Q27System::ET_TNW,x1p,x2,x3); + f[dPMP] = (*this->localDistributions)(D3Q27System::ET_TSE,x1,x2p,x3); + f[dMMP] = (*this->localDistributions)(D3Q27System::ET_TSW,x1p,x2p,x3); + + f[dM00] = (*this->nonLocalDistributions)(D3Q27System::ET_W,x1p,x2,x3 ); + f[d0M0] = (*this->nonLocalDistributions)(D3Q27System::ET_S,x1,x2p,x3 ); + f[d00M] = (*this->nonLocalDistributions)(D3Q27System::ET_B,x1,x2,x3p ); + f[dMM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1p,x2p,x3 ); + f[dPM0] = (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1,x2p,x3 ); + f[dM0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1p,x2,x3p ); + f[dP0M] = (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1,x2,x3p ); + f[d0MM] = (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1,x2p,x3p ); + f[d0PM] = (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1,x2,x3p ); + f[dMMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1p,x2p,x3p); + f[dPMM] = (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1,x2p,x3p); + f[dMPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1p,x2,x3p); + f[dPPM] = (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1,x2,x3p); + ////////////////////////////////////////////////////////////////////////// + + drho = f[d000] + f[dP00] + f[dM00] + f[d0P0] + f[d0M0] + f[d00P] + f[d00M] + + f[dPP0] + f[dMM0] + f[dPM0] + f[dMP0] + f[dP0P] + f[dM0M] + f[dP0M] + + f[dM0P] + f[d0PP] + f[d0MM] + f[d0PM] + f[d0MP] + f[dPPP] + f[dMMP] + + f[dPMP] + f[dMPP] + f[dPPM] + f[dMMM] + f[dPMM] + f[dMPM]; + + vx1 = f[dP00] - f[dM00] + f[dPP0] - f[dMM0] + f[dPM0] - f[dMP0] + f[dP0P] - f[dM0M] + + f[dP0M] - f[dM0P] + f[dPPP] - f[dMMP] + f[dPMP] - f[dMPP] + f[dPPM] - f[dMMM] + + f[dPMM] - f[dMPM]; + + vx2 = f[d0P0] - f[d0M0] + f[dPP0] - f[dMM0] - f[dPM0] + f[dMP0] + f[d0PP] - f[d0MM] + f[d0PM] + - f[d0MP] + f[dPPP] - f[dMMP] - f[dPMP] + f[dMPP] + f[dPPM] - f[dMMM] - f[dPMM] + + f[dMPM]; + + vx3 = f[d00P] - f[d00M] + f[dP0P] - f[dM0M] - f[dP0M] + f[dM0P] + f[d0PP] - f[d0MM] - f[d0PM] + + f[d0MP] + f[dPPP] + f[dMMP] + f[dPMP] + f[dMPP] - f[dPPM] - f[dMMM] - f[dPMM] + - f[dMPM]; + + real cu_sq= c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); + + feq[d000] = c8o27*(drho-cu_sq); + feq[dP00] = c2o27*(drho+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); + feq[dM00] = c2o27*(drho+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); + feq[d0P0] = c2o27*(drho+c3o1*( vx2)+c9o2*( vx2)*( vx2)-cu_sq); + feq[d0M0] = c2o27*(drho+c3o1*( -vx2)+c9o2*( -vx2)*( -vx2)-cu_sq); + feq[d00P] = c2o27*(drho+c3o1*( vx3 )+c9o2*( vx3)*( vx3)-cu_sq); + feq[d00M] = c2o27*(drho+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); + feq[dPP0] = c1o54*(drho+c3o1*( vx1+vx2)+c9o2*( vx1+vx2)*( vx1+vx2)-cu_sq); + feq[dMM0] = c1o54*(drho+c3o1*(-vx1-vx2)+c9o2*(-vx1-vx2)*(-vx1-vx2)-cu_sq); + feq[dPM0] = c1o54*(drho+c3o1*( vx1-vx2)+c9o2*( vx1-vx2)*( vx1-vx2)-cu_sq); + feq[dMP0] = c1o54*(drho+c3o1*(-vx1+vx2)+c9o2*(-vx1+vx2)*(-vx1+vx2)-cu_sq); + feq[dP0P] = c1o54*(drho+c3o1*( vx1+vx3)+c9o2*( vx1+vx3)*( vx1+vx3)-cu_sq); + feq[dM0M] = c1o54*(drho+c3o1*(-vx1-vx3)+c9o2*(-vx1-vx3)*(-vx1-vx3)-cu_sq); + feq[dP0M] = c1o54*(drho+c3o1*( vx1-vx3)+c9o2*( vx1-vx3)*( vx1-vx3)-cu_sq); + feq[dM0P] = c1o54*(drho+c3o1*(-vx1+vx3)+c9o2*(-vx1+vx3)*(-vx1+vx3)-cu_sq); + feq[d0PP] = c1o54*(drho+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); + feq[d0MM] = c1o54*(drho+c3o1*(-vx2-vx3)+c9o2*(-vx2-vx3)*(-vx2-vx3)-cu_sq); + feq[d0PM] = c1o54*(drho+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); + feq[d0MP] = c1o54*(drho+c3o1*(-vx2+vx3)+c9o2*(-vx2+vx3)*(-vx2+vx3)-cu_sq); + feq[dPPP]= c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); + feq[dMMM]= c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); + feq[dPPM]= c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); + feq[dMMP]= c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); + feq[dPMP]= c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); + feq[dMPM]= c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); + feq[dPMM]= c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); + feq[dMPP]= c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); + + //Relaxation + f[d000] += (feq[d000]-f[d000])*collFactor; + f[dP00] += (feq[dP00]-f[dP00])*collFactor; + f[dM00] += (feq[dM00]-f[dM00])*collFactor; + f[d0P0] += (feq[d0P0]-f[d0P0])*collFactor; + f[d0M0] += (feq[d0M0]-f[d0M0])*collFactor; + f[d00P] += (feq[d00P]-f[d00P])*collFactor; + f[d00M] += (feq[d00M]-f[d00M])*collFactor; + f[dPP0] += (feq[dPP0]-f[dPP0])*collFactor; + f[dMM0] += (feq[dMM0]-f[dMM0])*collFactor; + f[dPM0] += (feq[dPM0]-f[dPM0])*collFactor; + f[dMP0] += (feq[dMP0]-f[dMP0])*collFactor; + f[dP0P] += (feq[dP0P]-f[dP0P])*collFactor; + f[dM0M] += (feq[dM0M]-f[dM0M])*collFactor; + f[dP0M] += (feq[dP0M]-f[dP0M])*collFactor; + f[dM0P] += (feq[dM0P]-f[dM0P])*collFactor; + f[d0PP] += (feq[d0PP]-f[d0PP])*collFactor; + f[d0MM] += (feq[d0MM]-f[d0MM])*collFactor; + f[d0PM] += (feq[d0PM]-f[d0PM])*collFactor; + f[d0MP] += (feq[d0MP]-f[d0MP])*collFactor; + + f[dPPP] += (feq[dPPP]-f[dPPP])*collFactor; + f[dMMM] += (feq[dMMM]-f[dMMM])*collFactor; + f[dPPM] += (feq[dPPM]-f[dPPM])*collFactor; + f[dMMP] += (feq[dMMP]-f[dMMP])*collFactor; + f[dPMP] += (feq[dPMP]-f[dPMP])*collFactor; + f[dMPM] += (feq[dMPM]-f[dMPM])*collFactor; + f[dPMM] += (feq[dPMM]-f[dPMM])*collFactor; + f[dMPP] += (feq[dMPP]-f[dMPP])*collFactor; + + ////////////////////////////////////////////////////////////////////////// + //forcing + if (withForcing) + { + muX1 = x1+ix1*bcArrayMaxX1; + muX2 = x2+ix2*bcArrayMaxX2; + muX3 = x3+ix3*bcArrayMaxX3; + + forcingX1 = muForcingX1.Eval(); + forcingX2 = muForcingX2.Eval(); + forcingX3 = muForcingX3.Eval(); + + f[d000] += c0o1; + f[dP00] += c3o1*c2o27 * (forcingX1) ; + f[dM00] += c3o1*c2o27 * (-forcingX1) ; + f[d0P0] += c3o1*c2o27 * (forcingX2) ; + f[d0M0] += c3o1*c2o27 * (-forcingX2) ; + f[d00P] += c3o1*c2o27 * (forcingX3) ; + f[d00M] += c3o1*c2o27 * (-forcingX3); + f[dPP0] += c3o1*c1o54 * ( forcingX1+forcingX2 ) ; + f[dMM0 ] += c3o1*c1o54 * (-forcingX1-forcingX2 ) ; + f[dPM0 ] += c3o1*c1o54 * ( forcingX1-forcingX2 ) ; + f[dMP0 ] += c3o1*c1o54 * (-forcingX1+forcingX2 ) ; + f[dP0P ] += c3o1*c1o54 * ( forcingX1 +forcingX3) ; + f[dM0M ] += c3o1*c1o54 * (-forcingX1 -forcingX3) ; + f[dP0M ] += c3o1*c1o54 * ( forcingX1 -forcingX3) ; + f[dM0P ] += c3o1*c1o54 * (-forcingX1 +forcingX3) ; + f[d0PP ] += c3o1*c1o54 * ( forcingX2+forcingX3) ; + f[d0MM ] += c3o1*c1o54 * ( -forcingX2-forcingX3) ; + f[d0PM ] += c3o1*c1o54 * ( forcingX2-forcingX3) ; + f[d0MP ] += c3o1*c1o54 * ( -forcingX2+forcingX3) ; + f[dPPP] += c3o1*c1o216* ( forcingX1+forcingX2+forcingX3) ; + f[dMMM] += c3o1*c1o216* (-forcingX1-forcingX2-forcingX3) ; + f[dPPM] += c3o1*c1o216* ( forcingX1+forcingX2-forcingX3) ; + f[dMMP] += c3o1*c1o216* (-forcingX1-forcingX2+forcingX3) ; + f[dPMP] += c3o1*c1o216* ( forcingX1-forcingX2+forcingX3) ; + f[dMPM] += c3o1*c1o216* (-forcingX1+forcingX2-forcingX3) ; + f[dPMM] += c3o1*c1o216* ( forcingX1-forcingX2-forcingX3) ; + f[dMPP] += c3o1*c1o216* (-forcingX1+forcingX2+forcingX3) ; + } + ////////////////////////////////////////////////////////////////////////// +#ifdef PROOF_CORRECTNESS + real rho_post = f[REST] + f[dP00] + 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]; + real dif = drho - rho_post; +#ifdef SINGLEPRECISION + if(dif > 10.0E-7 || dif < -10.0E-7) +#else + if(dif > 10.0E-15 || dif < -10.0E-15) +#endif + { + UB_THROW(UbException(UB_EXARGS,"rho is not correct")); + } +#endif + ////////////////////////////////////////////////////////////////////////// + //write distribution + ////////////////////////////////////////////////////////////////////////// + (*this->localDistributions)(D3Q27System::ET_E,x1, x2, x3) = f[iP00]; + (*this->localDistributions)(D3Q27System::ET_N,x1, x2, x3) = f[i0P0]; + (*this->localDistributions)(D3Q27System::ET_T,x1, x2, x3) = f[i00P]; + (*this->localDistributions)(D3Q27System::ET_NE,x1, x2, x3) = f[iPP0]; + (*this->localDistributions)(D3Q27System::ET_NW,x1p,x2, x3) = f[iMP0]; + (*this->localDistributions)(D3Q27System::ET_TE,x1, x2, x3) = f[iP0P]; + (*this->localDistributions)(D3Q27System::ET_TW,x1p,x2, x3) = f[iM0P]; + (*this->localDistributions)(D3Q27System::ET_TN,x1, x2, x3) = f[i0PP]; + (*this->localDistributions)(D3Q27System::ET_TS,x1, x2p,x3) = f[i0MP]; + (*this->localDistributions)(D3Q27System::ET_TNE,x1, x2, x3) = f[iPPP]; + (*this->localDistributions)(D3Q27System::ET_TNW,x1p,x2, x3) = f[iMPP]; + (*this->localDistributions)(D3Q27System::ET_TSE,x1, x2p,x3) = f[iPMP]; + (*this->localDistributions)(D3Q27System::ET_TSW,x1p,x2p,x3) = f[iMMP]; + + (*this->nonLocalDistributions)(D3Q27System::ET_W,x1p,x2, x3 ) = f[iM00 ]; + (*this->nonLocalDistributions)(D3Q27System::ET_S,x1, x2p,x3 ) = f[i0M0 ]; + (*this->nonLocalDistributions)(D3Q27System::ET_B,x1, x2, x3p ) = f[i00M ]; + (*this->nonLocalDistributions)(D3Q27System::ET_SW,x1p,x2p,x3 ) = f[iMM0]; + (*this->nonLocalDistributions)(D3Q27System::ET_SE,x1, x2p,x3 ) = f[iPM0]; + (*this->nonLocalDistributions)(D3Q27System::ET_BW,x1p,x2, x3p ) = f[iM0M]; + (*this->nonLocalDistributions)(D3Q27System::ET_BE,x1, x2, x3p ) = f[iP0M]; + (*this->nonLocalDistributions)(D3Q27System::ET_BS,x1, x2p,x3p ) = f[i0MM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BN,x1, x2, x3p ) = f[i0PM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BSW,x1p,x2p,x3p) = f[iMMM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BSE,x1, x2p,x3p) = f[iPMM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BNW,x1p,x2, x3p) = f[iMPM]; + (*this->nonLocalDistributions)(D3Q27System::ET_BNE,x1, x2, x3p) = f[iPPM]; + + (*this->zeroDistributions)(x1,x2,x3) = f[d000]; + ////////////////////////////////////////////////////////////////////////// + + + } + } + } + } +} +////////////////////////////////////////////////////////////////////////// +real LBMKernelETD3Q27BGK::getCalculationTime() +{ + return c0o1; +} diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMKernelETD3Q27BGK.h b/src/cpu/core/LBM/LBMKernelETD3Q27BGK.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/LBMKernelETD3Q27BGK.h rename to src/cpu/core/LBM/LBMKernelETD3Q27BGK.h diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMSystem.cpp b/src/cpu/core/LBM/LBMSystem.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/LBMSystem.cpp rename to src/cpu/core/LBM/LBMSystem.cpp diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMSystem.h b/src/cpu/core/LBM/LBMSystem.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/LBMSystem.h rename to src/cpu/core/LBM/LBMSystem.h diff --git a/src/cpu/VirtualFluidsCore/LBM/LBMUnitConverter.h b/src/cpu/core/LBM/LBMUnitConverter.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/LBMUnitConverter.h rename to src/cpu/core/LBM/LBMUnitConverter.h diff --git a/src/cpu/VirtualFluidsCore/LBM/VoidLBMKernel.cpp b/src/cpu/core/LBM/VoidLBMKernel.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/VoidLBMKernel.cpp rename to src/cpu/core/LBM/VoidLBMKernel.cpp diff --git a/src/cpu/VirtualFluidsCore/LBM/VoidLBMKernel.h b/src/cpu/core/LBM/VoidLBMKernel.h similarity index 100% rename from src/cpu/VirtualFluidsCore/LBM/VoidLBMKernel.h rename to src/cpu/core/LBM/VoidLBMKernel.h diff --git a/src/cpu/VirtualFluidsCore/Parallel/BlocksDistributor.cpp b/src/cpu/core/Parallel/BlocksDistributor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Parallel/BlocksDistributor.cpp rename to src/cpu/core/Parallel/BlocksDistributor.cpp diff --git a/src/cpu/VirtualFluidsCore/Parallel/BlocksDistributor.h b/src/cpu/core/Parallel/BlocksDistributor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Parallel/BlocksDistributor.h rename to src/cpu/core/Parallel/BlocksDistributor.h diff --git a/src/cpu/VirtualFluidsCore/Parallel/MPIIODataStructures.h b/src/cpu/core/Parallel/MPIIODataStructures.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Parallel/MPIIODataStructures.h rename to src/cpu/core/Parallel/MPIIODataStructures.h diff --git a/src/cpu/VirtualFluidsCore/Parallel/MetisPartitioner.cpp b/src/cpu/core/Parallel/MetisPartitioner.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Parallel/MetisPartitioner.cpp rename to src/cpu/core/Parallel/MetisPartitioner.cpp diff --git a/src/cpu/VirtualFluidsCore/Parallel/MetisPartitioner.h b/src/cpu/core/Parallel/MetisPartitioner.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Parallel/MetisPartitioner.h rename to src/cpu/core/Parallel/MetisPartitioner.h diff --git a/src/cpu/VirtualFluidsCore/Parallel/PriorityQueueDecompositor.cpp b/src/cpu/core/Parallel/PriorityQueueDecompositor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Parallel/PriorityQueueDecompositor.cpp rename to src/cpu/core/Parallel/PriorityQueueDecompositor.cpp diff --git a/src/cpu/VirtualFluidsCore/Parallel/PriorityQueueDecompositor.h b/src/cpu/core/Parallel/PriorityQueueDecompositor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Parallel/PriorityQueueDecompositor.h rename to src/cpu/core/Parallel/PriorityQueueDecompositor.h diff --git a/src/cpu/VirtualFluidsCore/Parallel/SimpleGeometricPartitioner.h b/src/cpu/core/Parallel/SimpleGeometricPartitioner.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Parallel/SimpleGeometricPartitioner.h rename to src/cpu/core/Parallel/SimpleGeometricPartitioner.h diff --git a/src/cpu/VirtualFluidsCore/Parallel/ZoltanPartitioner.cpp b/src/cpu/core/Parallel/ZoltanPartitioner.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Parallel/ZoltanPartitioner.cpp rename to src/cpu/core/Parallel/ZoltanPartitioner.cpp diff --git a/src/cpu/VirtualFluidsCore/Parallel/ZoltanPartitioner.h b/src/cpu/core/Parallel/ZoltanPartitioner.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Parallel/ZoltanPartitioner.h rename to src/cpu/core/Parallel/ZoltanPartitioner.h diff --git a/src/cpu/VirtualFluidsCore/Simulation/Block3D.cpp b/src/cpu/core/Simulation/Block3D.cpp similarity index 98% rename from src/cpu/VirtualFluidsCore/Simulation/Block3D.cpp rename to src/cpu/core/Simulation/Block3D.cpp index a6b7127bc4ecd2049790cb2bef98c1d506f7f513..856924874f853b60c617c33a5d0f3c7084da762f 100644 --- a/src/cpu/VirtualFluidsCore/Simulation/Block3D.cpp +++ b/src/cpu/core/Simulation/Block3D.cpp @@ -266,7 +266,7 @@ int Block3D::getNumberOfLocalConnectorsForSurfaces() for (SPtr<Block3DConnector> c : connectors) { if (c) { - if (c->getSendDir() >= (int)DIR_P00 && c->getSendDir() <= (int)DIR_00M && c->isLocalConnector()) + if (c->getSendDir() >= (int)dP00 && c->getSendDir() <= (int)d00M && c->isLocalConnector()) count++; } } @@ -282,7 +282,7 @@ int Block3D::getNumberOfRemoteConnectorsForSurfaces() for (SPtr<Block3DConnector> c : connectors) { if (c) { - if (c->getSendDir() >= (int)DIR_P00 && c->getSendDir() <= (int)DIR_00M && c->isRemoteConnector()) + if (c->getSendDir() >= (int)dP00 && c->getSendDir() <= (int)d00M && c->isRemoteConnector()) count++; } } diff --git a/src/cpu/VirtualFluidsCore/Simulation/Block3D.h b/src/cpu/core/Simulation/Block3D.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Simulation/Block3D.h rename to src/cpu/core/Simulation/Block3D.h diff --git a/src/cpu/VirtualFluidsCore/Simulation/Grid3D.cpp b/src/cpu/core/Simulation/Grid3D.cpp similarity index 98% rename from src/cpu/VirtualFluidsCore/Simulation/Grid3D.cpp rename to src/cpu/core/Simulation/Grid3D.cpp index 2cf8a4824c6d7f30bb2b1593ba96da3d952924ad..faa3d793b72f4e1c51c7c6d87d060c68dfbed7d9 100644 --- a/src/cpu/VirtualFluidsCore/Simulation/Grid3D.cpp +++ b/src/cpu/core/Simulation/Grid3D.cpp @@ -1106,82 +1106,82 @@ void Grid3D::getNeighborBlocksForDirection(int dir, int ix1, int ix2, int ix3, i using namespace vf::lbm::dir; switch (dir) { - case DIR_P00: + case dP00: this->getNeighborsEast(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_M00: + case dM00: this->getNeighborsWest(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_0P0: + case d0P0: this->getNeighborsNorth(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_0M0: + case d0M0: this->getNeighborsSouth(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_00P: + case d00P: this->getNeighborsTop(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_00M: + case d00M: this->getNeighborsBottom(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_PP0: + case dPP0: this->getNeighborsNorthEast(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_MM0: + case dMM0: this->getNeighborsSouthWest(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_PM0: + case dPM0: this->getNeighborsSouthEast(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_MP0: + case dMP0: this->getNeighborsNorthWest(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_P0P: + case dP0P: this->getNeighborsTopEast(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_M0M: + case dM0M: this->getNeighborsBottomWest(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_P0M: + case dP0M: this->getNeighborsBottomEast(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_M0P: + case dM0P: this->getNeighborsTopWest(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_0PP: + case d0PP: this->getNeighborsTopNorth(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_0MM: + case d0MM: this->getNeighborsBottomSouth(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_0PM: + case d0PM: this->getNeighborsBottomNorth(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_0MP: + case d0MP: this->getNeighborsTopSouth(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_PPP: + case dPPP: this->getNeighborsTopNorthEast(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_MPP: + case dMPP: this->getNeighborsTopNorthWest(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_PMP: + case dPMP: this->getNeighborsTopSouthEast(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_MMP: + case dMMP: this->getNeighborsTopSouthWest(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_PPM: + case dPPM: this->getNeighborsBottomNorthEast(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_MPM: + case dMPM: this->getNeighborsBottomNorthWest(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_PMM: + case dPMM: this->getNeighborsBottomSouthEast(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_MMM: + case dMMM: this->getNeighborsBottomSouthWest(ix1, ix2, ix3, level, levelDepth, blocks); break; default: @@ -1271,85 +1271,85 @@ void Grid3D::getNeighborBlocksForDirectionWithREST(int dir, int ix1, int ix2, in using namespace vf::lbm::dir; switch (dir) { - case DIR_P00: + case dP00: this->getNeighborsEast(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_M00: + case dM00: this->getNeighborsWest(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_0P0: + case d0P0: this->getNeighborsNorth(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_0M0: + case d0M0: this->getNeighborsSouth(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_00P: + case d00P: this->getNeighborsTop(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_00M: + case d00M: this->getNeighborsBottom(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_PP0: + case dPP0: this->getNeighborsNorthEast(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_MM0: + case dMM0: this->getNeighborsSouthWest(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_PM0: + case dPM0: this->getNeighborsSouthEast(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_MP0: + case dMP0: this->getNeighborsNorthWest(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_P0P: + case dP0P: this->getNeighborsTopEast(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_M0M: + case dM0M: this->getNeighborsBottomWest(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_P0M: + case dP0M: this->getNeighborsBottomEast(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_M0P: + case dM0P: this->getNeighborsTopWest(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_0PP: + case d0PP: this->getNeighborsTopNorth(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_0MM: + case d0MM: this->getNeighborsBottomSouth(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_0PM: + case d0PM: this->getNeighborsBottomNorth(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_0MP: + case d0MP: this->getNeighborsTopSouth(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_PPP: + case dPPP: this->getNeighborsTopNorthEast(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_MPP: + case dMPP: this->getNeighborsTopNorthWest(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_PMP: + case dPMP: this->getNeighborsTopSouthEast(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_MMP: + case dMMP: this->getNeighborsTopSouthWest(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_PPM: + case dPPM: this->getNeighborsBottomNorthEast(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_MPM: + case dMPM: this->getNeighborsBottomNorthWest(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_PMM: + case dPMM: this->getNeighborsBottomSouthEast(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_MMM: + case dMMM: this->getNeighborsBottomSouthWest(ix1, ix2, ix3, level, levelDepth, blocks); break; - case DIR_000: + case d000: this->getNeighborsZero(ix1, ix2, ix3, level, levelDepth, blocks); break; default: diff --git a/src/cpu/VirtualFluidsCore/Simulation/Grid3D.h b/src/cpu/core/Simulation/Grid3D.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Simulation/Grid3D.h rename to src/cpu/core/Simulation/Grid3D.h diff --git a/src/cpu/VirtualFluidsCore/Simulation/Simulation.cpp b/src/cpu/core/Simulation/Simulation.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Simulation/Simulation.cpp rename to src/cpu/core/Simulation/Simulation.cpp diff --git a/src/cpu/VirtualFluidsCore/Simulation/Simulation.h b/src/cpu/core/Simulation/Simulation.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Simulation/Simulation.h rename to src/cpu/core/Simulation/Simulation.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/AdjustForcingSimulationObserver.cpp b/src/cpu/core/SimulationObservers/AdjustForcingSimulationObserver.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/AdjustForcingSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/AdjustForcingSimulationObserver.cpp diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/AdjustForcingSimulationObserver.h b/src/cpu/core/SimulationObservers/AdjustForcingSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/AdjustForcingSimulationObserver.h rename to src/cpu/core/SimulationObservers/AdjustForcingSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/AverageValuesSimulationObserver.cpp b/src/cpu/core/SimulationObservers/AverageValuesSimulationObserver.cpp similarity index 99% rename from src/cpu/VirtualFluidsCore/SimulationObservers/AverageValuesSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/AverageValuesSimulationObserver.cpp index 3724569eb1acd4a96076205a07a7ae393e4924dc..4542a2837b7c08653e138e73df18493a67b96bde 100644 --- a/src/cpu/VirtualFluidsCore/SimulationObservers/AverageValuesSimulationObserver.cpp +++ b/src/cpu/core/SimulationObservers/AverageValuesSimulationObserver.cpp @@ -376,7 +376,7 @@ void AverageValuesSimulationObserver::calculateAverageValues(real timeStep) ////////////////////////////////////////////////////////////////////////// // read distribution //////////////////////////////////////////////////////////////////////////// - distributions->getDistribution(f, ix1, ix2, ix3); + distributions->getPreCollisionDistribution(f, ix1, ix2, ix3); ////////////////////////////////////////////////////////////////////////// // compute velocity ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/AverageValuesSimulationObserver.h b/src/cpu/core/SimulationObservers/AverageValuesSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/AverageValuesSimulationObserver.h rename to src/cpu/core/SimulationObservers/AverageValuesSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/CalculateForcesSimulationObserver.cpp b/src/cpu/core/SimulationObservers/CalculateForcesSimulationObserver.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/CalculateForcesSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/CalculateForcesSimulationObserver.cpp diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/CalculateForcesSimulationObserver.h b/src/cpu/core/SimulationObservers/CalculateForcesSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/CalculateForcesSimulationObserver.h rename to src/cpu/core/SimulationObservers/CalculateForcesSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/CalculateTorqueSimulationObserver.cpp b/src/cpu/core/SimulationObservers/CalculateTorqueSimulationObserver.cpp similarity index 98% rename from src/cpu/VirtualFluidsCore/SimulationObservers/CalculateTorqueSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/CalculateTorqueSimulationObserver.cpp index 01521d043986c3223b87096bcb4898cba1809438..7d9d22bd7dcac7b7216a7cf8d6fe7b54bc0fba50 100644 --- a/src/cpu/VirtualFluidsCore/SimulationObservers/CalculateTorqueSimulationObserver.cpp +++ b/src/cpu/core/SimulationObservers/CalculateTorqueSimulationObserver.cpp @@ -226,7 +226,7 @@ UbTupleDouble3 CalculateTorqueSimulationObserver::getForcesFromMoments(int x1, i if (bc) { real f[D3Q27System::ENDF + 1]; - distributions->getDistribution(f, x1, x2, x3); + distributions->getPreCollisionDistribution(f, x1, x2, x3); real collFactor = kernel->getCollisionFactor(); real shearRate = D3Q27System::getShearRate(f, collFactor); real rho = D3Q27System::getDensity(f); @@ -260,7 +260,7 @@ UbTupleDouble3 CalculateTorqueSimulationObserver::getForcesFromStressTensor(int if (bc) { real f[D3Q27System::ENDF + 1]; - distributions->getDistribution(f, x1, x2, x3); + distributions->getPreCollisionDistribution(f, x1, x2, x3); real collFactor = kernel->getCollisionFactor(); real shearRate = D3Q27System::getShearRate(f, collFactor); real rho = D3Q27System::getDensity(f); diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/DecreaseViscositySimulationObserver.cpp b/src/cpu/core/SimulationObservers/DecreaseViscositySimulationObserver.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/DecreaseViscositySimulationObserver.cpp rename to src/cpu/core/SimulationObservers/DecreaseViscositySimulationObserver.cpp diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/DecreaseViscositySimulationObserver.h b/src/cpu/core/SimulationObservers/DecreaseViscositySimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/DecreaseViscositySimulationObserver.h rename to src/cpu/core/SimulationObservers/DecreaseViscositySimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/EmergencyExitSimulationObserver.cpp b/src/cpu/core/SimulationObservers/EmergencyExitSimulationObserver.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/EmergencyExitSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/EmergencyExitSimulationObserver.cpp diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/EmergencyExitSimulationObserver.h b/src/cpu/core/SimulationObservers/EmergencyExitSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/EmergencyExitSimulationObserver.h rename to src/cpu/core/SimulationObservers/EmergencyExitSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/ForceCalculator.cpp b/src/cpu/core/SimulationObservers/ForceCalculator.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/ForceCalculator.cpp rename to src/cpu/core/SimulationObservers/ForceCalculator.cpp diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/ForceCalculator.h b/src/cpu/core/SimulationObservers/ForceCalculator.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/ForceCalculator.h rename to src/cpu/core/SimulationObservers/ForceCalculator.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/InSituCatalystSimulationObserver.cpp b/src/cpu/core/SimulationObservers/InSituCatalystSimulationObserver.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/InSituCatalystSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/InSituCatalystSimulationObserver.cpp diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/InSituCatalystSimulationObserver.h b/src/cpu/core/SimulationObservers/InSituCatalystSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/InSituCatalystSimulationObserver.h rename to src/cpu/core/SimulationObservers/InSituCatalystSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/InSituVTKSimulationObserver.cpp b/src/cpu/core/SimulationObservers/InSituVTKSimulationObserver.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/InSituVTKSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/InSituVTKSimulationObserver.cpp diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/InSituVTKSimulationObserver.h b/src/cpu/core/SimulationObservers/InSituVTKSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/InSituVTKSimulationObserver.h rename to src/cpu/core/SimulationObservers/InSituVTKSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/IntegrateValuesHelper.cpp b/src/cpu/core/SimulationObservers/IntegrateValuesHelper.cpp similarity index 99% rename from src/cpu/VirtualFluidsCore/SimulationObservers/IntegrateValuesHelper.cpp rename to src/cpu/core/SimulationObservers/IntegrateValuesHelper.cpp index a2d35b6b2883f54b799cc2e5b6aacd1ece5c08bc..76c4a5aa570b0badd4e050e4938d728521f14f71 100644 --- a/src/cpu/VirtualFluidsCore/SimulationObservers/IntegrateValuesHelper.cpp +++ b/src/cpu/core/SimulationObservers/IntegrateValuesHelper.cpp @@ -200,7 +200,7 @@ void IntegrateValuesHelper::calculateMQ() SPtr<BCArray3D> bcArray = kernel->getBCSet()->getBCArray(); SPtr<DistributionArray3D> distributions = kernel->getDataSet()->getFdistributions(); for (UbTupleInt3 node : cn.nodes) { - distributions->getDistribution(f, val<1>(node), val<2>(node), val<3>(node)); + distributions->getPreCollisionDistribution(f, val<1>(node), val<2>(node), val<3>(node)); calcMacros(f, rho, vx1, vx2, vx3); sRho += rho * cellVolume; sVx1 += vx1 * cellVolume; diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/IntegrateValuesHelper.h b/src/cpu/core/SimulationObservers/IntegrateValuesHelper.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/IntegrateValuesHelper.h rename to src/cpu/core/SimulationObservers/IntegrateValuesHelper.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/LineTimeSeriesSimulationObserver.cpp b/src/cpu/core/SimulationObservers/LineTimeSeriesSimulationObserver.cpp similarity index 98% rename from src/cpu/VirtualFluidsCore/SimulationObservers/LineTimeSeriesSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/LineTimeSeriesSimulationObserver.cpp index e312bf2b27aa15b51146aab9559c201ed88bbd7e..68ec072e59f5ba3739637db6b529e1d26d7fb78b 100644 --- a/src/cpu/VirtualFluidsCore/SimulationObservers/LineTimeSeriesSimulationObserver.cpp +++ b/src/cpu/core/SimulationObservers/LineTimeSeriesSimulationObserver.cpp @@ -124,7 +124,7 @@ void LineTimeSeriesSimulationObserver::collectData() } else if (dir == X3) { ix3 = ix; } - distributions->getDistribution(f, ix1, ix2, ix3); + distributions->getPreCollisionDistribution(f, ix1, ix2, ix3); calcMacros(f, rho, vx1, vx2, vx3); v1[x + (ix - 1)] = vx1; v2[x + (ix - 1)] = vx2; diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/LineTimeSeriesSimulationObserver.h b/src/cpu/core/SimulationObservers/LineTimeSeriesSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/LineTimeSeriesSimulationObserver.h rename to src/cpu/core/SimulationObservers/LineTimeSeriesSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationBESimulationObserver.cpp b/src/cpu/core/SimulationObservers/MPIIOMigrationBESimulationObserver.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationBESimulationObserver.cpp rename to src/cpu/core/SimulationObservers/MPIIOMigrationBESimulationObserver.cpp diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationBESimulationObserver.h b/src/cpu/core/SimulationObservers/MPIIOMigrationBESimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationBESimulationObserver.h rename to src/cpu/core/SimulationObservers/MPIIOMigrationBESimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationSimulationObserver.cpp b/src/cpu/core/SimulationObservers/MPIIOMigrationSimulationObserver.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/MPIIOMigrationSimulationObserver.cpp diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationSimulationObserver.h b/src/cpu/core/SimulationObservers/MPIIOMigrationSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOMigrationSimulationObserver.h rename to src/cpu/core/SimulationObservers/MPIIOMigrationSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIORestartSimulationObserver.cpp b/src/cpu/core/SimulationObservers/MPIIORestartSimulationObserver.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/MPIIORestartSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/MPIIORestartSimulationObserver.cpp diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIORestartSimulationObserver.h b/src/cpu/core/SimulationObservers/MPIIORestartSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/MPIIORestartSimulationObserver.h rename to src/cpu/core/SimulationObservers/MPIIORestartSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOSimulationObserver.cpp b/src/cpu/core/SimulationObservers/MPIIOSimulationObserver.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/MPIIOSimulationObserver.cpp diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOSimulationObserver.h b/src/cpu/core/SimulationObservers/MPIIOSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/MPIIOSimulationObserver.h rename to src/cpu/core/SimulationObservers/MPIIOSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MicrophoneArraySimulationObserver.cpp b/src/cpu/core/SimulationObservers/MicrophoneArraySimulationObserver.cpp similarity index 97% rename from src/cpu/VirtualFluidsCore/SimulationObservers/MicrophoneArraySimulationObserver.cpp rename to src/cpu/core/SimulationObservers/MicrophoneArraySimulationObserver.cpp index 10749b5130e387205f01e57f4c71c90c90f46e02..5575cc53e8d40f9a322d3912a8346403b04e75f3 100644 --- a/src/cpu/VirtualFluidsCore/SimulationObservers/MicrophoneArraySimulationObserver.cpp +++ b/src/cpu/core/SimulationObservers/MicrophoneArraySimulationObserver.cpp @@ -93,7 +93,7 @@ void MicrophoneArraySimulationObserver::collectData(real step) { for (std::size_t i = 0; i < microphones.size(); i++) { real f[D3Q27System::ENDF + 1]; - microphones[i]->distridution->getDistribution(f, val<1>(microphones[i]->nodeIndexes), + microphones[i]->distridution->getPreCollisionDistribution(f, val<1>(microphones[i]->nodeIndexes), val<2>(microphones[i]->nodeIndexes), val<3>(microphones[i]->nodeIndexes)); real vx1, vx2, vx3, rho; diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/MicrophoneArraySimulationObserver.h b/src/cpu/core/SimulationObservers/MicrophoneArraySimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/MicrophoneArraySimulationObserver.h rename to src/cpu/core/SimulationObservers/MicrophoneArraySimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/NUPSCounterSimulationObserver.cpp b/src/cpu/core/SimulationObservers/NUPSCounterSimulationObserver.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/NUPSCounterSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/NUPSCounterSimulationObserver.cpp diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/NUPSCounterSimulationObserver.h b/src/cpu/core/SimulationObservers/NUPSCounterSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/NUPSCounterSimulationObserver.h rename to src/cpu/core/SimulationObservers/NUPSCounterSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/PressureCoefficientSimulationObserver.cpp b/src/cpu/core/SimulationObservers/PressureCoefficientSimulationObserver.cpp similarity index 99% rename from src/cpu/VirtualFluidsCore/SimulationObservers/PressureCoefficientSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/PressureCoefficientSimulationObserver.cpp index f36997c05dc92970b743a57d1fc9b79f92a2df51..d82a51e175075ad211ac6d6c187b707e605cb7fe 100644 --- a/src/cpu/VirtualFluidsCore/SimulationObservers/PressureCoefficientSimulationObserver.cpp +++ b/src/cpu/core/SimulationObservers/PressureCoefficientSimulationObserver.cpp @@ -93,7 +93,7 @@ void PressureCoefficientSimulationObserver::calculateRho() real cx2 = val<2>(org) - val<2>(nodeOffset) + x2 * dx; real cx3 = val<3>(org) - val<3>(nodeOffset) + x3 * dx; if (plane->isPointInGbObject3D(cx1, cx2, cx3)) { - distributions->getDistribution(f, x1, x2, x3); + distributions->getPreCollisionDistribution(f, x1, x2, x3); calcMacros(f, rho, vx1, vx2, vx3); values.push_back(cx1); values.push_back(cx2); diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/PressureCoefficientSimulationObserver.h b/src/cpu/core/SimulationObservers/PressureCoefficientSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/PressureCoefficientSimulationObserver.h rename to src/cpu/core/SimulationObservers/PressureCoefficientSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/PressureDifferenceSimulationObserver.cpp b/src/cpu/core/SimulationObservers/PressureDifferenceSimulationObserver.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/PressureDifferenceSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/PressureDifferenceSimulationObserver.cpp diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/PressureDifferenceSimulationObserver.h b/src/cpu/core/SimulationObservers/PressureDifferenceSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/PressureDifferenceSimulationObserver.h rename to src/cpu/core/SimulationObservers/PressureDifferenceSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/QCriterionSimulationObserver.cpp b/src/cpu/core/SimulationObservers/QCriterionSimulationObserver.cpp similarity index 94% rename from src/cpu/VirtualFluidsCore/SimulationObservers/QCriterionSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/QCriterionSimulationObserver.cpp index ccd4025235dd636b0654ea14ad307f3a256c58a9..397f576f63b99a4107d55bfce4e884dc987830b0 100644 --- a/src/cpu/VirtualFluidsCore/SimulationObservers/QCriterionSimulationObserver.cpp +++ b/src/cpu/core/SimulationObservers/QCriterionSimulationObserver.cpp @@ -297,12 +297,12 @@ void QCriterionSimulationObserver::getNeighborVelocities(int offx, int offy, int // std::max(ix3+offz,1)); distributionsW->getDistribution(f0, std::max(ix1 ,1), std::max(ix2 ,1), // std::max(ix3 ,1)); distributions->getDistribution(fE, std::max(ix1+offx ,1), std::max(ix2+offy ,1), // std::max(ix3+offz ,1)); //E:= plus 1 - distributionsW->getDistribution(fW2, std::max(ix1 + 2 * offx, 0), std::max(ix2 + 2 * offy, 0), + distributionsW->getPreCollisionDistribution(fW2, std::max(ix1 + 2 * offx, 0), std::max(ix2 + 2 * offy, 0), std::max(ix3 + 2 * offz, 0)); - distributionsW->getDistribution(fW, std::max(ix1 + offx, 0), std::max(ix2 + offy, 0), + distributionsW->getPreCollisionDistribution(fW, std::max(ix1 + offx, 0), std::max(ix2 + offy, 0), std::max(ix3 + offz, 0)); - distributionsW->getDistribution(f0, std::max(ix1, 0), std::max(ix2, 0), std::max(ix3, 0)); - distributions->getDistribution(fE, std::max(ix1 + offx, 0), std::max(ix2 + offy, 0), + distributionsW->getPreCollisionDistribution(f0, std::max(ix1, 0), std::max(ix2, 0), std::max(ix3, 0)); + distributions->getPreCollisionDistribution(fE, std::max(ix1 + offx, 0), std::max(ix2 + offy, 0), std::max(ix3 + offz, 0)); // E:= plus 1 computeVelocity(fE, vE, compressible); @@ -321,13 +321,13 @@ void QCriterionSimulationObserver::getNeighborVelocities(int offx, int offy, int real fW[27]; if (offx == 1) { - distributionsW->getDistribution(fW, (distributions->getNX1()) - 1, ix2, + distributionsW->getPreCollisionDistribution(fW, (distributions->getNX1()) - 1, ix2, ix3); // moved one block backward, now get last entry } else if (offy == 1) { - distributionsW->getDistribution(fW, ix1, (distributions->getNX2()) - 1, ix3); + distributionsW->getPreCollisionDistribution(fW, ix1, (distributions->getNX2()) - 1, ix3); } else if (offz == 1) { - distributionsW->getDistribution(fW, ix1, ix2, distributions->getNX3() - 1); + distributionsW->getPreCollisionDistribution(fW, ix1, ix2, distributions->getNX3() - 1); } computeVelocity(fW, vW, compressible); } @@ -335,13 +335,13 @@ void QCriterionSimulationObserver::getNeighborVelocities(int offx, int offy, int } else { // data available in current block: real fW[27]; - distributions->getDistribution(fW, ix1 - offx, ix2 - offy, ix3 - offz); + distributions->getPreCollisionDistribution(fW, ix1 - offx, ix2 - offy, ix3 - offz); computeVelocity(fW, vW, compressible); } if (checkInterpolation) { // in plus-direction data is available in current block because of ghost layers real fE[27]; - distributions->getDistribution(fE, ix1 + offx, ix2 + offy, ix3 + offz); // E:= plus 1 + distributions->getPreCollisionDistribution(fE, ix1 + offx, ix2 + offy, ix3 + offz); // E:= plus 1 computeVelocity(fE, vE, compressible); } } diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/QCriterionSimulationObserver.h b/src/cpu/core/SimulationObservers/QCriterionSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/QCriterionSimulationObserver.h rename to src/cpu/core/SimulationObservers/QCriterionSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/ShearStressSimulationObserver.cpp b/src/cpu/core/SimulationObservers/ShearStressSimulationObserver.cpp similarity index 91% rename from src/cpu/VirtualFluidsCore/SimulationObservers/ShearStressSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/ShearStressSimulationObserver.cpp index 8a2b90698ee7f48dce5eea8f738bd69651d8b059..7bc7923f3c26dcf496e7111ce9383bc7907dcf57 100644 --- a/src/cpu/VirtualFluidsCore/SimulationObservers/ShearStressSimulationObserver.cpp +++ b/src/cpu/core/SimulationObservers/ShearStressSimulationObserver.cpp @@ -170,38 +170,38 @@ void ShearStressSimulationObserver::calculateShearStress(real timeStep) ////////////////////////////////////////////////////////////////////////// // read distribution //////////////////////////////////////////////////////////////////////////// - distributions->getDistribution(f, ix1, ix2, ix3); + distributions->getPreCollisionDistribution(f, ix1, ix2, ix3); ////////////////////////////////////////////////////////////////////////// // compute velocity ////////////////////////////////////////////////////////////////////////// - vx = ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_PMM] - f[DIR_MPP]) + (f[DIR_PPM] - f[DIR_MMP]))) + - (((f[DIR_P0M] - f[DIR_M0P]) + (f[DIR_P0P] - f[DIR_M0M])) + ((f[DIR_PM0] - f[DIR_MP0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_P00] - f[DIR_M00])); + vx = ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dPMM] - f[dMPP]) + (f[dPPM] - f[dMMP]))) + + (((f[dP0M] - f[dM0P]) + (f[dP0P] - f[dM0M])) + ((f[dPM0] - f[dMP0]) + (f[dPP0] - f[dMM0]))) + (f[dP00] - f[dM00])); - vy = ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_MPM] - f[DIR_PMP])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_PPM] - f[DIR_MMP]))) + - (((f[DIR_0PM] - f[DIR_0MP]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_MP0] - f[DIR_PM0]) + (f[DIR_PP0] - f[DIR_MM0]))) + (f[DIR_0P0] - f[DIR_0M0])); + vy = ((((f[dPPP] - f[dMMM]) + (f[dMPM] - f[dPMP])) + ((f[dMPP] - f[dPMM]) + (f[dPPM] - f[dMMP]))) + + (((f[d0PM] - f[d0MP]) + (f[d0PP] - f[d0MM])) + ((f[dMP0] - f[dPM0]) + (f[dPP0] - f[dMM0]))) + (f[d0P0] - f[d0M0])); - vz = ((((f[DIR_PPP] - f[DIR_MMM]) + (f[DIR_PMP] - f[DIR_MPM])) + ((f[DIR_MPP] - f[DIR_PMM]) + (f[DIR_MMP] - f[DIR_PPM]))) + - (((f[DIR_0MP] - f[DIR_0PM]) + (f[DIR_0PP] - f[DIR_0MM])) + ((f[DIR_M0P] - f[DIR_P0M]) + (f[DIR_P0P] - f[DIR_M0M]))) + (f[DIR_00P] - f[DIR_00M])); + vz = ((((f[dPPP] - f[dMMM]) + (f[dPMP] - f[dMPM])) + ((f[dMPP] - f[dPMM]) + (f[dMMP] - f[dPPM]))) + + (((f[d0MP] - f[d0PM]) + (f[d0PP] - f[d0MM])) + ((f[dM0P] - f[dP0M]) + (f[dP0P] - f[dM0M]))) + (f[d00P] - f[d00M])); sxy = c3o1 * collFactor / (collFactor - c1o1) * - (((f[DIR_PPP] + f[DIR_MMM]) - (f[DIR_PMP] + f[DIR_MPM])) + (-(f[DIR_PMM] + f[DIR_MPP]) + (f[DIR_MMP] + f[DIR_PPM])) + - (((f[DIR_PP0] + f[DIR_MM0]) - (f[DIR_PM0] + f[DIR_MP0]))) - vx * vy); + (((f[dPPP] + f[dMMM]) - (f[dPMP] + f[dMPM])) + (-(f[dPMM] + f[dMPP]) + (f[dMMP] + f[dPPM])) + + (((f[dPP0] + f[dMM0]) - (f[dPM0] + f[dMP0]))) - vx * vy); sxz = c3o1 * collFactor / (collFactor - c1o1) * - (((f[DIR_PPP] + f[DIR_MMM]) + (f[DIR_PMP] + f[DIR_MPM])) + (-(f[DIR_PMM] + f[DIR_MPP]) - (f[DIR_MMP] + f[DIR_PPM])) + - ((f[DIR_P0P] + f[DIR_M0M]) - (f[DIR_P0M] + f[DIR_M0P])) - vx * vz); + (((f[dPPP] + f[dMMM]) + (f[dPMP] + f[dMPM])) + (-(f[dPMM] + f[dMPP]) - (f[dMMP] + f[dPPM])) + + ((f[dP0P] + f[dM0M]) - (f[dP0M] + f[dM0P])) - vx * vz); syz = c3o1 * collFactor / (collFactor - c1o1) * - (((f[DIR_PPP] + f[DIR_MMM]) - (f[DIR_PMP] + f[DIR_MPM])) + ((f[DIR_PMM] + f[DIR_MPP]) - (f[DIR_MMP] + f[DIR_PPM])) + - (-(f[DIR_0PM] + f[DIR_0MP]) + (f[DIR_0PP] + f[DIR_0MM])) - vy * vz); + (((f[dPPP] + f[dMMM]) - (f[dPMP] + f[dMPM])) + ((f[dPMM] + f[dMPP]) - (f[dMMP] + f[dPPM])) + + (-(f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM])) - vy * vz); real dxxMyy = c3o1 / c2o1 * collFactor / (collFactor - c1o1) * - (((f[DIR_P0P] + f[DIR_M0M]) + (f[DIR_P0M] + f[DIR_M0P])) - ((f[DIR_0PM] + f[DIR_0MP]) + (f[DIR_0PP] + f[DIR_0MM])) + - ((f[DIR_P00] + f[DIR_M00]) - (f[DIR_0P0] + f[DIR_0M0])) - vx * vx + vy * vy); + (((f[dP0P] + f[dM0M]) + (f[dP0M] + f[dM0P])) - ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM])) + + ((f[dP00] + f[dM00]) - (f[d0P0] + f[d0M0])) - vx * vx + vy * vy); real dxxMzz = c3o1 / c2o1 * collFactor / (collFactor - c1o1) * - ((((f[DIR_PP0] + f[DIR_MM0]) + (f[DIR_PM0] + f[DIR_MP0])) - ((f[DIR_0PM] + f[DIR_0MP]) + (f[DIR_0PP] + f[DIR_0MM]))) + - ((f[DIR_P00] + f[DIR_M00]) - (f[DIR_00P] + f[DIR_00M])) - vx * vx + vz * vz); + ((((f[dPP0] + f[dMM0]) + (f[dPM0] + f[dMP0])) - ((f[d0PM] + f[d0MP]) + (f[d0PP] + f[d0MM]))) + + ((f[dP00] + f[dM00]) - (f[d00P] + f[d00M])) - vx * vx + vz * vz); // LBMReal dyyMzz =3.0/2.0 *collFactor/(collFactor-1.0)*((((f[NE] + f[SW]) + (f[SE] + // f[NW]))-((f[TE] + f[BW])+(f[BE]+ f[TW]))) @@ -571,32 +571,32 @@ void ShearStressSimulationObserver::findPlane(int ix1, int ix2, int ix3, SPtr<Gr "ix2=" + UbSystem::toString(ix2) + "ix3=" + UbSystem::toString(ix3) + "GlobalID=" + UbSystem::toString(block->getGlobalID()) + "dx=" + UbSystem::toString(dx) + - "T=" + UbSystem::toString(bcPtr->getQ(DIR_00P)) + - "B=" + UbSystem::toString(bcPtr->getQ(DIR_00M)) + - "E=" + UbSystem::toString(bcPtr->getQ(DIR_P00)) + - "W=" + UbSystem::toString(bcPtr->getQ(DIR_M00)) + - "N=" + UbSystem::toString(bcPtr->getQ(DIR_0P0)) + - "S=" + UbSystem::toString(bcPtr->getQ(DIR_0M0)) + - "NE=" + UbSystem::toString(bcPtr->getQ(DIR_PP0)) + - "SW=" + UbSystem::toString(bcPtr->getQ(DIR_MM0)) + - "SE=" + UbSystem::toString(bcPtr->getQ(DIR_PM0)) + - "NW=" + UbSystem::toString(bcPtr->getQ(DIR_MP0)) + - "TE=" + UbSystem::toString(bcPtr->getQ(DIR_P0P)) + - "BW=" + UbSystem::toString(bcPtr->getQ(DIR_M0M)) + - "BE=" + UbSystem::toString(bcPtr->getQ(DIR_P0M)) + - "TW=" + UbSystem::toString(bcPtr->getQ(DIR_M0P)) + - "TN=" + UbSystem::toString(bcPtr->getQ(DIR_0PP)) + - "BS=" + UbSystem::toString(bcPtr->getQ(DIR_0MM)) + - "BN=" + UbSystem::toString(bcPtr->getQ(DIR_0PM)) + - "TS=" + UbSystem::toString(bcPtr->getQ(DIR_0MP)) + - "TNE=" + UbSystem::toString(bcPtr->getQ(DIR_PPP)) + - "TNW=" + UbSystem::toString(bcPtr->getQ(DIR_MPP)) + - "TSE=" + UbSystem::toString(bcPtr->getQ(DIR_PMP)) + - "TSW=" + UbSystem::toString(bcPtr->getQ(DIR_MMP)) + - "BNE=" + UbSystem::toString(bcPtr->getQ(DIR_PPM)) + - "BNW=" + UbSystem::toString(bcPtr->getQ(DIR_MPM)) + - "BSE=" + UbSystem::toString(bcPtr->getQ(DIR_PMM)) + - "BSW=" + UbSystem::toString(bcPtr->getQ(DIR_MMM) * dx))); + "T=" + UbSystem::toString(bcPtr->getQ(d00P)) + + "B=" + UbSystem::toString(bcPtr->getQ(d00M)) + + "E=" + UbSystem::toString(bcPtr->getQ(dP00)) + + "W=" + UbSystem::toString(bcPtr->getQ(dM00)) + + "N=" + UbSystem::toString(bcPtr->getQ(d0P0)) + + "S=" + UbSystem::toString(bcPtr->getQ(d0M0)) + + "NE=" + UbSystem::toString(bcPtr->getQ(dPP0)) + + "SW=" + UbSystem::toString(bcPtr->getQ(dMM0)) + + "SE=" + UbSystem::toString(bcPtr->getQ(dPM0)) + + "NW=" + UbSystem::toString(bcPtr->getQ(dMP0)) + + "TE=" + UbSystem::toString(bcPtr->getQ(dP0P)) + + "BW=" + UbSystem::toString(bcPtr->getQ(dM0M)) + + "BE=" + UbSystem::toString(bcPtr->getQ(dP0M)) + + "TW=" + UbSystem::toString(bcPtr->getQ(dM0P)) + + "TN=" + UbSystem::toString(bcPtr->getQ(d0PP)) + + "BS=" + UbSystem::toString(bcPtr->getQ(d0MM)) + + "BN=" + UbSystem::toString(bcPtr->getQ(d0PM)) + + "TS=" + UbSystem::toString(bcPtr->getQ(d0MP)) + + "TNE=" + UbSystem::toString(bcPtr->getQ(dPPP)) + + "TNW=" + UbSystem::toString(bcPtr->getQ(dMPP)) + + "TSE=" + UbSystem::toString(bcPtr->getQ(dPMP)) + + "TSW=" + UbSystem::toString(bcPtr->getQ(dMMP)) + + "BNE=" + UbSystem::toString(bcPtr->getQ(dPPM)) + + "BNW=" + UbSystem::toString(bcPtr->getQ(dMPM)) + + "BSE=" + UbSystem::toString(bcPtr->getQ(dPMM)) + + "BSW=" + UbSystem::toString(bcPtr->getQ(dMMM) * dx))); } } @@ -617,7 +617,7 @@ void ShearStressSimulationObserver::findPlane(int ix1, int ix2, int ix3, SPtr<Gr if (ii <= 2) { real q = bcPtrIn->getQ(fdir); if (q != 999.00000) { - if (fdir == DIR_P00) { + if (fdir == dP00) { // if(!bcArray->isSolid(i, j, k))continue; if (i + q <= x + 1) { if (ii == 0) { @@ -643,7 +643,7 @@ void ShearStressSimulationObserver::findPlane(int ix1, int ix2, int ix3, SPtr<Gr } } } - if (fdir == DIR_M00) { + if (fdir == dM00) { // if(!bcArray->isSolid(i, j, k))continue; if (i - q >= x) { if (ii == 0) { @@ -669,7 +669,7 @@ void ShearStressSimulationObserver::findPlane(int ix1, int ix2, int ix3, SPtr<Gr } } } - if (fdir == DIR_0P0) { + if (fdir == d0P0) { // if(!bcArray->isSolid(i, j, k))continue; if (j + q <= y + 1) { if (ii == 0) { @@ -695,7 +695,7 @@ void ShearStressSimulationObserver::findPlane(int ix1, int ix2, int ix3, SPtr<Gr } } } - if (fdir == DIR_0M0) { + if (fdir == d0M0) { // if(!bcArray->isSolid(i, j, k))continue; if (j - q >= y) { if (ii == 0) { @@ -722,7 +722,7 @@ void ShearStressSimulationObserver::findPlane(int ix1, int ix2, int ix3, SPtr<Gr } } - if (fdir == DIR_00P) { + if (fdir == d00P) { // if(!bcArray->isSolid(i, j, k))continue; if (k + q <= z + 1) { if (ii == 0) { @@ -748,7 +748,7 @@ void ShearStressSimulationObserver::findPlane(int ix1, int ix2, int ix3, SPtr<Gr } } } - if (fdir == DIR_00M) { + if (fdir == d00M) { // if(!bcArray->isSolid(i, j, k))continue; if (k - q >= z) { if (ii == 0) { @@ -797,32 +797,32 @@ void ShearStressSimulationObserver::findPlane(int ix1, int ix2, int ix3, SPtr<Gr UB_EXARGS, "ii is=" + UbSystem::toString(ii) + " ix1=" + UbSystem::toString(ix1) + " ix2=" + UbSystem::toString(ix2) + " ix3=" + UbSystem::toString(ix3) + " Block3D::GlobalID=" + UbSystem::toString(block->getGlobalID()) + " dx=" + - UbSystem::toString(dx) + " T=" + UbSystem::toString(bcPtr->getQ(DIR_00P)) + - " B=" + UbSystem::toString(bcPtr->getQ(DIR_00M)) + - " E=" + UbSystem::toString(bcPtr->getQ(DIR_P00)) + - " W=" + UbSystem::toString(bcPtr->getQ(DIR_M00)) + - " N=" + UbSystem::toString(bcPtr->getQ(DIR_0P0)) + - " S=" + UbSystem::toString(bcPtr->getQ(DIR_0M0)) + - " NE=" + UbSystem::toString(bcPtr->getQ(DIR_PP0)) + - " SW=" + UbSystem::toString(bcPtr->getQ(DIR_MM0)) + - " SE=" + UbSystem::toString(bcPtr->getQ(DIR_PM0)) + - " NW=" + UbSystem::toString(bcPtr->getQ(DIR_MP0)) + - " TE=" + UbSystem::toString(bcPtr->getQ(DIR_P0P)) + - " BW=" + UbSystem::toString(bcPtr->getQ(DIR_M0M)) + - " BE=" + UbSystem::toString(bcPtr->getQ(DIR_P0M)) + - " TW=" + UbSystem::toString(bcPtr->getQ(DIR_M0P)) + - " TN=" + UbSystem::toString(bcPtr->getQ(DIR_0PP)) + - " BS=" + UbSystem::toString(bcPtr->getQ(DIR_0MM)) + - " BN=" + UbSystem::toString(bcPtr->getQ(DIR_0PM)) + - " TS=" + UbSystem::toString(bcPtr->getQ(DIR_0MP)) + - " TNE=" + UbSystem::toString(bcPtr->getQ(DIR_PPP)) + - " TNW=" + UbSystem::toString(bcPtr->getQ(DIR_MPP)) + - " TSE=" + UbSystem::toString(bcPtr->getQ(DIR_PMP)) + - " TSW=" + UbSystem::toString(bcPtr->getQ(DIR_MMP)) + - " BNE=" + UbSystem::toString(bcPtr->getQ(DIR_PPM)) + - " BNW=" + UbSystem::toString(bcPtr->getQ(DIR_MPM)) + - " BSE=" + UbSystem::toString(bcPtr->getQ(DIR_PMM)) + - " BSW=" + UbSystem::toString(bcPtr->getQ(DIR_MMM)))); + UbSystem::toString(dx) + " T=" + UbSystem::toString(bcPtr->getQ(d00P)) + + " B=" + UbSystem::toString(bcPtr->getQ(d00M)) + + " E=" + UbSystem::toString(bcPtr->getQ(dP00)) + + " W=" + UbSystem::toString(bcPtr->getQ(dM00)) + + " N=" + UbSystem::toString(bcPtr->getQ(d0P0)) + + " S=" + UbSystem::toString(bcPtr->getQ(d0M0)) + + " NE=" + UbSystem::toString(bcPtr->getQ(dPP0)) + + " SW=" + UbSystem::toString(bcPtr->getQ(dMM0)) + + " SE=" + UbSystem::toString(bcPtr->getQ(dPM0)) + + " NW=" + UbSystem::toString(bcPtr->getQ(dMP0)) + + " TE=" + UbSystem::toString(bcPtr->getQ(dP0P)) + + " BW=" + UbSystem::toString(bcPtr->getQ(dM0M)) + + " BE=" + UbSystem::toString(bcPtr->getQ(dP0M)) + + " TW=" + UbSystem::toString(bcPtr->getQ(dM0P)) + + " TN=" + UbSystem::toString(bcPtr->getQ(d0PP)) + + " BS=" + UbSystem::toString(bcPtr->getQ(d0MM)) + + " BN=" + UbSystem::toString(bcPtr->getQ(d0PM)) + + " TS=" + UbSystem::toString(bcPtr->getQ(d0MP)) + + " TNE=" + UbSystem::toString(bcPtr->getQ(dPPP)) + + " TNW=" + UbSystem::toString(bcPtr->getQ(dMPP)) + + " TSE=" + UbSystem::toString(bcPtr->getQ(dPMP)) + + " TSW=" + UbSystem::toString(bcPtr->getQ(dMMP)) + + " BNE=" + UbSystem::toString(bcPtr->getQ(dPPM)) + + " BNW=" + UbSystem::toString(bcPtr->getQ(dMPM)) + + " BSE=" + UbSystem::toString(bcPtr->getQ(dPMM)) + + " BSW=" + UbSystem::toString(bcPtr->getQ(dMMM)))); } } } @@ -888,22 +888,22 @@ void ShearStressSimulationObserver::initDistance() continue; int numberOfCorner = 0; - if (bc->getQ(DIR_00P) != 999.000) { + if (bc->getQ(d00P) != 999.000) { numberOfCorner++; } - if (bc->getQ(DIR_00M) != 999.000) { + if (bc->getQ(d00M) != 999.000) { numberOfCorner++; } - if (bc->getQ(DIR_P00) != 999.000) { + if (bc->getQ(dP00) != 999.000) { numberOfCorner++; } - if (bc->getQ(DIR_M00) != 999.000) { + if (bc->getQ(dM00) != 999.000) { numberOfCorner++; } - if (bc->getQ(DIR_0P0) != 999.000) { + if (bc->getQ(d0P0) != 999.000) { numberOfCorner++; } - if (bc->getQ(DIR_0M0) != 999.000) { + if (bc->getQ(d0M0) != 999.000) { numberOfCorner++; } // if(bc->hasVelocityBoundary()||bc->hasDensityBoundary())continue; diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/ShearStressSimulationObserver.h b/src/cpu/core/SimulationObservers/ShearStressSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/ShearStressSimulationObserver.h rename to src/cpu/core/SimulationObservers/ShearStressSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/SimulationObserver.cpp b/src/cpu/core/SimulationObservers/SimulationObserver.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/SimulationObserver.cpp rename to src/cpu/core/SimulationObservers/SimulationObserver.cpp diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/SimulationObserver.h b/src/cpu/core/SimulationObservers/SimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/SimulationObserver.h rename to src/cpu/core/SimulationObservers/SimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/TimeAveragedValuesSimulationObserver.cpp b/src/cpu/core/SimulationObservers/TimeAveragedValuesSimulationObserver.cpp similarity index 99% rename from src/cpu/VirtualFluidsCore/SimulationObservers/TimeAveragedValuesSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/TimeAveragedValuesSimulationObserver.cpp index 7f915be1a931fb61a4c59ab9d20677f4d3be97ad..5161e887b63c8c0b1ed945839a00f25b2fb5d070 100644 --- a/src/cpu/VirtualFluidsCore/SimulationObservers/TimeAveragedValuesSimulationObserver.cpp +++ b/src/cpu/core/SimulationObservers/TimeAveragedValuesSimulationObserver.cpp @@ -286,7 +286,7 @@ void TimeAveragedValuesSimulationObserver::addData(const SPtr<Block3D> block) data[index++].push_back(level); - distributions->getDistribution(f, ix1, ix2, ix3); + distributions->getPreCollisionDistribution(f, ix1, ix2, ix3); calcMacros(f, rho, vx1, vx2, vx3); data[index++].push_back(rho); @@ -516,7 +516,7 @@ void TimeAveragedValuesSimulationObserver::calculateSubtotal(real step) // read distribution //////////////////////////////////////////////////////////////////////////// - distributions->getDistribution(f, ix1, ix2, ix3); + distributions->getPreCollisionDistribution(f, ix1, ix2, ix3); ////////////////////////////////////////////////////////////////////////// // compute velocity ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/TimeAveragedValuesSimulationObserver.h b/src/cpu/core/SimulationObservers/TimeAveragedValuesSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/TimeAveragedValuesSimulationObserver.h rename to src/cpu/core/SimulationObservers/TimeAveragedValuesSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/TimeDependentBCSimulationObserver.cpp b/src/cpu/core/SimulationObservers/TimeDependentBCSimulationObserver.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/TimeDependentBCSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/TimeDependentBCSimulationObserver.cpp diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/TimeDependentBCSimulationObserver.h b/src/cpu/core/SimulationObservers/TimeDependentBCSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/TimeDependentBCSimulationObserver.h rename to src/cpu/core/SimulationObservers/TimeDependentBCSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/TimeseriesSimulationObserver.cpp b/src/cpu/core/SimulationObservers/TimeseriesSimulationObserver.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/TimeseriesSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/TimeseriesSimulationObserver.cpp diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/TimeseriesSimulationObserver.h b/src/cpu/core/SimulationObservers/TimeseriesSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/TimeseriesSimulationObserver.h rename to src/cpu/core/SimulationObservers/TimeseriesSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/TurbulenceIntensitySimulationObserver.cpp b/src/cpu/core/SimulationObservers/TurbulenceIntensitySimulationObserver.cpp similarity index 92% rename from src/cpu/VirtualFluidsCore/SimulationObservers/TurbulenceIntensitySimulationObserver.cpp rename to src/cpu/core/SimulationObservers/TurbulenceIntensitySimulationObserver.cpp index d5a0ccb593488f4e992fef0fc7591c0672fc24ed..424c3411f05400597c1722df793153354ba874b7 100644 --- a/src/cpu/VirtualFluidsCore/SimulationObservers/TurbulenceIntensitySimulationObserver.cpp +++ b/src/cpu/core/SimulationObservers/TurbulenceIntensitySimulationObserver.cpp @@ -212,18 +212,18 @@ void TurbulenceIntensitySimulationObserver::calculateAverageValues(real timeStep ////////////////////////////////////////////////////////////////////////// // read distribution //////////////////////////////////////////////////////////////////////////// - distributions->getDistribution(f, ix1, ix2, ix3); + distributions->getPreCollisionDistribution(f, ix1, ix2, ix3); ////////////////////////////////////////////////////////////////////////// // compute velocity ////////////////////////////////////////////////////////////////////////// - vx = f[DIR_P00] - f[DIR_M00] + f[DIR_PP0] - f[DIR_MM0] + f[DIR_PM0] - f[DIR_MP0] + f[DIR_P0P] - f[DIR_M0M] + f[DIR_P0M] - f[DIR_M0P] + - f[DIR_PPP] - f[DIR_MMP] + f[DIR_PMP] - f[DIR_MPP] + f[DIR_PPM] - f[DIR_MMM] + f[DIR_PMM] - f[DIR_MPM]; + vx = f[dP00] - f[dM00] + f[dPP0] - f[dMM0] + f[dPM0] - f[dMP0] + f[dP0P] - f[dM0M] + f[dP0M] - f[dM0P] + + f[dPPP] - f[dMMP] + f[dPMP] - f[dMPP] + f[dPPM] - f[dMMM] + f[dPMM] - f[dMPM]; - vy = f[DIR_0P0] - f[DIR_0M0] + f[DIR_PP0] - f[DIR_MM0] - f[DIR_PM0] + f[DIR_MP0] + f[DIR_0PP] - f[DIR_0MM] + f[DIR_0PM] - f[DIR_0MP] + - f[DIR_PPP] - f[DIR_MMP] - f[DIR_PMP] + f[DIR_MPP] + f[DIR_PPM] - f[DIR_MMM] - f[DIR_PMM] + f[DIR_MPM]; + vy = f[d0P0] - f[d0M0] + f[dPP0] - f[dMM0] - f[dPM0] + f[dMP0] + f[d0PP] - f[d0MM] + f[d0PM] - f[d0MP] + + f[dPPP] - f[dMMP] - f[dPMP] + f[dMPP] + f[dPPM] - f[dMMM] - f[dPMM] + f[dMPM]; - vz = f[DIR_00P] - f[DIR_00M] + f[DIR_P0P] - f[DIR_M0M] - f[DIR_P0M] + f[DIR_M0P] + f[DIR_0PP] - f[DIR_0MM] - f[DIR_0PM] + f[DIR_0MP] + - f[DIR_PPP] + f[DIR_MMP] + f[DIR_PMP] + f[DIR_MPP] - f[DIR_PPM] - f[DIR_MMM] - f[DIR_PMM] - f[DIR_MPM]; + vz = f[d00P] - f[d00M] + f[dP0P] - f[dM0M] - f[dP0M] + f[dM0P] + f[d0PP] - f[d0MM] - f[d0PM] + f[d0MP] + + f[dPPP] + f[dMMP] + f[dPMP] + f[dMPP] - f[dPPM] - f[dMMM] - f[dPMM] - f[dMPM]; ////////////////////////////////////////////////////////////////////////// // compute average values ////////////////////////////////////////////////////////////////////////// diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/TurbulenceIntensitySimulationObserver.h b/src/cpu/core/SimulationObservers/TurbulenceIntensitySimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/TurbulenceIntensitySimulationObserver.h rename to src/cpu/core/SimulationObservers/TurbulenceIntensitySimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteBlocksSimulationObserver.cpp b/src/cpu/core/SimulationObservers/WriteBlocksSimulationObserver.cpp similarity index 99% rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteBlocksSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/WriteBlocksSimulationObserver.cpp index 15a1c39cf268659d8cc8dec4b7633636049a019d..45ea8b5714775bca42b23dc14d96fa764129d962 100644 --- a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteBlocksSimulationObserver.cpp +++ b/src/cpu/core/SimulationObservers/WriteBlocksSimulationObserver.cpp @@ -123,7 +123,7 @@ void WriteBlocksSimulationObserver::collectData(real step) // for (std::size_t i = 0; i<connectors.size(); i++) // if (connectors[i]) // { - // if (connectors[i]->getSendDir() == D3Q27System::DIR_0MM) + // if (connectors[i]->getSendDir() == D3Q27System::d0MM) // { // flag = true; @@ -146,7 +146,7 @@ void WriteBlocksSimulationObserver::collectData(real step) // for (std::size_t i = 0; i<connectors.size(); i++) // if (connectors[i]) // { - // if (connectors[i]->getSendDir() == D3Q27System::DIR_0MM) + // if (connectors[i]->getSendDir() == D3Q27System::d0MM) // { // flag = true; diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteBlocksSimulationObserver.h b/src/cpu/core/SimulationObservers/WriteBlocksSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteBlocksSimulationObserver.h rename to src/cpu/core/SimulationObservers/WriteBlocksSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteBoundaryConditionsSimulationObserver.cpp b/src/cpu/core/SimulationObservers/WriteBoundaryConditionsSimulationObserver.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteBoundaryConditionsSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/WriteBoundaryConditionsSimulationObserver.cpp diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteBoundaryConditionsSimulationObserver.h b/src/cpu/core/SimulationObservers/WriteBoundaryConditionsSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteBoundaryConditionsSimulationObserver.h rename to src/cpu/core/SimulationObservers/WriteBoundaryConditionsSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteGbObjectsSimulationObserver.cpp b/src/cpu/core/SimulationObservers/WriteGbObjectsSimulationObserver.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteGbObjectsSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/WriteGbObjectsSimulationObserver.cpp diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteGbObjectsSimulationObserver.h b/src/cpu/core/SimulationObservers/WriteGbObjectsSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteGbObjectsSimulationObserver.h rename to src/cpu/core/SimulationObservers/WriteGbObjectsSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteMQFromSelectionSimulationObserver.cpp b/src/cpu/core/SimulationObservers/WriteMQFromSelectionSimulationObserver.cpp similarity index 99% rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteMQFromSelectionSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/WriteMQFromSelectionSimulationObserver.cpp index 945058c8e94b2d7780c4a03444c0848267b4b8f7..b95930db587687142c4339ad1b7b6edae9a815f9 100644 --- a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteMQFromSelectionSimulationObserver.cpp +++ b/src/cpu/core/SimulationObservers/WriteMQFromSelectionSimulationObserver.cpp @@ -174,7 +174,7 @@ void WriteMQFromSelectionSimulationObserver::addDataMQ(SPtr<Block3D> block) nodes.emplace_back(float(worldCoordinates[0]), float(worldCoordinates[1]), float(worldCoordinates[2])); - distributions->getDistribution(f, ix1, ix2, ix3); + distributions->getPreCollisionDistribution(f, ix1, ix2, ix3); calcMacros(f, rho, vx1, vx2, vx3); if (UbMath::isNaN(rho) || UbMath::isInfinity(rho)) diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteMQFromSelectionSimulationObserver.h b/src/cpu/core/SimulationObservers/WriteMQFromSelectionSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteMQFromSelectionSimulationObserver.h rename to src/cpu/core/SimulationObservers/WriteMQFromSelectionSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.cpp b/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.cpp similarity index 99% rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.cpp index f098a21f536ba9ee1c8786007fe5ef272fb674af..733d9d80672c483696b84b0b1ae14be660ed4866 100644 --- a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.cpp +++ b/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.cpp @@ -209,7 +209,7 @@ void WriteMacroscopicQuantitiesPlusMassSimulationObserver::addDataMQ(SPtr<Block3 nodes.push_back(UbTupleFloat3(float(worldCoordinates[0]), float(worldCoordinates[1]), float(worldCoordinates[2]))); - distributions->getDistribution(f, ix1, ix2, ix3); + distributions->getPreCollisionDistribution(f, ix1, ix2, ix3); calcMacros(f, rho, vx1, vx2, vx3); //double press = D3Q27System::getPressure(f); // D3Q27System::calcPress(f,rho,vx1,vx2,vx3); diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.h b/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.h rename to src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesPlusMassSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.cpp b/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.cpp similarity index 99% rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.cpp rename to src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.cpp index d5c80b4df56bc303361572e9114ab57efe995ecc..704f09ce2eb6ceae11d604ecd9cf22fc0d3fb83c 100644 --- a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.cpp +++ b/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.cpp @@ -209,7 +209,7 @@ void WriteMacroscopicQuantitiesSimulationObserver::addDataMQ(SPtr<Block3D> block nodes.push_back(UbTupleFloat3(real(worldCoordinates[0]), real(worldCoordinates[1]), real(worldCoordinates[2]))); - distributions->getDistribution(f, ix1, ix2, ix3); + distributions->getPreCollisionDistribution(f, ix1, ix2, ix3); calcMacros(f, rho, vx1, vx2, vx3); //double press = D3Q27System::getPressure(f); // D3Q27System::calcPress(f,rho,vx1,vx2,vx3); diff --git a/src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.h b/src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.h similarity index 100% rename from src/cpu/VirtualFluidsCore/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.h rename to src/cpu/core/SimulationObservers/WriteMacroscopicQuantitiesSimulationObserver.h diff --git a/src/cpu/VirtualFluidsCore/Utilities/ChangeRandomQs.hpp b/src/cpu/core/Utilities/ChangeRandomQs.hpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Utilities/ChangeRandomQs.hpp rename to src/cpu/core/Utilities/ChangeRandomQs.hpp diff --git a/src/cpu/VirtualFluidsCore/Utilities/CheckpointConverter.cpp b/src/cpu/core/Utilities/CheckpointConverter.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Utilities/CheckpointConverter.cpp rename to src/cpu/core/Utilities/CheckpointConverter.cpp diff --git a/src/cpu/VirtualFluidsCore/Utilities/CheckpointConverter.h b/src/cpu/core/Utilities/CheckpointConverter.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Utilities/CheckpointConverter.h rename to src/cpu/core/Utilities/CheckpointConverter.h diff --git a/src/cpu/VirtualFluidsCore/Utilities/MathUtil.hpp b/src/cpu/core/Utilities/MathUtil.hpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Utilities/MathUtil.hpp rename to src/cpu/core/Utilities/MathUtil.hpp diff --git a/src/cpu/VirtualFluidsCore/Utilities/MemoryUtil.h b/src/cpu/core/Utilities/MemoryUtil.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Utilities/MemoryUtil.h rename to src/cpu/core/Utilities/MemoryUtil.h diff --git a/src/cpu/VirtualFluidsCore/Utilities/VoxelMatrixUtil.hpp b/src/cpu/core/Utilities/VoxelMatrixUtil.hpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Utilities/VoxelMatrixUtil.hpp rename to src/cpu/core/Utilities/VoxelMatrixUtil.hpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/Block3DVisitor.h b/src/cpu/core/Visitors/Block3DVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/Block3DVisitor.h rename to src/cpu/core/Visitors/Block3DVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.cpp b/src/cpu/core/Visitors/BoundaryConditionsBlockVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.cpp rename to src/cpu/core/Visitors/BoundaryConditionsBlockVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.h b/src/cpu/core/Visitors/BoundaryConditionsBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/BoundaryConditionsBlockVisitor.h rename to src/cpu/core/Visitors/BoundaryConditionsBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/ChangeBoundaryDensityBlockVisitor.cpp b/src/cpu/core/Visitors/ChangeBoundaryDensityBlockVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/ChangeBoundaryDensityBlockVisitor.cpp rename to src/cpu/core/Visitors/ChangeBoundaryDensityBlockVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/ChangeBoundaryDensityBlockVisitor.h b/src/cpu/core/Visitors/ChangeBoundaryDensityBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/ChangeBoundaryDensityBlockVisitor.h rename to src/cpu/core/Visitors/ChangeBoundaryDensityBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/CheckRatioBlockVisitor.cpp b/src/cpu/core/Visitors/CheckRatioBlockVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/CheckRatioBlockVisitor.cpp rename to src/cpu/core/Visitors/CheckRatioBlockVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/CheckRatioBlockVisitor.h b/src/cpu/core/Visitors/CheckRatioBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/CheckRatioBlockVisitor.h rename to src/cpu/core/Visitors/CheckRatioBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/CoarsenCrossAndInsideGbObjectBlockVisitor.cpp b/src/cpu/core/Visitors/CoarsenCrossAndInsideGbObjectBlockVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/CoarsenCrossAndInsideGbObjectBlockVisitor.cpp rename to src/cpu/core/Visitors/CoarsenCrossAndInsideGbObjectBlockVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/CoarsenCrossAndInsideGbObjectBlockVisitor.h b/src/cpu/core/Visitors/CoarsenCrossAndInsideGbObjectBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/CoarsenCrossAndInsideGbObjectBlockVisitor.h rename to src/cpu/core/Visitors/CoarsenCrossAndInsideGbObjectBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/CreateTransmittersHelper.cpp b/src/cpu/core/Visitors/CreateTransmittersHelper.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/CreateTransmittersHelper.cpp rename to src/cpu/core/Visitors/CreateTransmittersHelper.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/CreateTransmittersHelper.h b/src/cpu/core/Visitors/CreateTransmittersHelper.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/CreateTransmittersHelper.h rename to src/cpu/core/Visitors/CreateTransmittersHelper.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/GenBlocksGridVisitor.cpp b/src/cpu/core/Visitors/GenBlocksGridVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/GenBlocksGridVisitor.cpp rename to src/cpu/core/Visitors/GenBlocksGridVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/GenBlocksGridVisitor.h b/src/cpu/core/Visitors/GenBlocksGridVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/GenBlocksGridVisitor.h rename to src/cpu/core/Visitors/GenBlocksGridVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/Grid3DVisitor.h b/src/cpu/core/Visitors/Grid3DVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/Grid3DVisitor.h rename to src/cpu/core/Visitors/Grid3DVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp b/src/cpu/core/Visitors/InitDistributionsBlockVisitor.cpp similarity index 87% rename from src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp rename to src/cpu/core/Visitors/InitDistributionsBlockVisitor.cpp index 0cc445b303b29897076080aa0146ae64cba11e28..daef0aa7eea9c0d5180845f5fc3bd88bb9f1d4ba 100644 --- a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.cpp +++ b/src/cpu/core/Visitors/InitDistributionsBlockVisitor.cpp @@ -251,41 +251,41 @@ void InitDistributionsBlockVisitor::visit(const SPtr<Grid3D> grid, SPtr<Block3D> real f_TNW = - eps_new *((bz + cy)/(c36o1*o)) - f_TNE; - f[DIR_P00] = f_E + feq[DIR_P00]; - f[DIR_M00] = f_E + feq[DIR_M00]; - f[DIR_0P0] = f_N + feq[DIR_0P0]; - f[DIR_0M0] = f_N + feq[DIR_0M0]; - f[DIR_00P] = f_T + feq[DIR_00P]; - f[DIR_00M] = f_T + feq[DIR_00M]; - f[DIR_PP0] = f_NE + feq[DIR_PP0]; - f[DIR_MM0] = f_NE + feq[DIR_MM0]; - f[DIR_PM0] = f_SE + feq[DIR_PM0]; - f[DIR_MP0] = f_SE + feq[DIR_MP0]; - f[DIR_P0P] = f_TE + feq[DIR_P0P]; - f[DIR_M0M] = f_TE + feq[DIR_M0M]; - f[DIR_P0M] = f_BE + feq[DIR_P0M]; - f[DIR_M0P] = f_BE + feq[DIR_M0P]; - f[DIR_0PP] = f_TN + feq[DIR_0PP]; - f[DIR_0MM] = f_TN + feq[DIR_0MM]; - f[DIR_0PM] = f_BN + feq[DIR_0PM]; - f[DIR_0MP] = f_BN + feq[DIR_0MP]; - f[DIR_PPP] = f_TNE + feq[DIR_PPP]; - f[DIR_MPP] = f_TNW + feq[DIR_MPP]; - f[DIR_PMP] = f_TSE + feq[DIR_PMP]; - f[DIR_MMP] = f_TSW + feq[DIR_MMP]; - f[DIR_PPM] = f_TSW + feq[DIR_PPM]; - f[DIR_MPM] = f_TSE + feq[DIR_MPM]; - f[DIR_PMM] = f_TNW + feq[DIR_PMM]; - f[DIR_MMM] = f_TNE + feq[DIR_MMM]; - f[DIR_000] = f_ZERO + feq[DIR_000]; + f[dP00] = f_E + feq[dP00]; + f[dM00] = f_E + feq[dM00]; + f[d0P0] = f_N + feq[d0P0]; + f[d0M0] = f_N + feq[d0M0]; + f[d00P] = f_T + feq[d00P]; + f[d00M] = f_T + feq[d00M]; + f[dPP0] = f_NE + feq[dPP0]; + f[dMM0] = f_NE + feq[dMM0]; + f[dPM0] = f_SE + feq[dPM0]; + f[dMP0] = f_SE + feq[dMP0]; + f[dP0P] = f_TE + feq[dP0P]; + f[dM0M] = f_TE + feq[dM0M]; + f[dP0M] = f_BE + feq[dP0M]; + f[dM0P] = f_BE + feq[dM0P]; + f[d0PP] = f_TN + feq[d0PP]; + f[d0MM] = f_TN + feq[d0MM]; + f[d0PM] = f_BN + feq[d0PM]; + f[d0MP] = f_BN + feq[d0MP]; + f[dPPP] = f_TNE + feq[dPPP]; + f[dMPP] = f_TNW + feq[dMPP]; + f[dPMP] = f_TSE + feq[dPMP]; + f[dMMP] = f_TSW + feq[dMMP]; + f[dPPM] = f_TSW + feq[dPPM]; + f[dMPM] = f_TSE + feq[dMPM]; + f[dPMM] = f_TNW + feq[dPMM]; + f[dMMM] = f_TNE + feq[dMMM]; + f[d000] = f_ZERO + feq[d000]; //calcFeqsFct(f,rho,vx1,vx2,vx3); - distributions->setDistribution(f, ix1, ix2, ix3); - distributions->setDistributionInv(f, ix1, ix2, ix3); + distributions->setPostCollisionDistribution(f, ix1, ix2, ix3); + distributions->setPreCollisionDistribution(f, ix1, ix2, ix3); //distributions->swap(); - //distributions->setDistribution(f, ix1, ix2, ix3); - //distributions->setDistributionInv(f, ix1, ix2, ix3); + //distributions->setPostCollisionDistribution(f, ix1, ix2, ix3); + //distributions->setPreCollisionDistribution(f, ix1, ix2, ix3); //distributions->swap(); } diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.h b/src/cpu/core/Visitors/InitDistributionsBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/InitDistributionsBlockVisitor.h rename to src/cpu/core/Visitors/InitDistributionsBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsFromFileBlockVisitor.cpp b/src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.cpp similarity index 97% rename from src/cpu/VirtualFluidsCore/Visitors/InitDistributionsFromFileBlockVisitor.cpp rename to src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.cpp index 3a51f5532532e4ac116221a551a1d4ad9bb5e66c..e3e058b2810719d0466afd1276c8aaa342d185a0 100644 --- a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsFromFileBlockVisitor.cpp +++ b/src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.cpp @@ -202,7 +202,7 @@ void InitDistributionsFromFileBlockVisitor::visit(const SPtr<Grid3D> grid, SPtr< // f_TSW = -eps_new *((ay + bx) / (36.*o)) - f_TNE; double f_TSE = -eps_new *((az + cx) / (36.*o)) - // f_TNE; double f_TNW = -eps_new *((bz + cy) / (36.*o)) - f_TNE; - // f[DIR_P00] = f_E + feq[DIR_P00]; + // f[dP00] = f_E + feq[dP00]; // f[W] = f_E + feq[W]; // f[N] = f_N + feq[N]; // f[S] = f_N + feq[S]; @@ -232,8 +232,8 @@ void InitDistributionsFromFileBlockVisitor::visit(const SPtr<Grid3D> grid, SPtr< calcFeqsFct(f, rho, vx1, vx2, vx3); - distributions->setDistribution(f, ix1, ix2, ix3); - distributions->setDistributionInv(f, ix1, ix2, ix3); + distributions->setPostCollisionDistribution(f, ix1, ix2, ix3); + distributions->setPreCollisionDistribution(f, ix1, ix2, ix3); dynamicPointerCast<InitDensityLBMKernel>(kernel)->setVelocity(ix1, ix2, ix3, vx1, vx2, vx3); } } diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsFromFileBlockVisitor.h b/src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/InitDistributionsFromFileBlockVisitor.h rename to src/cpu/core/Visitors/InitDistributionsFromFileBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsWithInterpolationGridVisitor.cpp b/src/cpu/core/Visitors/InitDistributionsWithInterpolationGridVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/InitDistributionsWithInterpolationGridVisitor.cpp rename to src/cpu/core/Visitors/InitDistributionsWithInterpolationGridVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitDistributionsWithInterpolationGridVisitor.h b/src/cpu/core/Visitors/InitDistributionsWithInterpolationGridVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/InitDistributionsWithInterpolationGridVisitor.h rename to src/cpu/core/Visitors/InitDistributionsWithInterpolationGridVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitThixotropyBlockVisitor.cpp b/src/cpu/core/Visitors/InitThixotropyBlockVisitor.cpp similarity index 98% rename from src/cpu/VirtualFluidsCore/Visitors/InitThixotropyBlockVisitor.cpp rename to src/cpu/core/Visitors/InitThixotropyBlockVisitor.cpp index 79c354e5f28724279447a4751ba81c3b6eba0958..00d0e9e7f26d6d50caa9ec5f46f7984ab7c3b1c8 100644 --- a/src/cpu/VirtualFluidsCore/Visitors/InitThixotropyBlockVisitor.cpp +++ b/src/cpu/core/Visitors/InitThixotropyBlockVisitor.cpp @@ -281,15 +281,15 @@ void InitThixotropyBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block) //initialize(h, x1, x2, x3, f1, f2, f3, conc, coords, dx, oDiffusion, false); - //distributionsf->setDistribution(f, ix1, ix2, ix3); - //distributionsf->setDistributionInv(f, ix1, ix2, ix3); + //distributionsf->setPostCollisionDistribution(f, ix1, ix2, ix3); + //distributionsf->setPreCollisionDistribution(f, ix1, ix2, ix3); real lambda = muLambda.Eval(); calcFeqsFct(h,lambda,c0o1,c0o1,c0o1); - distributions->setDistribution(h, ix1, ix2, ix3); - distributions->setDistributionInv(h, ix1, ix2, ix3); + distributions->setPostCollisionDistribution(h, ix1, ix2, ix3); + distributions->setPreCollisionDistribution(h, ix1, ix2, ix3); } @@ -429,7 +429,7 @@ void InitThixotropyBlockVisitor::checkFunction(mu::Parser fct) // double f_TNW = -eps_new * ((bz + cy) / (36. * o)) - f_TNE; // // -// f[DIR_P00] = f_E + feq[DIR_P00]; +// f[dP00] = f_E + feq[dP00]; // f[W] = f_E + feq[W]; // f[N] = f_N + feq[N]; // f[S] = f_N + feq[S]; diff --git a/src/cpu/VirtualFluidsCore/Visitors/InitThixotropyBlockVisitor.h b/src/cpu/core/Visitors/InitThixotropyBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/InitThixotropyBlockVisitor.h rename to src/cpu/core/Visitors/InitThixotropyBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.cpp b/src/cpu/core/Visitors/MetisPartitioningGridVisitor.cpp similarity index 97% rename from src/cpu/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.cpp rename to src/cpu/core/Visitors/MetisPartitioningGridVisitor.cpp index 30708d664deb405954f95a4aac58cd6c01d17153..26787a1530681d98f29469c95443503611ec62ce 100644 --- a/src/cpu/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.cpp +++ b/src/cpu/core/Visitors/MetisPartitioningGridVisitor.cpp @@ -135,7 +135,7 @@ void MetisPartitioningGridVisitor::buildMetisGraphLevelIntersected(SPtr<Grid3D> // the weights of the vertices are 2^level of grid (1, 2, 4, 8 .....) 1<<level metis.vwgt.push_back((idx_t)(1 << block->getLevel())); - for (int dir = (int)DIR_P00; dir <= numOfDirs; dir++) { + for (int dir = (int)dP00; dir <= numOfDirs; dir++) { SPtr<Block3D> neighBlock = grid->getNeighborBlock(dir, block); if (neighBlock) { if (this->getPartitionCondition(neighBlock, level)) { @@ -204,7 +204,7 @@ void MetisPartitioningGridVisitor::buildMetisGraphLevelBased(SPtr<Grid3D> grid, metis.xadj.push_back(edges); metis.vwgt.push_back(vertexWeight); - for (int dir = (int)DIR_P00; dir <= numOfDirs; dir++) { + for (int dir = (int)dP00; dir <= numOfDirs; dir++) { SPtr<Block3D> neighBlock = grid->getNeighborBlock(dir, block); if (neighBlock) { if (this->getPartitionCondition(neighBlock, level)) { @@ -262,11 +262,11 @@ int MetisPartitioningGridVisitor::getEdgeWeight(int dir) using namespace D3Q27System; using namespace vf::lbm::dir; - if (dir <= (int)DIR_00M) { + if (dir <= (int)d00M) { return 100; - } else if (dir >= (int)DIR_PP0 && dir <= (int)DIR_0MP) { + } else if (dir >= (int)dPP0 && dir <= (int)d0MP) { return 10; - } else if (dir >= (int)DIR_PPP) { + } else if (dir >= (int)dPPP) { return 1; } diff --git a/src/cpu/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.h b/src/cpu/core/Visitors/MetisPartitioningGridVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/MetisPartitioningGridVisitor.h rename to src/cpu/core/Visitors/MetisPartitioningGridVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/OverlapBlockVisitor.cpp b/src/cpu/core/Visitors/OverlapBlockVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/OverlapBlockVisitor.cpp rename to src/cpu/core/Visitors/OverlapBlockVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/OverlapBlockVisitor.h b/src/cpu/core/Visitors/OverlapBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/OverlapBlockVisitor.h rename to src/cpu/core/Visitors/OverlapBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/PQueuePartitioningGridVisitor.cpp b/src/cpu/core/Visitors/PQueuePartitioningGridVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/PQueuePartitioningGridVisitor.cpp rename to src/cpu/core/Visitors/PQueuePartitioningGridVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/PQueuePartitioningGridVisitor.h b/src/cpu/core/Visitors/PQueuePartitioningGridVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/PQueuePartitioningGridVisitor.h rename to src/cpu/core/Visitors/PQueuePartitioningGridVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/RatioBlockVisitor.cpp b/src/cpu/core/Visitors/RatioBlockVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/RatioBlockVisitor.cpp rename to src/cpu/core/Visitors/RatioBlockVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/RatioBlockVisitor.h b/src/cpu/core/Visitors/RatioBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/RatioBlockVisitor.h rename to src/cpu/core/Visitors/RatioBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/RatioSmoothBlockVisitor.cpp b/src/cpu/core/Visitors/RatioSmoothBlockVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/RatioSmoothBlockVisitor.cpp rename to src/cpu/core/Visitors/RatioSmoothBlockVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/RatioSmoothBlockVisitor.h b/src/cpu/core/Visitors/RatioSmoothBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/RatioSmoothBlockVisitor.h rename to src/cpu/core/Visitors/RatioSmoothBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/RefineAroundGbObjectHelper.cpp b/src/cpu/core/Visitors/RefineAroundGbObjectHelper.cpp similarity index 97% rename from src/cpu/VirtualFluidsCore/Visitors/RefineAroundGbObjectHelper.cpp rename to src/cpu/core/Visitors/RefineAroundGbObjectHelper.cpp index b2eefc859d26ef92d43bb7701a1eb96e6a7a6f4a..3245fa58c090d0cc790a40ddef69f13ab638cd16 100644 --- a/src/cpu/VirtualFluidsCore/Visitors/RefineAroundGbObjectHelper.cpp +++ b/src/cpu/core/Visitors/RefineAroundGbObjectHelper.cpp @@ -40,7 +40,7 @@ void RefineAroundGbObjectHelper::refine() grid->accept(overlapVisitor); std::vector<int> dirs; - for (int i = (int)DIR_P00; i <= (int)DIR_0MP; i++) { + for (int i = (int)dP00; i <= (int)d0MP; i++) { dirs.push_back(i); } SetInterpolationDirsBlockVisitor interDirsVisitor(dirs); diff --git a/src/cpu/VirtualFluidsCore/Visitors/RefineAroundGbObjectHelper.h b/src/cpu/core/Visitors/RefineAroundGbObjectHelper.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/RefineAroundGbObjectHelper.h rename to src/cpu/core/Visitors/RefineAroundGbObjectHelper.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectBlockVisitor.cpp b/src/cpu/core/Visitors/RefineCrossAndInsideGbObjectBlockVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectBlockVisitor.cpp rename to src/cpu/core/Visitors/RefineCrossAndInsideGbObjectBlockVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectBlockVisitor.h b/src/cpu/core/Visitors/RefineCrossAndInsideGbObjectBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectBlockVisitor.h rename to src/cpu/core/Visitors/RefineCrossAndInsideGbObjectBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectHelper.cpp b/src/cpu/core/Visitors/RefineCrossAndInsideGbObjectHelper.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectHelper.cpp rename to src/cpu/core/Visitors/RefineCrossAndInsideGbObjectHelper.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectHelper.h b/src/cpu/core/Visitors/RefineCrossAndInsideGbObjectHelper.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/RefineCrossAndInsideGbObjectHelper.h rename to src/cpu/core/Visitors/RefineCrossAndInsideGbObjectHelper.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/RefineInterGbObjectsVisitor.cpp b/src/cpu/core/Visitors/RefineInterGbObjectsVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/RefineInterGbObjectsVisitor.cpp rename to src/cpu/core/Visitors/RefineInterGbObjectsVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/RefineInterGbObjectsVisitor.h b/src/cpu/core/Visitors/RefineInterGbObjectsVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/RefineInterGbObjectsVisitor.h rename to src/cpu/core/Visitors/RefineInterGbObjectsVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/RenumberBlockVisitor.cpp b/src/cpu/core/Visitors/RenumberBlockVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/RenumberBlockVisitor.cpp rename to src/cpu/core/Visitors/RenumberBlockVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/RenumberBlockVisitor.h b/src/cpu/core/Visitors/RenumberBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/RenumberBlockVisitor.h rename to src/cpu/core/Visitors/RenumberBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/RenumberGridVisitor.cpp b/src/cpu/core/Visitors/RenumberGridVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/RenumberGridVisitor.cpp rename to src/cpu/core/Visitors/RenumberGridVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/RenumberGridVisitor.h b/src/cpu/core/Visitors/RenumberGridVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/RenumberGridVisitor.h rename to src/cpu/core/Visitors/RenumberGridVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetBcBlocksBlockVisitor.cpp b/src/cpu/core/Visitors/SetBcBlocksBlockVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/SetBcBlocksBlockVisitor.cpp rename to src/cpu/core/Visitors/SetBcBlocksBlockVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetBcBlocksBlockVisitor.h b/src/cpu/core/Visitors/SetBcBlocksBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/SetBcBlocksBlockVisitor.h rename to src/cpu/core/Visitors/SetBcBlocksBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.cpp b/src/cpu/core/Visitors/SetConnectorsBlockVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.cpp rename to src/cpu/core/Visitors/SetConnectorsBlockVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.h b/src/cpu/core/Visitors/SetConnectorsBlockVisitor.h similarity index 99% rename from src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.h rename to src/cpu/core/Visitors/SetConnectorsBlockVisitor.h index fcf2c93d233a5168f0ff4586244ee2088a7bf627..f54f3f210dd8a62a30de03f08948c7cd6de7ff7f 100644 --- a/src/cpu/VirtualFluidsCore/Visitors/SetConnectorsBlockVisitor.h +++ b/src/cpu/core/Visitors/SetConnectorsBlockVisitor.h @@ -128,7 +128,7 @@ void SetConnectorsBlockVisitor<T1, T2>::setSameLevelConnectors(SPtr<Grid3D> grid } else if (blockRank != neighBlockRank && neighBlock->isActive()) { setRemoteConnectors(block, neighBlock, dir); - if (dir >= (int)DIR_P00 && dir <= (int)DIR_00M) { + if (dir >= (int)dP00 && dir <= (int)d00M) { int weight = block->getWeight(neighBlockRank); weight++; block->setWeight(neighBlockRank, weight); diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetForcingBlockVisitor.cpp b/src/cpu/core/Visitors/SetForcingBlockVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/SetForcingBlockVisitor.cpp rename to src/cpu/core/Visitors/SetForcingBlockVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetForcingBlockVisitor.h b/src/cpu/core/Visitors/SetForcingBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/SetForcingBlockVisitor.h rename to src/cpu/core/Visitors/SetForcingBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetInterpolationConnectorsBlockVisitor.cpp b/src/cpu/core/Visitors/SetInterpolationConnectorsBlockVisitor.cpp similarity index 80% rename from src/cpu/VirtualFluidsCore/Visitors/SetInterpolationConnectorsBlockVisitor.cpp rename to src/cpu/core/Visitors/SetInterpolationConnectorsBlockVisitor.cpp index bdf851025d380daa93db2477217a513002591ebb..c8d9fa7cb803ea922cd37914d2e51beeab685240 100644 --- a/src/cpu/VirtualFluidsCore/Visitors/SetInterpolationConnectorsBlockVisitor.cpp +++ b/src/cpu/core/Visitors/SetInterpolationConnectorsBlockVisitor.cpp @@ -84,110 +84,110 @@ void SetInterpolationConnectorsBlockVisitor::setInterpolationConnectors(SPtr<Gri int fbx3 = block->getX3() << 1; int level = block->getLevel() + 1; - if( block->hasInterpolationFlagCF(DIR_P00)) + if( block->hasInterpolationFlagCF(dP00)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2,fbx3,level); SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level); SPtr<Block3D> fblockNW = grid->getBlock(fbx1+1,fbx2,fbx3+1,level); SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_P00); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dP00); } - if( block->hasInterpolationFlagCF(DIR_M00)) + if( block->hasInterpolationFlagCF(dM00)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3,level); SPtr<Block3D> fblockSE = grid->getBlock(fbx1,fbx2+1,fbx3,level); SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2,fbx3+1,level); SPtr<Block3D> fblockNE = grid->getBlock(fbx1,fbx2+1,fbx3+1,level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_M00); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dM00); } - if( block->hasInterpolationFlagCF(DIR_0P0)) + if( block->hasInterpolationFlagCF(d0P0)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2+1,fbx3,level); SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level); SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2+1,fbx3+1,level); SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_0P0); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0P0); } - if( block->hasInterpolationFlagCF(DIR_0M0)) + if( block->hasInterpolationFlagCF(d0M0)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3,level); SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3,level); SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2,fbx3+1,level); SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2,fbx3+1,level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_0M0); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0M0); } - if( block->hasInterpolationFlagCF(DIR_00P)) + if( block->hasInterpolationFlagCF(d00P)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3+1,level); SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3+1,level); SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2+1,fbx3+1,level); SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_00P); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d00P); } - if( block->hasInterpolationFlagCF(DIR_00M)) + if( block->hasInterpolationFlagCF(d00M)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3,level); SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3,level); SPtr<Block3D> fblockNW = grid->getBlock(fbx1,fbx2+1,fbx3,level); SPtr<Block3D> fblockNE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_00M); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d00M); } //////NE-NW-SE-SW - if( block->hasInterpolationFlagCF(DIR_PP0)&&!block->hasInterpolationFlagCF(DIR_0P0) && !block->hasInterpolationFlagCF(DIR_P00)) + if( block->hasInterpolationFlagCF(dPP0)&&!block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(dP00)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2+1,fbx3+0,level); SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level); SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_PP0); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dPP0); } - if( block->hasInterpolationFlagCF(DIR_MM0)&& !block->hasInterpolationFlagCF(DIR_M00) && !block->hasInterpolationFlagCF(DIR_0M0)) + if( block->hasInterpolationFlagCF(dMM0)&& !block->hasInterpolationFlagCF(dM00) && !block->hasInterpolationFlagCF(d0M0)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2,fbx3,level); SPtr<Block3D> fblockSE = grid->getBlock(fbx1,fbx2,fbx3+1,level); SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2, fbx3+1, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2, fbx3+1, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_MM0); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dMM0); } - if( block->hasInterpolationFlagCF(DIR_PM0)&& !block->hasInterpolationFlagCF(DIR_P00) && !block->hasInterpolationFlagCF(DIR_0M0)) + if( block->hasInterpolationFlagCF(dPM0)&& !block->hasInterpolationFlagCF(dP00) && !block->hasInterpolationFlagCF(d0M0)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2,fbx3+0,level); SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3+1,level); SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_PM0); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dPM0); } - if( block->hasInterpolationFlagCF(DIR_MP0)&& !block->hasInterpolationFlagCF(DIR_0P0) && !block->hasInterpolationFlagCF(DIR_M00)) + if( block->hasInterpolationFlagCF(dMP0)&& !block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(dM00)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2+1,fbx3,level); SPtr<Block3D> fblockSE = grid->getBlock(fbx1,fbx2+1,fbx3+1,level); SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_MP0); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dMP0); } /////////TE-BW-BE-TW 1-0 - if( block->hasInterpolationFlagCF(DIR_P0P)&& !block->hasInterpolationFlagCF(DIR_P00) && !block->hasInterpolationFlagCF(DIR_00P)) + if( block->hasInterpolationFlagCF(dP0P)&& !block->hasInterpolationFlagCF(dP00) && !block->hasInterpolationFlagCF(d00P)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2+0,fbx3+1,level); SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level); SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2+0, fbx3+1, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_P0P); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dP0P); } - if( block->hasInterpolationFlagCF(DIR_M0M)&& !block->hasInterpolationFlagCF(DIR_M00) && !block->hasInterpolationFlagCF(DIR_00M)) + if( block->hasInterpolationFlagCF(dM0M)&& !block->hasInterpolationFlagCF(dM00) && !block->hasInterpolationFlagCF(d00M)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2+0,fbx3,level); @@ -195,140 +195,140 @@ void SetInterpolationConnectorsBlockVisitor::setInterpolationConnectors(SPtr<Gri SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2+0, fbx3, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2+1, fbx3, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_M0M); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dM0M); } - if( block->hasInterpolationFlagCF(DIR_P0M)&& !block->hasInterpolationFlagCF(DIR_P00) && !block->hasInterpolationFlagCF(DIR_00M)) + if( block->hasInterpolationFlagCF(dP0M)&& !block->hasInterpolationFlagCF(dP00) && !block->hasInterpolationFlagCF(d00M)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1,fbx2+0,fbx3,level); SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level); SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2+0, fbx3, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_P0M); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dP0M); } - if( block->hasInterpolationFlagCF(DIR_M0P)&& !block->hasInterpolationFlagCF(DIR_M00) && !block->hasInterpolationFlagCF(DIR_00P)) + if( block->hasInterpolationFlagCF(dM0P)&& !block->hasInterpolationFlagCF(dM00) && !block->hasInterpolationFlagCF(d00P)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1,fbx2+0,fbx3+1,level); SPtr<Block3D> fblockSE = grid->getBlock(fbx1,fbx2+1,fbx3+1,level); SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2+0, fbx3+1, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_M0P); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dM0P); } //////TN-BS-BN-TS - if( block->hasInterpolationFlagCF(DIR_0PP)&& !block->hasInterpolationFlagCF(DIR_0P0) && !block->hasInterpolationFlagCF(DIR_00P)) + if( block->hasInterpolationFlagCF(d0PP)&& !block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(d00P)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1+0,fbx2+1,fbx3+1,level); SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3+1,level); SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+0, fbx2+1, fbx3+1, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_0PP); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0PP); } - if( block->hasInterpolationFlagCF(DIR_0MM)&& !block->hasInterpolationFlagCF(DIR_0M0) && !block->hasInterpolationFlagCF(DIR_00M)) + if( block->hasInterpolationFlagCF(d0MM)&& !block->hasInterpolationFlagCF(d0M0) && !block->hasInterpolationFlagCF(d00M)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1+0,fbx2,fbx3,level); SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3,level); SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+0, fbx2, fbx3, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2, fbx3, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_0MM); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0MM); } - if( block->hasInterpolationFlagCF(DIR_0PM)&& !block->hasInterpolationFlagCF(DIR_0P0) && !block->hasInterpolationFlagCF(DIR_00M)) + if( block->hasInterpolationFlagCF(d0PM)&& !block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(d00M)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1+0,fbx2+1,fbx3,level); SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2+1,fbx3,level); SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+0, fbx2+1, fbx3, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_0PM); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0PM); } - if( block->hasInterpolationFlagCF(DIR_0MP)&& !block->hasInterpolationFlagCF(DIR_0M0) && !block->hasInterpolationFlagCF(DIR_00P)) + if( block->hasInterpolationFlagCF(d0MP)&& !block->hasInterpolationFlagCF(d0M0) && !block->hasInterpolationFlagCF(d00P)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1+0,fbx2,fbx3+1,level); SPtr<Block3D> fblockSE = grid->getBlock(fbx1+1,fbx2,fbx3+1,level); SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+0, fbx2, fbx3+1, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_0MP); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, d0MP); } //////corners - if (block->hasInterpolationFlagCF(DIR_PPP)&&!block->hasInterpolationFlagCF(DIR_P0P)&&!block->hasInterpolationFlagCF(DIR_0PP)&&!block->hasInterpolationFlagCF(DIR_PP0)&&!block->hasInterpolationFlagCF(DIR_00P)&&!block->hasInterpolationFlagCF(DIR_0P0) && !block->hasInterpolationFlagCF(DIR_P00)) + if (block->hasInterpolationFlagCF(dPPP)&&!block->hasInterpolationFlagCF(dP0P)&&!block->hasInterpolationFlagCF(d0PP)&&!block->hasInterpolationFlagCF(dPP0)&&!block->hasInterpolationFlagCF(d00P)&&!block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(dP00)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level); SPtr<Block3D> fblockSE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+0, level); SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_PPP); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dPPP); } - if (block->hasInterpolationFlagCF(DIR_MMP)&&!block->hasInterpolationFlagCF(DIR_M0P)&&!block->hasInterpolationFlagCF(DIR_0MP)&& !block->hasInterpolationFlagCF(DIR_MM0)&& !block->hasInterpolationFlagCF(DIR_00P)&& !block->hasInterpolationFlagCF(DIR_M00) && !block->hasInterpolationFlagCF(DIR_0M0)) + if (block->hasInterpolationFlagCF(dMMP)&&!block->hasInterpolationFlagCF(dM0P)&&!block->hasInterpolationFlagCF(d0MP)&& !block->hasInterpolationFlagCF(dMM0)&& !block->hasInterpolationFlagCF(d00P)&& !block->hasInterpolationFlagCF(dM00) && !block->hasInterpolationFlagCF(d0M0)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1, fbx2, fbx3+1, level); SPtr<Block3D> fblockSE;// = grid->getBlock(fbx1, fbx2, fbx3, level); SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2, fbx3+1, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2, fbx3+1, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_MMP); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dMMP); } - if (block->hasInterpolationFlagCF(DIR_PMP)&&!block->hasInterpolationFlagCF(DIR_P0P)&&!block->hasInterpolationFlagCF(DIR_0MP)&& !block->hasInterpolationFlagCF(DIR_PM0)&& !block->hasInterpolationFlagCF(DIR_00P)&& !block->hasInterpolationFlagCF(DIR_P00) && !block->hasInterpolationFlagCF(DIR_0M0)) + if (block->hasInterpolationFlagCF(dPMP)&&!block->hasInterpolationFlagCF(dP0P)&&!block->hasInterpolationFlagCF(d0MP)&& !block->hasInterpolationFlagCF(dPM0)&& !block->hasInterpolationFlagCF(d00P)&& !block->hasInterpolationFlagCF(dP00) && !block->hasInterpolationFlagCF(d0M0)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1, fbx2, fbx3+1, level); SPtr<Block3D> fblockSE;// = grid->getBlock(fbx1+1, fbx2, fbx3+0, level); SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_PMP); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dPMP); } - if (block->hasInterpolationFlagCF(DIR_MPP)&&!block->hasInterpolationFlagCF(DIR_M0P)&&!block->hasInterpolationFlagCF(DIR_0PP)&& !block->hasInterpolationFlagCF(DIR_MP0)&& !block->hasInterpolationFlagCF(DIR_00P)&& !block->hasInterpolationFlagCF(DIR_0P0) && !block->hasInterpolationFlagCF(DIR_M00)) + if (block->hasInterpolationFlagCF(dMPP)&&!block->hasInterpolationFlagCF(dM0P)&&!block->hasInterpolationFlagCF(d0PP)&& !block->hasInterpolationFlagCF(dMP0)&& !block->hasInterpolationFlagCF(d00P)&& !block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(dM00)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1, fbx2+1, fbx3+1, level); SPtr<Block3D> fblockSE;// = grid->getBlock(fbx1, fbx2+1, fbx3, level); SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_MPP); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dMPP); } - if (block->hasInterpolationFlagCF(DIR_PPM)&&!block->hasInterpolationFlagCF(DIR_P0M)&&!block->hasInterpolationFlagCF(DIR_0PM)&& !block->hasInterpolationFlagCF(DIR_PP0)&&!block->hasInterpolationFlagCF(DIR_00M)&&!block->hasInterpolationFlagCF(DIR_0P0) && !block->hasInterpolationFlagCF(DIR_P00)) + if (block->hasInterpolationFlagCF(dPPM)&&!block->hasInterpolationFlagCF(dP0M)&&!block->hasInterpolationFlagCF(d0PM)&& !block->hasInterpolationFlagCF(dPP0)&&!block->hasInterpolationFlagCF(d00M)&&!block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(dP00)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1, fbx2+1, fbx3+0, level); SPtr<Block3D> fblockSE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+0, level); SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2+1, fbx3+1, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_PPM); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dPPM); } - if (block->hasInterpolationFlagCF(DIR_MMM)&& !block->hasInterpolationFlagCF(DIR_0MM)&& !block->hasInterpolationFlagCF(DIR_M0M)&& !block->hasInterpolationFlagCF(DIR_MM0)&& !block->hasInterpolationFlagCF(DIR_00M)&& !block->hasInterpolationFlagCF(DIR_M00) && !block->hasInterpolationFlagCF(DIR_0M0)) + if (block->hasInterpolationFlagCF(dMMM)&& !block->hasInterpolationFlagCF(d0MM)&& !block->hasInterpolationFlagCF(dM0M)&& !block->hasInterpolationFlagCF(dMM0)&& !block->hasInterpolationFlagCF(d00M)&& !block->hasInterpolationFlagCF(dM00) && !block->hasInterpolationFlagCF(d0M0)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1, fbx2, fbx3+0, level); SPtr<Block3D> fblockSE;// = grid->getBlock(fbx1, fbx2, fbx3, level); SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2, fbx3+1, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2, fbx3+1, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_MMM); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dMMM); } - if (block->hasInterpolationFlagCF(DIR_PMM)&& !block->hasInterpolationFlagCF(DIR_0MM)&& !block->hasInterpolationFlagCF(DIR_P0M)&& !block->hasInterpolationFlagCF(DIR_PM0)&& !block->hasInterpolationFlagCF(DIR_00M)&& !block->hasInterpolationFlagCF(DIR_P00) && !block->hasInterpolationFlagCF(DIR_0M0)) + if (block->hasInterpolationFlagCF(dPMM)&& !block->hasInterpolationFlagCF(d0MM)&& !block->hasInterpolationFlagCF(dP0M)&& !block->hasInterpolationFlagCF(dPM0)&& !block->hasInterpolationFlagCF(d00M)&& !block->hasInterpolationFlagCF(dP00) && !block->hasInterpolationFlagCF(d0M0)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1+1, fbx2, fbx3, level); SPtr<Block3D> fblockSE;// = grid->getBlock(fbx1+1, fbx2, fbx3+0, level); SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1+1, fbx2, fbx3+1, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_PMM); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dPMM); } - if (block->hasInterpolationFlagCF(DIR_MPM)&& !block->hasInterpolationFlagCF(DIR_0PM)&& !block->hasInterpolationFlagCF(DIR_M0M)&& !block->hasInterpolationFlagCF(DIR_MP0)&& !block->hasInterpolationFlagCF(DIR_00M)&& !block->hasInterpolationFlagCF(DIR_0P0) && !block->hasInterpolationFlagCF(DIR_M00)) + if (block->hasInterpolationFlagCF(dMPM)&& !block->hasInterpolationFlagCF(d0PM)&& !block->hasInterpolationFlagCF(dM0M)&& !block->hasInterpolationFlagCF(dMP0)&& !block->hasInterpolationFlagCF(d00M)&& !block->hasInterpolationFlagCF(d0P0) && !block->hasInterpolationFlagCF(dM00)) { SPtr<Block3D> fblockSW = grid->getBlock(fbx1, fbx2+1, fbx3+0, level); SPtr<Block3D> fblockSE;// = grid->getBlock(fbx1, fbx2+1, fbx3, level); SPtr<Block3D> fblockNW;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level); SPtr<Block3D> fblockNE;// = grid->getBlock(fbx1, fbx2+1, fbx3+1, level); - setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, DIR_MPM); + setInterpolationConnectors(fblockSW, fblockSE, fblockNW, fblockNE, block, dMPM); } } diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetInterpolationConnectorsBlockVisitor.h b/src/cpu/core/Visitors/SetInterpolationConnectorsBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/SetInterpolationConnectorsBlockVisitor.h rename to src/cpu/core/Visitors/SetInterpolationConnectorsBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetInterpolationDirsBlockVisitor.cpp b/src/cpu/core/Visitors/SetInterpolationDirsBlockVisitor.cpp similarity index 70% rename from src/cpu/VirtualFluidsCore/Visitors/SetInterpolationDirsBlockVisitor.cpp rename to src/cpu/core/Visitors/SetInterpolationDirsBlockVisitor.cpp index dbb85c0b848d2c5dc89e99f72d4091476eb31790..dcf71314768d8274941d5631906b972d0ab82561 100644 --- a/src/cpu/VirtualFluidsCore/Visitors/SetInterpolationDirsBlockVisitor.cpp +++ b/src/cpu/core/Visitors/SetInterpolationDirsBlockVisitor.cpp @@ -34,103 +34,103 @@ void SetInterpolationDirsBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> bl if (p_nblock) { bool flagDir; switch (dir) { - case DIR_PP0: - checkFlagDir(grid, DIR_P00, DIR_0P0, flagDir, ix1, ix2, ix3, level); + case dPP0: + checkFlagDir(grid, dP00, d0P0, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; - case DIR_MM0: - checkFlagDir(grid, DIR_M00, DIR_0M0, flagDir, ix1, ix2, ix3, level); + case dMM0: + checkFlagDir(grid, dM00, d0M0, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; - case DIR_PM0: - checkFlagDir(grid, DIR_P00, DIR_0M0, flagDir, ix1, ix2, ix3, level); + case dPM0: + checkFlagDir(grid, dP00, d0M0, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; - case DIR_MP0: - checkFlagDir(grid, DIR_M00, DIR_0P0, flagDir, ix1, ix2, ix3, level); + case dMP0: + checkFlagDir(grid, dM00, d0P0, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; - case DIR_P0P: - checkFlagDir(grid, DIR_P00, DIR_00P, flagDir, ix1, ix2, ix3, level); + case dP0P: + checkFlagDir(grid, dP00, d00P, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; - case DIR_M0M: - checkFlagDir(grid, DIR_M00, DIR_00M, flagDir, ix1, ix2, ix3, level); + case dM0M: + checkFlagDir(grid, dM00, d00M, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; - case DIR_P0M: - checkFlagDir(grid, DIR_P00, DIR_00M, flagDir, ix1, ix2, ix3, level); + case dP0M: + checkFlagDir(grid, dP00, d00M, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; - case DIR_M0P: - checkFlagDir(grid, DIR_M00, DIR_00P, flagDir, ix1, ix2, ix3, level); + case dM0P: + checkFlagDir(grid, dM00, d00P, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; - case DIR_0PP: - checkFlagDir(grid, DIR_0P0, DIR_00P, flagDir, ix1, ix2, ix3, level); + case d0PP: + checkFlagDir(grid, d0P0, d00P, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; - case DIR_0MM: - checkFlagDir(grid, DIR_0M0, DIR_00M, flagDir, ix1, ix2, ix3, level); + case d0MM: + checkFlagDir(grid, d0M0, d00M, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; - case DIR_0PM: - checkFlagDir(grid, DIR_0P0, DIR_00M, flagDir, ix1, ix2, ix3, level); + case d0PM: + checkFlagDir(grid, d0P0, d00M, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; - case DIR_0MP: - checkFlagDir(grid, DIR_0M0, DIR_00P, flagDir, ix1, ix2, ix3, level); + case d0MP: + checkFlagDir(grid, d0M0, d00P, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; - case DIR_PPP: - checkFlagDir(grid, DIR_P00, DIR_0P0, DIR_00P, flagDir, ix1, ix2, ix3, level); + case dPPP: + checkFlagDir(grid, dP00, d0P0, d00P, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; - case DIR_MMP: - checkFlagDir(grid, DIR_M00, DIR_0M0, DIR_00P, flagDir, ix1, ix2, ix3, level); + case dMMP: + checkFlagDir(grid, dM00, d0M0, d00P, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; - case DIR_PMP: - checkFlagDir(grid, DIR_P00, DIR_0M0, DIR_00P, flagDir, ix1, ix2, ix3, level); + case dPMP: + checkFlagDir(grid, dP00, d0M0, d00P, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; - case DIR_MPP: - checkFlagDir(grid, DIR_M00, DIR_0P0, DIR_00P, flagDir, ix1, ix2, ix3, level); + case dMPP: + checkFlagDir(grid, dM00, d0P0, d00P, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; - case DIR_PPM: - checkFlagDir(grid, DIR_P00, DIR_0P0, DIR_00M, flagDir, ix1, ix2, ix3, level); + case dPPM: + checkFlagDir(grid, dP00, d0P0, d00M, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; - case DIR_MMM: - checkFlagDir(grid, DIR_M00, DIR_0M0, DIR_00M, flagDir, ix1, ix2, ix3, level); + case dMMM: + checkFlagDir(grid, dM00, d0M0, d00M, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; - case DIR_PMM: - checkFlagDir(grid, DIR_P00, DIR_0M0, DIR_00M, flagDir, ix1, ix2, ix3, level); + case dPMM: + checkFlagDir(grid, dP00, d0M0, d00M, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; - case DIR_MPM: - checkFlagDir(grid, DIR_M00, DIR_0P0, DIR_00M, flagDir, ix1, ix2, ix3, level); + case dMPM: + checkFlagDir(grid, dM00, d0P0, d00M, flagDir, ix1, ix2, ix3, level); if (!flagDir) continue; break; diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetInterpolationDirsBlockVisitor.h b/src/cpu/core/Visitors/SetInterpolationDirsBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/SetInterpolationDirsBlockVisitor.h rename to src/cpu/core/Visitors/SetInterpolationDirsBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.cpp b/src/cpu/core/Visitors/SetKernelBlockVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.cpp rename to src/cpu/core/Visitors/SetKernelBlockVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.h b/src/cpu/core/Visitors/SetKernelBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/SetKernelBlockVisitor.h rename to src/cpu/core/Visitors/SetKernelBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetSolidBlocksBlockVisitor.cpp b/src/cpu/core/Visitors/SetSolidBlocksBlockVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/SetSolidBlocksBlockVisitor.cpp rename to src/cpu/core/Visitors/SetSolidBlocksBlockVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetSolidBlocksBlockVisitor.h b/src/cpu/core/Visitors/SetSolidBlocksBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/SetSolidBlocksBlockVisitor.h rename to src/cpu/core/Visitors/SetSolidBlocksBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetSpongeLayerBlockVisitor.cpp b/src/cpu/core/Visitors/SetSpongeLayerBlockVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/SetSpongeLayerBlockVisitor.cpp rename to src/cpu/core/Visitors/SetSpongeLayerBlockVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetSpongeLayerBlockVisitor.h b/src/cpu/core/Visitors/SetSpongeLayerBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/SetSpongeLayerBlockVisitor.h rename to src/cpu/core/Visitors/SetSpongeLayerBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetUndefinedNodesBlockVisitor.cpp b/src/cpu/core/Visitors/SetUndefinedNodesBlockVisitor.cpp similarity index 89% rename from src/cpu/VirtualFluidsCore/Visitors/SetUndefinedNodesBlockVisitor.cpp rename to src/cpu/core/Visitors/SetUndefinedNodesBlockVisitor.cpp index 04f758d396b726c67a5e9a5797a3d65d3d26a36b..797e8886e7825075cbff8ce9e762d0286dc81bea 100644 --- a/src/cpu/VirtualFluidsCore/Visitors/SetUndefinedNodesBlockVisitor.cpp +++ b/src/cpu/core/Visitors/SetUndefinedNodesBlockVisitor.cpp @@ -42,7 +42,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block // int offset = 2; int offset = 3; - if (block->hasInterpolationFlag(DIR_P00)) { + if (block->hasInterpolationFlag(dP00)) { int startix1 = maxX1; int endix1 = maxX1; if (block->hasInterpolationFlagCF()) @@ -53,7 +53,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_M00)) { + if (block->hasInterpolationFlag(dM00)) { int startix1 = minX1; int endix1 = minX1; if (block->hasInterpolationFlagCF()) @@ -64,7 +64,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_0P0)) { + if (block->hasInterpolationFlag(d0P0)) { int startix1 = minX1; int endix1 = maxX1; int startix2 = maxX2; @@ -75,7 +75,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_0M0)) { + if (block->hasInterpolationFlag(d0M0)) { int startix1 = minX1; int endix1 = maxX1; int startix2 = minX2; @@ -86,7 +86,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_00P)) { + if (block->hasInterpolationFlag(d00P)) { int startix1 = minX1; int endix1 = maxX1; int startix2 = minX2; @@ -97,7 +97,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block startix3 = startix3 - offset; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_00M)) { + if (block->hasInterpolationFlag(d00M)) { int startix1 = minX1; int endix1 = maxX1; int startix2 = minX2; @@ -108,7 +108,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block endix3 = endix3 + offset; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_PP0)) { + if (block->hasInterpolationFlag(dPP0)) { int startix1 = maxX1; int endix1 = maxX1; if (block->hasInterpolationFlagCF()) @@ -121,7 +121,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_MM0)) { + if (block->hasInterpolationFlag(dMM0)) { int startix1 = minX1; int endix1 = minX1; if (block->hasInterpolationFlagCF()) @@ -134,7 +134,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_PM0)) { + if (block->hasInterpolationFlag(dPM0)) { int startix1 = maxX1; int endix1 = maxX1; if (block->hasInterpolationFlagCF()) @@ -147,7 +147,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_MP0)) { + if (block->hasInterpolationFlag(dMP0)) { int startix1 = minX1; int endix1 = minX1; if (block->hasInterpolationFlagCF()) @@ -160,7 +160,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_P0P)) { + if (block->hasInterpolationFlag(dP0P)) { int startix1 = maxX1; int endix1 = maxX1; if (block->hasInterpolationFlagCF()) @@ -173,7 +173,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block startix3 = startix3 - offset; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_M0M)) { + if (block->hasInterpolationFlag(dM0M)) { int startix1 = minX1; int endix1 = minX1; if (block->hasInterpolationFlagCF()) @@ -186,7 +186,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block endix3 = endix3 + offset; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_P0M)) { + if (block->hasInterpolationFlag(dP0M)) { int startix1 = maxX1; int endix1 = maxX1; if (block->hasInterpolationFlagCF()) @@ -199,7 +199,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block endix3 = endix3 + offset; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_M0P)) { + if (block->hasInterpolationFlag(dM0P)) { int startix1 = minX1; int endix1 = minX1; if (block->hasInterpolationFlagCF()) @@ -212,7 +212,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block startix3 = startix3 - offset; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_0PP)) { + if (block->hasInterpolationFlag(d0PP)) { int startix1 = minX1; int endix1 = maxX1; int startix2 = maxX2; @@ -225,7 +225,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block startix3 = startix3 - offset; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_0MM)) { + if (block->hasInterpolationFlag(d0MM)) { int startix1 = minX1; int endix1 = maxX1; int startix2 = minX2; @@ -238,7 +238,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block endix3 = endix3 + offset; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_0PM)) { + if (block->hasInterpolationFlag(d0PM)) { int startix1 = minX1; int endix1 = maxX1; int startix2 = maxX2; @@ -251,7 +251,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block endix3 = endix3 + offset; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_0MP)) { + if (block->hasInterpolationFlag(d0MP)) { int startix1 = minX1; int endix1 = maxX1; int startix2 = minX2; @@ -264,7 +264,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block startix3 = startix3 - offset; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_PPP)) { + if (block->hasInterpolationFlag(dPPP)) { int startix1 = maxX1; int endix1 = maxX1; if (block->hasInterpolationFlagCF()) @@ -279,7 +279,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block startix3 = startix3 - offset; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_MPP)) { + if (block->hasInterpolationFlag(dMPP)) { int startix1 = minX1; int endix1 = minX1; if (block->hasInterpolationFlagCF()) @@ -294,7 +294,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block startix3 = startix3 - offset; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_PMP)) { + if (block->hasInterpolationFlag(dPMP)) { int startix1 = maxX1; int endix1 = maxX1; if (block->hasInterpolationFlagCF()) @@ -309,7 +309,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block startix3 = startix3 - offset; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_MMP)) { + if (block->hasInterpolationFlag(dMMP)) { int startix1 = minX1; int endix1 = minX1; if (block->hasInterpolationFlagCF()) @@ -324,7 +324,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block startix3 = startix3 - offset; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_PPM)) { + if (block->hasInterpolationFlag(dPPM)) { int startix1 = maxX1; int endix1 = maxX1; if (block->hasInterpolationFlagCF()) @@ -339,7 +339,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block endix3 = endix3 + offset; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_MPM)) { + if (block->hasInterpolationFlag(dMPM)) { int startix1 = minX1; int endix1 = minX1; if (block->hasInterpolationFlagCF()) @@ -354,7 +354,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block endix3 = endix3 + offset; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_PMM)) { + if (block->hasInterpolationFlag(dPMM)) { int startix1 = maxX1; int endix1 = maxX1; if (block->hasInterpolationFlagCF()) @@ -369,7 +369,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block endix3 = endix3 + offset; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlag(DIR_MMM)) { + if (block->hasInterpolationFlag(dMMM)) { int startix1 = minX1; int endix1 = minX1; if (block->hasInterpolationFlagCF()) @@ -397,7 +397,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block maxX2 = static_cast<int>(bcMatrix->getNX2()) - 1 - ll; maxX3 = static_cast<int>(bcMatrix->getNX3()) - 1 - ll; - if (block->hasInterpolationFlagFC(DIR_P00)) { + if (block->hasInterpolationFlagFC(dP00)) { int startix1 = maxX1 - offset2; int endix1 = maxX1; int startix2 = minX2; @@ -406,7 +406,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_M00)) { + if (block->hasInterpolationFlagFC(dM00)) { int startix1 = minX1; int endix1 = minX1 + offset2; int startix2 = minX2; @@ -415,7 +415,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_0P0)) { + if (block->hasInterpolationFlagFC(d0P0)) { int startix1 = minX1; int endix1 = maxX1; int startix2 = maxX2 - offset2; @@ -424,7 +424,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_0M0)) { + if (block->hasInterpolationFlagFC(d0M0)) { int startix1 = minX1; int endix1 = maxX1; int startix2 = minX2; @@ -433,7 +433,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_00P)) { + if (block->hasInterpolationFlagFC(d00P)) { int startix1 = minX1; int endix1 = maxX1; int startix2 = minX2; @@ -442,7 +442,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_00M)) { + if (block->hasInterpolationFlagFC(d00M)) { int startix1 = minX1; int endix1 = maxX1; int startix2 = minX2; @@ -451,7 +451,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = minX3 + offset2; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_PP0)) { + if (block->hasInterpolationFlagFC(dPP0)) { int startix1 = maxX1 - offset2; int endix1 = maxX1; int startix2 = maxX2 - offset2; @@ -460,7 +460,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_MM0)) { + if (block->hasInterpolationFlagFC(dMM0)) { int startix1 = minX1; int endix1 = minX1 + offset2; int startix2 = minX2; @@ -469,7 +469,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_PM0)) { + if (block->hasInterpolationFlagFC(dPM0)) { int startix1 = maxX1 - offset2; int endix1 = maxX1; int startix2 = minX2; @@ -478,7 +478,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_MP0)) { + if (block->hasInterpolationFlagFC(dMP0)) { int startix1 = minX1; int endix1 = minX1 + offset2; int startix2 = maxX2 - offset2; @@ -487,7 +487,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_P0P)) { + if (block->hasInterpolationFlagFC(dP0P)) { int startix1 = maxX1 - offset2; int endix1 = maxX1; int startix2 = minX2; @@ -496,7 +496,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_M0M)) { + if (block->hasInterpolationFlagFC(dM0M)) { int startix1 = minX1; int endix1 = minX1 + offset2; int startix2 = minX2; @@ -505,7 +505,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = minX3 + offset2; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_P0M)) { + if (block->hasInterpolationFlagFC(dP0M)) { int startix1 = maxX1 - offset2; int endix1 = maxX1; int startix2 = minX2; @@ -514,7 +514,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = minX3 + offset2; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_M0P)) { + if (block->hasInterpolationFlagFC(dM0P)) { int startix1 = minX1; int endix1 = minX1 + offset2; int startix2 = minX2; @@ -523,7 +523,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_0PP)) { + if (block->hasInterpolationFlagFC(d0PP)) { int startix1 = minX1; int endix1 = maxX1; int startix2 = maxX2 - offset2; @@ -532,7 +532,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_0MM)) { + if (block->hasInterpolationFlagFC(d0MM)) { int startix1 = minX1; int endix1 = maxX1; int startix2 = minX2; @@ -541,7 +541,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = minX3 + offset2; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_0PM)) { + if (block->hasInterpolationFlagFC(d0PM)) { int startix1 = minX1; int endix1 = maxX1; int startix2 = maxX2 - offset2; @@ -550,7 +550,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = minX3 + offset2; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_0MP)) { + if (block->hasInterpolationFlagFC(d0MP)) { int startix1 = minX1; int endix1 = maxX1; int startix2 = minX2; @@ -559,7 +559,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_PPP)) { + if (block->hasInterpolationFlagFC(dPPP)) { int startix1 = maxX1 - offset2; int endix1 = maxX1; int startix2 = maxX2 - offset2; @@ -568,7 +568,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_MPP)) { + if (block->hasInterpolationFlagFC(dMPP)) { int startix1 = minX1; int endix1 = minX1 + offset2; int startix2 = maxX2 - offset2; @@ -577,7 +577,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_PMP)) { + if (block->hasInterpolationFlagFC(dPMP)) { int startix1 = maxX1 - offset2; int endix1 = maxX1; int startix2 = minX2; @@ -586,7 +586,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_MMP)) { + if (block->hasInterpolationFlagFC(dMMP)) { int startix1 = minX1; int endix1 = minX1 + offset2; int startix2 = minX2; @@ -595,7 +595,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = maxX3; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_PPM)) { + if (block->hasInterpolationFlagFC(dPPM)) { int startix1 = maxX1 - offset2; int endix1 = maxX1; int startix2 = maxX2 - offset2; @@ -604,7 +604,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = minX3 + offset2; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_MPM)) { + if (block->hasInterpolationFlagFC(dMPM)) { int startix1 = minX1; int endix1 = minX1 + offset2; int startix2 = maxX2 - offset2; @@ -613,7 +613,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = minX3 + offset2; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_PMM)) { + if (block->hasInterpolationFlagFC(dPMM)) { int startix1 = maxX1 - offset2; int endix1 = maxX1; int startix2 = minX2; @@ -622,7 +622,7 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block int endix3 = minX3 + offset2; this->setNodesUndefined(startix1, endix1, startix2, endix2, startix3, endix3, bcMatrix); } - if (block->hasInterpolationFlagFC(DIR_MMM)) { + if (block->hasInterpolationFlagFC(dMMM)) { int startix1 = minX1; int endix1 = minX1 + offset2; int startix2 = minX2; @@ -635,10 +635,10 @@ void SetUndefinedNodesBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block // invert scaleCF blocks if (block->hasInterpolationFlagCF()) { if (block->hasInterpolationFlagFC() && twoTypeOfConnectorsCheck) { - for (int i = (int)DIR_P00; i <= (int)DIR_MMM; i++) { + for (int i = (int)dP00; i <= (int)dMMM; i++) { UBLOG(logINFO, "FC in dir=" << i << " " << block->hasInterpolationFlagFC(i)); } - for (int i = (int)DIR_P00; i <= (int)DIR_MMM; i++) { + for (int i = (int)dP00; i <= (int)dMMM; i++) { UBLOG(logINFO, "CF in dir=" << i << " " << block->hasInterpolationFlagCF(i)); } throw UbException(UB_EXARGS, "block " + block->toString() + " has CF and FC"); diff --git a/src/cpu/VirtualFluidsCore/Visitors/SetUndefinedNodesBlockVisitor.h b/src/cpu/core/Visitors/SetUndefinedNodesBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/SetUndefinedNodesBlockVisitor.h rename to src/cpu/core/Visitors/SetUndefinedNodesBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/SpongeLayerBlockVisitor.cpp b/src/cpu/core/Visitors/SpongeLayerBlockVisitor.cpp similarity index 96% rename from src/cpu/VirtualFluidsCore/Visitors/SpongeLayerBlockVisitor.cpp rename to src/cpu/core/Visitors/SpongeLayerBlockVisitor.cpp index 520c7cfa30f582438b188643d8f913fd6ce2bd0b..01bb35cd52b78231a82651575006d7682afbdda5 100644 --- a/src/cpu/VirtualFluidsCore/Visitors/SpongeLayerBlockVisitor.cpp +++ b/src/cpu/core/Visitors/SpongeLayerBlockVisitor.cpp @@ -75,22 +75,22 @@ void SpongeLayerBlockVisitor::visit(SPtr<Grid3D> grid, SPtr<Block3D> block) real newCollFactor; - if (dir == DIR_P00) { + if (dir == dP00) { int ibX1 = block->getX1(); int ibMax = val<1>(ixMax) - val<1>(ixMin) + 1; real index = (real)(ibX1 - val<1>(ixMin) + 1); newCollFactor = oldCollFactor - (oldCollFactor - c1o1) / (real)(ibMax)*index; - } else if (dir == DIR_M00) { + } else if (dir == dM00) { int ibX1 = block->getX1(); int ibMax = val<1>(ixMax) - val<1>(ixMin) + 1; real index = (real)(ibX1 - val<1>(ixMin) + 1); newCollFactor = (oldCollFactor - c1o1) / (real)(ibMax)*index; - } else if (dir == DIR_00P) { + } else if (dir == d00P) { int ibX3 = block->getX3(); int ibMax = val<3>(ixMax) - val<3>(ixMin) + 1; real index = (real)(ibX3 - val<3>(ixMin) + 1); newCollFactor = oldCollFactor - (oldCollFactor - c1o1) / (real)(ibMax)*index; - } else if (dir == DIR_00M) { + } else if (dir == d00M) { int ibX3 = block->getX3(); int ibMax = val<3>(ixMax) - val<3>(ixMin) + 1; real index = (real)(ibX3 - val<3>(ixMin) + 1); diff --git a/src/cpu/VirtualFluidsCore/Visitors/SpongeLayerBlockVisitor.h b/src/cpu/core/Visitors/SpongeLayerBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/SpongeLayerBlockVisitor.h rename to src/cpu/core/Visitors/SpongeLayerBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/ViscosityBlockVisitor.cpp b/src/cpu/core/Visitors/ViscosityBlockVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/ViscosityBlockVisitor.cpp rename to src/cpu/core/Visitors/ViscosityBlockVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/ViscosityBlockVisitor.h b/src/cpu/core/Visitors/ViscosityBlockVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/ViscosityBlockVisitor.h rename to src/cpu/core/Visitors/ViscosityBlockVisitor.h diff --git a/src/cpu/VirtualFluidsCore/Visitors/ZoltanPartitioningGridVisitor.cpp b/src/cpu/core/Visitors/ZoltanPartitioningGridVisitor.cpp similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/ZoltanPartitioningGridVisitor.cpp rename to src/cpu/core/Visitors/ZoltanPartitioningGridVisitor.cpp diff --git a/src/cpu/VirtualFluidsCore/Visitors/ZoltanPartitioningGridVisitor.h b/src/cpu/core/Visitors/ZoltanPartitioningGridVisitor.h similarity index 100% rename from src/cpu/VirtualFluidsCore/Visitors/ZoltanPartitioningGridVisitor.h rename to src/cpu/core/Visitors/ZoltanPartitioningGridVisitor.h diff --git a/src/cpu/simulationconfig/CMakeLists.txt b/src/cpu/simulationconfig/CMakeLists.txt index 255c83dfc2bff125e15f67e98080a76017abe6e9..9fb244cbb3943a60950d1fff21947bc93cf3648b 100644 --- a/src/cpu/simulationconfig/CMakeLists.txt +++ b/src/cpu/simulationconfig/CMakeLists.txt @@ -1,5 +1,5 @@ -vf_add_library(PUBLIC_LINK VirtualFluidsCore basics muparser lbm) +vf_add_library(PUBLIC_LINK cpu_core basics muparser lbm) set_target_properties(simulationconfig PROPERTIES POSITION_INDEPENDENT_CODE ON) diff --git a/src/cpu/simulationconfig/Simulation.cpp b/src/cpu/simulationconfig/Simulation.cpp index 4b7d52286995ed9b5eadd5827d586b49e9f222a4..35fca4a47253c2ff50b93ea341409792a4b7f6a0 100644 --- a/src/cpu/simulationconfig/Simulation.cpp +++ b/src/cpu/simulationconfig/Simulation.cpp @@ -118,7 +118,7 @@ void CPUSimulation::run() auto metisVisitor = std::make_shared<MetisPartitioningGridVisitor>(communicator, MetisPartitioningGridVisitor::LevelBased, - vf::lbm::dir::DIR_00M, MetisPartitioner::RECURSIVE); + vf::lbm::dir::d00M, MetisPartitioner::RECURSIVE); InteractorsHelper intHelper(grid, metisVisitor); for (auto const &interactor : interactors) diff --git a/src/gpu/GridGenerator/grid/BoundaryConditions/Side.h b/src/gpu/GridGenerator/grid/BoundaryConditions/Side.h index 624b3722a1c909ba26063b49565779b924d34adc..c4232335a071a34e63292e240139d7bf84bdf28b 100644 --- a/src/gpu/GridGenerator/grid/BoundaryConditions/Side.h +++ b/src/gpu/GridGenerator/grid/BoundaryConditions/Side.h @@ -106,9 +106,9 @@ protected: { SideType::MZ, { 0.0, 0.0, NEGATIVE_DIR } }, { SideType::PZ, { 0.0, 0.0, POSITIVE_DIR } } }; const std::map<SideType, size_t> sideToD3Q27 = { - { SideType::MX, vf::lbm::dir::DIR_M00 }, { SideType::PX, vf::lbm::dir::DIR_P00 }, - { SideType::MY, vf::lbm::dir::DIR_0M0 }, { SideType::PY, vf::lbm::dir::DIR_0P0 }, - { SideType::MZ, vf::lbm::dir::DIR_00M }, { SideType::PZ, vf::lbm::dir::DIR_00P } + { SideType::MX, vf::lbm::dir::dM00 }, { SideType::PX, vf::lbm::dir::dP00 }, + { SideType::MY, vf::lbm::dir::d0M0 }, { SideType::PY, vf::lbm::dir::d0P0 }, + { SideType::MZ, vf::lbm::dir::d00M }, { SideType::PZ, vf::lbm::dir::d00P } }; }; diff --git a/src/gpu/GridGenerator/grid/BoundaryConditions/SideTest.cpp b/src/gpu/GridGenerator/grid/BoundaryConditions/SideTest.cpp index 36a286a8766db4af7e109eb3f8d47add401779f9..31a7edea02d5282cb109f907e10006952e5c4ef5 100644 --- a/src/gpu/GridGenerator/grid/BoundaryConditions/SideTest.cpp +++ b/src/gpu/GridGenerator/grid/BoundaryConditions/SideTest.cpp @@ -134,9 +134,9 @@ TEST_F(SideTestBC, setQs2D_whenSettingPX_setAllQsNormalToBC) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(11, -1); - expectedQs[DIR_P00] = 0.5; - expectedQs[DIR_PP0] = 0.5; - expectedQs[DIR_PM0] = 0.5; + expectedQs[dP00] = 0.5; + expectedQs[dPP0] = 0.5; + expectedQs[dPM0] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -151,8 +151,8 @@ TEST_F(SideTestBC, setQs2D_givenPYhasBeenSet_thenSetPX_doNotSetSameQsAgain) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(11, -1); - expectedQs[DIR_P00] = 0.5; - expectedQs[DIR_PM0] = 0.5; + expectedQs[dP00] = 0.5; + expectedQs[dPM0] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -167,15 +167,15 @@ TEST_F(SideTestBC, setQs3D_givenMXhasBeenSet_thenSetPX_setAllQsNormalToPX) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_P00] = 0.5; - expectedQs[DIR_PP0] = 0.5; - expectedQs[DIR_PM0] = 0.5; - expectedQs[DIR_P0P] = 0.5; - expectedQs[DIR_P0M] = 0.5; - expectedQs[DIR_PPP] = 0.5; - expectedQs[DIR_PMP] = 0.5; - expectedQs[DIR_PPM] = 0.5; - expectedQs[DIR_PMM] = 0.5; + expectedQs[dP00] = 0.5; + expectedQs[dPP0] = 0.5; + expectedQs[dPM0] = 0.5; + expectedQs[dP0P] = 0.5; + expectedQs[dP0M] = 0.5; + expectedQs[dPPP] = 0.5; + expectedQs[dPMP] = 0.5; + expectedQs[dPPM] = 0.5; + expectedQs[dPMM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); // node already has BC in MX direction, but this does not change anything @@ -205,15 +205,15 @@ TEST_F(SideTestBC, setQs3D_whenSettingPX_setAllQsNormalToBC) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_P00] = 0.5; - expectedQs[DIR_PP0] = 0.5; - expectedQs[DIR_PM0] = 0.5; - expectedQs[DIR_P0P] = 0.5; - expectedQs[DIR_P0M] = 0.5; - expectedQs[DIR_PPP] = 0.5; - expectedQs[DIR_PMP] = 0.5; - expectedQs[DIR_PPM] = 0.5; - expectedQs[DIR_PMM] = 0.5; + expectedQs[dP00] = 0.5; + expectedQs[dPP0] = 0.5; + expectedQs[dPM0] = 0.5; + expectedQs[dP0P] = 0.5; + expectedQs[dP0M] = 0.5; + expectedQs[dPPP] = 0.5; + expectedQs[dPMP] = 0.5; + expectedQs[dPPM] = 0.5; + expectedQs[dPMM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -227,12 +227,12 @@ TEST_F(SideTestBC, setQs3D_givenPYhasBeenSet_thenSetPX_doNotSetSameQsAgain) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_P00] = 0.5; - expectedQs[DIR_PM0] = 0.5; - expectedQs[DIR_P0P] = 0.5; - expectedQs[DIR_P0M] = 0.5; - expectedQs[DIR_PMP] = 0.5; - expectedQs[DIR_PMM] = 0.5; + expectedQs[dP00] = 0.5; + expectedQs[dPM0] = 0.5; + expectedQs[dP0P] = 0.5; + expectedQs[dP0M] = 0.5; + expectedQs[dPMP] = 0.5; + expectedQs[dPMM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -246,12 +246,12 @@ TEST_F(SideTestBC, setQs3D_givenMYhasBeenSet_thenSetPX_doNotSetSameQsAgain) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_P00] = 0.5; - expectedQs[DIR_PP0] = 0.5; - expectedQs[DIR_P0P] = 0.5; - expectedQs[DIR_P0M] = 0.5; - expectedQs[DIR_PPP] = 0.5; - expectedQs[DIR_PPM] = 0.5; + expectedQs[dP00] = 0.5; + expectedQs[dPP0] = 0.5; + expectedQs[dP0P] = 0.5; + expectedQs[dP0M] = 0.5; + expectedQs[dPPP] = 0.5; + expectedQs[dPPM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -265,12 +265,12 @@ TEST_F(SideTestBC, setQs3D_givenPZhasBeenSet_thenSetPX_doNotSetSameQsAgain) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_P00] = 0.5; - expectedQs[DIR_PP0] = 0.5; - expectedQs[DIR_PM0] = 0.5; - expectedQs[DIR_P0M] = 0.5; - expectedQs[DIR_PPM] = 0.5; - expectedQs[DIR_PMM] = 0.5; + expectedQs[dP00] = 0.5; + expectedQs[dPP0] = 0.5; + expectedQs[dPM0] = 0.5; + expectedQs[dP0M] = 0.5; + expectedQs[dPPM] = 0.5; + expectedQs[dPMM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -284,12 +284,12 @@ TEST_F(SideTestBC, setQs3D_givenMZhasBeenSet_thenSetPX_doNotSetSameQsAgain) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_P00] = 0.5; - expectedQs[DIR_PP0] = 0.5; - expectedQs[DIR_PM0] = 0.5; - expectedQs[DIR_P0P] = 0.5; - expectedQs[DIR_PPP] = 0.5; - expectedQs[DIR_PMP] = 0.5; + expectedQs[dP00] = 0.5; + expectedQs[dPP0] = 0.5; + expectedQs[dPM0] = 0.5; + expectedQs[dP0P] = 0.5; + expectedQs[dPPP] = 0.5; + expectedQs[dPMP] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -304,10 +304,10 @@ TEST_F(SideTestBC, setQs3D_givenPYandMZhaveBeenSet_thenSetPX_doNotSetSameQsAgain auto actualQs = bc->getQs()[0]; std::vector<real> expectedQsForTwoPreviousBCs(27, -1); - expectedQsForTwoPreviousBCs[DIR_P00] = 0.5; - expectedQsForTwoPreviousBCs[DIR_PM0] = 0.5; - expectedQsForTwoPreviousBCs[DIR_P0P] = 0.5; - expectedQsForTwoPreviousBCs[DIR_PMP] = 0.5; + expectedQsForTwoPreviousBCs[dP00] = 0.5; + expectedQsForTwoPreviousBCs[dPM0] = 0.5; + expectedQsForTwoPreviousBCs[dP0P] = 0.5; + expectedQsForTwoPreviousBCs[dPMP] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs)); } @@ -322,10 +322,10 @@ TEST_F(SideTestBC, setQs3D_givenPYandPZhaveBeenSet_thenSetPX_doNotSetSameQsAgain auto actualQs = bc->getQs()[0]; std::vector<real> expectedQsForTwoPreviousBCs(27, -1); - expectedQsForTwoPreviousBCs[DIR_P00] = 0.5; - expectedQsForTwoPreviousBCs[DIR_PM0] = 0.5; - expectedQsForTwoPreviousBCs[DIR_P0M] = 0.5; - expectedQsForTwoPreviousBCs[DIR_PMM] = 0.5; + expectedQsForTwoPreviousBCs[dP00] = 0.5; + expectedQsForTwoPreviousBCs[dPM0] = 0.5; + expectedQsForTwoPreviousBCs[dP0M] = 0.5; + expectedQsForTwoPreviousBCs[dPMM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs)); } @@ -340,10 +340,10 @@ TEST_F(SideTestBC, setQs3D_givenMYandPZhaveBeenSet_thenSetPX_doNotSetSameQsAgain auto actualQs = bc->getQs()[0]; std::vector<real> expectedQsForTwoPreviousBCs(27, -1); - expectedQsForTwoPreviousBCs[DIR_P00] = 0.5; - expectedQsForTwoPreviousBCs[DIR_PP0] = 0.5; - expectedQsForTwoPreviousBCs[DIR_P0M] = 0.5; - expectedQsForTwoPreviousBCs[DIR_PPM] = 0.5; + expectedQsForTwoPreviousBCs[dP00] = 0.5; + expectedQsForTwoPreviousBCs[dPP0] = 0.5; + expectedQsForTwoPreviousBCs[dP0M] = 0.5; + expectedQsForTwoPreviousBCs[dPPM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs)); } @@ -358,10 +358,10 @@ TEST_F(SideTestBC, setQs3D_givenMYandMZhaveBeenSet_thenSetPX_doNotSetSameQsAgain auto actualQs = bc->getQs()[0]; std::vector<real> expectedQsForTwoPreviousBCs(27, -1); - expectedQsForTwoPreviousBCs[DIR_P00] = 0.5; - expectedQsForTwoPreviousBCs[DIR_PP0] = 0.5; - expectedQsForTwoPreviousBCs[DIR_P0P] = 0.5; - expectedQsForTwoPreviousBCs[DIR_PPP] = 0.5; + expectedQsForTwoPreviousBCs[dP00] = 0.5; + expectedQsForTwoPreviousBCs[dPP0] = 0.5; + expectedQsForTwoPreviousBCs[dP0P] = 0.5; + expectedQsForTwoPreviousBCs[dPPP] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs)); } @@ -374,15 +374,15 @@ TEST_F(SideTestBC, setQs3D_whenSettingMX_setAllQsNormalToBC) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_M00] = 0.5; - expectedQs[DIR_MP0] = 0.5; - expectedQs[DIR_MM0] = 0.5; - expectedQs[DIR_M0P] = 0.5; - expectedQs[DIR_M0M] = 0.5; - expectedQs[DIR_MPP] = 0.5; - expectedQs[DIR_MMP] = 0.5; - expectedQs[DIR_MPM] = 0.5; - expectedQs[DIR_MMM] = 0.5; + expectedQs[dM00] = 0.5; + expectedQs[dMP0] = 0.5; + expectedQs[dMM0] = 0.5; + expectedQs[dM0P] = 0.5; + expectedQs[dM0M] = 0.5; + expectedQs[dMPP] = 0.5; + expectedQs[dMMP] = 0.5; + expectedQs[dMPM] = 0.5; + expectedQs[dMMM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -396,12 +396,12 @@ TEST_F(SideTestBC, setQs3D_givenPYhasBeenSet_thenSetMX_doNotSetSameQsAgain) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_M00] = 0.5; - expectedQs[DIR_MM0] = 0.5; - expectedQs[DIR_M0P] = 0.5; - expectedQs[DIR_M0M] = 0.5; - expectedQs[DIR_MMP] = 0.5; - expectedQs[DIR_MMM] = 0.5; + expectedQs[dM00] = 0.5; + expectedQs[dMM0] = 0.5; + expectedQs[dM0P] = 0.5; + expectedQs[dM0M] = 0.5; + expectedQs[dMMP] = 0.5; + expectedQs[dMMM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -415,12 +415,12 @@ TEST_F(SideTestBC, setQs3D_givenMYhasBeenSet_thenSetMX_doNotSetSameQsAgain) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_M00] = 0.5; - expectedQs[DIR_MP0] = 0.5; - expectedQs[DIR_M0P] = 0.5; - expectedQs[DIR_M0M] = 0.5; - expectedQs[DIR_MPP] = 0.5; - expectedQs[DIR_MPM] = 0.5; + expectedQs[dM00] = 0.5; + expectedQs[dMP0] = 0.5; + expectedQs[dM0P] = 0.5; + expectedQs[dM0M] = 0.5; + expectedQs[dMPP] = 0.5; + expectedQs[dMPM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -434,12 +434,12 @@ TEST_F(SideTestBC, setQs3D_givenPZhasBeenSet_thenSetMX_doNotSetSameQsAgain) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_M00] = 0.5; - expectedQs[DIR_MP0] = 0.5; - expectedQs[DIR_MM0] = 0.5; - expectedQs[DIR_M0M] = 0.5; - expectedQs[DIR_MPM] = 0.5; - expectedQs[DIR_MMM] = 0.5; + expectedQs[dM00] = 0.5; + expectedQs[dMP0] = 0.5; + expectedQs[dMM0] = 0.5; + expectedQs[dM0M] = 0.5; + expectedQs[dMPM] = 0.5; + expectedQs[dMMM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -453,12 +453,12 @@ TEST_F(SideTestBC, setQs3D_givenMZhasBeenSet_thenSetMX_doNotSetSameQsAgain) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_M00] = 0.5; - expectedQs[DIR_MP0] = 0.5; - expectedQs[DIR_MM0] = 0.5; - expectedQs[DIR_M0P] = 0.5; - expectedQs[DIR_MPP] = 0.5; - expectedQs[DIR_MMP] = 0.5; + expectedQs[dM00] = 0.5; + expectedQs[dMP0] = 0.5; + expectedQs[dMM0] = 0.5; + expectedQs[dM0P] = 0.5; + expectedQs[dMPP] = 0.5; + expectedQs[dMMP] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -473,10 +473,10 @@ TEST_F(SideTestBC, setQs3D_givenPYandMZhaveBeenSet_thenSetMX_doNotSetSameQsAgain auto actualQs = bc->getQs()[0]; std::vector<real> expectedQsForTwoPreviousBCs(27, -1); - expectedQsForTwoPreviousBCs[DIR_M00] = 0.5; - expectedQsForTwoPreviousBCs[DIR_MM0] = 0.5; - expectedQsForTwoPreviousBCs[DIR_M0P] = 0.5; - expectedQsForTwoPreviousBCs[DIR_MMP] = 0.5; + expectedQsForTwoPreviousBCs[dM00] = 0.5; + expectedQsForTwoPreviousBCs[dMM0] = 0.5; + expectedQsForTwoPreviousBCs[dM0P] = 0.5; + expectedQsForTwoPreviousBCs[dMMP] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs)); } @@ -491,10 +491,10 @@ TEST_F(SideTestBC, setQs3D_givenPYandPZhaveBeenSet_thenSetMX_doNotSetSameQsAgain auto actualQs = bc->getQs()[0]; std::vector<real> expectedQsForTwoPreviousBCs(27, -1); - expectedQsForTwoPreviousBCs[DIR_M00] = 0.5; - expectedQsForTwoPreviousBCs[DIR_MM0] = 0.5; - expectedQsForTwoPreviousBCs[DIR_M0M] = 0.5; - expectedQsForTwoPreviousBCs[DIR_MMM] = 0.5; + expectedQsForTwoPreviousBCs[dM00] = 0.5; + expectedQsForTwoPreviousBCs[dMM0] = 0.5; + expectedQsForTwoPreviousBCs[dM0M] = 0.5; + expectedQsForTwoPreviousBCs[dMMM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs)); } @@ -509,10 +509,10 @@ TEST_F(SideTestBC, setQs3D_givenMYandPZhaveBeenSet_thenSetMX_doNotSetSameQsAgain auto actualQs = bc->getQs()[0]; std::vector<real> expectedQsForTwoPreviousBCs(27, -1); - expectedQsForTwoPreviousBCs[DIR_M00] = 0.5; - expectedQsForTwoPreviousBCs[DIR_MP0] = 0.5; - expectedQsForTwoPreviousBCs[DIR_M0M] = 0.5; - expectedQsForTwoPreviousBCs[DIR_MPM] = 0.5; + expectedQsForTwoPreviousBCs[dM00] = 0.5; + expectedQsForTwoPreviousBCs[dMP0] = 0.5; + expectedQsForTwoPreviousBCs[dM0M] = 0.5; + expectedQsForTwoPreviousBCs[dMPM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs)); } @@ -527,10 +527,10 @@ TEST_F(SideTestBC, setQs3D_givenMYandMZhaveBeenSet_thenSetMX_doNotSetSameQsAgain auto actualQs = bc->getQs()[0]; std::vector<real> expectedQsForTwoPreviousBCs(27, -1); - expectedQsForTwoPreviousBCs[DIR_M00] = 0.5; - expectedQsForTwoPreviousBCs[DIR_MP0] = 0.5; - expectedQsForTwoPreviousBCs[DIR_M0P] = 0.5; - expectedQsForTwoPreviousBCs[DIR_MPP] = 0.5; + expectedQsForTwoPreviousBCs[dM00] = 0.5; + expectedQsForTwoPreviousBCs[dMP0] = 0.5; + expectedQsForTwoPreviousBCs[dM0P] = 0.5; + expectedQsForTwoPreviousBCs[dMPP] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs)); } @@ -543,15 +543,15 @@ TEST_F(SideTestBC, setQs3D_whenSettingMZ_setAllQsNormalToBC) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_00M] = 0.5; - expectedQs[DIR_P0M] = 0.5; - expectedQs[DIR_M0M] = 0.5; - expectedQs[DIR_0PM] = 0.5; - expectedQs[DIR_0MM] = 0.5; - expectedQs[DIR_PPM] = 0.5; - expectedQs[DIR_MPM] = 0.5; - expectedQs[DIR_PMM] = 0.5; - expectedQs[DIR_MMM] = 0.5; + expectedQs[d00M] = 0.5; + expectedQs[dP0M] = 0.5; + expectedQs[dM0M] = 0.5; + expectedQs[d0PM] = 0.5; + expectedQs[d0MM] = 0.5; + expectedQs[dPPM] = 0.5; + expectedQs[dMPM] = 0.5; + expectedQs[dPMM] = 0.5; + expectedQs[dMMM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -565,12 +565,12 @@ TEST_F(SideTestBC, setQs3D_givenMYhasBeenSet_thenSetMZ_doNotSetSameQsAgain) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_00M] = 0.5; - expectedQs[DIR_P0M] = 0.5; - expectedQs[DIR_M0M] = 0.5; - expectedQs[DIR_0PM] = 0.5; - expectedQs[DIR_PPM] = 0.5; - expectedQs[DIR_MPM] = 0.5; + expectedQs[d00M] = 0.5; + expectedQs[dP0M] = 0.5; + expectedQs[dM0M] = 0.5; + expectedQs[d0PM] = 0.5; + expectedQs[dPPM] = 0.5; + expectedQs[dMPM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -584,12 +584,12 @@ TEST_F(SideTestBC, setQs3D_givenPYhasBeenSet_thenSetMZ_doNotSetSameQsAgain) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_00M] = 0.5; - expectedQs[DIR_P0M] = 0.5; - expectedQs[DIR_M0M] = 0.5; - expectedQs[DIR_0MM] = 0.5; - expectedQs[DIR_PMM] = 0.5; - expectedQs[DIR_MMM] = 0.5; + expectedQs[d00M] = 0.5; + expectedQs[dP0M] = 0.5; + expectedQs[dM0M] = 0.5; + expectedQs[d0MM] = 0.5; + expectedQs[dPMM] = 0.5; + expectedQs[dMMM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -603,12 +603,12 @@ TEST_F(SideTestBC, setQs3D_givenPXhasBeenSet_thenSetMZ_doNotSetSameQsAgain) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_00M] = 0.5; - expectedQs[DIR_M0M] = 0.5; - expectedQs[DIR_0PM] = 0.5; - expectedQs[DIR_0MM] = 0.5; - expectedQs[DIR_MPM] = 0.5; - expectedQs[DIR_MMM] = 0.5; + expectedQs[d00M] = 0.5; + expectedQs[dM0M] = 0.5; + expectedQs[d0PM] = 0.5; + expectedQs[d0MM] = 0.5; + expectedQs[dMPM] = 0.5; + expectedQs[dMMM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -622,12 +622,12 @@ TEST_F(SideTestBC, setQs3D_givenMXhasBeenSet_thenSetMZ_doNotSetSameQsAgain) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_00M] = 0.5; - expectedQs[DIR_P0M] = 0.5; - expectedQs[DIR_0PM] = 0.5; - expectedQs[DIR_0MM] = 0.5; - expectedQs[DIR_PPM] = 0.5; - expectedQs[DIR_PMM] = 0.5; + expectedQs[d00M] = 0.5; + expectedQs[dP0M] = 0.5; + expectedQs[d0PM] = 0.5; + expectedQs[d0MM] = 0.5; + expectedQs[dPPM] = 0.5; + expectedQs[dPMM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -642,10 +642,10 @@ TEST_F(SideTestBC, setQs3D_givenMYandPXhaveBeenSet_thenSetMZ_doNotSetSameQsAgain auto actualQs = bc->getQs()[0]; std::vector<real> expectedQsForTwoPreviousBCs(27, -1); - expectedQsForTwoPreviousBCs[DIR_00M] = 0.5; - expectedQsForTwoPreviousBCs[DIR_M0M] = 0.5; - expectedQsForTwoPreviousBCs[DIR_0PM] = 0.5; - expectedQsForTwoPreviousBCs[DIR_MPM] = 0.5; + expectedQsForTwoPreviousBCs[d00M] = 0.5; + expectedQsForTwoPreviousBCs[dM0M] = 0.5; + expectedQsForTwoPreviousBCs[d0PM] = 0.5; + expectedQsForTwoPreviousBCs[dMPM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs)); } @@ -660,10 +660,10 @@ TEST_F(SideTestBC, setQs3D_givenMYandMXhaveBeenSet_thenSetMZ_doNotSetSameQsAgain auto actualQs = bc->getQs()[0]; std::vector<real> expectedQsForTwoPreviousBCs(27, -1); - expectedQsForTwoPreviousBCs[DIR_00M] = 0.5; - expectedQsForTwoPreviousBCs[DIR_P0M] = 0.5; - expectedQsForTwoPreviousBCs[DIR_0PM] = 0.5; - expectedQsForTwoPreviousBCs[DIR_PPM] = 0.5; + expectedQsForTwoPreviousBCs[d00M] = 0.5; + expectedQsForTwoPreviousBCs[dP0M] = 0.5; + expectedQsForTwoPreviousBCs[d0PM] = 0.5; + expectedQsForTwoPreviousBCs[dPPM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs)); } @@ -678,10 +678,10 @@ TEST_F(SideTestBC, setQs3D_givenPYandPXhaveBeenSet_thenSetMZ_doNotSetSameQsAgain auto actualQs = bc->getQs()[0]; std::vector<real> expectedQsForTwoPreviousBCs(27, -1); - expectedQsForTwoPreviousBCs[DIR_00M] = 0.5; - expectedQsForTwoPreviousBCs[DIR_M0M] = 0.5; - expectedQsForTwoPreviousBCs[DIR_0MM] = 0.5; - expectedQsForTwoPreviousBCs[DIR_MMM] = 0.5; + expectedQsForTwoPreviousBCs[d00M] = 0.5; + expectedQsForTwoPreviousBCs[dM0M] = 0.5; + expectedQsForTwoPreviousBCs[d0MM] = 0.5; + expectedQsForTwoPreviousBCs[dMMM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs)); } @@ -696,10 +696,10 @@ TEST_F(SideTestBC, setQs3D_givenPYandMXhaveBeenSet_thenSetMZ_doNotSetSameQsAgain auto actualQs = bc->getQs()[0]; std::vector<real> expectedQsForTwoPreviousBCs(27, -1); - expectedQsForTwoPreviousBCs[DIR_00M] = 0.5; - expectedQsForTwoPreviousBCs[DIR_P0M] = 0.5; - expectedQsForTwoPreviousBCs[DIR_0MM] = 0.5; - expectedQsForTwoPreviousBCs[DIR_PMM] = 0.5; + expectedQsForTwoPreviousBCs[d00M] = 0.5; + expectedQsForTwoPreviousBCs[dP0M] = 0.5; + expectedQsForTwoPreviousBCs[d0MM] = 0.5; + expectedQsForTwoPreviousBCs[dPMM] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs)); } @@ -712,15 +712,15 @@ TEST_F(SideTestBC, setQs3D_whenSettingPZ_setAllQsNormalToBC) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_00P] = 0.5; - expectedQs[DIR_P0P] = 0.5; - expectedQs[DIR_M0P] = 0.5; - expectedQs[DIR_0PP] = 0.5; - expectedQs[DIR_0MP] = 0.5; - expectedQs[DIR_PPP] = 0.5; - expectedQs[DIR_MPP] = 0.5; - expectedQs[DIR_PMP] = 0.5; - expectedQs[DIR_MMP] = 0.5; + expectedQs[d00P] = 0.5; + expectedQs[dP0P] = 0.5; + expectedQs[dM0P] = 0.5; + expectedQs[d0PP] = 0.5; + expectedQs[d0MP] = 0.5; + expectedQs[dPPP] = 0.5; + expectedQs[dMPP] = 0.5; + expectedQs[dPMP] = 0.5; + expectedQs[dMMP] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -734,12 +734,12 @@ TEST_F(SideTestBC, setQs3D_givenMYhasBeenSet_thenSetPZ_doNotSetSameQsAgain) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_00P] = 0.5; - expectedQs[DIR_P0P] = 0.5; - expectedQs[DIR_M0P] = 0.5; - expectedQs[DIR_0PP] = 0.5; - expectedQs[DIR_PPP] = 0.5; - expectedQs[DIR_MPP] = 0.5; + expectedQs[d00P] = 0.5; + expectedQs[dP0P] = 0.5; + expectedQs[dM0P] = 0.5; + expectedQs[d0PP] = 0.5; + expectedQs[dPPP] = 0.5; + expectedQs[dMPP] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -753,12 +753,12 @@ TEST_F(SideTestBC, setQs3D_givenPYhasBeenSet_thenSetPZ_doNotSetSameQsAgain) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_00P] = 0.5; - expectedQs[DIR_P0P] = 0.5; - expectedQs[DIR_M0P] = 0.5; - expectedQs[DIR_0MP] = 0.5; - expectedQs[DIR_PMP] = 0.5; - expectedQs[DIR_MMP] = 0.5; + expectedQs[d00P] = 0.5; + expectedQs[dP0P] = 0.5; + expectedQs[dM0P] = 0.5; + expectedQs[d0MP] = 0.5; + expectedQs[dPMP] = 0.5; + expectedQs[dMMP] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -772,12 +772,12 @@ TEST_F(SideTestBC, setQs3D_givenPXhasBeenSet_thenSetPZ_doNotSetSameQsAgain) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_00P] = 0.5; - expectedQs[DIR_M0P] = 0.5; - expectedQs[DIR_0PP] = 0.5; - expectedQs[DIR_0MP] = 0.5; - expectedQs[DIR_MPP] = 0.5; - expectedQs[DIR_MMP] = 0.5; + expectedQs[d00P] = 0.5; + expectedQs[dM0P] = 0.5; + expectedQs[d0PP] = 0.5; + expectedQs[d0MP] = 0.5; + expectedQs[dMPP] = 0.5; + expectedQs[dMMP] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -791,12 +791,12 @@ TEST_F(SideTestBC, setQs3D_givenMXhasBeenSet_thenSetPZ_doNotSetSameQsAgain) auto actualQs = bc->getQs()[0]; std::vector<real> expectedQs(27, -1); - expectedQs[DIR_00P] = 0.5; - expectedQs[DIR_P0P] = 0.5; - expectedQs[DIR_0PP] = 0.5; - expectedQs[DIR_0MP] = 0.5; - expectedQs[DIR_PPP] = 0.5; - expectedQs[DIR_PMP] = 0.5; + expectedQs[d00P] = 0.5; + expectedQs[dP0P] = 0.5; + expectedQs[d0PP] = 0.5; + expectedQs[d0MP] = 0.5; + expectedQs[dPPP] = 0.5; + expectedQs[dPMP] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQs)); } @@ -811,10 +811,10 @@ TEST_F(SideTestBC, setQs3D_givenMYandPXhaveBeenSet_thenSetPZ_doNotSetSameQsAgain auto actualQs = bc->getQs()[0]; std::vector<real> expectedQsForTwoPreviousBCs(27, -1); - expectedQsForTwoPreviousBCs[DIR_00P] = 0.5; - expectedQsForTwoPreviousBCs[DIR_M0P] = 0.5; - expectedQsForTwoPreviousBCs[DIR_0PP] = 0.5; - expectedQsForTwoPreviousBCs[DIR_MPP] = 0.5; + expectedQsForTwoPreviousBCs[d00P] = 0.5; + expectedQsForTwoPreviousBCs[dM0P] = 0.5; + expectedQsForTwoPreviousBCs[d0PP] = 0.5; + expectedQsForTwoPreviousBCs[dMPP] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs)); } @@ -829,10 +829,10 @@ TEST_F(SideTestBC, setQs3D_givenMYandMXhaveBeenSet_thenSetPZ_doNotSetSameQsAgain auto actualQs = bc->getQs()[0]; std::vector<real> expectedQsForTwoPreviousBCs(27, -1); - expectedQsForTwoPreviousBCs[DIR_00P] = 0.5; - expectedQsForTwoPreviousBCs[DIR_P0P] = 0.5; - expectedQsForTwoPreviousBCs[DIR_0PP] = 0.5; - expectedQsForTwoPreviousBCs[DIR_PPP] = 0.5; + expectedQsForTwoPreviousBCs[d00P] = 0.5; + expectedQsForTwoPreviousBCs[dP0P] = 0.5; + expectedQsForTwoPreviousBCs[d0PP] = 0.5; + expectedQsForTwoPreviousBCs[dPPP] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs)); } @@ -847,10 +847,10 @@ TEST_F(SideTestBC, setQs3D_givenPYandPXhaveBeenSet_thenSetPZ_doNotSetSameQsAgain auto actualQs = bc->getQs()[0]; std::vector<real> expectedQsForTwoPreviousBCs(27, -1); - expectedQsForTwoPreviousBCs[DIR_00P] = 0.5; - expectedQsForTwoPreviousBCs[DIR_M0P] = 0.5; - expectedQsForTwoPreviousBCs[DIR_0MP] = 0.5; - expectedQsForTwoPreviousBCs[DIR_MMP] = 0.5; + expectedQsForTwoPreviousBCs[d00P] = 0.5; + expectedQsForTwoPreviousBCs[dM0P] = 0.5; + expectedQsForTwoPreviousBCs[d0MP] = 0.5; + expectedQsForTwoPreviousBCs[dMMP] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs)); } @@ -865,9 +865,9 @@ TEST_F(SideTestBC, setQs3D_givenPYandMXhaveBeenSet_thenSetPZ_doNotSetSameQsAgain auto actualQs = bc->getQs()[0]; std::vector<real> expectedQsForTwoPreviousBCs(27, -1); - expectedQsForTwoPreviousBCs[DIR_00P] = 0.5; - expectedQsForTwoPreviousBCs[DIR_P0P] = 0.5; - expectedQsForTwoPreviousBCs[DIR_0MP] = 0.5; - expectedQsForTwoPreviousBCs[DIR_PMP] = 0.5; + expectedQsForTwoPreviousBCs[d00P] = 0.5; + expectedQsForTwoPreviousBCs[dP0P] = 0.5; + expectedQsForTwoPreviousBCs[d0MP] = 0.5; + expectedQsForTwoPreviousBCs[dPMP] = 0.5; EXPECT_THAT(actualQs, testing::Eq(expectedQsForTwoPreviousBCs)); } diff --git a/src/gpu/GridGenerator/grid/GridInterface.cpp b/src/gpu/GridGenerator/grid/GridInterface.cpp index 4b69cebd16d4c529e4889b84ff881d4ed660f124..66ca05a16fcdbc859f1b808f551e7efb9df1d5f1 100644 --- a/src/gpu/GridGenerator/grid/GridInterface.cpp +++ b/src/gpu/GridGenerator/grid/GridInterface.cpp @@ -354,7 +354,7 @@ uint GridInterface::findOffsetCF(const uint& indexOnCoarseGrid, GridImp* coarseG Cell cell(x, y, z, coarseGrid->getDelta()); if( coarseGrid->cellContainsOnly( cell, FLUID, FLUID_CFC ) ){ - this->cf.offset[ interfaceIndex ] = dir::DIR_000; + this->cf.offset[ interfaceIndex ] = dir::d000; return indexOnCoarseGrid; } @@ -389,7 +389,7 @@ uint GridInterface::findOffsetFC(const uint& indexOnFineGrid, GridImp* fineGrid, Cell cell(x, y, z, fineGrid->getDelta()); if( fineGrid->cellContainsOnly( cell, FLUID, FLUID_FCF ) ){ - this->fc.offset[ interfaceIndex ] = dir::DIR_000; + this->fc.offset[ interfaceIndex ] = dir::d000; return indexOnFineGrid; } diff --git a/src/gpu/GridGenerator/grid/distributions/Distribution.cpp b/src/gpu/GridGenerator/grid/distributions/Distribution.cpp index 31d2e2f8a927e7141d80a55f4164dfcb0f52a8e0..d21ec338dabc4207ddbb6d83b8b63b8d2facd689 100644 --- a/src/gpu/GridGenerator/grid/distributions/Distribution.cpp +++ b/src/gpu/GridGenerator/grid/distributions/Distribution.cpp @@ -49,148 +49,148 @@ Distribution DistributionHelper::getDistribution27() d27.dirs.resize((ENDDIR + 1) * DIMENSION); d27.directions.resize(ENDDIR + 1); - d27.directions[DIR_P00] = Direction(DIR_27_E_X, DIR_27_E_Y, DIR_27_E_Z); - d27.directions[DIR_M00] = Direction(DIR_27_W_X, DIR_27_W_Y, DIR_27_W_Z); - d27.directions[DIR_0P0] = Direction(DIR_27_N_X, DIR_27_N_Y, DIR_27_N_Z); - d27.directions[DIR_0M0] = Direction(DIR_27_S_X, DIR_27_S_Y, DIR_27_S_Z); - d27.directions[DIR_00P] = Direction(DIR_27_T_X, DIR_27_T_Y, DIR_27_T_Z); - d27.directions[DIR_00M] = Direction(DIR_27_B_X, DIR_27_B_Y, DIR_27_B_Z); - - d27.directions[DIR_PP0] = Direction(DIR_27_NE_X, DIR_27_NE_Y, DIR_27_NE_Z); - d27.directions[DIR_MM0] = Direction(DIR_27_SW_X, DIR_27_SW_Y, DIR_27_SW_Z); - d27.directions[DIR_PM0] = Direction(DIR_27_SE_X, DIR_27_SE_Y, DIR_27_SE_Z); - d27.directions[DIR_MP0] = Direction(DIR_27_NW_X, DIR_27_NW_Y, DIR_27_NW_Z); - - d27.directions[DIR_P0P] = Direction(DIR_27_TE_X, DIR_27_TE_Y, DIR_27_TE_Z); - d27.directions[DIR_M0M] = Direction(DIR_27_BW_X, DIR_27_BW_Y, DIR_27_BW_Z); - d27.directions[DIR_P0M] = Direction(DIR_27_BE_X, DIR_27_BE_Y, DIR_27_BE_Z); - d27.directions[DIR_M0P] = Direction(DIR_27_TW_X, DIR_27_TW_Y, DIR_27_TW_Z); - - d27.directions[DIR_0PP] = Direction(DIR_27_TN_X, DIR_27_TN_Y, DIR_27_TN_Z); - d27.directions[DIR_0MM] = Direction(DIR_27_BS_X, DIR_27_BS_Y, DIR_27_BS_Z); - d27.directions[DIR_0PM] = Direction(DIR_27_BN_X, DIR_27_BN_Y, DIR_27_BN_Z); - d27.directions[DIR_0MP] = Direction(DIR_27_TS_X, DIR_27_TS_Y, DIR_27_TS_Z); - - d27.directions[DIR_000] = Direction(DIR_27_REST_X, DIR_27_REST_Y, DIR_27_REST_Z); - - d27.directions[DIR_PPP] = Direction(DIR_27_TNE_X, DIR_27_TNE_Y, DIR_27_TNE_Z); - d27.directions[DIR_MPP] = Direction(DIR_27_TNW_X, DIR_27_TNW_Y, DIR_27_TNW_Z); - d27.directions[DIR_PMP] = Direction(DIR_27_TSE_X, DIR_27_TSE_Y, DIR_27_TSE_Z); - d27.directions[DIR_MMP] = Direction(DIR_27_TSW_X, DIR_27_TSW_Y, DIR_27_TSW_Z); - - d27.directions[DIR_PPM] = Direction(DIR_27_BNE_X, DIR_27_BNE_Y, DIR_27_BNE_Z); - d27.directions[DIR_MPM]= Direction(DIR_27_BNW_X, DIR_27_BNW_Y, DIR_27_BNW_Z); - d27.directions[DIR_PMM]= Direction(DIR_27_BSE_X, DIR_27_BSE_Y, DIR_27_BSE_Z); - d27.directions[DIR_MMM] = Direction(DIR_27_BSW_X, DIR_27_BSW_Y, DIR_27_BSW_Z); - - - d27.dirs[DIR_P00 * 3 ] = DIR_27_E_X; - d27.dirs[DIR_P00 * 3 + 1] = DIR_27_E_Y; - d27.dirs[DIR_P00 * 3 + 2] = DIR_27_E_Z; - - d27.dirs[DIR_M00 * 3 ] = DIR_27_W_X; - d27.dirs[DIR_M00 * 3 + 1] = DIR_27_W_Y; - d27.dirs[DIR_M00 * 3 + 2] = DIR_27_W_Z; + d27.directions[dP00] = Direction(DIR_27_E_X, DIR_27_E_Y, DIR_27_E_Z); + d27.directions[dM00] = Direction(DIR_27_W_X, DIR_27_W_Y, DIR_27_W_Z); + d27.directions[d0P0] = Direction(DIR_27_N_X, DIR_27_N_Y, DIR_27_N_Z); + d27.directions[d0M0] = Direction(DIR_27_S_X, DIR_27_S_Y, DIR_27_S_Z); + d27.directions[d00P] = Direction(DIR_27_T_X, DIR_27_T_Y, DIR_27_T_Z); + d27.directions[d00M] = Direction(DIR_27_B_X, DIR_27_B_Y, DIR_27_B_Z); + + d27.directions[dPP0] = Direction(DIR_27_NE_X, DIR_27_NE_Y, DIR_27_NE_Z); + d27.directions[dMM0] = Direction(DIR_27_SW_X, DIR_27_SW_Y, DIR_27_SW_Z); + d27.directions[dPM0] = Direction(DIR_27_SE_X, DIR_27_SE_Y, DIR_27_SE_Z); + d27.directions[dMP0] = Direction(DIR_27_NW_X, DIR_27_NW_Y, DIR_27_NW_Z); + + d27.directions[dP0P] = Direction(DIR_27_TE_X, DIR_27_TE_Y, DIR_27_TE_Z); + d27.directions[dM0M] = Direction(DIR_27_BW_X, DIR_27_BW_Y, DIR_27_BW_Z); + d27.directions[dP0M] = Direction(DIR_27_BE_X, DIR_27_BE_Y, DIR_27_BE_Z); + d27.directions[dM0P] = Direction(DIR_27_TW_X, DIR_27_TW_Y, DIR_27_TW_Z); + + d27.directions[d0PP] = Direction(DIR_27_TN_X, DIR_27_TN_Y, DIR_27_TN_Z); + d27.directions[d0MM] = Direction(DIR_27_BS_X, DIR_27_BS_Y, DIR_27_BS_Z); + d27.directions[d0PM] = Direction(DIR_27_BN_X, DIR_27_BN_Y, DIR_27_BN_Z); + d27.directions[d0MP] = Direction(DIR_27_TS_X, DIR_27_TS_Y, DIR_27_TS_Z); + + d27.directions[d000] = Direction(DIR_27_REST_X, DIR_27_REST_Y, DIR_27_REST_Z); + + d27.directions[dPPP] = Direction(DIR_27_TNE_X, DIR_27_TNE_Y, DIR_27_TNE_Z); + d27.directions[dMPP] = Direction(DIR_27_TNW_X, DIR_27_TNW_Y, DIR_27_TNW_Z); + d27.directions[dPMP] = Direction(DIR_27_TSE_X, DIR_27_TSE_Y, DIR_27_TSE_Z); + d27.directions[dMMP] = Direction(DIR_27_TSW_X, DIR_27_TSW_Y, DIR_27_TSW_Z); + + d27.directions[dPPM] = Direction(DIR_27_BNE_X, DIR_27_BNE_Y, DIR_27_BNE_Z); + d27.directions[dMPM]= Direction(DIR_27_BNW_X, DIR_27_BNW_Y, DIR_27_BNW_Z); + d27.directions[dPMM]= Direction(DIR_27_BSE_X, DIR_27_BSE_Y, DIR_27_BSE_Z); + d27.directions[dMMM] = Direction(DIR_27_BSW_X, DIR_27_BSW_Y, DIR_27_BSW_Z); + + + d27.dirs[dP00 * 3 ] = DIR_27_E_X; + d27.dirs[dP00 * 3 + 1] = DIR_27_E_Y; + d27.dirs[dP00 * 3 + 2] = DIR_27_E_Z; + + d27.dirs[dM00 * 3 ] = DIR_27_W_X; + d27.dirs[dM00 * 3 + 1] = DIR_27_W_Y; + d27.dirs[dM00 * 3 + 2] = DIR_27_W_Z; - d27.dirs[DIR_0P0 * 3 ] = DIR_27_N_X; - d27.dirs[DIR_0P0 * 3 + 1] = DIR_27_N_Y; - d27.dirs[DIR_0P0 * 3 + 2] = DIR_27_N_Z; + d27.dirs[d0P0 * 3 ] = DIR_27_N_X; + d27.dirs[d0P0 * 3 + 1] = DIR_27_N_Y; + d27.dirs[d0P0 * 3 + 2] = DIR_27_N_Z; - d27.dirs[DIR_0M0 * 3 ] = DIR_27_S_X; - d27.dirs[DIR_0M0 * 3 + 1] = DIR_27_S_Y; - d27.dirs[DIR_0M0 * 3 + 2] = DIR_27_S_Z; + d27.dirs[d0M0 * 3 ] = DIR_27_S_X; + d27.dirs[d0M0 * 3 + 1] = DIR_27_S_Y; + d27.dirs[d0M0 * 3 + 2] = DIR_27_S_Z; - d27.dirs[DIR_00P * 3 ] = DIR_27_T_X; - d27.dirs[DIR_00P * 3 + 1] = DIR_27_T_Y; - d27.dirs[DIR_00P * 3 + 2] = DIR_27_T_Z; + d27.dirs[d00P * 3 ] = DIR_27_T_X; + d27.dirs[d00P * 3 + 1] = DIR_27_T_Y; + d27.dirs[d00P * 3 + 2] = DIR_27_T_Z; - d27.dirs[DIR_00M * 3 ] = DIR_27_B_X; - d27.dirs[DIR_00M * 3 + 1] = DIR_27_B_Y; - d27.dirs[DIR_00M * 3 + 2] = DIR_27_B_Z; + d27.dirs[d00M * 3 ] = DIR_27_B_X; + d27.dirs[d00M * 3 + 1] = DIR_27_B_Y; + d27.dirs[d00M * 3 + 2] = DIR_27_B_Z; - d27.dirs[DIR_PP0 * 3 ] = DIR_27_NE_X; - d27.dirs[DIR_PP0 * 3 + 1] = DIR_27_NE_Y; - d27.dirs[DIR_PP0 * 3 + 2] = DIR_27_NE_Z; + d27.dirs[dPP0 * 3 ] = DIR_27_NE_X; + d27.dirs[dPP0 * 3 + 1] = DIR_27_NE_Y; + d27.dirs[dPP0 * 3 + 2] = DIR_27_NE_Z; - d27.dirs[DIR_MM0 * 3 ] = DIR_27_SW_X; - d27.dirs[DIR_MM0 * 3 + 1] = DIR_27_SW_Y; - d27.dirs[DIR_MM0 * 3 + 2] = DIR_27_SW_Z; + d27.dirs[dMM0 * 3 ] = DIR_27_SW_X; + d27.dirs[dMM0 * 3 + 1] = DIR_27_SW_Y; + d27.dirs[dMM0 * 3 + 2] = DIR_27_SW_Z; - d27.dirs[DIR_PM0 * 3 ] = DIR_27_SE_X; - d27.dirs[DIR_PM0 * 3 + 1] = DIR_27_SE_Y; - d27.dirs[DIR_PM0 * 3 + 2] = DIR_27_SE_Z; + d27.dirs[dPM0 * 3 ] = DIR_27_SE_X; + d27.dirs[dPM0 * 3 + 1] = DIR_27_SE_Y; + d27.dirs[dPM0 * 3 + 2] = DIR_27_SE_Z; - d27.dirs[DIR_MP0 * 3 ] = DIR_27_NW_X; - d27.dirs[DIR_MP0 * 3 + 1] = DIR_27_NW_Y; - d27.dirs[DIR_MP0 * 3 + 2] = DIR_27_NW_Z; + d27.dirs[dMP0 * 3 ] = DIR_27_NW_X; + d27.dirs[dMP0 * 3 + 1] = DIR_27_NW_Y; + d27.dirs[dMP0 * 3 + 2] = DIR_27_NW_Z; - d27.dirs[DIR_P0P * 3 ] = DIR_27_TE_X; - d27.dirs[DIR_P0P * 3 + 1] = DIR_27_TE_Y; - d27.dirs[DIR_P0P * 3 + 2] = DIR_27_TE_Z; + d27.dirs[dP0P * 3 ] = DIR_27_TE_X; + d27.dirs[dP0P * 3 + 1] = DIR_27_TE_Y; + d27.dirs[dP0P * 3 + 2] = DIR_27_TE_Z; - d27.dirs[DIR_M0M * 3 ] = DIR_27_BW_X; - d27.dirs[DIR_M0M * 3 + 1] = DIR_27_BW_Y; - d27.dirs[DIR_M0M * 3 + 2] = DIR_27_BW_Z; + d27.dirs[dM0M * 3 ] = DIR_27_BW_X; + d27.dirs[dM0M * 3 + 1] = DIR_27_BW_Y; + d27.dirs[dM0M * 3 + 2] = DIR_27_BW_Z; - d27.dirs[DIR_P0M * 3 ] = DIR_27_BE_X; - d27.dirs[DIR_P0M * 3 + 1] = DIR_27_BE_Y; - d27.dirs[DIR_P0M * 3 + 2] = DIR_27_BE_Z; + d27.dirs[dP0M * 3 ] = DIR_27_BE_X; + d27.dirs[dP0M * 3 + 1] = DIR_27_BE_Y; + d27.dirs[dP0M * 3 + 2] = DIR_27_BE_Z; - d27.dirs[DIR_M0P * 3 ] = DIR_27_TW_X; - d27.dirs[DIR_M0P * 3 + 1] = DIR_27_TW_Y; - d27.dirs[DIR_M0P * 3 + 2] = DIR_27_TW_Z; + d27.dirs[dM0P * 3 ] = DIR_27_TW_X; + d27.dirs[dM0P * 3 + 1] = DIR_27_TW_Y; + d27.dirs[dM0P * 3 + 2] = DIR_27_TW_Z; - d27.dirs[DIR_0PP * 3 ] = DIR_27_TN_X; - d27.dirs[DIR_0PP * 3 + 1] = DIR_27_TN_Y; - d27.dirs[DIR_0PP * 3 + 2] = DIR_27_TN_Z; + d27.dirs[d0PP * 3 ] = DIR_27_TN_X; + d27.dirs[d0PP * 3 + 1] = DIR_27_TN_Y; + d27.dirs[d0PP * 3 + 2] = DIR_27_TN_Z; - d27.dirs[DIR_0MM * 3 ] = DIR_27_BS_X; - d27.dirs[DIR_0MM * 3 + 1] = DIR_27_BS_Y; - d27.dirs[DIR_0MM * 3 + 2] = DIR_27_BS_Z; + d27.dirs[d0MM * 3 ] = DIR_27_BS_X; + d27.dirs[d0MM * 3 + 1] = DIR_27_BS_Y; + d27.dirs[d0MM * 3 + 2] = DIR_27_BS_Z; - d27.dirs[DIR_0PM * 3 ] = DIR_27_BN_X; - d27.dirs[DIR_0PM * 3 + 1] = DIR_27_BN_Y; - d27.dirs[DIR_0PM * 3 + 2] = DIR_27_BN_Z; + d27.dirs[d0PM * 3 ] = DIR_27_BN_X; + d27.dirs[d0PM * 3 + 1] = DIR_27_BN_Y; + d27.dirs[d0PM * 3 + 2] = DIR_27_BN_Z; - d27.dirs[DIR_0MP * 3 ] = DIR_27_TS_X; - d27.dirs[DIR_0MP * 3 + 1] = DIR_27_TS_Y; - d27.dirs[DIR_0MP * 3 + 2] = DIR_27_TS_Z; + d27.dirs[d0MP * 3 ] = DIR_27_TS_X; + d27.dirs[d0MP * 3 + 1] = DIR_27_TS_Y; + d27.dirs[d0MP * 3 + 2] = DIR_27_TS_Z; - d27.dirs[DIR_000 * 3 ] = DIR_27_REST_X; // - d27.dirs[DIR_000 * 3 + 1] = DIR_27_REST_Y; // ZERO ELEMENT - d27.dirs[DIR_000 * 3 + 2] = DIR_27_REST_Z; // + d27.dirs[d000 * 3 ] = DIR_27_REST_X; // + d27.dirs[d000 * 3 + 1] = DIR_27_REST_Y; // ZERO ELEMENT + d27.dirs[d000 * 3 + 2] = DIR_27_REST_Z; // - d27.dirs[DIR_PPP * 3 ] = DIR_27_TNE_X; - d27.dirs[DIR_PPP * 3 + 1] = DIR_27_TNE_Y; - d27.dirs[DIR_PPP * 3 + 2] = DIR_27_TNE_Z; + d27.dirs[dPPP * 3 ] = DIR_27_TNE_X; + d27.dirs[dPPP * 3 + 1] = DIR_27_TNE_Y; + d27.dirs[dPPP * 3 + 2] = DIR_27_TNE_Z; - d27.dirs[DIR_PPM * 3 ] = DIR_27_BNE_X; - d27.dirs[DIR_PPM * 3 + 1] = DIR_27_BNE_Y; - d27.dirs[DIR_PPM * 3 + 2] = DIR_27_BNE_Z; + d27.dirs[dPPM * 3 ] = DIR_27_BNE_X; + d27.dirs[dPPM * 3 + 1] = DIR_27_BNE_Y; + d27.dirs[dPPM * 3 + 2] = DIR_27_BNE_Z; - d27.dirs[DIR_PMP * 3 ] = DIR_27_TSE_X; - d27.dirs[DIR_PMP * 3 + 1] = DIR_27_TSE_Y; - d27.dirs[DIR_PMP * 3 + 2] = DIR_27_TSE_Z; + d27.dirs[dPMP * 3 ] = DIR_27_TSE_X; + d27.dirs[dPMP * 3 + 1] = DIR_27_TSE_Y; + d27.dirs[dPMP * 3 + 2] = DIR_27_TSE_Z; - d27.dirs[DIR_PMM * 3 ] = DIR_27_BSE_X; - d27.dirs[DIR_PMM * 3 + 1] = DIR_27_BSE_Y; - d27.dirs[DIR_PMM * 3 + 2] = DIR_27_BSE_Z; + d27.dirs[dPMM * 3 ] = DIR_27_BSE_X; + d27.dirs[dPMM * 3 + 1] = DIR_27_BSE_Y; + d27.dirs[dPMM * 3 + 2] = DIR_27_BSE_Z; - d27.dirs[DIR_MPP * 3 ] = DIR_27_TNW_X; - d27.dirs[DIR_MPP * 3 + 1] = DIR_27_TNW_Y; - d27.dirs[DIR_MPP * 3 + 2] = DIR_27_TNW_Z; + d27.dirs[dMPP * 3 ] = DIR_27_TNW_X; + d27.dirs[dMPP * 3 + 1] = DIR_27_TNW_Y; + d27.dirs[dMPP * 3 + 2] = DIR_27_TNW_Z; - d27.dirs[DIR_MPM * 3 ] = DIR_27_BNW_X; - d27.dirs[DIR_MPM * 3 + 1] = DIR_27_BNW_Y; - d27.dirs[DIR_MPM * 3 + 2] = DIR_27_BNW_Z; + d27.dirs[dMPM * 3 ] = DIR_27_BNW_X; + d27.dirs[dMPM * 3 + 1] = DIR_27_BNW_Y; + d27.dirs[dMPM * 3 + 2] = DIR_27_BNW_Z; - d27.dirs[DIR_MMP * 3 ] = DIR_27_TSW_X; - d27.dirs[DIR_MMP * 3 + 1] = DIR_27_TSW_Y; - d27.dirs[DIR_MMP * 3 + 2] = DIR_27_TSW_Z; + d27.dirs[dMMP * 3 ] = DIR_27_TSW_X; + d27.dirs[dMMP * 3 + 1] = DIR_27_TSW_Y; + d27.dirs[dMMP * 3 + 2] = DIR_27_TSW_Z; - d27.dirs[DIR_MMM * 3 ] = DIR_27_BSW_X; - d27.dirs[DIR_MMM * 3 + 1] = DIR_27_BSW_Y; - d27.dirs[DIR_MMM * 3 + 2] = DIR_27_BSW_Z; + d27.dirs[dMMM * 3 ] = DIR_27_BSW_X; + d27.dirs[dMMM * 3 + 1] = DIR_27_BSW_Y; + d27.dirs[dMMM * 3 + 2] = DIR_27_BSW_Z; return d27; } diff --git a/src/gpu/GridGenerator/grid/distributions/DistributionTest.cpp b/src/gpu/GridGenerator/grid/distributions/DistributionTest.cpp index 3a9dd1d33ec4e1567b7b85e99970a5245ebbb06d..4ea6e345fe5fbdef05e386002f35d47f34703a9b 100644 --- a/src/gpu/GridGenerator/grid/distributions/DistributionTest.cpp +++ b/src/gpu/GridGenerator/grid/distributions/DistributionTest.cpp @@ -10,52 +10,52 @@ TEST(DistributionTest, DistributionReturnsCorrectDirections) { Distribution dist = DistributionHelper::getDistribution27(); - EXPECT_THAT(dist.directions[DIR_P00][0], testing::Eq(DIR_27_E_X)); - EXPECT_THAT(dist.directions[DIR_P00][1], testing::Eq(DIR_27_E_Y)); - EXPECT_THAT(dist.directions[DIR_P00][2], testing::Eq(DIR_27_E_Z)); - EXPECT_THAT(dist.dirs[DIR_P00 * 3 ], testing::Eq(DIR_27_E_X)); - EXPECT_THAT(dist.dirs[DIR_P00 * 3 + 1], testing::Eq(DIR_27_E_Y)); - EXPECT_THAT(dist.dirs[DIR_P00 * 3 + 2], testing::Eq(DIR_27_E_Z)); - - EXPECT_THAT(dist.directions[DIR_00M][0], testing::Eq(DIR_27_B_X)); - EXPECT_THAT(dist.directions[DIR_00M][1], testing::Eq(DIR_27_B_Y)); - EXPECT_THAT(dist.directions[DIR_00M][2], testing::Eq(DIR_27_B_Z)); - EXPECT_THAT(dist.dirs[DIR_00M * 3 ], testing::Eq(DIR_27_B_X)); - EXPECT_THAT(dist.dirs[DIR_00M * 3 + 1], testing::Eq(DIR_27_B_Y)); - EXPECT_THAT(dist.dirs[DIR_00M * 3 + 2], testing::Eq(DIR_27_B_Z)); + EXPECT_THAT(dist.directions[dP00][0], testing::Eq(DIR_27_E_X)); + EXPECT_THAT(dist.directions[dP00][1], testing::Eq(DIR_27_E_Y)); + EXPECT_THAT(dist.directions[dP00][2], testing::Eq(DIR_27_E_Z)); + EXPECT_THAT(dist.dirs[dP00 * 3 ], testing::Eq(DIR_27_E_X)); + EXPECT_THAT(dist.dirs[dP00 * 3 + 1], testing::Eq(DIR_27_E_Y)); + EXPECT_THAT(dist.dirs[dP00 * 3 + 2], testing::Eq(DIR_27_E_Z)); + + EXPECT_THAT(dist.directions[d00M][0], testing::Eq(DIR_27_B_X)); + EXPECT_THAT(dist.directions[d00M][1], testing::Eq(DIR_27_B_Y)); + EXPECT_THAT(dist.directions[d00M][2], testing::Eq(DIR_27_B_Z)); + EXPECT_THAT(dist.dirs[d00M * 3 ], testing::Eq(DIR_27_B_X)); + EXPECT_THAT(dist.dirs[d00M * 3 + 1], testing::Eq(DIR_27_B_Y)); + EXPECT_THAT(dist.dirs[d00M * 3 + 2], testing::Eq(DIR_27_B_Z)); - EXPECT_THAT(dist.directions[DIR_000][0], testing::Eq(0)); - EXPECT_THAT(dist.directions[DIR_000][1], testing::Eq(0)); - EXPECT_THAT(dist.directions[DIR_000][2], testing::Eq(0)); - EXPECT_THAT(dist.dirs[DIR_000 * 3 ], testing::Eq(0)); - EXPECT_THAT(dist.dirs[DIR_000 * 3 + 1], testing::Eq(0)); - EXPECT_THAT(dist.dirs[DIR_000 * 3 + 2], testing::Eq(0)); - - EXPECT_THAT(dist.directions[DIR_PP0][0], testing::Eq(DIR_27_NE_X)); - EXPECT_THAT(dist.directions[DIR_PP0][1], testing::Eq(DIR_27_NE_Y)); - EXPECT_THAT(dist.directions[DIR_PP0][2], testing::Eq(DIR_27_NE_Z)); - EXPECT_THAT(dist.dirs[DIR_PP0 * 3 ], testing::Eq(DIR_27_NE_X)); - EXPECT_THAT(dist.dirs[DIR_PP0 * 3 + 1], testing::Eq(DIR_27_NE_Y)); - EXPECT_THAT(dist.dirs[DIR_PP0 * 3 + 2], testing::Eq(DIR_27_NE_Z)); - - EXPECT_THAT(dist.directions[DIR_0MP][0], testing::Eq(DIR_27_TS_X)); - EXPECT_THAT(dist.directions[DIR_0MP][1], testing::Eq(DIR_27_TS_Y)); - EXPECT_THAT(dist.directions[DIR_0MP][2], testing::Eq(DIR_27_TS_Z)); - EXPECT_THAT(dist.dirs[DIR_0MP * 3 ], testing::Eq(DIR_27_TS_X)); - EXPECT_THAT(dist.dirs[DIR_0MP * 3 + 1], testing::Eq(DIR_27_TS_Y)); - EXPECT_THAT(dist.dirs[DIR_0MP * 3 + 2], testing::Eq(DIR_27_TS_Z)); - - EXPECT_THAT(dist.directions[DIR_PPP][0], testing::Eq(DIR_27_TNE_X)); - EXPECT_THAT(dist.directions[DIR_PPP][1], testing::Eq(DIR_27_TNE_Y)); - EXPECT_THAT(dist.directions[DIR_PPP][2], testing::Eq(DIR_27_TNE_Z)); - EXPECT_THAT(dist.dirs[DIR_PPP * 3 ], testing::Eq(DIR_27_TNE_X)); - EXPECT_THAT(dist.dirs[DIR_PPP * 3 + 1], testing::Eq(DIR_27_TNE_Y)); - EXPECT_THAT(dist.dirs[DIR_PPP * 3 + 2], testing::Eq(DIR_27_TNE_Z)); - - EXPECT_THAT(dist.directions[DIR_MMM][0], testing::Eq(DIR_27_BSW_X)); - EXPECT_THAT(dist.directions[DIR_MMM][1], testing::Eq(DIR_27_BSW_Y)); - EXPECT_THAT(dist.directions[DIR_MMM][2], testing::Eq(DIR_27_BSW_Z)); - EXPECT_THAT(dist.dirs[DIR_MMM * 3 ], testing::Eq(DIR_27_BSW_X)); - EXPECT_THAT(dist.dirs[DIR_MMM * 3 + 1], testing::Eq(DIR_27_BSW_Y)); - EXPECT_THAT(dist.dirs[DIR_MMM * 3 + 2], testing::Eq(DIR_27_BSW_Z)); + EXPECT_THAT(dist.directions[d000][0], testing::Eq(0)); + EXPECT_THAT(dist.directions[d000][1], testing::Eq(0)); + EXPECT_THAT(dist.directions[d000][2], testing::Eq(0)); + EXPECT_THAT(dist.dirs[d000 * 3 ], testing::Eq(0)); + EXPECT_THAT(dist.dirs[d000 * 3 + 1], testing::Eq(0)); + EXPECT_THAT(dist.dirs[d000 * 3 + 2], testing::Eq(0)); + + EXPECT_THAT(dist.directions[dPP0][0], testing::Eq(DIR_27_NE_X)); + EXPECT_THAT(dist.directions[dPP0][1], testing::Eq(DIR_27_NE_Y)); + EXPECT_THAT(dist.directions[dPP0][2], testing::Eq(DIR_27_NE_Z)); + EXPECT_THAT(dist.dirs[dPP0 * 3 ], testing::Eq(DIR_27_NE_X)); + EXPECT_THAT(dist.dirs[dPP0 * 3 + 1], testing::Eq(DIR_27_NE_Y)); + EXPECT_THAT(dist.dirs[dPP0 * 3 + 2], testing::Eq(DIR_27_NE_Z)); + + EXPECT_THAT(dist.directions[d0MP][0], testing::Eq(DIR_27_TS_X)); + EXPECT_THAT(dist.directions[d0MP][1], testing::Eq(DIR_27_TS_Y)); + EXPECT_THAT(dist.directions[d0MP][2], testing::Eq(DIR_27_TS_Z)); + EXPECT_THAT(dist.dirs[d0MP * 3 ], testing::Eq(DIR_27_TS_X)); + EXPECT_THAT(dist.dirs[d0MP * 3 + 1], testing::Eq(DIR_27_TS_Y)); + EXPECT_THAT(dist.dirs[d0MP * 3 + 2], testing::Eq(DIR_27_TS_Z)); + + EXPECT_THAT(dist.directions[dPPP][0], testing::Eq(DIR_27_TNE_X)); + EXPECT_THAT(dist.directions[dPPP][1], testing::Eq(DIR_27_TNE_Y)); + EXPECT_THAT(dist.directions[dPPP][2], testing::Eq(DIR_27_TNE_Z)); + EXPECT_THAT(dist.dirs[dPPP * 3 ], testing::Eq(DIR_27_TNE_X)); + EXPECT_THAT(dist.dirs[dPPP * 3 + 1], testing::Eq(DIR_27_TNE_Y)); + EXPECT_THAT(dist.dirs[dPPP * 3 + 2], testing::Eq(DIR_27_TNE_Z)); + + EXPECT_THAT(dist.directions[dMMM][0], testing::Eq(DIR_27_BSW_X)); + EXPECT_THAT(dist.directions[dMMM][1], testing::Eq(DIR_27_BSW_Y)); + EXPECT_THAT(dist.directions[dMMM][2], testing::Eq(DIR_27_BSW_Z)); + EXPECT_THAT(dist.dirs[dMMM * 3 ], testing::Eq(DIR_27_BSW_X)); + EXPECT_THAT(dist.dirs[dMMM * 3 + 1], testing::Eq(DIR_27_BSW_Y)); + EXPECT_THAT(dist.dirs[dMMM * 3 + 2], testing::Eq(DIR_27_BSW_Z)); } \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Calculation/PorousMedia.cpp b/src/gpu/VirtualFluids_GPU/Calculation/PorousMedia.cpp deleted file mode 100644 index d70e8a8da75b2b7c30e700be3f3fec035ad1e4a6..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Calculation/PorousMedia.cpp +++ /dev/null @@ -1,133 +0,0 @@ -#include "Calculation/PorousMedia.h" - -////////////////////////////////////////////////////////////////////////// -//#include "GPU/GPU_Interface.h" -//#include <cuda_runtime.h> -//#include <helper_cuda.h> -//#include <stdio.h> -//#include <fstream> -//#include <sstream> -//using namespace std; -////////////////////////////////////////////////////////////////////////// - -PorousMedia::PorousMedia() -{ - porosity = 0.0; - geoID = 0; - setLBMvaluesToZero(); - setSIvaluesToZero(); - setCoordinatesToZero(); -} - -PorousMedia::PorousMedia(double porosity, unsigned int geoID, double darcySI, double forchheimerSI, double dxLBM, double dtLBM, unsigned int level) -{ - this->porosity = porosity; - this->geoID = geoID; - this->darcySI = darcySI; - this->forchheimerSI = forchheimerSI; - this->dxLBM = dxLBM; - this->dtLBM = dtLBM; - //this->lengthOfPorousMedia = 1.0; - //this->forchheimerLBM = this->forchheimerSI * this->dxLBM / this->lengthOfPorousMedia; - //this->darcyLBM = this->darcySI * this->dtLBM / this->lengthOfPorousMedia; - this->level = level; - setCoordinatesToZero(); - setResistanceLBM(); -} - -PorousMedia::~PorousMedia() -{ -} - - -//setter -void PorousMedia::setPorosity(double porosity) { this->porosity = porosity; } -void PorousMedia::setDarcySI(double darcySI) { this->darcySI = darcySI; } -void PorousMedia::setForchheimerSI(double forchheimerSI) { this->forchheimerSI = forchheimerSI; } - -void PorousMedia::setStartCoordinates(double startCoordX, double startCoordY, double startCoordZ) -{ - this->startCoordX = startCoordX; - this->startCoordY = startCoordY; - this->startCoordZ = startCoordZ; -} - -void PorousMedia::setEndCoordinates(double endCoordX, double endCoordY, double endCoordZ) -{ - this->endCoordX = endCoordX; - this->endCoordY = endCoordY; - this->endCoordZ = endCoordZ; -} - -void PorousMedia::setHostNodeIDsPM(unsigned int* hostNodeIDsPM) -{ - this->hostNodeIDsPM = hostNodeIDsPM; -} - -void PorousMedia::setDeviceNodeIDsPM(unsigned int* deviceNodeIDsPM) -{ - this->deviceNodeIDsPM = deviceNodeIDsPM; -} - -void PorousMedia::setSizePM(unsigned int sizePM) -{ - this->sizePM = sizePM; -} - -void PorousMedia::setResistanceLBM() -{ - if ((this->endCoordX - this->startCoordX) > 1.0) - { - this->lengthOfPorousMedia = (this->endCoordX - this->startCoordX); - } - else - { - this->lengthOfPorousMedia = 1.0; - } - this->forchheimerLBM = this->forchheimerSI * this->dxLBM / this->lengthOfPorousMedia; - this->darcyLBM = this->darcySI * this->dtLBM / this->lengthOfPorousMedia; -} - -//void PorousMedia::definePMarea(Parameter* para, unsigned int level) -//{ -// unsigned int counter = 0; -// for (unsigned int i = 0; i < para->getParH(level)->numberOfNodes; i++) -// { -// if (((para->getParH(level)->coordinateX[i] >= this->startCoordX) && (para->getParH(level)->coordinateX[i] <= this->endCoordX)) && -// ((para->getParH(level)->coordinateY[i] >= this->startCoordY) && (para->getParH(level)->coordinateY[i] <= this->endCoordY)) && -// ((para->getParH(level)->coordinateZ[i] >= this->startCoordZ) && (para->getParH(level)->coordinateZ[i] <= this->endCoordZ)) ) -// { -// if (para->getParH(level)->typeOfGridNode[i] >= GEO_FLUID) -// { -// para->getParH(level)->typeOfGridNode[i] = this->geoID; -// nodeIDsPorousMedia.push_back(i); -// counter++; -// } -// } -// } -// -// this->sizePM = counter; -// -// for (unsigned int j = 0; j <= this->sizePM; j++) -// { -// } -//} - -//getter -double PorousMedia::getPorosity(){ return this->porosity; } -double PorousMedia::getDarcySI() { return this->darcySI; } -double PorousMedia::getForchheimerSI(){ return this->forchheimerSI; } -double PorousMedia::getDarcyLBM() { return this->darcyLBM; } -double PorousMedia::getForchheimerLBM() { return this->forchheimerLBM; } -unsigned int PorousMedia::getGeoID() { return this->geoID; } -unsigned int PorousMedia::getSizePM() { return this->sizePM; } -unsigned int PorousMedia::getLevelPM() { return this->level; } -unsigned int* PorousMedia::getHostNodeIDsPM() { return this->hostNodeIDsPM; } -unsigned int* PorousMedia::getDeviceNodeIDsPM() { return this->deviceNodeIDsPM; } -double PorousMedia::getStartX(){ return this->startCoordX; } -double PorousMedia::getStartY(){ return this->startCoordY; } -double PorousMedia::getStartZ(){ return this->startCoordZ; } -double PorousMedia::getEndX(){ return this->endCoordX; } -double PorousMedia::getEndY(){ return this->endCoordY; } -double PorousMedia::getEndZ(){ return this->endCoordZ; } - diff --git a/src/gpu/VirtualFluids_GPU/Calculation/PorousMedia.h b/src/gpu/VirtualFluids_GPU/Calculation/PorousMedia.h deleted file mode 100644 index 990894faf7a7de3c5028bb4eedcb83769236d360..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Calculation/PorousMedia.h +++ /dev/null @@ -1,100 +0,0 @@ -#ifndef POROUS_MEDIA_H -#define POROUS_MEDIA_H - -//#include "Parameter/Parameter.h" -//#include "Utilities/StringUtil.hpp" -//#include "basics/utilities/UbSystem.h" - -#include <iostream> -#include <vector> -#include <stdio.h> -//using namespace std; - -class PorousMedia -{ -public: - PorousMedia(); - PorousMedia(double porosity, unsigned int geoID, double darcySI, double forchheimerSI, double dxLBM, double dtLBM, unsigned int level); - ~PorousMedia(); - - //setter - void setPorosity(double porosity); - void setDarcySI(double darcySI); - void setForchheimerSI(double forchheimerSI); - void setStartCoordinates(double startCoordX, double startCoordY, double startCoordZ); - void setEndCoordinates(double endCoordX, double endCoordY, double endCoordZ); - //void definePMarea(Parameter* para, unsigned int level); - void setHostNodeIDsPM(unsigned int* hostNodeIDsPM); - void setDeviceNodeIDsPM(unsigned int* deviceNodeIDsPM); - void setSizePM(unsigned int sizePM); - void setResistanceLBM(); - - //getter - double getPorosity(); - double getDarcySI(); - double getForchheimerSI(); - double getDarcyLBM(); - double getForchheimerLBM(); - unsigned int getGeoID(); - unsigned int getSizePM(); - unsigned int getLevelPM(); - unsigned int* getHostNodeIDsPM(); - unsigned int* getDeviceNodeIDsPM(); - double getStartX(); - double getStartY(); - double getStartZ(); - double getEndX(); - double getEndY(); - double getEndZ(); - -private: - double porosity; - double darcySI; //[1/s] - double darcyLBM; - double forchheimerSI; //[1/m] - double forchheimerLBM; - double dxLBM; - double dtLBM; - double startCoordX; - double startCoordY; - double startCoordZ; - double endCoordX; - double endCoordY; - double endCoordZ; - double lengthOfPorousMedia; - unsigned int geoID; - //std::vector< unsigned int > nodeIDsPorousMedia; - unsigned int sizePM; - unsigned int level; - unsigned int *hostNodeIDsPM; - unsigned int *deviceNodeIDsPM; - - void setCoordinatesToZero() - { - startCoordX = 0; - startCoordY = 0; - startCoordZ = 0; - endCoordX = 0; - endCoordY = 0; - endCoordZ = 0; - }; - - void setSIvaluesToZero() - { - darcySI = 0.0; - forchheimerSI = 0.0; - }; - - void setLBMvaluesToZero() - { - darcyLBM = 0.0; - forchheimerLBM = 0.0; - dxLBM = 0.0; - dtLBM = 0.0; - }; - - -}; - - -#endif /* POROUS_MEDIA_H */ diff --git a/src/gpu/VirtualFluids_GPU/GPU/AdvectionDiffusion27chim.cu b/src/gpu/VirtualFluids_GPU/GPU/AdvectionDiffusion27chim.cu deleted file mode 100644 index a22e7f6e842fcfb4474e009975eb65f1920513a9..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/GPU/AdvectionDiffusion27chim.cu +++ /dev/null @@ -1,536 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// 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/>. -// -//! \file AdvectionDiffusion27chim.cu -//! \ingroup GPU -//! \author Martin Schoenherr -//======================================================================================= -/* 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; - -//////////////////////////////////////////////////////////////////////////////// -//! \brief forward chimera transformation \ref forwardChimera -//! - Chimera transform from distributions to central moments as defined in Eq. (43)-(45) in \ref -//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> -inline __device__ void forwardChimera(real &mfa, real &mfb, real &mfc, real vv, real v2) { - real m1 = (mfa + mfc) + mfb; - real m2 = mfc - mfa; - mfc = (mfc + mfa) + (v2*m1 - c2o1*vv*m2); - mfb = m2 - vv*m1; - mfa = m1; -} - - -//////////////////////////////////////////////////////////////////////////////// -//! \brief backward chimera transformation \ref backwardChimera -//! - Chimera transform from central moments to distributions as defined in Eq. (88)-(96) in \ref -//! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> -inline __device__ void backwardChimera(real &mfa, real &mfb, real &mfc, real vv, real v2) { - real ma = (mfc + mfa*(v2 - vv))*c1o2 + mfb*(vv - c1o2); - real mb = ((mfa - mfc) - mfa*v2) - c2o1*mfb*vv; - mfc = (mfc + mfa*(v2 + vv))*c1o2 + mfb*(vv + c1o2); - mfb = mb; - mfa = ma; -} - - -//////////////////////////////////////////////////////////////////////////////// -__global__ void Factorized_Central_Moments_Advection_Diffusion_Device_Kernel( - real omegaDiffusivity, - uint* typeOfGridNode, - uint* neighborX, - uint* neighborY, - uint* neighborZ, - real* distributions, - real* distributionsAD, - unsigned long long numberOfLBnodes, - real* forces, - bool isEvenTimestep) -{ - ////////////////////////////////////////////////////////////////////////// - //! Cumulant K17 Kernel is based on \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! and \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.07.004"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.07.004 ]</b></a> - //! - //! The cumulant kernel is executed in the following steps - //! - //////////////////////////////////////////////////////////////////////////////// - //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. - //! - 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; - - ////////////////////////////////////////////////////////////////////////// - // run for all indices in size_Mat and fluid nodes - if ((k < numberOfLBnodes) && (typeOfGridNode[k] == GEO_FLUID)) - { - ////////////////////////////////////////////////////////////////////////// - //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref - //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> - //! - Distributions27 dist; - if (isEvenTimestep) - { - dist.f[DIR_P00] = &distributions[DIR_P00 * numberOfLBnodes]; - dist.f[DIR_M00] = &distributions[DIR_M00 * numberOfLBnodes]; - dist.f[DIR_0P0] = &distributions[DIR_0P0 * numberOfLBnodes]; - dist.f[DIR_0M0] = &distributions[DIR_0M0 * numberOfLBnodes]; - dist.f[DIR_00P] = &distributions[DIR_00P * numberOfLBnodes]; - dist.f[DIR_00M] = &distributions[DIR_00M * numberOfLBnodes]; - dist.f[DIR_PP0] = &distributions[DIR_PP0 * numberOfLBnodes]; - dist.f[DIR_MM0] = &distributions[DIR_MM0 * numberOfLBnodes]; - dist.f[DIR_PM0] = &distributions[DIR_PM0 * numberOfLBnodes]; - dist.f[DIR_MP0] = &distributions[DIR_MP0 * numberOfLBnodes]; - dist.f[DIR_P0P] = &distributions[DIR_P0P * numberOfLBnodes]; - dist.f[DIR_M0M] = &distributions[DIR_M0M * numberOfLBnodes]; - dist.f[DIR_P0M] = &distributions[DIR_P0M * numberOfLBnodes]; - dist.f[DIR_M0P] = &distributions[DIR_M0P * numberOfLBnodes]; - dist.f[DIR_0PP] = &distributions[DIR_0PP * numberOfLBnodes]; - dist.f[DIR_0MM] = &distributions[DIR_0MM * numberOfLBnodes]; - dist.f[DIR_0PM] = &distributions[DIR_0PM * numberOfLBnodes]; - dist.f[DIR_0MP] = &distributions[DIR_0MP * numberOfLBnodes]; - dist.f[DIR_000] = &distributions[DIR_000 * numberOfLBnodes]; - dist.f[DIR_PPP] = &distributions[DIR_PPP * numberOfLBnodes]; - dist.f[DIR_MMP] = &distributions[DIR_MMP * numberOfLBnodes]; - dist.f[DIR_PMP] = &distributions[DIR_PMP * numberOfLBnodes]; - dist.f[DIR_MPP] = &distributions[DIR_MPP * numberOfLBnodes]; - dist.f[DIR_PPM] = &distributions[DIR_PPM * numberOfLBnodes]; - dist.f[DIR_MMM] = &distributions[DIR_MMM * numberOfLBnodes]; - dist.f[DIR_PMM] = &distributions[DIR_PMM * numberOfLBnodes]; - dist.f[DIR_MPM] = &distributions[DIR_MPM * numberOfLBnodes]; - } - else - { - dist.f[DIR_M00] = &distributions[DIR_P00 * numberOfLBnodes]; - dist.f[DIR_P00] = &distributions[DIR_M00 * numberOfLBnodes]; - dist.f[DIR_0M0] = &distributions[DIR_0P0 * numberOfLBnodes]; - dist.f[DIR_0P0] = &distributions[DIR_0M0 * numberOfLBnodes]; - dist.f[DIR_00M] = &distributions[DIR_00P * numberOfLBnodes]; - dist.f[DIR_00P] = &distributions[DIR_00M * numberOfLBnodes]; - dist.f[DIR_MM0] = &distributions[DIR_PP0 * numberOfLBnodes]; - dist.f[DIR_PP0] = &distributions[DIR_MM0 * numberOfLBnodes]; - dist.f[DIR_MP0] = &distributions[DIR_PM0 * numberOfLBnodes]; - dist.f[DIR_PM0] = &distributions[DIR_MP0 * numberOfLBnodes]; - dist.f[DIR_M0M] = &distributions[DIR_P0P * numberOfLBnodes]; - dist.f[DIR_P0P] = &distributions[DIR_M0M * numberOfLBnodes]; - dist.f[DIR_M0P] = &distributions[DIR_P0M * numberOfLBnodes]; - dist.f[DIR_P0M] = &distributions[DIR_M0P * numberOfLBnodes]; - dist.f[DIR_0MM] = &distributions[DIR_0PP * numberOfLBnodes]; - dist.f[DIR_0PP] = &distributions[DIR_0MM * numberOfLBnodes]; - dist.f[DIR_0MP] = &distributions[DIR_0PM * numberOfLBnodes]; - dist.f[DIR_0PM] = &distributions[DIR_0MP * numberOfLBnodes]; - dist.f[DIR_000] = &distributions[DIR_000 * numberOfLBnodes]; - dist.f[DIR_MMM] = &distributions[DIR_PPP * numberOfLBnodes]; - dist.f[DIR_PPM] = &distributions[DIR_MMP * numberOfLBnodes]; - dist.f[DIR_MPM] = &distributions[DIR_PMP * numberOfLBnodes]; - dist.f[DIR_PMM] = &distributions[DIR_MPP * numberOfLBnodes]; - dist.f[DIR_MMP] = &distributions[DIR_PPM * numberOfLBnodes]; - dist.f[DIR_PPP] = &distributions[DIR_MMM * numberOfLBnodes]; - dist.f[DIR_MPP] = &distributions[DIR_PMM * numberOfLBnodes]; - dist.f[DIR_PMP] = &distributions[DIR_MPM * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////// - Distributions27 distAD; - if (isEvenTimestep) - { - distAD.f[DIR_P00] = &distributionsAD[DIR_P00 * numberOfLBnodes]; - distAD.f[DIR_M00] = &distributionsAD[DIR_M00 * numberOfLBnodes]; - distAD.f[DIR_0P0] = &distributionsAD[DIR_0P0 * numberOfLBnodes]; - distAD.f[DIR_0M0] = &distributionsAD[DIR_0M0 * numberOfLBnodes]; - distAD.f[DIR_00P] = &distributionsAD[DIR_00P * numberOfLBnodes]; - distAD.f[DIR_00M] = &distributionsAD[DIR_00M * numberOfLBnodes]; - distAD.f[DIR_PP0] = &distributionsAD[DIR_PP0 * numberOfLBnodes]; - distAD.f[DIR_MM0] = &distributionsAD[DIR_MM0 * numberOfLBnodes]; - distAD.f[DIR_PM0] = &distributionsAD[DIR_PM0 * numberOfLBnodes]; - distAD.f[DIR_MP0] = &distributionsAD[DIR_MP0 * numberOfLBnodes]; - distAD.f[DIR_P0P] = &distributionsAD[DIR_P0P * numberOfLBnodes]; - distAD.f[DIR_M0M] = &distributionsAD[DIR_M0M * numberOfLBnodes]; - distAD.f[DIR_P0M] = &distributionsAD[DIR_P0M * numberOfLBnodes]; - distAD.f[DIR_M0P] = &distributionsAD[DIR_M0P * numberOfLBnodes]; - distAD.f[DIR_0PP] = &distributionsAD[DIR_0PP * numberOfLBnodes]; - distAD.f[DIR_0MM] = &distributionsAD[DIR_0MM * numberOfLBnodes]; - distAD.f[DIR_0PM] = &distributionsAD[DIR_0PM * numberOfLBnodes]; - distAD.f[DIR_0MP] = &distributionsAD[DIR_0MP * numberOfLBnodes]; - distAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes]; - distAD.f[DIR_PPP] = &distributionsAD[DIR_PPP * numberOfLBnodes]; - distAD.f[DIR_MMP] = &distributionsAD[DIR_MMP * numberOfLBnodes]; - distAD.f[DIR_PMP] = &distributionsAD[DIR_PMP * numberOfLBnodes]; - distAD.f[DIR_MPP] = &distributionsAD[DIR_MPP * numberOfLBnodes]; - distAD.f[DIR_PPM] = &distributionsAD[DIR_PPM * numberOfLBnodes]; - distAD.f[DIR_MMM] = &distributionsAD[DIR_MMM * numberOfLBnodes]; - distAD.f[DIR_PMM] = &distributionsAD[DIR_PMM * numberOfLBnodes]; - distAD.f[DIR_MPM] = &distributionsAD[DIR_MPM * numberOfLBnodes]; - } - else - { - distAD.f[DIR_M00] = &distributionsAD[DIR_P00 * numberOfLBnodes]; - distAD.f[DIR_P00] = &distributionsAD[DIR_M00 * numberOfLBnodes]; - distAD.f[DIR_0M0] = &distributionsAD[DIR_0P0 * numberOfLBnodes]; - distAD.f[DIR_0P0] = &distributionsAD[DIR_0M0 * numberOfLBnodes]; - distAD.f[DIR_00M] = &distributionsAD[DIR_00P * numberOfLBnodes]; - distAD.f[DIR_00P] = &distributionsAD[DIR_00M * numberOfLBnodes]; - distAD.f[DIR_MM0] = &distributionsAD[DIR_PP0 * numberOfLBnodes]; - distAD.f[DIR_PP0] = &distributionsAD[DIR_MM0 * numberOfLBnodes]; - distAD.f[DIR_MP0] = &distributionsAD[DIR_PM0 * numberOfLBnodes]; - distAD.f[DIR_PM0] = &distributionsAD[DIR_MP0 * numberOfLBnodes]; - distAD.f[DIR_M0M] = &distributionsAD[DIR_P0P * numberOfLBnodes]; - distAD.f[DIR_P0P] = &distributionsAD[DIR_M0M * numberOfLBnodes]; - distAD.f[DIR_M0P] = &distributionsAD[DIR_P0M * numberOfLBnodes]; - distAD.f[DIR_P0M] = &distributionsAD[DIR_M0P * numberOfLBnodes]; - distAD.f[DIR_0MM] = &distributionsAD[DIR_0PP * numberOfLBnodes]; - distAD.f[DIR_0PP] = &distributionsAD[DIR_0MM * numberOfLBnodes]; - distAD.f[DIR_0MP] = &distributionsAD[DIR_0PM * numberOfLBnodes]; - distAD.f[DIR_0PM] = &distributionsAD[DIR_0MP * numberOfLBnodes]; - distAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes]; - distAD.f[DIR_MMM] = &distributionsAD[DIR_PPP * numberOfLBnodes]; - distAD.f[DIR_PPM] = &distributionsAD[DIR_MMP * numberOfLBnodes]; - distAD.f[DIR_MPM] = &distributionsAD[DIR_PMP * numberOfLBnodes]; - distAD.f[DIR_PMM] = &distributionsAD[DIR_MPP * numberOfLBnodes]; - distAD.f[DIR_MMP] = &distributionsAD[DIR_PPM * numberOfLBnodes]; - distAD.f[DIR_PPP] = &distributionsAD[DIR_MMM * numberOfLBnodes]; - distAD.f[DIR_MPP] = &distributionsAD[DIR_PMM * numberOfLBnodes]; - distAD.f[DIR_PMP] = &distributionsAD[DIR_MPM * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////// - //! - Set neighbor indices (necessary for indirect addressing) - uint kw = neighborX[k]; - uint ks = neighborY[k]; - uint kb = neighborZ[k]; - uint ksw = neighborY[kw]; - uint kbw = neighborZ[kw]; - uint kbs = neighborZ[ks]; - uint kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////////// - //! - Set local distributions Fluid - //! - real fcbb = (dist.f[DIR_P00])[k]; - real fabb = (dist.f[DIR_M00])[kw]; - real fbcb = (dist.f[DIR_0P0])[k]; - real fbab = (dist.f[DIR_0M0])[ks]; - real fbbc = (dist.f[DIR_00P])[k]; - real fbba = (dist.f[DIR_00M])[kb]; - real fccb = (dist.f[DIR_PP0])[k]; - real faab = (dist.f[DIR_MM0])[ksw]; - real fcab = (dist.f[DIR_PM0])[ks]; - real facb = (dist.f[DIR_MP0])[kw]; - real fcbc = (dist.f[DIR_P0P])[k]; - real faba = (dist.f[DIR_M0M])[kbw]; - real fcba = (dist.f[DIR_P0M])[kb]; - real fabc = (dist.f[DIR_M0P])[kw]; - real fbcc = (dist.f[DIR_0PP])[k]; - real fbaa = (dist.f[DIR_0MM])[kbs]; - real fbca = (dist.f[DIR_0PM])[kb]; - real fbac = (dist.f[DIR_0MP])[ks]; - real fbbb = (dist.f[DIR_000])[k]; - real fccc = (dist.f[DIR_PPP])[k]; - real faac = (dist.f[DIR_MMP])[ksw]; - real fcac = (dist.f[DIR_PMP])[ks]; - real facc = (dist.f[DIR_MPP])[kw]; - real fcca = (dist.f[DIR_PPM])[kb]; - real faaa = (dist.f[DIR_MMM])[kbsw]; - real fcaa = (dist.f[DIR_PMM])[kbs]; - real faca = (dist.f[DIR_MPM])[kbw]; - //////////////////////////////////////////////////////////////////////////////////// - //! - Set local distributions Advection Diffusion - //! - real mfcbb = (distAD.f[DIR_P00])[k]; - real mfabb = (distAD.f[DIR_M00])[kw]; - real mfbcb = (distAD.f[DIR_0P0])[k]; - real mfbab = (distAD.f[DIR_0M0])[ks]; - real mfbbc = (distAD.f[DIR_00P])[k]; - real mfbba = (distAD.f[DIR_00M])[kb]; - real mfccb = (distAD.f[DIR_PP0])[k]; - real mfaab = (distAD.f[DIR_MM0])[ksw]; - real mfcab = (distAD.f[DIR_PM0])[ks]; - real mfacb = (distAD.f[DIR_MP0])[kw]; - real mfcbc = (distAD.f[DIR_P0P])[k]; - real mfaba = (distAD.f[DIR_M0M])[kbw]; - real mfcba = (distAD.f[DIR_P0M])[kb]; - real mfabc = (distAD.f[DIR_M0P])[kw]; - real mfbcc = (distAD.f[DIR_0PP])[k]; - real mfbaa = (distAD.f[DIR_0MM])[kbs]; - real mfbca = (distAD.f[DIR_0PM])[kb]; - real mfbac = (distAD.f[DIR_0MP])[ks]; - real mfbbb = (distAD.f[DIR_000])[k]; - real mfccc = (distAD.f[DIR_PPP])[k]; - real mfaac = (distAD.f[DIR_MMP])[ksw]; - real mfcac = (distAD.f[DIR_PMP])[ks]; - real mfacc = (distAD.f[DIR_MPP])[kw]; - real mfcca = (distAD.f[DIR_PPM])[kb]; - real mfaaa = (distAD.f[DIR_MMM])[kbsw]; - real mfcaa = (distAD.f[DIR_PMM])[kbs]; - real mfaca = (distAD.f[DIR_MPM])[kbw]; - //////////////////////////////////////////////////////////////////////////////////// - //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // fluid component - real drhoFluid = - ((((fccc + faaa) + (faca + fcac)) + ((facc + fcaa) + (faac + fcca))) + - (((fbac + fbca) + (fbaa + fbcc)) + ((fabc + fcba) + (faba + fcbc)) + ((facb + fcab) + (faab + fccb))) + - ((fabb + fcbb) + (fbab + fbcb) + (fbba + fbbc))) + fbbb; - - real rhoFluid = c1o1 + drhoFluid; - real OOrhoFluid = c1o1 / rhoFluid; - - real vvx = - ((((fccc - faaa) + (fcac - faca)) + ((fcaa - facc) + (fcca - faac))) + - (((fcba - fabc) + (fcbc - faba)) + ((fcab - facb) + (fccb - faab))) + - (fcbb - fabb)) * OOrhoFluid; - real vvy = - ((((fccc - faaa) + (faca - fcac)) + ((facc - fcaa) + (fcca - faac))) + - (((fbca - fbac) + (fbcc - fbaa)) + ((facb - fcab) + (fccb - faab))) + - (fbcb - fbab)) * OOrhoFluid; - real vvz = - ((((fccc - faaa) + (fcac - faca)) + ((facc - fcaa) + (faac - fcca))) + - (((fbac - fbca) + (fbcc - fbaa)) + ((fabc - fcba) + (fcbc - faba))) + - (fbbc - fbba)) * OOrhoFluid; - //////////////////////////////////////////////////////////////////////////////////// - // second component - real rho = - ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - real fx = forces[0]; - real fy = forces[1]; - real fz = -rho*forces[2]; - vvx += fx*c1o2; - vvy += fy*c1o2; - vvz += fz*c1o2; - //////////////////////////////////////////////////////////////////////////////////// - // calculate the square of velocities for this lattice node - real vx2 = vvx*vvx; - real vy2 = vvy*vvy; - real vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - //real omegaDiffusivity = c2o1 / (c6o1 * diffusivity + c1o1); - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from distributions to central moments as defined in Eq. (43)-(45) in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardChimera(mfaaa, mfaab, mfaac, vvz, vz2); - forwardChimera(mfaba, mfabb, mfabc, vvz, vz2); - forwardChimera(mfaca, mfacb, mfacc, vvz, vz2); - forwardChimera(mfbaa, mfbab, mfbac, vvz, vz2); - forwardChimera(mfbba, mfbbb, mfbbc, vvz, vz2); - forwardChimera(mfbca, mfbcb, mfbcc, vvz, vz2); - forwardChimera(mfcaa, mfcab, mfcac, vvz, vz2); - forwardChimera(mfcba, mfcbb, mfcbc, vvz, vz2); - forwardChimera(mfcca, mfccb, mfccc, vvz, vz2); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardChimera(mfaaa, mfaba, mfaca, vvy, vy2); - forwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - forwardChimera(mfaac, mfabc, mfacc, vvy, vy2); - forwardChimera(mfbaa, mfbba, mfbca, vvy, vy2); - forwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - forwardChimera(mfbac, mfbbc, mfbcc, vvy, vy2); - forwardChimera(mfcaa, mfcba, mfcca, vvy, vy2); - forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - forwardChimera(mfcac, mfcbc, mfccc, vvy, vy2); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardChimera(mfaaa, mfbaa, mfcaa, vvx, vx2); - forwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - forwardChimera(mfaca, mfbca, mfcca, vvx, vx2); - forwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - forwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - forwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - forwardChimera(mfaac, mfbac, mfcac, vvx, vx2); - forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - forwardChimera(mfacc, mfbcc, mfccc, vvx, vx2); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Factorized central moments for Advection Diffusion Equation - Eq. (15)-(16) in \ref - //! <a href="https://doi.org/10.1016/j.advwatres.2015.09.015"><b>[ X. Yang et al. (2016), DOI: 10.1016/j.advwatres.2015.09.015]</b></a> - //! - - // linearized orthogonalization of 3rd order central moments - real Mabc = mfabc - mfaba*c1o3; - real Mbca = mfbca - mfbaa*c1o3; - real Macb = mfacb - mfaab*c1o3; - real Mcba = mfcba - mfaba*c1o3; - real Mcab = mfcab - mfaab*c1o3; - real Mbac = mfbac - mfbaa*c1o3; - // linearized orthogonalization of 5th order central moments - real Mcbc = mfcbc - mfaba*c1o9; - real Mbcc = mfbcc - mfbaa*c1o9; - real Mccb = mfccb - mfaab*c1o9; - - // collision of 1st order moments - mfbaa *= c1o1 - omegaDiffusivity; - mfaba *= c1o1 - omegaDiffusivity; - mfaab *= c1o1 - omegaDiffusivity; - - // equilibration of 3rd order moments - Mabc = c0o1; - Mbca = c0o1; - Macb = c0o1; - Mcba = c0o1; - Mcab = c0o1; - Mbac = c0o1; - mfbbb = c0o1; - - // equilibration of 5th order moments - Mcbc = c0o1; - Mbcc = c0o1; - Mccb = c0o1; - - // equilibration of 2nd order moments - mfbba = c0o1; - mfbab = c0o1; - mfabb = c0o1; - - mfcaa = c1o3 * rho; - mfaca = c1o3 * rho; - mfaac = c1o3 * rho; - - // equilibration of 4th order moments - mfacc = c1o9 * rho; - mfcac = c1o9 * rho; - mfcca = c1o9 * rho; - - mfcbb = c0o1; - mfbcb = c0o1; - mfbbc = c0o1; - - // equilibration of 6th order moment - mfccc = c1o27 * rho; - - // from linearized orthogonalization 3rd order central moments to central moments - mfabc = Mabc + mfaba*c1o3; - mfbca = Mbca + mfbaa*c1o3; - mfacb = Macb + mfaab*c1o3; - mfcba = Mcba + mfaba*c1o3; - mfcab = Mcab + mfaab*c1o3; - mfbac = Mbac + mfbaa*c1o3; - - // from linearized orthogonalization 5th order central moments to central moments - mfcbc = Mcbc + mfaba*c1o9; - mfbcc = Mbcc + mfbaa*c1o9; - mfccb = Mccb + mfaab*c1o9; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from central moments to distributions as defined in Eq. (88)-(96) in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - backwardChimera(mfaaa, mfbaa, mfcaa, vvx, vx2); - backwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - backwardChimera(mfaca, mfbca, mfcca, vvx, vx2); - backwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - backwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - backwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - backwardChimera(mfaac, mfbac, mfcac, vvx, vx2); - backwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - backwardChimera(mfacc, mfbcc, mfccc, vvx, vx2); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardChimera(mfaaa, mfaba, mfaca, vvy, vy2); - backwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - backwardChimera(mfaac, mfabc, mfacc, vvy, vy2); - backwardChimera(mfbaa, mfbba, mfbca, vvy, vy2); - backwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - backwardChimera(mfbac, mfbbc, mfbcc, vvy, vy2); - backwardChimera(mfcaa, mfcba, mfcca, vvy, vy2); - backwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - backwardChimera(mfcac, mfcbc, mfccc, vvy, vy2); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardChimera(mfaaa, mfaab, mfaac, vvz, vz2); - backwardChimera(mfaba, mfabb, mfabc, vvz, vz2); - backwardChimera(mfaca, mfacb, mfacc, vvz, vz2); - backwardChimera(mfbaa, mfbab, mfbac, vvz, vz2); - backwardChimera(mfbba, mfbbb, mfbbc, vvz, vz2); - backwardChimera(mfbca, mfbcb, mfbcc, vvz, vz2); - backwardChimera(mfcaa, mfcab, mfcac, vvz, vz2); - backwardChimera(mfcba, mfcbb, mfcbc, vvz, vz2); - backwardChimera(mfcca, mfccb, mfccc, vvz, vz2); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Write distributions: style of reading and writing the distributions from/to - //! stored arrays dependent on timestep is based on the esoteric twist algorithm - //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> - //! - (distAD.f[DIR_P00])[k ] = mfabb; - (distAD.f[DIR_M00])[kw ] = mfcbb; - (distAD.f[DIR_0P0])[k ] = mfbab; - (distAD.f[DIR_0M0])[ks ] = mfbcb; - (distAD.f[DIR_00P])[k ] = mfbba; - (distAD.f[DIR_00M])[kb ] = mfbbc; - (distAD.f[DIR_PP0])[k ] = mfaab; - (distAD.f[DIR_MM0])[ksw ] = mfccb; - (distAD.f[DIR_PM0])[ks ] = mfacb; - (distAD.f[DIR_MP0])[kw ] = mfcab; - (distAD.f[DIR_P0P])[k ] = mfaba; - (distAD.f[DIR_M0M])[kbw ] = mfcbc; - (distAD.f[DIR_P0M])[kb ] = mfabc; - (distAD.f[DIR_M0P])[kw ] = mfcba; - (distAD.f[DIR_0PP])[k ] = mfbaa; - (distAD.f[DIR_0MM])[kbs ] = mfbcc; - (distAD.f[DIR_0PM])[kb ] = mfbac; - (distAD.f[DIR_0MP])[ks ] = mfbca; - (distAD.f[DIR_000])[k ] = mfbbb; - (distAD.f[DIR_PPP])[k ] = mfaaa; - (distAD.f[DIR_PMP])[ks ] = mfaca; - (distAD.f[DIR_PPM])[kb ] = mfaac; - (distAD.f[DIR_PMM])[kbs ] = mfacc; - (distAD.f[DIR_MPP])[kw ] = mfcaa; - (distAD.f[DIR_MMP])[ksw ] = mfcca; - (distAD.f[DIR_MPM])[kbw ] = mfcac; - (distAD.f[DIR_MMM])[kbsw] = mfccc; - } -} -//////////////////////////////////////////////////////////////////////////////// - diff --git a/src/gpu/VirtualFluids_GPU/GPU/AdvectionDiffusionBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/AdvectionDiffusionBCs27.cu deleted file mode 100644 index 278d01e149aeb6de5241f5c84463e4e80d360512..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - //q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - //q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - //q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - //q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - //q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - //q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - //q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - //q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - //q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - //q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - //q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - //q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - //q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - //q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - //q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - //q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - //q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - //q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - //q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - //q_dirBNW = &QQ[DIR_MPM * 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[DIR_P00])[ke ]; - f_E = (D.f[DIR_M00])[kw ]; - f_S = (D.f[DIR_0P0])[kn ]; - f_N = (D.f[DIR_0M0])[ks ]; - f_B = (D.f[DIR_00P])[kt ]; - f_T = (D.f[DIR_00M])[kb ]; - f_SW = (D.f[DIR_PP0])[kne ]; - f_NE = (D.f[DIR_MM0])[ksw ]; - f_NW = (D.f[DIR_PM0])[kse ]; - f_SE = (D.f[DIR_MP0])[knw ]; - f_BW = (D.f[DIR_P0P])[kte ]; - f_TE = (D.f[DIR_M0M])[kbw ]; - f_TW = (D.f[DIR_P0M])[kbe ]; - f_BE = (D.f[DIR_M0P])[ktw ]; - f_BS = (D.f[DIR_0PP])[ktn ]; - f_TN = (D.f[DIR_0MM])[kbs ]; - f_TS = (D.f[DIR_0PM])[kbn ]; - f_BN = (D.f[DIR_0MP])[kts ]; - f_BSW = (D.f[DIR_PPP])[ktne ]; - f_BNE = (D.f[DIR_MMP])[ktsw ]; - f_BNW = (D.f[DIR_PMP])[ktse ]; - f_BSE = (D.f[DIR_MPP])[ktnw ]; - f_TSW = (D.f[DIR_PPM])[kbne ]; - f_TNE = (D.f[DIR_MMM])[kbsw ]; - f_TNW = (D.f[DIR_PMM])[kbse ]; - f_TSE = (D.f[DIR_MPM])[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[DIR_000])[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[DIR_000])[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[DIR_000])[k]=0.1f; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //(D7.f[1])[ke ] = f7_E - feq7_E + feqW7_W; //DIR_P00 - //(D7.f[2])[kw ] = f7_W - feq7_W + feqW7_E; //DIR_M00 - //(D7.f[3])[kn ] = f7_N - feq7_N + feqW7_S; //DIR_0P0 - //(D7.f[4])[ks ] = f7_S - feq7_S + feqW7_N; //DIR_0M0 - //(D7.f[5])[kt ] = f7_T - feq7_T + feqW7_B; //DIR_00P - //(D7.f[6])[kb ] = f7_B - feq7_B + feqW7_T; //DIR_00M - - ////////////////////////////////////////////////////////////////////////// - //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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - - Distributions27 D27; - if (isEvenTimestep==true) - { - D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes]; - } - else - { - D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_PMP * 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * 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[DIR_P00])[ke ]; - real f_E = (D.f[DIR_M00])[kw ]; - real f_S = (D.f[DIR_0P0])[kn ]; - real f_N = (D.f[DIR_0M0])[ks ]; - real f_B = (D.f[DIR_00P])[kt ]; - real f_T = (D.f[DIR_00M])[kb ]; - real f_SW = (D.f[DIR_PP0])[kne ]; - real f_NE = (D.f[DIR_MM0])[ksw ]; - real f_NW = (D.f[DIR_PM0])[kse ]; - real f_SE = (D.f[DIR_MP0])[knw ]; - real f_BW = (D.f[DIR_P0P])[kte ]; - real f_TE = (D.f[DIR_M0M])[kbw ]; - real f_TW = (D.f[DIR_P0M])[kbe ]; - real f_BE = (D.f[DIR_M0P])[ktw ]; - real f_BS = (D.f[DIR_0PP])[ktn ]; - real f_TN = (D.f[DIR_0MM])[kbs ]; - real f_TS = (D.f[DIR_0PM])[kbn ]; - real f_BN = (D.f[DIR_0MP])[kts ]; - real f_ZERO = (D.f[DIR_000])[kzero]; - real f_BSW = (D.f[DIR_PPP])[ktne ]; - real f_BNE = (D.f[DIR_MMP])[ktsw ]; - real f_BNW = (D.f[DIR_PMP])[ktse ]; - real f_BSE = (D.f[DIR_MPP])[ktnw ]; - real f_TSW = (D.f[DIR_PPM])[kbne ]; - real f_TNE = (D.f[DIR_MMM])[kbsw ]; - real f_TNW = (D.f[DIR_PMM])[kbse ]; - real f_TSE = (D.f[DIR_MPM])[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[DIR_P00])[ke ]; - real f27_E = (D27.f[DIR_M00])[kw ]; - real f27_S = (D27.f[DIR_0P0])[kn ]; - real f27_N = (D27.f[DIR_0M0])[ks ]; - real f27_B = (D27.f[DIR_00P])[kt ]; - real f27_T = (D27.f[DIR_00M])[kb ]; - real f27_SW = (D27.f[DIR_PP0])[kne ]; - real f27_NE = (D27.f[DIR_MM0])[ksw ]; - real f27_NW = (D27.f[DIR_PM0])[kse ]; - real f27_SE = (D27.f[DIR_MP0])[knw ]; - real f27_BW = (D27.f[DIR_P0P])[kte ]; - real f27_TE = (D27.f[DIR_M0M])[kbw ]; - real f27_TW = (D27.f[DIR_P0M])[kbe ]; - real f27_BE = (D27.f[DIR_M0P])[ktw ]; - real f27_BS = (D27.f[DIR_0PP])[ktn ]; - real f27_TN = (D27.f[DIR_0MM])[kbs ]; - real f27_TS = (D27.f[DIR_0PM])[kbn ]; - real f27_BN = (D27.f[DIR_0MP])[kts ]; - real f27_ZERO = (D27.f[DIR_000])[kzero]; - real f27_BSW = (D27.f[DIR_PPP])[ktne ]; - real f27_BNE = (D27.f[DIR_MMP])[ktsw ]; - real f27_BNW = (D27.f[DIR_PMP])[ktse ]; - real f27_BSE = (D27.f[DIR_MPP])[ktnw ]; - real f27_TSW = (D27.f[DIR_PPM])[kbne ]; - real f27_TNE = (D27.f[DIR_MMM])[kbsw ]; - real f27_TNW = (D27.f[DIR_PMM])[kbse ]; - real f27_TSE = (D27.f[DIR_MPM])[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[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes]; - } - else - { - D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[DIR_000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - q = q_dirE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - - Distributions27 D27; - if (isEvenTimestep == true) - { - D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes]; - } - else - { - D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_PMP * 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[DIR_P00])[ke]; - real f_E = (D.f[DIR_M00])[kw]; - real f_S = (D.f[DIR_0P0])[kn]; - real f_N = (D.f[DIR_0M0])[ks]; - real f_B = (D.f[DIR_00P])[kt]; - real f_T = (D.f[DIR_00M])[kb]; - real f_SW = (D.f[DIR_PP0])[kne]; - real f_NE = (D.f[DIR_MM0])[ksw]; - real f_NW = (D.f[DIR_PM0])[kse]; - real f_SE = (D.f[DIR_MP0])[knw]; - real f_BW = (D.f[DIR_P0P])[kte]; - real f_TE = (D.f[DIR_M0M])[kbw]; - real f_TW = (D.f[DIR_P0M])[kbe]; - real f_BE = (D.f[DIR_M0P])[ktw]; - real f_BS = (D.f[DIR_0PP])[ktn]; - real f_TN = (D.f[DIR_0MM])[kbs]; - real f_TS = (D.f[DIR_0PM])[kbn]; - real f_BN = (D.f[DIR_0MP])[kts]; - real f_ZERO = (D.f[DIR_000])[kzero]; - real f_BSW = (D.f[DIR_PPP])[ktne]; - real f_BNE = (D.f[DIR_MMP])[ktsw]; - real f_BNW = (D.f[DIR_PMP])[ktse]; - real f_BSE = (D.f[DIR_MPP])[ktnw]; - real f_TSW = (D.f[DIR_PPM])[kbne]; - real f_TNE = (D.f[DIR_MMM])[kbsw]; - real f_TNW = (D.f[DIR_PMM])[kbse]; - real f_TSE = (D.f[DIR_MPM])[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[DIR_P00])[ke]; - real f27_E = (D27.f[DIR_M00])[kw]; - real f27_S = (D27.f[DIR_0P0])[kn]; - real f27_N = (D27.f[DIR_0M0])[ks]; - real f27_B = (D27.f[DIR_00P])[kt]; - real f27_T = (D27.f[DIR_00M])[kb]; - real f27_SW = (D27.f[DIR_PP0])[kne]; - real f27_NE = (D27.f[DIR_MM0])[ksw]; - real f27_NW = (D27.f[DIR_PM0])[kse]; - real f27_SE = (D27.f[DIR_MP0])[knw]; - real f27_BW = (D27.f[DIR_P0P])[kte]; - real f27_TE = (D27.f[DIR_M0M])[kbw]; - real f27_TW = (D27.f[DIR_P0M])[kbe]; - real f27_BE = (D27.f[DIR_M0P])[ktw]; - real f27_BS = (D27.f[DIR_0PP])[ktn]; - real f27_TN = (D27.f[DIR_0MM])[kbs]; - real f27_TS = (D27.f[DIR_0PM])[kbn]; - real f27_BN = (D27.f[DIR_0MP])[kts]; - real f27_ZERO = (D27.f[DIR_000])[kzero]; - real f27_BSW = (D27.f[DIR_PPP])[ktne]; - real f27_BNE = (D27.f[DIR_MMP])[ktsw]; - real f27_BNW = (D27.f[DIR_PMP])[ktse]; - real f27_BSE = (D27.f[DIR_MPP])[ktnw]; - real f27_TSW = (D27.f[DIR_PPM])[kbne]; - real f27_TNE = (D27.f[DIR_MMM])[kbsw]; - real f27_TNW = (D27.f[DIR_PMM])[kbse]; - real f27_TSE = (D27.f[DIR_MPM])[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[DIR_P00])[kNe ] = f27_W ; - (D27.f[DIR_M00])[kNw ] = f27_E ; - (D27.f[DIR_0P0])[kNn ] = f27_S ; - (D27.f[DIR_0M0])[kNs ] = f27_N ; - (D27.f[DIR_00P])[kNt ] = f27_B ; - (D27.f[DIR_00M])[kNb ] = f27_T ; - (D27.f[DIR_PP0])[kNne ] = f27_SW ; - (D27.f[DIR_MM0])[kNsw ] = f27_NE ; - (D27.f[DIR_PM0])[kNse ] = f27_NW ; - (D27.f[DIR_MP0])[kNnw ] = f27_SE ; - (D27.f[DIR_P0P])[kNte ] = f27_BW ; - (D27.f[DIR_M0M])[kNbw ] = f27_TE ; - (D27.f[DIR_P0M])[kNbe ] = f27_TW ; - (D27.f[DIR_M0P])[kNtw ] = f27_BE ; - (D27.f[DIR_0PP])[kNtn ] = f27_BS ; - (D27.f[DIR_0MM])[kNbs ] = f27_TN ; - (D27.f[DIR_0PM])[kNbn ] = f27_TS ; - (D27.f[DIR_0MP])[kNts ] = f27_BN ; - (D27.f[DIR_000])[kNzero] = f27_ZERO; - (D27.f[DIR_PPP])[kNtne ] = f27_BSW ; - (D27.f[DIR_MMP])[kNtsw ] = f27_BNE ; - (D27.f[DIR_PMP])[kNtse ] = f27_BNW ; - (D27.f[DIR_MPP])[kNtnw ] = f27_BSE ; - (D27.f[DIR_PPM])[kNbne ] = f27_TSW ; - (D27.f[DIR_MMM])[kNbsw ] = f27_TNE ; - (D27.f[DIR_PMM])[kNbse ] = f27_TNW ; - (D27.f[DIR_MPM])[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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * 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[DIR_P00])[ke ]; - f_E = (D.f[DIR_M00])[kw ]; - f_S = (D.f[DIR_0P0])[kn ]; - f_N = (D.f[DIR_0M0])[ks ]; - f_B = (D.f[DIR_00P])[kt ]; - f_T = (D.f[DIR_00M])[kb ]; - f_SW = (D.f[DIR_PP0])[kne ]; - f_NE = (D.f[DIR_MM0])[ksw ]; - f_NW = (D.f[DIR_PM0])[kse ]; - f_SE = (D.f[DIR_MP0])[knw ]; - f_BW = (D.f[DIR_P0P])[kte ]; - f_TE = (D.f[DIR_M0M])[kbw ]; - f_TW = (D.f[DIR_P0M])[kbe ]; - f_BE = (D.f[DIR_M0P])[ktw ]; - f_BS = (D.f[DIR_0PP])[ktn ]; - f_TN = (D.f[DIR_0MM])[kbs ]; - f_TS = (D.f[DIR_0PM])[kbn ]; - f_BN = (D.f[DIR_0MP])[kts ]; - f_BSW = (D.f[DIR_PPP])[ktne ]; - f_BNE = (D.f[DIR_MMP])[ktsw ]; - f_BNW = (D.f[DIR_PMP])[ktse ]; - f_BSE = (D.f[DIR_MPP])[ktnw ]; - f_TSW = (D.f[DIR_PPM])[kbne ]; - f_TNE = (D.f[DIR_MMM])[kbsw ]; - f_TNW = (D.f[DIR_PMM])[kbse ]; - f_TSE = (D.f[DIR_MPM])[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[DIR_000])[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[DIR_000])[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[DIR_000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //(D7.f[1])[ke ] = f7_E - feq7_E + feqW7_W; //DIR_P00 - //(D7.f[2])[kw ] = f7_W - feq7_W + feqW7_E; //DIR_M00 - //(D7.f[3])[kn ] = f7_N - feq7_N + feqW7_S; //DIR_0P0 - //(D7.f[4])[ks ] = f7_S - feq7_S + feqW7_N; //DIR_0M0 - //(D7.f[5])[kt ] = f7_T - feq7_T + feqW7_B; //DIR_00P - //(D7.f[6])[kb ] = f7_B - feq7_B + feqW7_T; //DIR_00M - - ////////////////////////////////////////////////////////////////////////// - //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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - - Distributions27 D27; - if (isEvenTimestep==true) - { - D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes]; - } - else - { - D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_PMP * 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * 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[DIR_P00])[ke ]; - real f_E = (D.f[DIR_M00])[kw ]; - real f_S = (D.f[DIR_0P0])[kn ]; - real f_N = (D.f[DIR_0M0])[ks ]; - real f_B = (D.f[DIR_00P])[kt ]; - real f_T = (D.f[DIR_00M])[kb ]; - real f_SW = (D.f[DIR_PP0])[kne ]; - real f_NE = (D.f[DIR_MM0])[ksw ]; - real f_NW = (D.f[DIR_PM0])[kse ]; - real f_SE = (D.f[DIR_MP0])[knw ]; - real f_BW = (D.f[DIR_P0P])[kte ]; - real f_TE = (D.f[DIR_M0M])[kbw ]; - real f_TW = (D.f[DIR_P0M])[kbe ]; - real f_BE = (D.f[DIR_M0P])[ktw ]; - real f_BS = (D.f[DIR_0PP])[ktn ]; - real f_TN = (D.f[DIR_0MM])[kbs ]; - real f_TS = (D.f[DIR_0PM])[kbn ]; - real f_BN = (D.f[DIR_0MP])[kts ]; - real f_ZERO = (D.f[DIR_000])[kzero]; - real f_BSW = (D.f[DIR_PPP])[ktne ]; - real f_BNE = (D.f[DIR_MMP])[ktsw ]; - real f_BNW = (D.f[DIR_PMP])[ktse ]; - real f_BSE = (D.f[DIR_MPP])[ktnw ]; - real f_TSW = (D.f[DIR_PPM])[kbne ]; - real f_TNE = (D.f[DIR_MMM])[kbsw ]; - real f_TNW = (D.f[DIR_PMM])[kbse ]; - real f_TSE = (D.f[DIR_MPM])[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[DIR_P00])[ke ]; - //real f27_E = (D27.f[DIR_M00])[kw ]; - //real f27_S = (D27.f[DIR_0P0])[kn ]; - //real f27_N = (D27.f[DIR_0M0])[ks ]; - //real f27_B = (D27.f[DIR_00P])[kt ]; - //real f27_T = (D27.f[DIR_00M])[kb ]; - //real f27_SW = (D27.f[DIR_PP0])[kne ]; - //real f27_NE = (D27.f[DIR_MM0])[ksw ]; - //real f27_NW = (D27.f[DIR_PM0])[kse ]; - //real f27_SE = (D27.f[DIR_MP0])[knw ]; - //real f27_BW = (D27.f[DIR_P0P])[kte ]; - //real f27_TE = (D27.f[DIR_M0M])[kbw ]; - //real f27_TW = (D27.f[DIR_P0M])[kbe ]; - //real f27_BE = (D27.f[DIR_M0P])[ktw ]; - //real f27_BS = (D27.f[DIR_0PP])[ktn ]; - //real f27_TN = (D27.f[DIR_0MM])[kbs ]; - //real f27_TS = (D27.f[DIR_0PM])[kbn ]; - //real f27_BN = (D27.f[DIR_0MP])[kts ]; - //real f27_ZERO = (D27.f[DIR_000])[kzero]; - //real f27_BSW = (D27.f[DIR_PPP])[ktne ]; - //real f27_BNE = (D27.f[DIR_MMP])[ktsw ]; - //real f27_BNW = (D27.f[DIR_PMP])[ktse ]; - //real f27_BSE = (D27.f[DIR_MPP])[ktnw ]; - //real f27_TSW = (D27.f[DIR_PPM])[kbne ]; - //real f27_TNE = (D27.f[DIR_MMM])[kbsw ]; - //real f27_TNW = (D27.f[DIR_PMM])[kbse ]; - //real f27_TSE = (D27.f[DIR_MPM])[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[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes]; - } - else - { - D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[DIR_000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[DIR_000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //(D27.f[DIR_M00])[kw ]= four; - //(D27.f[DIR_P00])[ke ]= four; - //(D27.f[DIR_0M0])[ks ]= four; - //(D27.f[DIR_0P0])[kn ]= four; - //(D27.f[DIR_00M])[kb ]= four; - //(D27.f[DIR_00P])[kt ]= four; - //(D27.f[DIR_MM0])[ksw ]= four; - //(D27.f[DIR_PP0])[kne ]= four; - //(D27.f[DIR_MP0])[knw ]= four; - //(D27.f[DIR_PM0])[kse ]= four; - //(D27.f[DIR_M0M])[kbw ]= four; - //(D27.f[DIR_P0P])[kte ]= four; - //(D27.f[DIR_M0P])[ktw ]= four; - //(D27.f[DIR_P0M])[kbe ]= four; - //(D27.f[DIR_0MM])[kbs ]= four; - //(D27.f[DIR_0PP])[ktn ]= four; - //(D27.f[DIR_0MP])[kts ]= four; - //(D27.f[DIR_0PM])[kbn ]= four; - //(D27.f[DIR_MMM])[kbsw]= four; - //(D27.f[DIR_PPP])[ktne]= four; - //(D27.f[DIR_MMP])[ktsw]= four; - //(D27.f[DIR_PPM])[kbne]= four; - //(D27.f[DIR_MPM])[kbnw]= four; - //(D27.f[DIR_PMP])[ktse]= four; - //(D27.f[DIR_MPP])[ktnw]= four; - //(D27.f[DIR_PMM])[kbse]= four; - q = q_dirE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M00])[kw ]= -feqW27_W + c2o1 * c2o27 * TempD; - q = q_dirW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P00])[ke ]= -feqW27_E + c2o1 * c2o27 * TempD; - q = q_dirN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0M0])[ks ]= -feqW27_S + c2o1 * c2o27 * TempD; - q = q_dirS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0P0])[kn ]= -feqW27_N + c2o1 * c2o27 * TempD; - q = q_dirT[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_00M])[kb ]= -feqW27_B + c2o1 * c2o27 * TempD; - q = q_dirB[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_00P])[kt ]= -feqW27_T + c2o1 * c2o27 * TempD; - q = q_dirNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MM0])[ksw ]= -feqW27_SW + c2o1 * c1o54 * TempD; - q = q_dirSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PP0])[kne ]= -feqW27_NE + c2o1 * c1o54 * TempD; - q = q_dirSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MP0])[knw ]= -feqW27_NW + c2o1 * c1o54 * TempD; - q = q_dirNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PM0])[kse ]= -feqW27_SE + c2o1 * c1o54 * TempD; - q = q_dirTE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M0M])[kbw ]= -feqW27_BW + c2o1 * c1o54 * TempD; - q = q_dirBW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P0P])[kte ]= -feqW27_TE + c2o1 * c1o54 * TempD; - q = q_dirBE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M0P])[ktw ]= -feqW27_TW + c2o1 * c1o54 * TempD; - q = q_dirTW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P0M])[kbe ]= -feqW27_BE + c2o1 * c1o54 * TempD; - q = q_dirTN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0MM])[kbs ]= -feqW27_BS + c2o1 * c1o54 * TempD; - q = q_dirBS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0PP])[ktn ]= -feqW27_TN + c2o1 * c1o54 * TempD; - q = q_dirBN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0MP])[kts ]= -feqW27_TS + c2o1 * c1o54 * TempD; - q = q_dirTS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0PM])[kbn ]= -feqW27_BN + c2o1 * c1o54 * TempD; - q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MMM])[kbsw]= -feqW27_BSW+ c2o1 * c1o216 * TempD; - q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PPP])[ktne]= -feqW27_TNE+ c2o1 * c1o216 * TempD; - q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MMP])[ktsw]= -feqW27_TSW+ c2o1 * c1o216 * TempD; - q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PPM])[kbne]= -feqW27_BNE+ c2o1 * c1o216 * TempD; - q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MPM])[kbnw]= -feqW27_BNW+ c2o1 * c1o216 * TempD; - q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PMP])[ktse]= -feqW27_TSE+ c2o1 * c1o216 * TempD; - q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MPP])[ktnw]= -feqW27_TNW+ c2o1 * c1o216 * TempD; - q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PMM])[kbse]= -feqW27_BSE+ c2o1 * c1o216 * TempD; - //q = q_dirE[k]; if (q>=zero && q<=one) (D27.f[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - //q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - //q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - //q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - //q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - //q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - //q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - //q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - //q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - //q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - //q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - //q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - //q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - //q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - //q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - //q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - //q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - //q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - //q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - //q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - //q_dirBNW = &QQ[DIR_MPM * 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[DIR_P00])[ke ]; - f_E = (D.f[DIR_M00])[kw ]; - f_S = (D.f[DIR_0P0])[kn ]; - f_N = (D.f[DIR_0M0])[ks ]; - f_B = (D.f[DIR_00P])[kt ]; - f_T = (D.f[DIR_00M])[kb ]; - f_SW = (D.f[DIR_PP0])[kne ]; - f_NE = (D.f[DIR_MM0])[ksw ]; - f_NW = (D.f[DIR_PM0])[kse ]; - f_SE = (D.f[DIR_MP0])[knw ]; - f_BW = (D.f[DIR_P0P])[kte ]; - f_TE = (D.f[DIR_M0M])[kbw ]; - f_TW = (D.f[DIR_P0M])[kbe ]; - f_BE = (D.f[DIR_M0P])[ktw ]; - f_BS = (D.f[DIR_0PP])[ktn ]; - f_TN = (D.f[DIR_0MM])[kbs ]; - f_TS = (D.f[DIR_0PM])[kbn ]; - f_BN = (D.f[DIR_0MP])[kts ]; - f_BSW = (D.f[DIR_PPP])[ktne ]; - f_BNE = (D.f[DIR_MMP])[ktsw ]; - f_BNW = (D.f[DIR_PMP])[ktse ]; - f_BSE = (D.f[DIR_MPP])[ktnw ]; - f_TSW = (D.f[DIR_PPM])[kbne ]; - f_TNE = (D.f[DIR_MMM])[kbsw ]; - f_TNW = (D.f[DIR_PMM])[kbse ]; - f_TSE = (D.f[DIR_MPM])[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[DIR_000])[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[DIR_000])[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[DIR_000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //(D7.f[1])[ke ] = f7_E - feq7_E + feqW7_W; //DIR_P00 - //(D7.f[2])[kw ] = f7_W - feq7_W + feqW7_E; //DIR_M00 - //(D7.f[3])[kn ] = f7_N - feq7_N + feqW7_S; //DIR_0P0 - //(D7.f[4])[ks ] = f7_S - feq7_S + feqW7_N; //DIR_0M0 - //(D7.f[5])[kt ] = f7_T - feq7_T + feqW7_B; //DIR_00P - //(D7.f[6])[kb ] = f7_B - feq7_B + feqW7_T; //DIR_00M - - //////////////////////////////////////////////////////////////////////////// - ////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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - - Distributions27 D27; - if (isEvenTimestep==true) - { - D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes]; - } - else - { - D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_PMP * 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * 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[DIR_P00])[ke ]; - real f_E = (D.f[DIR_M00])[kw ]; - real f_S = (D.f[DIR_0P0])[kn ]; - real f_N = (D.f[DIR_0M0])[ks ]; - real f_B = (D.f[DIR_00P])[kt ]; - real f_T = (D.f[DIR_00M])[kb ]; - real f_SW = (D.f[DIR_PP0])[kne ]; - real f_NE = (D.f[DIR_MM0])[ksw ]; - real f_NW = (D.f[DIR_PM0])[kse ]; - real f_SE = (D.f[DIR_MP0])[knw ]; - real f_BW = (D.f[DIR_P0P])[kte ]; - real f_TE = (D.f[DIR_M0M])[kbw ]; - real f_TW = (D.f[DIR_P0M])[kbe ]; - real f_BE = (D.f[DIR_M0P])[ktw ]; - real f_BS = (D.f[DIR_0PP])[ktn ]; - real f_TN = (D.f[DIR_0MM])[kbs ]; - real f_TS = (D.f[DIR_0PM])[kbn ]; - real f_BN = (D.f[DIR_0MP])[kts ]; - real f_ZERO = (D.f[DIR_000])[kzero]; - real f_BSW = (D.f[DIR_PPP])[ktne ]; - real f_BNE = (D.f[DIR_MMP])[ktsw ]; - real f_BNW = (D.f[DIR_PMP])[ktse ]; - real f_BSE = (D.f[DIR_MPP])[ktnw ]; - real f_TSW = (D.f[DIR_PPM])[kbne ]; - real f_TNE = (D.f[DIR_MMM])[kbsw ]; - real f_TNW = (D.f[DIR_PMM])[kbse ]; - real f_TSE = (D.f[DIR_MPM])[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[DIR_P00])[ke ]; - real f27_E = (D27.f[DIR_M00])[kw ]; - real f27_S = (D27.f[DIR_0P0])[kn ]; - real f27_N = (D27.f[DIR_0M0])[ks ]; - real f27_B = (D27.f[DIR_00P])[kt ]; - real f27_T = (D27.f[DIR_00M])[kb ]; - real f27_SW = (D27.f[DIR_PP0])[kne ]; - real f27_NE = (D27.f[DIR_MM0])[ksw ]; - real f27_NW = (D27.f[DIR_PM0])[kse ]; - real f27_SE = (D27.f[DIR_MP0])[knw ]; - real f27_BW = (D27.f[DIR_P0P])[kte ]; - real f27_TE = (D27.f[DIR_M0M])[kbw ]; - real f27_TW = (D27.f[DIR_P0M])[kbe ]; - real f27_BE = (D27.f[DIR_M0P])[ktw ]; - real f27_BS = (D27.f[DIR_0PP])[ktn ]; - real f27_TN = (D27.f[DIR_0MM])[kbs ]; - real f27_TS = (D27.f[DIR_0PM])[kbn ]; - real f27_BN = (D27.f[DIR_0MP])[kts ]; - real f27_ZERO = (D27.f[DIR_000])[kzero]; - real f27_BSW = (D27.f[DIR_PPP])[ktne ]; - real f27_BNE = (D27.f[DIR_MMP])[ktsw ]; - real f27_BNW = (D27.f[DIR_PMP])[ktse ]; - real f27_BSE = (D27.f[DIR_MPP])[ktnw ]; - real f27_TSW = (D27.f[DIR_PPM])[kbne ]; - real f27_TNE = (D27.f[DIR_MMM])[kbsw ]; - real f27_TNW = (D27.f[DIR_PMM])[kbse ]; - real f27_TSE = (D27.f[DIR_MPM])[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[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes]; - } - else - { - D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[DIR_000])[k]=0.1f; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - q = q_dirE[ ke ]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[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[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[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[DIR_P00] = &DD[DIR_P00 * size_Mat]; - // D.f[DIR_M00] = &DD[DIR_M00 * size_Mat]; - // D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat]; - // D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat]; - // D.f[DIR_00P] = &DD[DIR_00P * size_Mat]; - // D.f[DIR_00M] = &DD[DIR_00M * size_Mat]; - // D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat]; - // D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat]; - // D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat]; - // D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat]; - // D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat]; - // D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat]; - // D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat]; - // D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat]; - // D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat]; - // D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat]; - // D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat]; - // D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat]; - // D.f[DIR_000] = &DD[DIR_000 * size_Mat]; - // D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat]; - // D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat]; - // D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat]; - // D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat]; - // D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat]; - // D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat]; - // D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat]; - // D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat]; - //} - //else - //{ - // D.f[DIR_M00] = &DD[DIR_P00 * size_Mat]; - // D.f[DIR_P00] = &DD[DIR_M00 * size_Mat]; - // D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat]; - // D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat]; - // D.f[DIR_00M] = &DD[DIR_00P * size_Mat]; - // D.f[DIR_00P] = &DD[DIR_00M * size_Mat]; - // D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat]; - // D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat]; - // D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat]; - // D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat]; - // D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat]; - // D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat]; - // D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat]; - // D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat]; - // D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat]; - // D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat]; - // D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat]; - // D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat]; - // D.f[DIR_000] = &DD[DIR_000 * size_Mat]; - // D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat]; - // D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat]; - // D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat]; - // D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat]; - // D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat]; - // D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat]; - // D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat]; - // D.f[DIR_MPM] = &DD[DIR_PMP * size_Mat]; - //} - - Distributions27 D27; - if (isEvenTimestep==true) - { - D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes]; - } - else - { - D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_PMP * 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * 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[DIR_P00])[ke ]; - //real f_E = (D.f[DIR_M00])[kw ]; - //real f_S = (D.f[DIR_0P0])[kn ]; - //real f_N = (D.f[DIR_0M0])[ks ]; - //real f_B = (D.f[DIR_00P])[kt ]; - //real f_T = (D.f[DIR_00M])[kb ]; - //real f_SW = (D.f[DIR_PP0])[kne ]; - //real f_NE = (D.f[DIR_MM0])[ksw ]; - //real f_NW = (D.f[DIR_PM0])[kse ]; - //real f_SE = (D.f[DIR_MP0])[knw ]; - //real f_BW = (D.f[DIR_P0P])[kte ]; - //real f_TE = (D.f[DIR_M0M])[kbw ]; - //real f_TW = (D.f[DIR_P0M])[kbe ]; - //real f_BE = (D.f[DIR_M0P])[ktw ]; - //real f_BS = (D.f[DIR_0PP])[ktn ]; - //real f_TN = (D.f[DIR_0MM])[kbs ]; - //real f_TS = (D.f[DIR_0PM])[kbn ]; - //real f_BN = (D.f[DIR_0MP])[kts ]; - //real f_ZERO = (D.f[DIR_000])[kzero]; - //real f_BSW = (D.f[DIR_PPP])[ktne ]; - //real f_BNE = (D.f[DIR_MMP])[ktsw ]; - //real f_BNW = (D.f[DIR_PMP])[ktse ]; - //real f_BSE = (D.f[DIR_MPP])[ktnw ]; - //real f_TSW = (D.f[DIR_PPM])[kbne ]; - //real f_TNE = (D.f[DIR_MMM])[kbsw ]; - //real f_TNW = (D.f[DIR_PMM])[kbse ]; - //real f_TSE = (D.f[DIR_MPM])[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[DIR_P00])[ke ]; - real f27_E = (D27.f[DIR_M00])[kw ]; - real f27_S = (D27.f[DIR_0P0])[kn ]; - real f27_N = (D27.f[DIR_0M0])[ks ]; - real f27_B = (D27.f[DIR_00P])[kt ]; - real f27_T = (D27.f[DIR_00M])[kb ]; - real f27_SW = (D27.f[DIR_PP0])[kne ]; - real f27_NE = (D27.f[DIR_MM0])[ksw ]; - real f27_NW = (D27.f[DIR_PM0])[kse ]; - real f27_SE = (D27.f[DIR_MP0])[knw ]; - real f27_BW = (D27.f[DIR_P0P])[kte ]; - real f27_TE = (D27.f[DIR_M0M])[kbw ]; - real f27_TW = (D27.f[DIR_P0M])[kbe ]; - real f27_BE = (D27.f[DIR_M0P])[ktw ]; - real f27_BS = (D27.f[DIR_0PP])[ktn ]; - real f27_TN = (D27.f[DIR_0MM])[kbs ]; - real f27_TS = (D27.f[DIR_0PM])[kbn ]; - real f27_BN = (D27.f[DIR_0MP])[kts ]; - //real f27_ZERO = (D27.f[DIR_000])[kzero]; - real f27_BSW = (D27.f[DIR_PPP])[ktne ]; - real f27_BNE = (D27.f[DIR_MMP])[ktsw ]; - real f27_BNW = (D27.f[DIR_PMP])[ktse ]; - real f27_BSE = (D27.f[DIR_MPP])[ktnw ]; - real f27_TSW = (D27.f[DIR_PPM])[kbne ]; - real f27_TNE = (D27.f[DIR_MMM])[kbsw ]; - real f27_TNW = (D27.f[DIR_PMM])[kbse ]; - real f27_TSE = (D27.f[DIR_MPM])[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[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes]; - } - else - { - D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[DIR_000])[k]=0.1f; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - q = q_dirE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M00])[kw ]=f27_E ; - q = q_dirW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P00])[ke ]=f27_W ; - q = q_dirN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0M0])[ks ]=f27_N ; - q = q_dirS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0P0])[kn ]=f27_S ; - q = q_dirT[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_00M])[kb ]=f27_T ; - q = q_dirB[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_00P])[kt ]=f27_B ; - q = q_dirNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MM0])[ksw ]=f27_NE ; - q = q_dirSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PP0])[kne ]=f27_SW ; - q = q_dirSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MP0])[knw ]=f27_SE ; - q = q_dirNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PM0])[kse ]=f27_NW ; - q = q_dirTE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M0M])[kbw ]=f27_TE ; - q = q_dirBW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P0P])[kte ]=f27_BW ; - q = q_dirBE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M0P])[ktw ]=f27_BE ; - q = q_dirTW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P0M])[kbe ]=f27_TW ; - q = q_dirTN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0MM])[kbs ]=f27_TN ; - q = q_dirBS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0PP])[ktn ]=f27_BS ; - q = q_dirBN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0MP])[kts ]=f27_BN ; - q = q_dirTS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0PM])[kbn ]=f27_TS ; - q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MMM])[kbsw]=f27_TNE; - q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PPP])[ktne]=f27_BSW; - q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MMP])[ktsw]=f27_BNE; - q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PPM])[kbne]=f27_TSW; - q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MPM])[kbnw]=f27_TSE; - q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PMP])[ktse]=f27_BNW; - q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MPP])[ktnw]=f27_BSE; - q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PMM])[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[DIR_P00] = &DD[DIR_P00 * size_Mat]; - // D.f[DIR_M00] = &DD[DIR_M00 * size_Mat]; - // D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat]; - // D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat]; - // D.f[DIR_00P] = &DD[DIR_00P * size_Mat]; - // D.f[DIR_00M] = &DD[DIR_00M * size_Mat]; - // D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat]; - // D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat]; - // D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat]; - // D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat]; - // D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat]; - // D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat]; - // D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat]; - // D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat]; - // D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat]; - // D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat]; - // D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat]; - // D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat]; - // D.f[DIR_000] = &DD[DIR_000 * size_Mat]; - // D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat]; - // D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat]; - // D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat]; - // D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat]; - // D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat]; - // D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat]; - // D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat]; - // D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat]; - //} - //else - //{ - // D.f[DIR_M00] = &DD[DIR_P00 * size_Mat]; - // D.f[DIR_P00] = &DD[DIR_M00 * size_Mat]; - // D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat]; - // D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat]; - // D.f[DIR_00M] = &DD[DIR_00P * size_Mat]; - // D.f[DIR_00P] = &DD[DIR_00M * size_Mat]; - // D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat]; - // D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat]; - // D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat]; - // D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat]; - // D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat]; - // D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat]; - // D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat]; - // D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat]; - // D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat]; - // D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat]; - // D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat]; - // D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat]; - // D.f[DIR_000] = &DD[DIR_000 * size_Mat]; - // D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat]; - // D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat]; - // D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat]; - // D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat]; - // D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat]; - // D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat]; - // D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat]; - // D.f[DIR_MPM] = &DD[DIR_PMP * 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * 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[DIR_P00])[ke ]; - //real f_E = (D.f[DIR_M00])[kw ]; - //real f_S = (D.f[DIR_0P0])[kn ]; - //real f_N = (D.f[DIR_0M0])[ks ]; - //real f_B = (D.f[DIR_00P])[kt ]; - //real f_T = (D.f[DIR_00M])[kb ]; - //real f_SW = (D.f[DIR_PP0])[kne ]; - //real f_NE = (D.f[DIR_MM0])[ksw ]; - //real f_NW = (D.f[DIR_PM0])[kse ]; - //real f_SE = (D.f[DIR_MP0])[knw ]; - //real f_BW = (D.f[DIR_P0P])[kte ]; - //real f_TE = (D.f[DIR_M0M])[kbw ]; - //real f_TW = (D.f[DIR_P0M])[kbe ]; - //real f_BE = (D.f[DIR_M0P])[ktw ]; - //real f_BS = (D.f[DIR_0PP])[ktn ]; - //real f_TN = (D.f[DIR_0MM])[kbs ]; - //real f_TS = (D.f[DIR_0PM])[kbn ]; - //real f_BN = (D.f[DIR_0MP])[kts ]; - //real f_BSW = (D.f[DIR_PPP])[ktne ]; - //real f_BNE = (D.f[DIR_MMP])[ktsw ]; - //real f_BNW = (D.f[DIR_PMP])[ktse ]; - //real f_BSE = (D.f[DIR_MPP])[ktnw ]; - //real f_TSW = (D.f[DIR_PPM])[kbne ]; - //real f_TNE = (D.f[DIR_MMM])[kbsw ]; - //real f_TNW = (D.f[DIR_PMM])[kbse ]; - //real f_TSE = (D.f[DIR_MPM])[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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - - Distributions27 D27; - if (isEvenTimestep==true) - { - D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes]; - } - else - { - D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_PMP * 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * 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[DIR_P00])[ke ]; - real f_E = (D.f[DIR_M00])[kw ]; - real f_S = (D.f[DIR_0P0])[kn ]; - real f_N = (D.f[DIR_0M0])[ks ]; - real f_B = (D.f[DIR_00P])[kt ]; - real f_T = (D.f[DIR_00M])[kb ]; - real f_SW = (D.f[DIR_PP0])[kne ]; - real f_NE = (D.f[DIR_MM0])[ksw ]; - real f_NW = (D.f[DIR_PM0])[kse ]; - real f_SE = (D.f[DIR_MP0])[knw ]; - real f_BW = (D.f[DIR_P0P])[kte ]; - real f_TE = (D.f[DIR_M0M])[kbw ]; - real f_TW = (D.f[DIR_P0M])[kbe ]; - real f_BE = (D.f[DIR_M0P])[ktw ]; - real f_BS = (D.f[DIR_0PP])[ktn ]; - real f_TN = (D.f[DIR_0MM])[kbs ]; - real f_TS = (D.f[DIR_0PM])[kbn ]; - real f_BN = (D.f[DIR_0MP])[kts ]; - //real f_ZERO = (D.f[DIR_000])[kzero]; - real f_BSW = (D.f[DIR_PPP])[ktne ]; - real f_BNE = (D.f[DIR_MMP])[ktsw ]; - real f_BNW = (D.f[DIR_PMP])[ktse ]; - real f_BSE = (D.f[DIR_MPP])[ktnw ]; - real f_TSW = (D.f[DIR_PPM])[kbne ]; - real f_TNE = (D.f[DIR_MMM])[kbsw ]; - real f_TNW = (D.f[DIR_PMM])[kbse ]; - real f_TSE = (D.f[DIR_MPM])[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[DIR_P00])[ke ]; - real f27_E = (D27.f[DIR_M00])[kw ]; - real f27_S = (D27.f[DIR_0P0])[kn ]; - real f27_N = (D27.f[DIR_0M0])[ks ]; - real f27_B = (D27.f[DIR_00P])[kt ]; - real f27_T = (D27.f[DIR_00M])[kb ]; - real f27_SW = (D27.f[DIR_PP0])[kne ]; - real f27_NE = (D27.f[DIR_MM0])[ksw ]; - real f27_NW = (D27.f[DIR_PM0])[kse ]; - real f27_SE = (D27.f[DIR_MP0])[knw ]; - real f27_BW = (D27.f[DIR_P0P])[kte ]; - real f27_TE = (D27.f[DIR_M0M])[kbw ]; - real f27_TW = (D27.f[DIR_P0M])[kbe ]; - real f27_BE = (D27.f[DIR_M0P])[ktw ]; - real f27_BS = (D27.f[DIR_0PP])[ktn ]; - real f27_TN = (D27.f[DIR_0MM])[kbs ]; - real f27_TS = (D27.f[DIR_0PM])[kbn ]; - real f27_BN = (D27.f[DIR_0MP])[kts ]; - real f27_ZERO = (D27.f[DIR_000])[kzero]; - real f27_BSW = (D27.f[DIR_PPP])[ktne ]; - real f27_BNE = (D27.f[DIR_MMP])[ktsw ]; - real f27_BNW = (D27.f[DIR_PMP])[ktse ]; - real f27_BSE = (D27.f[DIR_MPP])[ktnw ]; - real f27_TSW = (D27.f[DIR_PPM])[kbne ]; - real f27_TNE = (D27.f[DIR_MMM])[kbsw ]; - real f27_TNW = (D27.f[DIR_PMM])[kbse ]; - real f27_TSE = (D27.f[DIR_MPM])[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[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes]; - } - else - { - D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[DIR_000])[k]=0.1f; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real q; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - q = q_dirE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[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[DIR_P00] = &DD[DIR_P00 * size_Mat]; - // D.f[DIR_M00] = &DD[DIR_M00 * size_Mat]; - // D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat]; - // D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat]; - // D.f[DIR_00P] = &DD[DIR_00P * size_Mat]; - // D.f[DIR_00M] = &DD[DIR_00M * size_Mat]; - // D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat]; - // D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat]; - // D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat]; - // D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat]; - // D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat]; - // D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat]; - // D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat]; - // D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat]; - // D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat]; - // D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat]; - // D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat]; - // D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat]; - // D.f[DIR_000] = &DD[DIR_000 * size_Mat]; - // D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat]; - // D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat]; - // D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat]; - // D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat]; - // D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat]; - // D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat]; - // D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat]; - // D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat]; - //} - //else - //{ - // D.f[DIR_M00] = &DD[DIR_P00 * size_Mat]; - // D.f[DIR_P00] = &DD[DIR_M00 * size_Mat]; - // D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat]; - // D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat]; - // D.f[DIR_00M] = &DD[DIR_00P * size_Mat]; - // D.f[DIR_00P] = &DD[DIR_00M * size_Mat]; - // D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat]; - // D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat]; - // D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat]; - // D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat]; - // D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat]; - // D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat]; - // D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat]; - // D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat]; - // D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat]; - // D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat]; - // D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat]; - // D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat]; - // D.f[DIR_000] = &DD[DIR_000 * size_Mat]; - // D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat]; - // D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat]; - // D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat]; - // D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat]; - // D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat]; - // D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat]; - // D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat]; - // D.f[DIR_MPM] = &DD[DIR_PMP * 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * 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[DIR_P00])[ke ]; - //real f_E = (D.f[DIR_M00])[kw ]; - //real f_S = (D.f[DIR_0P0])[kn ]; - //real f_N = (D.f[DIR_0M0])[ks ]; - //real f_B = (D.f[DIR_00P])[kt ]; - //real f_T = (D.f[DIR_00M])[kb ]; - //real f_SW = (D.f[DIR_PP0])[kne ]; - //real f_NE = (D.f[DIR_MM0])[ksw ]; - //real f_NW = (D.f[DIR_PM0])[kse ]; - //real f_SE = (D.f[DIR_MP0])[knw ]; - //real f_BW = (D.f[DIR_P0P])[kte ]; - //real f_TE = (D.f[DIR_M0M])[kbw ]; - //real f_TW = (D.f[DIR_P0M])[kbe ]; - //real f_BE = (D.f[DIR_M0P])[ktw ]; - //real f_BS = (D.f[DIR_0PP])[ktn ]; - //real f_TN = (D.f[DIR_0MM])[kbs ]; - //real f_TS = (D.f[DIR_0PM])[kbn ]; - //real f_BN = (D.f[DIR_0MP])[kts ]; - //real f_BSW = (D.f[DIR_PPP])[ktne ]; - //real f_BNE = (D.f[DIR_MMP])[ktsw ]; - //real f_BNW = (D.f[DIR_PMP])[ktse ]; - //real f_BSE = (D.f[DIR_MPP])[ktnw ]; - //real f_TSW = (D.f[DIR_PPM])[kbne ]; - //real f_TNE = (D.f[DIR_MMM])[kbsw ]; - //real f_TNW = (D.f[DIR_PMM])[kbse ]; - //real f_TSE = (D.f[DIR_MPM])[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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - - Distributions27 D27; - if (isEvenTimestep==true) - { - D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes]; - } - else - { - D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_PMP * 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * 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[DIR_P00])[ke ]; - real f_E = (D.f[DIR_M00])[kw ]; - real f_S = (D.f[DIR_0P0])[kn ]; - real f_N = (D.f[DIR_0M0])[ks ]; - real f_B = (D.f[DIR_00P])[kt ]; - real f_T = (D.f[DIR_00M])[kb ]; - real f_SW = (D.f[DIR_PP0])[kne ]; - real f_NE = (D.f[DIR_MM0])[ksw ]; - real f_NW = (D.f[DIR_PM0])[kse ]; - real f_SE = (D.f[DIR_MP0])[knw ]; - real f_BW = (D.f[DIR_P0P])[kte ]; - real f_TE = (D.f[DIR_M0M])[kbw ]; - real f_TW = (D.f[DIR_P0M])[kbe ]; - real f_BE = (D.f[DIR_M0P])[ktw ]; - real f_BS = (D.f[DIR_0PP])[ktn ]; - real f_TN = (D.f[DIR_0MM])[kbs ]; - real f_TS = (D.f[DIR_0PM])[kbn ]; - real f_BN = (D.f[DIR_0MP])[kts ]; - //real f_ZERO = (D.f[DIR_000])[kzero]; - real f_BSW = (D.f[DIR_PPP])[ktne ]; - real f_BNE = (D.f[DIR_MMP])[ktsw ]; - real f_BNW = (D.f[DIR_PMP])[ktse ]; - real f_BSE = (D.f[DIR_MPP])[ktnw ]; - real f_TSW = (D.f[DIR_PPM])[kbne ]; - real f_TNE = (D.f[DIR_MMM])[kbsw ]; - real f_TNW = (D.f[DIR_PMM])[kbse ]; - real f_TSE = (D.f[DIR_MPM])[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[DIR_P00])[ke ]; - //real f27_E = (D27.f[DIR_M00])[kw ]; - //real f27_S = (D27.f[DIR_0P0])[kn ]; - //real f27_N = (D27.f[DIR_0M0])[ks ]; - //real f27_B = (D27.f[DIR_00P])[kt ]; - //real f27_T = (D27.f[DIR_00M])[kb ]; - //real f27_SW = (D27.f[DIR_PP0])[kne ]; - //real f27_NE = (D27.f[DIR_MM0])[ksw ]; - //real f27_NW = (D27.f[DIR_PM0])[kse ]; - //real f27_SE = (D27.f[DIR_MP0])[knw ]; - //real f27_BW = (D27.f[DIR_P0P])[kte ]; - //real f27_TE = (D27.f[DIR_M0M])[kbw ]; - //real f27_TW = (D27.f[DIR_P0M])[kbe ]; - //real f27_BE = (D27.f[DIR_M0P])[ktw ]; - //real f27_BS = (D27.f[DIR_0PP])[ktn ]; - //real f27_TN = (D27.f[DIR_0MM])[kbs ]; - //real f27_TS = (D27.f[DIR_0PM])[kbn ]; - //real f27_BN = (D27.f[DIR_0MP])[kts ]; - //real f27_ZERO = (D27.f[DIR_000])[kzero]; - //real f27_BSW = (D27.f[DIR_PPP])[ktne ]; - //real f27_BNE = (D27.f[DIR_MMP])[ktsw ]; - //real f27_BNW = (D27.f[DIR_PMP])[ktse ]; - //real f27_BSE = (D27.f[DIR_MPP])[ktnw ]; - //real f27_TSW = (D27.f[DIR_PPM])[kbne ]; - //real f27_TNE = (D27.f[DIR_MMM])[kbsw ]; - //real f27_TNW = (D27.f[DIR_PMM])[kbse ]; - //real f27_TSE = (D27.f[DIR_MPM])[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[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes]; - } - else - { - D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[DIR_000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real q; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - q = q_dirE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M00])[kw ]= -feqW27_W + c2o1 * c2o27 * TempD; - q = q_dirW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P00])[ke ]= -feqW27_E + c2o1 * c2o27 * TempD; - q = q_dirN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0M0])[ks ]= -feqW27_S + c2o1 * c2o27 * TempD; - q = q_dirS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0P0])[kn ]= -feqW27_N + c2o1 * c2o27 * TempD; - q = q_dirT[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_00M])[kb ]= -feqW27_B + c2o1 * c2o27 * TempD; - q = q_dirB[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_00P])[kt ]= -feqW27_T + c2o1 * c2o27 * TempD; - q = q_dirNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MM0])[ksw ]= -feqW27_SW + c2o1 * c1o54 * TempD; - q = q_dirSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PP0])[kne ]= -feqW27_NE + c2o1 * c1o54 * TempD; - q = q_dirSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MP0])[knw ]= -feqW27_NW + c2o1 * c1o54 * TempD; - q = q_dirNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PM0])[kse ]= -feqW27_SE + c2o1 * c1o54 * TempD; - q = q_dirTE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M0M])[kbw ]= -feqW27_BW + c2o1 * c1o54 * TempD; - q = q_dirBW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P0P])[kte ]= -feqW27_TE + c2o1 * c1o54 * TempD; - q = q_dirBE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M0P])[ktw ]= -feqW27_TW + c2o1 * c1o54 * TempD; - q = q_dirTW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P0M])[kbe ]= -feqW27_BE + c2o1 * c1o54 * TempD; - q = q_dirTN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0MM])[kbs ]= -feqW27_BS + c2o1 * c1o54 * TempD; - q = q_dirBS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0PP])[ktn ]= -feqW27_TN + c2o1 * c1o54 * TempD; - q = q_dirBN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0MP])[kts ]= -feqW27_TS + c2o1 * c1o54 * TempD; - q = q_dirTS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0PM])[kbn ]= -feqW27_BN + c2o1 * c1o54 * TempD; - q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MMM])[kbsw]= -feqW27_BSW+ c2o1 * c1o216 * TempD; - q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PPP])[ktne]= -feqW27_TNE+ c2o1 * c1o216 * TempD; - q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MMP])[ktsw]= -feqW27_TSW+ c2o1 * c1o216 * TempD; - q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PPM])[kbne]= -feqW27_BNE+ c2o1 * c1o216 * TempD; - q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MPM])[kbnw]= -feqW27_BNW+ c2o1 * c1o216 * TempD; - q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PMP])[ktse]= -feqW27_TSE+ c2o1 * c1o216 * TempD; - q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MPP])[ktnw]= -feqW27_TNW+ c2o1 * c1o216 * TempD; - q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PMM])[kbse]= -feqW27_BSE+ c2o1 * c1o216 * TempD; - //q = q_dirE[k]; if (q>=zero && q<=one) (D27.f[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[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[DIR_P00] = &DD[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DD[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DD[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DD[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DD[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DD[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DD[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DD[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DD[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat]; - D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat]; - D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat]; - D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat]; - D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat]; - D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat]; - D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * 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[DIR_P00])[ke ]; - f_E = (D.f[DIR_M00])[kw ]; - f_S = (D.f[DIR_0P0])[kn ]; - f_N = (D.f[DIR_0M0])[ks ]; - f_B = (D.f[DIR_00P])[kt ]; - f_T = (D.f[DIR_00M])[kb ]; - f_SW = (D.f[DIR_PP0])[kne ]; - f_NE = (D.f[DIR_MM0])[ksw ]; - f_NW = (D.f[DIR_PM0])[kse ]; - f_SE = (D.f[DIR_MP0])[knw ]; - f_BW = (D.f[DIR_P0P])[kte ]; - f_TE = (D.f[DIR_M0M])[kbw ]; - f_TW = (D.f[DIR_P0M])[kbe ]; - f_BE = (D.f[DIR_M0P])[ktw ]; - f_BS = (D.f[DIR_0PP])[ktn ]; - f_TN = (D.f[DIR_0MM])[kbs ]; - f_TS = (D.f[DIR_0PM])[kbn ]; - f_BN = (D.f[DIR_0MP])[kts ]; - f_BSW = (D.f[DIR_PPP])[ktne ]; - f_BNE = (D.f[DIR_MMP])[ktsw ]; - f_BNW = (D.f[DIR_PMP])[ktse ]; - f_BSE = (D.f[DIR_MPP])[ktnw ]; - f_TSW = (D.f[DIR_PPM])[kbne ]; - f_TNE = (D.f[DIR_MMM])[kbsw ]; - f_TNW = (D.f[DIR_PMM])[kbse ]; - f_TSE = (D.f[DIR_MPM])[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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - - Distributions27 D27; - if (isEvenTimestep==true) - { - D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes]; - } - else - { - D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_PMP * 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * 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[DIR_P00])[ke ]; - real f_E = (D.f[DIR_M00])[kw ]; - real f_S = (D.f[DIR_0P0])[kn ]; - real f_N = (D.f[DIR_0M0])[ks ]; - real f_B = (D.f[DIR_00P])[kt ]; - real f_T = (D.f[DIR_00M])[kb ]; - real f_SW = (D.f[DIR_PP0])[kne ]; - real f_NE = (D.f[DIR_MM0])[ksw ]; - real f_NW = (D.f[DIR_PM0])[kse ]; - real f_SE = (D.f[DIR_MP0])[knw ]; - real f_BW = (D.f[DIR_P0P])[kte ]; - real f_TE = (D.f[DIR_M0M])[kbw ]; - real f_TW = (D.f[DIR_P0M])[kbe ]; - real f_BE = (D.f[DIR_M0P])[ktw ]; - real f_BS = (D.f[DIR_0PP])[ktn ]; - real f_TN = (D.f[DIR_0MM])[kbs ]; - real f_TS = (D.f[DIR_0PM])[kbn ]; - real f_BN = (D.f[DIR_0MP])[kts ]; - //real f_ZERO = (D.f[DIR_000])[kzero]; - real f_BSW = (D.f[DIR_PPP])[ktne ]; - real f_BNE = (D.f[DIR_MMP])[ktsw ]; - real f_BNW = (D.f[DIR_PMP])[ktse ]; - real f_BSE = (D.f[DIR_MPP])[ktnw ]; - real f_TSW = (D.f[DIR_PPM])[kbne ]; - real f_TNE = (D.f[DIR_MMM])[kbsw ]; - real f_TNW = (D.f[DIR_PMM])[kbse ]; - real f_TSE = (D.f[DIR_MPM])[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[DIR_P00])[ke ]; - //real f27_E = (D27.f[DIR_M00])[kw ]; - //real f27_S = (D27.f[DIR_0P0])[kn ]; - //real f27_N = (D27.f[DIR_0M0])[ks ]; - //real f27_B = (D27.f[DIR_00P])[kt ]; - //real f27_T = (D27.f[DIR_00M])[kb ]; - //real f27_SW = (D27.f[DIR_PP0])[kne ]; - //real f27_NE = (D27.f[DIR_MM0])[ksw ]; - //real f27_NW = (D27.f[DIR_PM0])[kse ]; - //real f27_SE = (D27.f[DIR_MP0])[knw ]; - //real f27_BW = (D27.f[DIR_P0P])[kte ]; - //real f27_TE = (D27.f[DIR_M0M])[kbw ]; - //real f27_TW = (D27.f[DIR_P0M])[kbe ]; - //real f27_BE = (D27.f[DIR_M0P])[ktw ]; - //real f27_BS = (D27.f[DIR_0PP])[ktn ]; - //real f27_TN = (D27.f[DIR_0MM])[kbs ]; - //real f27_TS = (D27.f[DIR_0PM])[kbn ]; - //real f27_BN = (D27.f[DIR_0MP])[kts ]; - //real f27_ZERO = (D27.f[DIR_000])[kzero]; - //real f27_BSW = (D27.f[DIR_PPP])[ktne ]; - //real f27_BNE = (D27.f[DIR_MMP])[ktsw ]; - //real f27_BNW = (D27.f[DIR_PMP])[ktse ]; - //real f27_BSE = (D27.f[DIR_MPP])[ktnw ]; - //real f27_TSW = (D27.f[DIR_PPM])[kbne ]; - //real f27_TNE = (D27.f[DIR_MMM])[kbsw ]; - //real f27_TNW = (D27.f[DIR_PMM])[kbse ]; - //real f27_TSE = (D27.f[DIR_MPM])[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[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes]; - } - else - { - D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[DIR_000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real q; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - q = q_dirE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M00])[kw ]= -feqW27_W + c2o1 * c2o27 * TempD; - q = q_dirW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P00])[ke ]= -feqW27_E + c2o1 * c2o27 * TempD; - q = q_dirN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0M0])[ks ]= -feqW27_S + c2o1 * c2o27 * TempD; - q = q_dirS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0P0])[kn ]= -feqW27_N + c2o1 * c2o27 * TempD; - q = q_dirT[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_00M])[kb ]= -feqW27_B + c2o1 * c2o27 * TempD; - q = q_dirB[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_00P])[kt ]= -feqW27_T + c2o1 * c2o27 * TempD; - q = q_dirNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MM0])[ksw ]= -feqW27_SW + c2o1 * c1o54 * TempD; - q = q_dirSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PP0])[kne ]= -feqW27_NE + c2o1 * c1o54 * TempD; - q = q_dirSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MP0])[knw ]= -feqW27_NW + c2o1 * c1o54 * TempD; - q = q_dirNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PM0])[kse ]= -feqW27_SE + c2o1 * c1o54 * TempD; - q = q_dirTE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M0M])[kbw ]= -feqW27_BW + c2o1 * c1o54 * TempD; - q = q_dirBW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P0P])[kte ]= -feqW27_TE + c2o1 * c1o54 * TempD; - q = q_dirBE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_M0P])[ktw ]= -feqW27_TW + c2o1 * c1o54 * TempD; - q = q_dirTW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_P0M])[kbe ]= -feqW27_BE + c2o1 * c1o54 * TempD; - q = q_dirTN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0MM])[kbs ]= -feqW27_BS + c2o1 * c1o54 * TempD; - q = q_dirBS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0PP])[ktn ]= -feqW27_TN + c2o1 * c1o54 * TempD; - q = q_dirBN[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0MP])[kts ]= -feqW27_TS + c2o1 * c1o54 * TempD; - q = q_dirTS[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_0PM])[kbn ]= -feqW27_BN + c2o1 * c1o54 * TempD; - q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MMM])[kbsw]= -feqW27_BSW+ c2o1 * c1o216 * TempD; - q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PPP])[ktne]= -feqW27_TNE+ c2o1 * c1o216 * TempD; - q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MMP])[ktsw]= -feqW27_TSW+ c2o1 * c1o216 * TempD; - q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PPM])[kbne]= -feqW27_BNE+ c2o1 * c1o216 * TempD; - q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MPM])[kbnw]= -feqW27_BNW+ c2o1 * c1o216 * TempD; - q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PMP])[ktse]= -feqW27_TSE+ c2o1 * c1o216 * TempD; - q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_MPP])[ktnw]= -feqW27_TNW+ c2o1 * c1o216 * TempD; - q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D27.f[DIR_PMM])[kbse]= -feqW27_BSE+ c2o1 * c1o216 * TempD; - //q = q_dirE[k]; if (q>=zero && q<=one) (D27.f[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[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[DIR_P00] = &distributions[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &distributions[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &distributions[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &distributions[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &distributions[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &distributions[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &distributions[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &distributions[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &distributions[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &distributions[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &distributions[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &distributions[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &distributions[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &distributions[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &distributions[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &distributions[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &distributions[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &distributions[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &distributions[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &distributions[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &distributions[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &distributions[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &distributions[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &distributions[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &distributions[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &distributions[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &distributions[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &distributions[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &distributions[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &distributions[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &distributions[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &distributions[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &distributions[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &distributions[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &distributions[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &distributions[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &distributions[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &distributions[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &distributions[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &distributions[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &distributions[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &distributions[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &distributions[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &distributions[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &distributions[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &distributions[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &distributions[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &distributions[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &distributions[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &distributions[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &distributions[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &distributions[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &distributions[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &distributions[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////// - Distributions27 DAD; - if (isEvenTimestep) - { - DAD.f[DIR_P00] = &distributionsAD[DIR_P00 * numberOfLBnodes]; - DAD.f[DIR_M00] = &distributionsAD[DIR_M00 * numberOfLBnodes]; - DAD.f[DIR_0P0] = &distributionsAD[DIR_0P0 * numberOfLBnodes]; - DAD.f[DIR_0M0] = &distributionsAD[DIR_0M0 * numberOfLBnodes]; - DAD.f[DIR_00P] = &distributionsAD[DIR_00P * numberOfLBnodes]; - DAD.f[DIR_00M] = &distributionsAD[DIR_00M * numberOfLBnodes]; - DAD.f[DIR_PP0] = &distributionsAD[DIR_PP0 * numberOfLBnodes]; - DAD.f[DIR_MM0] = &distributionsAD[DIR_MM0 * numberOfLBnodes]; - DAD.f[DIR_PM0] = &distributionsAD[DIR_PM0 * numberOfLBnodes]; - DAD.f[DIR_MP0] = &distributionsAD[DIR_MP0 * numberOfLBnodes]; - DAD.f[DIR_P0P] = &distributionsAD[DIR_P0P * numberOfLBnodes]; - DAD.f[DIR_M0M] = &distributionsAD[DIR_M0M * numberOfLBnodes]; - DAD.f[DIR_P0M] = &distributionsAD[DIR_P0M * numberOfLBnodes]; - DAD.f[DIR_M0P] = &distributionsAD[DIR_M0P * numberOfLBnodes]; - DAD.f[DIR_0PP] = &distributionsAD[DIR_0PP * numberOfLBnodes]; - DAD.f[DIR_0MM] = &distributionsAD[DIR_0MM * numberOfLBnodes]; - DAD.f[DIR_0PM] = &distributionsAD[DIR_0PM * numberOfLBnodes]; - DAD.f[DIR_0MP] = &distributionsAD[DIR_0MP * numberOfLBnodes]; - DAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes]; - DAD.f[DIR_PPP] = &distributionsAD[DIR_PPP * numberOfLBnodes]; - DAD.f[DIR_MMP] = &distributionsAD[DIR_MMP * numberOfLBnodes]; - DAD.f[DIR_PMP] = &distributionsAD[DIR_PMP * numberOfLBnodes]; - DAD.f[DIR_MPP] = &distributionsAD[DIR_MPP * numberOfLBnodes]; - DAD.f[DIR_PPM] = &distributionsAD[DIR_PPM * numberOfLBnodes]; - DAD.f[DIR_MMM] = &distributionsAD[DIR_MMM * numberOfLBnodes]; - DAD.f[DIR_PMM] = &distributionsAD[DIR_PMM * numberOfLBnodes]; - DAD.f[DIR_MPM] = &distributionsAD[DIR_MPM * numberOfLBnodes]; - } - else - { - DAD.f[DIR_M00] = &distributionsAD[DIR_P00 * numberOfLBnodes]; - DAD.f[DIR_P00] = &distributionsAD[DIR_M00 * numberOfLBnodes]; - DAD.f[DIR_0M0] = &distributionsAD[DIR_0P0 * numberOfLBnodes]; - DAD.f[DIR_0P0] = &distributionsAD[DIR_0M0 * numberOfLBnodes]; - DAD.f[DIR_00M] = &distributionsAD[DIR_00P * numberOfLBnodes]; - DAD.f[DIR_00P] = &distributionsAD[DIR_00M * numberOfLBnodes]; - DAD.f[DIR_MM0] = &distributionsAD[DIR_PP0 * numberOfLBnodes]; - DAD.f[DIR_PP0] = &distributionsAD[DIR_MM0 * numberOfLBnodes]; - DAD.f[DIR_MP0] = &distributionsAD[DIR_PM0 * numberOfLBnodes]; - DAD.f[DIR_PM0] = &distributionsAD[DIR_MP0 * numberOfLBnodes]; - DAD.f[DIR_M0M] = &distributionsAD[DIR_P0P * numberOfLBnodes]; - DAD.f[DIR_P0P] = &distributionsAD[DIR_M0M * numberOfLBnodes]; - DAD.f[DIR_M0P] = &distributionsAD[DIR_P0M * numberOfLBnodes]; - DAD.f[DIR_P0M] = &distributionsAD[DIR_M0P * numberOfLBnodes]; - DAD.f[DIR_0MM] = &distributionsAD[DIR_0PP * numberOfLBnodes]; - DAD.f[DIR_0PP] = &distributionsAD[DIR_0MM * numberOfLBnodes]; - DAD.f[DIR_0MP] = &distributionsAD[DIR_0PM * numberOfLBnodes]; - DAD.f[DIR_0PM] = &distributionsAD[DIR_0MP * numberOfLBnodes]; - DAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes]; - DAD.f[DIR_PPP] = &distributionsAD[DIR_MMM * numberOfLBnodes]; - DAD.f[DIR_MMP] = &distributionsAD[DIR_PPM * numberOfLBnodes]; - DAD.f[DIR_PMP] = &distributionsAD[DIR_MPM * numberOfLBnodes]; - DAD.f[DIR_MPP] = &distributionsAD[DIR_PMM * numberOfLBnodes]; - DAD.f[DIR_PPM] = &distributionsAD[DIR_MMP * numberOfLBnodes]; - DAD.f[DIR_MMM] = &distributionsAD[DIR_PPP * numberOfLBnodes]; - DAD.f[DIR_PMM] = &distributionsAD[DIR_MPP * numberOfLBnodes]; - DAD.f[DIR_MPM] = &distributionsAD[DIR_PMP * 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &Qarrays[DIR_M00 * numberOfBCnodes]; - q_dirN = &Qarrays[DIR_0P0 * numberOfBCnodes]; - q_dirS = &Qarrays[DIR_0M0 * numberOfBCnodes]; - q_dirT = &Qarrays[DIR_00P * numberOfBCnodes]; - q_dirB = &Qarrays[DIR_00M * numberOfBCnodes]; - q_dirNE = &Qarrays[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &Qarrays[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &Qarrays[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &Qarrays[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &Qarrays[DIR_P0P * numberOfBCnodes]; - q_dirBW = &Qarrays[DIR_M0M * numberOfBCnodes]; - q_dirBE = &Qarrays[DIR_P0M * numberOfBCnodes]; - q_dirTW = &Qarrays[DIR_M0P * numberOfBCnodes]; - q_dirTN = &Qarrays[DIR_0PP * numberOfBCnodes]; - q_dirBS = &Qarrays[DIR_0MM * numberOfBCnodes]; - q_dirBN = &Qarrays[DIR_0PM * numberOfBCnodes]; - q_dirTS = &Qarrays[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &Qarrays[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &Qarrays[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &Qarrays[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &Qarrays[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &Qarrays[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &Qarrays[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &Qarrays[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &Qarrays[DIR_MPM * 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[DIR_P00])[ke]; - f_E = (D.f[DIR_M00])[kw]; - f_S = (D.f[DIR_0P0])[kn]; - f_N = (D.f[DIR_0M0])[ks]; - f_B = (D.f[DIR_00P])[kt]; - f_T = (D.f[DIR_00M])[kb]; - f_SW = (D.f[DIR_PP0])[kne]; - f_NE = (D.f[DIR_MM0])[ksw]; - f_NW = (D.f[DIR_PM0])[kse]; - f_SE = (D.f[DIR_MP0])[knw]; - f_BW = (D.f[DIR_P0P])[kte]; - f_TE = (D.f[DIR_M0M])[kbw]; - f_TW = (D.f[DIR_P0M])[kbe]; - f_BE = (D.f[DIR_M0P])[ktw]; - f_BS = (D.f[DIR_0PP])[ktn]; - f_TN = (D.f[DIR_0MM])[kbs]; - f_TS = (D.f[DIR_0PM])[kbn]; - f_BN = (D.f[DIR_0MP])[kts]; - f_BSW = (D.f[DIR_PPP])[ktne]; - f_BNE = (D.f[DIR_MMP])[ktsw]; - f_BNW = (D.f[DIR_PMP])[ktse]; - f_BSE = (D.f[DIR_MPP])[ktnw]; - f_TSW = (D.f[DIR_PPM])[kbne]; - f_TNE = (D.f[DIR_MMM])[kbsw]; - f_TNW = (D.f[DIR_PMM])[kbse]; - f_TSE = (D.f[DIR_MPM])[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[DIR_000])[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[DIR_P00])[ke]; - f_E = (DAD.f[DIR_M00])[kw]; - f_S = (DAD.f[DIR_0P0])[kn]; - f_N = (DAD.f[DIR_0M0])[ks]; - f_B = (DAD.f[DIR_00P])[kt]; - f_T = (DAD.f[DIR_00M])[kb]; - f_SW = (DAD.f[DIR_PP0])[kne]; - f_NE = (DAD.f[DIR_MM0])[ksw]; - f_NW = (DAD.f[DIR_PM0])[kse]; - f_SE = (DAD.f[DIR_MP0])[knw]; - f_BW = (DAD.f[DIR_P0P])[kte]; - f_TE = (DAD.f[DIR_M0M])[kbw]; - f_TW = (DAD.f[DIR_P0M])[kbe]; - f_BE = (DAD.f[DIR_M0P])[ktw]; - f_BS = (DAD.f[DIR_0PP])[ktn]; - f_TN = (DAD.f[DIR_0MM])[kbs]; - f_TS = (DAD.f[DIR_0PM])[kbn]; - f_BN = (DAD.f[DIR_0MP])[kts]; - f_BSW = (DAD.f[DIR_PPP])[ktne]; - f_BNE = (DAD.f[DIR_MMP])[ktsw]; - f_BNW = (DAD.f[DIR_PMP])[ktse]; - f_BSE = (DAD.f[DIR_MPP])[ktnw]; - f_TSW = (DAD.f[DIR_PPM])[kbne]; - f_TNE = (DAD.f[DIR_MMM])[kbsw]; - f_TNW = (DAD.f[DIR_PMM])[kbse]; - f_TSE = (DAD.f[DIR_MPM])[kbnw]; - ////////////////////////////////////////////////////////////////////////// - if (!isEvenTimestep) - { - DAD.f[DIR_P00] = &distributionsAD[DIR_P00 * numberOfLBnodes]; - DAD.f[DIR_M00] = &distributionsAD[DIR_M00 * numberOfLBnodes]; - DAD.f[DIR_0P0] = &distributionsAD[DIR_0P0 * numberOfLBnodes]; - DAD.f[DIR_0M0] = &distributionsAD[DIR_0M0 * numberOfLBnodes]; - DAD.f[DIR_00P] = &distributionsAD[DIR_00P * numberOfLBnodes]; - DAD.f[DIR_00M] = &distributionsAD[DIR_00M * numberOfLBnodes]; - DAD.f[DIR_PP0] = &distributionsAD[DIR_PP0 * numberOfLBnodes]; - DAD.f[DIR_MM0] = &distributionsAD[DIR_MM0 * numberOfLBnodes]; - DAD.f[DIR_PM0] = &distributionsAD[DIR_PM0 * numberOfLBnodes]; - DAD.f[DIR_MP0] = &distributionsAD[DIR_MP0 * numberOfLBnodes]; - DAD.f[DIR_P0P] = &distributionsAD[DIR_P0P * numberOfLBnodes]; - DAD.f[DIR_M0M] = &distributionsAD[DIR_M0M * numberOfLBnodes]; - DAD.f[DIR_P0M] = &distributionsAD[DIR_P0M * numberOfLBnodes]; - DAD.f[DIR_M0P] = &distributionsAD[DIR_M0P * numberOfLBnodes]; - DAD.f[DIR_0PP] = &distributionsAD[DIR_0PP * numberOfLBnodes]; - DAD.f[DIR_0MM] = &distributionsAD[DIR_0MM * numberOfLBnodes]; - DAD.f[DIR_0PM] = &distributionsAD[DIR_0PM * numberOfLBnodes]; - DAD.f[DIR_0MP] = &distributionsAD[DIR_0MP * numberOfLBnodes]; - DAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes]; - DAD.f[DIR_PPP] = &distributionsAD[DIR_PPP * numberOfLBnodes]; - DAD.f[DIR_MMP] = &distributionsAD[DIR_MMP * numberOfLBnodes]; - DAD.f[DIR_PMP] = &distributionsAD[DIR_PMP * numberOfLBnodes]; - DAD.f[DIR_MPP] = &distributionsAD[DIR_MPP * numberOfLBnodes]; - DAD.f[DIR_PPM] = &distributionsAD[DIR_PPM * numberOfLBnodes]; - DAD.f[DIR_MMM] = &distributionsAD[DIR_MMM * numberOfLBnodes]; - DAD.f[DIR_PMM] = &distributionsAD[DIR_PMM * numberOfLBnodes]; - DAD.f[DIR_MPM] = &distributionsAD[DIR_MPM * numberOfLBnodes]; - } - else - { - DAD.f[DIR_M00] = &distributionsAD[DIR_P00 * numberOfLBnodes]; - DAD.f[DIR_P00] = &distributionsAD[DIR_M00 * numberOfLBnodes]; - DAD.f[DIR_0M0] = &distributionsAD[DIR_0P0 * numberOfLBnodes]; - DAD.f[DIR_0P0] = &distributionsAD[DIR_0M0 * numberOfLBnodes]; - DAD.f[DIR_00M] = &distributionsAD[DIR_00P * numberOfLBnodes]; - DAD.f[DIR_00P] = &distributionsAD[DIR_00M * numberOfLBnodes]; - DAD.f[DIR_MM0] = &distributionsAD[DIR_PP0 * numberOfLBnodes]; - DAD.f[DIR_PP0] = &distributionsAD[DIR_MM0 * numberOfLBnodes]; - DAD.f[DIR_MP0] = &distributionsAD[DIR_PM0 * numberOfLBnodes]; - DAD.f[DIR_PM0] = &distributionsAD[DIR_MP0 * numberOfLBnodes]; - DAD.f[DIR_M0M] = &distributionsAD[DIR_P0P * numberOfLBnodes]; - DAD.f[DIR_P0P] = &distributionsAD[DIR_M0M * numberOfLBnodes]; - DAD.f[DIR_M0P] = &distributionsAD[DIR_P0M * numberOfLBnodes]; - DAD.f[DIR_P0M] = &distributionsAD[DIR_M0P * numberOfLBnodes]; - DAD.f[DIR_0MM] = &distributionsAD[DIR_0PP * numberOfLBnodes]; - DAD.f[DIR_0PP] = &distributionsAD[DIR_0MM * numberOfLBnodes]; - DAD.f[DIR_0MP] = &distributionsAD[DIR_0PM * numberOfLBnodes]; - DAD.f[DIR_0PM] = &distributionsAD[DIR_0MP * numberOfLBnodes]; - DAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes]; - DAD.f[DIR_PPP] = &distributionsAD[DIR_MMM * numberOfLBnodes]; - DAD.f[DIR_MMP] = &distributionsAD[DIR_PPM * numberOfLBnodes]; - DAD.f[DIR_PMP] = &distributionsAD[DIR_MPM * numberOfLBnodes]; - DAD.f[DIR_MPP] = &distributionsAD[DIR_PMM * numberOfLBnodes]; - DAD.f[DIR_PPM] = &distributionsAD[DIR_MMP * numberOfLBnodes]; - DAD.f[DIR_MMM] = &distributionsAD[DIR_PPP * numberOfLBnodes]; - DAD.f[DIR_PMM] = &distributionsAD[DIR_MPP * numberOfLBnodes]; - DAD.f[DIR_MPM] = &distributionsAD[DIR_PMP * 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[DIR_000])[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[DIR_M00])[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[DIR_P00])[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[DIR_0M0])[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[DIR_0P0])[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[DIR_00M])[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[DIR_00P])[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[DIR_MM0])[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[DIR_PP0])[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[DIR_MP0])[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[DIR_PM0])[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[DIR_M0M])[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[DIR_P0P])[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[DIR_M0P])[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[DIR_P0M])[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[DIR_0MM])[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[DIR_0PP])[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[DIR_0MP])[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[DIR_0PM])[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[DIR_MMM])[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[DIR_PPP])[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[DIR_MMP])[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[DIR_PPM])[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[DIR_MPM])[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[DIR_PMP])[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[DIR_MPP])[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[DIR_PMM])[kbse] = calcDistributionBC_AD(q, c1o216, -vx1+vx2+vx3, cu_sq, f_TNW, f_BSE, omegaDiffusivity, -jTan1+jTan2+jTan3, concentration); } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/gpu/VirtualFluids_GPU/GPU/CP27.cu b/src/gpu/VirtualFluids_GPU/GPU/CP27.cu deleted file mode 100644 index 41a50e5dde7dd8e024721653f43652f2e4a17548..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/GPU/CP27.cu +++ /dev/null @@ -1,146 +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 CalcCP27(real* DD, - int* cpIndex, - int nonCp, - double *cpPress, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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<nonCp) - { - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int KQK = cpIndex[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]; - //////////////////////////////////////////////////////////////////////////////// - double PressCP; - - PressCP = (D.f[DIR_P00])[ke ]+ (D.f[DIR_M00])[kw ]+ - (D.f[DIR_0P0])[kn ]+ (D.f[DIR_0M0])[ks ]+ - (D.f[DIR_00P])[kt ]+ (D.f[DIR_00M])[kb ]+ - (D.f[DIR_PP0])[kne ]+ (D.f[DIR_MM0])[ksw ]+ - (D.f[DIR_PM0])[kse ]+ (D.f[DIR_MP0])[knw ]+ - (D.f[DIR_P0P])[kte ]+ (D.f[DIR_M0M])[kbw ]+ - (D.f[DIR_P0M])[kbe ]+ (D.f[DIR_M0P])[ktw ]+ - (D.f[DIR_0PP])[ktn ]+ (D.f[DIR_0MM])[kbs ]+ - (D.f[DIR_0PM])[kbn ]+ (D.f[DIR_0MP])[kts ]+ - (D.f[DIR_000])[kzero]+ - (D.f[DIR_PPP])[ktne]+ (D.f[DIR_MMP])[ktsw]+ - (D.f[DIR_PMP])[ktse]+ (D.f[DIR_MPP])[ktnw]+ - (D.f[DIR_PPM])[kbne]+ (D.f[DIR_MMM])[kbsw]+ - (D.f[DIR_PMM])[kbse]+ (D.f[DIR_MPM])[kbnw]; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - cpPress[k] = PressCP; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - } -} - diff --git a/src/gpu/VirtualFluids_GPU/GPU/Cascade27.cu b/src/gpu/VirtualFluids_GPU/GPU/Cascade27.cu deleted file mode 100644 index e05a711015e372b3fc3169bf61bea9965ccf7c12..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/GPU/Cascade27.cu +++ /dev/null @@ -1,4710 +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; - -#include "math.h" - -//////////////////////////////////////////////////////////////////////////////// -__global__ void LB_Kernel_Cascade_SP_27( real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<numberOfLBnodes) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if( (BC != GEO_SOLID) && (BC != GEO_VOID) ) - { - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k ];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke - real mfabb = (D.f[DIR_M00])[kw ];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k ];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn - real mfbab = (D.f[DIR_0M0])[ks ];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k ];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt - real mfbba = (D.f[DIR_00M])[kb ];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k ];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks ];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse - real mfacb = (D.f[DIR_MP0])[kw ];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw - real mfcbc = (D.f[DIR_P0P])[k ];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb ];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe - real mfabc = (D.f[DIR_M0P])[kw ];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw - real mfbcc = (D.f[DIR_0PP])[k ];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb ];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn - real mfbac = (D.f[DIR_0MP])[ks ];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts - real mfbbb = (D.f[DIR_000])[k ];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero - real mfccc = (D.f[DIR_PPP])[k ];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw - real mfcac = (D.f[DIR_PMP])[ks ];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse - real mfacc = (D.f[DIR_MPP])[kw ];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw - real mfcca = (D.f[DIR_PPM])[kb ];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////////// - //slow - //real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + - // (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + - // ((mfabb+mfcbb) + (mfbab+mfbcb) + (mfbba+mfbbc)));//fehlt mfbbb - real vvx =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + - (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + - (mfcbb-mfabb)); - real vvy =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + - (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + - (mfbcb-mfbab)); - real vvz =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + - (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + - (mfbbc-mfbba)); - //////////////////////////////////////////////////////////////////////////////////// - //fast - real oMdrho = c1o1 - (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + - mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb + - mfabb+mfcbb + mfbab+mfbcb + mfbba+mfbbc + mfbbb);//fehlt mfbbb nicht mehr - //////////////////////////////////////////////////////////////////////////////////// - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2=vvx*vvx; - vy2=vvy*vvy; - vz2=vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = 0.01f; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - - - //////////////////////////////////////////////////////////////////////////////////// - // Cascade - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = omega; - real OxyyPxzz = c1o1;//two-omega;//eight*(two-omega)/(eight -omega);//one;//omega;//two-omega;// - real OxyyMxzz = c1o1;//omega;//one;//eight*(two-omega)/(eight -omega);//one;//two-omega;//one;// - real O4 = c1o1; - real O5 = c1o1; - real O6 = c1o1; - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction - { - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - } - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// //no correction -// mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz); -// mxxMyy += -(-omega) * (-mxxMyy); -// mxxMzz += -(-omega) * (-mxxMzz); -// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - // linear combinations back - mfcaa = c1o3 * ( mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * ( mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mfbbb)/(abs(mfbbb)+qudricLimit); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxxyPyzz)/(abs(mxxyPyzz)+qudricLimit); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxxyMyzz)/(abs(mxxyMyzz)+qudricLimit); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxxzPyyz)/(abs(mxxzPyyz)+qudricLimit); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxxzMyyz)/(abs(mxxzMyyz)+qudricLimit); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxyyPxzz)/(abs(mxyyPxzz)+qudricLimit); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxyyMxzz)/(abs(mxyyMxzz)+qudricLimit); - mxyyMxzz += wadjust * (-mxyyMxzz); - - // linear combinations back - mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - mfacc = mfaaa * c1o9 * O4 + (c1o1 - O4) * mfacc; - mfcac = mfaaa * c1o9 * O4 + (c1o1 - O4) * mfcac; - mfcca = mfaaa * c1o9 * O4 + (c1o1 - O4) * mfcca; - - mfbbc += O4 * (-mfbbc); - mfbcb += O4 * (-mfbcb); - mfcbb += O4 * (-mfcbb); - - //5. - mfbcc += O5 * (-mfbcc); - mfcbc += O5 * (-mfcbc); - mfccb += O5 * (-mfccb); - - //6. - mfccc = mfaaa * c1o27 * O6 + (c1o1 - O6) * mfccc; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1- vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * ( vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * ( vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1- vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * ( vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1- vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * ( vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1- vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * ( vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * ( vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1- vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * ( vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * ( vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1- vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * ( vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1- vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * ( vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1- vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * ( vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1- vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1- vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1- vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1- vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * ( vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1- vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * ( vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * ( vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1- vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * ( vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * ( vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1- vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * ( vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1- vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1- vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1- vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1- vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[ DIR_P00 ])[k ] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] - (D.f[ DIR_M00 ])[kw ] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] - (D.f[ DIR_0P0 ])[k ] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] - (D.f[ DIR_0M0 ])[ks ] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] - (D.f[ DIR_00P ])[k ] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] - (D.f[ DIR_00M ])[kb ] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] - (D.f[ DIR_PP0 ])[k ] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] - (D.f[ DIR_MM0 ])[ksw ] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] - (D.f[ DIR_PM0 ])[ks ] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] - (D.f[ DIR_MP0 ])[kw ] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] - (D.f[ DIR_P0P ])[k ] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] - (D.f[ DIR_M0M ])[kbw ] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] - (D.f[ DIR_P0M ])[kb ] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] - (D.f[ DIR_M0P ])[kw ] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] - (D.f[ DIR_0PP ])[k ] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] - (D.f[ DIR_0MM ])[kbs ] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] - (D.f[ DIR_0PM ])[kb ] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] - (D.f[ DIR_0MP ])[ks ] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] - (D.f[ DIR_000])[k ] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] - (D.f[ DIR_PPP ])[k ] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] - (D.f[ DIR_PMP ])[ks ] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] - (D.f[ DIR_PPM ])[kb ] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] - (D.f[ DIR_PMM ])[kbs ] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] - (D.f[ DIR_MPP ])[kw ] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] - (D.f[ DIR_MMP ])[ksw ] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] - (D.f[ DIR_MPM ])[kbw ] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] - (D.f[ DIR_MMM ])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] - //////////////////////////////////////////////////////////////////////////////////// - } - } -} -//////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////// -__global__ void LB_Kernel_Casc_Comp_SP_27( real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<numberOfLBnodes) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if( (BC != GEO_SOLID) && (BC != GEO_VOID) ) - { - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int kzero= k; - unsigned int ke = k; - unsigned int kw = neighborX[k]; - unsigned int kn = k; - unsigned int ks = neighborY[k]; - unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = k; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = k; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = k; - 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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real f_E = (D.f[DIR_P00])[ke ];// + c2over27 ; - real f_W = (D.f[DIR_M00])[kw ];// + c2over27 ; - real f_N = (D.f[DIR_0P0])[kn ];// + c2over27 ; - real f_S = (D.f[DIR_0M0])[ks ];// + c2over27 ; - real f_F = (D.f[DIR_00P])[kt ];// + c2over27 ; - real f_B = (D.f[DIR_00M])[kb ];// + c2over27 ; - real f_NE = (D.f[DIR_PP0])[kne ];// + c1over54 ; - real f_SW = (D.f[DIR_MM0])[ksw ];// + c1over54 ; - real f_SE = (D.f[DIR_PM0])[kse ];// + c1over54 ; - real f_NW = (D.f[DIR_MP0])[knw ];// + c1over54 ; - real f_Ef = (D.f[DIR_P0P])[kte ];// + c1over54 ; - real f_Wb = (D.f[DIR_M0M])[kbw ];// + c1over54 ; - real f_Eb = (D.f[DIR_P0M])[kbe ];// + c1over54 ; - real f_Wf = (D.f[DIR_M0P])[ktw ];// + c1over54 ; - real f_Nf = (D.f[DIR_0PP])[ktn ];// + c1over54 ; - real f_Sb = (D.f[DIR_0MM])[kbs ];// + c1over54 ; - real f_Nb = (D.f[DIR_0PM])[kbn ];// + c1over54 ; - real f_Sf = (D.f[DIR_0MP])[kts ];// + c1over54 ; - real f_R = (D.f[DIR_000])[kzero];// + c8over27 ; - real f_Nef = (D.f[DIR_PPP])[ktne ];// + c1over216; - real f_Swf = (D.f[DIR_MMP])[ktsw ];// + c1over216; - real f_Sef = (D.f[DIR_PMP])[ktse ];// + c1over216; - real f_Nwf = (D.f[DIR_MPP])[ktnw ];// + c1over216; - real f_Neb = (D.f[DIR_PPM])[kbne ];// + c1over216; - real f_Swb = (D.f[DIR_MMM])[kbsw ];// + c1over216; - real f_Seb = (D.f[DIR_PMM])[kbse ];// + c1over216; - real f_Nwb = (D.f[DIR_MPM])[kbnw ];// + c1over216; - //////////////////////////////////////////////////////////////////////////////////// - real rho=f_NW+f_W+f_SW+f_S+f_SE+f_E+f_NE+f_N+f_R+f_Nf+f_Nb+f_Sf+f_Sb+f_Ef+f_Eb+f_Wf+f_Wb+f_Nwf+f_Nwb+f_Nef+f_Neb+f_Swf+f_Swb+f_Sef+f_Seb+f_F+f_B+c1o1;// ACHTUNG ne EINS !!!!!!!! - real pix=(f_NE+f_E+f_SE+f_Ef+f_Eb-f_NW-f_W-f_SW-f_Wf-f_Wb+f_Nef+f_Neb+f_Sef+f_Seb-f_Nwf-f_Nwb-f_Swf-f_Swb); - real piy=(f_NE+f_N+f_NW+f_Nf+f_Nb-f_SE-f_S-f_SW-f_Sf-f_Sb+f_Nef+f_Neb+f_Nwf+f_Nwb-f_Sef-f_Seb-f_Swf-f_Swb); - real piz=(f_Nf+f_Sf+f_Wf+f_Ef+f_F-f_Nb-f_Sb-f_Wb-f_Eb-f_B+f_Nef+f_Nwf+f_Sef+f_Swf-f_Neb-f_Nwb-f_Seb-f_Swb); - real vvx=pix/rho; - real vvy=piy/rho; - real vvz=piz/rho; - real vx2=vvx*vvx; - real vy2=vvy*vvy; - real vz2=vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real mfaaa = f_Swb; - real mfaab = f_SW; - real mfaac = f_Swf; - real mfaba = f_Wb; - real mfabb = f_W; - real mfabc = f_Wf; - real mfbaa = f_Sb; - real mfbab = f_S; - real mfbac = f_Sf; - real mfbba = f_B; - real mfbbb = f_R; - real mfbbc = f_F; - real mfaca = f_Nwb; - real mfacb = f_NW; - real mfacc = f_Nwf; - real mfcaa = f_Seb; - real mfcab = f_SE; - real mfcac = f_Sef; - real mfcca = f_Neb; - real mfccb = f_NE; - real mfccc = f_Nef; - real mfbca = f_Nb; - real mfbcb = f_N; - real mfbcc = f_Nf; - real mfcba = f_Eb; - real mfcbb = f_E; - real mfcbc = f_Ef; - real m0, m1, m2; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - ////////////////////////////////////////////////////////////////////////////////////// - //// BGK - ////////////////////////////////////////////////////////////////////////////////////// - ////2. - //mfabb += -(-omega) * (-mfabb); - //mfbab += -(-omega) * (-mfbab); - //mfbba += -(-omega) * (-mfbba); - // - //mfcaa += -(-omega) * (c1o3 * mfaaa - mfcaa); - //mfaca += -(-omega) * (c1o3 * mfaaa - mfaca); - //mfaac += -(-omega) * (c1o3 * mfaaa - mfaac); - // - ////3. - //mfabc += -(-omega) * (-mfabc); - //mfbac += -(-omega) * (-mfbac); - // - //mfacb += -(-omega) * (-mfacb); - //mfbca += -(-omega) * (-mfbca); - - //mfcab += -(-omega) * (-mfcab); - //mfcba += -(-omega) * (-mfcba); - - //mfbbb += -(-omega) * (-mfbbb); - - ////4. - //mfacc += -(-omega) * (c1o9 * mfaaa - mfacc); - //mfcac += -(-omega) * (c1o9 * mfaaa - mfcac); - //mfcca += -(-omega) * (c1o9 * mfaaa - mfcca); - - //mfbbc += -(-omega) * (-mfbbc); - //mfbcb += -(-omega) * (-mfbcb); - //mfcbb += -(-omega) * (-mfcbb); - - ////5. - //mfbcc += -(-omega) * (-mfbcc); - //mfcbc += -(-omega) * (-mfcbc); - //mfccb += -(-omega) * (-mfccb); - - ////6. - //mfccc += -(-omega) * (c1o27 * mfaaa - mfccc); - ////////////////////////////////////////////////////////////////////////////////////// - - - - //////////////////////////////////////////////////////////////////////////////////// - // Cascaded simple - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; - real OxyyPxzz = c1o1; - real OxyyMxzz = c1o1; - real O4 = c1o1; - real O5 = c1o1; - real O6 = c1o1; - - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz); - mxxMyy += -(-omega) * (-mxxMyy); - mxxMzz += -(-omega) * (-mxxMzz); - mfabb += -(-omega) * (-mfabb); - mfbab += -(-omega) * (-mfbab); - mfbba += -(-omega) * (-mfbba); - - // linear combinations back - mfcaa = c1o3 * ( mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * ( mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - ////Test - //mfabb += -(-omega) * (-mfabb); - //mfbab += -(-omega) * (-mfbab); - //mfbba += -(-omega) * (-mfbba); - - //mfcaa += -(-omega) * (c1o3 * mfaaa - mfcaa); - //mfaca += -(-omega) * (c1o3 * mfaaa - mfaca); - //mfaac += -(-omega) * (c1o3 * mfaaa - mfaac); - - - - //3. - // linear combinations - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - mfbbb += OxyyMxzz * (-mfbbb); - mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - - // linear combinations back - mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - ////Test - //mfabc += -(-omega) * (-mfabc); - //mfbac += -(-omega) * (-mfbac); - // - //mfacb += -(-omega) * (-mfacb); - //mfbca += -(-omega) * (-mfbca); - - //mfcab += -(-omega) * (-mfcab); - //mfcba += -(-omega) * (-mfcba); - - //mfbbb += -(-omega) * (-mfbbb); - - - //4. - mfacc += O4 * (c1o9 * mfaaa - mfacc); - mfcac += O4 * (c1o9 * mfaaa - mfcac); - mfcca += O4 * (c1o9 * mfaaa - mfcca); - - mfbbc += O4 * (-mfbbc); - mfbcb += O4 * (-mfbcb); - mfcbb += O4 * (-mfcbb); - - //5. - mfbcc += O5 * (-mfbcc); - mfcbc += O5 * (-mfcbc); - mfccb += O5 * (-mfccb); - - //6. - mfccc += O6 * (c1o27 * mfaaa - mfccc); - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1.) * ( vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1- vz2) - c1o1* vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1.) * ( vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * ( vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1- vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * ( vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3) * ( vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1- vz2) - c1o3 * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3) * ( vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * ( vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1- vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * ( vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * ( vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1- vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * ( vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * ( vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1- vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * ( vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3) * ( vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1- vz2) - c1o3 * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3) * ( vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * ( vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1- vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * ( vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9) * ( vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1- vz2) - c1o9 * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9) * ( vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6) * ( vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1- vy2) - c1o6 * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6) * ( vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3) * ( vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1- vy2) - c2o3 * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3) * ( vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6) * ( vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1- vy2) - c1o6 * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6) * ( vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * ( vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1- vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * ( vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * ( vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1- vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * ( vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * ( vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1- vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * ( vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18) * ( vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1- vy2) - c1o18 * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18) * ( vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9) * ( vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1- vy2) - c2o9 * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9) * ( vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18) * ( vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1- vy2) - c1o18 * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18) * ( vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36) * ( vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1- vx2) - c1o36 * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36) * ( vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9) * ( vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1- vx2) - c1o9 * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9) * ( vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36) * ( vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1- vx2) - c1o36 * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36) * ( vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9) * ( vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1- vx2) - c1o9 * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9) * ( vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9) * ( vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1- vx2) - c4o9 * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9) * ( vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9) * ( vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1- vx2) - c1o9 * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9) * ( vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36) * ( vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1- vx2) - c1o36 * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36) * ( vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9) * ( vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1- vx2) - c1o9 * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9) * ( vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36) * ( vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1- vx2) - c1o36 * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36) * ( vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ;// - (D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; - (D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; - (D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; - (D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; - (D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; - (D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; - (D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; - (D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; - (D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; - (D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; - (D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; - (D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; - (D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; - (D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; - (D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; - (D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; - (D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; - (D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; - (D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; - (D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; - (D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; - (D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; - (D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; - (D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; - (D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; - (D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; - //////////////////////////////////////////////////////////////////////////////////// - } - } -} -//////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////// -__global__ void LB_Kernel_Casc_SP_MS_OHM_27( real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<numberOfLBnodes) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if( (BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real fE = (D.f[DIR_P00])[k ];//ke - real fW = (D.f[DIR_M00])[kw ]; - real fN = (D.f[DIR_0P0])[k ];//kn - real fS = (D.f[DIR_0M0])[ks ]; - real fT = (D.f[DIR_00P])[k ];//kt - real fB = (D.f[DIR_00M])[kb ]; - real fNE = (D.f[DIR_PP0])[k ];//kne - real fSW = (D.f[DIR_MM0])[ksw]; - real fSE = (D.f[DIR_PM0])[ks ];//kse - real fNW = (D.f[DIR_MP0])[kw ];//knw - real fTE = (D.f[DIR_P0P])[k ];//kte - real fBW = (D.f[DIR_M0M])[kbw]; - real fBE = (D.f[DIR_P0M])[kb ];//kbe - real fTW = (D.f[DIR_M0P])[kw ];//ktw - real fTN = (D.f[DIR_0PP])[k ];//ktn - real fBS = (D.f[DIR_0MM])[kbs]; - real fBN = (D.f[DIR_0PM])[kb ];//kbn - real fTS = (D.f[DIR_0MP])[ks ];//kts - real fZERO = (D.f[DIR_000])[k ];//kzero - real fTNE = (D.f[DIR_PPP])[k ];//ktne - real fTSW = (D.f[DIR_MMP])[ksw];//ktsw - real fTSE = (D.f[DIR_PMP])[ks ];//ktse - real fTNW = (D.f[DIR_MPP])[kw ];//ktnw - real fBNE = (D.f[DIR_PPM])[kb ];//kbne - real fBSW = (D.f[DIR_MMM])[kbsw]; - real fBSE = (D.f[DIR_PMM])[kbs];//kbse - real fBNW = (D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////// - real rho0 = (fTNE+fBSW)+(fTSW+fBNE)+(fTSE+fBNW)+(fTNW+fBSE)+(fNE+fSW)+(fNW+fSE)+(fTE+fBW)+(fBE+fTW)+(fTN+fBS)+(fBN+fTS)+(fE+fW)+(fN+fS)+(fT+fB)+fZERO; - real rho = rho0 + c1o1; - real OORho = c1o1/rho; - real vx = OORho*((fTNE-fBSW)+(fBNE-fTSW)+(fTSE-fBNW)+(fBSE-fTNW) +(fNE-fSW)+(fSE-fNW)+(fTE-fBW)+(fBE-fTW)+(fE-fW)); - real vy = OORho*((fTNE-fBSW)+(fBNE-fTSW)+(fBNW-fTSE)+(fTNW-fBSE) +(fNE-fSW)+(fNW-fSE)+(fTN-fBS)+(fBN-fTS)+(fN-fS)); - real vz = OORho*((fTNE-fBSW)+(fTSW-fBNE)+(fTSE-fBNW)+(fTNW-fBSE) +(fTE-fBW)+(fTW-fBE)+(fTN-fBS)+(fTS-fBN)+(fT-fB)); - //////////////////////////////////////////////////////////////////////////////// - - - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////BGK incomp - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //real drho = fZERO+fE+fW+fN+fS+fT+fB+fNE+fSW+fSE+fNW+fTE+fBW+fBE+fTW+fTN+fBS+fBN+fTS+fTNE+fTSW+fTSE+fTNW+fBNE+fBSW+fBSE+fBNW; - //real vx1 = (fE -fW +fNE-fSW+fSE-fNW+fTE-fBW+fBE-fTW+ fTNE-fTSW+fTSE-fTNW+ fBNE-fBSW+fBSE-fBNW); - //real vx2 = (fN -fS +fNE-fSW-fSE+fNW+fTN-fBS+fBN-fTS+ fTNE-fTSW-fTSE+fTNW+ fBNE-fBSW-fBSE+fBNW); - //real vx3 = (fT -fB +fTE-fBW-fBE+fTW+fTN-fBS-fBN+fTS+ fTNE+fTSW+fTSE+fTNW- fBNE-fBSW-fBSE-fBNW); - //real cusq = c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - //fZERO = fZERO *(one+(-omega))-(-omega)* c8over27* (drho-cusq); - //fE = fE *(one+(-omega))-(-omega)* c2over27* (drho+three*( vx1 )+c9over2*( vx1 )*( vx1 )-cusq); - //fW = fW *(one+(-omega))-(-omega)* c2over27* (drho+three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cusq); - //fN = fN *(one+(-omega))-(-omega)* c2over27* (drho+three*( vx2 )+c9over2*( vx2 )*( vx2 )-cusq); - //fS = fS *(one+(-omega))-(-omega)* c2over27* (drho+three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cusq); - //fT = fT *(one+(-omega))-(-omega)* c2over27* (drho+three*( vx3)+c9over2*( vx3)*( vx3)-cusq); - //fB = fB *(one+(-omega))-(-omega)* c2over27* (drho+three*( -vx3)+c9over2*( -vx3)*( -vx3)-cusq); - //fNE = fNE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cusq); - //fSW = fSW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cusq); - //fSE = fSE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cusq); - //fNW = fNW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cusq); - //fTE = fTE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cusq); - //fBW = fBW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cusq); - //fBE = fBE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cusq); - //fTW = fTW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cusq); - //fTN = fTN *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cusq); - //fBS = fBS *(one+(-omega))-(-omega)* c1over54* (drho+three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cusq); - //fBN = fBN *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cusq); - //fTS = fTS *(one+(-omega))-(-omega)* c1over54* (drho+three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cusq); - //fTNE = fTNE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq); - //fBSW = fBSW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq); - //fBNE = fBNE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq); - //fTSW = fTSW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq); - //fTSE = fTSE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq); - //fBNW = fBNW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq); - //fBSE = fBSE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq); - //fTNW = fTNW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // //BGK comp - // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // real drho = fZERO+fE+fW+fN+fS+fT+fB+fNE+fSW+fSE+fNW+fTE+fBW+fBE+fTW+fTN+fBS+fBN+fTS+fTNE+fTSW+fTSE+fTNW+fBNE+fBSW+fBSE+fBNW; - // real rho = one + drho; - // real OoRho = one / rho; - // real vx1 = OoRho * (fE -fW +fNE-fSW+fSE-fNW+fTE-fBW+fBE-fTW+ fTNE-fTSW+fTSE-fTNW+ fBNE-fBSW+fBSE-fBNW); - // real vx2 = OoRho * (fN -fS +fNE-fSW-fSE+fNW+fTN-fBS+fBN-fTS+ fTNE-fTSW-fTSE+fTNW+ fBNE-fBSW-fBSE+fBNW); - // real vx3 = OoRho * (fT -fB +fTE-fBW-fBE+fTW+fTN-fBS-fBN+fTS+ fTNE+fTSW+fTSE+fTNW- fBNE-fBSW-fBSE-fBNW); - // real cusq = c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - // fZERO = fZERO *(one+(-omega))-(-omega)* c8over27* (drho-rho * cusq); - // fE = fE *(one+(-omega))-(-omega)* c2over27* (drho+rho * (three*( vx1 )+c9over2*( vx1 )*( vx1 )-cusq)); - // fW = fW *(one+(-omega))-(-omega)* c2over27* (drho+rho * (three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cusq)); - // fN = fN *(one+(-omega))-(-omega)* c2over27* (drho+rho * (three*( vx2 )+c9over2*( vx2 )*( vx2 )-cusq)); - // fS = fS *(one+(-omega))-(-omega)* c2over27* (drho+rho * (three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cusq)); - // fT = fT *(one+(-omega))-(-omega)* c2over27* (drho+rho * (three*( vx3)+c9over2*( vx3)*( vx3)-cusq)); - // fB = fB *(one+(-omega))-(-omega)* c2over27* (drho+rho * (three*( -vx3)+c9over2*( -vx3)*( -vx3)-cusq)); - // fNE = fNE *(one+(-omega))-(-omega)* c1over54* (drho+rho * (three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cusq)); - // fSW = fSW *(one+(-omega))-(-omega)* c1over54* (drho+rho * (three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cusq)); - // fSE = fSE *(one+(-omega))-(-omega)* c1over54* (drho+rho * (three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cusq)); - // fNW = fNW *(one+(-omega))-(-omega)* c1over54* (drho+rho * (three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cusq)); - // fTE = fTE *(one+(-omega))-(-omega)* c1over54* (drho+rho * (three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cusq)); - // fBW = fBW *(one+(-omega))-(-omega)* c1over54* (drho+rho * (three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cusq)); - // fBE = fBE *(one+(-omega))-(-omega)* c1over54* (drho+rho * (three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cusq)); - // fTW = fTW *(one+(-omega))-(-omega)* c1over54* (drho+rho * (three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cusq)); - // fTN = fTN *(one+(-omega))-(-omega)* c1over54* (drho+rho * (three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cusq)); - // fBS = fBS *(one+(-omega))-(-omega)* c1over54* (drho+rho * (three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cusq)); - // fBN = fBN *(one+(-omega))-(-omega)* c1over54* (drho+rho * (three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cusq)); - // fTS = fTS *(one+(-omega))-(-omega)* c1over54* (drho+rho * (three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cusq)); - // fTNE = fTNE *(one+(-omega))-(-omega)* c1over216*(drho+rho * (three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq)); - // fBSW = fBSW *(one+(-omega))-(-omega)* c1over216*(drho+rho * (three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq)); - // fBNE = fBNE *(one+(-omega))-(-omega)* c1over216*(drho+rho * (three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq)); - // fTSW = fTSW *(one+(-omega))-(-omega)* c1over216*(drho+rho * (three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq)); - // fTSE = fTSE *(one+(-omega))-(-omega)* c1over216*(drho+rho * (three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq)); - // fBNW = fBNW *(one+(-omega))-(-omega)* c1over216*(drho+rho * (three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq)); - // fBSE = fBSE *(one+(-omega))-(-omega)* c1over216*(drho+rho * (three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq)); - // fTNW = fTNW *(one+(-omega))-(-omega)* c1over216*(drho+rho * (three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq)); - // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - //////////////////////////////////////////////////////////////////////////////// - real vx2 = vx*vx; - real vy2 = vy*vy; - real vz2 = vz*vz; - real vxy = vx*vy; - real vxz = vx*vz; - real vyz = vy*vz; - real vx2y = vx*vx*vy; - real vx2z = vx*vx*vz; - real vy2z = vy*vy*vz; - real vxy2 = vx*vy*vy; - real vyz2 = vy*vz*vz; - real vxz2 = vx*vz*vz; - real vxyz = vx*vy*vz; - //real vx2y2 = vx*vx*vy*vy; - //real vx2z2 = vx*vx*vz*vz; - //real vy2z2 = vy*vy*vz*vz; - //real vx2yz = vx*vx*vy*vz; - //real vxyz2 = vx*vy*vz*vz; - //real vxy2z = vx*vy*vy*vz; - //real vx2y2z = vx*vx*vy*vy*vz; - //real vx2yz2 = vx*vx*vy*vz*vz; - //real vxy2z2 = vx*vy*vy*vz*vz; - //real vx2y2z2= vx*vx*vy*vy*vz*vz; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //real mu200 =(fE+fW+fNE+fSW+fSE+fNW+fTE+fBW+fBE+fTW+fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - //real mu020 =(fN+fS+fNE+fSW+fSE+fNW+fTN+fBS+fBN+fTS+fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - //real mu002 =(fT+fB+fTE+fBW+fBE+fTW+fTN+fBS+fBN+fTS+fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - //real mu110 =(fNE-fSE+fSW-fNW+fTNE-fTSE+fBNE-fBSE+fTSW-fTNW+fBSW-fBNW) * OORho; - //real mu101 =(fTE+fBW-fBE-fTW+fTNE-fBNE+fTSE-fBSE-fTNW+fBNW-fTSW+fBSW) * OORho; - //real mu011 =(fTN+fBS-fBN-fTS+fTNE-fBNE-fTSE+fBSE+fTNW-fBNW-fTSW+fBSW) * OORho; - //real mu210 =(fNE-fSW-fSE+fNW+fTNE+fBNE-fTSE-fBSE+fTNW+fBNW-fTSW-fBSW) * OORho; - //real mu120 =(fNE-fSW+fSE-fNW+fTNE-fTNW+fBNE-fBNW+fTSE-fTSW+fBSE-fBSW) * OORho; - //real mu102 =(fTE-fBW+fBE-fTW+fTNE-fTNW+fBNE-fBNW+fTSE-fTSW+fBSE-fBSW) * OORho; - //real mu111 =(fTNE-fBNE-fTSE+fBSE-fTNW+fBNW+fTSW-fBSW) * OORho; - //real mu201 =(fTE-fBW-fBE+fTW+fTNE-fBNE+fTSE-fBSE+fTNW-fBNW+fTSW-fBSW) * OORho; - //real mu021 =(fTN-fBS-fBN+fTS+fTNE-fBNE+fTSE-fBSE+fTNW-fBNW+fTSW-fBSW) * OORho; - //real mu012 =(fTN-fBS+fBN-fTS+fTNE+fBNE-fTSE-fBSE+fTNW+fBNW-fTSW-fBSW) * OORho; - //real mu220 =(fNE+fSW+fSE+fNW+fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - //real mu121 =(fTNE-fBNE+fTSE-fBSE-fTNW+fBNW-fTSW+fBSW) * OORho; - //real mu202 =(fTE+fBW+fBE+fTW+fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - //real mu211 =(fTNE-fBNE-fTSE+fBSE+fTNW-fBNW-fTSW+fBSW) * OORho; - //real mu112 =(fTNE+fBNE-fTSE-fBSE-fTNW-fBNW+fTSW+fBSW) * OORho; - //real mu022 =(fTN+fBS+fBN+fTS+fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - //real mu221 =(fTNE-fBNE+fTSE-fBSE+fTNW-fBNW+fTSW-fBSW) * OORho; - //real mu122 =(fTNE-fTNW+fBNE-fBNW+fTSE-fTSW+fBSE-fBSW) * OORho; - //real mu212 =(fTNE+fBNE-fTSE-fBSE+fTNW+fBNW-fTSW-fBSW) * OORho; - //real mu222 =(fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mu200 = OORho * ((((fTNE+fBSW) + (fTNW+fBSE)) + ((fTSE+fBNW) + (fTSW+fBNE))) + ((fNE+fSW) + (fNW+fSE)) + ((fTE+fBW) + (fTW+fBE)) + (fE+fW) ); - real mu020 = OORho * ((((fTNE+fBSW) + (fTNW+fBSE)) + ((fTSE+fBNW) + (fTSW+fBNE))) + ((fNE+fSW) + (fNW+fSE)) + ((fTN+fBS) + (fTS+fBN)) + (fN+fS) ); - real mu002 = OORho * ((((fTNE+fBSW) + (fTNW+fBSE)) + ((fTSE+fBNW) + (fTSW+fBNE))) + ((fTE+fBW) + (fTW+fBE)) + ((fTN+fBS) + (fTS+fBN)) + (fT+fB)); - real mu110 = OORho * ((((fTNE+fBSW) - (fTNW+fBSE)) - ((fTSE+fBNW) - (fTSW+fBNE))) + ((fNE+fSW) - (fNW+fSE)) ); - real mu101 = OORho * ((((fTNE+fBSW) - (fTNW+fBSE)) + ((fTSE+fBNW) - (fTSW+fBNE))) + ((fTE+fBW) - (fTW+fBE)) ); - real mu011 = OORho * ((((fTNE+fBSW) + (fTNW+fBSE)) - ((fTSE+fBNW) + (fTSW+fBNE))) + ((fTN+fBS) - (fTS+fBN)) ); - real mu210 = OORho * ((((fTNE-fBSW) + (fTNW-fBSE)) - ((fTSE-fBNW) + (fTSW-fBNE))) + ((fNE-fSW) + (fNW-fSE)) ); - real mu120 = OORho * ((((fTNE-fBSW) - (fTNW-fBSE)) + ((fTSE-fBNW) - (fTSW-fBNE))) + ((fNE-fSW) + (fNW-fSE)) ); - real mu102 = OORho * ((((fTNE-fBSW) - (fTNW-fBSE)) + ((fTSE-fBNW) - (fTSW-fBNE))) + ((fTE-fBW) - (fTW-fBE)) ); - real mu111 = OORho * ((((fTNE-fBSW) - (fTNW-fBSE)) - ((fTSE-fBNW) - (fTSW-fBNE))) ); - real mu201 = OORho * ((((fTNE-fBSW) + (fTNW-fBSE)) + ((fTSE-fBNW) + (fTSW-fBNE))) + ((fTE-fBW) + (fTW-fBE)) ); - real mu021 = OORho * ((((fTNE-fBSW) + (fTNW-fBSE)) + ((fTSE-fBNW) + (fTSW-fBNE))) + ((fTN-fBS) + (fTS-fBN)) ); - real mu012 = OORho * ((((fTNE-fBSW) + (fTNW-fBSE)) - ((fTSE-fBNW) + (fTSW-fBNE))) + ((fTN-fBS) - (fTS-fBN)) ); - real mu220 = OORho * ((((fTNE+fBSW) + (fTNW+fBSE)) + ((fTSE+fBNW) + (fTSW+fBNE))) + ((fNE+fSW) + (fNW+fSE)) ); - real mu121 = OORho * ((((fTNE+fBSW) - (fTNW+fBSE)) + ((fTSE+fBNW) - (fTSW+fBNE))) ); - real mu202 = OORho * ((((fTNE+fBSW) + (fTNW+fBSE)) + ((fTSE+fBNW) + (fTSW+fBNE))) + ((fTE+fBW) + (fTW+fBE)) ); - real mu211 = OORho * ((((fTNE+fBSW) + (fTNW+fBSE)) - ((fTSE+fBNW) + (fTSW+fBNE))) ); - real mu112 = OORho * ((((fTNE+fBSW) - (fTNW+fBSE)) - ((fTSE+fBNW) - (fTSW+fBNE))) ); - real mu022 = OORho * ((((fTNE+fBSW) + (fTNW+fBSE)) + ((fTSE+fBNW) + (fTSW+fBNE))) + ((fTN+fBS) + (fTS+fBN)) ); - real mu221 = OORho * ((((fTNE-fBSW) + (fTNW-fBSE)) + ((fTSE-fBNW) + (fTSW-fBNE))) ); - real mu122 = OORho * ((((fTNE-fBSW) - (fTNW-fBSE)) + ((fTSE-fBNW) - (fTSW-fBNE))) ); - real mu212 = OORho * ((((fTNE-fBSW) + (fTNW-fBSE)) - ((fTSE-fBNW) + (fTSW-fBNE))) ); - real mu222 = OORho * ((((fTNE+fBSW) + (fTNW+fBSE)) + ((fTSE+fBNW) + (fTSW+fBNE))) ); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real MzXX,MzYY,MzZZ,MzXY,MzXZ,MzYZ,MzXXY,MzXYY,MzXXZ,MzXZZ,MzYYZ,MzYZZ,MzXYZ,MzXXYY,MzXXZZ,MzYYZZ,MzXXYZ,MzXYYZ,MzXYZZ,MzXXYYZ,MzXXYZZ,MzXYYZZ,MzXXYYZZ; - { - //2. - MzXX = mu200-vx2; - MzXY = mu110-vxy; - MzXZ = mu101-vxz; - MzYY = mu020-vy2; - MzYZ = mu011-vyz; - MzZZ = mu002-vz2; - - real pimpmu200 = mu200 + c1o3 * OORho; - real pimpmu020 = mu020 + c1o3 * OORho; - real pimpmu002 = mu002 + c1o3 * OORho; - - //3. - MzXXY = c2o1*vx2y - c2o1*vx*mu110 - vy*pimpmu200 + mu210; - MzXXZ = c2o1*vx2z - c2o1*vx*mu101 - vz*pimpmu200 + mu201; - MzXYY = c2o1*vxy2 - pimpmu020*vx - c2o1*vy*mu110 + mu120; - MzXYZ = c2o1*vxyz - mu011*vx-vy*mu101 -vz*mu110 + mu111; - MzXZZ = c2o1*vxz2 - pimpmu002*vx - c2o1*vz*mu101 + mu102; - MzYYZ = c2o1*vy2z - c2o1*vy*mu011 - vz*pimpmu020 + mu021; - MzYZZ = c2o1*vyz2 - pimpmu002*vy - c2o1*vz*mu011 + mu012; - - //4. - MzXXYY = /*-three*vx2y2+*/pimpmu020*vx2/*+four*vxy*mu110*/-c2o1*vx*mu120+vy2*pimpmu200-c2o1*vy*mu210+mu220; - MzXXYZ = /*-three*vx2yz+mu011*vx2+two*vxy*mu101+two*vxz*mu110-two*vx*mu111*/+vyz*pimpmu200-vy*mu201-vz*mu210+mu211; - MzXXZZ = /*-three*vx2z2+*/pimpmu002*vx2/*+four*vxz*mu101*/-c2o1*vx*mu102+vz2*pimpmu200-c2o1*vz*mu201+mu202; - MzXYYZ = /*-three*vxy2z+two*vxy*mu011*/+vxz*pimpmu020-mu021*vx/*+vy2*mu101+two*vyz*mu110-two*vy*mu111*/-vz*mu120+mu121; - MzXYZZ = /*-three*vxyz2+*/pimpmu002*vxy/*+two*vxz*mu011*/-mu012*vx/*+two*vyz*mu101*/-vy*mu102/*+vz2*mu110-two*vz*mu111*/+mu112; - MzYYZZ = /*-three*vy2z2+*/pimpmu002*vy2/*+four*vyz*mu011*/-c2o1*vy*mu012+vz2*pimpmu020-c2o1*vz*mu021+mu022; - - real pimpmu220 = mu220 + c1o9 * OORho; - real pimpmu202 = mu202 + c1o9 * OORho; - real pimpmu022 = mu022 + c1o9 * OORho; - - //5. - MzXXYYZ = /*four*(vx2y2z-vxyz*mu110+vxy*mu111)+*/ - c2o1*(vxz*mu120/*-vxy2*mu101-vx2y*mu011*/+vyz*mu210-vy*mu211-vx*mu121)+ - vy2*mu201-vx2z*pimpmu020+mu021*vx2-vz*pimpmu220-vy2z*pimpmu200+mu221; - MzXXYZZ = /*four*(vx2yz2-vxyz*mu101+vxz*mu111)+*/ - c2o1*(vxy*mu102/*-vxz2*mu110-vx2z*mu011*/-vx*mu112-vz*mu211+vyz*mu201)+ - vz2*mu210-vy*pimpmu202-pimpmu002*vx2y+mu012*vx2-vyz2*pimpmu200+mu212; - MzXYYZZ = /*four*(vxy2z2-vxyz*mu011+vyz*mu111)+*/ - c2o1*(vxy*mu012/*-vyz2*mu110*/-vy*mu112+vxz*mu021-vz*mu121/*-vy2z*mu101*/)+ - vy2*mu102+vz2*mu120-vxz2*pimpmu020-pimpmu022*vx-pimpmu002*vxy2+mu122; - - //6. - MzXXYYZZ = mu222 + pimpmu022*vx2 - c2o1*mu122*vx + pimpmu202*vy2 /*+ pimpmu002*vx2*vy2 - two*mu102*vx*vy2*/ - c2o1*mu212*vy /*- two*mu012*vx2*vy + four*mu112*vx*vy*/ + pimpmu220*vz2 /*+ pimpmu020*vx2*vz2 - two*mu120*vx*vz2 + - pimpmu200*vy2*vz2 - five*vx2*vy2*vz2 - two*mu210*vy*vz2 + 4.*mu110*vx*vy*vz2*/ - c2o1*mu221*vz /*- two*mu021*vx2*vz + four*mu121*vx*vz - two*mu201*vy2*vz + four*mu101*vx*vy2*vz + - four*mu211*vy*vz + four*mu011*vx2*vy*vz - eight*mu111*vx*vy*vz*/; - - //MzXXYYZZ = /*-five*vx2y2z2-eight*vxyz*mu111+*/vy2*pimpmu202/*+pimpmu002*vx2y2+vy2z2*pimpmu200+vx2z2*pimpmu020*/+vz2*pimpmu220+mu222+pimpmu022*vx2//+ - // /*four*(vx2yz*mu011+vxy2z*mu101+vxyz2*mu110+vxy*mu112+vxz*mu121+vyz*mu211)*/- - // two*(vy*mu212/*-vy2z*mu201-vxz2*mu120-vyz2*mu210-vxy2*mu102-vx2z*mu021-vx2y*mu012*/-vx*mu122-vz*mu221); - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real MXXpMYYpMZZ,MXXmMYY, MXXmMZZ, MXXYpMYZZ,MXXZpMYYZ,MXYYpMXZZ, MXXYmMYZZ,MXXZmMYYZ,MXYYmMXZZ; - { - //coll faktoren: - real w1 = (-omega); - real w2 = -c1o1;//(-omega); - real w3 = -(c2o1+(-omega));//-one; - real w4 = -(c2o1+(-omega));//-one; - real w5 = -(c2o1+(-omega));//-one; - real w6 = -c1o1; - real w7 = -c1o1; - real w8 = -c1o1; - real w9 = -c1o1; - real w10= -c1o1; - - real wadjust; - real qudricLimit = c1o100; - - ////////lin kombi bilden: - MXXpMYYpMZZ = MzXX + MzYY + MzZZ; - MXXmMYY = MzXX - MzYY; - MXXmMZZ = MzXX - MzZZ; - - MXXYpMYZZ = MzXXY+MzYZZ; - MXXYmMYZZ = MzXXY-MzYZZ; - MXXZpMYYZ = MzXXZ+MzYYZ; - MXXZmMYYZ = MzXXZ-MzYYZ; - MXYYpMXZZ = MzXYY+MzXZZ; - MXYYmMXZZ = MzXYY-MzXZZ; - - real MXXYYppp = MzXXYY + MzXXZZ + MzYYZZ; - real MXXYYpm2p = MzXXYY - c2o1*MzXXZZ + MzYYZZ; - real MXXYYppm2 = MzXXYY + MzXXZZ - c2o1*MzYYZZ; - - //relaxation: - MXXpMYYpMZZ -= w2*(c1o1-OORho-MXXpMYYpMZZ); - - MzXZ *= c1o1+w1; - MzYZ *= c1o1+w1; - MzXY *= c1o1+w1; - - - MXXmMYY *= c1o1+w1; - MXXmMZZ *= c1o1+w1; - - wadjust = w5-(c1o1+w5)*abs(MzXYZ)/(abs(MzXYZ)+qudricLimit); - MzXYZ *= c1o1+wadjust; - - wadjust = w3-(c1o1+w3)*abs(MXXYpMYZZ)/(abs(MXXYpMYZZ)+qudricLimit); - MXXYpMYZZ *= c1o1+wadjust; - wadjust = w3-(c1o1+w3)*abs(MXXZpMYYZ)/(abs(MXXZpMYYZ)+qudricLimit); - MXXZpMYYZ *= c1o1+wadjust; - wadjust = w3-(c1o1+w3)*abs(MXYYpMXZZ)/(abs(MXYYpMXZZ)+qudricLimit); - MXYYpMXZZ *= c1o1+wadjust; - wadjust = w4-(c1o1+w4)*abs(MXXYmMYZZ)/(abs(MXXYmMYZZ)+qudricLimit); - MXXYmMYZZ *= c1o1+wadjust; - wadjust = w4-(c1o1+w4)*abs(MXXZmMYYZ)/(abs(MXXZmMYYZ)+qudricLimit); - MXXZmMYYZ *= c1o1+wadjust; - wadjust = w4-(c1o1+w4)*abs(MXYYmMXZZ)/(abs(MXYYmMXZZ)+qudricLimit); - MXYYmMXZZ *= c1o1+wadjust; - - ////////von Lin Kombis zurueck: - MzXX = c1o3 * ( MXXmMYY + MXXmMZZ + MXXpMYYpMZZ + OORho); - MzYY = c1o3 * (-c2o1 * MXXmMYY + MXXmMZZ + MXXpMYYpMZZ + OORho); - MzZZ = c1o3 * ( MXXmMYY - c2o1 * MXXmMZZ + MXXpMYYpMZZ + OORho); - - MzXXY = (MXXYmMYZZ + MXXYpMYZZ)*c1o2; - MzYZZ = (MXXYpMYZZ - MXXYmMYZZ)*c1o2; - MzXYY = (MXYYmMXZZ + MXYYpMXZZ)*c1o2; - MzXZZ = (MXYYpMXZZ - MXYYmMXZZ)*c1o2; - MzXXZ = (MXXZmMYYZ + MXXZpMYYZ)*c1o2; - MzYYZ = (MXXZpMYYZ - MXXZmMYYZ)*c1o2; - - //faktorisierte atraktoren: - MXXYYppp -= w7*MzXX*MzYY + w7*MzXX*MzZZ + w7* MzZZ*MzYY - w7*MXXYYppp - w7*c1o3*OORho; - MXXYYpm2p -= w6*MzXX*MzYY - w6*c2o1*MzXX*MzZZ + w6* MzZZ*MzYY - w6*MXXYYpm2p; - MXXYYppm2 -= w6*MzXX*MzYY + w6* MzXX*MzZZ - w6*c2o1*MzZZ*MzYY - w6*MXXYYppm2; - MzXXYYZZ -= w10*MzXX*MzYY*MzZZ - w10*c1o27 - w10*MzXXYYZZ; - MzXYYZ -= w8*MzYY*MzXZ - w8*MzXYYZ; - MzXYZZ -= w8*MzZZ*MzXY - w8*MzXYZZ; - MzXXYZ -= w8*MzXX*MzYZ - w8*MzXXYZ; - - MzXXYYZ *= c1o1+w9; - MzXXYZZ *= c1o1+w9; - MzXYYZZ *= c1o1+w9; - - MzXXYY = c1o3 * (MXXYYpm2p + MXXYYppm2 + MXXYYppp); - MzXXZZ = c1o3 * (MXXYYppp - MXXYYpm2p); - MzYYZZ = c1o3 * (MXXYYppp-MXXYYppm2); - } - - //2. - mu200 = vx2 + c1o3 * (MXXmMYY + MXXmMZZ + MXXpMYYpMZZ); - mu020 = vy2 + c1o3 * (MXXmMZZ + MXXpMYYpMZZ - c2o1 * MXXmMYY); - mu002 = vz2 + c1o3 * (MXXmMYY - c2o1 * MXXmMZZ + MXXpMYYpMZZ); - mu110 = vxy + MzXY; - mu101 = vxz + MzXZ; - mu011 = vyz + MzYZ; - - //3. - mu111 = vxyz + vx*MzYZ + vy*MzXZ + vz*MzXY + MzXYZ; - mu210 = vx2y + c2o1*vx*MzXY + vy*MzXX + MzXXY; - mu120 = vxy2 + vx*MzYY + c2o1*vy*MzXY + MzXYY; - mu102 = vxz2 + vx*MzZZ + c2o1*vz*MzXZ + MzXZZ; - mu201 = vx2z + c2o1*vx*MzXZ + vz*MzXX + MzXXZ; - mu021 = vy2z + c2o1*vy*MzYZ + vz*MzYY + MzYYZ; - mu012 = vyz2 + vy*MzZZ + c2o1*vz*MzYZ + MzYZZ; - - //4. - mu211 = /*vx2yz + vx2*MzYZ + two*vxy*MzXZ + two*vxz*MzXY + two*vx*MzXYZ +*/ vyz*MzXX + vy*MzXXZ + vz*MzXXY + MzXXYZ; - mu121 = /*vxy2z + two*vxy*MzYZ +*/ vxz*MzYY + vx*MzYYZ /*+ vy2*MzXZ + two*vyz*MzXY + two*vy*MzXYZ*/ + vz*MzXYY + MzXYYZ; - mu112 = /*vxyz2 +*/ vxy*MzZZ /*+ two*vxz*MzYZ*/ + vx*MzYZZ /*+ two*vyz*MzXZ*/ + vy*MzXZZ /*+ vz2*MzXY + two*vz*MzXYZ*/ + MzXYZZ; - mu220 = /*vx2y2 +*/ vx2*MzYY /*+ 4.f*vxy*MzXY*/ + c2o1*vx*MzXYY + vy2*MzXX + c2o1*vy*MzXXY + MzXXYY ; - mu202 = /*vx2z2 +*/ vx2*MzZZ /*+ 4.f*vxz*MzXZ*/ + c2o1*vx*MzXZZ + vz2*MzXX + c2o1*vz*MzXXZ + MzXXZZ; - mu022 = /*vy2z2 +*/ vy2*MzZZ /*+ 4.f*vyz*MzYZ*/ + c2o1*vy*MzYZZ + vz2*MzYY + c2o1*vz*MzYYZ + MzYYZZ; - - MzXXYY += c1o9 * OORho; - MzXXZZ += c1o9 * OORho; - MzYYZZ += c1o9 * OORho; - - //5. - mu221 = /*vx2y2z+*/vx2z*MzYY+vx2*MzYYZ+vy2z*MzXX+vy2*MzXXZ+vz*MzXXYY+MzXXYYZ+ - /*four*(vxyz*MzXY+vxy*MzXYZ)+*/ - c2o1*(vxz*MzXYY+vx*MzXYYZ/*+vx2y*MzYZ*/+vyz*MzXXY+vy*MzXXYZ/*+vxy2*MzXZ*/); - mu212 = /*vx2yz2 +*/ vx2y*MzZZ + vx2*MzYZZ + vy*MzXXZZ + vz2*MzXXY + vyz2*MzXX+MzXXYZZ+ - /*four*(vxyz*MzXZ + vxz*MzXYZ)+*/ - c2o1*(vxy*MzXZZ /*+ vxz2*MzXY*/ + vx*MzXYZZ + vyz*MzXXZ /*+ vx2z*MzYZ*/ + vz*MzXXYZ); - mu122 = /*vxy2z2*/ + vxy2*MzZZ + MzXYYZZ + vz2*MzXYY + vy2*MzXZZ + vx*MzYYZZ + vxz2*MzYY+ - /*four*(vxyz*MzYZ + vyz*MzXYZ)+*/ - c2o1*(vxy*MzYZZ + vxz*MzYYZ/* + vy2z*MzXZ + vyz2*MzXY*/ + vy*MzXYZZ + vz*MzXYYZ); - - //6. - mu222 = /*vx2y2z2 + vx2y2*MzZZ + vx2z2*MzYY */+ vx2*MzYYZZ /*+ vy2z2*MzXX*/ + vy2*MzXXZZ + vz2*MzXXYY + MzXXYYZZ /*+ eight*vxyz*MzXYZ*/ + - c2o1*(/*vx2y*MzYZZ +*/ vx*MzXYYZZ + vz*MzXXYYZ /*+ vyz2*MzXXY + vx2z*MzYYZ + vxy2*MzXZZ + vxz2*MzXYY*/ + vy*MzXXYZZ/* + vy2z*MzXXZ*/);//+ - //four*(/*vxy2z*MzXZ + vx2yz*MzYZ + vxyz2*MzXY +*/ vxy*MzXYZZ + vxz*MzXYYZ + vyz*MzXXYZ); - - //(D.f[ DIR_P00 ])[k ] = c1o2*rho*( mu200 - mu220 + mu222 - mu202 + mu120 - mu122 + mu102 - vx ); //ke - //(D.f[ DIR_M00 ])[kw ] = c1o2*rho*( mu200 - mu220 + mu222 - mu202 - mu120 + mu122 - mu102 + vx ); - //(D.f[ DIR_0P0 ])[k ] = c1o2*rho*( mu210 - mu220 + mu222 - mu212 + mu020 - mu022 + mu012 - vy ); //kn - //(D.f[ DIR_0M0 ])[ks ] = c1o2*rho*(-mu210 - mu220 + mu222 + mu212 + mu020 - mu022 - mu012 + vy ); - //(D.f[ DIR_00P ])[k ] = c1o2*rho*(-mu221 + mu222 + mu201 - mu202 + mu021 - mu022 + mu002 - vz ); //kt - //(D.f[ DIR_00M ])[kb ] = c1o2*rho*( mu221 + mu222 - mu201 - mu202 - mu021 - mu022 + mu002 + vz ); - //(D.f[ DIR_PP0 ])[k ] = c1o4*rho*(-mu210 + mu220 - mu222 + mu212 + mu110 - mu120 + mu122 - mu112); //kne - //(D.f[ DIR_MM0 ])[ksw ] = c1o4*rho*( mu210 + mu220 - mu222 - mu212 + mu110 + mu120 - mu122 - mu112); - //(D.f[ DIR_PM0 ])[ks ] = c1o4*rho*( mu210 + mu220 - mu222 - mu212 - mu110 - mu120 + mu122 + mu112); //kse - //(D.f[ DIR_MP0 ])[kw ] = c1o4*rho*(-mu210 + mu220 - mu222 + mu212 - mu110 + mu120 - mu122 + mu112); //knw - //(D.f[ DIR_P0P ])[k ] = c1o4*rho*( mu221 - mu222 - mu201 + mu202 - mu121 + mu122 + mu101 - mu102); //kte - //(D.f[ DIR_M0M ])[kbw ] = c1o4*rho*(-mu221 - mu222 + mu201 + mu202 - mu121 - mu122 + mu101 + mu102); - //(D.f[ DIR_P0M ])[kb ] = c1o4*rho*(-mu221 - mu222 + mu201 + mu202 + mu121 + mu122 - mu101 - mu102); //kbe - //(D.f[ DIR_M0P ])[kw ] = c1o4*rho*( mu221 - mu222 - mu201 + mu202 + mu121 - mu122 - mu101 + mu102); //ktw - //(D.f[ DIR_0PP ])[k ] = c1o4*rho*( mu221 - mu222 - mu211 + mu212 - mu021 + mu022 + mu011 - mu012); //ktn - //(D.f[ DIR_0MM ])[kbs ] = c1o4*rho*(-mu221 - mu222 - mu211 - mu212 + mu021 + mu022 + mu011 + mu012); - //(D.f[ DIR_0PM ])[kb ] = c1o4*rho*(-mu221 - mu222 + mu211 + mu212 + mu021 + mu022 - mu011 - mu012); //kbn - //(D.f[ DIR_0MP ])[ks ] = c1o4*rho*( mu221 - mu222 + mu211 - mu212 - mu021 + mu022 - mu011 + mu012); //kts - //(D.f[ DIR_000])[k ] = rho*(-mu200 + mu220 - mu222 + mu202 - mu020 + mu022 - mu002 )+rho0; //kzero - //(D.f[ DIR_PPP ])[k ] = c1o8*rho*(-mu221 + mu222 + mu211 - mu212 + mu121 - mu122 - mu111 + mu112); //ktne - //(D.f[ DIR_PMP ])[ks ] = c1o8*rho*(-mu221 + mu222 - mu211 + mu212 + mu121 - mu122 + mu111 - mu112); //ktse - //(D.f[ DIR_PPM ])[kb ] = c1o8*rho*( mu221 + mu222 - mu211 - mu212 - mu121 - mu122 + mu111 + mu112); //kbne - //(D.f[ DIR_PMM ])[kbs ] = c1o8*rho*( mu221 + mu222 + mu211 + mu212 - mu121 - mu122 - mu111 - mu112); //kbse - //(D.f[ DIR_MPP ])[kw ] = c1o8*rho*(-mu221 + mu222 + mu211 - mu212 - mu121 + mu122 + mu111 - mu112); //ktnw - //(D.f[ DIR_MMP ])[ksw ] = c1o8*rho*(-mu221 + mu222 - mu211 + mu212 - mu121 + mu122 - mu111 + mu112); //ktsw - //(D.f[ DIR_MPM ])[kbw ] = c1o8*rho*( mu221 + mu222 - mu211 - mu212 + mu121 + mu122 - mu111 - mu112); //kbnw - //(D.f[ DIR_MMM ])[kbsw] = c1o8*rho*( mu221 + mu222 + mu211 + mu212 + mu121 + mu122 + mu111 + mu112); - (D.f[ DIR_P00 ])[k ] = c1o2*rho*(+ mu222 + ( - mu220 - mu202 ) + ( + mu200 ) + ( - mu122) + ( + mu102 + mu120) + ( - vx ) ); //ke - (D.f[ DIR_M00 ])[kw ] = c1o2*rho*(+ mu222 + ( - mu220 - mu202 ) + ( + mu200 ) + ( + mu122) + ( - mu102 - mu120) + ( + vx ) ); - (D.f[ DIR_0P0 ])[k ] = c1o2*rho*(+ mu222 + ( - mu220 - mu022) + ( + mu020 ) + ( - mu212 ) + ( + mu012 + mu210 ) + ( - vy ) ); //kn - (D.f[ DIR_0M0 ])[ks ] = c1o2*rho*(+ mu222 + ( - mu220 - mu022) + ( + mu020 ) + ( + mu212 ) + ( - mu012 - mu210 ) + ( + vy ) ); - (D.f[ DIR_00P ])[k ] = c1o2*rho*(+ mu222 + ( - mu202 - mu022) + ( + mu002) + ( - mu221 ) + ( + mu201 + mu021 ) + ( - vz ) ); //kt - (D.f[ DIR_00M ])[kb ] = c1o2*rho*(+ mu222 + ( - mu202 - mu022) + ( + mu002) + ( + mu221 ) + ( - mu201 - mu021 ) + ( + vz ) ); - (D.f[ DIR_PP0 ])[k ] = c1o4*rho*(- mu222 + ( - mu112 + mu220 ) + (+ mu110 ) + ( + mu212 + mu122) + ( - mu210 - mu120) ); //kne - (D.f[ DIR_MM0 ])[ksw ] = c1o4*rho*(- mu222 + ( - mu112 + mu220 ) + (+ mu110 ) + ( - mu212 - mu122) + ( + mu210 + mu120) ); - (D.f[ DIR_PM0 ])[ks ] = c1o4*rho*(- mu222 + ( + mu112 + mu220 ) + (- mu110 ) + ( - mu212 + mu122) + ( + mu210 - mu120) ); //kse - (D.f[ DIR_MP0 ])[kw ] = c1o4*rho*(- mu222 + ( + mu112 + mu220 ) + (- mu110 ) + ( + mu212 - mu122) + ( - mu210 + mu120) ); //knw - (D.f[ DIR_P0P ])[k ] = c1o4*rho*(- mu222 + ( - mu121 + mu202 ) + ( + mu101 ) + ( + mu221 + mu122) + ( - mu201 - mu102 ) ); //kte - (D.f[ DIR_M0M ])[kbw ] = c1o4*rho*(- mu222 + ( - mu121 + mu202 ) + ( + mu101 ) + ( - mu221 - mu122) + ( + mu201 + mu102 ) ); - (D.f[ DIR_P0M ])[kb ] = c1o4*rho*(- mu222 + ( + mu121 + mu202 ) + ( - mu101 ) + ( - mu221 + mu122) + ( + mu201 - mu102 ) ); //kbe - (D.f[ DIR_M0P ])[kw ] = c1o4*rho*(- mu222 + ( + mu121 + mu202 ) + ( - mu101 ) + ( + mu221 - mu122) + ( - mu201 + mu102 ) ); //ktw - (D.f[ DIR_0PP ])[k ] = c1o4*rho*(- mu222 + (- mu211 + mu022) + ( + mu011 ) + ( + mu221 + mu212 ) + ( - mu021 - mu012 ) ); //ktn - (D.f[ DIR_0MM ])[kbs ] = c1o4*rho*(- mu222 + (- mu211 + mu022) + ( + mu011 ) + ( - mu221 - mu212 ) + ( + mu021 + mu012 ) ); - (D.f[ DIR_0PM ])[kb ] = c1o4*rho*(- mu222 + (+ mu211 + mu022) + ( - mu011 ) + ( - mu221 + mu212 ) + ( + mu021 - mu012 ) ); //kbn - (D.f[ DIR_0MP ])[ks ] = c1o4*rho*(- mu222 + (+ mu211 + mu022) + ( - mu011 ) + ( + mu221 - mu212 ) + ( - mu021 + mu012 ) ); //kts - (D.f[ DIR_000])[k ] = rho*(- mu222 + ( + mu220 + mu202 + mu022) + ( - mu200 - mu020 - mu002) )+rho0; //kzero - (D.f[ DIR_PPP ])[k ] = c1o8*rho*(+ mu222 + (+ mu211 + mu121 + mu112 ) + ( - mu221 - mu212 - mu122) + ( - mu111 ) ); //ktne - (D.f[ DIR_PMP ])[ks ] = c1o8*rho*(+ mu222 + (- mu211 + mu121 - mu112 ) + ( - mu221 + mu212 - mu122) + ( + mu111 ) ); //ktse - (D.f[ DIR_PPM ])[kb ] = c1o8*rho*(+ mu222 + (- mu211 - mu121 + mu112 ) + ( + mu221 - mu212 - mu122) + ( + mu111 ) ); //kbne - (D.f[ DIR_PMM ])[kbs ] = c1o8*rho*(+ mu222 + (+ mu211 - mu121 - mu112 ) + ( + mu221 + mu212 - mu122) + ( - mu111 ) ); //kbse - (D.f[ DIR_MPP ])[kw ] = c1o8*rho*(+ mu222 + (+ mu211 - mu121 - mu112 ) + ( - mu221 - mu212 + mu122) + ( + mu111 ) ); //ktnw - (D.f[ DIR_MMP ])[ksw ] = c1o8*rho*(+ mu222 + (- mu211 - mu121 + mu112 ) + ( - mu221 + mu212 + mu122) + ( - mu111 ) ); //ktsw - (D.f[ DIR_MPM ])[kbw ] = c1o8*rho*(+ mu222 + (- mu211 + mu121 - mu112 ) + ( + mu221 - mu212 + mu122) + ( - mu111 ) ); //kbnw - (D.f[ DIR_MMM ])[kbsw] = c1o8*rho*(+ mu222 + (+ mu211 + mu121 + mu112 ) + ( + mu221 + mu212 + mu122) + ( + mu111 ) ); - - - ////////////////////////////////////////////////////////////////////////// - //BGK - ////////////////////////////////////////////////////////////////////////// - //(D.f[ DIR_P00 ])[k ] = fW ; - //(D.f[ DIR_M00 ])[kw ] = fE ; - //(D.f[ DIR_0P0 ])[k ] = fS ; - //(D.f[ DIR_0M0 ])[ks ] = fN ; - //(D.f[ DIR_00P ])[k ] = fB ; - //(D.f[ DIR_00M ])[kb ] = fT ; - //(D.f[ DIR_PP0 ])[k ] = fSW ; - //(D.f[ DIR_MM0 ])[ksw ] = fNE ; - //(D.f[ DIR_PM0 ])[ks ] = fNW ; - //(D.f[ DIR_MP0 ])[kw ] = fSE ; - //(D.f[ DIR_P0P ])[k ] = fBW ; - //(D.f[ DIR_M0M ])[kbw ] = fTE ; - //(D.f[ DIR_P0M ])[kb ] = fTW ; - //(D.f[ DIR_M0P ])[kw ] = fBE ; - //(D.f[ DIR_0PP ])[k ] = fBS ; - //(D.f[ DIR_0MM ])[kbs ] = fTN ; - //(D.f[ DIR_0PM ])[kb ] = fTS ; - //(D.f[ DIR_0MP ])[ks ] = fBN ; - //(D.f[ DIR_000])[k ] = fZERO ; - //(D.f[ DIR_PPP ])[k ] = fBSW ; - //(D.f[ DIR_PMP ])[ks ] = fBNW ; - //(D.f[ DIR_PPM ])[kb ] = fTSW ; - //(D.f[ DIR_PMM ])[kbs ] = fTNW ; - //(D.f[ DIR_MPP ])[kw ] = fBSE ; - //(D.f[ DIR_MMP ])[ksw ] = fBNE ; - //(D.f[ DIR_MPM ])[kbw ] = fTSE ; - //(D.f[ DIR_MMM ])[kbsw] = fTNE ; - } - } -} -//////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////// -__global__ void LB_Kernel_Casc_SP_MS_27( real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<numberOfLBnodes) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if( (BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real fE = (D.f[DIR_P00])[k ];//ke - real fW = (D.f[DIR_M00])[kw ]; - real fN = (D.f[DIR_0P0])[k ];//kn - real fS = (D.f[DIR_0M0])[ks ]; - real fT = (D.f[DIR_00P])[k ];//kt - real fB = (D.f[DIR_00M])[kb ]; - real fNE = (D.f[DIR_PP0])[k ];//kne - real fSW = (D.f[DIR_MM0])[ksw]; - real fSE = (D.f[DIR_PM0])[ks ];//kse - real fNW = (D.f[DIR_MP0])[kw ];//knw - real fTE = (D.f[DIR_P0P])[k ];//kte - real fBW = (D.f[DIR_M0M])[kbw]; - real fBE = (D.f[DIR_P0M])[kb ];//kbe - real fTW = (D.f[DIR_M0P])[kw ];//ktw - real fTN = (D.f[DIR_0PP])[k ];//ktn - real fBS = (D.f[DIR_0MM])[kbs]; - real fBN = (D.f[DIR_0PM])[kb ];//kbn - real fTS = (D.f[DIR_0MP])[ks ];//kts - real fZERO = (D.f[DIR_000])[k ];//kzero - real fTNE = (D.f[DIR_PPP])[k ];//ktne - real fTSW = (D.f[DIR_MMP])[ksw];//ktsw - real fTSE = (D.f[DIR_PMP])[ks ];//ktse - real fTNW = (D.f[DIR_MPP])[kw ];//ktnw - real fBNE = (D.f[DIR_PPM])[kb ];//kbne - real fBSW = (D.f[DIR_MMM])[kbsw]; - real fBSE = (D.f[DIR_PMM])[kbs];//kbse - real fBNW = (D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////// - real rho0 = fZERO+fE+fW+fN+fS+fT+fB+fNE+fSW+fSE+fNW+fTE+fBW+fBE+fTW+fTN+fBS+fBN+fTS+fTNE+fTSW+fTSE+fTNW+fBNE+fBSW+fBSE+fBNW; - real rho = rho0 + c1o1; - real OORho = c1o1/rho; - real vx = (fE -fW +fNE-fSW+fSE-fNW+fTE-fBW+fBE-fTW+ fTNE-fTSW+fTSE-fTNW+ fBNE-fBSW+fBSE-fBNW) * OORho; - real vy = (fN -fS +fNE-fSW-fSE+fNW+fTN-fBS+fBN-fTS+ fTNE-fTSW-fTSE+fTNW+ fBNE-fBSW-fBSE+fBNW) * OORho; - real vz = (fT -fB +fTE-fBW-fBE+fTW+fTN-fBS-fBN+fTS+ fTNE+fTSW+fTSE+fTNW- fBNE-fBSW-fBSE-fBNW) * OORho; - - ////////////////////////////////////////////////////////////////////////// - //BGK - ////////////////////////////////////////////////////////////////////////// - //real drho = fZERO+fE+fW+fN+fS+fT+fB+fNE+fSW+fSE+fNW+fTE+fBW+fBE+fTW+fTN+fBS+fBN+fTS+fTNE+fTSW+fTSE+fTNW+fBNE+fBSW+fBSE+fBNW; - //real vx1 = (fE -fW +fNE-fSW+fSE-fNW+fTE-fBW+fBE-fTW+ fTNE-fTSW+fTSE-fTNW+ fBNE-fBSW+fBSE-fBNW); - //real vx2 = (fN -fS +fNE-fSW-fSE+fNW+fTN-fBS+fBN-fTS+ fTNE-fTSW-fTSE+fTNW+ fBNE-fBSW-fBSE+fBNW); - //real vx3 = (fT -fB +fTE-fBW-fBE+fTW+fTN-fBS-fBN+fTS+ fTNE+fTSW+fTSE+fTNW- fBNE-fBSW-fBSE-fBNW); - - - //real cusq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - //fZERO = fZERO *(one+(-omega))-(-omega)* c8over27* (drho-cusq); - //fE = fE *(one+(-omega))-(-omega)* c2over27* (drho+three*( vx1 )+c9over2*( vx1 )*( vx1 )-cusq); - //fW = fW *(one+(-omega))-(-omega)* c2over27* (drho+three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cusq); - //fN = fN *(one+(-omega))-(-omega)* c2over27* (drho+three*( vx2 )+c9over2*( vx2 )*( vx2 )-cusq); - //fS = fS *(one+(-omega))-(-omega)* c2over27* (drho+three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cusq); - //fT = fT *(one+(-omega))-(-omega)* c2over27* (drho+three*( vx3)+c9over2*( vx3)*( vx3)-cusq); - //fB = fB *(one+(-omega))-(-omega)* c2over27* (drho+three*( -vx3)+c9over2*( -vx3)*( -vx3)-cusq); - //fNE = fNE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cusq); - //fSW = fSW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cusq); - //fSE = fSE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cusq); - //fNW = fNW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cusq); - //fTE = fTE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cusq); - //fBW = fBW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cusq); - //fBE = fBE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cusq); - //fTW = fTW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cusq); - //fTN = fTN *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cusq); - //fBS = fBS *(one+(-omega))-(-omega)* c1over54* (drho+three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cusq); - //fBN = fBN *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cusq); - //fTS = fTS *(one+(-omega))-(-omega)* c1over54* (drho+three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cusq); - //fTNE = fTNE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq); - //fBSW = fBSW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq); - //fBNE = fBNE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq); - //fTSW = fTSW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq); - //fTSE = fTSE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq); - //fBNW = fBNW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq); - //fBSE = fBSE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq); - //fTNW = fTNW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq); - - - real vx2 = vx*vx; - real vy2 = vy*vy; - real vz2 = vz*vz; - real vxy = vx*vy; - real vxz = vx*vz; - real vyz = vy*vz; - real vx2y = vx*vx*vy; - real vx2z = vx*vx*vz; - real vy2z = vy*vy*vz; - real vxy2 = vx*vy*vy; - real vyz2 = vy*vz*vz; - real vxz2 = vx*vz*vz; - real vxyz = vx*vy*vz; - real vx2y2 = vx*vx*vy*vy; - real vx2z2 = vx*vx*vz*vz; - real vy2z2 = vy*vy*vz*vz; - real vx2yz = vx*vx*vy*vz; - real vxyz2 = vx*vy*vz*vz; - real vxy2z = vx*vy*vy*vz; - real vx2y2z = vx*vx*vy*vy*vz; - real vx2yz2 = vx*vx*vy*vz*vz; - real vxy2z2 = vx*vy*vy*vz*vz; - real vx2y2z2= vx*vx*vy*vy*vz*vz; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mu200 =(fE+fW+fNE+fSW+fSE+fNW+fTE+fBW+fBE+fTW+fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - real mu020 =(fN+fS+fNE+fSW+fSE+fNW+fTN+fBS+fBN+fTS+fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - real mu002 =(fT+fB+fTE+fBW+fBE+fTW+fTN+fBS+fBN+fTS+fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - real mu110 =(fNE-fSE+fSW-fNW+fTNE-fTSE+fBNE-fBSE+fTSW-fTNW+fBSW-fBNW) * OORho; - real mu101 =(fTE+fBW-fBE-fTW+fTNE-fBNE+fTSE-fBSE-fTNW+fBNW-fTSW+fBSW) * OORho; - real mu011 =(fTN+fBS-fBN-fTS+fTNE-fBNE-fTSE+fBSE+fTNW-fBNW-fTSW+fBSW) * OORho; - real mu210 =(fNE-fSW-fSE+fNW+fTNE+fBNE-fTSE-fBSE+fTNW+fBNW-fTSW-fBSW) * OORho; - real mu120 =(fNE-fSW+fSE-fNW+fTNE-fTNW+fBNE-fBNW+fTSE-fTSW+fBSE-fBSW) * OORho; - real mu102 =(fTE-fBW+fBE-fTW+fTNE-fTNW+fBNE-fBNW+fTSE-fTSW+fBSE-fBSW) * OORho; - real mu111 =(fTNE-fBNE-fTSE+fBSE-fTNW+fBNW+fTSW-fBSW) * OORho; - real mu201 =(fTE-fBW-fBE+fTW+fTNE-fBNE+fTSE-fBSE+fTNW-fBNW+fTSW-fBSW) * OORho; - real mu021 =(fTN-fBS-fBN+fTS+fTNE-fBNE+fTSE-fBSE+fTNW-fBNW+fTSW-fBSW) * OORho; - real mu012 =(fTN-fBS+fBN-fTS+fTNE+fBNE-fTSE-fBSE+fTNW+fBNW-fTSW-fBSW) * OORho; - real mu220 =(fNE+fSW+fSE+fNW+fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - real mu121 =(fTNE-fBNE+fTSE-fBSE-fTNW+fBNW-fTSW+fBSW) * OORho; - real mu202 =(fTE+fBW+fBE+fTW+fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - real mu211 =(fTNE-fBNE-fTSE+fBSE+fTNW-fBNW-fTSW+fBSW) * OORho; - real mu112 =(fTNE+fBNE-fTSE-fBSE-fTNW-fBNW+fTSW+fBSW) * OORho; - real mu022 =(fTN+fBS+fBN+fTS+fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - real mu221 =(fTNE-fBNE+fTSE-fBSE+fTNW-fBNW+fTSW-fBSW) * OORho; - real mu122 =(fTNE-fTNW+fBNE-fBNW+fTSE-fTSW+fBSE-fBSW) * OORho; - real mu212 =(fTNE+fBNE-fTSE-fBSE+fTNW+fBNW-fTSW-fBSW) * OORho; - real mu222 =(fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real MzXX,MzYY,MzZZ,MzXY,MzXZ,MzYZ,MzXXY,MzXYY,MzXXZ,MzXZZ,MzYYZ,MzYZZ,MzXYZ,MzXXYY,MzXXZZ,MzYYZZ,MzXXYZ,MzXYYZ,MzXYZZ,MzXXYYZ,MzXXYZZ,MzXYYZZ,MzXXYYZZ; - { - //2. - MzXX = mu200-vx2; - MzXY = mu110-vxy; - MzXZ = mu101-vxz; - MzYY = mu020-vy2; - MzYZ = mu011-vyz; - MzZZ = mu002-vz2; - - real pimpmu200 = mu200 + c1o3 * OORho; - real pimpmu020 = mu020 + c1o3 * OORho; - real pimpmu002 = mu002 + c1o3 * OORho; - - //3. - MzXXY = c2o1*vx2y - c2o1*vx*mu110 - vy*pimpmu200 + mu210; - MzXXZ = c2o1*vx2z - c2o1*vx*mu101 - vz*pimpmu200 + mu201; - MzXYY = c2o1*vxy2 - pimpmu020*vx - c2o1*vy*mu110 + mu120; - MzXYZ = c2o1*vxyz - mu011*vx-vy*mu101 -vz*mu110 + mu111; - MzXZZ = c2o1*vxz2 - pimpmu002*vx - c2o1*vz*mu101 + mu102; - MzYYZ = c2o1*vy2z - c2o1*vy*mu011 - vz*pimpmu020 + mu021; - MzYZZ = c2o1*vyz2 - pimpmu002*vy - c2o1*vz*mu011 + mu012; - - //4. - MzXXYY = -c3o1*vx2y2+pimpmu020*vx2+c4o1*vxy*mu110-c2o1*vx*mu120+vy2*pimpmu200-c2o1*vy*mu210+mu220; - MzXXYZ = -c3o1*vx2yz+mu011*vx2+c2o1*vxy*mu101+c2o1*vxz*mu110-c2o1*vx*mu111+vyz*pimpmu200-vy*mu201-vz*mu210+mu211; - MzXXZZ = -c3o1*vx2z2+pimpmu002*vx2+c4o1*vxz*mu101-c2o1*vx*mu102+vz2*pimpmu200-c2o1*vz*mu201+mu202; - MzXYYZ = -c3o1*vxy2z+c2o1*vxy*mu011+vxz*pimpmu020-mu021*vx+vy2*mu101+c2o1*vyz*mu110-c2o1*vy*mu111-vz*mu120+mu121; - MzXYZZ = -c3o1*vxyz2+pimpmu002*vxy+c2o1*vxz*mu011-mu012*vx+c2o1*vyz*mu101-vy*mu102+vz2*mu110-c2o1*vz*mu111+mu112; - MzYYZZ = -c3o1*vy2z2+pimpmu002*vy2+c4o1*vyz*mu011-c2o1*vy*mu012+vz2*pimpmu020-c2o1*vz*mu021+mu022; - - real pimpmu220 = mu220 + c1o9 * OORho; - real pimpmu202 = mu202 + c1o9 * OORho; - real pimpmu022 = mu022 + c1o9 * OORho; - - //5. - MzXXYYZ = c4o1*vx2y2z-c4o1*vxyz*mu110+c4o1*vxy*mu111+ - c2o1*(vxz*mu120-vxy2*mu101-vx2y*mu011+vyz*mu210-vy*mu211-vx*mu121)+ - vy2*mu201-vx2z*pimpmu020+mu021*vx2-vz*pimpmu220-vy2z*pimpmu200+mu221; - MzXXYZZ = c4o1*(vx2yz2-vxyz*mu101+vxz*mu111)+ - c2o1*(vxy*mu102-vxz2*mu110-vx2z*mu011-vx*mu112-vz*mu211+vyz*mu201)+ - vz2*mu210-vy*pimpmu202-pimpmu002*vx2y+mu012*vx2-vyz2*pimpmu200+mu212; - MzXYYZZ = c4o1*(vxy2z2-vxyz*mu011+vyz*mu111)+ - c2o1*(vxy*mu012-vyz2*mu110-vy*mu112+vxz*mu021-vz*mu121-vy2z*mu101)+ - vy2*mu102+vz2*mu120-vxz2*pimpmu020-pimpmu022*vx-pimpmu002*vxy2+mu122; - - //6. - MzXXYYZZ = mu222 + pimpmu022*vx2 - c2o1*mu122*vx + pimpmu202*vy2 + pimpmu002*vx2*vy2 - c2o1*mu102*vx*vy2 - c2o1*mu212*vy - c2o1*mu012*vx2*vy + c4o1*mu112*vx*vy + pimpmu220*vz2 + pimpmu020*vx2*vz2 - c2o1*mu120*vx*vz2 + - pimpmu200*vy2*vz2 - c5o1*vx2*vy2*vz2 - c2o1*mu210*vy*vz2 + c4o1*mu110*vx*vy*vz2 - c2o1*mu221*vz - c2o1*mu021*vx2*vz + c4o1*mu121*vx*vz - c2o1*mu201*vy2*vz + c4o1*mu101*vx*vy2*vz + - c4o1*mu211*vy*vz + c4o1*mu011*vx2*vy*vz - c8o1*mu111*vx*vy*vz; - //MzXXYYZZ = -five*vx2y2z2-eight*vxyz*mu111+vy2*pimpmu202+pimpmu002*vx2y2+vy2z2*pimpmu200+vx2z2*pimpmu020+vz2*pimpmu220+mu222+pimpmu022*vx2+ - // four*(vx2yz*mu011+vxy2z*mu101+vxyz2*mu110+vxy*mu112+vxz*mu121+vyz*mu211)- - // two*(vy*mu212-vy2z*mu201-vxz2*mu120-vyz2*mu210-vxy2*mu102-vx2z*mu021-vx2y*mu012-vx*mu122-vz*mu221); - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real MXXpMYYpMZZ,MXXmMYY, MXXmMZZ, MXXYpMYZZ,MXXZpMYYZ,MXYYpMXZZ, MXXYmMYZZ,MXXZmMYYZ,MXYYmMXZZ; - { - //coll faktoren: - real w1 = -omega; - real w2 = -c1o1;//-omega; - real w3 = -c1o1; - real w4 = -c1o1; - real w5 = -c1o1; - real w6 = -c1o1; - real w7 = -c1o1; - real w8 = -c1o1; - real w9 = -c1o1; - real w10= -c1o1; - - ////////lin kombi bilden: - MXXpMYYpMZZ = MzXX + MzYY + MzZZ; - MXXmMYY = MzXX - MzYY; - MXXmMZZ = MzXX - MzZZ; - - MXXYpMYZZ = MzXXY+MzYZZ; - MXXYmMYZZ = MzXXY-MzYZZ; - MXXZpMYYZ = MzXXZ+MzYYZ; - MXXZmMYYZ = MzXXZ-MzYYZ; - MXYYpMXZZ = MzXYY+MzXZZ; - MXYYmMXZZ = MzXYY-MzXZZ; - - real MXXYYppp = MzXXYY + MzXXZZ + MzYYZZ; - real MXXYYpm2p = MzXXYY - c2o1*MzXXZZ + MzYYZZ; - real MXXYYppm2 = MzXXYY + MzXXZZ - c2o1*MzYYZZ; - - //relaxation: - MXXpMYYpMZZ -= w2*(c1o1-OORho-MXXpMYYpMZZ); - - MzXZ *= c1o1+w1; - MzYZ *= c1o1+w1; - MzXY *= c1o1+w1; - - MzXYZ *= c1o1+w5; - - MXXmMYY *= c1o1+w1; - MXXmMZZ *= c1o1+w1; - - MXXYpMYZZ *= c1o1+w3; - MXXYmMYZZ *= c1o1+w4; - MXXZpMYYZ *= c1o1+w3; - MXXZmMYYZ *= c1o1+w4; - MXYYpMXZZ *= c1o1+w3; - MXYYmMXZZ *= c1o1+w4; - - ////////von Lin Kombis zurueck: - MzXX = c1o3 * ( MXXmMYY + MXXmMZZ + MXXpMYYpMZZ + OORho); - MzYY = c1o3 * (-c2o1 * MXXmMYY + MXXmMZZ + MXXpMYYpMZZ + OORho); - MzZZ = c1o3 * ( MXXmMYY - c2o1 * MXXmMZZ + MXXpMYYpMZZ + OORho); - - MzXXY = (MXXYmMYZZ + MXXYpMYZZ)*c1o2; - MzYZZ = (MXXYpMYZZ - MXXYmMYZZ)*c1o2; - MzXYY = (MXYYmMXZZ + MXYYpMXZZ)*c1o2; - MzXZZ = (MXYYpMXZZ - MXYYmMXZZ)*c1o2; - MzXXZ = (MXXZmMYYZ + MXXZpMYYZ)*c1o2; - MzYYZ = (MXXZpMYYZ - MXXZmMYYZ)*c1o2; - - //faktorisierte atraktoren: - MXXYYppp -= w7*MzXX*MzYY + w7*MzXX*MzZZ + w7* MzZZ*MzYY - w7*MXXYYppp - w7*c1o3*OORho; - MXXYYpm2p -= w6*MzXX*MzYY - w6*c2o1*MzXX*MzZZ + w6* MzZZ*MzYY - w6*MXXYYpm2p; - MXXYYppm2 -= w6*MzXX*MzYY + w6* MzXX*MzZZ - w6*c2o1*MzZZ*MzYY - w6*MXXYYppm2; - MzXXYYZZ -= w10*MzXX*MzYY*MzZZ - w10*c1o27 - w10*MzXXYYZZ; - MzXYYZ -= w8*MzYY*MzXZ - w8*MzXYYZ; - MzXYZZ -= w8*MzZZ*MzXY - w8*MzXYZZ; - MzXXYZ -= w8*MzXX*MzYZ - w8*MzXXYZ; - - MzXXYYZ *= c1o1+w9; - MzXXYZZ *= c1o1+w9; - MzXYYZZ *= c1o1+w9; - - MzXXYY = c1o3 * (MXXYYpm2p + MXXYYppm2 + MXXYYppp); - MzXXZZ = c1o3 * (MXXYYppp - MXXYYpm2p); - MzYYZZ = c1o3 * (MXXYYppp-MXXYYppm2); - } - - //2. - mu200 = vx2 + c1o3 * (MXXmMYY + MXXmMZZ + MXXpMYYpMZZ); - mu020 = vy2 + c1o3 * (MXXmMZZ + MXXpMYYpMZZ - c2o1 * MXXmMYY); - mu002 = vz2 + c1o3 * (MXXmMYY - c2o1 * MXXmMZZ + MXXpMYYpMZZ); - mu110 = vxy + MzXY; - mu101 = vxz + MzXZ; - mu011 = vyz + MzYZ; - - //3. - mu111 = vxyz + vx*MzYZ + vy*MzXZ + vz*MzXY + MzXYZ; - mu210 = vx2y + c2o1*vx*MzXY + vy*MzXX + MzXXY; - mu120 = vxy2 + vx*MzYY + c2o1*vy*MzXY + MzXYY; - mu102 = vxz2 + vx*MzZZ + c2o1*vz*MzXZ + MzXZZ; - mu201 = vx2z + c2o1*vx*MzXZ + vz*MzXX + MzXXZ; - mu021 = vy2z + c2o1*vy*MzYZ + vz*MzYY + MzYYZ; - mu012 = vyz2 + vy*MzZZ + c2o1*vz*MzYZ + MzYZZ; - - //4. - mu211 = vx2yz + vx2*MzYZ + c2o1*vxy*MzXZ + c2o1*vxz*MzXY + c2o1*vx*MzXYZ + vyz*MzXX + vy*MzXXZ + vz*MzXXY + MzXXYZ; - mu121 = vxy2z + c2o1*vxy*MzYZ + vxz*MzYY + vx*MzYYZ + vy2*MzXZ + c2o1*vyz*MzXY + c2o1*vy*MzXYZ + vz*MzXYY + MzXYYZ; - mu112 = vxyz2 + vxy*MzZZ + c2o1*vxz*MzYZ + vx*MzYZZ + c2o1*vyz*MzXZ + vy*MzXZZ + vz2*MzXY + c2o1*vz*MzXYZ + MzXYZZ; - mu220 = vx2y2 + vx2*MzYY + c4o1*vxy*MzXY + c2o1*vx*MzXYY + vy2*MzXX + c2o1*vy*MzXXY + MzXXYY ; - mu202 = vx2z2 + vx2*MzZZ + c4o1*vxz*MzXZ + c2o1*vx*MzXZZ + vz2*MzXX + c2o1*vz*MzXXZ + MzXXZZ; - mu022 = vy2z2 + vy2*MzZZ + c4o1*vyz*MzYZ + c2o1*vy*MzYZZ + vz2*MzYY + c2o1*vz*MzYYZ + MzYYZZ; - - MzXXYY += c1o9 * OORho; - MzXXZZ += c1o9 * OORho; - MzYYZZ += c1o9 * OORho; - - //5. - mu221 = vx2y2z+vx2z*MzYY+vx2*MzYYZ+vy2z*MzXX+vy2*MzXXZ+vz*MzXXYY+MzXXYYZ+ - c4o1*(vxyz*MzXY+vxy*MzXYZ)+ - c2o1*(vxz*MzXYY+vx*MzXYYZ+vx2y*MzYZ+vyz*MzXXY+vy*MzXXYZ+vxy2*MzXZ); - mu212 = vx2yz2 + vx2y*MzZZ + vx2*MzYZZ + vy*MzXXZZ + vz2*MzXXY + vyz2*MzXX+MzXXYZZ+ - c4o1*(vxyz*MzXZ + vxz*MzXYZ)+ - c2o1*(vxy*MzXZZ + vxz2*MzXY + vx*MzXYZZ + vyz*MzXXZ + vx2z*MzYZ + vz*MzXXYZ); - mu122 = vxy2z2 + vxy2*MzZZ + MzXYYZZ + vz2*MzXYY + vy2*MzXZZ + vx*MzYYZZ + vxz2*MzYY+ - c4o1*(vxyz*MzYZ + vyz*MzXYZ)+ - c2o1*(vxy*MzYZZ + vxz*MzYYZ + vy2z*MzXZ + vyz2*MzXY + vy*MzXYZZ + vz*MzXYYZ); - - //6. - mu222 = vx2y2z2 + vx2y2*MzZZ + vx2z2*MzYY + vx2*MzYYZZ + vy2z2*MzXX + vy2*MzXXZZ + vz2*MzXXYY + MzXXYYZZ + c8o1*vxyz*MzXYZ + - c2o1*(vx2y*MzYZZ + vx*MzXYYZZ + vz*MzXXYYZ + vyz2*MzXXY + vx2z*MzYYZ + vxy2*MzXZZ + vxz2*MzXYY + vy*MzXXYZZ + vy2z*MzXXZ)+ - c4o1*(vxy2z*MzXZ + vx2yz*MzYZ + vxyz2*MzXY + vxy*MzXYZZ + vxz*MzXYYZ + vyz*MzXXYZ); - - (D.f[ DIR_P00 ])[k ] = c1o2*rho*( mu200 - mu220 + mu222 - mu202 + mu120 - mu122 + mu102 - vx ); //ke - (D.f[ DIR_M00 ])[kw ] = c1o2*rho*( mu200 - mu220 + mu222 - mu202 - mu120 + mu122 - mu102 + vx ); - (D.f[ DIR_0P0 ])[k ] = c1o2*rho*( mu210 - mu220 + mu222 - mu212 + mu020 - mu022 + mu012 - vy ); //kn - (D.f[ DIR_0M0 ])[ks ] = c1o2*rho*(-mu210 - mu220 + mu222 + mu212 + mu020 - mu022 - mu012 + vy ); - (D.f[ DIR_00P ])[k ] = c1o2*rho*(-mu221 + mu222 + mu201 - mu202 + mu021 - mu022 + mu002 - vz ); //kt - (D.f[ DIR_00M ])[kb ] = c1o2*rho*( mu221 + mu222 - mu201 - mu202 - mu021 - mu022 + mu002 + vz ); - (D.f[ DIR_PP0 ])[k ] = c1o4*rho*(-mu210 + mu220 - mu222 + mu212 + mu110 - mu120 + mu122 - mu112); //kne - (D.f[ DIR_MM0 ])[ksw ] = c1o4*rho*( mu210 + mu220 - mu222 - mu212 + mu110 + mu120 - mu122 - mu112); - (D.f[ DIR_PM0 ])[ks ] = c1o4*rho*( mu210 + mu220 - mu222 - mu212 - mu110 - mu120 + mu122 + mu112); //kse - (D.f[ DIR_MP0 ])[kw ] = c1o4*rho*(-mu210 + mu220 - mu222 + mu212 - mu110 + mu120 - mu122 + mu112); //knw - (D.f[ DIR_P0P ])[k ] = c1o4*rho*( mu221 - mu222 - mu201 + mu202 - mu121 + mu122 + mu101 - mu102); //kte - (D.f[ DIR_M0M ])[kbw ] = c1o4*rho*(-mu221 - mu222 + mu201 + mu202 - mu121 - mu122 + mu101 + mu102); - (D.f[ DIR_P0M ])[kb ] = c1o4*rho*(-mu221 - mu222 + mu201 + mu202 + mu121 + mu122 - mu101 - mu102); //kbe - (D.f[ DIR_M0P ])[kw ] = c1o4*rho*( mu221 - mu222 - mu201 + mu202 + mu121 - mu122 - mu101 + mu102); //ktw - (D.f[ DIR_0PP ])[k ] = c1o4*rho*( mu221 - mu222 - mu211 + mu212 - mu021 + mu022 + mu011 - mu012); //ktn - (D.f[ DIR_0MM ])[kbs ] = c1o4*rho*(-mu221 - mu222 - mu211 - mu212 + mu021 + mu022 + mu011 + mu012); - (D.f[ DIR_0PM ])[kb ] = c1o4*rho*(-mu221 - mu222 + mu211 + mu212 + mu021 + mu022 - mu011 - mu012); //kbn - (D.f[ DIR_0MP ])[ks ] = c1o4*rho*( mu221 - mu222 + mu211 - mu212 - mu021 + mu022 - mu011 + mu012); //kts - (D.f[ DIR_000])[k ] = rho*(-mu200 + mu220 - mu222 + mu202 - mu020 + mu022 - mu002 )+rho0; //kzero - (D.f[ DIR_PPP ])[k ] = c1o8*rho*(-mu221 + mu222 + mu211 - mu212 + mu121 - mu122 - mu111 + mu112); //ktne - (D.f[ DIR_PMP ])[ks ] = c1o8*rho*(-mu221 + mu222 - mu211 + mu212 + mu121 - mu122 + mu111 - mu112); //ktse - (D.f[ DIR_PPM ])[kb ] = c1o8*rho*( mu221 + mu222 - mu211 - mu212 - mu121 - mu122 + mu111 + mu112); //kbne - (D.f[ DIR_PMM ])[kbs ] = c1o8*rho*( mu221 + mu222 + mu211 + mu212 - mu121 - mu122 - mu111 - mu112); //kbse - (D.f[ DIR_MPP ])[kw ] = c1o8*rho*(-mu221 + mu222 + mu211 - mu212 - mu121 + mu122 + mu111 - mu112); //ktnw - (D.f[ DIR_MMP ])[ksw ] = c1o8*rho*(-mu221 + mu222 - mu211 + mu212 - mu121 + mu122 - mu111 + mu112); //ktsw - (D.f[ DIR_MPM ])[kbw ] = c1o8*rho*( mu221 + mu222 - mu211 - mu212 + mu121 + mu122 - mu111 - mu112); //kbnw - (D.f[ DIR_MMM ])[kbsw] = c1o8*rho*( mu221 + mu222 + mu211 + mu212 + mu121 + mu122 + mu111 + mu112); - - - ////////////////////////////////////////////////////////////////////////// - //BGK - ////////////////////////////////////////////////////////////////////////// - //(D.f[ DIR_P00 ])[k ] = fW ; - //(D.f[ DIR_M00 ])[kw ] = fE ; - //(D.f[ DIR_0P0 ])[k ] = fS ; - //(D.f[ DIR_0M0 ])[ks ] = fN ; - //(D.f[ DIR_00P ])[k ] = fB ; - //(D.f[ DIR_00M ])[kb ] = fT ; - //(D.f[ DIR_PP0 ])[k ] = fSW ; - //(D.f[ DIR_MM0 ])[ksw ] = fNE ; - //(D.f[ DIR_PM0 ])[ks ] = fNW ; - //(D.f[ DIR_MP0 ])[kw ] = fSE ; - //(D.f[ DIR_P0P ])[k ] = fBW ; - //(D.f[ DIR_M0M ])[kbw ] = fTE ; - //(D.f[ DIR_P0M ])[kb ] = fTW ; - //(D.f[ DIR_M0P ])[kw ] = fBE ; - //(D.f[ DIR_0PP ])[k ] = fBS ; - //(D.f[ DIR_0MM ])[kbs ] = fTN ; - //(D.f[ DIR_0PM ])[kb ] = fTS ; - //(D.f[ DIR_0MP ])[ks ] = fBN ; - //(D.f[ DIR_000])[k ] = fZERO ; - //(D.f[ DIR_PPP ])[k ] = fBSW ; - //(D.f[ DIR_PMP ])[ks ] = fBNW ; - //(D.f[ DIR_PPM ])[kb ] = fTSW ; - //(D.f[ DIR_PMM ])[kbs ] = fTNW ; - //(D.f[ DIR_MPP ])[kw ] = fBSE ; - //(D.f[ DIR_MMP ])[ksw ] = fBNE ; - //(D.f[ DIR_MPM ])[kbw ] = fTSE ; - //(D.f[ DIR_MMM ])[kbsw] = fTNE ; - } - } -} -//////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////// -__global__ void LB_Kernel_Casc_SP_MS_Diff_27(real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<numberOfLBnodes) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if( (BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real fE = (D.f[DIR_P00])[k ];//ke - real fW = (D.f[DIR_M00])[kw ]; - real fN = (D.f[DIR_0P0])[k ];//kn - real fS = (D.f[DIR_0M0])[ks ]; - real fT = (D.f[DIR_00P])[k ];//kt - real fB = (D.f[DIR_00M])[kb ]; - real fNE = (D.f[DIR_PP0])[k ];//kne - real fSW = (D.f[DIR_MM0])[ksw]; - real fSE = (D.f[DIR_PM0])[ks ];//kse - real fNW = (D.f[DIR_MP0])[kw ];//knw - real fTE = (D.f[DIR_P0P])[k ];//kte - real fBW = (D.f[DIR_M0M])[kbw]; - real fBE = (D.f[DIR_P0M])[kb ];//kbe - real fTW = (D.f[DIR_M0P])[kw ];//ktw - real fTN = (D.f[DIR_0PP])[k ];//ktn - real fBS = (D.f[DIR_0MM])[kbs]; - real fBN = (D.f[DIR_0PM])[kb ];//kbn - real fTS = (D.f[DIR_0MP])[ks ];//kts - real fZERO = (D.f[DIR_000])[k ];//kzero - real fTNE = (D.f[DIR_PPP])[k ];//ktne - real fTSW = (D.f[DIR_MMP])[ksw];//ktsw - real fTSE = (D.f[DIR_PMP])[ks ];//ktse - real fTNW = (D.f[DIR_MPP])[kw ];//ktnw - real fBNE = (D.f[DIR_PPM])[kb ];//kbne - real fBSW = (D.f[DIR_MMM])[kbsw]; - real fBSE = (D.f[DIR_PMM])[kbs];//kbse - real fBNW = (D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////// - real rho0 = fZERO+fE+fW+fN+fS+fT+fB+fNE+fSW+fSE+fNW+fTE+fBW+fBE+fTW+fTN+fBS+fBN+fTS+fTNE+fTSW+fTSE+fTNW+fBNE+fBSW+fBSE+fBNW; - real rho = rho0 + c1o1; - real OORho = c1o1/rho; - real vx = (fE -fW +fNE-fSW+fSE-fNW+fTE-fBW+fBE-fTW+ fTNE-fTSW+fTSE-fTNW+ fBNE-fBSW+fBSE-fBNW) * OORho; - real vy = (fN -fS +fNE-fSW-fSE+fNW+fTN-fBS+fBN-fTS+ fTNE-fTSW-fTSE+fTNW+ fBNE-fBSW-fBSE+fBNW) * OORho; - real vz = (fT -fB +fTE-fBW-fBE+fTW+fTN-fBS-fBN+fTS+ fTNE+fTSW+fTSE+fTNW- fBNE-fBSW-fBSE-fBNW) * OORho; - - ////////////////////////////////////////////////////////////////////////// - //BGK - ////////////////////////////////////////////////////////////////////////// - //real drho = fZERO+fE+fW+fN+fS+fT+fB+fNE+fSW+fSE+fNW+fTE+fBW+fBE+fTW+fTN+fBS+fBN+fTS+fTNE+fTSW+fTSE+fTNW+fBNE+fBSW+fBSE+fBNW; - //real vx1 = (fE -fW +fNE-fSW+fSE-fNW+fTE-fBW+fBE-fTW+ fTNE-fTSW+fTSE-fTNW+ fBNE-fBSW+fBSE-fBNW); - //real vx2 = (fN -fS +fNE-fSW-fSE+fNW+fTN-fBS+fBN-fTS+ fTNE-fTSW-fTSE+fTNW+ fBNE-fBSW-fBSE+fBNW); - //real vx3 = (fT -fB +fTE-fBW-fBE+fTW+fTN-fBS-fBN+fTS+ fTNE+fTSW+fTSE+fTNW- fBNE-fBSW-fBSE-fBNW); - - - //real cusq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - //fZERO = fZERO *(one+(-omega))-(-omega)* c8over27* (drho-cusq); - //fE = fE *(one+(-omega))-(-omega)* c2over27* (drho+three*( vx1 )+c9over2*( vx1 )*( vx1 )-cusq); - //fW = fW *(one+(-omega))-(-omega)* c2over27* (drho+three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cusq); - //fN = fN *(one+(-omega))-(-omega)* c2over27* (drho+three*( vx2 )+c9over2*( vx2 )*( vx2 )-cusq); - //fS = fS *(one+(-omega))-(-omega)* c2over27* (drho+three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cusq); - //fT = fT *(one+(-omega))-(-omega)* c2over27* (drho+three*( vx3)+c9over2*( vx3)*( vx3)-cusq); - //fB = fB *(one+(-omega))-(-omega)* c2over27* (drho+three*( -vx3)+c9over2*( -vx3)*( -vx3)-cusq); - //fNE = fNE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cusq); - //fSW = fSW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cusq); - //fSE = fSE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cusq); - //fNW = fNW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cusq); - //fTE = fTE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cusq); - //fBW = fBW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cusq); - //fBE = fBE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cusq); - //fTW = fTW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cusq); - //fTN = fTN *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cusq); - //fBS = fBS *(one+(-omega))-(-omega)* c1over54* (drho+three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cusq); - //fBN = fBN *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cusq); - //fTS = fTS *(one+(-omega))-(-omega)* c1over54* (drho+three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cusq); - //fTNE = fTNE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq); - //fBSW = fBSW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq); - //fBNE = fBNE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq); - //fTSW = fTSW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq); - //fTSE = fTSE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq); - //fBNW = fBNW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq); - //fBSE = fBSE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq); - //fTNW = fTNW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq); - - - real vx2 = vx*vx; - real vy2 = vy*vy; - real vz2 = vz*vz; - real vxy = vx*vy; - real vxz = vx*vz; - real vyz = vy*vz; - real vx2y = vx*vx*vy; - real vx2z = vx*vx*vz; - real vy2z = vy*vy*vz; - real vxy2 = vx*vy*vy; - real vyz2 = vy*vz*vz; - real vxz2 = vx*vz*vz; - real vxyz = vx*vy*vz; - real vx2y2 = vx*vx*vy*vy; - real vx2z2 = vx*vx*vz*vz; - real vy2z2 = vy*vy*vz*vz; - real vx2yz = vx*vx*vy*vz; - real vxyz2 = vx*vy*vz*vz; - real vxy2z = vx*vy*vy*vz; - real vx2y2z = vx*vx*vy*vy*vz; - real vx2yz2 = vx*vx*vy*vz*vz; - real vxy2z2 = vx*vy*vy*vz*vz; - real vx2y2z2= vx*vx*vy*vy*vz*vz; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mu200 =(fE+fW+fNE+fSW+fSE+fNW+fTE+fBW+fBE+fTW+fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - real mu020 =(fN+fS+fNE+fSW+fSE+fNW+fTN+fBS+fBN+fTS+fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - real mu002 =(fT+fB+fTE+fBW+fBE+fTW+fTN+fBS+fBN+fTS+fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - real mu110 =(fNE-fSE+fSW-fNW+fTNE-fTSE+fBNE-fBSE+fTSW-fTNW+fBSW-fBNW) * OORho; - real mu101 =(fTE+fBW-fBE-fTW+fTNE-fBNE+fTSE-fBSE-fTNW+fBNW-fTSW+fBSW) * OORho; - real mu011 =(fTN+fBS-fBN-fTS+fTNE-fBNE-fTSE+fBSE+fTNW-fBNW-fTSW+fBSW) * OORho; - real mu210 =(fNE-fSW-fSE+fNW+fTNE+fBNE-fTSE-fBSE+fTNW+fBNW-fTSW-fBSW) * OORho; - real mu120 =(fNE-fSW+fSE-fNW+fTNE-fTNW+fBNE-fBNW+fTSE-fTSW+fBSE-fBSW) * OORho; - real mu102 =(fTE-fBW+fBE-fTW+fTNE-fTNW+fBNE-fBNW+fTSE-fTSW+fBSE-fBSW) * OORho; - real mu111 =(fTNE-fBNE-fTSE+fBSE-fTNW+fBNW+fTSW-fBSW) * OORho; - real mu201 =(fTE-fBW-fBE+fTW+fTNE-fBNE+fTSE-fBSE+fTNW-fBNW+fTSW-fBSW) * OORho; - real mu021 =(fTN-fBS-fBN+fTS+fTNE-fBNE+fTSE-fBSE+fTNW-fBNW+fTSW-fBSW) * OORho; - real mu012 =(fTN-fBS+fBN-fTS+fTNE+fBNE-fTSE-fBSE+fTNW+fBNW-fTSW-fBSW) * OORho; - real mu220 =(fNE+fSW+fSE+fNW+fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - real mu121 =(fTNE-fBNE+fTSE-fBSE-fTNW+fBNW-fTSW+fBSW) * OORho; - real mu202 =(fTE+fBW+fBE+fTW+fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - real mu211 =(fTNE-fBNE-fTSE+fBSE+fTNW-fBNW-fTSW+fBSW) * OORho; - real mu112 =(fTNE+fBNE-fTSE-fBSE-fTNW-fBNW+fTSW+fBSW) * OORho; - real mu022 =(fTN+fBS+fBN+fTS+fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - real mu221 =(fTNE-fBNE+fTSE-fBSE+fTNW-fBNW+fTSW-fBSW) * OORho; - real mu122 =(fTNE-fTNW+fBNE-fBNW+fTSE-fTSW+fBSE-fBSW) * OORho; - real mu212 =(fTNE+fBNE-fTSE-fBSE+fTNW+fBNW-fTSW-fBSW) * OORho; - real mu222 =(fTNE+fBNE+fTSE+fBSE+fTNW+fBNW+fTSW+fBSW) * OORho; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real MzXX,MzYY,MzZZ,MzXY,MzXZ,MzYZ,MzXXY,MzXYY,MzXXZ,MzXZZ,MzYYZ,MzYZZ,MzXYZ,MzXXYY,MzXXZZ,MzYYZZ,MzXXYZ,MzXYYZ,MzXYZZ,MzXXYYZ,MzXXYZZ,MzXYYZZ,MzXXYYZZ; - { - //2. - MzXX = mu200-vx2; - MzXY = mu110-vxy; - MzXZ = mu101-vxz; - MzYY = mu020-vy2; - MzYZ = mu011-vyz; - MzZZ = mu002-vz2; - - real pimpmu200 = mu200 + c1o3 * OORho; - real pimpmu020 = mu020 + c1o3 * OORho; - real pimpmu002 = mu002 + c1o3 * OORho; - - //3. - MzXXY = c2o1*vx2y - c2o1*vx*mu110 - vy*pimpmu200 + mu210; - MzXXZ = c2o1*vx2z - c2o1*vx*mu101 - vz*pimpmu200 + mu201; - MzXYY = c2o1*vxy2 - pimpmu020*vx - c2o1*vy*mu110 + mu120; - MzXYZ = c2o1*vxyz - mu011*vx-vy*mu101 -vz*mu110 + mu111; - MzXZZ = c2o1*vxz2 - pimpmu002*vx - c2o1*vz*mu101 + mu102; - MzYYZ = c2o1*vy2z - c2o1*vy*mu011 - vz*pimpmu020 + mu021; - MzYZZ = c2o1*vyz2 - pimpmu002*vy - c2o1*vz*mu011 + mu012; - - //4. - MzXXYY = -c3o1*vx2y2+pimpmu020*vx2+c4o1*vxy*mu110-c2o1*vx*mu120+vy2*pimpmu200-c2o1*vy*mu210+mu220; - MzXXYZ = -c3o1*vx2yz+mu011*vx2+c2o1*vxy*mu101+c2o1*vxz*mu110-c2o1*vx*mu111+vyz*pimpmu200-vy*mu201-vz*mu210+mu211; - MzXXZZ = -c3o1*vx2z2+pimpmu002*vx2+c4o1*vxz*mu101-c2o1*vx*mu102+vz2*pimpmu200-c2o1*vz*mu201+mu202; - MzXYYZ = -c3o1*vxy2z+c2o1*vxy*mu011+vxz*pimpmu020-mu021*vx+vy2*mu101+c2o1*vyz*mu110-c2o1*vy*mu111-vz*mu120+mu121; - MzXYZZ = -c3o1*vxyz2+pimpmu002*vxy+c2o1*vxz*mu011-mu012*vx+c2o1*vyz*mu101-vy*mu102+vz2*mu110-c2o1*vz*mu111+mu112; - MzYYZZ = -c3o1*vy2z2+pimpmu002*vy2+c4o1*vyz*mu011-c2o1*vy*mu012+vz2*pimpmu020-c2o1*vz*mu021+mu022; - - real pimpmu220 = mu220 + c1o9 * OORho; - real pimpmu202 = mu202 + c1o9 * OORho; - real pimpmu022 = mu022 + c1o9 * OORho; - - //5. - MzXXYYZ = c4o1*vx2y2z-c4o1*vxyz*mu110+c4o1*vxy*mu111+ - c2o1*(vxz*mu120-vxy2*mu101-vx2y*mu011+vyz*mu210-vy*mu211-vx*mu121)+ - vy2*mu201-vx2z*pimpmu020+mu021*vx2-vz*pimpmu220-vy2z*pimpmu200+mu221; - MzXXYZZ = c4o1*(vx2yz2-vxyz*mu101+vxz*mu111)+ - c2o1*(vxy*mu102-vxz2*mu110-vx2z*mu011-vx*mu112-vz*mu211+vyz*mu201)+ - vz2*mu210-vy*pimpmu202-pimpmu002*vx2y+mu012*vx2-vyz2*pimpmu200+mu212; - MzXYYZZ = c4o1*(vxy2z2-vxyz*mu011+vyz*mu111)+ - c2o1*(vxy*mu012-vyz2*mu110-vy*mu112+vxz*mu021-vz*mu121-vy2z*mu101)+ - vy2*mu102+vz2*mu120-vxz2*pimpmu020-pimpmu022*vx-pimpmu002*vxy2+mu122; - - //6. - MzXXYYZZ = -c5o1*vx2y2z2-c8o1*vxyz*mu111+vy2*pimpmu202+pimpmu002*vx2y2+vy2z2*pimpmu200+vx2z2*pimpmu020+vz2*pimpmu220+mu222+pimpmu022*vx2+ - c4o1*(vx2yz*mu011+vxy2z*mu101+vxyz2*mu110+vxy*mu112+vxz*mu121+vyz*mu211)- - c2o1*(vy*mu212-vy2z*mu201-vxz2*mu120-vyz2*mu210-vxy2*mu102-vx2z*mu021-vx2y*mu012-vx*mu122-vz*mu221); - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real MXXpMYYpMZZ,MXXmMYY, MXXmMZZ, MXXYpMYZZ,MXXZpMYYZ,MXYYpMXZZ, MXXYmMYZZ,MXXZmMYYZ,MXYYmMXZZ; - { - //coll faktoren: - real w1 = -omega; - real w2 = -c1o1;//-omega; - real w3 = -c1o1; - real w4 = -c1o1; - real w5 = -c1o1; - real w6 = -c1o1; - real w7 = -c1o1; - real w8 = -c1o1; - real w9 = -c1o1; - real w10= -c1o1; - - ////////lin kombi bilden: - MXXpMYYpMZZ = MzXX + MzYY + MzZZ; - MXXmMYY = MzXX - MzYY; - MXXmMZZ = MzXX - MzZZ; - - MXXYpMYZZ = MzXXY+MzYZZ; - MXXYmMYZZ = MzXXY-MzYZZ; - MXXZpMYYZ = MzXXZ+MzYYZ; - MXXZmMYYZ = MzXXZ-MzYYZ; - MXYYpMXZZ = MzXYY+MzXZZ; - MXYYmMXZZ = MzXYY-MzXZZ; - - real MXXYYppp = MzXXYY + MzXXZZ + MzYYZZ; - real MXXYYpm2p = MzXXYY - c2o1*MzXXZZ + MzYYZZ; - real MXXYYppm2 = MzXXYY + MzXXZZ - c2o1*MzYYZZ; - - //relaxation: - MXXpMYYpMZZ -= w2*(c1o1-OORho-MXXpMYYpMZZ); - - MzXZ *= c1o1+w1; - MzYZ *= c1o1+w1; - MzXY *= c1o1+w1; - - MzXYZ *= c1o1+w5; - - MXXmMYY *= c1o1+w1; - MXXmMZZ *= c1o1+w1; - - MXXYpMYZZ *= c1o1+w3; - MXXYmMYZZ *= c1o1+w4; - MXXZpMYYZ *= c1o1+w3; - MXXZmMYYZ *= c1o1+w4; - MXYYpMXZZ *= c1o1+w3; - MXYYmMXZZ *= c1o1+w4; - - ////////von Lin Kombis zurueck: - MzXX = c1o3 * ( MXXmMYY + MXXmMZZ + MXXpMYYpMZZ + OORho); - MzYY = c1o3 * (-c2o1 * MXXmMYY + MXXmMZZ + MXXpMYYpMZZ + OORho); - MzZZ = c1o3 * ( MXXmMYY - c2o1 * MXXmMZZ + MXXpMYYpMZZ + OORho); - - MzXXY = (MXXYmMYZZ + MXXYpMYZZ)*c1o2; - MzYZZ = (MXXYpMYZZ - MXXYmMYZZ)*c1o2; - MzXYY = (MXYYmMXZZ + MXYYpMXZZ)*c1o2; - MzXZZ = (MXYYpMXZZ - MXYYmMXZZ)*c1o2; - MzXXZ = (MXXZmMYYZ + MXXZpMYYZ)*c1o2; - MzYYZ = (MXXZpMYYZ - MXXZmMYYZ)*c1o2; - - //faktorisierte atraktoren: - MXXYYppp -= w7*MzXX*MzYY + w7*MzXX*MzZZ + w7* MzZZ*MzYY - w7*MXXYYppp - w7*c1o3; - MXXYYpm2p -= w6*MzXX*MzYY - w6*c2o1*MzXX*MzZZ + w6* MzZZ*MzYY - w6*MXXYYpm2p; - MXXYYppm2 -= w6*MzXX*MzYY + w6* MzXX*MzZZ - w6*c2o1*MzZZ*MzYY - w6*MXXYYppm2; - MzXXYYZZ -= w10*MzXX*MzYY*MzZZ - w10*c1o27 - w10*MzXXYYZZ; - MzXYYZ -= w8*MzYY*MzXZ - w8*MzXYYZ; - MzXYZZ -= w8*MzZZ*MzXY - w8*MzXYZZ; - MzXXYZ -= w8*MzXX*MzYZ - w8*MzXXYZ; - - MzXXYYZ *= c1o1+w9; - MzXXYZZ *= c1o1+w9; - MzXYYZZ *= c1o1+w9; - - MzXXYY = c1o3 * (MXXYYpm2p + MXXYYppm2 + MXXYYppp); - MzXXZZ = c1o3 * (MXXYYppp - MXXYYpm2p); - MzYYZZ = c1o3 * (MXXYYppp-MXXYYppm2); - } - - //2. - mu200 -= vx2 + c1o3 * (MXXmMYY + MXXmMZZ + MXXpMYYpMZZ); - mu020 -= vy2 + c1o3 * (MXXmMZZ + MXXpMYYpMZZ - c2o1 * MXXmMYY); - mu002 -= vz2 + c1o3 * (MXXmMYY - c2o1 * MXXmMZZ + MXXpMYYpMZZ); - mu110 -= vxy + MzXY; - mu101 -= vxz + MzXZ; - mu011 -= vyz + MzYZ; - - //3. - mu111 -= vxyz + vx*MzYZ + vy*MzXZ + vz*MzXY + MzXYZ; - mu210 -= vx2y + c2o1*vx*MzXY + vy*MzXX + MzXXY; - mu120 -= vxy2 + vx*MzYY + c2o1*vy*MzXY + MzXYY; - mu102 -= vxz2 + vx*MzZZ + c2o1*vz*MzXZ + MzXZZ; - mu201 -= vx2z + c2o1*vx*MzXZ + vz*MzXX + MzXXZ; - mu021 -= vy2z + c2o1*vy*MzYZ + vz*MzYY + MzYYZ; - mu012 -= vyz2 + vy*MzZZ + c2o1*vz*MzYZ + MzYZZ; - - //4. - mu211 -= vx2yz + vx2*MzYZ + c2o1*vxy*MzXZ + c2o1*vxz*MzXY + c2o1*vx*MzXYZ + vyz*MzXX + vy*MzXXZ + vz*MzXXY + MzXXYZ; - mu121 -= vxy2z + c2o1*vxy*MzYZ + vxz*MzYY + vx*MzYYZ + vy2*MzXZ + c2o1*vyz*MzXY + c2o1*vy*MzXYZ + vz*MzXYY + MzXYYZ; - mu112 -= vxyz2 + vxy*MzZZ + c2o1*vxz*MzYZ + vx*MzYZZ + c2o1*vyz*MzXZ + vy*MzXZZ + vz2*MzXY + c2o1*vz*MzXYZ + MzXYZZ; - mu220 -= vx2y2 + vx2*MzYY + c4o1*vxy*MzXY + c2o1*vx*MzXYY + vy2*MzXX + c2o1*vy*MzXXY + MzXXYY ; - mu202 -= vx2z2 + vx2*MzZZ + c4o1*vxz*MzXZ + c2o1*vx*MzXZZ + vz2*MzXX + c2o1*vz*MzXXZ + MzXXZZ; - mu022 -= vy2z2 + vy2*MzZZ + c4o1*vyz*MzYZ + c2o1*vy*MzYZZ + vz2*MzYY + c2o1*vz*MzYYZ + MzYYZZ; - - MzXXYY += c1o9 * OORho; - MzXXZZ += c1o9 * OORho; - MzYYZZ += c1o9 * OORho; - - //5. - mu221 -= vx2y2z+vx2z*MzYY+vx2*MzYYZ+vy2z*MzXX+vy2*MzXXZ+vz*MzXXYY+MzXXYYZ+ - c4o1*(vxyz*MzXY+vxy*MzXYZ)+ - c2o1*(vxz*MzXYY+vx*MzXYYZ+vx2y*MzYZ+vyz*MzXXY+vy*MzXXYZ+vxy2*MzXZ); - mu212 -= vx2yz2 + vx2y*MzZZ + vx2*MzYZZ + vy*MzXXZZ + vz2*MzXXY + vyz2*MzXX+MzXXYZZ+ - c4o1*(vxyz*MzXZ + vxz*MzXYZ)+ - c2o1*(vxy*MzXZZ + vxz2*MzXY + vx*MzXYZZ + vyz*MzXXZ + vx2z*MzYZ + vz*MzXXYZ); - mu122 -= vxy2z2 + vxy2*MzZZ + MzXYYZZ + vz2*MzXYY + vy2*MzXZZ + vx*MzYYZZ + vxz2*MzYY+ - c4o1*(vxyz*MzYZ + vyz*MzXYZ)+ - c2o1*(vxy*MzYZZ + vxz*MzYYZ + vy2z*MzXZ + vyz2*MzXY + vy*MzXYZZ + vz*MzXYYZ); - - //6. - mu222 -= vx2y2z2 + vx2y2*MzZZ + vx2z2*MzYY + vx2*MzYYZZ + vy2z2*MzXX + vy2*MzXXZZ + vz2*MzXXYY + MzXXYYZZ + c8o1*vxyz*MzXYZ + - c2o1*(vx2y*MzYZZ + vx*MzXYYZZ + vz*MzXXYYZ + vyz2*MzXXY + vx2z*MzYYZ + vxy2*MzXZZ + vxz2*MzXYY + vy*MzXXYZZ + vy2z*MzXXZ)+ - c4o1*(vxy2z*MzXZ + vx2yz*MzYZ + vxyz2*MzXY + vxy*MzXYZZ + vxz*MzXYYZ + vyz*MzXXYZ); - - (D.f[ DIR_P00 ])[k ] = fW - c1o2*rho*( mu200 - mu220 + mu222 - mu202 + mu120 - mu122 + mu102 ); //ke - (D.f[ DIR_M00 ])[kw ] = fE - c1o2*rho*( mu200 - mu220 + mu222 - mu202 - mu120 + mu122 - mu102 ); - (D.f[ DIR_0P0 ])[k ] = fS - c1o2*rho*( mu210 - mu220 + mu222 - mu212 + mu020 - mu022 + mu012 ); //kn - (D.f[ DIR_0M0 ])[ks ] = fN - c1o2*rho*(-mu210 - mu220 + mu222 + mu212 + mu020 - mu022 - mu012 ); - (D.f[ DIR_00P ])[k ] = fB - c1o2*rho*(-mu221 + mu222 + mu201 - mu202 + mu021 - mu022 + mu002 ); //kt - (D.f[ DIR_00M ])[kb ] = fT - c1o2*rho*( mu221 + mu222 - mu201 - mu202 - mu021 - mu022 + mu002 ); - (D.f[ DIR_PP0 ])[k ] = fSW - c1o4*rho*(-mu210 + mu220 - mu222 + mu212 + mu110 - mu120 + mu122 - mu112); //kne - (D.f[ DIR_MM0 ])[ksw ] = fNE - c1o4*rho*( mu210 + mu220 - mu222 - mu212 + mu110 + mu120 - mu122 - mu112); - (D.f[ DIR_PM0 ])[ks ] = fNW - c1o4*rho*( mu210 + mu220 - mu222 - mu212 - mu110 - mu120 + mu122 + mu112); //kse - (D.f[ DIR_MP0 ])[kw ] = fSE - c1o4*rho*(-mu210 + mu220 - mu222 + mu212 - mu110 + mu120 - mu122 + mu112); //knw - (D.f[ DIR_P0P ])[k ] = fBW - c1o4*rho*( mu221 - mu222 - mu201 + mu202 - mu121 + mu122 + mu101 - mu102); //kte - (D.f[ DIR_M0M ])[kbw ] = fTE - c1o4*rho*(-mu221 - mu222 + mu201 + mu202 - mu121 - mu122 + mu101 + mu102); - (D.f[ DIR_P0M ])[kb ] = fTW - c1o4*rho*(-mu221 - mu222 + mu201 + mu202 + mu121 + mu122 - mu101 - mu102); //kbe - (D.f[ DIR_M0P ])[kw ] = fBE - c1o4*rho*( mu221 - mu222 - mu201 + mu202 + mu121 - mu122 - mu101 + mu102); //ktw - (D.f[ DIR_0PP ])[k ] = fBS - c1o4*rho*( mu221 - mu222 - mu211 + mu212 - mu021 + mu022 + mu011 - mu012); //ktn - (D.f[ DIR_0MM ])[kbs ] = fTN - c1o4*rho*(-mu221 - mu222 - mu211 - mu212 + mu021 + mu022 + mu011 + mu012); - (D.f[ DIR_0PM ])[kb ] = fTS - c1o4*rho*(-mu221 - mu222 + mu211 + mu212 + mu021 + mu022 - mu011 - mu012); //kbn - (D.f[ DIR_0MP ])[ks ] = fBN - c1o4*rho*( mu221 - mu222 + mu211 - mu212 - mu021 + mu022 - mu011 + mu012); //kts - (D.f[ DIR_000])[k ] = fZERO - rho*(-mu200 + mu220 - mu222 + mu202 - mu020 + mu022 - mu002 ); //kzero - (D.f[ DIR_PPP ])[k ] = fBSW - c1o8*rho*(-mu221 + mu222 + mu211 - mu212 + mu121 - mu122 - mu111 + mu112); //ktne - (D.f[ DIR_PMP ])[ks ] = fBNW - c1o8*rho*(-mu221 + mu222 - mu211 + mu212 + mu121 - mu122 + mu111 - mu112); //ktse - (D.f[ DIR_PPM ])[kb ] = fTSW - c1o8*rho*( mu221 + mu222 - mu211 - mu212 - mu121 - mu122 + mu111 + mu112); //kbne - (D.f[ DIR_PMM ])[kbs ] = fTNW - c1o8*rho*( mu221 + mu222 + mu211 + mu212 - mu121 - mu122 - mu111 - mu112); //kbse - (D.f[ DIR_MPP ])[kw ] = fBSE - c1o8*rho*(-mu221 + mu222 + mu211 - mu212 - mu121 + mu122 + mu111 - mu112); //ktnw - (D.f[ DIR_MMP ])[ksw ] = fBNE - c1o8*rho*(-mu221 + mu222 - mu211 + mu212 - mu121 + mu122 - mu111 + mu112); //ktsw - (D.f[ DIR_MPM ])[kbw ] = fTSE - c1o8*rho*( mu221 + mu222 - mu211 - mu212 + mu121 + mu122 - mu111 - mu112); //kbnw - (D.f[ DIR_MMM ])[kbsw] = fTNE - c1o8*rho*( mu221 + mu222 + mu211 + mu212 + mu121 + mu122 + mu111 + mu112); - - - ////////////////////////////////////////////////////////////////////////// - //BGK - ////////////////////////////////////////////////////////////////////////// - //(D.f[ DIR_P00 ])[k ] = fW ; - //(D.f[ DIR_M00 ])[kw ] = fE ; - //(D.f[ DIR_0P0 ])[k ] = fS ; - //(D.f[ DIR_0M0 ])[ks ] = fN ; - //(D.f[ DIR_00P ])[k ] = fB ; - //(D.f[ DIR_00M ])[kb ] = fT ; - //(D.f[ DIR_PP0 ])[k ] = fSW ; - //(D.f[ DIR_MM0 ])[ksw ] = fNE ; - //(D.f[ DIR_PM0 ])[ks ] = fNW ; - //(D.f[ DIR_MP0 ])[kw ] = fSE ; - //(D.f[ DIR_P0P ])[k ] = fBW ; - //(D.f[ DIR_M0M ])[kbw ] = fTE ; - //(D.f[ DIR_P0M ])[kb ] = fTW ; - //(D.f[ DIR_M0P ])[kw ] = fBE ; - //(D.f[ DIR_0PP ])[k ] = fBS ; - //(D.f[ DIR_0MM ])[kbs ] = fTN ; - //(D.f[ DIR_0PM ])[kb ] = fTS ; - //(D.f[ DIR_0MP ])[ks ] = fBN ; - //(D.f[ DIR_000])[k ] = fZERO ; - //(D.f[ DIR_PPP ])[k ] = fBSW ; - //(D.f[ DIR_PMP ])[ks ] = fBNW ; - //(D.f[ DIR_PPM ])[kb ] = fTSW ; - //(D.f[ DIR_PMM ])[kbs ] = fTNW ; - //(D.f[ DIR_MPP ])[kw ] = fBSE ; - //(D.f[ DIR_MMP ])[ksw ] = fBNE ; - //(D.f[ DIR_MPM ])[kbw ] = fTSE ; - //(D.f[ DIR_MMM ])[kbsw] = fTNE ; - } - } -} -//////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////// -__global__ void LB_Kernel_Casc_SP_27( real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<numberOfLBnodes) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if( (BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int kzero= k; - unsigned int ke = k; - unsigned int kw = neighborX[k]; - unsigned int kn = k; - unsigned int ks = neighborY[k]; - unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = k; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = k; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = k; - 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 = k; - unsigned int kbsw = neighborZ[ksw]; - //unsigned int nxny = nx*ny; - //unsigned int kzero= k; - //unsigned int ke = k; - //unsigned int kw = k + 1; - //unsigned int kn = k; - //unsigned int ks = k + nx; - //unsigned int kt = k; - //unsigned int kb = k + nxny; - //unsigned int ksw = k + nx + 1; - //unsigned int kne = k; - //unsigned int kse = k + nx; - //unsigned int knw = k + 1; - //unsigned int kbw = k + nxny + 1; - //unsigned int kte = k; - //unsigned int kbe = k + nxny; - //unsigned int ktw = k + 1; - //unsigned int kbs = k + nxny + nx; - //unsigned int ktn = k; - //unsigned int kbn = k + nxny; - //unsigned int kts = k + nx; - //unsigned int ktse = k + nx; - //unsigned int kbnw = k + nxny + 1; - //unsigned int ktnw = k + 1; - //unsigned int kbse = k + nxny + nx; - //unsigned int ktsw = k + nx + 1; - //unsigned int kbne = k + nxny; - //unsigned int ktne = k; - //unsigned int kbsw = k + nxny + nx + 1; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - 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_ZERO, f_TNE,f_TNW,f_TSE,f_TSW, f_BNE,f_BNW,f_BSE,f_BSW; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - f_E = (D.f[DIR_P00])[ke]+c2o27; - f_W = (D.f[DIR_M00])[kw]+c2o27; - f_N = (D.f[DIR_0P0])[kn]+c2o27; - f_S = (D.f[DIR_0M0])[ks]+c2o27; - f_T = (D.f[DIR_00P])[kt]+c2o27; - f_B = (D.f[DIR_00M])[kb]+c2o27; - f_NE = (D.f[DIR_PP0])[kne]+c1o54; - f_SW = (D.f[DIR_MM0])[ksw]+c1o54; - f_SE = (D.f[DIR_PM0])[kse]+c1o54; - f_NW = (D.f[DIR_MP0])[knw]+c1o54; - f_TE = (D.f[DIR_P0P])[kte]+c1o54; - f_BW = (D.f[DIR_M0M])[kbw]+c1o54; - f_BE = (D.f[DIR_P0M])[kbe]+c1o54; - f_TW = (D.f[DIR_M0P])[ktw]+c1o54; - f_TN = (D.f[DIR_0PP])[ktn]+c1o54; - f_BS = (D.f[DIR_0MM])[kbs]+c1o54; - f_BN = (D.f[DIR_0PM])[kbn]+c1o54; - f_TS = (D.f[DIR_0MP])[kts]+c1o54; - f_ZERO = (D.f[DIR_000])[kzero]+c8o27; - f_TNE = (D.f[DIR_PPP])[ktne]+c1o216; - f_TSW = (D.f[DIR_MMP])[ktsw]+c1o216; - f_TSE = (D.f[DIR_PMP])[ktse]+c1o216; - f_TNW = (D.f[DIR_MPP])[ktnw]+c1o216; - f_BNE = (D.f[DIR_PPM])[kbne]+c1o216; - f_BSW = (D.f[DIR_MMM])[kbsw]+c1o216; - f_BSE = (D.f[DIR_PMM])[kbse]+c1o216; - f_BNW = (D.f[DIR_MPM])[kbnw]+c1o216; - //////////////////////////////////////////////////////////////////////////////// - - if( BC == GEO_FLUID || BC == GEO_VELO) - { - { - // /////////////////////////version 13.04. - // real drho = f_ZERO+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; - // real vx1 = f_E -f_W +f_NE-f_SW+f_SE-f_NW+f_TE-f_BW+f_BE-f_TW+ f_TNE-f_TSW+f_TSE-f_TNW+ f_BNE-f_BSW+f_BSE-f_BNW; - // real vx2 = f_N -f_S +f_NE-f_SW-f_SE+f_NW+f_TN-f_BS+f_BN-f_TS+ f_TNE-f_TSW-f_TSE+f_TNW+ f_BNE-f_BSW-f_BSE+f_BNW; - // real vx3 = f_T -f_B +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; - //// vx1=vx1/(drho); vx2=vx2/(drho); vx3=vx3/(drho); - // ////////////////////////////////////////////////////////////////////////// - // //BGK - // ////////////////////////////////////////////////////////////////////////// - - - // real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - // f_ZERO = f_ZERO *(one+(-omega))-(-omega)* c8over27* (drho-cu_sq); - // f_E = f_E *(one+(-omega))-(-omega)* c2over27* (drho+three*( vx1 )+c9over2*( vx1 )*( vx1 )-cu_sq); - // f_W = f_W *(one+(-omega))-(-omega)* c2over27* (drho+three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cu_sq); - // f_N = f_N *(one+(-omega))-(-omega)* c2over27* (drho+three*( vx2 )+c9over2*( vx2 )*( vx2 )-cu_sq); - // f_S = f_S *(one+(-omega))-(-omega)* c2over27* (drho+three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cu_sq); - // f_T = f_T *(one+(-omega))-(-omega)* c2over27* (drho+three*( vx3)+c9over2*( vx3)*( vx3)-cu_sq); - // f_B = f_B *(one+(-omega))-(-omega)* c2over27* (drho+three*( -vx3)+c9over2*( -vx3)*( -vx3)-cu_sq); - // f_NE = f_NE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - // f_SW = f_SW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - // f_SE = f_SE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - // f_NW = f_NW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - // f_TE = f_TE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - // f_BW = f_BW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - // f_BE = f_BE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - // f_TW = f_TW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - // f_TN = f_TN *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cu_sq); - // f_BS = f_BS *(one+(-omega))-(-omega)* c1over54* (drho+three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - // f_BN = f_BN *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cu_sq); - // f_TS = f_TS *(one+(-omega))-(-omega)* c1over54* (drho+three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - // f_TNE = f_TNE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - // f_BSW = f_BSW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - // f_BNE = f_BNE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - // f_TSW = f_TSW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - // f_TSE = f_TSE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - // f_BNW = f_BNW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - // f_BSE = f_BSE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - // f_TNW = f_TNW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - - ///////////////////////version 13.04. - real rho = f_ZERO+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; - //real rho = rho0 + one; - real vx = f_E -f_W +f_NE-f_SW+f_SE-f_NW+f_TE-f_BW+f_BE-f_TW+ f_TNE-f_TSW+f_TSE-f_TNW+ f_BNE-f_BSW+f_BSE-f_BNW; - real vy = f_N -f_S +f_NE-f_SW-f_SE+f_NW+f_TN-f_BS+f_BN-f_TS+ f_TNE-f_TSW-f_TSE+f_TNW+ f_BNE-f_BSW-f_BSE+f_BNW; - real vz = f_T -f_B +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; - vx=vx/(rho); vy=vy/(rho); vz=vz/(rho); - - real mu[3][3][3]; - - mu[2][0][0]=(f_E+f_W+f_NE+f_SW+f_SE+f_NW+f_TE+f_BW+f_BE+f_TW+f_TNE+f_BNE+f_TSE+f_BSE+f_TNW+f_BNW+f_TSW+f_BSW)/(rho);//+(c1o3); - mu[0][2][0]=(f_N+f_S+f_NE+f_SW+f_SE+f_NW+f_TN+f_BS+f_BN+f_TS+f_TNE+f_BNE+f_TSE+f_BSE+f_TNW+f_BNW+f_TSW+f_BSW)/(rho);//+(c1o3); - mu[0][0][2]=(f_T+f_B+f_TE+f_BW+f_BE+f_TW+f_TN+f_BS+f_BN+f_TS+f_TNE+f_BNE+f_TSE+f_BSE+f_TNW+f_BNW+f_TSW+f_BSW)/(rho);//+(c1o3); - mu[1][1][0]=(f_NE-f_SE+f_SW-f_NW+f_TNE-f_TSE+f_BNE-f_BSE+f_TSW-f_TNW+f_BSW-f_BNW)/(rho); - mu[1][0][1]=(f_TE+f_BW-f_BE-f_TW+f_TNE-f_BNE+f_TSE-f_BSE-f_TNW+f_BNW-f_TSW+f_BSW)/(rho); - mu[0][1][1]=(f_TN+f_BS-f_BN-f_TS+f_TNE-f_BNE-f_TSE+f_BSE+f_TNW-f_BNW-f_TSW+f_BSW)/(rho); - mu[2][1][0]=(f_NE-f_SW-f_SE+f_NW+f_TNE+f_BNE-f_TSE-f_BSE+f_TNW+f_BNW-f_TSW-f_BSW)/(rho); - mu[1][2][0]=(f_NE-f_SW+f_SE-f_NW+f_TNE-f_TNW+f_BNE-f_BNW+f_TSE-f_TSW+f_BSE-f_BSW)/(rho); - mu[1][0][2]=(f_TE-f_BW+f_BE-f_TW+f_TNE-f_TNW+f_BNE-f_BNW+f_TSE-f_TSW+f_BSE-f_BSW)/(rho); - mu[1][1][1]=(f_TNE-f_BNE-f_TSE+f_BSE-f_TNW+f_BNW+f_TSW-f_BSW)/(rho); - mu[2][0][1]=(f_TE-f_BW-f_BE+f_TW+f_TNE-f_BNE+f_TSE-f_BSE+f_TNW-f_BNW+f_TSW-f_BSW)/(rho); - mu[0][2][1]=(f_TN-f_BS-f_BN+f_TS+f_TNE-f_BNE+f_TSE-f_BSE+f_TNW-f_BNW+f_TSW-f_BSW)/(rho); - mu[0][1][2]=(f_TN-f_BS+f_BN-f_TS+f_TNE+f_BNE-f_TSE-f_BSE+f_TNW+f_BNW-f_TSW-f_BSW)/(rho); - mu[2][2][0]=(f_NE+f_SW+f_SE+f_NW+f_TNE+f_BNE+f_TSE+f_BSE+f_TNW+f_BNW+f_TSW+f_BSW)/(rho);//+(c1o9); - mu[1][2][1]=(f_TNE-f_BNE+f_TSE-f_BSE-f_TNW+f_BNW-f_TSW+f_BSW)/(rho); - mu[2][0][2]=(f_TE+f_BW+f_BE+f_TW+f_TNE+f_BNE+f_TSE+f_BSE+f_TNW+f_BNW+f_TSW+f_BSW)/(rho);//+(c1o9); - mu[2][1][1]=(f_TNE-f_BNE-f_TSE+f_BSE+f_TNW-f_BNW-f_TSW+f_BSW)/(rho); - mu[1][1][2]=(f_TNE+f_BNE-f_TSE-f_BSE-f_TNW-f_BNW+f_TSW+f_BSW)/(rho); - mu[0][2][2]=(f_TN+f_BS+f_BN+f_TS+f_TNE+f_BNE+f_TSE+f_BSE+f_TNW+f_BNW+f_TSW+f_BSW)/(rho);//+(c1o9); - mu[2][2][1]=(f_TNE-f_BNE+f_TSE-f_BSE+f_TNW-f_BNW+f_TSW-f_BSW)/(rho); - mu[1][2][2]=(f_TNE-f_TNW+f_BNE-f_BNW+f_TSE-f_TSW+f_BSE-f_BSW)/(rho); - mu[2][1][2]=(f_TNE+f_BNE-f_TSE-f_BSE+f_TNW+f_BNW-f_TSW-f_BSW)/(rho); - mu[2][2][2]=(f_TNE+f_BNE+f_TSE+f_BSE+f_TNW+f_BNW+f_TSW+f_BSW)/(rho);//+(c1o27); - mu[0][0][0]=c1o1; - mu[1][0][0]=vx; - mu[0][1][0]=vy; - mu[0][0][1]=vz; - - real M_zXX=c0o1; real M_zYY=c0o1; real M_zZZ=c0o1; real M_zXY=c0o1; real M_zXZ=c0o1; real M_zYZ=c0o1; - real M_zXXY=c0o1; real M_zXYY=c0o1; real M_zXXZ=c0o1; real M_zXZZ=c0o1; real M_zYYZ=c0o1; real M_zYZZ=c0o1; real M_zXYZ=c0o1; - real M_zXXYY=c0o1; real M_zXXZZ=c0o1; real M_zYYZZ=c0o1; real M_zXXYZ=c0o1; real M_zXYYZ=c0o1; real M_zXYZZ=c0o1; - real M_zXXYYZ=c0o1; real M_zXXYZZ=c0o1; real M_zXYYZZ=c0o1; real M_zXXYYZZ=c0o1; - real M_zXYeq=c0o1; real M_zXZeq=c0o1; real M_zYZeq=c0o1; real M_zXYZeq=c0o1; - real M_zXXYZeq=c0o1; real M_zXYYZeq=c0o1; real M_zXYZZeq=c0o1; - real M_zXXYYZeq=c0o1; real M_zXXYZZeq=c0o1; real M_zXYYZZeq=c0o1; real M_zXXYYZZeq=c0o1; - - M_zXXYYZZ= -c5o1*mu[0][0][1] * mu[0][0][1] * mu[0][1][0] * mu[0][1][0] * mu[1][0][0] * - mu[1][0][0] + mu[0][0][2] * mu[0][1][0] * mu[0][1][0] * mu[1][0][0] * - mu[1][0][0] + c4o1*mu[0][0][1] * mu[0][1][0] * mu[0][1][1] * mu[1][0][0] * - mu[1][0][0] - c2o1*mu[0][1][0] * mu[0][1][2] * mu[1][0][0] * mu[1][0][0] + - mu[0][0][1] * mu[0][0][1] * mu[0][2][0] * mu[1][0][0] * mu[1][0][0] - - c2o1*mu[0][0][1] * mu[0][2][1] * mu[1][0][0] * mu[1][0][0] + mu[0][2][2] * - mu[1][0][0] * mu[1][0][0] + c4o1*mu[0][0][1] * mu[0][1][0] * mu[0][1][0] * - mu[1][0][0] * mu[1][0][1] - c2o1*mu[0][1][0] * mu[0][1][0] * mu[1][0][0] * - mu[1][0][2] + c4o1*mu[0][0][1] * mu[0][0][1] * mu[0][1][0] * mu[1][0][0] * - mu[1][1][0] - c8o1*mu[0][0][1] * mu[0][1][0] * mu[1][0][0] * mu[1][1][1] + - c4o1*mu[0][1][0] * mu[1][0][0] * mu[1][1][2] - c2o1*mu[0][0][1] * mu[0][0][1] * - mu[1][0][0] * mu[1][2][0] + c4o1*mu[0][0][1] * mu[1][0][0] * mu[1][2][1] - - c2o1*mu[1][0][0] * mu[1][2][2] + mu[0][0][1] * mu[0][0][1] * mu[0][1][0] * - mu[0][1][0] * mu[2][0][0] - c2o1*mu[0][0][1] * mu[0][1][0] * mu[0][1][0] * - mu[2][0][1] + mu[0][1][0] * mu[0][1][0] * mu[2][0][2] - c2o1*mu[0][0][1] * - mu[0][0][1] * mu[0][1][0] * mu[2][1][0] + c4o1*mu[0][0][1] * mu[0][1][0] * - mu[2][1][1] - c2o1*mu[0][1][0] * mu[2][1][2] + mu[0][0][1] * mu[0][0][1] * - mu[2][2][0] - c2o1*mu[0][0][1] * mu[2][2][1] + mu[2][2][2]; //5 - M_zXXYYZ= c4o1*mu[0][0][1] * mu[0][1][0] * mu[0][1][0] * mu[1][0][0] * mu[1][0][0] - - c2o1*mu[0][1][0] * mu[0][1][1] * mu[1][0][0] * mu[1][0][0] - mu[0][0][1] * - mu[0][2][0] * mu[1][0][0] * mu[1][0][0] + mu[0][2][1] * mu[1][0][0] * - mu[1][0][0] - c2o1*mu[0][1][0] * mu[0][1][0] * mu[1][0][0] * mu[1][0][1] - - c4o1*mu[0][0][1] * mu[0][1][0] * mu[1][0][0] * mu[1][1][0] + c4o1*mu[0][1][0] * - mu[1][0][0] * mu[1][1][1] + c2o1*mu[0][0][1] * mu[1][0][0] * mu[1][2][0] - - c2o1*mu[1][0][0] * mu[1][2][1] - mu[0][0][1] * mu[0][1][0] * mu[0][1][0] * - mu[2][0][0] + mu[0][1][0] * mu[0][1][0] * mu[2][0][1] + c2o1*mu[0][0][1] * - mu[0][1][0] * mu[2][1][0] - c2o1*mu[0][1][0] * mu[2][1][1] - mu[0][0][1] * - mu[2][2][0] + mu[2][2][1]; //6 - M_zXXYY= -c3o1*mu[0][1][0] * mu[0][1][0] * mu[1][0][0] * mu[1][0][0] + mu[0][2][0] * - mu[1][0][0] * mu[1][0][0] + c4o1*mu[0][1][0] * mu[1][0][0] * mu[1][1][0] - - c2o1*mu[1][0][0] * mu[1][2][0] + mu[0][1][0] * mu[0][1][0] * mu[2][0][0] - - c2o1*mu[0][1][0] * mu[2][1][0] + mu[2][2][0]; //7 - M_zXXYZZ= c4o1*mu[0][0][1] * mu[0][0][1] * mu[0][1][0] * mu[1][0][0] * mu[1][0][0] - - mu[0][0][2] * mu[0][1][0] * mu[1][0][0] * mu[1][0][0] - c2o1*mu[0][0][1] * - mu[0][1][1] * mu[1][0][0] * mu[1][0][0] + mu[0][1][2] * mu[1][0][0] * - mu[1][0][0] - c4o1*mu[0][0][1] * mu[0][1][0] * mu[1][0][0] * mu[1][0][1] + - c2o1*mu[0][1][0] * mu[1][0][0] * mu[1][0][2] - c2o1*mu[0][0][1] * mu[0][0][1] * - mu[1][0][0] * mu[1][1][0] + c4o1*mu[0][0][1] * mu[1][0][0] * mu[1][1][1] - - c2o1*mu[1][0][0] * mu[1][1][2] - mu[0][0][1] * mu[0][0][1] * mu[0][1][0] * - mu[2][0][0] + c2o1*mu[0][0][1] * mu[0][1][0] * mu[2][0][1] - mu[0][1][0] * - mu[2][0][2] + mu[0][0][1] * mu[0][0][1] * mu[2][1][0] - c2o1*mu[0][0][1] * - mu[2][1][1] + mu[2][1][2]; //8 - M_zXXYZ= -c3o1*mu[0][0][1] * mu[0][1][0] * mu[1][0][0] * mu[1][0][0] + mu[0][1][1] * - mu[1][0][0] * mu[1][0][0] + c2o1*mu[0][1][0] * mu[1][0][0] * mu[1][0][1] + - c2o1*mu[0][0][1] * mu[1][0][0] * mu[1][1][0] - c2o1*mu[1][0][0] * mu[1][1][1] + - mu[0][0][1] * mu[0][1][0] * mu[2][0][0] - mu[0][1][0] * mu[2][0][1] - - mu[0][0][1] * mu[2][1][0] + mu[2][1][1]; //9 - M_zXXY= c2o1*mu[0][1][0] * mu[1][0][0] * mu[1][0][0] - c2o1*mu[1][0][0] * mu[1][1][0] - - mu[0][1][0] * mu[2][0][0] + mu[2][1][0]; //10 - M_zXXZZ= -c3o1*mu[0][0][1] * mu[0][0][1] * mu[1][0][0] * mu[1][0][0] + mu[0][0][2] * - mu[1][0][0] * mu[1][0][0] + c4o1*mu[0][0][1] * mu[1][0][0] * mu[1][0][1] - - c2o1*mu[1][0][0] * mu[1][0][2] + mu[0][0][1] * mu[0][0][1] * mu[2][0][0] - - c2o1*mu[0][0][1] * mu[2][0][1] + mu[2][0][2]; //11 - M_zXXZ= c2o1*mu[0][0][1] * mu[1][0][0] * mu[1][0][0] - c2o1*mu[1][0][0] * mu[1][0][1] - - mu[0][0][1] * mu[2][0][0] + mu[2][0][1]; //12 - M_zXX=- mu[1][0][0] * mu[1][0][0] + mu[2][0][0]; //13 - M_zXYYZZ= c4o1*mu[0][0][1] * mu[0][0][1] * mu[0][1][0] * mu[0][1][0] * mu[1][0][0] - - mu[0][0][2] * mu[0][1][0] * mu[0][1][0] * mu[1][0][0] - c4o1*mu[0][0][1] * - mu[0][1][0] * mu[0][1][1] * mu[1][0][0] + c2o1*mu[0][1][0] * mu[0][1][2] * - mu[1][0][0] - mu[0][0][1] * mu[0][0][1] * mu[0][2][0] * mu[1][0][0] + - c2o1*mu[0][0][1] * mu[0][2][1] * mu[1][0][0] - mu[0][2][2] * mu[1][0][0] - - c2o1*mu[0][0][1] * mu[0][1][0] * mu[0][1][0] * mu[1][0][1] + mu[0][1][0] * - mu[0][1][0] * mu[1][0][2] - c2o1*mu[0][0][1] * mu[0][0][1] * mu[0][1][0] * - mu[1][1][0] + c4o1*mu[0][0][1] * mu[0][1][0] * mu[1][1][1] - c2o1*mu[0][1][0] * - mu[1][1][2] + mu[0][0][1] * mu[0][0][1] * mu[1][2][0] - c2o1*mu[0][0][1] * - mu[1][2][1] + mu[1][2][2]; //14 - M_zXYYZ= -c3o1*mu[0][0][1] * mu[0][1][0] * mu[0][1][0] * mu[1][0][0] + c2o1*mu[0][1][0] * - mu[0][1][1] * mu[1][0][0] + mu[0][0][1] * mu[0][2][0] * mu[1][0][0] - - mu[0][2][1] * mu[1][0][0] + mu[0][1][0] * mu[0][1][0] * mu[1][0][1] + - c2o1*mu[0][0][1] * mu[0][1][0] * mu[1][1][0] - c2o1*mu[0][1][0] * mu[1][1][1] - - mu[0][0][1] * mu[1][2][0] + mu[1][2][1]; //15 - M_zXYY= c2o1*mu[0][1][0] * mu[0][1][0] * mu[1][0][0] - mu[0][2][0] * mu[1][0][0] - - c2o1*mu[0][1][0] * mu[1][1][0] + mu[1][2][0]; //16 - M_zXYZZ= -c3o1*mu[0][0][1] * mu[0][0][1] * mu[0][1][0] * mu[1][0][0] + mu[0][0][2] * - mu[0][1][0] * mu[1][0][0] + c2o1*mu[0][0][1] * mu[0][1][1] * mu[1][0][0] - - mu[0][1][2] * mu[1][0][0] + c2o1*mu[0][0][1] * mu[0][1][0] * mu[1][0][1] - - mu[0][1][0] * mu[1][0][2] + mu[0][0][1] * mu[0][0][1] * mu[1][1][0] - - c2o1*mu[0][0][1] * mu[1][1][1] + mu[1][1][2]; //17 - M_zXYZ= c2o1*mu[0][0][1] * mu[0][1][0] * mu[1][0][0] - mu[0][1][1] * mu[1][0][0] - - mu[0][1][0] * mu[1][0][1] - mu[0][0][1] * mu[1][1][0] + mu[1][ 1][ 1]; //18 - M_zXY = -mu[0][1][0] * mu[1][0][0] + mu[1][1][0]; //19 - M_zXZZ= c2o1*mu[0][0][1] * mu[0][0][1] * mu[1][0][0] - mu[0][0][2] * mu[1][0][0] - - c2o1*mu[0][0][1] * mu[1][0][1] + mu[1][0][2]; //20 - M_zXZ = -mu[0][0][1] * mu[1][0][0] + mu[1][0][1]; //21 - M_zYYZZ= -c3o1*mu[0][0][1] * mu[0][0][1] * mu[0][1][0] * mu[0][1][0] + mu[0][0][2] * - mu[0][1][0] * mu[0][1][0] + c4o1*mu[0][0][1] * mu[0][1][0] * mu[0][1][1] - - c2o1*mu[0][1][0] * mu[0][1][2] + mu[0][0][1] * mu[0][0][1] * mu[0][2][0] - - c2o1*mu[0][0][1] * mu[0][2][1] + mu[0][2][2]; //22 - M_zYYZ= c2o1*mu[0][0][1] * mu[0][1][0] * mu[0][1][0] - c2o1*mu[0][1][0] * mu[0][1][1] - - mu[0][0][1] * mu[0][2][0] + mu[0][2][1]; //23 - M_zYY = -mu[0][1][0] * mu[0][1][0] + mu[0][2][0]; //24 - M_zYZZ = c2o1*mu[0][0][1] * mu[0][0][1] * mu[0][1][0] - mu[0][0][2] * mu[0][1][0] - - c2o1*mu[0][0][1] * mu[0][1][1] + mu[0][1][2]; //25 - M_zYZ = -mu[0][0][1] * mu[0][1][0] + mu[0][1][1]; //26 - M_zZZ = -mu[0][0][1] * mu[0][0][1] + mu[0][0][2]; //27 - - M_zXXYYZZeq=c1o27; - M_zXXYYZeq=c0o1; - M_zXXYZZeq=c0o1; - M_zXXYZeq=c0o1; - M_zXYYZZeq=c0o1; - M_zXYYZeq=c0o1; - M_zXYZZeq=c0o1; - - real MXXpMYYpMZZ,MXXmMYY, MXXmMZZ, MXXYpMYZZ,MXXZpMYYZ,MXYYpMXZZ, MXXYmMYZZ,MXXZmMYYZ,MXYYmMXZZ, MXXYYppp,MXXYYpm2p, MXXYYppm2; - real MXXpMYYpMZZeq,MXXmMYYeq, MXXmMZZeq, MXXYpMYZZeq,MXXZpMYYZeq,MXYYpMXZZeq, MXXYmMYZZeq,MXXZmMYYZeq,MXYYmMXZZeq, MXXYYpppeq,MXXYYpm2peq, MXXYYppm2eq; - - //coll faktoren: - real w1,w2,w3,w4,w5,w6,w7,w8,w9,w10; - w2=-c1o1;//-omega; - w7=-c1o1; - w9=-c1o1; - w10=-c1o1; - w1=-omega; - w3=-c1o1; - w4=-c1o1; - w5=-c1o1; - w6=-c1o1; - w8=-c1o1; - ////////lin kombi bilden: - MXXpMYYpMZZ = M_zXX + M_zYY + M_zZZ; - MXXmMYY = M_zXX - M_zYY; - MXXmMZZ = M_zXX - M_zZZ; - - MXXYpMYZZ = M_zXXY+M_zYZZ; - MXXYmMYZZ = M_zXXY-M_zYZZ; - MXXZpMYYZ = M_zXXZ+M_zYYZ; - MXXZmMYYZ = M_zXXZ-M_zYYZ; - MXYYpMXZZ = M_zXYY+M_zXZZ; - MXYYmMXZZ = M_zXYY-M_zXZZ; - - MXXYYppp = M_zXXYY + M_zXXZZ + M_zYYZZ; - MXXYYpm2p = M_zXXYY - 2.0*M_zXXZZ + M_zYYZZ; - MXXYYppm2 = M_zXXYY + M_zXXZZ - 2.0*M_zYYZZ; - bool casc=false; - bool factorCasc=true; - if(casc) - { - MXXpMYYpMZZeq = c1o1; - MXXmMYYeq = c0o1; - MXXmMZZeq = c0o1; - - MXXYpMYZZeq = c0o1; - MXXYmMYZZeq = c0o1; - MXXZpMYYZeq = c0o1; - MXXZmMYYZeq = c0o1; - MXYYpMXZZeq = c0o1; - MXYYmMXZZeq = c0o1; - - MXXYYpppeq = c1o3; - MXXYYpm2peq = c0o1; - MXXYYppm2eq = c0o1; - - //relaxation: - MXXpMYYpMZZ -= w2*(MXXpMYYpMZZeq-MXXpMYYpMZZ); - MXXmMYY -= w1*(MXXmMYYeq -MXXmMYY); - MXXmMZZ -= w1*(MXXmMZZeq -MXXmMZZ); - - MXXYpMYZZ -= w3*(MXXYpMYZZeq-MXXYpMYZZ); - MXXYmMYZZ -= w4*(MXXYmMYZZeq-MXXYmMYZZ); - MXXZpMYYZ -= w3*(MXXZpMYYZeq-MXXZpMYYZ); - MXXZmMYYZ -= w4*(MXXZmMYYZeq-MXXZmMYYZ); - MXYYpMXZZ -= w3*(MXYYpMXZZeq-MXYYpMXZZ); - MXYYmMXZZ -= w4*(MXYYmMXZZeq-MXYYmMXZZ); - - MXXYYppp -= w7*(MXXYYpppeq -MXXYYppp ); - MXXYYpm2p -= w6*(MXXYYpm2peq-MXXYYpm2p); - MXXYYppm2 -= w6*(MXXYYppm2eq-MXXYYppm2); - - M_zXXYYZZ=M_zXXYYZZ-w10*(M_zXXYYZZeq-M_zXXYYZZ); - M_zXZ= M_zXZ- w1*(M_zXZeq - M_zXZ ); - M_zYZ= M_zYZ- w1*(M_zYZeq - M_zYZ ); - M_zXY= M_zXY- w1*(M_zXYeq - M_zXY ); - - M_zXYZ= M_zXYZ- w5*(M_zXYZeq - M_zXYZ ); - - M_zXYYZ= M_zXYYZ- w8*(M_zXYYZeq - M_zXYYZ ); - M_zXYZZ= M_zXYZZ- w8*(M_zXYZZeq - M_zXYZZ ); - M_zXXYZ= M_zXXYZ- w8*(M_zXXYZeq - M_zXXYZ ); - - M_zXXYYZ= M_zXXYYZ- w9*(M_zXXYYZeq- M_zXXYYZ ); - M_zXXYZZ= M_zXXYZZ- w9*(M_zXXYZZeq- M_zXXYZZ ); - M_zXYYZZ= M_zXYYZZ- w9*(M_zXYYZZeq- M_zXYYZZ ); - - ////////von Lin Kombis zurueck: - M_zXX = c1o3 * MXXmMYY + c1o3 * MXXmMZZ + c1o3 * MXXpMYYpMZZ; - M_zYY =-c2o3 * MXXmMYY + c1o3 * MXXmMZZ + c1o3 * MXXpMYYpMZZ; - M_zZZ = c1o3 * MXXmMYY - c2o3 * MXXmMZZ + c1o3 * MXXpMYYpMZZ; - - M_zXXY = (MXXYmMYZZ + MXXYpMYZZ)*c1o2; - M_zYZZ = c1o2*(-MXXYmMYZZ + MXXYpMYZZ); - M_zXYY =(MXYYmMXZZ + MXYYpMXZZ)*c1o2; - M_zXZZ = c1o2*(-MXYYmMXZZ + MXYYpMXZZ); - M_zXXZ = (MXXZmMYYZ + MXXZpMYYZ)*c1o2; - M_zYYZ = c1o2*(-MXXZmMYYZ + MXXZpMYYZ); - - M_zXXYY = c1o3* MXXYYpm2p + c1o3* MXXYYppm2 + c1o3*MXXYYppp; - M_zXXZZ = -c1o3* MXXYYpm2p + c1o3* MXXYYppp; - M_zYYZZ = -c1o3* MXXYYppm2 + c1o3* MXXYYppp; - } - else if (factorCasc) - { - MXXpMYYpMZZeq = c1o1; - MXXmMYYeq = c0o1; - MXXmMZZeq = c0o1; - - MXXYpMYZZeq = c0o1; - MXXYmMYZZeq = c0o1; - MXXZpMYYZeq = c0o1; - MXXZmMYYZeq = c0o1; - MXYYpMXZZeq = c0o1; - MXYYmMXZZeq = c0o1; - - MXXYYpppeq = c1o3; - MXXYYpm2peq = c0o1; - MXXYYppm2eq = c0o1; - - //relaxation: - MXXpMYYpMZZ -= w2*(MXXpMYYpMZZeq-MXXpMYYpMZZ); - MXXmMYY -= w1*(MXXmMYYeq -MXXmMYY); - MXXmMZZ -= w1*(MXXmMZZeq -MXXmMZZ); - - MXXYpMYZZ -= w3*(MXXYpMYZZeq-MXXYpMYZZ); - MXXYmMYZZ -= w4*(MXXYmMYZZeq-MXXYmMYZZ); - MXXZpMYYZ -= w3*(MXXZpMYYZeq-MXXZpMYYZ); - MXXZmMYYZ -= w4*(MXXZmMYYZeq-MXXZmMYYZ); - MXYYpMXZZ -= w3*(MXYYpMXZZeq-MXYYpMXZZ); - MXYYmMXZZ -= w4*(MXYYmMXZZeq-MXYYmMXZZ); - - M_zXZ= M_zXZ- w1*(M_zXZeq - M_zXZ ); - M_zYZ= M_zYZ- w1*(M_zYZeq - M_zYZ ); - M_zXY= M_zXY- w1*(M_zXYeq - M_zXY ); - M_zXYZ= M_zXYZ- w5*(M_zXYZeq - M_zXYZ ); - - ////////von Lin Kombis zurueck: - M_zXX = c1o3 * MXXmMYY + c1o3 * MXXmMZZ + c1o3 * MXXpMYYpMZZ; - M_zYY =-c2o3 * MXXmMYY + c1o3 * MXXmMZZ + c1o3 * MXXpMYYpMZZ; - M_zZZ = c1o3 * MXXmMYY - c2o3 * MXXmMZZ + c1o3 * MXXpMYYpMZZ; - - M_zXXY = (MXXYmMYZZ + MXXYpMYZZ)*c1o2; - M_zYZZ = c1o2*(-MXXYmMYZZ + MXXYpMYZZ); - M_zXYY =(MXYYmMXZZ + MXYYpMXZZ)*c1o2; - M_zXZZ = c1o2*(-MXYYmMXZZ + MXYYpMXZZ); - M_zXXZ = (MXXZmMYYZ + MXXZpMYYZ)*c1o2; - M_zYYZ = c1o2*(-MXXZmMYYZ + MXXZpMYYZ); - - //faktorisierte atraktoren: - MXXYYpppeq=M_zXX*M_zYY+M_zXX*M_zZZ+M_zZZ*M_zYY; - MXXYYpm2peq=M_zXX*M_zYY-c2o1*M_zXX*M_zZZ+M_zZZ*M_zYY; - MXXYYppm2eq=M_zXX*M_zYY+M_zXX*M_zZZ-c2o1*M_zZZ*M_zYY; - M_zXYYZeq=M_zYY*M_zXZ; - M_zXYZZeq=M_zZZ*M_zXY; - M_zXXYZeq=M_zXX*M_zYZ; - - M_zXXYYZeq=c0o1; - M_zXXYZZeq=c0o1; - M_zXYYZZeq=c0o1; - - M_zXXYYZZeq=M_zXX*M_zYY*M_zZZ; - - MXXYYppp -= w7*(MXXYYpppeq -MXXYYppp ); - MXXYYpm2p -= w6*(MXXYYpm2peq-MXXYYpm2p); - MXXYYppm2 -= w6*(MXXYYppm2eq-MXXYYppm2); - M_zXXYYZZ=M_zXXYYZZ-w10*(M_zXXYYZZeq-M_zXXYYZZ); - M_zXYYZ= M_zXYYZ- w8*(M_zXYYZeq - M_zXYYZ ); - M_zXYZZ= M_zXYZZ- w8*(M_zXYZZeq - M_zXYZZ ); - M_zXXYZ= M_zXXYZ- w8*(M_zXXYZeq - M_zXXYZ ); - - M_zXXYYZ= M_zXXYYZ- w9*(M_zXXYYZeq- M_zXXYYZ ); - M_zXXYZZ= M_zXXYZZ- w9*(M_zXXYZZeq- M_zXXYZZ ); - M_zXYYZZ= M_zXYYZZ- w9*(M_zXYYZZeq- M_zXYYZZ ); - - M_zXXYY = c1o3* MXXYYpm2p + c1o3* MXXYYppm2 + c1o3*MXXYYppp; - M_zXXZZ = -c1o3* MXXYYpm2p + c1o3* MXXYYppp; - M_zYYZZ = -c1o3* MXXYYppm2 + c1o3* MXXYYppp; - } - //real forcingX1=1.11986e-8;//1.41342e-8;//5.48288e-9;//<-96//1.03093e-8;//1.59178e-8;//1.6256e-8; - - //mu[1][0][0]+=forcingX1; - - mu[2][ 2][ 2]= vx*vx*vy*vy*vz*vz + vx*vx*vy*vy*M_zZZ + c4o1*vx*vx*vy*vz*M_zYZ + c2o1* vx*vx*vy*M_zYZZ + - vx*vx*vz*vz*M_zYY + c2o1* vx*vx*vz*M_zYYZ +vx*vx*M_zYYZZ + c4o1*vx*vy*vy*vz*M_zXZ + - c2o1* vx*vy*vy*M_zXZZ + c4o1* vx*vy*vz*vz*M_zXY+ c8o1* vx*vy*vz*M_zXYZ + c4o1* vx*vy*M_zXYZZ + - c2o1* vx*vz*vz*M_zXYY + c4o1* vx*vz*M_zXYYZ + c2o1*vx*M_zXYYZZ + vy*vy*vz*vz*M_zXX + c2o1* vy*vy*vz*M_zXXZ + - vy*vy*M_zXXZZ + c2o1* vy*vz*vz*M_zXXY + c4o1*vy*vz*M_zXXYZ + c2o1* vy*M_zXXYZZ + vz*vz*M_zXXYY +c2o1* vz*M_zXXYYZ + M_zXXYYZZ;//-(c1o27); - mu[2][ 2][ 1]= vx*vx*vy*vy*vz + c2o1*vx*vx*vy*M_zYZ + vx*vx*vz*M_zYY + vx*vx*M_zYYZ + c2o1*vx*vy*vy*M_zXZ +c4o1*vx*vy*vz*M_zXY +c4o1*vx*vy*M_zXYZ+ - c2o1*vx*vz*M_zXYY + c2o1*vx*M_zXYYZ + vy*vy*vz*M_zXX + vy*vy*M_zXXZ + c2o1* vy*vz*M_zXXY + c2o1*vy*M_zXXYZ + vz*M_zXXYY + M_zXXYYZ; - mu[2][ 2][ 0]= vx*vx*vy*vy + vx*vx*M_zYY + c4o1*vx*vy*M_zXY + c2o1*vx*M_zXYY + vy*vy*M_zXX + c2o1*vy*M_zXXY + M_zXXYY ;//-(c1o9); - mu[2][ 1][ 2]= vx*vx*vy*vz*vz + vx*vx*vy*M_zZZ + c2o1*vx*vx*vz*M_zYZ + vx*vx*M_zYZZ + c4o1*vx*vy*vz*M_zXZ+ //vy->vz - c2o1*vx*vy*M_zXZZ + c2o1*vx*vz*vz*M_zXY + c4o1*vx*vz*M_zXYZ + c2o1*vx*M_zXYZZ + vy*vz*vz*M_zXX + - c2o1*vy*vz*M_zXXZ + vy*M_zXXZZ + vz*vz*M_zXXY + c2o1*vz*M_zXXYZ + M_zXXYZZ; - mu[2][ 1][ 1]= vx*vx*vy*vz + vx*vx*M_zYZ + c2o1*vx*vy*M_zXZ + c2o1*vx*vz*M_zXY + c2o1*vx*M_zXYZ + vy*vz*M_zXX+ vy*M_zXXZ + vz*M_zXXY + M_zXXYZ; - mu[2][ 1][ 0]= vx*vx*vy + c2o1*vx*M_zXY + vy*M_zXX + M_zXXY; - mu[2][ 0][ 2]= vx*vx*vz*vz + vx*vx*M_zZZ + c4o1*vx*vz*M_zXZ+ c2o1*vx*M_zXZZ + vz*vz*M_zXX+ c2o1*vz*M_zXXZ + M_zXXZZ;//-(c1o9); - mu[2][ 0][ 1]= vx*vx*vz + c2o1*vx*M_zXZ + vz*M_zXX + M_zXXZ; - mu[2][ 0][ 0]= vx*vx + M_zXX ;//-(c1o3); - mu[1][ 2][ 2]= vx*vy*vy*vz*vz + vx*vy*vy*M_zZZ + c4o1*vx*vy*vz*M_zYZ + c2o1*vx*vy*M_zYZZ + vx*vz*vz*M_zYY + c2o1*vx*vz*M_zYYZ +vx*M_zYYZZ + c2o1*vy*vy*vz*M_zXZ + vy*vy*M_zXZZ + - c2o1*vy*vz*vz*M_zXY + c4o1*vy*vz*M_zXYZ + c2o1*vy*M_zXYZZ +vz*vz*M_zXYY + c2o1*vz*M_zXYYZ + M_zXYYZZ; - mu[1][ 2][ 1]= vx*vy*vy*vz + c2o1*vx*vy*M_zYZ + vx*vz*M_zYY + vx*M_zYYZ + vy*vy*M_zXZ + c2o1*vy*vz*M_zXY + c2o1*vy*M_zXYZ + vz*M_zXYY + M_zXYYZ; - mu[1][ 2][ 0]= vx*vy*vy + vx*M_zYY + c2o1*vy*M_zXY + M_zXYY; - mu[1][ 1][ 2]= vx*vy*vz*vz+vx*vy*M_zZZ+c2o1*vx*vz*M_zYZ+vx*M_zYZZ+c2o1*vy*vz*M_zXZ+vy*M_zXZZ+vz*vz*M_zXY+c2o1*vz*M_zXYZ+M_zXYZZ; - mu[1][ 1][ 1]= vx*vy*vz + vx*M_zYZ + vy*M_zXZ + vz*M_zXY+M_zXYZ; - mu[1][ 1][ 0]= vx*vy+ M_zXY; - mu[1][ 0][ 2]= vx*vz*vz + vx*M_zZZ + c2o1*vz*M_zXZ + M_zXZZ; - mu[1][ 0][ 1]= vx*vz + M_zXZ; - //mu[1][ 0][ 0]= vx; - mu[0][ 2][ 2]= vy*vy*vz*vz + vy*vy*M_zZZ + c4o1*vy*vz*M_zYZ +c2o1*vy*M_zYZZ + vz*vz*M_zYY + c2o1*vz*M_zYYZ + M_zYYZZ;//-(c1o9); - mu[0][ 2][ 1]= vy*vy*vz + c2o1*vy*M_zYZ + vz*M_zYY + M_zYYZ; - mu[0][ 2][ 0]= vy*vy + M_zYY ;//-(c1o3); - mu[0][ 1][ 2]= vy*vz*vz+ vy*M_zZZ + c2o1*vz*M_zYZ + M_zYZZ; - mu[0][ 1][ 1]= vy*vz + M_zYZ; - //mu[0][ 1][ 0]= vy ; //richtig? - mu[0][ 0][ 2]= vz*vz + M_zZZ;// -(c1o3); - //mu[0][ 0][ 1]= vz; - //mu[0][ 0][ 0]=rho0 ; - - f_E =c1o2* (mu[2][0][0] - mu[2][2][0] + mu[2][2][2] - mu[2][0][2] - mu[1][2][0] + mu[1][2][2] - mu[1][0][2] +mu[1][0][0]) *(rho); - f_W =c1o2* (mu[2][0][0] - mu[2][2][0] + mu[2][2][2] - mu[2][0][2] + mu[1][2][0] - mu[1][2][2] + mu[1][0][2] -mu[1][0][0])* (rho); - f_N =c1o2* (-mu[2][1][0] - mu[2][2][0] + mu[2][2][2] + mu[2][1][2] + mu[0][2][0] - mu[0][2][2] - mu[0][1][2] +mu[0][1][0])* (rho); - f_S =c1o2* (mu[2][1][0] - mu[2][2][0] + mu[2][2][2] - mu[2][1][2] + mu[0][2][0] - mu[0][2][2] + mu[0][1][2] -mu[0][1][0])* (rho); - f_T =c1o2* (mu[2][2][1] + mu[2][2][2] - mu[2][0][1] - mu[2][0][2] - mu[0][2][1] - mu[0][2][2] + mu[0][0][2] +mu[0][0][1])* (rho); - f_B =c1o2* (-mu[2][2][1] + mu[2][2][2] + mu[2][0][1] - mu[2][0][2] + mu[0][2][1] - mu[0][2][2] + mu[0][0][2]-mu[0][0][1])* (rho); - f_NE =c1o4*( mu[2][1][0] + mu[2][2][0]- mu[2][2][2] - mu[2][1][2] + mu[1][1][0]+ mu[1][2][0]- mu[1][2][2] -mu[1][1][2])* (rho); - f_SW =c1o4*(-mu[2][1][0] + mu[2][2 ][0]- mu[2][2][2] + mu[2][1][2] + mu[1][1][0]- mu[1][2][0]+ mu[1][2][2] -mu[1][1][2])* (rho); - f_SE =c1o4*(-mu[2][1][0] + mu[2][2 ][0]- mu[2][2][2] + mu[2][1][2] - mu[1][1][0]+ mu[1][2][0]- mu[1][2][2] +mu[1][1][2])* (rho); - f_NW =c1o4*( mu[2][1][0] + mu[2][2][0]- mu[2][2][2] - mu[2][1][2] - mu[1][1][0]- mu[1][2][0]+ mu[1][2][2] + mu[1][1][2])* (rho); - f_TE=c1o4*(-mu[2][2][1] - mu[2][2][2] + mu[2][0][1] + mu[2][0][2] - mu[1][2][1] - mu[1][2][2] + mu[1][0][1] + mu[1][0][2])*(rho); - f_BW=c1o4*( mu[2][2][1] -mu[2][2][2] - mu[2][0][1] + mu[2][0][2] - mu[1][2][1] + mu[1][2][2] + mu[1][0][1] - mu[1][0][2])*(rho); - f_BE=c1o4*(mu[2][2][1] - mu[2][2][2] - mu[2][0][1] + mu[2][0][2] + mu[1][2][1] - mu[1][2][2] - mu[1][0][1] +mu[1][0][2])* (rho); - f_TW=c1o4*(-mu[2][2][1] - mu[2][2][2] + mu[2][0][1] + mu[2][0][2] + mu[1][2][1] + mu[1][2][2] - mu[1][0][1] -mu[1][0][2])* (rho); - f_TN=c1o4*(-mu[2][2][1] - mu[2][2][2] - mu[2][1][1] - mu[2][1][2] + mu[0][2][1] + mu[0][2][2] + mu[0][1][1]+mu[0][1][2])* (rho); - f_BS=c1o4*( mu[2][2][1] - mu[2][2][2] - mu[2][1][1] + mu[2][1][2] - mu[0][2][1] + mu[0][2][2] + mu[0][1][1] - mu[0][1][2])*(rho); - f_BN=c1o4*( mu[2][2][1] - mu[2][2][2] + mu[2][1][1] - mu[2][1][2] - mu[0][2][1] + mu[0][2][2] - mu[0][1][1] + mu[0][1][2])*(rho); - f_TS=c1o4*(-mu[2][2][1] - mu[2][2][2] + mu[2][1][1] + mu[2][1][2] + mu[0][2][1] + mu[0][2][2] - mu[0][1][1] -mu[0][1][2])* (rho); - f_ZERO= (-mu[2][0][0] + mu[2][2][0] - mu[2][2][2] + mu[2][0][2] - mu[0][2][0] + mu[0][2][2] - mu[0][0][2] + mu[0][0][0])*(rho); - f_TNE=c1o8*( mu[2][2][1] + mu[2][2][2] + mu[2][1][1] + mu[2][1][2] + mu[1][2][1] + mu[1][2][2] + mu[1][1][1] + mu[1][1][2])* (rho); - f_BNE=c1o8*(-mu[2][2][1] + mu[2][2][2] -mu[2][1][1] + mu[2][1][2] - mu[1][2][1] + mu[1][2][2] -mu[1][1][1] + mu[1][1][2])* (rho); - f_TSE=c1o8*( mu[2][2][1] + mu[2][2][2] - mu[2][1][1] - mu[2][1][2] + mu[1][2][1] + mu[1][2][2] - mu[1][1][1] - mu[1][1][2])* (rho); - f_BSE=c1o8*(-mu[2][2][1] + mu[2][2][2] +mu[2][1][1] - mu[2][1][2] - mu[1][2][1] + mu[1][2][2] +mu[1][1][1] - mu[1][1][2])* (rho); - f_TNW=c1o8*( mu[2][2][1] + mu[2][2][2] + mu[2][1][1] + mu[2][1][2] - mu[1][2][1] - mu[1][2][2] - mu[1][1][1] - mu[1][1][2])* (rho); - f_BNW=c1o8*(-mu[2][2][1] + mu[2][2][2] -mu[2][1][1] + mu[2][1][2] + mu[1][2][1] - mu[1][2][2] +mu[1][1][1] - mu[1][1][2])* (rho); - f_TSW=c1o8*( mu[2][2][1] + mu[2][2][2] - mu[2][1][1] - mu[2][1][2] - mu[1][2][1] - mu[1][2][2] + mu[1][1][1] + mu[1][1][2])* (rho); - f_BSW=c1o8*(-mu[2][2][1] + mu[2][2][2]+mu[2][1][1] - mu[2][1][2]+ mu[1][2][1] - mu[1][2][2]-mu[1][1][1] + mu[1][1][2])*(rho); - } - } - - (D.f[ DIR_P00 ])[ke ] = f_W-c2o27; - (D.f[ DIR_M00 ])[kw ] = f_E-c2o27; - - (D.f[ DIR_0P0 ])[kn ] = f_S-c2o27; - (D.f[ DIR_0M0 ])[ks ] = f_N-c2o27; - (D.f[ DIR_00P ])[kt ] = f_B-c2o27; - (D.f[ DIR_00M ])[kb ] = f_T-c2o27; - - (D.f[ DIR_PP0 ])[kne] = f_SW-c1o54; - (D.f[ DIR_MM0 ])[ksw] = f_NE-c1o54; - (D.f[ DIR_PM0 ])[kse] = f_NW-c1o54; - (D.f[ DIR_MP0 ])[knw] = f_SE-c1o54; - (D.f[ DIR_P0P ])[kte] = f_BW-c1o54; - (D.f[ DIR_M0M ])[kbw] = f_TE-c1o54; - (D.f[ DIR_P0M ])[kbe] = f_TW-c1o54; - (D.f[ DIR_M0P ])[ktw] = f_BE-c1o54; - - (D.f[ DIR_0PP ])[ktn] = f_BS-c1o54; - (D.f[ DIR_0MM ])[kbs] = f_TN-c1o54; - (D.f[ DIR_0PM ])[kbn] = f_TS-c1o54; - (D.f[ DIR_0MP ])[kts] = f_BN-c1o54; - - (D.f[ DIR_000])[k] = f_ZERO-c8o27; - - (D.f[ DIR_PPP ])[ktne] = f_BSW-c1o216; - (D.f[ DIR_PMP ])[ktse] = f_BNW-c1o216; - (D.f[ DIR_PPM ])[kbne] = f_TSW-c1o216; - (D.f[ DIR_PMM ])[kbse] = f_TNW-c1o216; - (D.f[ DIR_MPP ])[ktnw] = f_BSE-c1o216; - (D.f[ DIR_MMP ])[ktsw] = f_BNE-c1o216; - (D.f[ DIR_MPM ])[kbnw] = f_TSE-c1o216; - (D.f[ DIR_MMM ])[kbsw] = f_TNE-c1o216; - } - __syncthreads(); - } -} -//////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////// -__global__ void LB_Kernel_Casc27(real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - int k; // Zugriff auf arrays im device - // - int tx = threadIdx.x; // Thread index = lokaler i index - int by = blockIdx.x; // Block index x - int bz = blockIdx.y; // Block index y - int x = tx + STARTOFFX; // Globaler x-Index - int y = by + STARTOFFY; // Globaler y-Index - int z = bz + STARTOFFZ; // Globaler z-Index - //vom 10.06.: - const unsigned sizeX = blockDim.x; - const unsigned sizeY = gridDim.x; - - const unsigned nx = sizeX + 2 * STARTOFFX; - const unsigned ny = sizeY + 2 * STARTOFFY; - - k = nx*(ny*z + y) + x; - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if( (BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int kzero= k; - unsigned int ke = k; - unsigned int kw = neighborX[k]; - unsigned int kn = k; - unsigned int ks = neighborY[k]; - unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = k; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = k; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = k; - 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 = k; - unsigned int kbsw = neighborZ[ksw]; - //unsigned int nxny = nx*ny; - //unsigned int kzero= k; - //unsigned int ke = k; - //unsigned int kw = k + 1; - //unsigned int kn = k; - //unsigned int ks = k + nx; - //unsigned int kt = k; - //unsigned int kb = k + nxny; - //unsigned int ksw = k + nx + 1; - //unsigned int kne = k; - //unsigned int kse = k + nx; - //unsigned int knw = k + 1; - //unsigned int kbw = k + nxny + 1; - //unsigned int kte = k; - //unsigned int kbe = k + nxny; - //unsigned int ktw = k + 1; - //unsigned int kbs = k + nxny + nx; - //unsigned int ktn = k; - //unsigned int kbn = k + nxny; - //unsigned int kts = k + nx; - //unsigned int ktse = k + nx; - //unsigned int kbnw = k + nxny + 1; - //unsigned int ktnw = k + 1; - //unsigned int kbse = k + nxny + nx; - //unsigned int ktsw = k + nx + 1; - //unsigned int kbne = k + nxny; - //unsigned int ktne = k; - //unsigned int kbsw = k + nxny + nx + 1; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - 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_ZERO, f_TNE,f_TNW,f_TSE,f_TSW, f_BNE,f_BNW,f_BSE,f_BSW; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - f_E = (D.f[DIR_P00])[ke]+c2o27; - f_W = (D.f[DIR_M00])[kw]+c2o27; - f_N = (D.f[DIR_0P0])[kn]+c2o27; - f_S = (D.f[DIR_0M0])[ks]+c2o27; - f_T = (D.f[DIR_00P])[kt]+c2o27; - f_B = (D.f[DIR_00M])[kb]+c2o27; - f_NE = (D.f[DIR_PP0])[kne]+c1o54; - f_SW = (D.f[DIR_MM0])[ksw]+c1o54; - f_SE = (D.f[DIR_PM0])[kse]+c1o54; - f_NW = (D.f[DIR_MP0])[knw]+c1o54; - f_TE = (D.f[DIR_P0P])[kte]+c1o54; - f_BW = (D.f[DIR_M0M])[kbw]+c1o54; - f_BE = (D.f[DIR_P0M])[kbe]+c1o54; - f_TW = (D.f[DIR_M0P])[ktw]+c1o54; - f_TN = (D.f[DIR_0PP])[ktn]+c1o54; - f_BS = (D.f[DIR_0MM])[kbs]+c1o54; - f_BN = (D.f[DIR_0PM])[kbn]+c1o54; - f_TS = (D.f[DIR_0MP])[kts]+c1o54; - f_ZERO = (D.f[DIR_000])[kzero]+c8o27; - f_TNE = (D.f[DIR_PPP])[ktne]+c1o216; - f_TSW = (D.f[DIR_MMP])[ktsw]+c1o216; - f_TSE = (D.f[DIR_PMP])[ktse]+c1o216; - f_TNW = (D.f[DIR_MPP])[ktnw]+c1o216; - f_BNE = (D.f[DIR_PPM])[kbne]+c1o216; - f_BSW = (D.f[DIR_MMM])[kbsw]+c1o216; - f_BSE = (D.f[DIR_PMM])[kbse]+c1o216; - f_BNW = (D.f[DIR_MPM])[kbnw]+c1o216; - //////////////////////////////////////////////////////////////////////////////// - - if( BC == GEO_FLUID || BC == GEO_VELO) - { - { - // /////////////////////////version 13.04. - // real drho = f_ZERO+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; - // real vx1 = f_E -f_W +f_NE-f_SW+f_SE-f_NW+f_TE-f_BW+f_BE-f_TW+ f_TNE-f_TSW+f_TSE-f_TNW+ f_BNE-f_BSW+f_BSE-f_BNW; - // real vx2 = f_N -f_S +f_NE-f_SW-f_SE+f_NW+f_TN-f_BS+f_BN-f_TS+ f_TNE-f_TSW-f_TSE+f_TNW+ f_BNE-f_BSW-f_BSE+f_BNW; - // real vx3 = f_T -f_B +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; - //// vx1=vx1/(drho); vx2=vx2/(drho); vx3=vx3/(drho); - // ////////////////////////////////////////////////////////////////////////// - // //BGK - // ////////////////////////////////////////////////////////////////////////// - - - // real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - // f_ZERO = f_ZERO *(one+(-omega))-(-omega)* c8over27* (drho-cu_sq); - // f_E = f_E *(one+(-omega))-(-omega)* c2over27* (drho+three*( vx1 )+c9over2*( vx1 )*( vx1 )-cu_sq); - // f_W = f_W *(one+(-omega))-(-omega)* c2over27* (drho+three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cu_sq); - // f_N = f_N *(one+(-omega))-(-omega)* c2over27* (drho+three*( vx2 )+c9over2*( vx2 )*( vx2 )-cu_sq); - // f_S = f_S *(one+(-omega))-(-omega)* c2over27* (drho+three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cu_sq); - // f_T = f_T *(one+(-omega))-(-omega)* c2over27* (drho+three*( vx3)+c9over2*( vx3)*( vx3)-cu_sq); - // f_B = f_B *(one+(-omega))-(-omega)* c2over27* (drho+three*( -vx3)+c9over2*( -vx3)*( -vx3)-cu_sq); - // f_NE = f_NE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - // f_SW = f_SW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - // f_SE = f_SE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - // f_NW = f_NW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - // f_TE = f_TE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - // f_BW = f_BW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - // f_BE = f_BE *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - // f_TW = f_TW *(one+(-omega))-(-omega)* c1over54* (drho+three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - // f_TN = f_TN *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cu_sq); - // f_BS = f_BS *(one+(-omega))-(-omega)* c1over54* (drho+three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - // f_BN = f_BN *(one+(-omega))-(-omega)* c1over54* (drho+three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cu_sq); - // f_TS = f_TS *(one+(-omega))-(-omega)* c1over54* (drho+three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - // f_TNE = f_TNE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - // f_BSW = f_BSW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - // f_BNE = f_BNE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - // f_TSW = f_TSW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - // f_TSE = f_TSE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - // f_BNW = f_BNW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - // f_BSE = f_BSE *(one+(-omega))-(-omega)* c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - // f_TNW = f_TNW *(one+(-omega))-(-omega)* c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - - ///////////////////////version 13.04. - real rho = f_ZERO+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; - //real rho = rho0 + one; - real vx = f_E -f_W +f_NE-f_SW+f_SE-f_NW+f_TE-f_BW+f_BE-f_TW+ f_TNE-f_TSW+f_TSE-f_TNW+ f_BNE-f_BSW+f_BSE-f_BNW; - real vy = f_N -f_S +f_NE-f_SW-f_SE+f_NW+f_TN-f_BS+f_BN-f_TS+ f_TNE-f_TSW-f_TSE+f_TNW+ f_BNE-f_BSW-f_BSE+f_BNW; - real vz = f_T -f_B +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; - vx=vx/(rho); vy=vy/(rho); vz=vz/(rho); - - real mu[3][3][3]; - - mu[2][0][0]=(f_E+f_W+f_NE+f_SW+f_SE+f_NW+f_TE+f_BW+f_BE+f_TW+f_TNE+f_BNE+f_TSE+f_BSE+f_TNW+f_BNW+f_TSW+f_BSW)/(rho);//+(c1o3); - mu[0][2][0]=(f_N+f_S+f_NE+f_SW+f_SE+f_NW+f_TN+f_BS+f_BN+f_TS+f_TNE+f_BNE+f_TSE+f_BSE+f_TNW+f_BNW+f_TSW+f_BSW)/(rho);//+(c1o3); - mu[0][0][2]=(f_T+f_B+f_TE+f_BW+f_BE+f_TW+f_TN+f_BS+f_BN+f_TS+f_TNE+f_BNE+f_TSE+f_BSE+f_TNW+f_BNW+f_TSW+f_BSW)/(rho);//+(c1o3); - mu[1][1][0]=(f_NE-f_SE+f_SW-f_NW+f_TNE-f_TSE+f_BNE-f_BSE+f_TSW-f_TNW+f_BSW-f_BNW)/(rho); - mu[1][0][1]=(f_TE+f_BW-f_BE-f_TW+f_TNE-f_BNE+f_TSE-f_BSE-f_TNW+f_BNW-f_TSW+f_BSW)/(rho); - mu[0][1][1]=(f_TN+f_BS-f_BN-f_TS+f_TNE-f_BNE-f_TSE+f_BSE+f_TNW-f_BNW-f_TSW+f_BSW)/(rho); - mu[2][1][0]=(f_NE-f_SW-f_SE+f_NW+f_TNE+f_BNE-f_TSE-f_BSE+f_TNW+f_BNW-f_TSW-f_BSW)/(rho); - mu[1][2][0]=(f_NE-f_SW+f_SE-f_NW+f_TNE-f_TNW+f_BNE-f_BNW+f_TSE-f_TSW+f_BSE-f_BSW)/(rho); - mu[1][0][2]=(f_TE-f_BW+f_BE-f_TW+f_TNE-f_TNW+f_BNE-f_BNW+f_TSE-f_TSW+f_BSE-f_BSW)/(rho); - mu[1][1][1]=(f_TNE-f_BNE-f_TSE+f_BSE-f_TNW+f_BNW+f_TSW-f_BSW)/(rho); - mu[2][0][1]=(f_TE-f_BW-f_BE+f_TW+f_TNE-f_BNE+f_TSE-f_BSE+f_TNW-f_BNW+f_TSW-f_BSW)/(rho); - mu[0][2][1]=(f_TN-f_BS-f_BN+f_TS+f_TNE-f_BNE+f_TSE-f_BSE+f_TNW-f_BNW+f_TSW-f_BSW)/(rho); - mu[0][1][2]=(f_TN-f_BS+f_BN-f_TS+f_TNE+f_BNE-f_TSE-f_BSE+f_TNW+f_BNW-f_TSW-f_BSW)/(rho); - mu[2][2][0]=(f_NE+f_SW+f_SE+f_NW+f_TNE+f_BNE+f_TSE+f_BSE+f_TNW+f_BNW+f_TSW+f_BSW)/(rho);//+(c1o9); - mu[1][2][1]=(f_TNE-f_BNE+f_TSE-f_BSE-f_TNW+f_BNW-f_TSW+f_BSW)/(rho); - mu[2][0][2]=(f_TE+f_BW+f_BE+f_TW+f_TNE+f_BNE+f_TSE+f_BSE+f_TNW+f_BNW+f_TSW+f_BSW)/(rho);//+(c1o9); - mu[2][1][1]=(f_TNE-f_BNE-f_TSE+f_BSE+f_TNW-f_BNW-f_TSW+f_BSW)/(rho); - mu[1][1][2]=(f_TNE+f_BNE-f_TSE-f_BSE-f_TNW-f_BNW+f_TSW+f_BSW)/(rho); - mu[0][2][2]=(f_TN+f_BS+f_BN+f_TS+f_TNE+f_BNE+f_TSE+f_BSE+f_TNW+f_BNW+f_TSW+f_BSW)/(rho);//+(c1o9); - mu[2][2][1]=(f_TNE-f_BNE+f_TSE-f_BSE+f_TNW-f_BNW+f_TSW-f_BSW)/(rho); - mu[1][2][2]=(f_TNE-f_TNW+f_BNE-f_BNW+f_TSE-f_TSW+f_BSE-f_BSW)/(rho); - mu[2][1][2]=(f_TNE+f_BNE-f_TSE-f_BSE+f_TNW+f_BNW-f_TSW-f_BSW)/(rho); - mu[2][2][2]=(f_TNE+f_BNE+f_TSE+f_BSE+f_TNW+f_BNW+f_TSW+f_BSW)/(rho);//+(c1o27); - mu[0][0][0]=c1o1; - mu[1][0][0]=vx; - mu[0][1][0]=vy; - mu[0][0][1]=vz; - - real M_zXX=c0o1; real M_zYY=c0o1; real M_zZZ=c0o1; real M_zXY=c0o1; real M_zXZ=c0o1; real M_zYZ=c0o1; - real M_zXXY=c0o1; real M_zXYY=c0o1; real M_zXXZ=c0o1; real M_zXZZ=c0o1; real M_zYYZ=c0o1; real M_zYZZ=c0o1; real M_zXYZ=c0o1; - real M_zXXYY=c0o1; real M_zXXZZ=c0o1; real M_zYYZZ=c0o1; real M_zXXYZ=c0o1; real M_zXYYZ=c0o1; real M_zXYZZ=c0o1; - real M_zXXYYZ=c0o1; real M_zXXYZZ=c0o1; real M_zXYYZZ=c0o1; real M_zXXYYZZ=c0o1; - real M_zXYeq=c0o1; real M_zXZeq=c0o1; real M_zYZeq=c0o1; real M_zXYZeq=c0o1; - real M_zXXYZeq=c0o1; real M_zXYYZeq=c0o1; real M_zXYZZeq=c0o1; - real M_zXXYYZeq=c0o1; real M_zXXYZZeq=c0o1; real M_zXYYZZeq=c0o1; real M_zXXYYZZeq=c0o1; - - M_zXXYYZZ= -c5o1*mu[0][0][1] * mu[0][0][1] * mu[0][1][0] * mu[0][1][0] * mu[1][0][0] * - mu[1][0][0] + mu[0][0][2] * mu[0][1][0] * mu[0][1][0] * mu[1][0][0] * - mu[1][0][0] + c4o1*mu[0][0][1] * mu[0][1][0] * mu[0][1][1] * mu[1][0][0] * - mu[1][0][0] - c2o1*mu[0][1][0] * mu[0][1][2] * mu[1][0][0] * mu[1][0][0] + - mu[0][0][1] * mu[0][0][1] * mu[0][2][0] * mu[1][0][0] * mu[1][0][0] - - c2o1*mu[0][0][1] * mu[0][2][1] * mu[1][0][0] * mu[1][0][0] + mu[0][2][2] * - mu[1][0][0] * mu[1][0][0] + c4o1*mu[0][0][1] * mu[0][1][0] * mu[0][1][0] * - mu[1][0][0] * mu[1][0][1] - c2o1*mu[0][1][0] * mu[0][1][0] * mu[1][0][0] * - mu[1][0][2] + c4o1*mu[0][0][1] * mu[0][0][1] * mu[0][1][0] * mu[1][0][0] * - mu[1][1][0] - c8o1*mu[0][0][1] * mu[0][1][0] * mu[1][0][0] * mu[1][1][1] + - c4o1*mu[0][1][0] * mu[1][0][0] * mu[1][1][2] - c2o1*mu[0][0][1] * mu[0][0][1] * - mu[1][0][0] * mu[1][2][0] + c4o1*mu[0][0][1] * mu[1][0][0] * mu[1][2][1] - - c2o1*mu[1][0][0] * mu[1][2][2] + mu[0][0][1] * mu[0][0][1] * mu[0][1][0] * - mu[0][1][0] * mu[2][0][0] - c2o1*mu[0][0][1] * mu[0][1][0] * mu[0][1][0] * - mu[2][0][1] + mu[0][1][0] * mu[0][1][0] * mu[2][0][2] - c2o1*mu[0][0][1] * - mu[0][0][1] * mu[0][1][0] * mu[2][1][0] + c4o1*mu[0][0][1] * mu[0][1][0] * - mu[2][1][1] - c2o1*mu[0][1][0] * mu[2][1][2] + mu[0][0][1] * mu[0][0][1] * - mu[2][2][0] - c2o1*mu[0][0][1] * mu[2][2][1] + mu[2][2][2]; //5 - M_zXXYYZ= c4o1*mu[0][0][1] * mu[0][1][0] * mu[0][1][0] * mu[1][0][0] * mu[1][0][0] - - c2o1*mu[0][1][0] * mu[0][1][1] * mu[1][0][0] * mu[1][0][0] - mu[0][0][1] * - mu[0][2][0] * mu[1][0][0] * mu[1][0][0] + mu[0][2][1] * mu[1][0][0] * - mu[1][0][0] - c2o1*mu[0][1][0] * mu[0][1][0] * mu[1][0][0] * mu[1][0][1] - - c4o1*mu[0][0][1] * mu[0][1][0] * mu[1][0][0] * mu[1][1][0] + c4o1*mu[0][1][0] * - mu[1][0][0] * mu[1][1][1] + c2o1*mu[0][0][1] * mu[1][0][0] * mu[1][2][0] - - c2o1*mu[1][0][0] * mu[1][2][1] - mu[0][0][1] * mu[0][1][0] * mu[0][1][0] * - mu[2][0][0] + mu[0][1][0] * mu[0][1][0] * mu[2][0][1] + c2o1*mu[0][0][1] * - mu[0][1][0] * mu[2][1][0] - c2o1*mu[0][1][0] * mu[2][1][1] - mu[0][0][1] * - mu[2][2][0] + mu[2][2][1]; //6 - M_zXXYY= -c3o1*mu[0][1][0] * mu[0][1][0] * mu[1][0][0] * mu[1][0][0] + mu[0][2][0] * - mu[1][0][0] * mu[1][0][0] + c4o1*mu[0][1][0] * mu[1][0][0] * mu[1][1][0] - - c2o1*mu[1][0][0] * mu[1][2][0] + mu[0][1][0] * mu[0][1][0] * mu[2][0][0] - - c2o1*mu[0][1][0] * mu[2][1][0] + mu[2][2][0]; //7 - M_zXXYZZ= c4o1*mu[0][0][1] * mu[0][0][1] * mu[0][1][0] * mu[1][0][0] * mu[1][0][0] - - mu[0][0][2] * mu[0][1][0] * mu[1][0][0] * mu[1][0][0] - c2o1*mu[0][0][1] * - mu[0][1][1] * mu[1][0][0] * mu[1][0][0] + mu[0][1][2] * mu[1][0][0] * - mu[1][0][0] - c4o1*mu[0][0][1] * mu[0][1][0] * mu[1][0][0] * mu[1][0][1] + - c2o1*mu[0][1][0] * mu[1][0][0] * mu[1][0][2] - c2o1*mu[0][0][1] * mu[0][0][1] * - mu[1][0][0] * mu[1][1][0] + c4o1*mu[0][0][1] * mu[1][0][0] * mu[1][1][1] - - c2o1*mu[1][0][0] * mu[1][1][2] - mu[0][0][1] * mu[0][0][1] * mu[0][1][0] * - mu[2][0][0] + c2o1*mu[0][0][1] * mu[0][1][0] * mu[2][0][1] - mu[0][1][0] * - mu[2][0][2] + mu[0][0][1] * mu[0][0][1] * mu[2][1][0] - c2o1*mu[0][0][1] * - mu[2][1][1] + mu[2][1][2]; //8 - M_zXXYZ= -c3o1*mu[0][0][1] * mu[0][1][0] * mu[1][0][0] * mu[1][0][0] + mu[0][1][1] * - mu[1][0][0] * mu[1][0][0] + c2o1*mu[0][1][0] * mu[1][0][0] * mu[1][0][1] + - c2o1*mu[0][0][1] * mu[1][0][0] * mu[1][1][0] - c2o1*mu[1][0][0] * mu[1][1][1] + - mu[0][0][1] * mu[0][1][0] * mu[2][0][0] - mu[0][1][0] * mu[2][0][1] - - mu[0][0][1] * mu[2][1][0] + mu[2][1][1]; //9 - M_zXXY= c2o1*mu[0][1][0] * mu[1][0][0] * mu[1][0][0] - c2o1*mu[1][0][0] * mu[1][1][0] - - mu[0][1][0] * mu[2][0][0] + mu[2][1][0]; //10 - M_zXXZZ= -c3o1*mu[0][0][1] * mu[0][0][1] * mu[1][0][0] * mu[1][0][0] + mu[0][0][2] * - mu[1][0][0] * mu[1][0][0] + c4o1*mu[0][0][1] * mu[1][0][0] * mu[1][0][1] - - c2o1*mu[1][0][0] * mu[1][0][2] + mu[0][0][1] * mu[0][0][1] * mu[2][0][0] - - c2o1*mu[0][0][1] * mu[2][0][1] + mu[2][0][2]; //11 - M_zXXZ= c2o1*mu[0][0][1] * mu[1][0][0] * mu[1][0][0] - c2o1*mu[1][0][0] * mu[1][0][1] - - mu[0][0][1] * mu[2][0][0] + mu[2][0][1]; //12 - M_zXX=- mu[1][0][0] * mu[1][0][0] + mu[2][0][0]; //13 - M_zXYYZZ= c4o1*mu[0][0][1] * mu[0][0][1] * mu[0][1][0] * mu[0][1][0] * mu[1][0][0] - - mu[0][0][2] * mu[0][1][0] * mu[0][1][0] * mu[1][0][0] - c4o1*mu[0][0][1] * - mu[0][1][0] * mu[0][1][1] * mu[1][0][0] + c2o1*mu[0][1][0] * mu[0][1][2] * - mu[1][0][0] - mu[0][0][1] * mu[0][0][1] * mu[0][2][0] * mu[1][0][0] + - c2o1*mu[0][0][1] * mu[0][2][1] * mu[1][0][0] - mu[0][2][2] * mu[1][0][0] - - c2o1*mu[0][0][1] * mu[0][1][0] * mu[0][1][0] * mu[1][0][1] + mu[0][1][0] * - mu[0][1][0] * mu[1][0][2] - c2o1*mu[0][0][1] * mu[0][0][1] * mu[0][1][0] * - mu[1][1][0] + c4o1*mu[0][0][1] * mu[0][1][0] * mu[1][1][1] - c2o1*mu[0][1][0] * - mu[1][1][2] + mu[0][0][1] * mu[0][0][1] * mu[1][2][0] - c2o1*mu[0][0][1] * - mu[1][2][1] + mu[1][2][2]; //14 - M_zXYYZ= -c3o1*mu[0][0][1] * mu[0][1][0] * mu[0][1][0] * mu[1][0][0] + c2o1*mu[0][1][0] * - mu[0][1][1] * mu[1][0][0] + mu[0][0][1] * mu[0][2][0] * mu[1][0][0] - - mu[0][2][1] * mu[1][0][0] + mu[0][1][0] * mu[0][1][0] * mu[1][0][1] + - c2o1*mu[0][0][1] * mu[0][1][0] * mu[1][1][0] - c2o1*mu[0][1][0] * mu[1][1][1] - - mu[0][0][1] * mu[1][2][0] + mu[1][2][1]; //15 - M_zXYY= c2o1*mu[0][1][0] * mu[0][1][0] * mu[1][0][0] - mu[0][2][0] * mu[1][0][0] - - c2o1*mu[0][1][0] * mu[1][1][0] + mu[1][2][0]; //16 - M_zXYZZ= -c3o1*mu[0][0][1] * mu[0][0][1] * mu[0][1][0] * mu[1][0][0] + mu[0][0][2] * - mu[0][1][0] * mu[1][0][0] + c2o1*mu[0][0][1] * mu[0][1][1] * mu[1][0][0] - - mu[0][1][2] * mu[1][0][0] + c2o1*mu[0][0][1] * mu[0][1][0] * mu[1][0][1] - - mu[0][1][0] * mu[1][0][2] + mu[0][0][1] * mu[0][0][1] * mu[1][1][0] - - c2o1*mu[0][0][1] * mu[1][1][1] + mu[1][1][2]; //17 - M_zXYZ= c2o1*mu[0][0][1] * mu[0][1][0] * mu[1][0][0] - mu[0][1][1] * mu[1][0][0] - - mu[0][1][0] * mu[1][0][1] - mu[0][0][1] * mu[1][1][0] + mu[1][ 1][ 1]; //18 - M_zXY = -mu[0][1][0] * mu[1][0][0] + mu[1][1][0]; //19 - M_zXZZ= c2o1*mu[0][0][1] * mu[0][0][1] * mu[1][0][0] - mu[0][0][2] * mu[1][0][0] - - c2o1*mu[0][0][1] * mu[1][0][1] + mu[1][0][2]; //20 - M_zXZ = -mu[0][0][1] * mu[1][0][0] + mu[1][0][1]; //21 - M_zYYZZ= -c3o1*mu[0][0][1] * mu[0][0][1] * mu[0][1][0] * mu[0][1][0] + mu[0][0][2] * - mu[0][1][0] * mu[0][1][0] + c4o1*mu[0][0][1] * mu[0][1][0] * mu[0][1][1] - - c2o1*mu[0][1][0] * mu[0][1][2] + mu[0][0][1] * mu[0][0][1] * mu[0][2][0] - - c2o1*mu[0][0][1] * mu[0][2][1] + mu[0][2][2]; //22 - M_zYYZ= c2o1*mu[0][0][1] * mu[0][1][0] * mu[0][1][0] - c2o1*mu[0][1][0] * mu[0][1][1] - - mu[0][0][1] * mu[0][2][0] + mu[0][2][1]; //23 - M_zYY = -mu[0][1][0] * mu[0][1][0] + mu[0][2][0]; //24 - M_zYZZ = c2o1*mu[0][0][1] * mu[0][0][1] * mu[0][1][0] - mu[0][0][2] * mu[0][1][0] - - c2o1*mu[0][0][1] * mu[0][1][1] + mu[0][1][2]; //25 - M_zYZ = -mu[0][0][1] * mu[0][1][0] + mu[0][1][1]; //26 - M_zZZ = -mu[0][0][1] * mu[0][0][1] + mu[0][0][2]; //27 - - M_zXXYYZZeq=c1o27; - M_zXXYYZeq=c0o1; - M_zXXYZZeq=c0o1; - M_zXXYZeq=c0o1; - M_zXYYZZeq=c0o1; - M_zXYYZeq=c0o1; - M_zXYZZeq=c0o1; - - real MXXpMYYpMZZ,MXXmMYY, MXXmMZZ, MXXYpMYZZ,MXXZpMYYZ,MXYYpMXZZ, MXXYmMYZZ,MXXZmMYYZ,MXYYmMXZZ, MXXYYppp,MXXYYpm2p, MXXYYppm2; - real MXXpMYYpMZZeq,MXXmMYYeq, MXXmMZZeq, MXXYpMYZZeq,MXXZpMYYZeq,MXYYpMXZZeq, MXXYmMYZZeq,MXXZmMYYZeq,MXYYmMXZZeq, MXXYYpppeq,MXXYYpm2peq, MXXYYppm2eq; - - //coll faktoren: - real w1,w2,w3,w4,w5,w6,w7,w8,w9,w10; - w2=-c1o1;//-omega; - w7=-c1o1; - w9=-c1o1; - w10=-c1o1; - w1=-omega; - w3=-c1o1; - w4=-c1o1; - w5=-c1o1; - w6=-c1o1; - w8=-c1o1; - ////////lin kombi bilden: - MXXpMYYpMZZ = M_zXX + M_zYY + M_zZZ; - MXXmMYY = M_zXX - M_zYY; - MXXmMZZ = M_zXX - M_zZZ; - - MXXYpMYZZ = M_zXXY+M_zYZZ; - MXXYmMYZZ = M_zXXY-M_zYZZ; - MXXZpMYYZ = M_zXXZ+M_zYYZ; - MXXZmMYYZ = M_zXXZ-M_zYYZ; - MXYYpMXZZ = M_zXYY+M_zXZZ; - MXYYmMXZZ = M_zXYY-M_zXZZ; - - MXXYYppp = M_zXXYY + M_zXXZZ + M_zYYZZ; - MXXYYpm2p = M_zXXYY - 2.0*M_zXXZZ + M_zYYZZ; - MXXYYppm2 = M_zXXYY + M_zXXZZ - 2.0*M_zYYZZ; - bool casc=false; - bool factorCasc=true; - if(casc) - { - MXXpMYYpMZZeq = c1o1; - MXXmMYYeq = c2o1; - MXXmMZZeq = c2o1; - - MXXYpMYZZeq = c2o1; - MXXYmMYZZeq = c2o1; - MXXZpMYYZeq = c2o1; - MXXZmMYYZeq = c2o1; - MXYYpMXZZeq = c2o1; - MXYYmMXZZeq = c2o1; - - MXXYYpppeq = c1o3; - MXXYYpm2peq = c2o1; - MXXYYppm2eq = c2o1; - - //relaxation: - MXXpMYYpMZZ -= w2*(MXXpMYYpMZZeq-MXXpMYYpMZZ); - MXXmMYY -= w1*(MXXmMYYeq -MXXmMYY); - MXXmMZZ -= w1*(MXXmMZZeq -MXXmMZZ); - - MXXYpMYZZ -= w3*(MXXYpMYZZeq-MXXYpMYZZ); - MXXYmMYZZ -= w4*(MXXYmMYZZeq-MXXYmMYZZ); - MXXZpMYYZ -= w3*(MXXZpMYYZeq-MXXZpMYYZ); - MXXZmMYYZ -= w4*(MXXZmMYYZeq-MXXZmMYYZ); - MXYYpMXZZ -= w3*(MXYYpMXZZeq-MXYYpMXZZ); - MXYYmMXZZ -= w4*(MXYYmMXZZeq-MXYYmMXZZ); - - MXXYYppp -= w7*(MXXYYpppeq -MXXYYppp ); - MXXYYpm2p -= w6*(MXXYYpm2peq-MXXYYpm2p); - MXXYYppm2 -= w6*(MXXYYppm2eq-MXXYYppm2); - - M_zXXYYZZ=M_zXXYYZZ-w10*(M_zXXYYZZeq-M_zXXYYZZ); - M_zXZ= M_zXZ- w1*(M_zXZeq - M_zXZ ); - M_zYZ= M_zYZ- w1*(M_zYZeq - M_zYZ ); - M_zXY= M_zXY- w1*(M_zXYeq - M_zXY ); - - M_zXYZ= M_zXYZ- w5*(M_zXYZeq - M_zXYZ ); - - M_zXYYZ= M_zXYYZ- w8*(M_zXYYZeq - M_zXYYZ ); - M_zXYZZ= M_zXYZZ- w8*(M_zXYZZeq - M_zXYZZ ); - M_zXXYZ= M_zXXYZ- w8*(M_zXXYZeq - M_zXXYZ ); - - M_zXXYYZ= M_zXXYYZ- w9*(M_zXXYYZeq- M_zXXYYZ ); - M_zXXYZZ= M_zXXYZZ- w9*(M_zXXYZZeq- M_zXXYZZ ); - M_zXYYZZ= M_zXYYZZ- w9*(M_zXYYZZeq- M_zXYYZZ ); - - ////////von Lin Kombis zurueck: - M_zXX = c1o3 * MXXmMYY + c1o3 * MXXmMZZ + c1o3 * MXXpMYYpMZZ; - M_zYY = -c2o3 * MXXmMYY + c1o3 * MXXmMZZ + c1o3 * MXXpMYYpMZZ; - M_zZZ = c1o3 * MXXmMYY - c2o3 * MXXmMZZ + c1o3 * MXXpMYYpMZZ; - - M_zXXY = (MXXYmMYZZ + MXXYpMYZZ)*c1o2; - M_zYZZ = c1o2*(-MXXYmMYZZ + MXXYpMYZZ); - M_zXYY =(MXYYmMXZZ + MXYYpMXZZ)*c1o2; - M_zXZZ = c1o2*(-MXYYmMXZZ + MXYYpMXZZ); - M_zXXZ = (MXXZmMYYZ + MXXZpMYYZ)*c1o2; - M_zYYZ = c1o2*(-MXXZmMYYZ + MXXZpMYYZ); - - M_zXXYY = c1o3* MXXYYpm2p + c1o3* MXXYYppm2 + c1o3*MXXYYppp; - M_zXXZZ = -c1o3* MXXYYpm2p + c1o3* MXXYYppp; - M_zYYZZ = -c1o3* MXXYYppm2 + c1o3* MXXYYppp; - } - else if (factorCasc) - { - MXXpMYYpMZZeq = c1o1; - MXXmMYYeq = c2o1; - MXXmMZZeq = c2o1; - - MXXYpMYZZeq = c2o1; - MXXYmMYZZeq = c2o1; - MXXZpMYYZeq = c2o1; - MXXZmMYYZeq = c2o1; - MXYYpMXZZeq = c2o1; - MXYYmMXZZeq = c2o1; - - MXXYYpppeq =c1o3; - MXXYYpm2peq = c2o1; - MXXYYppm2eq = c2o1; - - //relaxation: - MXXpMYYpMZZ -= w2*(MXXpMYYpMZZeq-MXXpMYYpMZZ); - MXXmMYY -= w1*(MXXmMYYeq -MXXmMYY); - MXXmMZZ -= w1*(MXXmMZZeq -MXXmMZZ); - - MXXYpMYZZ -= w3*(MXXYpMYZZeq-MXXYpMYZZ); - MXXYmMYZZ -= w4*(MXXYmMYZZeq-MXXYmMYZZ); - MXXZpMYYZ -= w3*(MXXZpMYYZeq-MXXZpMYYZ); - MXXZmMYYZ -= w4*(MXXZmMYYZeq-MXXZmMYYZ); - MXYYpMXZZ -= w3*(MXYYpMXZZeq-MXYYpMXZZ); - MXYYmMXZZ -= w4*(MXYYmMXZZeq-MXYYmMXZZ); - - M_zXZ= M_zXZ- w1*(M_zXZeq - M_zXZ ); - M_zYZ= M_zYZ- w1*(M_zYZeq - M_zYZ ); - M_zXY= M_zXY- w1*(M_zXYeq - M_zXY ); - M_zXYZ= M_zXYZ- w5*(M_zXYZeq - M_zXYZ ); - - ////////von Lin Kombis zurueck: - M_zXX = c1o3 * MXXmMYY + c1o3 * MXXmMZZ + c1o3 * MXXpMYYpMZZ; - M_zYY = -c2o3 * MXXmMYY + c1o3 * MXXmMZZ + c1o3 * MXXpMYYpMZZ; - M_zZZ = c1o3 * MXXmMYY - c2o3 * MXXmMZZ + c1o3 * MXXpMYYpMZZ; - - M_zXXY = (MXXYmMYZZ + MXXYpMYZZ)*c1o2; - M_zYZZ = c1o2*(-MXXYmMYZZ + MXXYpMYZZ); - M_zXYY =(MXYYmMXZZ + MXYYpMXZZ)*c1o2; - M_zXZZ = c1o2*(-MXYYmMXZZ + MXYYpMXZZ); - M_zXXZ = (MXXZmMYYZ + MXXZpMYYZ)*c1o2; - M_zYYZ = c1o2*(-MXXZmMYYZ + MXXZpMYYZ); - - //faktorisierte atraktoren: - MXXYYpppeq=M_zXX*M_zYY+M_zXX*M_zZZ+M_zZZ*M_zYY; - MXXYYpm2peq=M_zXX*M_zYY-2.0*M_zXX*M_zZZ+M_zZZ*M_zYY; - MXXYYppm2eq=M_zXX*M_zYY+M_zXX*M_zZZ-2.0*M_zZZ*M_zYY; - M_zXYYZeq=M_zYY*M_zXZ; - M_zXYZZeq=M_zZZ*M_zXY; - M_zXXYZeq=M_zXX*M_zYZ; - - M_zXXYYZeq=c0o1; - M_zXXYZZeq=c0o1; - M_zXYYZZeq=c0o1; - - M_zXXYYZZeq=M_zXX*M_zYY*M_zZZ; - - MXXYYppp -= w7*(MXXYYpppeq -MXXYYppp ); - MXXYYpm2p -= w6*(MXXYYpm2peq-MXXYYpm2p); - MXXYYppm2 -= w6*(MXXYYppm2eq-MXXYYppm2); - M_zXXYYZZ=M_zXXYYZZ-w10*(M_zXXYYZZeq-M_zXXYYZZ); - M_zXYYZ= M_zXYYZ- w8*(M_zXYYZeq - M_zXYYZ ); - M_zXYZZ= M_zXYZZ- w8*(M_zXYZZeq - M_zXYZZ ); - M_zXXYZ= M_zXXYZ- w8*(M_zXXYZeq - M_zXXYZ ); - - M_zXXYYZ= M_zXXYYZ- w9*(M_zXXYYZeq- M_zXXYYZ ); - M_zXXYZZ= M_zXXYZZ- w9*(M_zXXYZZeq- M_zXXYZZ ); - M_zXYYZZ= M_zXYYZZ- w9*(M_zXYYZZeq- M_zXYYZZ ); - - M_zXXYY = c1o3* MXXYYpm2p + c1o3* MXXYYppm2 + c1o3*MXXYYppp; - M_zXXZZ = -c1o3* MXXYYpm2p + c1o3* MXXYYppp; - M_zYYZZ = -c1o3* MXXYYppm2 + c1o3* MXXYYppp; - } - //real forcingX1=1.11986e-8;//1.41342e-8;//5.48288e-9;//<-96//1.03093e-8;//1.59178e-8;//1.6256e-8; - - //mu[1][0][0]+=forcingX1; - - mu[2][ 2][ 2]= vx*vx*vy*vy*vz*vz + vx*vx*vy*vy*M_zZZ + c4o1*vx*vx*vy*vz*M_zYZ + c2o1* vx*vx*vy*M_zYZZ + - vx*vx*vz*vz*M_zYY + c2o1* vx*vx*vz*M_zYYZ +vx*vx*M_zYYZZ + c4o1*vx*vy*vy*vz*M_zXZ + - c2o1* vx*vy*vy*M_zXZZ + c4o1* vx*vy*vz*vz*M_zXY+ c8o1* vx*vy*vz*M_zXYZ + c4o1* vx*vy*M_zXYZZ + - c2o1* vx*vz*vz*M_zXYY + c4o1* vx*vz*M_zXYYZ + c2o1*vx*M_zXYYZZ + vy*vy*vz*vz*M_zXX + c2o1* vy*vy*vz*M_zXXZ + - vy*vy*M_zXXZZ + c2o1* vy*vz*vz*M_zXXY + c4o1*vy*vz*M_zXXYZ + c2o1* vy*M_zXXYZZ + vz*vz*M_zXXYY +c2o1* vz*M_zXXYYZ + M_zXXYYZZ;//-(c1o27); - mu[2][ 2][ 1]= vx*vx*vy*vy*vz + c2o1*vx*vx*vy*M_zYZ + vx*vx*vz*M_zYY + vx*vx*M_zYYZ + c2o1*vx*vy*vy*M_zXZ +c4o1*vx*vy*vz*M_zXY +c4o1*vx*vy*M_zXYZ+ - c2o1*vx*vz*M_zXYY + c2o1*vx*M_zXYYZ + vy*vy*vz*M_zXX + vy*vy*M_zXXZ + c2o1* vy*vz*M_zXXY + c2o1*vy*M_zXXYZ + vz*M_zXXYY + M_zXXYYZ; - mu[2][ 2][ 0]= vx*vx*vy*vy + vx*vx*M_zYY + c4o1*vx*vy*M_zXY + c2o1*vx*M_zXYY + vy*vy*M_zXX + c2o1*vy*M_zXXY + M_zXXYY ;//-(c1o9); - mu[2][ 1][ 2]= vx*vx*vy*vz*vz + vx*vx*vy*M_zZZ + c2o1*vx*vx*vz*M_zYZ + vx*vx*M_zYZZ + c4o1*vx*vy*vz*M_zXZ+ //vy->vz - c2o1*vx*vy*M_zXZZ + c2o1*vx*vz*vz*M_zXY + c4o1*vx*vz*M_zXYZ + c2o1*vx*M_zXYZZ + vy*vz*vz*M_zXX + - c2o1*vy*vz*M_zXXZ + vy*M_zXXZZ + vz*vz*M_zXXY + c2o1*vz*M_zXXYZ + M_zXXYZZ; - mu[2][ 1][ 1]= vx*vx*vy*vz + vx*vx*M_zYZ + c2o1*vx*vy*M_zXZ + c2o1*vx*vz*M_zXY + c2o1*vx*M_zXYZ + vy*vz*M_zXX+ vy*M_zXXZ + vz*M_zXXY + M_zXXYZ; - mu[2][ 1][ 0]= vx*vx*vy + c2o1*vx*M_zXY + vy*M_zXX + M_zXXY; - mu[2][ 0][ 2]= vx*vx*vz*vz + vx*vx*M_zZZ + c4o1*vx*vz*M_zXZ+ c2o1*vx*M_zXZZ + vz*vz*M_zXX+ c2o1*vz*M_zXXZ + M_zXXZZ;//-(c1o9); - mu[2][ 0][ 1]= vx*vx*vz + c2o1*vx*M_zXZ + vz*M_zXX + M_zXXZ; - mu[2][ 0][ 0]= vx*vx + M_zXX ;//-(c1o3); - mu[1][ 2][ 2]= vx*vy*vy*vz*vz + vx*vy*vy*M_zZZ + c4o1*vx*vy*vz*M_zYZ + c2o1*vx*vy*M_zYZZ + vx*vz*vz*M_zYY + c2o1*vx*vz*M_zYYZ +vx*M_zYYZZ + c2o1*vy*vy*vz*M_zXZ + vy*vy*M_zXZZ + - c2o1*vy*vz*vz*M_zXY + c4o1*vy*vz*M_zXYZ + c2o1*vy*M_zXYZZ +vz*vz*M_zXYY + c2o1*vz*M_zXYYZ + M_zXYYZZ; - mu[1][ 2][ 1]= vx*vy*vy*vz + c2o1*vx*vy*M_zYZ + vx*vz*M_zYY + vx*M_zYYZ + vy*vy*M_zXZ + c2o1*vy*vz*M_zXY + c2o1*vy*M_zXYZ + vz*M_zXYY + M_zXYYZ; - mu[1][ 2][ 0]= vx*vy*vy + vx*M_zYY + c2o1*vy*M_zXY + M_zXYY; - mu[1][ 1][ 2]= vx*vy*vz*vz+vx*vy*M_zZZ+c2o1*vx*vz*M_zYZ+vx*M_zYZZ+c2o1*vy*vz*M_zXZ+vy*M_zXZZ+vz*vz*M_zXY+c2o1*vz*M_zXYZ+M_zXYZZ; - mu[1][ 1][ 1]= vx*vy*vz + vx*M_zYZ + vy*M_zXZ + vz*M_zXY+M_zXYZ; - mu[1][ 1][ 0]= vx*vy+ M_zXY; - mu[1][ 0][ 2]= vx*vz*vz + vx*M_zZZ + c2o1*vz*M_zXZ + M_zXZZ; - mu[1][ 0][ 1]= vx*vz + M_zXZ; - //mu[1][ 0][ 0]= vx; - mu[0][ 2][ 2]= vy*vy*vz*vz + vy*vy*M_zZZ + c4o1*vy*vz*M_zYZ +c2o1*vy*M_zYZZ + vz*vz*M_zYY + c2o1*vz*M_zYYZ + M_zYYZZ;//-(c1o9); - mu[0][ 2][ 1]= vy*vy*vz + c2o1*vy*M_zYZ + vz*M_zYY + M_zYYZ; - mu[0][ 2][ 0]= vy*vy + M_zYY ;//-(c1o3); - mu[0][ 1][ 2]= vy*vz*vz+ vy*M_zZZ + c2o1*vz*M_zYZ + M_zYZZ; - mu[0][ 1][ 1]= vy*vz + M_zYZ; - //mu[0][ 1][ 0]= vy ; //richtig? - mu[0][ 0][ 2]= vz*vz + M_zZZ;// -(c1o3); - //mu[0][ 0][ 1]= vz; - //mu[0][ 0][ 0]=rho0 ; - - f_E =c1o2* (mu[2][0][0] - mu[2][2][0] + mu[2][2][2] - mu[2][0][2] - mu[1][2][0] + mu[1][2][2] - mu[1][0][2] +mu[1][0][0]) *(rho); - f_W =c1o2* (mu[2][0][0] - mu[2][2][0] + mu[2][2][2] - mu[2][0][2] + mu[1][2][0] - mu[1][2][2] + mu[1][0][2] -mu[1][0][0])* (rho); - f_N =c1o2* (-mu[2][1][0] - mu[2][2][0] + mu[2][2][2] + mu[2][1][2] + mu[0][2][0] - mu[0][2][2] - mu[0][1][2] +mu[0][1][0])* (rho); - f_S =c1o2* (mu[2][1][0] - mu[2][2][0] + mu[2][2][2] - mu[2][1][2] + mu[0][2][0] - mu[0][2][2] + mu[0][1][2] -mu[0][1][0])* (rho); - f_T =c1o2* (mu[2][2][1] + mu[2][2][2] - mu[2][0][1] - mu[2][0][2] - mu[0][2][1] - mu[0][2][2] + mu[0][0][2] +mu[0][0][1])* (rho); - f_B =c1o2* (-mu[2][2][1] + mu[2][2][2] + mu[2][0][1] - mu[2][0][2] + mu[0][2][1] - mu[0][2][2] + mu[0][0][2]-mu[0][0][1])* (rho); - f_NE =c1o4*( mu[2][1][0] + mu[2][2][0]- mu[2][2][2] - mu[2][1][2] + mu[1][1][0]+ mu[1][2][0]- mu[1][2][2] -mu[1][1][2])* (rho); - f_SW =c1o4*(-mu[2][1][0] + mu[2][2 ][0]- mu[2][2][2] + mu[2][1][2] + mu[1][1][0]- mu[1][2][0]+ mu[1][2][2] -mu[1][1][2])* (rho); - f_SE =c1o4*(-mu[2][1][0] + mu[2][2 ][0]- mu[2][2][2] + mu[2][1][2] - mu[1][1][0]+ mu[1][2][0]- mu[1][2][2] +mu[1][1][2])* (rho); - f_NW =c1o4*( mu[2][1][0] + mu[2][2][0]- mu[2][2][2] - mu[2][1][2] - mu[1][1][0]- mu[1][2][0]+ mu[1][2][2] + mu[1][1][2])* (rho); - f_TE=c1o4*(-mu[2][2][1] - mu[2][2][2] + mu[2][0][1] + mu[2][0][2] - mu[1][2][1] - mu[1][2][2] + mu[1][0][1] + mu[1][0][2])*(rho); - f_BW=c1o4*( mu[2][2][1] -mu[2][2][2] - mu[2][0][1] + mu[2][0][2] - mu[1][2][1] + mu[1][2][2] + mu[1][0][1] - mu[1][0][2])*(rho); - f_BE=c1o4*(mu[2][2][1] - mu[2][2][2] - mu[2][0][1] + mu[2][0][2] + mu[1][2][1] - mu[1][2][2] - mu[1][0][1] +mu[1][0][2])* (rho); - f_TW=c1o4*(-mu[2][2][1] - mu[2][2][2] + mu[2][0][1] + mu[2][0][2] + mu[1][2][1] + mu[1][2][2] - mu[1][0][1] -mu[1][0][2])* (rho); - f_TN=c1o4*(-mu[2][2][1] - mu[2][2][2] - mu[2][1][1] - mu[2][1][2] + mu[0][2][1] + mu[0][2][2] + mu[0][1][1]+mu[0][1][2])* (rho); - f_BS=c1o4*( mu[2][2][1] - mu[2][2][2] - mu[2][1][1] + mu[2][1][2] - mu[0][2][1] + mu[0][2][2] + mu[0][1][1] - mu[0][1][2])*(rho); - f_BN=c1o4*( mu[2][2][1] - mu[2][2][2] + mu[2][1][1] - mu[2][1][2] - mu[0][2][1] + mu[0][2][2] - mu[0][1][1] + mu[0][1][2])*(rho); - f_TS=c1o4*(-mu[2][2][1] - mu[2][2][2] + mu[2][1][1] + mu[2][1][2] + mu[0][2][1] + mu[0][2][2] - mu[0][1][1] -mu[0][1][2])* (rho); - f_ZERO= (-mu[2][0][0] + mu[2][2][0] - mu[2][2][2] + mu[2][0][2] - mu[0][2][0] + mu[0][2][2] - mu[0][0][2] + mu[0][0][0])*(rho); - f_TNE=c1o8*( mu[2][2][1] + mu[2][2][2] + mu[2][1][1] + mu[2][1][2] + mu[1][2][1] + mu[1][2][2] + mu[1][1][1] + mu[1][1][2])* (rho); - f_BNE=c1o8*(-mu[2][2][1] + mu[2][2][2] -mu[2][1][1] + mu[2][1][2] - mu[1][2][1] + mu[1][2][2] -mu[1][1][1] + mu[1][1][2])* (rho); - f_TSE=c1o8*( mu[2][2][1] + mu[2][2][2] - mu[2][1][1] - mu[2][1][2] + mu[1][2][1] + mu[1][2][2] - mu[1][1][1] - mu[1][1][2])* (rho); - f_BSE=c1o8*(-mu[2][2][1] + mu[2][2][2] +mu[2][1][1] - mu[2][1][2] - mu[1][2][1] + mu[1][2][2] +mu[1][1][1] - mu[1][1][2])* (rho); - f_TNW=c1o8*( mu[2][2][1] + mu[2][2][2] + mu[2][1][1] + mu[2][1][2] - mu[1][2][1] - mu[1][2][2] - mu[1][1][1] - mu[1][1][2])* (rho); - f_BNW=c1o8*(-mu[2][2][1] + mu[2][2][2] -mu[2][1][1] + mu[2][1][2] + mu[1][2][1] - mu[1][2][2] +mu[1][1][1] - mu[1][1][2])* (rho); - f_TSW=c1o8*( mu[2][2][1] + mu[2][2][2] - mu[2][1][1] - mu[2][1][2] - mu[1][2][1] - mu[1][2][2] + mu[1][1][1] + mu[1][1][2])* (rho); - f_BSW=c1o8*(-mu[2][2][1] + mu[2][2][2]+mu[2][1][1] - mu[2][1][2]+ mu[1][2][1] - mu[1][2][2]-mu[1][1][1] + mu[1][1][2])*(rho); - } - } - - (D.f[ DIR_P00 ])[ke ] = f_W-c2o27; - (D.f[ DIR_M00 ])[kw ] = f_E-c2o27; - - (D.f[ DIR_0P0 ])[kn ] = f_S-c2o27; - (D.f[ DIR_0M0 ])[ks ] = f_N-c2o27; - (D.f[ DIR_00P ])[kt ] = f_B-c2o27; - (D.f[ DIR_00M ])[kb ] = f_T-c2o27; - - (D.f[ DIR_PP0 ])[kne] = f_SW-c1o54; - (D.f[ DIR_MM0 ])[ksw] = f_NE-c1o54; - (D.f[ DIR_PM0 ])[kse] = f_NW-c1o54; - (D.f[ DIR_MP0 ])[knw] = f_SE-c1o54; - (D.f[ DIR_P0P ])[kte] = f_BW-c1o54; - (D.f[ DIR_M0M ])[kbw] = f_TE-c1o54; - (D.f[ DIR_P0M ])[kbe] = f_TW-c1o54; - (D.f[ DIR_M0P ])[ktw] = f_BE-c1o54; - - (D.f[ DIR_0PP ])[ktn] = f_BS-c1o54; - (D.f[ DIR_0MM ])[kbs] = f_TN-c1o54; - (D.f[ DIR_0PM ])[kbn] = f_TS-c1o54; - (D.f[ DIR_0MP ])[kts] = f_BN-c1o54; - - (D.f[ DIR_000])[k] = f_ZERO-c8o27; - - (D.f[ DIR_PPP ])[ktne] = f_BSW-c1o216; - (D.f[ DIR_PMP ])[ktse] = f_BNW-c1o216; - (D.f[ DIR_PPM ])[kbne] = f_TSW-c1o216; - (D.f[ DIR_PMM ])[kbse] = f_TNW-c1o216; - (D.f[ DIR_MPP ])[ktnw] = f_BSE-c1o216; - (D.f[ DIR_MMP ])[ktsw] = f_BNE-c1o216; - (D.f[ DIR_MPM ])[kbnw] = f_TSE-c1o216; - (D.f[ DIR_MMM ])[kbsw] = f_TNE-c1o216; - } - __syncthreads(); -} diff --git a/src/gpu/VirtualFluids_GPU/GPU/Cumulant27.cu b/src/gpu/VirtualFluids_GPU/GPU/Cumulant27.cu deleted file mode 100644 index 59b24df1061af16e79ad35eeceb949e6326407fd..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/GPU/Cumulant27.cu +++ /dev/null @@ -1,6388 +0,0 @@ -// _ ___ __ __________ _ __ ______________ __ -// | | / (_)____/ /___ ______ _/ / ____/ /_ __(_)___/ /____ / ___/ __ / / / / -// | | / / / ___/ __/ / / / __ `/ / /_ / / / / / / __ / ___/ / /___/ /_/ / / / / -// | |/ / / / / /_/ /_/ / /_/ / / __/ / / /_/ / / /_/ (__ ) / /_) / ____/ /__/ / -// |___/_/_/ \__/\__,_/\__,_/_/_/ /_/\__,_/_/\__,_/____/ \____/_/ \_____/ -// -////////////////////////////////////////////////////////////////////////// -/* Device code */ -#include "LBM/LB.h" -#include "basics/constants/NumericConstants.h" -#include "lbm/constants/D3Q27.h" - - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; - -//////////////////////////////////////////////////////////////////////////////// -__global__ void LB_Kernel_Kum_AA2016_Comp_Bulk_SP_27(real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<numberOfLBnodes) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if( (BC != GEO_SOLID) && (BC != GEO_VOID) ) - { - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k ];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke - real mfabb = (D.f[DIR_M00])[kw ];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k ];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn - real mfbab = (D.f[DIR_0M0])[ks ];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k ];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt - real mfbba = (D.f[DIR_00M])[kb ];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k ];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks ];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse - real mfacb = (D.f[DIR_MP0])[kw ];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw - real mfcbc = (D.f[DIR_P0P])[k ];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb ];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe - real mfabc = (D.f[DIR_M0P])[kw ];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw - real mfbcc = (D.f[DIR_0PP])[k ];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb ];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn - real mfbac = (D.f[DIR_0MP])[ks ];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts - real mfbbb = (D.f[DIR_000])[k ];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero - real mfccc = (D.f[DIR_PPP])[k ];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw - real mfcac = (D.f[DIR_PMP])[ks ];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse - real mfacc = (D.f[DIR_MPP])[kw ];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw - real mfcca = (D.f[DIR_PPM])[kb ];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + - (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + - ((mfabb+mfcbb) + (mfbab+mfbcb) + (mfbba+mfbbc))) + mfbbb; - - real rho = c1o1+drho; - //////////////////////////////////////////////////////////////////////////////////// - //slow - real vvx =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + - (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + - (mfcbb-mfabb)) / rho; - real vvy =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + - (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + - (mfbcb-mfbab)) / rho; - real vvz =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + - (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + - (mfbbc-mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - real fx = forces[0] / (pow((double)c2o1, (double)level)); // zero;//0.0032653/(pow(two,level)); //0.000000005;//(two/1600000.0) / 120.0; // - real fy = forces[1] / (pow((double)c2o1, (double)level)); // zero; - real fz = forces[2] / (pow((double)c2o1, (double)level)); // zero; - vvx += fx; - vvy += fy; - vvz += fz; - //////////////////////////////////////////////////////////////////////////////////// - //real omega = omega_in; - //////////////////////////////////////////////////////////////////////////////////// - real oMdrho = c1o1; // comp special - //////////////////////////////////////////////////////////////////////////////////// - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2=vvx*vvx; - vy2=vvy*vvy; - vz2=vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimitP = 0.01f;// * 0.0001f; - real qudricLimitM = 0.01f;// * 0.0001f; - real qudricLimitD = 0.01f;// * 0.001f; - real qudricLimitOmega2 = 0.01f; - const real gamma = 3400.f; //air - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c4o1 * omega / (c4o1 + c3o1 * gamma * (c2o1 - omega));//one; //set the bulk viscosity one is high / two is very low and zero is (too) high ... (also called omega 2) - - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - //no bulk viscosity - //real OxyyPxzz = eight*(-two+omega)*(one+two*omega)/(-eight-fourteen*omega+seven*omega*omega);//one; - //real OxyyMxzz = eight*(-two+omega)*(-seven+four*omega)/(fiftysix-fifty*omega+nine*omega*omega);//one; - //real Oxyz = twentyfour*(-two+omega)*(-two-seven*omega+three*omega*omega)/(fourtyeight+c152*omega-c130*omega*omega+twentynine*omega*omega*omega);//one; - //with bulk viscosity - real OxyyPxzz = c8o1*(-c2o1+omega)*(OxxPyyPzz * (-c1o1+c3o1*omega) - c5o1 * omega)/(c8o1 * (c5o1 - c2o1 * omega) * omega + OxxPyyPzz * ( c8o1 + omega * ( c9o1 * omega - c26o1)));//one; - real OxyyMxzz = c8o1*(-c2o1+omega)*(omega + OxxPyyPzz*(c3o1 * omega - c7o1))/(OxxPyyPzz * (c56o1 - c42o1 * omega + c9o1 * omega * omega) - c8o1 * omega);//one; - real Oxyz = c24o1*(-c2o1+omega)*(c4o1*omega*omega + omega * OxxPyyPzz * (c18o1 - c13o1 * omega) + OxxPyyPzz * OxxPyyPzz * (c2o1 + omega * ( c6o1 * omega - c11o1)))/ - (c16o1 * omega * omega * ( omega - c6o1 ) - c2o1 * omega * OxxPyyPzz *( c216o1 + c5o1 * omega * ( c9o1 * omega - c46o1 )) + - OxxPyyPzz * OxxPyyPzz * ( omega * ( c3o1 * omega - c10o1 ) * ( c15o1 * omega - c28o1 ) - c48o1 ));//one; - //////////////////////////////////////////////////////////// - //4. - ////////////////////////////// - real O4 = c1o1; - ////////////////////////////// - //real O4 = omega;//TRT - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = c1o1; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = c1o1; - //////////////////////////////////////////////////////////// - - - //central moments to cumulants - //4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho/rho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho/rho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho/rho)); - - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) ) / rho ; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) ) / rho ; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) ) / rho ; - - //6. - - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - +( c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) /rho - - c1o9 * (mfcaa + mfaca + mfaac) /rho - +( c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho)/(rho*rho))); - - - - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - //////////////////////////////////////////////////////////////////////////// - real Dxy =-c3o1*omega*mfbba; - real Dxz =-c3o1*omega*mfbab; - real Dyz =-c3o1*omega*mfabb; - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - //with limiter (bulk) - wadjust = OxxPyyPzz+(c1o1-OxxPyyPzz)*abs(mfaaa - mxxPyyPzz- c3o1 * (c1o1/OxxPyyPzz - c1o2 ) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz))/ - (abs(mfaaa - mxxPyyPzz- c3o1 * (c1o1/OxxPyyPzz - c1o2 ) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz))+qudricLimitOmega2); - mxxPyyPzz += wadjust*(mfaaa - mxxPyyPzz)- c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - //without limiter (no bulk) - //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - ////////////////////////////////////////////////////////////////////////// - // linear combinations back - mfcaa = c1o3 * ( mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * ( mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - - //relax - ////////////////////////////////////////////////////////////////////////// - //das ist der limiter - wadjust = Oxyz+(c1o1-Oxyz)*abs(mfbbb)/(abs(mfbbb)+qudricLimitD); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxxyPyzz)/(abs(mxxyPyzz)+qudricLimitP); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxxyMyzz)/(abs(mxxyMyzz)+qudricLimitM); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxxzPyyz)/(abs(mxxzPyyz)+qudricLimitP); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxxzMyyz)/(abs(mxxzMyyz)+qudricLimitM); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxyyPxzz)/(abs(mxyyPxzz)+qudricLimitP); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxyyMxzz)/(abs(mxyyMxzz)+qudricLimitM); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //mfbbb += OxyyMxzz * (-mfbbb); - //mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - //mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - //mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - //mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - //mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - //mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - //mit limiter - real factorA = ( c4o1 * omega * omega + c2o1 * omega * OxxPyyPzz * ( omega - c6o1 ) + OxxPyyPzz * OxxPyyPzz * ( omega * ( c10o1 - c3o1 * omega ) - c4o1 )) / - ( ( omega - OxxPyyPzz ) * ( OxxPyyPzz * ( c2o1 + c3o1 * omega ) - c8o1 * omega ) ); - real factorB = ( c4o1 * omega * OxxPyyPzz * ( c9o1 * omega - c16o1 ) - c4o1 * omega * omega - c2o1 * OxxPyyPzz * OxxPyyPzz * ( c2o1 + c9o1 * omega * ( omega - c2o1 ))) / - ( c3o1 * ( omega - OxxPyyPzz ) * ( OxxPyyPzz * ( c2o1 + c3o1 * omega ) - c8o1 * omega ) ); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //CUMacc += O4 * (-CUMacc); - //CUMcac += O4 * (-CUMcac); - //CUMcca += O4 * (-CUMcca); - //CUMbbc += O4 * (-CUMbbc); - //CUMbcb += O4 * (-CUMbcb); - //CUMcbb += O4 * (-CUMcbb); - //no bulk viscosity - //CUMacc = -O4*(one/omega-c1o2)*(dyuy+dzuz)*c2o3 *(four+two*omega-three*omega*omega)/(two-seven*omega+five*omega*omega)+(one-O4) * (CUMacc); - //CUMcac = -O4*(one/omega-c1o2)*(dxux+dzuz)*c2o3 *(four+two*omega-three*omega*omega)/(two-seven*omega+five*omega*omega)+(one-O4) * (CUMcac); - //CUMcca = -O4*(one/omega-c1o2)*(dyuy+dxux)*c2o3 *(four+two*omega-three*omega*omega)/(two-seven*omega+five*omega*omega)+(one-O4) * (CUMcca); - //CUMbbc = -O4*(one/omega-c1o2)*Dxy*c1o3 *(four+twentyeight*omega-fourteen*omega*omega)/(six-twentyone*omega+fiveteen*omega*omega)+(one-O4) * (CUMbbc); - //CUMbcb = -O4*(one/omega-c1o2)*Dxz*c1o3 *(four+twentyeight*omega-fourteen*omega*omega)/(six-twentyone*omega+fiveteen*omega*omega)+(one-O4) * (CUMbcb); - //CUMcbb = -O4*(one/omega-c1o2)*Dyz*c1o3 *(four+twentyeight*omega-fourteen*omega*omega)/(six-twentyone*omega+fiveteen*omega*omega)+(one-O4) * (CUMcbb); - //with bulk viscosity - CUMacc = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMacc); - CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMcac); - CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * factorA + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy * c1o3 * factorB + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz * c1o3 * factorB + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz * c1o3 * factorB + (c1o1 - O4) * (CUMcbb); - - - ////////////////////////////////////////////////////////////////////////// - - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho/rho)); - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho/rho)); - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho/rho)); - - //5. - mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) ) / rho ; - mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) ) / rho ; - mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) ) / rho ; - - //6. - - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - +( c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) /rho - - c1o9 * (mfcaa + mfaca + mfaac) /rho - +( c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho)/(rho*rho))); - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1- vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * ( vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * ( vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1- vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * ( vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1- vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * ( vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1- vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * ( vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * ( vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1- vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * ( vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * ( vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1- vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * ( vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1- vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * ( vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1- vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * ( vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1- vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1- vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1- vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1- vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * ( vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1- vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * ( vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * ( vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1- vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * ( vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * ( vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1- vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * ( vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1- vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1- vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1- vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1- vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[ DIR_P00 ])[k ] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] - (D.f[ DIR_M00 ])[kw ] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] - (D.f[ DIR_0P0 ])[k ] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] - (D.f[ DIR_0M0 ])[ks ] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] - (D.f[ DIR_00P ])[k ] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] - (D.f[ DIR_00M ])[kb ] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] - (D.f[ DIR_PP0 ])[k ] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] - (D.f[ DIR_MM0 ])[ksw ] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] - (D.f[ DIR_PM0 ])[ks ] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] - (D.f[ DIR_MP0 ])[kw ] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] - (D.f[ DIR_P0P ])[k ] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] - (D.f[ DIR_M0M ])[kbw ] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] - (D.f[ DIR_P0M ])[kb ] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] - (D.f[ DIR_M0P ])[kw ] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] - (D.f[ DIR_0PP ])[k ] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] - (D.f[ DIR_0MM ])[kbs ] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] - (D.f[ DIR_0PM ])[kb ] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] - (D.f[ DIR_0MP ])[ks ] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] - (D.f[ DIR_000])[k ] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] - (D.f[ DIR_PPP ])[k ] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] - (D.f[ DIR_PMP ])[ks ] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] - (D.f[ DIR_PPM ])[kb ] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] - (D.f[ DIR_PMM ])[kbs ] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] - (D.f[ DIR_MPP ])[kw ] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] - (D.f[ DIR_MMP ])[ksw ] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] - (D.f[ DIR_MPM ])[kbw ] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] - (D.f[ DIR_MMM ])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] - //////////////////////////////////////////////////////////////////////////////////// - } - } -} -//////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////// -__global__ void LB_Kernel_Kum_IsoTest_SP_27( real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - real* dxxUx, - real* dyyUy, - real* dzzUz, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<numberOfLBnodes) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if( (BC != GEO_SOLID) && (BC != GEO_VOID) ) - { - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k ];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke - real mfabb = (D.f[DIR_M00])[kw ];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k ];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn - real mfbab = (D.f[DIR_0M0])[ks ];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k ];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt - real mfbba = (D.f[DIR_00M])[kb ];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k ];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks ];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse - real mfacb = (D.f[DIR_MP0])[kw ];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw - real mfcbc = (D.f[DIR_P0P])[k ];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb ];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe - real mfabc = (D.f[DIR_M0P])[kw ];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw - real mfbcc = (D.f[DIR_0PP])[k ];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb ];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn - real mfbac = (D.f[DIR_0MP])[ks ];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts - real mfbbb = (D.f[DIR_000])[k ];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero - real mfccc = (D.f[DIR_PPP])[k ];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw - real mfcac = (D.f[DIR_PMP])[ks ];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse - real mfacc = (D.f[DIR_MPP])[kw ];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw - real mfcca = (D.f[DIR_PPM])[kb ];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////////// - //slow - //real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + - // (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + - // ((mfabb+mfcbb) + (mfbab+mfbcb) + (mfbba+mfbbc)));//fehlt mfbbb - real vvx =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + - (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + - (mfcbb-mfabb)); - real vvy =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + - (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + - (mfbcb-mfbab)); - real vvz =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + - (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + - (mfbbc-mfbba)); - //////////////////////////////////////////////////////////////////////////////////// - //fast - real oMdrho = c1o1 - (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + - mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb + - mfabb+mfcbb + mfbab+mfbcb + mfbba+mfbbc + mfbbb);//fehlt mfbbb nicht mehr - //real vvx =mfccc-mfaaa + mfcac-mfaca + mfcaa-mfacc + mfcca-mfaac + - // mfcba-mfabc + mfcbc-mfaba + mfcab-mfacb + mfccb-mfaab + - // mfcbb-mfabb; - //real vvy =mfccc-mfaaa + mfaca-mfcac + mfacc-mfcaa + mfcca-mfaac + - // mfbca-mfbac + mfbcc-mfbaa + mfacb-mfcab + mfccb-mfaab + - // mfbcb-mfbab; - //real vvz =mfccc-mfaaa + mfcac-mfaca + mfacc-mfcaa + mfaac-mfcca + - // mfbac-mfbca + mfbcc-mfbaa + mfabc-mfcba + mfcbc-mfaba + - // mfbbc-mfbba; - //////////////////////////////////////////////////////////////////////////////////// - // oMdrho assembler style -------> faaaaaastaaaa - // or much sloooowaaaa ... it dep�ndssssss on sadaku - real m0, m1, m2; - //real oMdrho; - //{ - // oMdrho=mfccc+mfaaa; - // m0=mfaca+mfcac; - // m1=mfacc+mfcaa; - // m2=mfaac+mfcca; - // oMdrho+=m0; - // m1+=m2; - // oMdrho+=m1; - // m0=mfbac+mfbca; - // m1=mfbaa+mfbcc; - // m0+=m1; - // m1=mfabc+mfcba; - // m2=mfaba+mfcbc; - // m1+=m2; - // m0+=m1; - // m1=mfacb+mfcab; - // m2=mfaab+mfccb; - // m1+=m2; - // m0+=m1; - // oMdrho+=m0; - // m0=mfabb+mfcbb; - // m1=mfbab+mfbcb; - // m2=mfbba+mfbbc; - // m0+=m1+m2; - // m0+=mfbbb; //hat gefehlt - // oMdrho = one - (oMdrho + m0); - //} - //real vvx; - real vx2; - //{ - // vvx = mfccc-mfaaa; - // m0 = mfcac-mfaca; - // m1 = mfcaa-mfacc; - // m2 = mfcca-mfaac; - // vvx+= m0; - // m1 += m2; - // vvx+= m1; - // vx2 = mfcba-mfabc; - // m0 = mfcbc-mfaba; - // m1 = mfcab-mfacb; - // m2 = mfccb-mfaab; - // vx2+= m0; - // m1 += m2; - // vx2+= m1; - // vvx+= vx2; - // vx2 = mfcbb-mfabb; - // vvx+= vx2; - //} - //real vvy; - real vy2; - //{ - // vvy = mfccc-mfaaa; - // m0 = mfaca-mfcac; - // m1 = mfacc-mfcaa; - // m2 = mfcca-mfaac; - // vvy+= m0; - // m1 += m2; - // vvy+= m1; - // vy2 = mfbca-mfbac; - // m0 = mfbcc-mfbaa; - // m1 = mfacb-mfcab; - // m2 = mfccb-mfaab; - // vy2+= m0; - // m1 += m2; - // vy2+= m1; - // vvy+= vy2; - // vy2 = mfbcb-mfbab; - // vvy+= vy2; - //} - //real vvz; - real vz2; - //{ - // vvz = mfccc-mfaaa; - // m0 = mfcac-mfaca; - // m1 = mfacc-mfcaa; - // m2 = mfaac-mfcca; - // vvz+= m0; - // m1 += m2; - // vvz+= m1; - // vz2 = mfbac-mfbca; - // m0 = mfbcc-mfbaa; - // m1 = mfabc-mfcba; - // m2 = mfcbc-mfaba; - // vz2+= m0; - // m1 += m2; - // vz2+= m1; - // vvz+= vz2; - // vz2 = mfbbc-mfbba; - // vvz+= vz2; - //} - vx2=vvx*vvx; - vy2=vvy*vvy; - vz2=vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = 0.01f; - //real s9 = minusomega; - //test - //s9 = 0.; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // BGK - //////////////////////////////////////////////////////////////////////////////////// - ////2. - //mfabb += omega * (-mfabb); - //mfbab += omega * (-mfbab); - //mfbba += omega * (-mfbba); - // - //mfcaa += omega * (c1o3 * mfaaa - mfcaa); - //mfaca += omega * (c1o3 * mfaaa - mfaca); - //mfaac += omega * (c1o3 * mfaaa - mfaac); - // - ////3. - //mfabc += omega * (-mfabc); - //mfbac += omega * (-mfbac); - // - //mfacb += omega * (-mfacb); - //mfbca += omega * (-mfbca); - - //mfcab += omega * (-mfcab); - //mfcba += omega * (-mfcba); - - //mfbbb += omega * (-mfbbb); - - ////4. - //mfacc += omega * (c1o9 * mfaaa - mfacc); - //mfcac += omega * (c1o9 * mfaaa - mfcac); - //mfcca += omega * (c1o9 * mfaaa - mfcca); - - //mfbbc += omega * (-mfbbc); - //mfbcb += omega * (-mfbcb); - //mfcbb += omega * (-mfcbb); - - ////5. - //mfbcc += omega * (-mfbcc); - //mfcbc += omega * (-mfcbc); - //mfccb += omega * (-mfccb); - - ////6. - //mfccc += omega * (c1o27 * mfaaa - mfccc); - ////////////////////////////////////////////////////////////////////////////////////// - - - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; - real OxyyPxzz = c1o1;//two-omega;//eight*(two-omega)/(eight -omega);//one;//omega;//two-omega;// - real OxyyMxzz = c1o1;//omega;//one;//eight*(two-omega)/(eight -omega);//one;//two-omega;//one;// - real O4 = c1o1; - real O5 = c1o1; - real O6 = c1o1; - - //Cum 4. - real CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + c2o1 * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + c2o1 * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + c2o1 * mfbab * mfabb); - - real CUMcca = mfcca - (mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-c1o1)*oMdrho; - real CUMcac = mfcac - (mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-c1o1)*oMdrho; - real CUMacc = mfacc - (mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-c1o1)*oMdrho; - - //Cum 5. - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; - - //Cum 6. - real CUMccc = mfccc +((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) - +( c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) - - c1o3 * (mfacc + mfcac + mfcca) * oMdrho -c1o9*oMdrho*oMdrho - - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho*(c1o1-c2o1* oMdrho)- c1o27* oMdrho * oMdrho*(-c2o1* oMdrho) - +( c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) +c1o27*oMdrho; - - - - - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Iso Test Part 1 - real dxuydyux = -c3o1 * omega * mfbba; - real dxuzdzux = -c3o1 * omega * mfbab; - real dyuzdzuy = -c3o1 * omega * mfabb; - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - { - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - } - - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz); - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - // linear combinations back - mfcaa = c1o3 * ( mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * ( mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Iso Test Part 2 - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //precollision terms 3. moments - real premxxyPyzz = mxxyPyzz; - real premxxzPyyz = mxxzPyyz; - real premxyyPxzz = mxyyPxzz; - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - //relax - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mfbbb)/(abs(mfbbb)+qudricLimit); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxxyPyzz)/(abs(mxxyPyzz)+qudricLimit); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxxyMyzz)/(abs(mxxyMyzz)+qudricLimit); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxxzPyyz)/(abs(mxxzPyyz)+qudricLimit); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxxzMyyz)/(abs(mxxzMyyz)+qudricLimit); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxyyPxzz)/(abs(mxyyPxzz)+qudricLimit); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxyyMxzz)/(abs(mxyyMxzz)+qudricLimit); - mxyyMxzz += wadjust * (-mxyyMxzz); - - //// linear combinations back - mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - - //5. - //CUMbcc += O5 * (-CUMbcc); - //CUMcbc += O5 * (-CUMcbc); - //CUMccb += O5 * (-CUMccb); - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Iso Test Part 3 - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //precollision terms 5. moments - real preCUMbcc = CUMbcc; - real preCUMcbc = CUMcbc; - real preCUMccb = CUMccb; - //new calculation of 5. moments - CUMbcc = c2o3 * (c1o1 - c1o2 * O5) * (vvy * dxuydyux + vvz * dxuzdzux) * c0o1 + (c1o1 - O5) * CUMbcc; - CUMcbc = c2o3 * (c1o1 - c1o2 * O5) * (vvx * dxuydyux + vvz * dyuzdzuy) * c0o1 + (c1o1 - O5) * CUMcbc; - CUMccb = c2o3 * (c1o1 - c1o2 * O5) * (vvx * dxuzdzux + vvy * dyuzdzuy) * c0o1 + (c1o1 - O5) * CUMccb; - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - //6. - //CUMccc += O6 * (-CUMccc); - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Iso Test Part 4 - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //new calculation of 6. moment - CUMccc = O6 * c1o3 * (vx2 + vy2 + vz2) * c0o1 + (c1o1 - O6) * CUMccc; - // second derivation of ux, uy, uz - real dxxux = c3o1 * (c3o2 * (CUMbcc - preCUMbcc) - c0o1 * (mxyyPxzz - premxyyPxzz)); - real dyyuy = c3o1 * (c3o2 * (CUMcbc - preCUMcbc) - c0o1 * (mxxyPyzz - premxxyPyzz)); - real dzzuz = c3o1 * (c3o2 * (CUMccb - preCUMccb) - c0o1 * (mxxzPyyz - premxxzPyyz)); - // copy local values to global arrays for paraview files - dxxUx[k] = dxxux; - dyyUy[k] = dyyuy; - dzzUz[k] = dzzuz; - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + c2o1 * mfbba * mfbab); - mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + c2o1 * mfbba * mfabb); - mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + c2o1 * mfbab * mfabb); - - mfcca = CUMcca + (mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-c1o1)*oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-c1o1)*oMdrho; - mfacc = CUMacc + (mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-c1o1)*oMdrho; - - //5. - mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho; - mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho; - mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho; - - //6. - mfccc = CUMccc -(( -c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) - +( c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) - - c1o3 * (mfacc + mfcac + mfcca) * oMdrho -c1o9*oMdrho*oMdrho - - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho*(c1o1-c2o1* oMdrho)- c1o27* oMdrho * oMdrho*(-c2o1* oMdrho) - +( c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) -c1o27*oMdrho; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1- vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * ( vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * ( vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1- vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * ( vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1- vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * ( vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1- vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * ( vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * ( vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1- vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * ( vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * ( vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1- vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * ( vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1- vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * ( vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1- vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * ( vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1- vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1- vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1- vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1- vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * ( vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1- vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * ( vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * ( vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1- vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * ( vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * ( vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1- vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * ( vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1- vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1- vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1- vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1- vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[ DIR_P00 ])[k ] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] - (D.f[ DIR_M00 ])[kw ] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] - (D.f[ DIR_0P0 ])[k ] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] - (D.f[ DIR_0M0 ])[ks ] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] - (D.f[ DIR_00P ])[k ] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] - (D.f[ DIR_00M ])[kb ] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] - (D.f[ DIR_PP0 ])[k ] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] - (D.f[ DIR_MM0 ])[ksw ] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] - (D.f[ DIR_PM0 ])[ks ] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] - (D.f[ DIR_MP0 ])[kw ] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] - (D.f[ DIR_P0P ])[k ] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] - (D.f[ DIR_M0M ])[kbw ] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] - (D.f[ DIR_P0M ])[kb ] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] - (D.f[ DIR_M0P ])[kw ] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] - (D.f[ DIR_0PP ])[k ] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] - (D.f[ DIR_0MM ])[kbs ] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] - (D.f[ DIR_0PM ])[kb ] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] - (D.f[ DIR_0MP ])[ks ] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] - (D.f[ DIR_000])[k ] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] - (D.f[ DIR_PPP ])[k ] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] - (D.f[ DIR_PMP ])[ks ] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] - (D.f[ DIR_PPM ])[kb ] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] - (D.f[ DIR_PMM ])[kbs ] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] - (D.f[ DIR_MPP ])[kw ] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] - (D.f[ DIR_MMP ])[ksw ] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] - (D.f[ DIR_MPM ])[kbw ] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] - (D.f[ DIR_MMM ])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] - //////////////////////////////////////////////////////////////////////////////////// - } - } -} -//////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////// -__global__ void LB_Kernel_Kum_1h_SP_27( real omega, - real deltaPhi, - real angularVelocity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* coordX, - real* coordY, - real* coordZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<numberOfLBnodes) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if( (BC != GEO_SOLID) && (BC != GEO_VOID) ) - { - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - - //unsigned int kzero= k; - //unsigned int ke = k; - //unsigned int kw = neighborX[k]; - //unsigned int kn = k; - //unsigned int ks = neighborY[k]; - //unsigned int kt = k; - //unsigned int kb = neighborZ[k]; - //unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - //unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - //unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - //unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k ];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke - real mfabb = (D.f[DIR_M00])[kw ];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k ];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn - real mfbab = (D.f[DIR_0M0])[ks ];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k ];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt - real mfbba = (D.f[DIR_00M])[kb ];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k ];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks ];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse - real mfacb = (D.f[DIR_MP0])[kw ];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw - real mfcbc = (D.f[DIR_P0P])[k ];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb ];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe - real mfabc = (D.f[DIR_M0P])[kw ];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw - real mfbcc = (D.f[DIR_0PP])[k ];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb ];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn - real mfbac = (D.f[DIR_0MP])[ks ];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts - real mfbbb = (D.f[DIR_000])[k ];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero - real mfccc = (D.f[DIR_PPP])[k ];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw - real mfcac = (D.f[DIR_PMP])[ks ];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse - real mfacc = (D.f[DIR_MPP])[kw ];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw - real mfcca = (D.f[DIR_PPM])[kb ];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////////// - //Ship - real coord0X = 281.125f;//7.5f; - real coord0Y = 388.125f;//7.5f; - real ux = - angularVelocity * (coordY[k] - coord0Y); - real uy = angularVelocity * (coordX[k] - coord0X); - //////////////////////////////////////////////////////////////////////////////////// - //slow - //real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + - // (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + - // ((mfabb+mfcbb) + (mfbab+mfbcb) + (mfbba+mfbbc)));//fehlt mfbbb - real vvx =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + - (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + - (mfcbb-mfabb)); - real vvy =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + - (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + - (mfbcb-mfbab)); - real vvz =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + - (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + - (mfbbc-mfbba)); - //////////////////////////////////////////////////////////////////////////////////// - real vxNeu = cosf(deltaPhi) * vvx - sinf(deltaPhi) * vvy; - real vyNeu = sinf(deltaPhi) * vvx + cosf(deltaPhi) * vvy; - - - - - //////////////////////////////////////////////////////////////////////////////////// - //fast - real oMdrho = c1o1 - (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + - mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb + - mfabb+mfcbb + mfbab+mfbcb + mfbba+mfbbc + mfbbb);//fehlt mfbbb nicht mehr - //real vvx =mfccc-mfaaa + mfcac-mfaca + mfcaa-mfacc + mfcca-mfaac + - // mfcba-mfabc + mfcbc-mfaba + mfcab-mfacb + mfccb-mfaab + - // mfcbb-mfabb; - //real vvy =mfccc-mfaaa + mfaca-mfcac + mfacc-mfcaa + mfcca-mfaac + - // mfbca-mfbac + mfbcc-mfbaa + mfacb-mfcab + mfccb-mfaab + - // mfbcb-mfbab; - //real vvz =mfccc-mfaaa + mfcac-mfaca + mfacc-mfcaa + mfaac-mfcca + - // mfbac-mfbca + mfbcc-mfbaa + mfabc-mfcba + mfcbc-mfaba + - // mfbbc-mfbba; - //////////////////////////////////////////////////////////////////////////////////// - // oMdrho assembler style -------> faaaaaastaaaa - // or much sloooowaaaa ... it dep�ndssssss on sadaku - real m0, m1, m2; - //real oMdrho; - //{ - // oMdrho=mfccc+mfaaa; - // m0=mfaca+mfcac; - // m1=mfacc+mfcaa; - // m2=mfaac+mfcca; - // oMdrho+=m0; - // m1+=m2; - // oMdrho+=m1; - // m0=mfbac+mfbca; - // m1=mfbaa+mfbcc; - // m0+=m1; - // m1=mfabc+mfcba; - // m2=mfaba+mfcbc; - // m1+=m2; - // m0+=m1; - // m1=mfacb+mfcab; - // m2=mfaab+mfccb; - // m1+=m2; - // m0+=m1; - // oMdrho+=m0; - // m0=mfabb+mfcbb; - // m1=mfbab+mfbcb; - // m2=mfbba+mfbbc; - // m0+=m1+m2; - // m0+=mfbbb; //hat gefehlt - // oMdrho = one - (oMdrho + m0); - //} - //real vvx; - real vx2; - //{ - // vvx = mfccc-mfaaa; - // m0 = mfcac-mfaca; - // m1 = mfcaa-mfacc; - // m2 = mfcca-mfaac; - // vvx+= m0; - // m1 += m2; - // vvx+= m1; - // vx2 = mfcba-mfabc; - // m0 = mfcbc-mfaba; - // m1 = mfcab-mfacb; - // m2 = mfccb-mfaab; - // vx2+= m0; - // m1 += m2; - // vx2+= m1; - // vvx+= vx2; - // vx2 = mfcbb-mfabb; - // vvx+= vx2; - //} - //real vvy; - real vy2; - //{ - // vvy = mfccc-mfaaa; - // m0 = mfaca-mfcac; - // m1 = mfacc-mfcaa; - // m2 = mfcca-mfaac; - // vvy+= m0; - // m1 += m2; - // vvy+= m1; - // vy2 = mfbca-mfbac; - // m0 = mfbcc-mfbaa; - // m1 = mfacb-mfcab; - // m2 = mfccb-mfaab; - // vy2+= m0; - // m1 += m2; - // vy2+= m1; - // vvy+= vy2; - // vy2 = mfbcb-mfbab; - // vvy+= vy2; - //} - //real vvz; - real vz2; - //{ - // vvz = mfccc-mfaaa; - // m0 = mfcac-mfaca; - // m1 = mfacc-mfcaa; - // m2 = mfaac-mfcca; - // vvz+= m0; - // m1 += m2; - // vvz+= m1; - // vz2 = mfbac-mfbca; - // m0 = mfbcc-mfbaa; - // m1 = mfabc-mfcba; - // m2 = mfcbc-mfaba; - // vz2+= m0; - // m1 += m2; - // vz2+= m1; - // vvz+= vz2; - // vz2 = mfbbc-mfbba; - // vvz+= vz2; - //} - vx2=vvx*vvx; - vy2=vvy*vvy; - vz2=vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = 0.01f; - //real s9 = minusomega; - //test - //s9 = 0.; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // BGK - //////////////////////////////////////////////////////////////////////////////////// - ////2. - //mfabb += omega * (-mfabb); - //mfbab += omega * (-mfbab); - //mfbba += omega * (-mfbba); - // - //mfcaa += omega * (c1o3 * mfaaa - mfcaa); - //mfaca += omega * (c1o3 * mfaaa - mfaca); - //mfaac += omega * (c1o3 * mfaaa - mfaac); - // - ////3. - //mfabc += omega * (-mfabc); - //mfbac += omega * (-mfbac); - // - //mfacb += omega * (-mfacb); - //mfbca += omega * (-mfbca); - - //mfcab += omega * (-mfcab); - //mfcba += omega * (-mfcba); - - //mfbbb += omega * (-mfbbb); - - ////4. - //mfacc += omega * (c1o9 * mfaaa - mfacc); - //mfcac += omega * (c1o9 * mfaaa - mfcac); - //mfcca += omega * (c1o9 * mfaaa - mfcca); - - //mfbbc += omega * (-mfbbc); - //mfbcb += omega * (-mfbcb); - //mfcbb += omega * (-mfcbb); - - ////5. - //mfbcc += omega * (-mfbcc); - //mfcbc += omega * (-mfcbc); - //mfccb += omega * (-mfccb); - - ////6. - //mfccc += omega * (c1o27 * mfaaa - mfccc); - //////////////////////////////////////////////////////////////////////////////////// - - - - ////////////////////////////////////////////////////////////////////////////////////////// - //////// Cumulants - ////////////////////////////////////////////////////////////////////////////////////////// - //////real OxxPyyPzz = one; - //////real OxyyPxzz = one;//two-omega;// - //////real OxyyMxzz = one;//two-omega;// - //////real O4 = one; - //////real O5 = one; - //////real O6 = one; - - ////////Cum 4. - //////real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + two* mfbba * mfbab); - //////real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + two* mfbba * mfabb); - //////real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + two* mfbab * mfabb); - - //////real CUMcca = mfcca - (mfcaa * mfaca + two* mfbba * mfbba)- c1o3 * (mfcaa + mfaca); - //////real CUMcac = mfcac - (mfcaa * mfaac + two* mfbab * mfbab)- c1o3 * (mfcaa + mfaac); - //////real CUMacc = mfacc - (mfaac * mfaca + two* mfabb * mfabb)- c1o3 * (mfaac + mfaca); - - ////////Cum 5. - //////real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + four* mfabb * mfbbb + two* (mfbab * mfacb + mfbba * mfabc)) //O(eps^5) - ////// - c1o3 * (mfbca + mfbac); //O(eps^3) - //////real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + four* mfbab * mfbbb + two* (mfabb * mfcab + mfbba * mfbac)) //O(eps^5) - ////// - c1o3 * (mfcba + mfabc); //O(eps^3) - //////real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + four* mfbba * mfbbb + two* (mfbab * mfbca + mfabb * mfcba)) //O(eps^5) - ////// - c1o3 * (mfacb + mfcab);//O(eps^3) - - ////////Cum 6. - //////real CUMccc = mfccc +(-four* mfbbb * mfbbb //O(eps^6) - ////// - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) // O(eps^4) - ////// - four* (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) // O(eps^6) - ////// - two* (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) // O(esp^6) - ////// +( four* (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) //O(eps^6) - ////// + two* (mfcaa * mfaca * mfaac) //O(eps^6) - ////// + sixteen* mfbba * mfbab * mfabb) //O(eps^6) - ////// - c1o3* (mfacc + mfcac + mfcca) //O(eps^2) - ////// + c1o9* (mfcaa + mfaca + mfaac) //O(eps^2) - ////// +( two* (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)//O(eps^4) - ////// + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3;//O(eps^4) - - - ////////2. - //////// linear combinations - //////real mxxPyyPzz = mfcaa + mfaca + mfaac; - //////real mxxMyy = mfcaa - mfaca; - //////real mxxMzz = mfcaa - mfaac; - - //////{ - ////// real dxux = c1o2 * ((-omega) * (mxxMyy + mxxMzz) + (mfaaa - mxxPyyPzz)); - ////// real dyuy = dxux + omega * c3o2 * mxxMyy; - ////// real dzuz = dxux + omega * c3o2 * mxxMzz; - - ////// //relax - ////// mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- three* (one- c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - ////// mxxMyy += omega * (-mxxMyy) - three* (one+ c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); - ////// mxxMzz += omega * (-mxxMzz) - three* (one+ c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); - //////} - //////mfabb += omega * (-mfabb); - //////mfbab += omega * (-mfbab); - //////mfbba += omega * (-mfbba); - - //////// linear combinations back - //////mfcaa = c1o3 * ( mxxMyy + mxxMzz + mxxPyyPzz); - //////mfaca = c1o3 * (-two* mxxMyy + mxxMzz + mxxPyyPzz); - //////mfaac = c1o3 * ( mxxMyy - two* mxxMzz + mxxPyyPzz); - - ////////3. - //////// linear combinations - //////real mxxyPyzz = mfcba + mfabc; - //////real mxxyMyzz = mfcba - mfabc; - - //////real mxxzPyyz = mfcab + mfacb; - //////real mxxzMyyz = mfcab - mfacb; - - //////real mxyyPxzz = mfbca + mfbac; - //////real mxyyMxzz = mfbca - mfbac; - - ////////relax - //////wadjust = OxyyMxzz+(one-OxyyMxzz)*abs(mfbbb)/(abs(mfbbb)+qudricLimit); - //////mfbbb += wadjust * (-mfbbb); - //////wadjust = OxyyPxzz+(one-OxyyPxzz)*abs(mxxyPyzz)/(abs(mxxyPyzz)+qudricLimit); - //////mxxyPyzz += wadjust * (-mxxyPyzz); - //////wadjust = OxyyMxzz+(one-OxyyMxzz)*abs(mxxyMyzz)/(abs(mxxyMyzz)+qudricLimit); - //////mxxyMyzz += wadjust * (-mxxyMyzz); - //////wadjust = OxyyPxzz+(one-OxyyPxzz)*abs(mxxzPyyz)/(abs(mxxzPyyz)+qudricLimit); - //////mxxzPyyz += wadjust * (-mxxzPyyz); - //////wadjust = OxyyMxzz+(one-OxyyMxzz)*abs(mxxzMyyz)/(abs(mxxzMyyz)+qudricLimit); - //////mxxzMyyz += wadjust * (-mxxzMyyz); - //////wadjust = OxyyPxzz+(one-OxyyPxzz)*abs(mxyyPxzz)/(abs(mxyyPxzz)+qudricLimit); - //////mxyyPxzz += wadjust * (-mxyyPxzz); - //////wadjust = OxyyMxzz+(one-OxyyMxzz)*abs(mxyyMxzz)/(abs(mxyyMxzz)+qudricLimit); - //////mxyyMxzz += wadjust * (-mxyyMxzz); - - //////// linear combinations back - //////mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; - //////mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - //////mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; - //////mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - //////mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; - //////mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - ////////4. - //////CUMacc += O4 * (-CUMacc); - //////CUMcac += O4 * (-CUMcac); - //////CUMcca += O4 * (-CUMcca); - ////// - //////CUMbbc += O4 * (-CUMbbc); - //////CUMbcb += O4 * (-CUMbcb); - //////CUMcbb += O4 * (-CUMcbb); - ////// - ////////5. - //////CUMbcc += O5 * (-CUMbcc); - //////CUMcbc += O5 * (-CUMcbc); - //////CUMccb += O5 * (-CUMccb); - - ////////6. - //////CUMccc += O6 * (-CUMccc); - ////// - ////////back cumulants to central moments - ////////4. - //////mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + two* mfbba * mfbab); - //////mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + two* mfbba * mfabb); - //////mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + two* mfbab * mfabb); - ////// - //////mfcca = CUMcca + (mfcaa * mfaca + two* mfbba * mfbba) + c1o3 * (mfcaa + mfaca); - //////mfcac = CUMcac + (mfcaa * mfaac + two* mfbab * mfbab) + c1o3 * (mfcaa + mfaac); - //////mfacc = CUMacc + (mfaac * mfaca + two* mfabb * mfabb) + c1o3 * (mfaac + mfaca); - - ////////5. - //////mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + four* mfabb * mfbbb + two* (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac); - //////mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + four* mfbab * mfbbb + two* (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc); - //////mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + four* mfbba * mfbbb + two* (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab); - ////// - ////////6. - //////mfccc = CUMccc -((-four* mfbbb * mfbbb - ////// - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - ////// - four* (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) - ////// - two* (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) - ////// +( four* (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - ////// + two* (mfcaa * mfaca * mfaac) - ////// + sixteen* mfbba * mfbab * mfabb) - ////// - c1o3* (mfacc + mfcac + mfcca) - ////// + c1o9* (mfcaa + mfaca + mfaac) - ////// +( two* (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - ////// + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3); - ////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; - real OxyyPxzz = c1o1;//omega;//two-omega;// - real OxyyMxzz = c2o1-omega;//one;// - real O4 = c1o1; - real O5 = c1o1; - real O6 = c1o1; - - ////Cum 4. - //real CUMcbb; real CUMbcb; real CUMbbc; - //real CUMcca; real CUMcac; real CUMacc; - ////Cum 5. - //real CUMbcc; real CUMcbc; real CUMccb; - ////Cum 6. - //real CUMccc; - - //Cum four - real CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + c2o1 * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + c2o1 * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + c2o1 * mfbab * mfabb); - - real CUMcca = mfcca - (mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-c1o1)*oMdrho; - real CUMcac = mfcac - (mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-c1o1)*oMdrho; - real CUMacc = mfacc - (mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-c1o1)*oMdrho; - - //Cum 5. - //real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + four * mfabb * mfbbb + two * (mfbab * mfacb + mfbba * mfabc)) //O(eps^5) - // - c1o3 * (mfbca + mfbac); //O(eps^3) - //real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + four * mfbab * mfbbb + two * (mfabb * mfcab + mfbba * mfbac)) //O(eps^5) - // - c1o3 * (mfcba + mfabc); //O(eps^3) - //real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + four * mfbba * mfbbb + two * (mfbab * mfbca + mfabb * mfcba)) //O(eps^5) - // - c1o3 * (mfacb + mfcab);//O(eps^3) - - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; - - //Cum 6. - real CUMccc = mfccc +((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) - +( c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) - - c1o3 * (mfacc + mfcac + mfcca) * oMdrho -c1o9*oMdrho*oMdrho - - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho*(c1o1-c2o1* oMdrho)- c1o27* oMdrho * oMdrho*(-c2o1* oMdrho) - +( c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) +c1o27*oMdrho; - - - - - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - { - real dxux = c0o1;//c1o2 * (-omega) *(mxxMyy + mxxMzz) + OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = c0o1;//dxux + omega * c3o2 * mxxMyy; - real dzuz = c0o1;//dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += (OxxPyyPzz)*(mfaaa-c2o1*(ux*vvx+uy*vvy)-ux*ux-uy*uy - mxxPyyPzz)- c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += omega * (-c2o1*(ux*vvx-uy*vvy)-(ux*ux-uy*uy)-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); - mxxMzz += omega * (-c2o1*ux*vvx -ux*ux -mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); - } - mfabb += omega * (-uy*vvz-mfabb); - mfbab += omega * (-ux*vvz-mfbab); - mfbba += omega * (-ux*vvy-uy*vvx-ux*uy-mfbba); - - // linear combinations back - mfcaa = c1o3 * ( mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * ( mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mfbbb)/(abs(mfbbb)+qudricLimit); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxxyPyzz)/(abs(mxxyPyzz)+qudricLimit); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxxyMyzz)/(abs(mxxyMyzz)+qudricLimit); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxxzPyyz)/(abs(mxxzPyyz)+qudricLimit); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxxzMyyz)/(abs(mxxzMyyz)+qudricLimit); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxyyPxzz)/(abs(mxyyPxzz)+qudricLimit); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxyyMxzz)/(abs(mxyyMxzz)+qudricLimit); - mxyyMxzz += wadjust * (-mxyyMxzz); - - //// linear combinations back - ////generic - //mfcba = zero; - //mfabc = zero; - //mfcab = zero; - //mfacb = zero; - //mfbca = zero; - //mfbac = zero; - - mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - //CUMacc = zero; - //CUMcac = zero; - //CUMcca = zero; - // - //CUMbbc = zero; - //CUMbcb = zero; - //CUMcbb = zero; - // - ////5. - //CUMbcc = zero; - //CUMcbc = zero; - //CUMccb = zero; - // - ////6. - //CUMccc = zero; - - //4. - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + c2o1 * mfbba * mfbab); - mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + c2o1 * mfbba * mfabb); - mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + c2o1 * mfbab * mfabb); - - mfcca = CUMcca + (mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-c1o1)*oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-c1o1)*oMdrho; - mfacc = CUMacc + (mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-c1o1)*oMdrho; - - //5. - mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho; - mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho; - mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho; - - //6. - mfccc = CUMccc -(( -c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) - +( c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) - - c1o3 * (mfacc + mfcac + mfcca) * oMdrho -c1o9*oMdrho*oMdrho - - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho*(c1o1-c2o1* oMdrho)- c1o27* oMdrho * oMdrho*(-c2o1* oMdrho) - +( c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) -c1o27*oMdrho; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - - //turning ship: - - vvx=vxNeu; - vvy=vyNeu; - - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1- vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * ( vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * ( vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1- vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * ( vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1- vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * ( vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1- vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * ( vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * ( vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1- vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * ( vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * ( vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1- vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * ( vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1- vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * ( vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1- vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * ( vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1- vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1- vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1- vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1- vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * ( vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1- vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * ( vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * ( vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1- vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * ( vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * ( vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1- vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * ( vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1- vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1- vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1- vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1- vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[ DIR_P00 ])[k ] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] - (D.f[ DIR_M00 ])[kw ] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] - (D.f[ DIR_0P0 ])[k ] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] - (D.f[ DIR_0M0 ])[ks ] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] - (D.f[ DIR_00P ])[k ] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] - (D.f[ DIR_00M ])[kb ] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] - (D.f[ DIR_PP0 ])[k ] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] - (D.f[ DIR_MM0 ])[ksw ] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] - (D.f[ DIR_PM0 ])[ks ] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] - (D.f[ DIR_MP0 ])[kw ] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] - (D.f[ DIR_P0P ])[k ] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] - (D.f[ DIR_M0M ])[kbw ] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] - (D.f[ DIR_P0M ])[kb ] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] - (D.f[ DIR_M0P ])[kw ] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] - (D.f[ DIR_0PP ])[k ] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] - (D.f[ DIR_0MM ])[kbs ] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] - (D.f[ DIR_0PM ])[kb ] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] - (D.f[ DIR_0MP ])[ks ] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] - (D.f[ DIR_000])[k ] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] - (D.f[ DIR_PPP ])[k ] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] - (D.f[ DIR_PMP ])[ks ] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] - (D.f[ DIR_PPM ])[kb ] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] - (D.f[ DIR_PMM ])[kbs ] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] - (D.f[ DIR_MPP ])[kw ] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] - (D.f[ DIR_MMP ])[ksw ] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] - (D.f[ DIR_MPM ])[kbw ] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] - (D.f[ DIR_MMM ])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] - //////////////////////////////////////////////////////////////////////////////////// - } - } -} -//////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////// -__global__ void LB_Kernel_Kum_New_SP_27( real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<numberOfLBnodes) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if( (BC != GEO_SOLID) && (BC != GEO_VOID) ) - { - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - - //unsigned int kzero= k; - //unsigned int ke = k; - //unsigned int kw = neighborX[k]; - //unsigned int kn = k; - //unsigned int ks = neighborY[k]; - //unsigned int kt = k; - //unsigned int kb = neighborZ[k]; - //unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - //unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - //unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - //unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k ];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke - real mfabb = (D.f[DIR_M00])[kw ];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k ];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn - real mfbab = (D.f[DIR_0M0])[ks ];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k ];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt - real mfbba = (D.f[DIR_00M])[kb ];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k ];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks ];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse - real mfacb = (D.f[DIR_MP0])[kw ];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw - real mfcbc = (D.f[DIR_P0P])[k ];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb ];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe - real mfabc = (D.f[DIR_M0P])[kw ];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw - real mfbcc = (D.f[DIR_0PP])[k ];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb ];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn - real mfbac = (D.f[DIR_0MP])[ks ];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts - real mfbbb = (D.f[DIR_000])[k ];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero - real mfccc = (D.f[DIR_PPP])[k ];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw - real mfcac = (D.f[DIR_PMP])[ks ];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse - real mfacc = (D.f[DIR_MPP])[kw ];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw - real mfcca = (D.f[DIR_PPM])[kb ];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////////// - //slow - //real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + - // (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + - // ((mfabb+mfcbb) + (mfbab+mfbcb) + (mfbba+mfbbc)));//fehlt mfbbb - real vvx =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + - (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + - (mfcbb-mfabb)); - real vvy =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + - (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + - (mfbcb-mfbab)); - real vvz =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + - (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + - (mfbbc-mfbba)); - //////////////////////////////////////////////////////////////////////////////////// - //fast - real oMdrho = c1o1 - (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + - mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb + - mfabb+mfcbb + mfbab+mfbcb + mfbba+mfbbc + mfbbb);//fehlt mfbbb nicht mehr - //real vvx =mfccc-mfaaa + mfcac-mfaca + mfcaa-mfacc + mfcca-mfaac + - // mfcba-mfabc + mfcbc-mfaba + mfcab-mfacb + mfccb-mfaab + - // mfcbb-mfabb; - //real vvy =mfccc-mfaaa + mfaca-mfcac + mfacc-mfcaa + mfcca-mfaac + - // mfbca-mfbac + mfbcc-mfbaa + mfacb-mfcab + mfccb-mfaab + - // mfbcb-mfbab; - //real vvz =mfccc-mfaaa + mfcac-mfaca + mfacc-mfcaa + mfaac-mfcca + - // mfbac-mfbca + mfbcc-mfbaa + mfabc-mfcba + mfcbc-mfaba + - // mfbbc-mfbba; - //////////////////////////////////////////////////////////////////////////////////// - // oMdrho assembler style -------> faaaaaastaaaa - // or much sloooowaaaa ... it dep�ndssssss on sadaku - real m0, m1, m2; - //real oMdrho; - //{ - // oMdrho=mfccc+mfaaa; - // m0=mfaca+mfcac; - // m1=mfacc+mfcaa; - // m2=mfaac+mfcca; - // oMdrho+=m0; - // m1+=m2; - // oMdrho+=m1; - // m0=mfbac+mfbca; - // m1=mfbaa+mfbcc; - // m0+=m1; - // m1=mfabc+mfcba; - // m2=mfaba+mfcbc; - // m1+=m2; - // m0+=m1; - // m1=mfacb+mfcab; - // m2=mfaab+mfccb; - // m1+=m2; - // m0+=m1; - // oMdrho+=m0; - // m0=mfabb+mfcbb; - // m1=mfbab+mfbcb; - // m2=mfbba+mfbbc; - // m0+=m1+m2; - // m0+=mfbbb; //hat gefehlt - // oMdrho = one - (oMdrho + m0); - //} - //real vvx; - real vx2; - //{ - // vvx = mfccc-mfaaa; - // m0 = mfcac-mfaca; - // m1 = mfcaa-mfacc; - // m2 = mfcca-mfaac; - // vvx+= m0; - // m1 += m2; - // vvx+= m1; - // vx2 = mfcba-mfabc; - // m0 = mfcbc-mfaba; - // m1 = mfcab-mfacb; - // m2 = mfccb-mfaab; - // vx2+= m0; - // m1 += m2; - // vx2+= m1; - // vvx+= vx2; - // vx2 = mfcbb-mfabb; - // vvx+= vx2; - //} - //real vvy; - real vy2; - //{ - // vvy = mfccc-mfaaa; - // m0 = mfaca-mfcac; - // m1 = mfacc-mfcaa; - // m2 = mfcca-mfaac; - // vvy+= m0; - // m1 += m2; - // vvy+= m1; - // vy2 = mfbca-mfbac; - // m0 = mfbcc-mfbaa; - // m1 = mfacb-mfcab; - // m2 = mfccb-mfaab; - // vy2+= m0; - // m1 += m2; - // vy2+= m1; - // vvy+= vy2; - // vy2 = mfbcb-mfbab; - // vvy+= vy2; - //} - //real vvz; - real vz2; - //{ - // vvz = mfccc-mfaaa; - // m0 = mfcac-mfaca; - // m1 = mfacc-mfcaa; - // m2 = mfaac-mfcca; - // vvz+= m0; - // m1 += m2; - // vvz+= m1; - // vz2 = mfbac-mfbca; - // m0 = mfbcc-mfbaa; - // m1 = mfabc-mfcba; - // m2 = mfcbc-mfaba; - // vz2+= m0; - // m1 += m2; - // vz2+= m1; - // vvz+= vz2; - // vz2 = mfbbc-mfbba; - // vvz+= vz2; - //} - vx2=vvx*vvx; - vy2=vvy*vvy; - vz2=vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - //real wadjust; - //real qudricLimit = 0.01f; - //real s9 = minusomega; - //test - //s9 = 0.; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // BGK - //////////////////////////////////////////////////////////////////////////////////// - ////2. - //mfabb += omega * (-mfabb); - //mfbab += omega * (-mfbab); - //mfbba += omega * (-mfbba); - // - //mfcaa += omega * (c1o3 * mfaaa - mfcaa); - //mfaca += omega * (c1o3 * mfaaa - mfaca); - //mfaac += omega * (c1o3 * mfaaa - mfaac); - // - ////3. - //mfabc += omega * (-mfabc); - //mfbac += omega * (-mfbac); - // - //mfacb += omega * (-mfacb); - //mfbca += omega * (-mfbca); - - //mfcab += omega * (-mfcab); - //mfcba += omega * (-mfcba); - - //mfbbb += omega * (-mfbbb); - - ////4. - //mfacc += omega * (c1o9 * mfaaa - mfacc); - //mfcac += omega * (c1o9 * mfaaa - mfcac); - //mfcca += omega * (c1o9 * mfaaa - mfcca); - - //mfbbc += omega * (-mfbbc); - //mfbcb += omega * (-mfbcb); - //mfcbb += omega * (-mfcbb); - - ////5. - //mfbcc += omega * (-mfbcc); - //mfcbc += omega * (-mfcbc); - //mfccb += omega * (-mfccb); - - ////6. - //mfccc += omega * (c1o27 * mfaaa - mfccc); - ////////////////////////////////////////////////////////////////////////////////////// - - - - ////////////////////////////////////////////////////////////////////////////////////////// - //////// Cumulants - ////////////////////////////////////////////////////////////////////////////////////////// - //////real OxxPyyPzz = one; - //////real OxyyPxzz = one;//two-omega;// - //////real OxyyMxzz = one;//two-omega;// - //////real O4 = one; - //////real O5 = one; - //////real O6 = one; - - ////////Cum 4. - //////real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + two* mfbba * mfbab); - //////real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + two* mfbba * mfabb); - //////real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + two* mfbab * mfabb); - - //////real CUMcca = mfcca - (mfcaa * mfaca + two* mfbba * mfbba)- c1o3 * (mfcaa + mfaca); - //////real CUMcac = mfcac - (mfcaa * mfaac + two* mfbab * mfbab)- c1o3 * (mfcaa + mfaac); - //////real CUMacc = mfacc - (mfaac * mfaca + two* mfabb * mfabb)- c1o3 * (mfaac + mfaca); - - ////////Cum 5. - //////real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + four* mfabb * mfbbb + two* (mfbab * mfacb + mfbba * mfabc)) //O(eps^5) - ////// - c1o3 * (mfbca + mfbac); //O(eps^3) - //////real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + four* mfbab * mfbbb + two* (mfabb * mfcab + mfbba * mfbac)) //O(eps^5) - ////// - c1o3 * (mfcba + mfabc); //O(eps^3) - //////real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + four* mfbba * mfbbb + two* (mfbab * mfbca + mfabb * mfcba)) //O(eps^5) - ////// - c1o3 * (mfacb + mfcab);//O(eps^3) - - ////////Cum 6. - //////real CUMccc = mfccc +(-four* mfbbb * mfbbb //O(eps^6) - ////// - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) // O(eps^4) - ////// - four* (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) // O(eps^6) - ////// - two* (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) // O(esp^6) - ////// +( four* (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) //O(eps^6) - ////// + two* (mfcaa * mfaca * mfaac) //O(eps^6) - ////// + sixteen* mfbba * mfbab * mfabb) //O(eps^6) - ////// - c1o3* (mfacc + mfcac + mfcca) //O(eps^2) - ////// + c1o9* (mfcaa + mfaca + mfaac) //O(eps^2) - ////// +( two* (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)//O(eps^4) - ////// + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3;//O(eps^4) - - - ////////2. - //////// linear combinations - //////real mxxPyyPzz = mfcaa + mfaca + mfaac; - //////real mxxMyy = mfcaa - mfaca; - //////real mxxMzz = mfcaa - mfaac; - - //////{ - ////// real dxux = c1o2 * ((-omega) * (mxxMyy + mxxMzz) + (mfaaa - mxxPyyPzz)); - ////// real dyuy = dxux + omega * c3o2 * mxxMyy; - ////// real dzuz = dxux + omega * c3o2 * mxxMzz; - - ////// //relax - ////// mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- three* (one- c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - ////// mxxMyy += omega * (-mxxMyy) - three* (one+ c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); - ////// mxxMzz += omega * (-mxxMzz) - three* (one+ c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); - //////} - //////mfabb += omega * (-mfabb); - //////mfbab += omega * (-mfbab); - //////mfbba += omega * (-mfbba); - - //////// linear combinations back - //////mfcaa = c1o3 * ( mxxMyy + mxxMzz + mxxPyyPzz); - //////mfaca = c1o3 * (-two* mxxMyy + mxxMzz + mxxPyyPzz); - //////mfaac = c1o3 * ( mxxMyy - two* mxxMzz + mxxPyyPzz); - - ////////3. - //////// linear combinations - //////real mxxyPyzz = mfcba + mfabc; - //////real mxxyMyzz = mfcba - mfabc; - - //////real mxxzPyyz = mfcab + mfacb; - //////real mxxzMyyz = mfcab - mfacb; - - //////real mxyyPxzz = mfbca + mfbac; - //////real mxyyMxzz = mfbca - mfbac; - - ////////relax - //////wadjust = OxyyMxzz+(one-OxyyMxzz)*abs(mfbbb)/(abs(mfbbb)+qudricLimit); - //////mfbbb += wadjust * (-mfbbb); - //////wadjust = OxyyPxzz+(one-OxyyPxzz)*abs(mxxyPyzz)/(abs(mxxyPyzz)+qudricLimit); - //////mxxyPyzz += wadjust * (-mxxyPyzz); - //////wadjust = OxyyMxzz+(one-OxyyMxzz)*abs(mxxyMyzz)/(abs(mxxyMyzz)+qudricLimit); - //////mxxyMyzz += wadjust * (-mxxyMyzz); - //////wadjust = OxyyPxzz+(one-OxyyPxzz)*abs(mxxzPyyz)/(abs(mxxzPyyz)+qudricLimit); - //////mxxzPyyz += wadjust * (-mxxzPyyz); - //////wadjust = OxyyMxzz+(one-OxyyMxzz)*abs(mxxzMyyz)/(abs(mxxzMyyz)+qudricLimit); - //////mxxzMyyz += wadjust * (-mxxzMyyz); - //////wadjust = OxyyPxzz+(one-OxyyPxzz)*abs(mxyyPxzz)/(abs(mxyyPxzz)+qudricLimit); - //////mxyyPxzz += wadjust * (-mxyyPxzz); - //////wadjust = OxyyMxzz+(one-OxyyMxzz)*abs(mxyyMxzz)/(abs(mxyyMxzz)+qudricLimit); - //////mxyyMxzz += wadjust * (-mxyyMxzz); - - //////// linear combinations back - //////mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; - //////mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - //////mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; - //////mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - //////mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; - //////mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - ////////4. - //////CUMacc += O4 * (-CUMacc); - //////CUMcac += O4 * (-CUMcac); - //////CUMcca += O4 * (-CUMcca); - ////// - //////CUMbbc += O4 * (-CUMbbc); - //////CUMbcb += O4 * (-CUMbcb); - //////CUMcbb += O4 * (-CUMcbb); - ////// - ////////5. - //////CUMbcc += O5 * (-CUMbcc); - //////CUMcbc += O5 * (-CUMcbc); - //////CUMccb += O5 * (-CUMccb); - - ////////6. - //////CUMccc += O6 * (-CUMccc); - ////// - ////////back cumulants to central moments - ////////4. - //////mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + two* mfbba * mfbab); - //////mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + two* mfbba * mfabb); - //////mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + two* mfbab * mfabb); - ////// - //////mfcca = CUMcca + (mfcaa * mfaca + two* mfbba * mfbba) + c1o3 * (mfcaa + mfaca); - //////mfcac = CUMcac + (mfcaa * mfaac + two* mfbab * mfbab) + c1o3 * (mfcaa + mfaac); - //////mfacc = CUMacc + (mfaac * mfaca + two* mfabb * mfabb) + c1o3 * (mfaac + mfaca); - - ////////5. - //////mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + four* mfabb * mfbbb + two* (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac); - //////mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + four* mfbab * mfbbb + two* (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc); - //////mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + four* mfbba * mfbbb + two* (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab); - ////// - ////////6. - //////mfccc = CUMccc -((-four* mfbbb * mfbbb - ////// - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - ////// - four* (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) - ////// - two* (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) - ////// +( four* (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - ////// + two* (mfcaa * mfaca * mfaac) - ////// + sixteen* mfbba * mfbab * mfabb) - ////// - c1o3* (mfacc + mfcac + mfcca) - ////// + c1o9* (mfcaa + mfaca + mfaac) - ////// +( two* (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - ////// + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3); - ////////////////////////////////////////////////////////////////////////////////////////// - - - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; - real OxyyPxzz = c8o1*(c2o1-omega)/(c8o1 -omega);//one;//two-omega;//eight*(two-omega)/(eight -omega);//one;//omega;//two-omega;// - real OxyyMxzz = c8o1*(c2o1-omega)/(c8o1 -omega);//one;//omega;//one;//eight*(two-omega)/(eight -omega);//one;//two-omega;//one;// - real O4 = c1o1; - real O5 = c1o1; - real O6 = c1o1; - - ////Cum 4. - //real CUMcbb; real CUMbcb; real CUMbbc; - //real CUMcca; real CUMcac; real CUMacc; - ////Cum 5. - //real CUMbcc; real CUMcbc; real CUMccb; - ////Cum 6. - //real CUMccc; - - //Cum 4. - real CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + c2o1 * mfbba * mfbab); // /rho - real CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + c2o1 * mfbba * mfabb); // /rho - real CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + c2o1 * mfbab * mfabb); // /rho - - real CUMcca = mfcca - ((mfcaa * mfaca + c2o1 * mfbba * mfbba) /* /rho*/ + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-c1o1)*oMdrho); - real CUMcac = mfcac - ((mfcaa * mfaac + c2o1 * mfbab * mfbab) /* /rho*/ + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-c1o1)*oMdrho); - real CUMacc = mfacc - ((mfaac * mfaca + c2o1 * mfabb * mfabb) /* /rho*/ + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-c1o1)*oMdrho); - - //Cum 5. - //real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + four * mfabb * mfbbb + two * (mfbab * mfacb + mfbba * mfabc)) //O(eps^5) - // - c1o3 * (mfbca + mfbac); //O(eps^3) - //real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + four * mfbab * mfbbb + two * (mfabb * mfcab + mfbba * mfbac)) //O(eps^5) - // - c1o3 * (mfcba + mfabc); //O(eps^3) - //real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + four * mfbba * mfbbb + two * (mfbab * mfbca + mfabb * mfcba)) //O(eps^5) - // - c1o3 * (mfacb + mfcab);//O(eps^3) - - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; - - //Cum 6. - real CUMccc = mfccc +((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) - +( c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) - - c1o3 * (mfacc + mfcac + mfcca) * oMdrho -c1o9*oMdrho*oMdrho - - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho*(c1o1-c2o1* oMdrho)- c1o27* oMdrho * oMdrho*(-c2o1* oMdrho) - +( c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) +c1o27*oMdrho; - - - - - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - ////////////////////////////////////////////////////////////////////////// - //real magicBulk=(CUMacc+CUMcac+CUMcca)*(c1o1/OxxPyyPzz-c1o2)*c3o2*8.; - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 1 - //real oxxyy,oxxzz,oxy,oxz,oyz; - //real smag=0.001; - //oxxyy = omega+(one-omega)*abs(mxxMyy)/(abs(mxxMyy)+smag); - //oxxzz = omega+(one-omega)*abs(mxxMzz)/(abs(mxxMzz)+smag); - //oxy = omega+(one-omega)*abs(mfbba)/(abs(mfbba)+smag); - //oxz = omega+(one-omega)*abs(mfbab)/(abs(mfbab)+smag); - //oyz = omega+(one-omega)*abs(mfabb)/(abs(mfabb)+smag); - - //////////////////////////////////////////////////////////////////////////// - ////Teil 1b - //real constante = 1000.0; - //real nuEddi = constante * abs(mxxPyyPzz); - //real omegaLimit = one / (one / omega + three * nuEddi); - - //{ - // real dxux = c1o2 * (-omegaLimit) *(mxxMyy + mxxMzz) + OxxPyyPzz * (mfaaa - mxxPyyPzz); - // real dyuy = dxux + omegaLimit * c3o2 * mxxMyy; - // real dzuz = dxux + omegaLimit * c3o2 * mxxMzz; - - ////relax - //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - //mxxMyy += omegaLimit * (-mxxMyy) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vy2 * dyuy); - //mxxMzz += omegaLimit * (-mxxMzz) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vz2 * dzuz); - - //} - //mfabb += omegaLimit * (-mfabb); - //mfbab += omegaLimit * (-mfbab); - //mfbba += omegaLimit * (-mfbba); - //////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - //{ - // real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - // real dyuy = dxux + omega * c3o2 * mxxMyy; - // real dzuz = dxux + omega * c3o2 * mxxMzz; - - // //relax - // mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - // mxxMyy += omega * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - // mxxMzz += omega * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - // ////////////////////////////////////////////////////////////////////////// - // //limiter-Scheise Teil 2 - // //mxxMyy += oxxyy * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); - // //mxxMzz += oxxzz * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); - // ////////////////////////////////////////////////////////////////////////// - - //} - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //no correction - mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - mxxMyy += -(-omega) * (-mxxMyy); - mxxMzz += -(-omega) * (-mxxMzz); - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 3 - //mfabb += oyz * (-mfabb); - //mfbab += oxz * (-mfbab); - //mfbba += oxy * (-mfbba); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcaa = c1o3 * ( mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * ( mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax -// wadjust = OxyyMxzz+(one-OxyyMxzz)*abs(mfbbb)/(abs(mfbbb)+qudricLimit); -// mfbbb += wadjust * (-mfbbb); -// wadjust = OxyyPxzz+(one-OxyyPxzz)*abs(mxxyPyzz)/(abs(mxxyPyzz)+qudricLimit); -// mxxyPyzz += wadjust * (-mxxyPyzz); -// wadjust = OxyyMxzz+(one-OxyyMxzz)*abs(mxxyMyzz)/(abs(mxxyMyzz)+qudricLimit); -// mxxyMyzz += wadjust * (-mxxyMyzz); -// wadjust = OxyyPxzz+(one-OxyyPxzz)*abs(mxxzPyyz)/(abs(mxxzPyyz)+qudricLimit); -// mxxzPyyz += wadjust * (-mxxzPyyz); -// wadjust = OxyyMxzz+(one-OxyyMxzz)*abs(mxxzMyyz)/(abs(mxxzMyyz)+qudricLimit); -// mxxzMyyz += wadjust * (-mxxzMyyz); -// wadjust = OxyyPxzz+(one-OxyyPxzz)*abs(mxyyPxzz)/(abs(mxyyPxzz)+qudricLimit); -// mxyyPxzz += wadjust * (-mxyyPxzz); -// wadjust = OxyyMxzz+(one-OxyyMxzz)*abs(mxyyMxzz)/(abs(mxyyMxzz)+qudricLimit); -// mxyyMxzz += wadjust * (-mxyyMxzz); - mfbbb += OxyyMxzz * (-mfbbb); - mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - - //// linear combinations back - ////generic - //mfcba = zero; - //mfabc = zero; - //mfcab = zero; - //mfacb = zero; - //mfbca = zero; - //mfbac = zero; - - mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - //CUMacc = zero; - //CUMcac = zero; - //CUMcca = zero; - // - //CUMbbc = zero; - //CUMbcb = zero; - //CUMcbb = zero; - // - ////5. - //CUMbcc = zero; - //CUMcbc = zero; - //CUMccb = zero; - // - ////6. - //CUMccc = zero; - - //4. - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + c2o1 * mfbba * mfbab); - mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + c2o1 * mfbba * mfabb); - mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + c2o1 * mfbab * mfabb); - - mfcca = CUMcca + (mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho-c1o1)*oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho-c1o1)*oMdrho; - mfacc = CUMacc + (mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho-c1o1)*oMdrho; - - //5. - mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho; - mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho; - mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho; - - //6. - mfccc = CUMccc -(( -c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) - +( c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) - - c1o3 * (mfacc + mfcac + mfcca) * oMdrho -c1o9*oMdrho*oMdrho - - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho*(c1o1-c2o1* oMdrho)- c1o27* oMdrho * oMdrho*(-c2o1* oMdrho) - +( c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) -c1o27*oMdrho; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1- vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * ( vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * ( vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1- vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * ( vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1- vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * ( vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1- vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * ( vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * ( vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1- vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * ( vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * ( vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1- vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * ( vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1- vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * ( vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1- vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * ( vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1- vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1- vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1- vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1- vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * ( vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1- vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * ( vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * ( vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1- vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * ( vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * ( vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1- vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * ( vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1- vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1- vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1- vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1- vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[ DIR_P00 ])[k ] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] - (D.f[ DIR_M00 ])[kw ] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] - (D.f[ DIR_0P0 ])[k ] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] - (D.f[ DIR_0M0 ])[ks ] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] - (D.f[ DIR_00P ])[k ] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] - (D.f[ DIR_00M ])[kb ] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] - (D.f[ DIR_PP0 ])[k ] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] - (D.f[ DIR_MM0 ])[ksw ] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] - (D.f[ DIR_PM0 ])[ks ] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] - (D.f[ DIR_MP0 ])[kw ] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] - (D.f[ DIR_P0P ])[k ] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] - (D.f[ DIR_M0M ])[kbw ] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] - (D.f[ DIR_P0M ])[kb ] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] - (D.f[ DIR_M0P ])[kw ] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] - (D.f[ DIR_0PP ])[k ] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] - (D.f[ DIR_0MM ])[kbs ] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] - (D.f[ DIR_0PM ])[kb ] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] - (D.f[ DIR_0MP ])[ks ] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] - (D.f[ DIR_000])[k ] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] - (D.f[ DIR_PPP ])[k ] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] - (D.f[ DIR_PMP ])[ks ] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] - (D.f[ DIR_PPM ])[kb ] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] - (D.f[ DIR_PMM ])[kbs ] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] - (D.f[ DIR_MPP ])[kw ] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] - (D.f[ DIR_MMP ])[ksw ] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] - (D.f[ DIR_MPM ])[kbw ] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] - (D.f[ DIR_MMM ])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] - //////////////////////////////////////////////////////////////////////////////////// - } - } -} -//////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////// -__global__ void LB_Kernel_Kum_Comp_SP_27( real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<numberOfLBnodes) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if( (BC != GEO_SOLID) && (BC != GEO_VOID) ) - { - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int kzero= k; - unsigned int ke = k; - unsigned int kw = neighborX[k]; - unsigned int kn = k; - unsigned int ks = neighborY[k]; - unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = k; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = k; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = k; - 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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real f_E = (D.f[DIR_P00])[ke ];// + c2over27 ; - real f_W = (D.f[DIR_M00])[kw ];// + c2over27 ; - real f_N = (D.f[DIR_0P0])[kn ];// + c2over27 ; - real f_S = (D.f[DIR_0M0])[ks ];// + c2over27 ; - real f_T = (D.f[DIR_00P])[kt ];// + c2over27 ; - real f_B = (D.f[DIR_00M])[kb ];// + c2over27 ; - real f_NE = (D.f[DIR_PP0])[kne ];// + c1over54 ; - real f_SW = (D.f[DIR_MM0])[ksw ];// + c1over54 ; - real f_SE = (D.f[DIR_PM0])[kse ];// + c1over54 ; - real f_NW = (D.f[DIR_MP0])[knw ];// + c1over54 ; - real f_TE = (D.f[DIR_P0P])[kte ];// + c1over54 ; - real f_BW = (D.f[DIR_M0M])[kbw ];// + c1over54 ; - real f_BE = (D.f[DIR_P0M])[kbe ];// + c1over54 ; - real f_TW = (D.f[DIR_M0P])[ktw ];// + c1over54 ; - real f_TN = (D.f[DIR_0PP])[ktn ];// + c1over54 ; - real f_BS = (D.f[DIR_0MM])[kbs ];// + c1over54 ; - real f_BN = (D.f[DIR_0PM])[kbn ];// + c1over54 ; - real f_TS = (D.f[DIR_0MP])[kts ];// + c1over54 ; - real f_R = (D.f[DIR_000])[kzero];// + c8over27 ; - real f_TNE = (D.f[DIR_PPP])[ktne ];// + c1over216; - real f_TSW = (D.f[DIR_MMP])[ktsw ];// + c1over216; - real f_TSE = (D.f[DIR_PMP])[ktse ];// + c1over216; - real f_TNW = (D.f[DIR_MPP])[ktnw ];// + c1over216; - real f_BNE = (D.f[DIR_PPM])[kbne ];// + c1over216; - real f_BSW = (D.f[DIR_MMM])[kbsw ];// + c1over216; - real f_BSE = (D.f[DIR_PMM])[kbse ];// + c1over216; - real f_BNW = (D.f[DIR_MPM])[kbnw ];// + c1over216; - //////////////////////////////////////////////////////////////////////////////////// - real fx = c0o1; - real fy = c0o1; - real fz = c0o1; - //////////////////////////////////////////////////////////////////////////////////// - real rho=f_NW+f_W+f_SW+f_S+f_SE+f_E+f_NE+f_N+f_R+f_TN+f_BN+f_TS+f_BS+f_TE+f_BE+f_TW+f_BW+f_TNW+f_BNW+f_TNE+f_BNE+f_TSW+f_BSW+f_TSE+f_BSE+f_T+f_B+c1o1;// ACHTUNG ne EINS !!!!!!!! - real pix=(f_NE+f_E+f_SE+f_TE+f_BE-f_NW-f_W-f_SW-f_TW-f_BW+f_TNE+f_BNE+f_TSE+f_BSE-f_TNW-f_BNW-f_TSW-f_BSW); - real piy=(f_NE+f_N+f_NW+f_TN+f_BN-f_SE-f_S-f_SW-f_TS-f_BS+f_TNE+f_BNE+f_TNW+f_BNW-f_TSE-f_BSE-f_TSW-f_BSW); - real piz=(f_TN+f_TS+f_TW+f_TE+f_T-f_BN-f_BS-f_BW-f_BE-f_B+f_TNE+f_TNW+f_TSE+f_TSW-f_BNE-f_BNW-f_BSE-f_BSW); - real vvx=pix/rho + fx; - real vvy=piy/rho + fy; - real vvz=piz/rho + fz; - real vx2=vvx*vvx; - real vy2=vvy*vvy; - real vz2=vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real mfaaa = f_BSW; - real mfaab = f_SW; - real mfaac = f_TSW; - real mfaba = f_BW; - real mfabb = f_W; - real mfabc = f_TW; - real mfbaa = f_BS; - real mfbab = f_S; - real mfbac = f_TS; - real mfbba = f_B; - real mfbbb = f_R; - real mfbbc = f_T; - real mfaca = f_BNW; - real mfacb = f_NW; - real mfacc = f_TNW; - real mfcaa = f_BSE; - real mfcab = f_SE; - real mfcac = f_TSE; - real mfcca = f_BNE; - real mfccb = f_NE; - real mfccc = f_TNE; - real mfbca = f_BN; - real mfbcb = f_N; - real mfbcc = f_TN; - real mfcba = f_BE; - real mfcbb = f_E; - real mfcbc = f_TE; - real m0, m1, m2; - real wadjust; - real qudricLimit = c1o100; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - ////////////////////////////////////////////////////////////////////////////////////// - //// BGK - ////////////////////////////////////////////////////////////////////////////////////// - ////2. - //mfabb += -(-omega) * (-mfabb); - //mfbab += -(-omega) * (-mfbab); - //mfbba += -(-omega) * (-mfbba); - // - //mfcaa += -(-omega) * (c1o3 * mfaaa - mfcaa); - //mfaca += -(-omega) * (c1o3 * mfaaa - mfaca); - //mfaac += -(-omega) * (c1o3 * mfaaa - mfaac); - // - ////3. - //mfabc += -(-omega) * (-mfabc); - //mfbac += -(-omega) * (-mfbac); - // - //mfacb += -(-omega) * (-mfacb); - //mfbca += -(-omega) * (-mfbca); - - //mfcab += -(-omega) * (-mfcab); - //mfcba += -(-omega) * (-mfcba); - - //mfbbb += -(-omega) * (-mfbbb); - - ////4. - //mfacc += -(-omega) * (c1o9 * mfaaa - mfacc); - //mfcac += -(-omega) * (c1o9 * mfaaa - mfcac); - //mfcca += -(-omega) * (c1o9 * mfaaa - mfcca); - - //mfbbc += -(-omega) * (-mfbbc); - //mfbcb += -(-omega) * (-mfbcb); - //mfcbb += -(-omega) * (-mfcbb); - - ////5. - //mfbcc += -(-omega) * (-mfbcc); - //mfcbc += -(-omega) * (-mfcbc); - //mfccb += -(-omega) * (-mfccb); - - ////6. - //mfccc += -(-omega) * (c1o27 * mfaaa - mfccc); - ////////////////////////////////////////////////////////////////////////////////////// - - - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; - real OxyyPxzz = c1o1;//two+(-omega);//one; - real OxyyMxzz = c1o1;//two+(-omega);//one; - real O4 = c1o1; - real O5 = c1o1; - real O6 = c1o1; - - //Cum 4. - real CUMcbb = mfcbb - ((mfcaa + c1o3 * rho) * mfabb + c2o1* mfbba * mfbab) / rho; - real CUMbcb = mfbcb - ((mfaca + c1o3 * rho) * mfbab + c2o1* mfbba * mfabb) / rho; - real CUMbbc = mfbbc - ((mfaac + c1o3 * rho) * mfbba + c2o1* mfbab * mfabb) / rho; - - real CUMcca = mfcca - (mfcaa * mfaca + c2o1* mfbba * mfbba) / rho - c1o3 * (mfcaa + mfaca); - real CUMcac = mfcac - (mfcaa * mfaac + c2o1* mfbab * mfbab) / rho - c1o3 * (mfcaa + mfaac); - real CUMacc = mfacc - (mfaac * mfaca + c2o1* mfabb * mfabb) / rho - c1o3 * (mfaac + mfaca); - - //Cum 5. - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + c4o1* mfabb * mfbbb + c2o1* (mfbab * mfacb + mfbba * mfabc)) / rho - c1o3 * (mfbca + mfbac); - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + c4o1* mfbab * mfbbb + c2o1* (mfabb * mfcab + mfbba * mfbac)) / rho - c1o3 * (mfcba + mfabc); - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + c4o1* mfbba * mfbbb + c2o1* (mfbab * mfbca + mfabb * mfcba)) / rho - c1o3 * (mfacb + mfcab); - - //Cum 6. - real CUMccc = mfccc +( -c4o1* mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1* (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1* (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - +( c4o1* (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1* (mfcaa * mfaca * mfaac) - + c16o1* mfbba * mfbab * mfabb) / (rho * rho) - - c1o3* (mfacc + mfcac + mfcca) - + c1o9* (mfcaa + mfaca + mfaac) - +( c2o1* (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 / rho; - - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - //relax - //hat noch nicht so gut funktioniert...Optimierungsbedarf - //{ - // real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + OxxPyyPzz * (mfaaa - mxxPyyPzz); - // real dyuy = dxux + omega * c3o2 * mxxMyy; - // real dzuz = dxux + omega * c3o2 * mxxMzz; - - // //relax - // mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - // mxxMyy += omega * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); - // mxxMzz += omega * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); - - // ////////////////////////////////////////////////////////////////////////// - // //limiter-Scheise Teil 2 - // //mxxMyy += oxxyy * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); - // //mxxMzz += oxxzz * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); - // ////////////////////////////////////////////////////////////////////////// - - //} - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - { - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 2 - //mxxMyy += oxxyy * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); - //mxxMzz += oxxzz * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); - ////////////////////////////////////////////////////////////////////////// - - } - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz); - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += -(-omega) * (-mfabb); - mfbab += -(-omega) * (-mfbab); - mfbba += -(-omega) * (-mfbba); - - // linear combinations back - mfcaa = c1o3 * ( mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1 * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * ( mxxMyy - c2o1 * mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mfbbb)/(abs(mfbbb)+qudricLimit); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxxyPyzz)/(abs(mxxyPyzz)+qudricLimit); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxxyMyzz)/(abs(mxxyMyzz)+qudricLimit); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxxzPyyz)/(abs(mxxzPyyz)+qudricLimit); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxxzMyyz)/(abs(mxxzMyyz)+qudricLimit); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxyyPxzz)/(abs(mxyyPxzz)+qudricLimit); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxyyMxzz)/(abs(mxyyMxzz)+qudricLimit); - mxyyMxzz += wadjust * (-mxyyMxzz); - - // linear combinations back - mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3 * rho) * mfabb + c2o1* mfbba * mfbab) / rho; - mfbcb = CUMbcb + ((mfaca + c1o3 * rho) * mfbab + c2o1* mfbba * mfabb) / rho; - mfbbc = CUMbbc + ((mfaac + c1o3 * rho) * mfbba + c2o1* mfbab * mfabb) / rho; - - mfcca = CUMcca + (mfcaa * mfaca + c2o1* mfbba * mfbba) / rho + c1o3 * (mfcaa + mfaca); - mfcac = CUMcac + (mfcaa * mfaac + c2o1* mfbab * mfbab) / rho + c1o3 * (mfcaa + mfaac); - mfacc = CUMacc + (mfaac * mfaca + c2o1* mfabb * mfabb) / rho + c1o3 * (mfaac + mfaca); - - //5. - mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + c4o1* mfabb * mfbbb + c2o1* (mfbab * mfacb + mfbba * mfabc)) / rho + c1o3 * (mfbca + mfbac); - mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + c4o1* mfbab * mfbbb + c2o1* (mfabb * mfcab + mfbba * mfbac)) / rho + c1o3 * (mfcba + mfabc); - mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + c4o1* mfbba * mfbbb + c2o1* (mfbab * mfbca + mfabb * mfcba)) / rho + c1o3 * (mfacb + mfcab); - - //6. - mfccc = CUMccc -(( -c4o1* mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1* (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1* (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - +( c4o1* (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1* (mfcaa * mfaca * mfaac) - + c16o1* mfbba * mfbab * mfabb) / (rho * rho) - - c1o3* (mfacc + mfcac + mfcca) - + c1o9* (mfcaa + mfaca + mfaac) - +( c2o1* (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 / rho); - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1.) * ( vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1- vz2) - c1o1* vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1.) * ( vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * ( vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1- vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * ( vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3) * ( vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1- vz2) - c1o3 * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3) * ( vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * ( vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1- vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * ( vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * ( vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1- vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * ( vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * ( vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1- vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * ( vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3) * ( vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1- vz2) - c1o3 * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3) * ( vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * ( vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1- vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * ( vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9) * ( vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1- vz2) - c1o9 * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9) * ( vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6) * ( vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1- vy2) - c1o6 * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6) * ( vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3) * ( vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1- vy2) - c2o3 * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3) * ( vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6) * ( vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1- vy2) - c1o6 * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6) * ( vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * ( vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1- vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * ( vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * ( vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1- vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * ( vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * ( vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1- vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * ( vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18) * ( vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1- vy2) - c1o18 * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18) * ( vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9) * ( vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1- vy2) - c2o9 * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9) * ( vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18) * ( vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1- vy2) - c1o18 * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18) * ( vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36) * ( vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1- vx2) - c1o36 * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36) * ( vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9) * ( vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1- vx2) - c1o9 * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9) * ( vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36) * ( vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1- vx2) - c1o36 * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36) * ( vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9) * ( vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1- vx2) - c1o9 * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9) * ( vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9) * ( vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1- vx2) - c4o9 * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9) * ( vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9) * ( vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1- vx2) - c1o9 * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9) * ( vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36) * ( vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1- vx2) - c1o36 * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36) * ( vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9) * ( vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1- vx2) - c1o9 * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9) * ( vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36) * ( vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1- vx2) - c1o36 * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36) * ( vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ;// - (D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; - (D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; - (D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; - (D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; - (D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; - (D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; - (D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; - (D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; - (D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; - (D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; - (D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; - (D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; - (D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; - (D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; - (D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; - (D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; - (D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; - (D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; - (D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; - (D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; - (D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; - (D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; - (D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; - (D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; - (D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; - (D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; - //////////////////////////////////////////////////////////////////////////////////// - } - } -} -//////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////// -__global__ void LB_Kernel_Kum_New_Comp_SRT_SP_27( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<numberOfLBnodes) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if (BC >= GEO_FLUID) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k ]; - real mfabb = (D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k ]; - real mfbab = (D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k ]; - real mfbba = (D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k ]; - real mfaab = (D.f[DIR_MM0])[ksw ]; - real mfcab = (D.f[DIR_PM0])[ks ]; - real mfacb = (D.f[DIR_MP0])[kw ]; - real mfcbc = (D.f[DIR_P0P])[k ]; - real mfaba = (D.f[DIR_M0M])[kbw ]; - real mfcba = (D.f[DIR_P0M])[kb ]; - real mfabc = (D.f[DIR_M0P])[kw ]; - real mfbcc = (D.f[DIR_0PP])[k ]; - real mfbaa = (D.f[DIR_0MM])[kbs ]; - real mfbca = (D.f[DIR_0PM])[kb ]; - real mfbac = (D.f[DIR_0MP])[ks ]; - real mfbbb = (D.f[DIR_000])[k ]; - real mfccc = (D.f[DIR_PPP])[k ]; - real mfaac = (D.f[DIR_MMP])[ksw ]; - real mfcac = (D.f[DIR_PMP])[ks ]; - real mfacc = (D.f[DIR_MPP])[kw ]; - real mfcca = (D.f[DIR_PPM])[kb ]; - real mfaaa = (D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs ]; - real mfaca = (D.f[DIR_MPM])[kbw ]; - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - - real rho = c1o1 + drho; - //////////////////////////////////////////////////////////////////////////////////// - //slow - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) / rho; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) / rho; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - real fx = forces[0] / (pow((double)c2o1, (double)level)); - real fy = forces[1] / (pow((double)c2o1, (double)level)); - real fz = forces[2] / (pow((double)c2o1, (double)level)); - vvx += fx*c1o2; - vvy += fy*c1o2; - vvz += fz*c1o2; - //////////////////////////////////////////////////////////////////////////////////// - //real omega = omega_in; - //////////////////////////////////////////////////////////////////////////////////// - //fast - real oMdrho = c1o1; // comp special - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - ////////////////////////////////////////////////////////////////////////////////////// - //real wadjust; - //real qudricLimitP = c1o100;// * 0.0001f; - //real qudricLimitM = c1o100;// * 0.0001f; - //real qudricLimitD = c1o100;// * 0.001f; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = omega; - - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - real OxyyPxzz = omega; - real OxyyMxzz = omega; - //real Oxyz = omega; - //////////////////////////////////////////////////////////// - //4. - ////////////////////////////// - real O4 = omega; - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = omega; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = omega; - //////////////////////////////////////////////////////////// - - - //central moments to cumulants - //4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; //ab 15.05.2015 verwendet - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; //ab 15.05.2015 verwendet - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; //ab 15.05.2015 verwendet - - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - //+ c1o27*(one -three/rho +two/(rho*rho))); - - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - ////////////////////////////////////////////////////////////////////////// - // real magicBulk=(CUMacc+CUMcac+CUMcca)*(one/OxxPyyPzz-c1o2)*c3o2*8.; - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 1 - //real oxxyy,oxxzz,oxy,oxz,oyz; - //real smag=0.001; - //oxxyy = omega+(one-omega)*abs(mxxMyy)/(abs(mxxMyy)+smag); - //oxxzz = omega+(one-omega)*abs(mxxMzz)/(abs(mxxMzz)+smag); - //oxy = omega+(one-omega)*abs(mfbba)/(abs(mfbba)+smag); - //oxz = omega+(one-omega)*abs(mfbab)/(abs(mfbab)+smag); - //oyz = omega+(one-omega)*abs(mfabb)/(abs(mfabb)+smag); - - //////////////////////////////////////////////////////////////////////////// - ////Teil 1b - //real constante = 1000.0; - //real nuEddi = constante * abs(mxxPyyPzz); - //real omegaLimit = one / (one / omega + three * nuEddi); - - //{ - // real dxux = c1o2 * (-omegaLimit) *(mxxMyy + mxxMzz) + OxxPyyPzz * (mfaaa - mxxPyyPzz); - // real dyuy = dxux + omegaLimit * c3o2 * mxxMyy; - // real dzuz = dxux + omegaLimit * c3o2 * mxxMzz; - - ////relax - //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - //mxxMyy += omegaLimit * (-mxxMyy) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vy2 * dyuy); - //mxxMzz += omegaLimit * (-mxxMzz) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vz2 * dzuz); - - //} - //mfabb += omegaLimit * (-mfabb); - //mfbab += omegaLimit * (-mfbab); - //mfbba += omegaLimit * (-mfbba); - //////////////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - { - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 2 - //mxxMyy += oxxyy * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); - //mxxMzz += oxxzz * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); - ////////////////////////////////////////////////////////////////////////// - - } - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 3 - //mfabb += oyz * (-mfabb); - //mfbab += oxz * (-mfbab); - //mfbba += oxy * (-mfbba); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - ////////////////////////////////////////////////////////////////////////// - //das ist der limiter - //wadjust = Oxyz+(one-Oxyz)*abs(mfbbb)/(abs(mfbbb)+qudricLimitD); - //mfbbb += wadjust * (-mfbbb); - //wadjust = OxyyPxzz+(one-OxyyPxzz)*abs(mxxyPyzz)/(abs(mxxyPyzz)+qudricLimitP); - //mxxyPyzz += wadjust * (-mxxyPyzz); - //wadjust = OxyyMxzz+(one-OxyyMxzz)*abs(mxxyMyzz)/(abs(mxxyMyzz)+qudricLimitM); - //mxxyMyzz += wadjust * (-mxxyMyzz); - //wadjust = OxyyPxzz+(one-OxyyPxzz)*abs(mxxzPyyz)/(abs(mxxzPyyz)+qudricLimitP); - //mxxzPyyz += wadjust * (-mxxzPyyz); - //wadjust = OxyyMxzz+(one-OxyyMxzz)*abs(mxxzMyyz)/(abs(mxxzMyyz)+qudricLimitM); - //mxxzMyyz += wadjust * (-mxxzMyyz); - //wadjust = OxyyPxzz+(one-OxyyPxzz)*abs(mxyyPxzz)/(abs(mxyyPxzz)+qudricLimitP); - //mxyyPxzz += wadjust * (-mxyyPxzz); - //wadjust = OxyyMxzz+(one-OxyyMxzz)*abs(mxyyMxzz)/(abs(mxyyMxzz)+qudricLimitM); - //mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - mfbbb += OxyyMxzz * (-mfbbb); - mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - //mit limiter - // wadjust = O4+(one-O4)*abs(CUMacc)/(abs(CUMacc)+qudricLimit); - //CUMacc += wadjust * (-CUMacc); - // wadjust = O4+(one-O4)*abs(CUMcac)/(abs(CUMcac)+qudricLimit); - //CUMcac += wadjust * (-CUMcac); - // wadjust = O4+(one-O4)*abs(CUMcca)/(abs(CUMcca)+qudricLimit); - //CUMcca += wadjust * (-CUMcca); - - // wadjust = O4+(one-O4)*abs(CUMbbc)/(abs(CUMbbc)+qudricLimit); - //CUMbbc += wadjust * (-CUMbbc); - // wadjust = O4+(one-O4)*abs(CUMbcb)/(abs(CUMbcb)+qudricLimit); - //CUMbcb += wadjust * (-CUMbcb); - // wadjust = O4+(one-O4)*abs(CUMcbb)/(abs(CUMcbb)+qudricLimit); - //CUMcbb += wadjust * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////////////////// - real drhoPost = - ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - mfbbb += drho - drhoPost; - //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k ] = mfabb; - (D.f[DIR_M00])[kw ] = mfcbb; - (D.f[DIR_0P0])[k ] = mfbab; - (D.f[DIR_0M0])[ks ] = mfbcb; - (D.f[DIR_00P])[k ] = mfbba; - (D.f[DIR_00M])[kb ] = mfbbc; - (D.f[DIR_PP0])[k ] = mfaab; - (D.f[DIR_MM0])[ksw ] = mfccb; - (D.f[DIR_PM0])[ks ] = mfacb; - (D.f[DIR_MP0])[kw ] = mfcab; - (D.f[DIR_P0P])[k ] = mfaba; - (D.f[DIR_M0M])[kbw ] = mfcbc; - (D.f[DIR_P0M])[kb ] = mfabc; - (D.f[DIR_M0P])[kw ] = mfcba; - (D.f[DIR_0PP])[k ] = mfbaa; - (D.f[DIR_0MM])[kbs ] = mfbcc; - (D.f[DIR_0PM])[kb ] = mfbac; - (D.f[DIR_0MP])[ks ] = mfbca; - (D.f[DIR_000])[k ] = mfbbb; - (D.f[DIR_PPP])[k ] = mfaaa; - (D.f[DIR_PMP])[ks ] = mfaca; - (D.f[DIR_PPM])[kb ] = mfaac; - (D.f[DIR_PMM])[kbs ] = mfacc; - (D.f[DIR_MPP])[kw ] = mfcaa; - (D.f[DIR_MMP])[ksw ] = mfcca; - (D.f[DIR_MPM])[kbw ] = mfcac; - (D.f[DIR_MMM])[kbsw] = mfccc; - } - } -} -//////////////////////////////////////////////////////////////////////////////// - - - - - - diff --git a/src/gpu/VirtualFluids_GPU/GPU/Cumulant27chim.cu b/src/gpu/VirtualFluids_GPU/GPU/Cumulant27chim.cu deleted file mode 100644 index 2c482c3b0fc368c52cca1e74246c75210131b326..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/GPU/Cumulant27chim.cu +++ /dev/null @@ -1,2277 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// 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/>. -// -//! \file Cumulant27chim.cu -//! \ingroup GPU -//! \author Martin Schoenherr -//======================================================================================= -/* 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; - -#include "math.h" - -#include "lbm/Chimera.h" - - -//////////////////////////////////////////////////////////////////////////////// -__global__ void Cumulant_One_preconditioned_errorDiffusion_chim_Comp_SP_27( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<numberOfLBnodes) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if (BC >= GEO_FLUID/*(BC != GEO_SOLID) && (BC != GEO_VOID)*/) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - - - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke - real mfabb = (D.f[DIR_M00])[kw];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn - real mfbab = (D.f[DIR_0M0])[ks];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt - real mfbba = (D.f[DIR_00M])[kb];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse - real mfacb = (D.f[DIR_MP0])[kw];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw - real mfcbc = (D.f[DIR_P0P])[k];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe - real mfabc = (D.f[DIR_M0P])[kw];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw - real mfbcc = (D.f[DIR_0PP])[k];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn - real mfbac = (D.f[DIR_0MP])[ks];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts - real mfbbb = (D.f[DIR_000])[k];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero - real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw - real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse - real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw - real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - - real rho = c1o1 + drho; - //////////////////////////////////////////////////////////////////////////////////// - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) / rho; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) / rho; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - real fx = forces[0] / (pow((double)c2o1, (double)level)); //zero;//0.0032653/(pow(two,level)); //0.000000005;//(two/1600000.0) / 120.0; // - real fy = forces[1] / (pow((double)c2o1, (double)level)); //zero; - real fz = forces[2] / (pow((double)c2o1, (double)level)); //zero; - vvx += fx*c1o2; - vvy += fy*c1o2; - vvz += fz*c1o2; - //////////////////////////////////////////////////////////////////////////////////// - //real omega = omega_in; - //////////////////////////////////////////////////////////////////////////////////// - //fast - //real oMdrho = c1o1; // comp special - //real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - //real wadjust; - //real qudricLimitP = c1o100;// * 0.0001f; - //real qudricLimitM = c1o100;// * 0.0001f; - //real qudricLimitD = c1o100;// * 0.001f; - //real s9 = minusomega; - //test - //s9 = 0.; - - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real EQcbb = c0o1; - real EQabb = c0o1; - real EQbcb = c0o1; - real EQbab = c0o1; - real EQbbc = c0o1; - real EQbba = c0o1; - real EQccb = c0o1; - real EQaab = c0o1; - real EQcab = c0o1; - real EQacb = c0o1; - real EQcbc = c0o1; - real EQaba = c0o1; - real EQcba = c0o1; - real EQabc = c0o1; - real EQbcc = c0o1; - real EQbaa = c0o1; - real EQbca = c0o1; - real EQbac = c0o1; - real EQbbb = c0o1; - real EQccc = drho * c1o27; - real EQaac = drho * c1o3; - real EQcac = drho * c1o9; - real EQacc = drho * c1o9; - real EQcca = drho * c1o9; - real EQaaa = drho; - real EQcaa = drho * c1o3; - real EQaca = drho * c1o3; - //////////////////////////////////////////////////////////////////////////////////// - vf::lbm::backwardChimeraWithK(EQaaa, EQaab, EQaac, vvz, vz2, c1o1); - vf::lbm::backwardChimeraWithK(EQaca, EQacb, EQacc, vvz, vz2, c1o3); - /////////////////////////////////////////////////////////// - EQcaa = EQaca; EQcab = EQacb; EQcac = EQacc; - /////////////////////////////////////////////////////////// - vf::lbm::backwardChimeraWithK(EQcca, EQccb, EQccc, vvz, vz2, c1o9); - - vf::lbm::backwardChimeraWithK(EQaaa, EQaba, EQaca, vvy, vy2, c1o6); - vf::lbm::backwardChimeraWithK(EQaab, EQabb, EQacb, vvy, vy2, c2o3); - vf::lbm::backwardChimeraWithK(EQaac, EQabc, EQacc, vvy, vy2, c1o6); - vf::lbm::backwardChimeraWithK(EQcaa, EQcba, EQcca, vvy, vy2, c1o18); - vf::lbm::backwardChimeraWithK(EQcab, EQcbb, EQccb, vvy, vy2, c2o9); - vf::lbm::backwardChimeraWithK(EQcac, EQcbc, EQccc, vvy, vy2, c1o18); - - vf::lbm::backwardChimeraWithK(EQaaa, EQbaa, EQcaa, vvx, vx2, c1o36); - vf::lbm::backwardChimeraWithK(EQaab, EQbab, EQcab, vvx, vx2, c1o9); - vf::lbm::backwardChimeraWithK(EQaac, EQbac, EQcac, vvx, vx2, c1o36); - vf::lbm::backwardChimeraWithK(EQaba, EQbba, EQcba, vvx, vx2, c1o9); - vf::lbm::backwardChimeraWithK(EQabb, EQbbb, EQcbb, vvx, vx2, c4o9); - vf::lbm::backwardChimeraWithK(EQabc, EQbbc, EQcbc, vvx, vx2, c1o9); - vf::lbm::backwardChimeraWithK(EQaca, EQbca, EQcca, vvx, vx2, c1o36); - vf::lbm::backwardChimeraWithK(EQacb, EQbcb, EQccb, vvx, vx2, c1o9); - vf::lbm::backwardChimeraWithK(EQacc, EQbcc, EQccc, vvx, vx2, c1o36); - - //////////////////////////////////////////////////////////////////////////////////// - //Pre-condition - mfcbb -= EQcbb; - mfabb -= EQabb; - mfbcb -= EQbcb; - mfbab -= EQbab; - mfbbc -= EQbbc; - mfbba -= EQbba; - mfccb -= EQccb; - mfaab -= EQaab; - mfcab -= EQcab; - mfacb -= EQacb; - mfcbc -= EQcbc; - mfaba -= EQaba; - mfcba -= EQcba; - mfabc -= EQabc; - mfbcc -= EQbcc; - mfbaa -= EQbaa; - mfbca -= EQbca; - mfbac -= EQbac; - mfbbb -= EQbbb; - mfccc -= EQccc; - mfaac -= EQaac; - mfcac -= EQcac; - mfacc -= EQacc; - mfcca -= EQcca; - mfaaa -= EQaaa; - mfcaa -= EQcaa; - mfaca -= EQaca; - - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - vf::lbm::forwardChimera(mfaaa, mfaab, mfaac, vvz, vz2); - vf::lbm::forwardChimera(mfaba, mfabb, mfabc, vvz, vz2); - vf::lbm::forwardChimera(mfaca, mfacb, mfacc, vvz, vz2); - vf::lbm::forwardChimera(mfbaa, mfbab, mfbac, vvz, vz2); - vf::lbm::forwardChimera(mfbba, mfbbb, mfbbc, vvz, vz2); - vf::lbm::forwardChimera(mfbca, mfbcb, mfbcc, vvz, vz2); - vf::lbm::forwardChimera(mfcaa, mfcab, mfcac, vvz, vz2); - vf::lbm::forwardChimera(mfcba, mfcbb, mfcbc, vvz, vz2); - vf::lbm::forwardChimera(mfcca, mfccb, mfccc, vvz, vz2); - - vf::lbm::forwardChimera(mfaaa, mfaba, mfaca, vvy, vy2); - vf::lbm::forwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - vf::lbm::forwardChimera(mfaac, mfabc, mfacc, vvy, vy2); - vf::lbm::forwardChimera(mfbaa, mfbba, mfbca, vvy, vy2); - vf::lbm::forwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - vf::lbm::forwardChimera(mfbac, mfbbc, mfbcc, vvy, vy2); - vf::lbm::forwardChimera(mfcaa, mfcba, mfcca, vvy, vy2); - vf::lbm::forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - vf::lbm::forwardChimera(mfcac, mfcbc, mfccc, vvy, vy2); - - vf::lbm::forwardChimera(mfaaa, mfbaa, mfcaa, vvx, vx2); - vf::lbm::forwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - vf::lbm::forwardChimera(mfaac, mfbac, mfcac, vvx, vx2); - vf::lbm::forwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - vf::lbm::forwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - vf::lbm::forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - vf::lbm::forwardChimera(mfaca, mfbca, mfcca, vvx, vx2); - vf::lbm::forwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - vf::lbm::forwardChimera(mfacc, mfbcc, mfccc, vvx, vx2); - - ////////////////////////////////////////////////////////////////////////////////////// - ////Hin - ////////////////////////////////////////////////////////////////////////////////////// - //// mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - ////////////////////////////////////////////////////////////////////////////////////// - //// Z - Dir - //forwardChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, c1o36); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, c1o9); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c1o36); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, c1o9); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, c4o9); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, c1o9); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c1o36); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, c1o9); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c1o36); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //// mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - ////////////////////////////////////////////////////////////////////////////////////// - //// Y - Dir - //forwardChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c1o6); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c1o18); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfbaa, mfbba, mfbca, vvy, vy2, c2o3); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfbac, mfbbc, mfbcc, vvy, vy2, c2o9); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfcaa, mfcba, mfcca, vvy, vy2, c1o6); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c1o18); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //// mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - ////////////////////////////////////////////////////////////////////////////////////// - //// X - Dir - //forwardChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, one); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c1o3); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfaac, mfbac, mfcac, vvx, vx2, c1o3); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c1o9); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; //omega; // one; //set the bulk viscosity one is high / two is very low and zero is (too) high - - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - real OxyyPxzz = c1o1; - real OxyyMxzz = c1o1; - //real Oxyz = c1o1; - //////////////////////////////////////////////////////////// - //4. - ////////////////////////////// - real O4 = c1o1; - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = c1o1; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = c1o1; - //////////////////////////////////////////////////////////// - - - //central moments to cumulants - //4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - - - - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - { - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - } - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - ////////////////////////////////////////////////////////////////////////// - mfbbb += OxyyMxzz * (-mfbbb); - mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - vf::lbm::backwardChimera(mfaaa, mfaab, mfaac, vvz, vz2); - vf::lbm::backwardChimera(mfaba, mfabb, mfabc, vvz, vz2); - vf::lbm::backwardChimera(mfaca, mfacb, mfacc, vvz, vz2); - vf::lbm::backwardChimera(mfbaa, mfbab, mfbac, vvz, vz2); - vf::lbm::backwardChimera(mfbba, mfbbb, mfbbc, vvz, vz2); - vf::lbm::backwardChimera(mfbca, mfbcb, mfbcc, vvz, vz2); - vf::lbm::backwardChimera(mfcaa, mfcab, mfcac, vvz, vz2); - vf::lbm::backwardChimera(mfcba, mfcbb, mfcbc, vvz, vz2); - vf::lbm::backwardChimera(mfcca, mfccb, mfccc, vvz, vz2); - - vf::lbm::backwardChimera(mfaaa, mfaba, mfaca, vvy, vy2); - vf::lbm::backwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - vf::lbm::backwardChimera(mfaac, mfabc, mfacc, vvy, vy2); - vf::lbm::backwardChimera(mfbaa, mfbba, mfbca, vvy, vy2); - vf::lbm::backwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - vf::lbm::backwardChimera(mfbac, mfbbc, mfbcc, vvy, vy2); - vf::lbm::backwardChimera(mfcaa, mfcba, mfcca, vvy, vy2); - vf::lbm::backwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - vf::lbm::backwardChimera(mfcac, mfcbc, mfccc, vvy, vy2); - - vf::lbm::backwardChimera(mfaaa, mfbaa, mfcaa, vvx, vx2); - vf::lbm::backwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - vf::lbm::backwardChimera(mfaac, mfbac, mfcac, vvx, vx2); - vf::lbm::backwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - vf::lbm::backwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - vf::lbm::backwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - vf::lbm::backwardChimera(mfaca, mfbca, mfcca, vvx, vx2); - vf::lbm::backwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - vf::lbm::backwardChimera(mfacc, mfbcc, mfccc, vvx, vx2); - - //////////////////////////////////////////////////////////////////////////////////// - //mfcbb += EQcbb; - //mfabb += EQabb; - //mfbcb += EQbcb; - //mfbab += EQbab; - //mfbbc += EQbbc; - //mfbba += EQbba; - //mfccb += EQccb; - //mfaab += EQaab; - //mfcab += EQcab; - //mfacb += EQacb; - //mfcbc += EQcbc; - //mfaba += EQaba; - //mfcba += EQcba; - //mfabc += EQabc; - //mfbcc += EQbcc; - //mfbaa += EQbaa; - //mfbca += EQbca; - //mfbac += EQbac; - //mfbbb += EQbbb; - //mfccc += EQccc; - //mfaac += EQaac; - //mfcac += EQcac; - //mfacc += EQacc; - //mfcca += EQcca; - //mfaaa += EQaaa; - //mfcaa += EQcaa; - //mfaca += EQaca; - //////////////////////////////////////////////////////////////////////////////////// - ////Error diffusion - real fTEMP = mfbbb + EQbbb; - real delta0 = mfbbb - (fTEMP - EQbbb); - delta0 *= c1o4; - mfbbb = fTEMP; - - - fTEMP = mfcbb + EQcbb; - real deltacbb = mfcbb - (fTEMP - EQcbb); - mfcbb = fTEMP; - //mfcbb+=EQcbb; - - fTEMP = mfabb + EQabb; - real deltaabb = mfabb - (fTEMP - EQabb); - mfabb = fTEMP; - //mfabb+=EQabb; - - fTEMP = mfbcb + EQbcb; - real deltabcb = mfbcb - (fTEMP - EQbcb); - mfbcb = fTEMP; - //mfbcb+=EQbcb; - - fTEMP = mfbab + EQbab; - real deltabab = mfbab - (fTEMP - EQbab); - mfbab = fTEMP; - //mfbab+=EQbab; - - fTEMP = mfbbc + EQbbc; - real deltabbc = mfbbc - (fTEMP - EQbbc); - mfbbc = fTEMP; - //mfbbc+=EQbbc; - - fTEMP = mfbba + EQbba; - real deltabba = mfbba - (fTEMP - EQbba); - mfbba = fTEMP; - //mfbba+=EQbba; - - EQccb += (delta0 + c1o2*(deltacbb + deltabcb)); - fTEMP = mfccb + EQccb; - real deltaccb = mfccb - (fTEMP - EQccb); - mfccb = fTEMP; - //mfccb+=EQccb+(delta0+c1o2*(deltacbb+deltabcb)); - - EQaab += (delta0 + c1o2*(deltaabb + deltabab)); - fTEMP = mfaab + EQaab; - real deltaaab = mfaab - (fTEMP - EQaab); - mfaab = fTEMP; - //mfaab+=EQaab+(delta0+c1o2*(deltaabb+deltabab)); - - EQcab += (delta0 + c1o2*(deltacbb + deltabab)); - fTEMP = mfcab + EQcab; - real deltacab = mfcab - (fTEMP - EQcab); - mfcab = fTEMP; - //mfcab+=EQcab+(delta0+c1o2*(deltacbb+deltabab)); - - EQacb += (delta0 + c1o2*(deltaabb + deltabcb)); - fTEMP = mfacb + EQacb; - real deltaacb = mfacb - (fTEMP - EQacb); - mfacb = fTEMP; - //mfacb+=EQacb+(delta0+c1o2*(deltaabb+deltabcb)); - - EQcbc += (delta0 + c1o2*(deltacbb + deltabbc)); - fTEMP = mfcbc + EQcbc; - real deltacbc = mfcbc - (fTEMP - EQcbc); - mfcbc = fTEMP; - //mfcbc+=EQcbc+(delta0+c1o2*(deltacbb+deltabbc)); - - EQaba += (delta0 + c1o2*(deltaabb + deltabba)); - fTEMP = mfaba + EQaba; - real deltaaba = mfaba - (fTEMP - EQaba); - mfaba = fTEMP; - //mfaba+=EQaba+(delta0+c1o2*(deltaabb+deltabba)); - - EQcba += (delta0 + c1o2*(deltacbb + deltabba)); - fTEMP = mfcba + EQcba; - real deltacba = mfcba - (fTEMP - EQcba); - mfcba = fTEMP; - //mfcba+=EQcba+(delta0+c1o2*(deltacbb+deltabba)); - - EQabc += (delta0 + c1o2*(deltaabb + deltabbc)); - fTEMP = mfabc + EQabc; - real deltaabc = mfabc - (fTEMP - EQabc); - mfabc = fTEMP; - //mfabc+=EQabc+(delta0+c1o2*(deltaabb+deltabbc)); - - EQbcc += (delta0 + c1o2*(deltabcb + deltabbc)); - fTEMP = mfbcc + EQbcc; - real deltabcc = mfbcc - (fTEMP - EQbcc); - mfbcc = fTEMP; - //mfbcc+=EQbcc+(delta0+c1o2*(deltabcb+deltabbc)); - - EQbaa += (delta0 + c1o2*(deltabab + deltabba)); - fTEMP = mfbaa + EQbaa; - real deltabaa = mfbaa - (fTEMP - EQbaa); - mfbaa = fTEMP; - //mfbaa+=EQbaa+(delta0+c1o2*(deltabab+deltabba)); - - EQbca += (delta0 + c1o2*(deltabcb + deltabba)); - fTEMP = mfbca + EQbca; - real deltabca = mfbca - (fTEMP - EQbca); - mfbca = fTEMP; - //mfbca+=EQbca+(delta0+c1o2*(deltabcb+deltabba)); - - EQbac += (delta0 + c1o2*(deltabab + deltabbc)); - fTEMP = mfbac + EQbac; - real deltabac = mfbac - (fTEMP - EQbac); - mfbac = fTEMP; - //mfbac+=EQbac+(delta0+c1o2*(deltabab+deltabbc)); - - mfccc += EQccc - (delta0 + c1o4*(deltacbb + deltabcb + deltabbc) - c1o2*(deltabcc + deltacbc + deltaccb)); - mfaac += EQaac - (delta0 + c1o4*(deltaabb + deltabab + deltabbc) - c1o2*(deltabac + deltaabc + deltaaab)); - mfcac += EQcac - (delta0 + c1o4*(deltacbb + deltabab + deltabbc) - c1o2*(deltabac + deltacbc + deltacab)); - mfacc += EQacc - (delta0 + c1o4*(deltaabb + deltabcb + deltabbc) - c1o2*(deltabcc + deltaabc + deltaacb)); - mfcca += EQcca - (delta0 + c1o4*(deltacbb + deltabcb + deltabba) - c1o2*(deltabca + deltacba + deltaccb)); - mfaaa += EQaaa - (delta0 + c1o4*(deltaabb + deltabab + deltabba) - c1o2*(deltabaa + deltaaba + deltaaab)); - mfcaa += EQcaa - (delta0 + c1o4*(deltacbb + deltabab + deltabba) - c1o2*(deltabaa + deltacba + deltacab)); - mfaca += EQaca - (delta0 + c1o4*(deltaabb + deltabcb + deltabba) - c1o2*(deltabca + deltaaba + deltaacb)); - - - - ////////////////////////////////////////////////////////////////////////////////////// - ////back - ////////////////////////////////////////////////////////////////////////////////////// - ////mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - ////////////////////////////////////////////////////////////////////////////////////// - //// Z - Dir - //backwardChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, one); - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimera(mfaba, mfabb, mfabc, vvz, vz2); - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c1o3); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimera(mfbaa, mfbab, mfbac, vvz, vz2); - ///////////b////////////////////////////////////////////////////////////////////////// - //backwardChimera(mfbba, mfbbb, mfbbc, vvz, vz2); - ///////////b////////////////////////////////////////////////////////////////////////// - //backwardChimera(mfbca, mfbcb, mfbcc, vvz, vz2); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c1o3); - ///////////c////////////////////////////////////////////////////////////////////////// - //backwardChimera(mfcba, mfcbb, mfcbc, vvz, vz2); - ///////////c////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c1o9); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - ////mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - ////////////////////////////////////////////////////////////////////////////////////// - //// Y - Dir - //backwardChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c1o6); - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfaab, mfabb, mfacb, vvy, vy2, c2o3); - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c1o6); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimera(mfbaa, mfbba, mfbca, vvz, vz2); - ///////////b////////////////////////////////////////////////////////////////////////// - //backwardChimera(mfbab, mfbbb, mfbcb, vvz, vz2); - ///////////b////////////////////////////////////////////////////////////////////////// - //backwardChimera(mfbac, mfbbc, mfbcc, vvz, vz2); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfcaa, mfcba, mfcca, vvy, vy2, c1o18); - ///////////c////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfcab, mfcbb, mfccb, vvy, vy2, c2o9); - ///////////c////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c1o18); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - ////mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - ////////////////////////////////////////////////////////////////////////////////////// - //// X - Dir - //backwardChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o36); - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfaba, mfbba, mfcba, vvx, vx2, c1o9); - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c1o36); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfaab, mfbab, mfcab, vvx, vx2, c1o9); - /////////////b//////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfabb, mfbbb, mfcbb, vvx, vx2, c4o9); - /////////////b//////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfacb, mfbcb, mfccb, vvx, vx2, c1o9); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfaac, mfbac, mfcac, vvx, vx2, c1o36); - /////////////c//////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfabc, mfbbc, mfcbc, vvx, vx2, c1o9); - /////////////c//////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c1o36); - ////////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////////// - //real drhoPost = - // ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - // (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - // ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - //mfbbb += drho - drhoPost; - //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] - (D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] - (D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] - (D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] - (D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] - (D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] - (D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] - (D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] - (D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] - (D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] - (D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] - (D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] - (D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] - (D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] - (D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] - (D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] - (D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] - (D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] - (D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] - (D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] - (D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] - (D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] - (D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] - (D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] - (D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] - (D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] - (D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] - //////////////////////////////////////////////////////////////////////////////////// - } - } -} -//////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////// -__global__ void Cumulant_One_preconditioned_chim_Comp_SP_27( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<numberOfLBnodes) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if (BC >= GEO_FLUID/*(BC != GEO_SOLID) && (BC != GEO_VOID)*/) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - - - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke - real mfabb = (D.f[DIR_M00])[kw];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn - real mfbab = (D.f[DIR_0M0])[ks];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt - real mfbba = (D.f[DIR_00M])[kb];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse - real mfacb = (D.f[DIR_MP0])[kw];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw - real mfcbc = (D.f[DIR_P0P])[k];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe - real mfabc = (D.f[DIR_M0P])[kw];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw - real mfbcc = (D.f[DIR_0PP])[k];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn - real mfbac = (D.f[DIR_0MP])[ks];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts - real mfbbb = (D.f[DIR_000])[k];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero - real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw - real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse - real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw - real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - - real rho = c1o1 + drho; - //////////////////////////////////////////////////////////////////////////////////// - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) / rho; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) / rho; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - real fx = forces[0] / (pow((double)c2o1, (double)level)); //zero;//0.0032653/(pow(two,level)); //0.000000005;//(two/1600000.0) / 120.0; // - real fy = forces[1] / (pow((double)c2o1, (double)level)); //zero; - real fz = forces[2] / (pow((double)c2o1, (double)level)); //zero; - vvx += fx*c1o2; - vvy += fy*c1o2; - vvz += fz*c1o2; - //////////////////////////////////////////////////////////////////////////////////// - //real omega = omega_in; - //////////////////////////////////////////////////////////////////////////////////// - //fast - //real oMdrho = c1o1; // comp special - //real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - //real wadjust; - //real qudricLimitP = c1o100;// * 0.0001f; - //real qudricLimitM = c1o100;// * 0.0001f; - //real qudricLimitD = c1o100;// * 0.001f; - //real s9 = minusomega; - //test - //s9 = 0.; - - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real EQcbb = c0o1; - real EQabb = c0o1; - real EQbcb = c0o1; - real EQbab = c0o1; - real EQbbc = c0o1; - real EQbba = c0o1; - real EQccb = c0o1; - real EQaab = c0o1; - real EQcab = c0o1; - real EQacb = c0o1; - real EQcbc = c0o1; - real EQaba = c0o1; - real EQcba = c0o1; - real EQabc = c0o1; - real EQbcc = c0o1; - real EQbaa = c0o1; - real EQbca = c0o1; - real EQbac = c0o1; - real EQbbb = c0o1; - real EQccc = drho * c1o27; - real EQaac = drho * c1o3; - real EQcac = drho * c1o9; - real EQacc = drho * c1o9; - real EQcca = drho * c1o9; - real EQaaa = drho; - real EQcaa = drho * c1o3; - real EQaca = drho * c1o3; - //////////////////////////////////////////////////////////////////////////////////// - vf::lbm::backwardChimeraWithK(EQaaa, EQaab, EQaac, vvz, vz2, c1o1); - vf::lbm::backwardChimeraWithK(EQaca, EQacb, EQacc, vvz, vz2, c1o3); - /////////////////////////////////////////////////////////// - EQcaa = EQaca; EQcab = EQacb; EQcac = EQacc; - /////////////////////////////////////////////////////////// - vf::lbm::backwardChimeraWithK(EQcca, EQccb, EQccc, vvz, vz2, c1o9); - - vf::lbm::backwardChimeraWithK(EQaaa, EQaba, EQaca, vvy, vy2, c1o6); - vf::lbm::backwardChimeraWithK(EQaab, EQabb, EQacb, vvy, vy2, c2o3); - vf::lbm::backwardChimeraWithK(EQaac, EQabc, EQacc, vvy, vy2, c1o6); - vf::lbm::backwardChimeraWithK(EQcaa, EQcba, EQcca, vvy, vy2, c1o18); - vf::lbm::backwardChimeraWithK(EQcab, EQcbb, EQccb, vvy, vy2, c2o9); - vf::lbm::backwardChimeraWithK(EQcac, EQcbc, EQccc, vvy, vy2, c1o18); - - vf::lbm::backwardChimeraWithK(EQaaa, EQbaa, EQcaa, vvx, vx2, c1o36); - vf::lbm::backwardChimeraWithK(EQaab, EQbab, EQcab, vvx, vx2, c1o9); - vf::lbm::backwardChimeraWithK(EQaac, EQbac, EQcac, vvx, vx2, c1o36); - vf::lbm::backwardChimeraWithK(EQaba, EQbba, EQcba, vvx, vx2, c1o9); - vf::lbm::backwardChimeraWithK(EQabb, EQbbb, EQcbb, vvx, vx2, c4o9); - vf::lbm::backwardChimeraWithK(EQabc, EQbbc, EQcbc, vvx, vx2, c1o9); - vf::lbm::backwardChimeraWithK(EQaca, EQbca, EQcca, vvx, vx2, c1o36); - vf::lbm::backwardChimeraWithK(EQacb, EQbcb, EQccb, vvx, vx2, c1o9); - vf::lbm::backwardChimeraWithK(EQacc, EQbcc, EQccc, vvx, vx2, c1o36); - - //////////////////////////////////////////////////////////////////////////////////// - //Pre-condition - mfcbb -= EQcbb; - mfabb -= EQabb; - mfbcb -= EQbcb; - mfbab -= EQbab; - mfbbc -= EQbbc; - mfbba -= EQbba; - mfccb -= EQccb; - mfaab -= EQaab; - mfcab -= EQcab; - mfacb -= EQacb; - mfcbc -= EQcbc; - mfaba -= EQaba; - mfcba -= EQcba; - mfabc -= EQabc; - mfbcc -= EQbcc; - mfbaa -= EQbaa; - mfbca -= EQbca; - mfbac -= EQbac; - mfbbb -= EQbbb; - mfccc -= EQccc; - mfaac -= EQaac; - mfcac -= EQcac; - mfacc -= EQacc; - mfcca -= EQcca; - mfaaa -= EQaaa; - mfcaa -= EQcaa; - mfaca -= EQaca; - - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - vf::lbm::forwardChimera(mfaaa, mfaab, mfaac, vvz, vz2); - vf::lbm::forwardChimera(mfaba, mfabb, mfabc, vvz, vz2); - vf::lbm::forwardChimera(mfaca, mfacb, mfacc, vvz, vz2); - vf::lbm::forwardChimera(mfbaa, mfbab, mfbac, vvz, vz2); - vf::lbm::forwardChimera(mfbba, mfbbb, mfbbc, vvz, vz2); - vf::lbm::forwardChimera(mfbca, mfbcb, mfbcc, vvz, vz2); - vf::lbm::forwardChimera(mfcaa, mfcab, mfcac, vvz, vz2); - vf::lbm::forwardChimera(mfcba, mfcbb, mfcbc, vvz, vz2); - vf::lbm::forwardChimera(mfcca, mfccb, mfccc, vvz, vz2); - - vf::lbm::forwardChimera(mfaaa, mfaba, mfaca, vvy, vy2); - vf::lbm::forwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - vf::lbm::forwardChimera(mfaac, mfabc, mfacc, vvy, vy2); - vf::lbm::forwardChimera(mfbaa, mfbba, mfbca, vvy, vy2); - vf::lbm::forwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - vf::lbm::forwardChimera(mfbac, mfbbc, mfbcc, vvy, vy2); - vf::lbm::forwardChimera(mfcaa, mfcba, mfcca, vvy, vy2); - vf::lbm::forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - vf::lbm::forwardChimera(mfcac, mfcbc, mfccc, vvy, vy2); - - vf::lbm::forwardChimera(mfaaa, mfbaa, mfcaa, vvx, vx2); - vf::lbm::forwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - vf::lbm::forwardChimera(mfaac, mfbac, mfcac, vvx, vx2); - vf::lbm::forwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - vf::lbm::forwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - vf::lbm::forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - vf::lbm::forwardChimera(mfaca, mfbca, mfcca, vvx, vx2); - vf::lbm::forwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - vf::lbm::forwardChimera(mfacc, mfbcc, mfccc, vvx, vx2); - - ////////////////////////////////////////////////////////////////////////////////////// - ////Hin - ////////////////////////////////////////////////////////////////////////////////////// - //// mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - ////////////////////////////////////////////////////////////////////////////////////// - //// Z - Dir - //forwardChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, c1o36); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, c1o9); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c1o36); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, c1o9); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, c4o9); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, c1o9); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c1o36); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, c1o9); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c1o36); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //// mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - ////////////////////////////////////////////////////////////////////////////////////// - //// Y - Dir - //forwardChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c1o6); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c1o18); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfbaa, mfbba, mfbca, vvy, vy2, c2o3); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfbac, mfbbc, mfbcc, vvy, vy2, c2o9); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfcaa, mfcba, mfcca, vvy, vy2, c1o6); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c1o18); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //// mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - ////////////////////////////////////////////////////////////////////////////////////// - //// X - Dir - //forwardChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, one); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c1o3); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfaac, mfbac, mfcac, vvx, vx2, c1o3); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - ////////////////////////////////////////////////////////////////////////////////////// - //forwardChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c1o9); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; //omega; // one; //set the bulk viscosity one is high / two is very low and zero is (too) high - - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - real OxyyPxzz = c1o1; - real OxyyMxzz = c1o1; - //real Oxyz = c1o1; - //////////////////////////////////////////////////////////// - //4. - ////////////////////////////// - real O4 = c1o1; - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = c1o1; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = c1o1; - //////////////////////////////////////////////////////////// - - - //central moments to cumulants - //4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - - - - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - { - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - } - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - ////////////////////////////////////////////////////////////////////////// - mfbbb += OxyyMxzz * (-mfbbb); - mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - vf::lbm::backwardChimera(mfaaa, mfaab, mfaac, vvz, vz2); - vf::lbm::backwardChimera(mfaba, mfabb, mfabc, vvz, vz2); - vf::lbm::backwardChimera(mfaca, mfacb, mfacc, vvz, vz2); - vf::lbm::backwardChimera(mfbaa, mfbab, mfbac, vvz, vz2); - vf::lbm::backwardChimera(mfbba, mfbbb, mfbbc, vvz, vz2); - vf::lbm::backwardChimera(mfbca, mfbcb, mfbcc, vvz, vz2); - vf::lbm::backwardChimera(mfcaa, mfcab, mfcac, vvz, vz2); - vf::lbm::backwardChimera(mfcba, mfcbb, mfcbc, vvz, vz2); - vf::lbm::backwardChimera(mfcca, mfccb, mfccc, vvz, vz2); - - vf::lbm::backwardChimera(mfaaa, mfaba, mfaca, vvy, vy2); - vf::lbm::backwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - vf::lbm::backwardChimera(mfaac, mfabc, mfacc, vvy, vy2); - vf::lbm::backwardChimera(mfbaa, mfbba, mfbca, vvy, vy2); - vf::lbm::backwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - vf::lbm::backwardChimera(mfbac, mfbbc, mfbcc, vvy, vy2); - vf::lbm::backwardChimera(mfcaa, mfcba, mfcca, vvy, vy2); - vf::lbm::backwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - vf::lbm::backwardChimera(mfcac, mfcbc, mfccc, vvy, vy2); - - vf::lbm::backwardChimera(mfaaa, mfbaa, mfcaa, vvx, vx2); - vf::lbm::backwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - vf::lbm::backwardChimera(mfaac, mfbac, mfcac, vvx, vx2); - vf::lbm::backwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - vf::lbm::backwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - vf::lbm::backwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - vf::lbm::backwardChimera(mfaca, mfbca, mfcca, vvx, vx2); - vf::lbm::backwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - vf::lbm::backwardChimera(mfacc, mfbcc, mfccc, vvx, vx2); - - //////////////////////////////////////////////////////////////////////////////////// - mfcbb+=EQcbb; - mfabb+=EQabb; - mfbcb+=EQbcb; - mfbab+=EQbab; - mfbbc+=EQbbc; - mfbba+=EQbba; - mfccb+=EQccb; - mfaab+=EQaab; - mfcab+=EQcab; - mfacb+=EQacb; - mfcbc+=EQcbc; - mfaba+=EQaba; - mfcba+=EQcba; - mfabc+=EQabc; - mfbcc+=EQbcc; - mfbaa+=EQbaa; - mfbca+=EQbca; - mfbac+=EQbac; - mfbbb+=EQbbb; - mfccc+=EQccc; - mfaac+=EQaac; - mfcac+=EQcac; - mfacc+=EQacc; - mfcca+=EQcca; - mfaaa+=EQaaa; - mfcaa+=EQcaa; - mfaca+=EQaca; - - - ////////////////////////////////////////////////////////////////////////////////////// - ////back - ////////////////////////////////////////////////////////////////////////////////////// - ////mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - ////////////////////////////////////////////////////////////////////////////////////// - //// Z - Dir - //backwardChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, one); - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimera(mfaba, mfabb, mfabc, vvz, vz2); - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c1o3); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimera(mfbaa, mfbab, mfbac, vvz, vz2); - ///////////b////////////////////////////////////////////////////////////////////////// - //backwardChimera(mfbba, mfbbb, mfbbc, vvz, vz2); - ///////////b////////////////////////////////////////////////////////////////////////// - //backwardChimera(mfbca, mfbcb, mfbcc, vvz, vz2); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c1o3); - ///////////c////////////////////////////////////////////////////////////////////////// - //backwardChimera(mfcba, mfcbb, mfcbc, vvz, vz2); - ///////////c////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c1o9); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - ////mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - ////////////////////////////////////////////////////////////////////////////////////// - //// Y - Dir - //backwardChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c1o6); - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfaab, mfabb, mfacb, vvy, vy2, c2o3); - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c1o6); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimera(mfbaa, mfbba, mfbca, vvz, vz2); - ///////////b////////////////////////////////////////////////////////////////////////// - //backwardChimera(mfbab, mfbbb, mfbcb, vvz, vz2); - ///////////b////////////////////////////////////////////////////////////////////////// - //backwardChimera(mfbac, mfbbc, mfbcc, vvz, vz2); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfcaa, mfcba, mfcca, vvy, vy2, c1o18); - ///////////c////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfcab, mfcbb, mfccb, vvy, vy2, c2o9); - ///////////c////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c1o18); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - ////mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - ////////////////////////////////////////////////////////////////////////////////////// - //// X - Dir - //backwardChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o36); - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfaba, mfbba, mfcba, vvx, vx2, c1o9); - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c1o36); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfaab, mfbab, mfcab, vvx, vx2, c1o9); - /////////////b//////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfabb, mfbbb, mfcbb, vvx, vx2, c4o9); - /////////////b//////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfacb, mfbcb, mfccb, vvx, vx2, c1o9); - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfaac, mfbac, mfcac, vvx, vx2, c1o36); - /////////////c//////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfabc, mfbbc, mfcbc, vvx, vx2, c1o9); - /////////////c//////////////////////////////////////////////////////////////////////// - //backwardChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c1o36); - ////////////////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////////////////// - real drhoPost = - ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - mfbbb += drho - drhoPost; - //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] - (D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] - (D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] - (D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] - (D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] - (D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] - (D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] - (D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] - (D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] - (D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] - (D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] - (D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] - (D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] - (D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] - (D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] - (D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] - (D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] - (D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] - (D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] - (D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] - (D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] - (D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] - (D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] - (D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] - (D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] - (D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] - (D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] - //////////////////////////////////////////////////////////////////////////////////// - } - } -} -//////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////// -__global__ void Cumulant_One_chim_Comp_SP_27( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<numberOfLBnodes) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if (BC >= GEO_FLUID/*(BC != GEO_SOLID) && (BC != GEO_VOID)*/) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int kw = neighborX[k]; - unsigned int ks = neighborY[k]; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kbw = neighborZ[kw]; - unsigned int kbs = neighborZ[ks]; - unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k ]; - real mfabb = (D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k ]; - real mfbab = (D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k ]; - real mfbba = (D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k ]; - real mfaab = (D.f[DIR_MM0])[ksw ]; - real mfcab = (D.f[DIR_PM0])[ks ]; - real mfacb = (D.f[DIR_MP0])[kw ]; - real mfcbc = (D.f[DIR_P0P])[k ]; - real mfaba = (D.f[DIR_M0M])[kbw ]; - real mfcba = (D.f[DIR_P0M])[kb ]; - real mfabc = (D.f[DIR_M0P])[kw ]; - real mfbcc = (D.f[DIR_0PP])[k ]; - real mfbaa = (D.f[DIR_0MM])[kbs ]; - real mfbca = (D.f[DIR_0PM])[kb ]; - real mfbac = (D.f[DIR_0MP])[ks ]; - real mfbbb = (D.f[DIR_000])[k ]; - real mfccc = (D.f[DIR_PPP])[k ]; - real mfaac = (D.f[DIR_MMP])[ksw ]; - real mfcac = (D.f[DIR_PMP])[ks ]; - real mfacc = (D.f[DIR_MPP])[kw ]; - real mfcca = (D.f[DIR_PPM])[kb ]; - real mfaaa = (D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs ]; - real mfaca = (D.f[DIR_MPM])[kbw ]; - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - - real rho = c1o1 + drho; - real OOrho = c1o1 / rho; - //////////////////////////////////////////////////////////////////////////////////// - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) * OOrho; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) * OOrho; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) * OOrho; - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - real fx = forces[0] / (pow((double)c2o1, (double)level)); //zero;//0.0032653/(pow(two,level)); //0.000000005;//(two/1600000.0) / 120.0; // - real fy = forces[1] / (pow((double)c2o1, (double)level)); //zero; - real fz = forces[2] / (pow((double)c2o1, (double)level)); //zero; - vvx += fx*c1o2; - vvy += fy*c1o2; - vvz += fz*c1o2; - //////////////////////////////////////////////////////////////////////////////////// - //real omega = omega_in; - //////////////////////////////////////////////////////////////////////////////////// - //fast - //real oMdrho = c1o1; // comp special - //real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - //real wadjust; - //real qudricLimitP = c1o100;// * 0.0001f; - //real qudricLimitM = c1o100;// * 0.0001f; - //real qudricLimitD = c1o100;// * 0.001f; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - vf::lbm::forwardInverseChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, 36.0f, c1o36); - vf::lbm::forwardInverseChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, 9.0f , c1o9 ); - vf::lbm::forwardInverseChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, 36.0f, c1o36); - vf::lbm::forwardInverseChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, 9.0f , c1o9 ); - vf::lbm::forwardInverseChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, 2.25f, c4o9 ); - vf::lbm::forwardInverseChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, 9.0f , c1o9 ); - vf::lbm::forwardInverseChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, 36.0f, c1o36); - vf::lbm::forwardInverseChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, 9.0f , c1o9 ); - vf::lbm::forwardInverseChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, 36.0f, c1o36); - - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - vf::lbm::forwardInverseChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, 6.0f , c1o6 ); - vf::lbm::forwardChimera( mfaab, mfabb, mfacb, vvy, vy2); - vf::lbm::forwardInverseChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, 18.0f, c1o18); - vf::lbm::forwardInverseChimeraWithK(mfbaa, mfbba, mfbca, vvy, vy2, 1.5f , c2o3 ); - vf::lbm::forwardChimera( mfbab, mfbbb, mfbcb, vvy, vy2); - vf::lbm::forwardInverseChimeraWithK(mfbac, mfbbc, mfbcc, vvy, vy2, 4.5f , c2o9 ); - vf::lbm::forwardInverseChimeraWithK(mfcaa, mfcba, mfcca, vvy, vy2, 6.0f , c1o6 ); - vf::lbm::forwardChimera( mfcab, mfcbb, mfccb, vvy, vy2); - vf::lbm::forwardInverseChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, 18.0f, c1o18); - - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - vf::lbm::forwardInverseChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1); - vf::lbm::forwardChimera( mfaba, mfbba, mfcba, vvx, vx2); - vf::lbm::forwardInverseChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, 3.0f, c1o3); - vf::lbm::forwardChimera( mfaab, mfbab, mfcab, vvx, vx2); - vf::lbm::forwardChimera( mfabb, mfbbb, mfcbb, vvx, vx2); - vf::lbm::forwardChimera( mfacb, mfbcb, mfccb, vvx, vx2); - vf::lbm::forwardInverseChimeraWithK(mfaac, mfbac, mfcac, vvx, vx2, 3.0f, c1o3); - vf::lbm::forwardChimera( mfabc, mfbbc, mfcbc, vvx, vx2); - vf::lbm::forwardInverseChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, 9.0f, c1o9); - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - real OxyyPxzz = c1o1; - real OxyyMxzz = c1o1; - //real Oxyz = c1o1; - //////////////////////////////////////////////////////////// - //4. - ////////////////////////////// - real O4 = c1o1; - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = c1o1; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = c1o1; - //////////////////////////////////////////////////////////// - - - //central moments to cumulants - //4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) * OOrho; - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) * OOrho; - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) * OOrho; - - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) * OOrho - c1o9*(drho * OOrho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) * OOrho - c1o9*(drho * OOrho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) * OOrho - c1o9*(drho * OOrho)); - - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) * OOrho; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) * OOrho; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) * OOrho; - - //6. - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) * OOrho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) * OOrho * OOrho - - c1o3 * (mfacc + mfcac + mfcca) * OOrho - - c1o9 * (mfcaa + mfaca + mfaac) * OOrho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) * OOrho * OOrho * c2o3 - + c1o27*((drho * drho - drho) * OOrho * OOrho )); - - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - { - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - } - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - ////////////////////////////////////////////////////////////////////////// - mfbbb += OxyyMxzz * (-mfbbb); - mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + c1o3*((c3o1*mfcaa + c1o1) * mfabb + c6o1 * mfbba * mfbab) * OOrho; - mfbcb = CUMbcb + c1o3*((c3o1*mfaca + c1o1) * mfbab + c6o1 * mfbba * mfabb) * OOrho; - mfbbc = CUMbbc + c1o3*((c3o1*mfaac + c1o1) * mfbba + c6o1 * mfbab * mfabb) * OOrho; - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba)*c9o1 + c3o1 * (mfcaa + mfaca)) * OOrho - (drho * OOrho))*c1o9; - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab)*c9o1 + c3o1 * (mfcaa + mfaac)) * OOrho - (drho * OOrho))*c1o9; - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb)*c9o1 + c3o1 * (mfaac + mfaca)) * OOrho - (drho * OOrho))*c1o9; - - //5. - mfbcc = CUMbcc + c1o3 *(c3o1*(mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + (mfbca + mfbac)) * OOrho; - mfcbc = CUMcbc + c1o3 *(c3o1*(mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + (mfcba + mfabc)) * OOrho; - mfccb = CUMccb + c1o3 *(c3o1*(mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + (mfacb + mfcab)) * OOrho; - - //6. - mfccc = - CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) * OOrho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) * OOrho * OOrho - - c1o3 * (mfacc + mfcac + mfcca) * OOrho - - c1o9 * (mfcaa + mfaca + mfaac) * OOrho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) * OOrho * OOrho * c2o3 - + c1o27*((drho * drho - drho) * OOrho * OOrho )); - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - vf::lbm::backwardInverseChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1); - vf::lbm::backwardChimera( mfaba, mfbba, mfcba, vvx, vx2); - vf::lbm::backwardInverseChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, 3.0f, c1o3); - vf::lbm::backwardChimera( mfaab, mfbab, mfcab, vvx, vx2); - vf::lbm::backwardChimera( mfabb, mfbbb, mfcbb, vvx, vx2); - vf::lbm::backwardChimera( mfacb, mfbcb, mfccb, vvx, vx2); - vf::lbm::backwardInverseChimeraWithK(mfaac, mfbac, mfcac, vvx, vx2, 3.0f, c1o3); - vf::lbm::backwardChimera( mfabc, mfbbc, mfcbc, vvx, vx2); - vf::lbm::backwardInverseChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, 9.0f, c1o9); - - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - vf::lbm::backwardInverseChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, 6.0f , c1o6 ); - vf::lbm::backwardChimera( mfaab, mfabb, mfacb, vvy, vy2); - vf::lbm::backwardInverseChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, 18.0f, c1o18); - vf::lbm::backwardInverseChimeraWithK(mfbaa, mfbba, mfbca, vvy, vy2, 1.5f , c2o3 ); - vf::lbm::backwardChimera( mfbab, mfbbb, mfbcb, vvy, vy2); - vf::lbm::backwardInverseChimeraWithK(mfbac, mfbbc, mfbcc, vvy, vy2, 4.5f , c2o9 ); - vf::lbm::backwardInverseChimeraWithK(mfcaa, mfcba, mfcca, vvy, vy2, 6.0f , c1o6 ); - vf::lbm::backwardChimera( mfcab, mfcbb, mfccb, vvy, vy2); - vf::lbm::backwardInverseChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, 18.0f, c1o18); - - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - vf::lbm::backwardInverseChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, 36.0f, c1o36); - vf::lbm::backwardInverseChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, 9.0f , c1o9 ); - vf::lbm::backwardInverseChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, 36.0f, c1o36); - vf::lbm::backwardInverseChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, 9.0f , c1o9 ); - vf::lbm::backwardInverseChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, 2.25f, c4o9 ); - vf::lbm::backwardInverseChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, 9.0f , c1o9 ); - vf::lbm::backwardInverseChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, 36.0f, c1o36); - vf::lbm::backwardInverseChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, 9.0f , c1o9 ); - vf::lbm::backwardInverseChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, 36.0f, c1o36); - - ////////////////////////////////////////////////////////////////////////////////////// - real drhoPost = - ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - mfbbb += drho - drhoPost; - //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k ] = mfabb; - (D.f[DIR_M00])[kw ] = mfcbb; - (D.f[DIR_0P0])[k ] = mfbab; - (D.f[DIR_0M0])[ks ] = mfbcb; - (D.f[DIR_00P])[k ] = mfbba; - (D.f[DIR_00M])[kb ] = mfbbc; - (D.f[DIR_PP0])[k ] = mfaab; - (D.f[DIR_MM0])[ksw ] = mfccb; - (D.f[DIR_PM0])[ks ] = mfacb; - (D.f[DIR_MP0])[kw ] = mfcab; - (D.f[DIR_P0P])[k ] = mfaba; - (D.f[DIR_M0M])[kbw ] = mfcbc; - (D.f[DIR_P0M])[kb ] = mfabc; - (D.f[DIR_M0P])[kw ] = mfcba; - (D.f[DIR_0PP])[k ] = mfbaa; - (D.f[DIR_0MM])[kbs ] = mfbcc; - (D.f[DIR_0PM])[kb ] = mfbac; - (D.f[DIR_0MP])[ks ] = mfbca; - (D.f[DIR_000])[k ] = mfbbb; - (D.f[DIR_PPP])[k ] = mfaaa; - (D.f[DIR_PMP])[ks ] = mfaca; - (D.f[DIR_PPM])[kb ] = mfaac; - (D.f[DIR_PMM])[kbs ] = mfacc; - (D.f[DIR_MPP])[kw ] = mfcaa; - (D.f[DIR_MMP])[ksw ] = mfcca; - (D.f[DIR_MPM])[kbw ] = mfcac; - (D.f[DIR_MMM])[kbsw] = mfccc; - } - } -} -//////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gpu/VirtualFluids_GPU/GPU/Cumulant_F3_27.cu b/src/gpu/VirtualFluids_GPU/GPU/Cumulant_F3_27.cu deleted file mode 100644 index 9e0275e7be38b8b56cf71cfa0b8299dc1b49106c..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/GPU/Cumulant_F3_27.cu +++ /dev/null @@ -1,3093 +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; - -#include "math.h" - -///////////////////////////////////////////////////////////////////////////////// -__global__ void LB_PostProcessor_F3_2018_Fehlberg(real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* rhoOut, - real* vxOut, - real* vyOut, - real* vzOut, - real* DDStart, - real* G6, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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 < numberOfLBnodes) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if ((BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - - Distributions6 G; - if (EvenOrOdd == true) - { - G.g[DIR_P00] = &G6[DIR_P00 * numberOfLBnodes]; - G.g[DIR_M00] = &G6[DIR_M00 * numberOfLBnodes]; - G.g[DIR_0P0] = &G6[DIR_0P0 * numberOfLBnodes]; - G.g[DIR_0M0] = &G6[DIR_0M0 * numberOfLBnodes]; - G.g[DIR_00P] = &G6[DIR_00P * numberOfLBnodes]; - G.g[DIR_00M] = &G6[DIR_00M * numberOfLBnodes]; - } - else - { - G.g[DIR_M00] = &G6[DIR_P00 * numberOfLBnodes]; - G.g[DIR_P00] = &G6[DIR_M00 * numberOfLBnodes]; - G.g[DIR_0M0] = &G6[DIR_0P0 * numberOfLBnodes]; - G.g[DIR_0P0] = &G6[DIR_0M0 * numberOfLBnodes]; - G.g[DIR_00M] = &G6[DIR_00P * numberOfLBnodes]; - G.g[DIR_00P] = &G6[DIR_00M * numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mgcbb = (G.g[DIR_P00])[k]; - real mgabb = (G.g[DIR_M00])[kw]; - real mgbcb = (G.g[DIR_0P0])[k]; - real mgbab = (G.g[DIR_0M0])[ks]; - real mgbbc = (G.g[DIR_00P])[k]; - real mgbba = (G.g[DIR_00M])[kb]; - real dxuxdxux = c1o2 * (-mgcbb + mgabb); - real dyuydyuy = c1o2 * (-mgbcb + mgbab); - real dzuzdzuz = c1o2 * (-mgbbc + mgbba); - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k]; - real mfabb = (D.f[DIR_M00])[kw]; - real mfbcb = (D.f[DIR_0P0])[k]; - real mfbab = (D.f[DIR_0M0])[ks]; - real mfbbc = (D.f[DIR_00P])[k]; - real mfbba = (D.f[DIR_00M])[kb]; - real mfccb = (D.f[DIR_PP0])[k]; - real mfaab = (D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks]; - real mfacb = (D.f[DIR_MP0])[kw]; - real mfcbc = (D.f[DIR_P0P])[k]; - real mfaba = (D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb]; - real mfabc = (D.f[DIR_M0P])[kw]; - real mfbcc = (D.f[DIR_0PP])[k]; - real mfbaa = (D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb]; - real mfbac = (D.f[DIR_0MP])[ks]; - real mfbbb = (D.f[DIR_000])[k]; - real mfccc = (D.f[DIR_PPP])[k]; - real mfaac = (D.f[DIR_MMP])[ksw]; - real mfcac = (D.f[DIR_PMP])[ks]; - real mfacc = (D.f[DIR_MPP])[kw]; - real mfcca = (D.f[DIR_PPM])[kb]; - real mfaaa = (D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs]; - real mfaca = (D.f[DIR_MPM])[kbw]; - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - - real rho = c1o1 + drho; - //////////////////////////////////////////////////////////////////////////////////// - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) / rho; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) / rho; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - real fx = forces[0] / (pow((double)c2o1, (double)level)); //zero;//0.0032653/(pow(two,level)); //0.000000005;//(two/1600000.0) / 120.0; // - real fy = forces[1] / (pow((double)c2o1, (double)level)); // zero; - real fz = forces[2] / (pow((double)c2o1, (double)level)); // zero; - vvx += fx; - vvy += fy; - vvz += fz; - //////////////////////////////////////////////////////////////////////////////////// - real oMdrho = c1o1; // comp special - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - //real wadjust; - //real qudricLimitP = 0.01f;// * 0.0001f; - //real qudricLimitM = 0.01f;// * 0.0001f; - //real qudricLimitD = 0.01f;// * 0.001f; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; //set the bulk viscosity one is high / two is very low and zero is (too) high ... (also called omega 2) - - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - //real OxyyPxzz = c8o1*(-c2o1 + omega)*(c1o1 + c2o1*omega) / (-c8o1 - c14o1*omega + c7o1*omega*omega);//one; - //real OxyyMxzz = c8o1*(-c2o1 + omega)*(-c7o1 + c4o1*omega) / (c56o1 - c50o1*omega + c9o1*omega*omega);//one; - //real Oxyz = c24o1*(-c2o1 + omega)*(-c2o1 - c7o1*omega + c3o1*omega*omega) / (c48o1 + c152o1*omega - c130o1*omega*omega + c29o1*omega*omega*omega);//one; - //////////////////////////////////////////////////////////// - //central moments to cumulants - //4. - //real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - //real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - //real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - //real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - //real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - //real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - //real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - //real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - //real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - //real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - // - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - // - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - // - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - // + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - // + c2o1 * (mfcaa * mfaca * mfaac) - // + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - // - c1o3 * (mfacc + mfcac + mfcca) / rho - // - c1o9 * (mfcaa + mfaca + mfaac) / rho - // + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - // + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - // + c1o27*((drho * drho - drho) / (rho*rho))); - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - //////////////////////////////////////////////////////////////////////////// - //real Dxy = -c3o1*omega*mfbba; - //real Dxz = -c3o1*omega*mfbab; - //real Dyz = -c3o1*omega*mfabb; - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - mgabb = vvx*dxux; - mgbab = vvy*dyuy; - mgbba = vvz*dzuz; - - mgcbb = vvx*dxux; - mgbcb = vvy*dyuy; - mgbbc = vvz*dzuz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz) - + (c6o1 - c3o1 * (omega + OxxPyyPzz) + omega * OxxPyyPzz) / (c3o1 * omega) * - (dxuxdxux + dyuydyuy + dzuzdzuz); - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy) - + omega * (c2o1*(c1o1 / omega - c1o2) * (c1o1 / omega - c1o2) - c1o6) * (dxuxdxux - dyuydyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz) - + omega * (c2o1*(c1o1 / omega - c1o2) * (c1o1 / omega - c1o2) - c1o6) *(dxuxdxux - dzuzdzuz); - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Fehlberg - rhoOut[k] = (fabs(dxuxdxux) + fabs(dyuydyuy) + fabs(dzuzdzuz)); - vxOut[k] = (fabs(mxxyMyzz) + fabs(mxxzMyyz) + fabs(mxyyMxzz)); - vyOut[k] = (fabs(mxxyPyzz) + fabs(mxxzPyyz) + fabs(mxyyPxzz)); - vzOut[k] = (fabs(mfbbb)); - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////no correction - ////mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - ////mxxMyy += -(-omega) * (-mxxMyy); - ////mxxMzz += -(-omega) * (-mxxMzz); - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //mfabb += omega * (-mfabb); - //mfbab += omega * (-mfbab); - //mfbba += omega * (-mfbba); - //////////////////////////////////////////////////////////////////////////// - - //// linear combinations back - //mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - //mfaca = c1o3 * (-two* mxxMyy + mxxMzz + mxxPyyPzz); - //mfaac = c1o3 * (mxxMyy - two* mxxMzz + mxxPyyPzz); - - - ////relax - //////////////////////////////////////////////////////////////////////////// - ////das ist der limiter - //wadjust = Oxyz + (one - Oxyz)*abs(mfbbb) / (abs(mfbbb) + qudricLimitD); - //mfbbb += wadjust * (-mfbbb); - //wadjust = OxyyPxzz + (one - OxyyPxzz)*abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimitP); - //mxxyPyzz += wadjust * (-mxxyPyzz); - //wadjust = OxyyMxzz + (one - OxyyMxzz)*abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimitM); - //mxxyMyzz += wadjust * (-mxxyMyzz); - //wadjust = OxyyPxzz + (one - OxyyPxzz)*abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimitP); - //mxxzPyyz += wadjust * (-mxxzPyyz); - //wadjust = OxyyMxzz + (one - OxyyMxzz)*abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimitM); - //mxxzMyyz += wadjust * (-mxxzMyyz); - //wadjust = OxyyPxzz + (one - OxyyPxzz)*abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimitP); - //mxyyPxzz += wadjust * (-mxyyPxzz); - //wadjust = OxyyMxzz + (one - OxyyMxzz)*abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimitM); - //mxyyMxzz += wadjust * (-mxyyMxzz); - //////////////////////////////////////////////////////////////////////////// - ////ohne limiter - ////mfbbb += OxyyMxzz * (-mfbbb); - ////mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - ////mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - ////mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - ////mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - ////mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - ////mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - //////////////////////////////////////////////////////////////////////////// - - //// linear combinations back - //mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - //mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - //mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - //mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - //mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - //mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - ////4. - //////////////////////////////////////////////////////////////////////////// - ////mit limiter - //// wadjust = O4+(one-O4)*abs(CUMacc)/(abs(CUMacc)+qudricLimit); - ////CUMacc += wadjust * (-CUMacc); - //// wadjust = O4+(one-O4)*abs(CUMcac)/(abs(CUMcac)+qudricLimit); - ////CUMcac += wadjust * (-CUMcac); - //// wadjust = O4+(one-O4)*abs(CUMcca)/(abs(CUMcca)+qudricLimit); - ////CUMcca += wadjust * (-CUMcca); - - //// wadjust = O4+(one-O4)*abs(CUMbbc)/(abs(CUMbbc)+qudricLimit); - ////CUMbbc += wadjust * (-CUMbbc); - //// wadjust = O4+(one-O4)*abs(CUMbcb)/(abs(CUMbcb)+qudricLimit); - ////CUMbcb += wadjust * (-CUMbcb); - //// wadjust = O4+(one-O4)*abs(CUMcbb)/(abs(CUMcbb)+qudricLimit); - ////CUMcbb += wadjust * (-CUMcbb); - //////////////////////////////////////////////////////////////////////////// - ////ohne limiter - ////CUMacc += O4 * (-CUMacc); - ////CUMcac += O4 * (-CUMcac); - ////CUMcca += O4 * (-CUMcca); - ////CUMbbc += O4 * (-CUMbbc); - ////CUMbcb += O4 * (-CUMbcb); - ////CUMcbb += O4 * (-CUMcbb); - //CUMacc = -O4*(one / omega - c1o2)*(dyuy + dzuz)*c2o3 *(four + two*omega - three*omega*omega) / (two - seven*omega + five*omega*omega) + (one - O4) * (CUMacc); - //CUMcac = -O4*(one / omega - c1o2)*(dxux + dzuz)*c2o3 *(four + two*omega - three*omega*omega) / (two - seven*omega + five*omega*omega) + (one - O4) * (CUMcac); - //CUMcca = -O4*(one / omega - c1o2)*(dyuy + dxux)*c2o3 *(four + two*omega - three*omega*omega) / (two - seven*omega + five*omega*omega) + (one - O4) * (CUMcca); - //CUMbbc = -O4*(one / omega - c1o2)*Dxy*c1o3 *(four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega) + (one - O4) * (CUMbbc); - //CUMbcb = -O4*(one / omega - c1o2)*Dxz*c1o3 *(four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega) + (one - O4) * (CUMbcb); - //CUMcbb = -O4*(one / omega - c1o2)*Dyz*c1o3 *(four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega) + (one - O4) * (CUMcbb); - //////////////////////////////////////////////////////////////////////////// - - - ////5. - //CUMbcc += O5 * (-CUMbcc); - //CUMcbc += O5 * (-CUMcbc); - //CUMccb += O5 * (-CUMccb); - - ////6. - //CUMccc += O6 * (-CUMccc); - - - - ////back cumulants to central moments - ////4. - //mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + two * mfbba * mfbab) / rho; - //mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + two * mfbba * mfabb) / rho; - //mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + two * mfbab * mfabb) / rho; - - //mfcca = CUMcca + (((mfcaa * mfaca + two * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - //mfcac = CUMcac + (((mfcaa * mfaac + two * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - //mfacc = CUMacc + (((mfaac * mfaca + two * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - ////5. - //mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + four * mfabb * mfbbb + two * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - //mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + four * mfbab * mfbbb + two * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - //mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + four * mfbba * mfbbb + two * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - ////6. - - //mfccc = CUMccc - ((-four * mfbbb * mfbbb - // - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - // - four * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - // - two * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - // + (four * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - // + two * (mfcaa * mfaca * mfaac) - // + sixteen * mfbba * mfbab * mfabb) / (rho * rho) - // - c1o3 * (mfacc + mfcac + mfcca) / rho - // - c1o9 * (mfcaa + mfaca + mfaac) / rho - // + (two * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - // + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - // + c1o27*((drho * drho - drho) / (rho*rho))); - ////////////////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////////////////// - ////the force be with you - //mfbaa = -mfbaa; - //mfaba = -mfaba; - //mfaab = -mfaab; - ////////////////////////////////////////////////////////////////////////////////////// - - - ////////////////////////////////////////////////////////////////////////////////////// - ////back - ////////////////////////////////////////////////////////////////////////////////////// - ////mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - ////////////////////////////////////////////////////////////////////////////////////// - //// Z - Dir - //m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + one* oMdrho) * (vz2 - vvz) * c1o2; - //m1 = -mfaac - two* mfaab * vvz + mfaaa * (one - vz2) - one* oMdrho * vz2; - //m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + one* oMdrho) * (vz2 + vvz) * c1o2; - //mfaaa = m0; - //mfaab = m1; - //mfaac = m2; - ////////////////////////////////////////////////////////////////////////////////////// - //m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - //m1 = -mfabc - two* mfabb * vvz + mfaba * (one - vz2); - //m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - //mfaba = m0; - //mfabb = m1; - //mfabc = m2; - ////////////////////////////////////////////////////////////////////////////////////// - //m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - //m1 = -mfacc - two* mfacb * vvz + mfaca * (one - vz2) - c1o3 * oMdrho * vz2; - //m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - //mfaca = m0; - //mfacb = m1; - //mfacc = m2; - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - //m1 = -mfbac - two* mfbab * vvz + mfbaa * (one - vz2); - //m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - //mfbaa = m0; - //mfbab = m1; - //mfbac = m2; - ///////////b////////////////////////////////////////////////////////////////////////// - //m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - //m1 = -mfbbc - two* mfbbb * vvz + mfbba * (one - vz2); - //m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - //mfbba = m0; - //mfbbb = m1; - //mfbbc = m2; - ///////////b////////////////////////////////////////////////////////////////////////// - //m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - //m1 = -mfbcc - two* mfbcb * vvz + mfbca * (one - vz2); - //m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - //mfbca = m0; - //mfbcb = m1; - //mfbcc = m2; - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - //m1 = -mfcac - two* mfcab * vvz + mfcaa * (one - vz2) - c1o3 * oMdrho * vz2; - //m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - //mfcaa = m0; - //mfcab = m1; - //mfcac = m2; - ///////////c////////////////////////////////////////////////////////////////////////// - //m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - //m1 = -mfcbc - two* mfcbb * vvz + mfcba * (one - vz2); - //m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - //mfcba = m0; - //mfcbb = m1; - //mfcbc = m2; - ///////////c////////////////////////////////////////////////////////////////////////// - //m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - //m1 = -mfccc - two* mfccb * vvz + mfcca * (one - vz2) - c1o9 * oMdrho * vz2; - //m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - //mfcca = m0; - //mfccb = m1; - //mfccc = m2; - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - ////mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - ////////////////////////////////////////////////////////////////////////////////////// - //// Y - Dir - //m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - //m1 = -mfaca - two* mfaba * vvy + mfaaa * (one - vy2) - c1o6 * oMdrho * vy2; - //m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - //mfaaa = m0; - //mfaba = m1; - //mfaca = m2; - ////////////////////////////////////////////////////////////////////////////////////// - //m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - //m1 = -mfacb - two* mfabb * vvy + mfaab * (one - vy2) - c2o3 * oMdrho * vy2; - //m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - //mfaab = m0; - //mfabb = m1; - //mfacb = m2; - ////////////////////////////////////////////////////////////////////////////////////// - //m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - //m1 = -mfacc - two* mfabc * vvy + mfaac * (one - vy2) - c1o6 * oMdrho * vy2; - //m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - //mfaac = m0; - //mfabc = m1; - //mfacc = m2; - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - //m1 = -mfbca - two* mfbba * vvy + mfbaa * (one - vy2); - //m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - //mfbaa = m0; - //mfbba = m1; - //mfbca = m2; - ///////////b////////////////////////////////////////////////////////////////////////// - //m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - //m1 = -mfbcb - two* mfbbb * vvy + mfbab * (one - vy2); - //m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - //mfbab = m0; - //mfbbb = m1; - //mfbcb = m2; - ///////////b////////////////////////////////////////////////////////////////////////// - //m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - //m1 = -mfbcc - two* mfbbc * vvy + mfbac * (one - vy2); - //m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - //mfbac = m0; - //mfbbc = m1; - //mfbcc = m2; - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - //m1 = -mfcca - two* mfcba * vvy + mfcaa * (one - vy2) - c1o18 * oMdrho * vy2; - //m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - //mfcaa = m0; - //mfcba = m1; - //mfcca = m2; - ///////////c////////////////////////////////////////////////////////////////////////// - //m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - //m1 = -mfccb - two* mfcbb * vvy + mfcab * (one - vy2) - c2o9 * oMdrho * vy2; - //m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - //mfcab = m0; - //mfcbb = m1; - //mfccb = m2; - ///////////c////////////////////////////////////////////////////////////////////////// - //m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - //m1 = -mfccc - two* mfcbc * vvy + mfcac * (one - vy2) - c1o18 * oMdrho * vy2; - //m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - //mfcac = m0; - //mfcbc = m1; - //mfccc = m2; - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - ////mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - ////////////////////////////////////////////////////////////////////////////////////// - //// X - Dir - //m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - //m1 = -mfcaa - two* mfbaa * vvx + mfaaa * (one - vx2) - c1o36 * oMdrho * vx2; - //m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - //mfaaa = m0; - //mfbaa = m1; - //mfcaa = m2; - ////////////////////////////////////////////////////////////////////////////////////// - //m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - //m1 = -mfcba - two* mfbba * vvx + mfaba * (one - vx2) - c1o9 * oMdrho * vx2; - //m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - //mfaba = m0; - //mfbba = m1; - //mfcba = m2; - ////////////////////////////////////////////////////////////////////////////////////// - //m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - //m1 = -mfcca - two* mfbca * vvx + mfaca * (one - vx2) - c1o36 * oMdrho * vx2; - //m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - //mfaca = m0; - //mfbca = m1; - //mfcca = m2; - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - //m1 = -mfcab - two* mfbab * vvx + mfaab * (one - vx2) - c1o9 * oMdrho * vx2; - //m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - //mfaab = m0; - //mfbab = m1; - //mfcab = m2; - /////////////b//////////////////////////////////////////////////////////////////////// - //m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - //m1 = -mfcbb - two* mfbbb * vvx + mfabb * (one - vx2) - c4o9 * oMdrho * vx2; - //m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - //mfabb = m0; - //mfbbb = m1; - //mfcbb = m2; - /////////////b//////////////////////////////////////////////////////////////////////// - //m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - //m1 = -mfccb - two* mfbcb * vvx + mfacb * (one - vx2) - c1o9 * oMdrho * vx2; - //m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - //mfacb = m0; - //mfbcb = m1; - //mfccb = m2; - ////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////// - //m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - //m1 = -mfcac - two* mfbac * vvx + mfaac * (one - vx2) - c1o36 * oMdrho * vx2; - //m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - //mfaac = m0; - //mfbac = m1; - //mfcac = m2; - /////////////c//////////////////////////////////////////////////////////////////////// - //m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - //m1 = -mfcbc - two* mfbbc * vvx + mfabc * (one - vx2) - c1o9 * oMdrho * vx2; - //m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - //mfabc = m0; - //mfbbc = m1; - //mfcbc = m2; - /////////////c//////////////////////////////////////////////////////////////////////// - //m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - //m1 = -mfccc - two* mfbcc * vvx + mfacc * (one - vx2) - c1o36 * oMdrho * vx2; - //m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - //mfacc = m0; - //mfbcc = m1; - //mfccc = m2; - ////////////////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////////////////// - //(D.f[DIR_P00])[k] = mfabb; - //(D.f[DIR_M00])[kw] = mfcbb; - //(D.f[DIR_0P0])[k] = mfbab; - //(D.f[DIR_0M0])[ks] = mfbcb; - //(D.f[DIR_00P])[k] = mfbba; - //(D.f[DIR_00M])[kb] = mfbbc; - //(D.f[DIR_PP0])[k] = mfaab; - //(D.f[DIR_MM0])[ksw] = mfccb; - //(D.f[DIR_PM0])[ks] = mfacb; - //(D.f[DIR_MP0])[kw] = mfcab; - //(D.f[DIR_P0P])[k] = mfaba; - //(D.f[DIR_M0M])[kbw] = mfcbc; - //(D.f[DIR_P0M])[kb] = mfabc; - //(D.f[DIR_M0P])[kw] = mfcba; - //(D.f[DIR_0PP])[k] = mfbaa; - //(D.f[DIR_0MM])[kbs] = mfbcc; - //(D.f[DIR_0PM])[kb] = mfbac; - //(D.f[DIR_0MP])[ks] = mfbca; - //(D.f[DIR_000])[k] = mfbbb; - //(D.f[DIR_PPP])[k] = mfaaa; - //(D.f[DIR_PMP])[ks] = mfaca; - //(D.f[DIR_PPM])[kb] = mfaac; - //(D.f[DIR_PMM])[kbs] = mfacc; - //(D.f[DIR_MPP])[kw] = mfcaa; - //(D.f[DIR_MMP])[ksw] = mfcca; - //(D.f[DIR_MPM])[kbw] = mfcac; - //(D.f[DIR_MMM])[kbsw] = mfccc; - ////////////////////////////////////////////////////////////////////////////////////// - - //(G.g[DIR_P00])[k] = mgabb; - //(G.g[DIR_M00])[kw] = mgcbb; - //(G.g[DIR_0P0])[k] = mgbab; - //(G.g[DIR_0M0])[ks] = mgbcb; - //(G.g[DIR_00P])[k] = mgbba; - //(G.g[DIR_00M])[kb] = mgbbc; - } - } -} -//////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -/////////////////////////////////////////////////////////////////////////////////// -//__global__ void LB_Kernel_Cumulant_D3Q27F3_2018( real omega, -// unsigned int* bcMatD, -// unsigned int* neighborX, -// unsigned int* neighborY, -// unsigned int* neighborZ, -// real* DDStart, -// real* G6, -// int size_Mat, -// int level, -// real* forces, -// bool EvenOrOdd) -//{ -// //////////////////////////////////////////////////////////////////////////////// -// 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 < size_Mat) -// { -// //////////////////////////////////////////////////////////////////////////////// -// unsigned int BC; -// BC = bcMatD[k]; -// -// if ((BC != GEO_SOLID) && (BC != GEO_VOID)) -// { -// Distributions27 D; -// if (EvenOrOdd == true) -// { -// D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; -// D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; -// D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; -// D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; -// D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; -// D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; -// D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; -// D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; -// D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; -// D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; -// D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; -// D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; -// D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; -// D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; -// D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; -// D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; -// D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; -// D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; -// D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; -// D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; -// D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; -// D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; -// D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; -// D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; -// D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; -// D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; -// D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; -// } -// else -// { -// D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; -// D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; -// D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; -// D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; -// D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; -// D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; -// D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; -// D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; -// D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; -// D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; -// D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; -// D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; -// D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; -// D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; -// D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; -// D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; -// D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; -// D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; -// D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; -// D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; -// D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; -// D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; -// D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; -// D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; -// D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; -// D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; -// D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; -// } -// -// Distributions6 G; -// if (EvenOrOdd == true) -// { -// G.g[DIR_P00] = &G6[DIR_P00 * size_Mat]; -// G.g[DIR_M00] = &G6[DIR_M00 * size_Mat]; -// G.g[DIR_0P0] = &G6[DIR_0P0 * size_Mat]; -// G.g[DIR_0M0] = &G6[DIR_0M0 * size_Mat]; -// G.g[DIR_00P] = &G6[DIR_00P * size_Mat]; -// G.g[DIR_00M] = &G6[DIR_00M * size_Mat]; -// } -// else -// { -// G.g[DIR_M00] = &G6[DIR_P00 * size_Mat]; -// G.g[DIR_P00] = &G6[DIR_M00 * size_Mat]; -// G.g[DIR_0M0] = &G6[DIR_0P0 * size_Mat]; -// G.g[DIR_0P0] = &G6[DIR_0M0 * size_Mat]; -// G.g[DIR_00M] = &G6[DIR_00P * size_Mat]; -// G.g[DIR_00P] = &G6[DIR_00M * size_Mat]; -// } -// -// //////////////////////////////////////////////////////////////////////////////// -// //index -// //unsigned int kzero= k; -// //unsigned int ke = k; -// unsigned int kw = neighborX[k]; -// //unsigned int kn = k; -// unsigned int ks = neighborY[k]; -// //unsigned int kt = k; -// unsigned int kb = neighborZ[k]; -// unsigned int ksw = neighborY[kw]; -// //unsigned int kne = k; -// //unsigned int kse = ks; -// //unsigned int knw = kw; -// unsigned int kbw = neighborZ[kw]; -// //unsigned int kte = k; -// //unsigned int kbe = kb; -// //unsigned int ktw = kw; -// unsigned int kbs = neighborZ[ks]; -// //unsigned int ktn = k; -// //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 = k; -// unsigned int kbsw = neighborZ[ksw]; -// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// real mgcbb = (G.g[DIR_P00])[k]; -// real mgabb = (G.g[DIR_M00])[kw]; -// real mgbcb = (G.g[DIR_0P0])[k]; -// real mgbab = (G.g[DIR_0M0])[ks]; -// real mgbbc = (G.g[DIR_00P])[k]; -// real mgbba = (G.g[DIR_00M])[kb]; -// real dxuxdxux = c1o2 * (-mgcbb + mgabb); -// real dyuydyuy = c1o2 * (-mgbcb + mgbab); -// real dzuzdzuz = c1o2 * (-mgbbc + mgbba); -// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// real mfcbb = (D.f[DIR_P00])[k]; -// real mfabb = (D.f[DIR_M00])[kw]; -// real mfbcb = (D.f[DIR_0P0])[k]; -// real mfbab = (D.f[DIR_0M0])[ks]; -// real mfbbc = (D.f[DIR_00P])[k]; -// real mfbba = (D.f[DIR_00M])[kb]; -// real mfccb = (D.f[DIR_PP0])[k]; -// real mfaab = (D.f[DIR_MM0])[ksw]; -// real mfcab = (D.f[DIR_PM0])[ks]; -// real mfacb = (D.f[DIR_MP0])[kw]; -// real mfcbc = (D.f[DIR_P0P])[k]; -// real mfaba = (D.f[DIR_M0M])[kbw]; -// real mfcba = (D.f[DIR_P0M])[kb]; -// real mfabc = (D.f[DIR_M0P])[kw]; -// real mfbcc = (D.f[DIR_0PP])[k]; -// real mfbaa = (D.f[DIR_0MM])[kbs]; -// real mfbca = (D.f[DIR_0PM])[kb]; -// real mfbac = (D.f[DIR_0MP])[ks]; -// real mfbbb = (D.f[DIR_000])[k]; -// real mfccc = (D.f[DIR_PPP])[k]; -// real mfaac = (D.f[DIR_MMP])[ksw]; -// real mfcac = (D.f[DIR_PMP])[ks]; -// real mfacc = (D.f[DIR_MPP])[kw]; -// real mfcca = (D.f[DIR_PPM])[kb]; -// real mfaaa = (D.f[DIR_MMM])[kbsw]; -// real mfcaa = (D.f[DIR_PMM])[kbs]; -// real mfaca = (D.f[DIR_MPM])[kbw]; -// //////////////////////////////////////////////////////////////////////////////////// -// real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + -// (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + -// ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; -// -// real rho = one + drho; -// //////////////////////////////////////////////////////////////////////////////////// -// real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + -// (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + -// (mfcbb - mfabb)) / rho; -// real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + -// (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + -// (mfbcb - mfbab)) / rho; -// real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + -// (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + -// (mfbbc - mfbba)) / rho; -// //////////////////////////////////////////////////////////////////////////////////// -// //the force be with you -// real fx = forces[0] / (pow(two, level)); //zero;//0.0032653/(pow(two,level)); //0.000000005;//(two/1600000.0) / 120.0; // -// real fy = forces[1] / (pow(two, level)); //zero; -// real fz = forces[2] / (pow(two, level)); //zero; -// vvx += fx; -// vvy += fy; -// vvz += fz; -// //////////////////////////////////////////////////////////////////////////////////// -// real oMdrho = one; // comp special -// real m0, m1, m2; -// real vx2; -// real vy2; -// real vz2; -// vx2 = vvx*vvx; -// vy2 = vvy*vvy; -// vz2 = vvz*vvz; -// //////////////////////////////////////////////////////////////////////////////////// -// real wadjust; -// real qudricLimitP = 0.01f;// * 0.0001f; -// real qudricLimitM = 0.01f;// * 0.0001f; -// real qudricLimitD = 0.01f;// * 0.001f; -// //////////////////////////////////////////////////////////////////////////////////// -// //Hin -// //////////////////////////////////////////////////////////////////////////////////// -// // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Z - Dir -// m2 = mfaaa + mfaac; -// m1 = mfaac - mfaaa; -// m0 = m2 + mfaab; -// mfaaa = m0; -// m0 += c1o36 * oMdrho; -// mfaab = m1 - m0 * vvz; -// mfaac = m2 - two* m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaba + mfabc; -// m1 = mfabc - mfaba; -// m0 = m2 + mfabb; -// mfaba = m0; -// m0 += c1o9 * oMdrho; -// mfabb = m1 - m0 * vvz; -// mfabc = m2 - two* m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaca + mfacc; -// m1 = mfacc - mfaca; -// m0 = m2 + mfacb; -// mfaca = m0; -// m0 += c1o36 * oMdrho; -// mfacb = m1 - m0 * vvz; -// mfacc = m2 - two* m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbaa + mfbac; -// m1 = mfbac - mfbaa; -// m0 = m2 + mfbab; -// mfbaa = m0; -// m0 += c1o9 * oMdrho; -// mfbab = m1 - m0 * vvz; -// mfbac = m2 - two* m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbba + mfbbc; -// m1 = mfbbc - mfbba; -// m0 = m2 + mfbbb; -// mfbba = m0; -// m0 += c4o9 * oMdrho; -// mfbbb = m1 - m0 * vvz; -// mfbbc = m2 - two* m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbca + mfbcc; -// m1 = mfbcc - mfbca; -// m0 = m2 + mfbcb; -// mfbca = m0; -// m0 += c1o9 * oMdrho; -// mfbcb = m1 - m0 * vvz; -// mfbcc = m2 - two* m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcaa + mfcac; -// m1 = mfcac - mfcaa; -// m0 = m2 + mfcab; -// mfcaa = m0; -// m0 += c1o36 * oMdrho; -// mfcab = m1 - m0 * vvz; -// mfcac = m2 - two* m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcba + mfcbc; -// m1 = mfcbc - mfcba; -// m0 = m2 + mfcbb; -// mfcba = m0; -// m0 += c1o9 * oMdrho; -// mfcbb = m1 - m0 * vvz; -// mfcbc = m2 - two* m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcca + mfccc; -// m1 = mfccc - mfcca; -// m0 = m2 + mfccb; -// mfcca = m0; -// m0 += c1o36 * oMdrho; -// mfccb = m1 - m0 * vvz; -// mfccc = m2 - two* m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Y - Dir -// m2 = mfaaa + mfaca; -// m1 = mfaca - mfaaa; -// m0 = m2 + mfaba; -// mfaaa = m0; -// m0 += c1o6 * oMdrho; -// mfaba = m1 - m0 * vvy; -// mfaca = m2 - two* m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaab + mfacb; -// m1 = mfacb - mfaab; -// m0 = m2 + mfabb; -// mfaab = m0; -// mfabb = m1 - m0 * vvy; -// mfacb = m2 - two* m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaac + mfacc; -// m1 = mfacc - mfaac; -// m0 = m2 + mfabc; -// mfaac = m0; -// m0 += c1o18 * oMdrho; -// mfabc = m1 - m0 * vvy; -// mfacc = m2 - two* m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbaa + mfbca; -// m1 = mfbca - mfbaa; -// m0 = m2 + mfbba; -// mfbaa = m0; -// m0 += c2o3 * oMdrho; -// mfbba = m1 - m0 * vvy; -// mfbca = m2 - two* m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbab + mfbcb; -// m1 = mfbcb - mfbab; -// m0 = m2 + mfbbb; -// mfbab = m0; -// mfbbb = m1 - m0 * vvy; -// mfbcb = m2 - two* m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbac + mfbcc; -// m1 = mfbcc - mfbac; -// m0 = m2 + mfbbc; -// mfbac = m0; -// m0 += c2o9 * oMdrho; -// mfbbc = m1 - m0 * vvy; -// mfbcc = m2 - two* m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcaa + mfcca; -// m1 = mfcca - mfcaa; -// m0 = m2 + mfcba; -// mfcaa = m0; -// m0 += c1o6 * oMdrho; -// mfcba = m1 - m0 * vvy; -// mfcca = m2 - two* m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcab + mfccb; -// m1 = mfccb - mfcab; -// m0 = m2 + mfcbb; -// mfcab = m0; -// mfcbb = m1 - m0 * vvy; -// mfccb = m2 - two* m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcac + mfccc; -// m1 = mfccc - mfcac; -// m0 = m2 + mfcbc; -// mfcac = m0; -// m0 += c1o18 * oMdrho; -// mfcbc = m1 - m0 * vvy; -// mfccc = m2 - two* m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // X - Dir -// m2 = mfaaa + mfcaa; -// m1 = mfcaa - mfaaa; -// m0 = m2 + mfbaa; -// mfaaa = m0; -// m0 += one* oMdrho; -// mfbaa = m1 - m0 * vvx; -// mfcaa = m2 - two* m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaba + mfcba; -// m1 = mfcba - mfaba; -// m0 = m2 + mfbba; -// mfaba = m0; -// mfbba = m1 - m0 * vvx; -// mfcba = m2 - two* m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaca + mfcca; -// m1 = mfcca - mfaca; -// m0 = m2 + mfbca; -// mfaca = m0; -// m0 += c1o3 * oMdrho; -// mfbca = m1 - m0 * vvx; -// mfcca = m2 - two* m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaab + mfcab; -// m1 = mfcab - mfaab; -// m0 = m2 + mfbab; -// mfaab = m0; -// mfbab = m1 - m0 * vvx; -// mfcab = m2 - two* m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfabb + mfcbb; -// m1 = mfcbb - mfabb; -// m0 = m2 + mfbbb; -// mfabb = m0; -// mfbbb = m1 - m0 * vvx; -// mfcbb = m2 - two* m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfacb + mfccb; -// m1 = mfccb - mfacb; -// m0 = m2 + mfbcb; -// mfacb = m0; -// mfbcb = m1 - m0 * vvx; -// mfccb = m2 - two* m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaac + mfcac; -// m1 = mfcac - mfaac; -// m0 = m2 + mfbac; -// mfaac = m0; -// m0 += c1o3 * oMdrho; -// mfbac = m1 - m0 * vvx; -// mfcac = m2 - two* m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfabc + mfcbc; -// m1 = mfcbc - mfabc; -// m0 = m2 + mfbbc; -// mfabc = m0; -// mfbbc = m1 - m0 * vvx; -// mfcbc = m2 - two* m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfacc + mfccc; -// m1 = mfccc - mfacc; -// m0 = m2 + mfbcc; -// mfacc = m0; -// m0 += c1o9 * oMdrho; -// mfbcc = m1 - m0 * vvx; -// mfccc = m2 - two* m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// -// //////////////////////////////////////////////////////////////////////////////////// -// // Cumulants -// //////////////////////////////////////////////////////////////////////////////////// -// real OxxPyyPzz = one; //set the bulk viscosity one is high / two is very low and zero is (too) high ... (also called omega 2) -// -// //////////////////////////////////////////////////////////// -// //3. -// ////////////////////////////// -// real OxyyPxzz = eight*(-two + omega)*(one + two*omega) / (-eight - fourteen*omega + seven*omega*omega);//one; -// real OxyyMxzz = eight*(-two + omega)*(-seven + four*omega) / (fiftysix - fifty*omega + nine*omega*omega);//one; -// real Oxyz = twentyfour*(-two + omega)*(-two - seven*omega + three*omega*omega) / (fourtyeight + c152*omega - c130*omega*omega + twentynine*omega*omega*omega);//one; -// //////////////////////////////////////////////////////////// -// //4. -// ////////////////////////////// -// real O4 = one; -// ////////////////////////////// -// //real O4 = omega;//TRT -// //////////////////////////////////////////////////////////// -// //5. -// ////////////////////////////// -// real O5 = one; -// //////////////////////////////////////////////////////////// -// //6. -// ////////////////////////////// -// real O6 = one; -// //////////////////////////////////////////////////////////// -// -// -// //central moments to cumulants -// //4. -// real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + two * mfbba * mfbab) / rho; -// real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + two * mfbba * mfabb) / rho; -// real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + two * mfbab * mfabb) / rho; -// -// real CUMcca = mfcca - (((mfcaa * mfaca + two * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); -// real CUMcac = mfcac - (((mfcaa * mfaac + two * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); -// real CUMacc = mfacc - (((mfaac * mfaca + two * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); -// -// //5. -// real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + four * mfabb * mfbbb + two * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; -// real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + four * mfbab * mfbbb + two * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; -// real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + four * mfbba * mfbbb + two * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; -// -// //6. -// -// real CUMccc = mfccc + ((-four * mfbbb * mfbbb -// - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -// - four * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) -// - two * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho -// + (four * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) -// + two * (mfcaa * mfaca * mfaac) -// + sixteen * mfbba * mfbab * mfabb) / (rho * rho) -// - c1o3 * (mfacc + mfcac + mfcca) / rho -// - c1o9 * (mfcaa + mfaca + mfaac) / rho -// + (two * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) -// + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 -// + c1o27*((drho * drho - drho) / (rho*rho))); -// -// //2. -// // linear combinations -// real mxxPyyPzz = mfcaa + mfaca + mfaac; -// real mxxMyy = mfcaa - mfaca; -// real mxxMzz = mfcaa - mfaac; -// -// //////////////////////////////////////////////////////////////////////////// -// real Dxy = -three*omega*mfbba; -// real Dxz = -three*omega*mfbab; -// real Dyz = -three*omega*mfabb; -// -// //3. -// // linear combinations -// -// real mxxyPyzz = mfcba + mfabc; -// real mxxyMyzz = mfcba - mfabc; -// -// real mxxzPyyz = mfcab + mfacb; -// real mxxzMyyz = mfcab - mfacb; -// -// real mxyyPxzz = mfbca + mfbac; -// real mxyyMxzz = mfbca - mfbac; -// -// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) -// -// real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); -// real dyuy = dxux + omega * c3o2 * mxxMyy; -// real dzuz = dxux + omega * c3o2 * mxxMzz; -// -// mgabb = vvx*dxux; -// mgbab = vvy*dyuy; -// mgbba = vvz*dzuz; -// -// mgcbb = vvx*dxux; -// mgbcb = vvy*dyuy; -// mgbbc = vvz*dzuz; -// -// //relax -// mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz) -// + (six - three * (omega + OxxPyyPzz) + omega * OxxPyyPzz) / (three * omega) * -// (dxuxdxux+ dyuydyuy+ dzuzdzuz); -// mxxMyy += omega * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy) -// + omega * (two*(one / omega - c1o2) * (one / omega - c1o2) - c1o6) * (dxuxdxux - dyuydyuy ); -// mxxMzz += omega * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz) -// + omega * (two*(one / omega - c1o2) * (one / omega - c1o2) - c1o6) *(dxuxdxux - dzuzdzuz); -// -// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ////no correction -// //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; -// //mxxMyy += -(-omega) * (-mxxMyy); -// //mxxMzz += -(-omega) * (-mxxMzz); -// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// mfabb += omega * (-mfabb); -// mfbab += omega * (-mfbab); -// mfbba += omega * (-mfbba); -// ////////////////////////////////////////////////////////////////////////// -// -// // linear combinations back -// mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); -// mfaca = c1o3 * (-two* mxxMyy + mxxMzz + mxxPyyPzz); -// mfaac = c1o3 * (mxxMyy - two* mxxMzz + mxxPyyPzz); -// -// -// //relax -// ////////////////////////////////////////////////////////////////////////// -// //das ist der limiter -// wadjust = Oxyz + (one - Oxyz)*abs(mfbbb) / (abs(mfbbb) + qudricLimitD); -// mfbbb += wadjust * (-mfbbb); -// wadjust = OxyyPxzz + (one - OxyyPxzz)*abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimitP); -// mxxyPyzz += wadjust * (-mxxyPyzz); -// wadjust = OxyyMxzz + (one - OxyyMxzz)*abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimitM); -// mxxyMyzz += wadjust * (-mxxyMyzz); -// wadjust = OxyyPxzz + (one - OxyyPxzz)*abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimitP); -// mxxzPyyz += wadjust * (-mxxzPyyz); -// wadjust = OxyyMxzz + (one - OxyyMxzz)*abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimitM); -// mxxzMyyz += wadjust * (-mxxzMyyz); -// wadjust = OxyyPxzz + (one - OxyyPxzz)*abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimitP); -// mxyyPxzz += wadjust * (-mxyyPxzz); -// wadjust = OxyyMxzz + (one - OxyyMxzz)*abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimitM); -// mxyyMxzz += wadjust * (-mxyyMxzz); -// ////////////////////////////////////////////////////////////////////////// -// //ohne limiter -// //mfbbb += OxyyMxzz * (-mfbbb); -// //mxxyPyzz += OxyyPxzz * (-mxxyPyzz); -// //mxxyMyzz += OxyyMxzz * (-mxxyMyzz); -// //mxxzPyyz += OxyyPxzz * (-mxxzPyyz); -// //mxxzMyyz += OxyyMxzz * (-mxxzMyyz); -// //mxyyPxzz += OxyyPxzz * (-mxyyPxzz); -// //mxyyMxzz += OxyyMxzz * (-mxyyMxzz); -// ////////////////////////////////////////////////////////////////////////// -// -// // linear combinations back -// mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; -// mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; -// mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; -// mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; -// mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; -// mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; -// -// //4. -// ////////////////////////////////////////////////////////////////////////// -// //mit limiter -// // wadjust = O4+(one-O4)*abs(CUMacc)/(abs(CUMacc)+qudricLimit); -// //CUMacc += wadjust * (-CUMacc); -// // wadjust = O4+(one-O4)*abs(CUMcac)/(abs(CUMcac)+qudricLimit); -// //CUMcac += wadjust * (-CUMcac); -// // wadjust = O4+(one-O4)*abs(CUMcca)/(abs(CUMcca)+qudricLimit); -// //CUMcca += wadjust * (-CUMcca); -// -// // wadjust = O4+(one-O4)*abs(CUMbbc)/(abs(CUMbbc)+qudricLimit); -// //CUMbbc += wadjust * (-CUMbbc); -// // wadjust = O4+(one-O4)*abs(CUMbcb)/(abs(CUMbcb)+qudricLimit); -// //CUMbcb += wadjust * (-CUMbcb); -// // wadjust = O4+(one-O4)*abs(CUMcbb)/(abs(CUMcbb)+qudricLimit); -// //CUMcbb += wadjust * (-CUMcbb); -// ////////////////////////////////////////////////////////////////////////// -// //ohne limiter -// //CUMacc += O4 * (-CUMacc); -// //CUMcac += O4 * (-CUMcac); -// //CUMcca += O4 * (-CUMcca); -// //CUMbbc += O4 * (-CUMbbc); -// //CUMbcb += O4 * (-CUMbcb); -// //CUMcbb += O4 * (-CUMcbb); -// CUMacc = -O4*(one / omega - c1o2)*(dyuy + dzuz)*c2o3 *(four + two*omega - three*omega*omega) / (two - seven*omega + five*omega*omega) + (one - O4) * (CUMacc); -// CUMcac = -O4*(one / omega - c1o2)*(dxux + dzuz)*c2o3 *(four + two*omega - three*omega*omega) / (two - seven*omega + five*omega*omega) + (one - O4) * (CUMcac); -// CUMcca = -O4*(one / omega - c1o2)*(dyuy + dxux)*c2o3 *(four + two*omega - three*omega*omega) / (two - seven*omega + five*omega*omega) + (one - O4) * (CUMcca); -// CUMbbc = -O4*(one / omega - c1o2)*Dxy*c1o3 *(four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega) + (one - O4) * (CUMbbc); -// CUMbcb = -O4*(one / omega - c1o2)*Dxz*c1o3 *(four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega) + (one - O4) * (CUMbcb); -// CUMcbb = -O4*(one / omega - c1o2)*Dyz*c1o3 *(four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega) + (one - O4) * (CUMcbb); -// ////////////////////////////////////////////////////////////////////////// -// -// -// //5. -// CUMbcc += O5 * (-CUMbcc); -// CUMcbc += O5 * (-CUMcbc); -// CUMccb += O5 * (-CUMccb); -// -// //6. -// CUMccc += O6 * (-CUMccc); -// -// -// -// //back cumulants to central moments -// //4. -// mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + two * mfbba * mfbab) / rho; -// mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + two * mfbba * mfabb) / rho; -// mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + two * mfbab * mfabb) / rho; -// -// mfcca = CUMcca + (((mfcaa * mfaca + two * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); -// mfcac = CUMcac + (((mfcaa * mfaac + two * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); -// mfacc = CUMacc + (((mfaac * mfaca + two * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); -// -// //5. -// mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + four * mfabb * mfbbb + two * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; -// mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + four * mfbab * mfbbb + two * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; -// mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + four * mfbba * mfbbb + two * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; -// -// //6. -// -// mfccc = CUMccc - ((-four * mfbbb * mfbbb -// - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -// - four * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) -// - two * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho -// + (four * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) -// + two * (mfcaa * mfaca * mfaac) -// + sixteen * mfbba * mfbab * mfabb) / (rho * rho) -// - c1o3 * (mfacc + mfcac + mfcca) / rho -// - c1o9 * (mfcaa + mfaca + mfaac) / rho -// + (two * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) -// + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 -// + c1o27*((drho * drho - drho) / (rho*rho))); -// //////////////////////////////////////////////////////////////////////////////////// -// -// //////////////////////////////////////////////////////////////////////////////////// -// //the force be with you -// mfbaa = -mfbaa; -// mfaba = -mfaba; -// mfaab = -mfaab; -// //////////////////////////////////////////////////////////////////////////////////// -// -// -// //////////////////////////////////////////////////////////////////////////////////// -// //back -// //////////////////////////////////////////////////////////////////////////////////// -// //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Z - Dir -// m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + one* oMdrho) * (vz2 - vvz) * c1o2; -// m1 = -mfaac - two* mfaab * vvz + mfaaa * (one - vz2) - one* oMdrho * vz2; -// m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + one* oMdrho) * (vz2 + vvz) * c1o2; -// mfaaa = m0; -// mfaab = m1; -// mfaac = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; -// m1 = -mfabc - two* mfabb * vvz + mfaba * (one - vz2); -// m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; -// mfaba = m0; -// mfabb = m1; -// mfabc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; -// m1 = -mfacc - two* mfacb * vvz + mfaca * (one - vz2) - c1o3 * oMdrho * vz2; -// m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; -// mfaca = m0; -// mfacb = m1; -// mfacc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; -// m1 = -mfbac - two* mfbab * vvz + mfbaa * (one - vz2); -// m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; -// mfbaa = m0; -// mfbab = m1; -// mfbac = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; -// m1 = -mfbbc - two* mfbbb * vvz + mfbba * (one - vz2); -// m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; -// mfbba = m0; -// mfbbb = m1; -// mfbbc = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; -// m1 = -mfbcc - two* mfbcb * vvz + mfbca * (one - vz2); -// m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; -// mfbca = m0; -// mfbcb = m1; -// mfbcc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; -// m1 = -mfcac - two* mfcab * vvz + mfcaa * (one - vz2) - c1o3 * oMdrho * vz2; -// m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; -// mfcaa = m0; -// mfcab = m1; -// mfcac = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; -// m1 = -mfcbc - two* mfcbb * vvz + mfcba * (one - vz2); -// m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; -// mfcba = m0; -// mfcbb = m1; -// mfcbc = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; -// m1 = -mfccc - two* mfccb * vvz + mfcca * (one - vz2) - c1o9 * oMdrho * vz2; -// m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; -// mfcca = m0; -// mfccb = m1; -// mfccc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Y - Dir -// m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfaca - two* mfaba * vvy + mfaaa * (one - vy2) - c1o6 * oMdrho * vy2; -// m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; -// mfaaa = m0; -// mfaba = m1; -// mfaca = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfacb - two* mfabb * vvy + mfaab * (one - vy2) - c2o3 * oMdrho * vy2; -// m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; -// mfaab = m0; -// mfabb = m1; -// mfacb = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfacc - two* mfabc * vvy + mfaac * (one - vy2) - c1o6 * oMdrho * vy2; -// m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; -// mfaac = m0; -// mfabc = m1; -// mfacc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; -// m1 = -mfbca - two* mfbba * vvy + mfbaa * (one - vy2); -// m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; -// mfbaa = m0; -// mfbba = m1; -// mfbca = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; -// m1 = -mfbcb - two* mfbbb * vvy + mfbab * (one - vy2); -// m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; -// mfbab = m0; -// mfbbb = m1; -// mfbcb = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; -// m1 = -mfbcc - two* mfbbc * vvy + mfbac * (one - vy2); -// m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; -// mfbac = m0; -// mfbbc = m1; -// mfbcc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfcca - two* mfcba * vvy + mfcaa * (one - vy2) - c1o18 * oMdrho * vy2; -// m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; -// mfcaa = m0; -// mfcba = m1; -// mfcca = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfccb - two* mfcbb * vvy + mfcab * (one - vy2) - c2o9 * oMdrho * vy2; -// m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; -// mfcab = m0; -// mfcbb = m1; -// mfccb = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfccc - two* mfcbc * vvy + mfcac * (one - vy2) - c1o18 * oMdrho * vy2; -// m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; -// mfcac = m0; -// mfcbc = m1; -// mfccc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // X - Dir -// m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcaa - two* mfbaa * vvx + mfaaa * (one - vx2) - c1o36 * oMdrho * vx2; -// m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaaa = m0; -// mfbaa = m1; -// mfcaa = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcba - two* mfbba * vvx + mfaba * (one - vx2) - c1o9 * oMdrho * vx2; -// m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaba = m0; -// mfbba = m1; -// mfcba = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcca - two* mfbca * vvx + mfaca * (one - vx2) - c1o36 * oMdrho * vx2; -// m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaca = m0; -// mfbca = m1; -// mfcca = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcab - two* mfbab * vvx + mfaab * (one - vx2) - c1o9 * oMdrho * vx2; -// m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaab = m0; -// mfbab = m1; -// mfcab = m2; -// ///////////b//////////////////////////////////////////////////////////////////////// -// m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcbb - two* mfbbb * vvx + mfabb * (one - vx2) - c4o9 * oMdrho * vx2; -// m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfabb = m0; -// mfbbb = m1; -// mfcbb = m2; -// ///////////b//////////////////////////////////////////////////////////////////////// -// m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfccb - two* mfbcb * vvx + mfacb * (one - vx2) - c1o9 * oMdrho * vx2; -// m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfacb = m0; -// mfbcb = m1; -// mfccb = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcac - two* mfbac * vvx + mfaac * (one - vx2) - c1o36 * oMdrho * vx2; -// m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaac = m0; -// mfbac = m1; -// mfcac = m2; -// ///////////c//////////////////////////////////////////////////////////////////////// -// m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcbc - two* mfbbc * vvx + mfabc * (one - vx2) - c1o9 * oMdrho * vx2; -// m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfabc = m0; -// mfbbc = m1; -// mfcbc = m2; -// ///////////c//////////////////////////////////////////////////////////////////////// -// m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfccc - two* mfbcc * vvx + mfacc * (one - vx2) - c1o36 * oMdrho * vx2; -// m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; -// mfacc = m0; -// mfbcc = m1; -// mfccc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// -// //////////////////////////////////////////////////////////////////////////////////// -// (D.f[DIR_P00])[k] = mfabb; -// (D.f[DIR_M00])[kw] = mfcbb; -// (D.f[DIR_0P0])[k] = mfbab; -// (D.f[DIR_0M0])[ks] = mfbcb; -// (D.f[DIR_00P])[k] = mfbba; -// (D.f[DIR_00M])[kb] = mfbbc; -// (D.f[DIR_PP0])[k] = mfaab; -// (D.f[DIR_MM0])[ksw] = mfccb; -// (D.f[DIR_PM0])[ks] = mfacb; -// (D.f[DIR_MP0])[kw] = mfcab; -// (D.f[DIR_P0P])[k] = mfaba; -// (D.f[DIR_M0M])[kbw] = mfcbc; -// (D.f[DIR_P0M])[kb] = mfabc; -// (D.f[DIR_M0P])[kw] = mfcba; -// (D.f[DIR_0PP])[k] = mfbaa; -// (D.f[DIR_0MM])[kbs] = mfbcc; -// (D.f[DIR_0PM])[kb] = mfbac; -// (D.f[DIR_0MP])[ks] = mfbca; -// (D.f[DIR_000])[k] = mfbbb; -// (D.f[DIR_PPP])[k] = mfaaa; -// (D.f[DIR_PMP])[ks] = mfaca; -// (D.f[DIR_PPM])[kb] = mfaac; -// (D.f[DIR_PMM])[kbs] = mfacc; -// (D.f[DIR_MPP])[kw] = mfcaa; -// (D.f[DIR_MMP])[ksw] = mfcca; -// (D.f[DIR_MPM])[kbw] = mfcac; -// (D.f[DIR_MMM])[kbsw] = mfccc; -// //////////////////////////////////////////////////////////////////////////////////// -// -// (G.g[DIR_P00])[k] = mgabb; -// (G.g[DIR_M00])[kw] = mgcbb; -// (G.g[DIR_0P0])[k] = mgbab; -// (G.g[DIR_0M0])[ks] = mgbcb; -// (G.g[DIR_00P])[k] = mgbba; -// (G.g[DIR_00M])[kb] = mgbbc; -// } -// } -//} -////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -///////////////////////////////////////////////////////////////////////////////// -//__global__ void LB_Kernel_Cumulant_D3Q27F3( real omega, -// unsigned int* bcMatD, -// unsigned int* neighborX, -// unsigned int* neighborY, -// unsigned int* neighborZ, -// real* DDStart, -// real* G6, -// int size_Mat, -// int level, -// real* forces, -// bool EvenOrOdd) -//{ -// //////////////////////////////////////////////////////////////////////////////// -// 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 < size_Mat) -// { -// //////////////////////////////////////////////////////////////////////////////// -// unsigned int BC; -// BC = bcMatD[k]; -// -// if ((BC != GEO_SOLID) && (BC != GEO_VOID)) -// { -// Distributions27 D; -// if (EvenOrOdd == true) -// { -// D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; -// D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; -// D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; -// D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; -// D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; -// D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; -// D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; -// D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; -// D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; -// D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; -// D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; -// D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; -// D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; -// D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; -// D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; -// D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; -// D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; -// D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; -// D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; -// D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; -// D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; -// D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; -// D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; -// D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; -// D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; -// D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; -// D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; -// } -// else -// { -// D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; -// D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; -// D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; -// D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; -// D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; -// D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; -// D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; -// D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; -// D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; -// D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; -// D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; -// D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; -// D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; -// D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; -// D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; -// D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; -// D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; -// D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; -// D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; -// D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; -// D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; -// D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; -// D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; -// D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; -// D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; -// D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; -// D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; -// } -// -// Distributions6 G; -// if (EvenOrOdd == true) -// { -// G.g[DIR_P00] = &G6[DIR_P00 * size_Mat]; -// G.g[DIR_M00] = &G6[DIR_M00 * size_Mat]; -// G.g[DIR_0P0] = &G6[DIR_0P0 * size_Mat]; -// G.g[DIR_0M0] = &G6[DIR_0M0 * size_Mat]; -// G.g[DIR_00P] = &G6[DIR_00P * size_Mat]; -// G.g[DIR_00M] = &G6[DIR_00M * size_Mat]; -// } -// else -// { -// G.g[DIR_M00] = &G6[DIR_P00 * size_Mat]; -// G.g[DIR_P00] = &G6[DIR_M00 * size_Mat]; -// G.g[DIR_0M0] = &G6[DIR_0P0 * size_Mat]; -// G.g[DIR_0P0] = &G6[DIR_0M0 * size_Mat]; -// G.g[DIR_00M] = &G6[DIR_00P * size_Mat]; -// G.g[DIR_00P] = &G6[DIR_00M * size_Mat]; -// } -// -// //////////////////////////////////////////////////////////////////////////////// -// //index -// //unsigned int kzero= k; -// //unsigned int ke = k; -// unsigned int kw = neighborX[k]; -// //unsigned int kn = k; -// unsigned int ks = neighborY[k]; -// //unsigned int kt = k; -// unsigned int kb = neighborZ[k]; -// unsigned int ksw = neighborY[kw]; -// //unsigned int kne = k; -// //unsigned int kse = ks; -// //unsigned int knw = kw; -// unsigned int kbw = neighborZ[kw]; -// //unsigned int kte = k; -// //unsigned int kbe = kb; -// //unsigned int ktw = kw; -// unsigned int kbs = neighborZ[ks]; -// //unsigned int ktn = k; -// //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 = k; -// unsigned int kbsw = neighborZ[ksw]; -// -// //unsigned int kzero= k; -// //unsigned int ke = k; -// //unsigned int kw = neighborX[k]; -// //unsigned int kn = k; -// //unsigned int ks = neighborY[k]; -// //unsigned int kt = k; -// //unsigned int kb = neighborZ[k]; -// //unsigned int ksw = neighborY[kw]; -// //unsigned int kne = k; -// //unsigned int kse = ks; -// //unsigned int knw = kw; -// //unsigned int kbw = neighborZ[kw]; -// //unsigned int kte = k; -// //unsigned int kbe = kb; -// //unsigned int ktw = kw; -// //unsigned int kbs = neighborZ[ks]; -// //unsigned int ktn = k; -// //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 = k; -// //unsigned int kbsw = neighborZ[ksw]; -// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// real mgcbb = (G.g[DIR_P00])[k]; -// real mgabb = (G.g[DIR_M00])[kw]; -// real mgbcb = (G.g[DIR_0P0])[k]; -// real mgbab = (G.g[DIR_0M0])[ks]; -// real mgbbc = (G.g[DIR_00P])[k]; -// real mgbba = (G.g[DIR_00M])[kb]; -// real dxxux = c1o2 * (-mgcbb + mgabb); -// real dyyuy = c1o2 * (-mgbcb + mgbab); -// real dzzuz = c1o2 * (-mgbbc + mgbba); -// ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// real mfcbb = (D.f[DIR_P00])[k];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke -// real mfabb = (D.f[DIR_M00])[kw];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; -// real mfbcb = (D.f[DIR_0P0])[k];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn -// real mfbab = (D.f[DIR_0M0])[ks];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; -// real mfbbc = (D.f[DIR_00P])[k];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt -// real mfbba = (D.f[DIR_00M])[kb];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; -// real mfccb = (D.f[DIR_PP0])[k];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne -// real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; -// real mfcab = (D.f[DIR_PM0])[ks];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse -// real mfacb = (D.f[DIR_MP0])[kw];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw -// real mfcbc = (D.f[DIR_P0P])[k];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte -// real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; -// real mfcba = (D.f[DIR_P0M])[kb];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe -// real mfabc = (D.f[DIR_M0P])[kw];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw -// real mfbcc = (D.f[DIR_0PP])[k];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn -// real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; -// real mfbca = (D.f[DIR_0PM])[kb];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn -// real mfbac = (D.f[DIR_0MP])[ks];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts -// real mfbbb = (D.f[DIR_000])[k];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero -// real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne -// real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw -// real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse -// real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw -// real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne -// real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; -// real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse -// real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw -// //////////////////////////////////////////////////////////////////////////////////// -// real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + -// (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + -// ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; -// -// real rho = one + drho; -// //////////////////////////////////////////////////////////////////////////////////// -// //slow -// //real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + -// // (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + -// // ((mfabb+mfcbb) + (mfbab+mfbcb) + (mfbba+mfbbc)));//fehlt mfbbb -// real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + -// (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + -// (mfcbb - mfabb)) / rho; -// real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + -// (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + -// (mfbcb - mfbab)) / rho; -// real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + -// (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + -// (mfbbc - mfbba)) / rho; -// //////////////////////////////////////////////////////////////////////////////////// -// //the force be with you -// real fx = forces[0] / (pow(two, level)); //zero;//0.0032653/(pow(two,level)); //0.000000005;//(two/1600000.0) / 120.0; // -// real fy = forces[1] / (pow(two, level)); //zero; -// real fz = forces[2] / (pow(two, level)); //zero; -// vvx += fx; -// vvy += fy; -// vvz += fz; -// //////////////////////////////////////////////////////////////////////////////////// -// //real omega = omega_in; -// //////////////////////////////////////////////////////////////////////////////////// -// //fast -// real oMdrho = one; // comp special -// //real oMdrho = one - (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + -// // mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb + -// // mfabb+mfcbb + mfbab+mfbcb + mfbba+mfbbc + mfbbb);//fehlt mfbbb nicht mehr -// //real vvx =mfccc-mfaaa + mfcac-mfaca + mfcaa-mfacc + mfcca-mfaac + -// // mfcba-mfabc + mfcbc-mfaba + mfcab-mfacb + mfccb-mfaab + -// // mfcbb-mfabb; -// //real vvy =mfccc-mfaaa + mfaca-mfcac + mfacc-mfcaa + mfcca-mfaac + -// // mfbca-mfbac + mfbcc-mfbaa + mfacb-mfcab + mfccb-mfaab + -// // mfbcb-mfbab; -// //real vvz =mfccc-mfaaa + mfcac-mfaca + mfacc-mfcaa + mfaac-mfcca + -// // mfbac-mfbca + mfbcc-mfbaa + mfabc-mfcba + mfcbc-mfaba + -// // mfbbc-mfbba; -// //////////////////////////////////////////////////////////////////////////////////// -// // oMdrho assembler style -------> faaaaaastaaaa -// // or much sloooowaaaa ... it dep�ndssssss on sadaku -// real m0, m1, m2; -// //real oMdrho; -// //{ -// // oMdrho=mfccc+mfaaa; -// // m0=mfaca+mfcac; -// // m1=mfacc+mfcaa; -// // m2=mfaac+mfcca; -// // oMdrho+=m0; -// // m1+=m2; -// // oMdrho+=m1; -// // m0=mfbac+mfbca; -// // m1=mfbaa+mfbcc; -// // m0+=m1; -// // m1=mfabc+mfcba; -// // m2=mfaba+mfcbc; -// // m1+=m2; -// // m0+=m1; -// // m1=mfacb+mfcab; -// // m2=mfaab+mfccb; -// // m1+=m2; -// // m0+=m1; -// // oMdrho+=m0; -// // m0=mfabb+mfcbb; -// // m1=mfbab+mfbcb; -// // m2=mfbba+mfbbc; -// // m0+=m1+m2; -// // m0+=mfbbb; //hat gefehlt -// // oMdrho = one - (oMdrho + m0); -// //} -// //real vvx; -// real vx2; -// //{ -// // vvx = mfccc-mfaaa; -// // m0 = mfcac-mfaca; -// // m1 = mfcaa-mfacc; -// // m2 = mfcca-mfaac; -// // vvx+= m0; -// // m1 += m2; -// // vvx+= m1; -// // vx2 = mfcba-mfabc; -// // m0 = mfcbc-mfaba; -// // m1 = mfcab-mfacb; -// // m2 = mfccb-mfaab; -// // vx2+= m0; -// // m1 += m2; -// // vx2+= m1; -// // vvx+= vx2; -// // vx2 = mfcbb-mfabb; -// // vvx+= vx2; -// //} -// //real vvy; -// real vy2; -// //{ -// // vvy = mfccc-mfaaa; -// // m0 = mfaca-mfcac; -// // m1 = mfacc-mfcaa; -// // m2 = mfcca-mfaac; -// // vvy+= m0; -// // m1 += m2; -// // vvy+= m1; -// // vy2 = mfbca-mfbac; -// // m0 = mfbcc-mfbaa; -// // m1 = mfacb-mfcab; -// // m2 = mfccb-mfaab; -// // vy2+= m0; -// // m1 += m2; -// // vy2+= m1; -// // vvy+= vy2; -// // vy2 = mfbcb-mfbab; -// // vvy+= vy2; -// //} -// //real vvz; -// real vz2; -// //{ -// // vvz = mfccc-mfaaa; -// // m0 = mfcac-mfaca; -// // m1 = mfacc-mfcaa; -// // m2 = mfaac-mfcca; -// // vvz+= m0; -// // m1 += m2; -// // vvz+= m1; -// // vz2 = mfbac-mfbca; -// // m0 = mfbcc-mfbaa; -// // m1 = mfabc-mfcba; -// // m2 = mfcbc-mfaba; -// // vz2+= m0; -// // m1 += m2; -// // vz2+= m1; -// // vvz+= vz2; -// // vz2 = mfbbc-mfbba; -// // vvz+= vz2; -// //} -// vx2 = vvx*vvx; -// vy2 = vvy*vvy; -// vz2 = vvz*vvz; -// //////////////////////////////////////////////////////////////////////////////////// -// real wadjust; -// real qudricLimitP = 0.01f;// * 0.0001f; -// real qudricLimitM = 0.01f;// * 0.0001f; -// real qudricLimitD = 0.01f;// * 0.001f; -// //////////////////////////////////////////////////////////////////////////////////// -// //Hin -// //////////////////////////////////////////////////////////////////////////////////// -// // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Z - Dir -// m2 = mfaaa + mfaac; -// m1 = mfaac - mfaaa; -// m0 = m2 + mfaab; -// mfaaa = m0; -// m0 += c1o36 * oMdrho; -// mfaab = m1 - m0 * vvz; -// mfaac = m2 - two* m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaba + mfabc; -// m1 = mfabc - mfaba; -// m0 = m2 + mfabb; -// mfaba = m0; -// m0 += c1o9 * oMdrho; -// mfabb = m1 - m0 * vvz; -// mfabc = m2 - two* m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaca + mfacc; -// m1 = mfacc - mfaca; -// m0 = m2 + mfacb; -// mfaca = m0; -// m0 += c1o36 * oMdrho; -// mfacb = m1 - m0 * vvz; -// mfacc = m2 - two* m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbaa + mfbac; -// m1 = mfbac - mfbaa; -// m0 = m2 + mfbab; -// mfbaa = m0; -// m0 += c1o9 * oMdrho; -// mfbab = m1 - m0 * vvz; -// mfbac = m2 - two* m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbba + mfbbc; -// m1 = mfbbc - mfbba; -// m0 = m2 + mfbbb; -// mfbba = m0; -// m0 += c4o9 * oMdrho; -// mfbbb = m1 - m0 * vvz; -// mfbbc = m2 - two* m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbca + mfbcc; -// m1 = mfbcc - mfbca; -// m0 = m2 + mfbcb; -// mfbca = m0; -// m0 += c1o9 * oMdrho; -// mfbcb = m1 - m0 * vvz; -// mfbcc = m2 - two* m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcaa + mfcac; -// m1 = mfcac - mfcaa; -// m0 = m2 + mfcab; -// mfcaa = m0; -// m0 += c1o36 * oMdrho; -// mfcab = m1 - m0 * vvz; -// mfcac = m2 - two* m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcba + mfcbc; -// m1 = mfcbc - mfcba; -// m0 = m2 + mfcbb; -// mfcba = m0; -// m0 += c1o9 * oMdrho; -// mfcbb = m1 - m0 * vvz; -// mfcbc = m2 - two* m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcca + mfccc; -// m1 = mfccc - mfcca; -// m0 = m2 + mfccb; -// mfcca = m0; -// m0 += c1o36 * oMdrho; -// mfccb = m1 - m0 * vvz; -// mfccc = m2 - two* m1 * vvz + vz2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Y - Dir -// m2 = mfaaa + mfaca; -// m1 = mfaca - mfaaa; -// m0 = m2 + mfaba; -// mfaaa = m0; -// m0 += c1o6 * oMdrho; -// mfaba = m1 - m0 * vvy; -// mfaca = m2 - two* m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaab + mfacb; -// m1 = mfacb - mfaab; -// m0 = m2 + mfabb; -// mfaab = m0; -// mfabb = m1 - m0 * vvy; -// mfacb = m2 - two* m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaac + mfacc; -// m1 = mfacc - mfaac; -// m0 = m2 + mfabc; -// mfaac = m0; -// m0 += c1o18 * oMdrho; -// mfabc = m1 - m0 * vvy; -// mfacc = m2 - two* m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbaa + mfbca; -// m1 = mfbca - mfbaa; -// m0 = m2 + mfbba; -// mfbaa = m0; -// m0 += c2o3 * oMdrho; -// mfbba = m1 - m0 * vvy; -// mfbca = m2 - two* m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbab + mfbcb; -// m1 = mfbcb - mfbab; -// m0 = m2 + mfbbb; -// mfbab = m0; -// mfbbb = m1 - m0 * vvy; -// mfbcb = m2 - two* m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfbac + mfbcc; -// m1 = mfbcc - mfbac; -// m0 = m2 + mfbbc; -// mfbac = m0; -// m0 += c2o9 * oMdrho; -// mfbbc = m1 - m0 * vvy; -// mfbcc = m2 - two* m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcaa + mfcca; -// m1 = mfcca - mfcaa; -// m0 = m2 + mfcba; -// mfcaa = m0; -// m0 += c1o6 * oMdrho; -// mfcba = m1 - m0 * vvy; -// mfcca = m2 - two* m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcab + mfccb; -// m1 = mfccb - mfcab; -// m0 = m2 + mfcbb; -// mfcab = m0; -// mfcbb = m1 - m0 * vvy; -// mfccb = m2 - two* m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfcac + mfccc; -// m1 = mfccc - mfcac; -// m0 = m2 + mfcbc; -// mfcac = m0; -// m0 += c1o18 * oMdrho; -// mfcbc = m1 - m0 * vvy; -// mfccc = m2 - two* m1 * vvy + vy2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // X - Dir -// m2 = mfaaa + mfcaa; -// m1 = mfcaa - mfaaa; -// m0 = m2 + mfbaa; -// mfaaa = m0; -// m0 += one* oMdrho; -// mfbaa = m1 - m0 * vvx; -// mfcaa = m2 - two* m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaba + mfcba; -// m1 = mfcba - mfaba; -// m0 = m2 + mfbba; -// mfaba = m0; -// mfbba = m1 - m0 * vvx; -// mfcba = m2 - two* m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaca + mfcca; -// m1 = mfcca - mfaca; -// m0 = m2 + mfbca; -// mfaca = m0; -// m0 += c1o3 * oMdrho; -// mfbca = m1 - m0 * vvx; -// mfcca = m2 - two* m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaab + mfcab; -// m1 = mfcab - mfaab; -// m0 = m2 + mfbab; -// mfaab = m0; -// mfbab = m1 - m0 * vvx; -// mfcab = m2 - two* m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfabb + mfcbb; -// m1 = mfcbb - mfabb; -// m0 = m2 + mfbbb; -// mfabb = m0; -// mfbbb = m1 - m0 * vvx; -// mfcbb = m2 - two* m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfacb + mfccb; -// m1 = mfccb - mfacb; -// m0 = m2 + mfbcb; -// mfacb = m0; -// mfbcb = m1 - m0 * vvx; -// mfccb = m2 - two* m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfaac + mfcac; -// m1 = mfcac - mfaac; -// m0 = m2 + mfbac; -// mfaac = m0; -// m0 += c1o3 * oMdrho; -// mfbac = m1 - m0 * vvx; -// mfcac = m2 - two* m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfabc + mfcbc; -// m1 = mfcbc - mfabc; -// m0 = m2 + mfbbc; -// mfabc = m0; -// mfbbc = m1 - m0 * vvx; -// mfcbc = m2 - two* m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// m2 = mfacc + mfccc; -// m1 = mfccc - mfacc; -// m0 = m2 + mfbcc; -// mfacc = m0; -// m0 += c1o9 * oMdrho; -// mfbcc = m1 - m0 * vvx; -// mfccc = m2 - two* m1 * vvx + vx2 * m0; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// -// //////////////////////////////////////////////////////////////////////////////////// -// // Cumulants -// //////////////////////////////////////////////////////////////////////////////////// -// real OxxPyyPzz = one; //set the bulk viscosity one is high / two is very low and zero is (too) high ... (also called omega 2) -// -// //////////////////////////////////////////////////////////// -// //3. -// ////////////////////////////// -// real OxyyPxzz = eight*(-two + omega)*(one + two*omega) / (-eight - fourteen*omega + seven*omega*omega);//one; -// real OxyyMxzz = eight*(-two + omega)*(-seven + four*omega) / (fiftysix - fifty*omega + nine*omega*omega);//one; -// real Oxyz = twentyfour*(-two + omega)*(-two - seven*omega + three*omega*omega) / (fourtyeight + c152*omega - c130*omega*omega + twentynine*omega*omega*omega);//one; -// //////////////////////////////////////////////////////////// -// //4. -// ////////////////////////////// -// real O4 = one; -// ////////////////////////////// -// //real O4 = omega;//TRT -// //////////////////////////////////////////////////////////// -// //5. -// ////////////////////////////// -// real O5 = one; -// //////////////////////////////////////////////////////////// -// //6. -// ////////////////////////////// -// real O6 = one; -// //////////////////////////////////////////////////////////// -// -// -// //central moments to cumulants -// //4. -// real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + two * mfbba * mfbab) / rho; -// real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + two * mfbba * mfabb) / rho; -// real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + two * mfbab * mfabb) / rho; -// -// real CUMcca = mfcca - (((mfcaa * mfaca + two * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); -// real CUMcac = mfcac - (((mfcaa * mfaac + two * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); -// real CUMacc = mfacc - (((mfaac * mfaca + two * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); -// -// //5. -// real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + four * mfabb * mfbbb + two * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; -// real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + four * mfbab * mfbbb + two * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; -// real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + four * mfbba * mfbbb + two * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; -// -// //6. -// -// real CUMccc = mfccc + ((-four * mfbbb * mfbbb -// - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -// - four * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) -// - two * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho -// + (four * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) -// + two * (mfcaa * mfaca * mfaac) -// + sixteen * mfbba * mfbab * mfabb) / (rho * rho) -// - c1o3 * (mfacc + mfcac + mfcca) / rho -// - c1o9 * (mfcaa + mfaca + mfaac) / rho -// + (two * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) -// + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 -// + c1o27*((drho * drho - drho) / (rho*rho))); -// -// //2. -// // linear combinations -// real mxxPyyPzz = mfcaa + mfaca + mfaac; -// real mxxMyy = mfcaa - mfaca; -// real mxxMzz = mfcaa - mfaac; -// -// //////////////////////////////////////////////////////////////////////////// -// real Dxy = -three*omega*mfbba; -// real Dxz = -three*omega*mfbab; -// real Dyz = -three*omega*mfabb; -// -// //3. -// // linear combinations -// -// real mxxyPyzz = mfcba + mfabc; -// real mxxyMyzz = mfcba - mfabc; -// -// real mxxzPyyz = mfcab + mfacb; -// real mxxzMyyz = mfcab - mfacb; -// -// real mxyyPxzz = mfbca + mfbac; -// real mxyyMxzz = mfbca - mfbac; -// -// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) -// -// real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); -// real dyuy = dxux + omega * c3o2 * mxxMyy; -// real dzuz = dxux + omega * c3o2 * mxxMzz; -// -// mgabb = dxux; -// mgbab = dyuy; -// mgbba = dzuz; -// -// mgcbb = dxux; -// mgbcb = dyuy; -// mgbbc = dzuz; -// -// //relax -// //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; -// //mxxMyy += omega * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); -// //mxxMzz += omega * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); -// mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz) -// + (six - three * (omega + OxxPyyPzz) + omega * OxxPyyPzz) / (three * omega) * ((dxux * dxux + dyuy * dyuy + dzuz * dzuz) / rho + vvx * dxxux + vvy * dyyuy + vvz * dzzuz); -// mxxMyy += omega * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy) -// + omega * (two*(one / omega - c1o2) * (one / omega - c1o2) - c1o6) * ((dxux * dxux - dyuy * dyuy) / rho + vvx * dxxux - vvy * dyyuy); -// mxxMzz += omega * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz) -// + omega * (two*(one / omega - c1o2) * (one / omega - c1o2) - c1o6) * ((dxux * dxux - dzuz * dzuz) / rho + vvx * dxxux - vvz * dzzuz); -// -// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// -// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ////no correction -// //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; -// //mxxMyy += -(-omega) * (-mxxMyy); -// //mxxMzz += -(-omega) * (-mxxMzz); -// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// mfabb += omega * (-mfabb); -// mfbab += omega * (-mfbab); -// mfbba += omega * (-mfbba); -// ////////////////////////////////////////////////////////////////////////// -// -// // linear combinations back -// mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); -// mfaca = c1o3 * (-two* mxxMyy + mxxMzz + mxxPyyPzz); -// mfaac = c1o3 * (mxxMyy - two* mxxMzz + mxxPyyPzz); -// -// -// //relax -// ////////////////////////////////////////////////////////////////////////// -// //das ist der limiter -// wadjust = Oxyz + (one - Oxyz)*abs(mfbbb) / (abs(mfbbb) + qudricLimitD); -// mfbbb += wadjust * (-mfbbb); -// wadjust = OxyyPxzz + (one - OxyyPxzz)*abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimitP); -// mxxyPyzz += wadjust * (-mxxyPyzz); -// wadjust = OxyyMxzz + (one - OxyyMxzz)*abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimitM); -// mxxyMyzz += wadjust * (-mxxyMyzz); -// wadjust = OxyyPxzz + (one - OxyyPxzz)*abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimitP); -// mxxzPyyz += wadjust * (-mxxzPyyz); -// wadjust = OxyyMxzz + (one - OxyyMxzz)*abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimitM); -// mxxzMyyz += wadjust * (-mxxzMyyz); -// wadjust = OxyyPxzz + (one - OxyyPxzz)*abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimitP); -// mxyyPxzz += wadjust * (-mxyyPxzz); -// wadjust = OxyyMxzz + (one - OxyyMxzz)*abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimitM); -// mxyyMxzz += wadjust * (-mxyyMxzz); -// ////////////////////////////////////////////////////////////////////////// -// //ohne limiter -// //mfbbb += OxyyMxzz * (-mfbbb); -// //mxxyPyzz += OxyyPxzz * (-mxxyPyzz); -// //mxxyMyzz += OxyyMxzz * (-mxxyMyzz); -// //mxxzPyyz += OxyyPxzz * (-mxxzPyyz); -// //mxxzMyyz += OxyyMxzz * (-mxxzMyyz); -// //mxyyPxzz += OxyyPxzz * (-mxyyPxzz); -// //mxyyMxzz += OxyyMxzz * (-mxyyMxzz); -// ////////////////////////////////////////////////////////////////////////// -// -// // linear combinations back -// mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; -// mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; -// mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; -// mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; -// mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; -// mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; -// -// //4. -// ////////////////////////////////////////////////////////////////////////// -// //mit limiter -// // wadjust = O4+(one-O4)*abs(CUMacc)/(abs(CUMacc)+qudricLimit); -// //CUMacc += wadjust * (-CUMacc); -// // wadjust = O4+(one-O4)*abs(CUMcac)/(abs(CUMcac)+qudricLimit); -// //CUMcac += wadjust * (-CUMcac); -// // wadjust = O4+(one-O4)*abs(CUMcca)/(abs(CUMcca)+qudricLimit); -// //CUMcca += wadjust * (-CUMcca); -// -// // wadjust = O4+(one-O4)*abs(CUMbbc)/(abs(CUMbbc)+qudricLimit); -// //CUMbbc += wadjust * (-CUMbbc); -// // wadjust = O4+(one-O4)*abs(CUMbcb)/(abs(CUMbcb)+qudricLimit); -// //CUMbcb += wadjust * (-CUMbcb); -// // wadjust = O4+(one-O4)*abs(CUMcbb)/(abs(CUMcbb)+qudricLimit); -// //CUMcbb += wadjust * (-CUMcbb); -// ////////////////////////////////////////////////////////////////////////// -// //ohne limiter -// //CUMacc += O4 * (-CUMacc); -// //CUMcac += O4 * (-CUMcac); -// //CUMcca += O4 * (-CUMcca); -// //CUMbbc += O4 * (-CUMbbc); -// //CUMbcb += O4 * (-CUMbcb); -// //CUMcbb += O4 * (-CUMcbb); -// CUMacc = -O4*(one / omega - c1o2)*(dyuy + dzuz)*c2o3 *(four + two*omega - three*omega*omega) / (two - seven*omega + five*omega*omega) + (one - O4) * (CUMacc); -// CUMcac = -O4*(one / omega - c1o2)*(dxux + dzuz)*c2o3 *(four + two*omega - three*omega*omega) / (two - seven*omega + five*omega*omega) + (one - O4) * (CUMcac); -// CUMcca = -O4*(one / omega - c1o2)*(dyuy + dxux)*c2o3 *(four + two*omega - three*omega*omega) / (two - seven*omega + five*omega*omega) + (one - O4) * (CUMcca); -// CUMbbc = -O4*(one / omega - c1o2)*Dxy*c1o3 *(four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega) + (one - O4) * (CUMbbc); -// CUMbcb = -O4*(one / omega - c1o2)*Dxz*c1o3 *(four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega) + (one - O4) * (CUMbcb); -// CUMcbb = -O4*(one / omega - c1o2)*Dyz*c1o3 *(four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega) + (one - O4) * (CUMcbb); -// ////////////////////////////////////////////////////////////////////////// -// -// -// //5. -// CUMbcc += O5 * (-CUMbcc); -// CUMcbc += O5 * (-CUMcbc); -// CUMccb += O5 * (-CUMccb); -// -// //6. -// CUMccc += O6 * (-CUMccc); -// -// -// -// //back cumulants to central moments -// //4. -// mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + two * mfbba * mfbab) / rho; -// mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + two * mfbba * mfabb) / rho; -// mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + two * mfbab * mfabb) / rho; -// -// mfcca = CUMcca + (((mfcaa * mfaca + two * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); -// mfcac = CUMcac + (((mfcaa * mfaac + two * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); -// mfacc = CUMacc + (((mfaac * mfaca + two * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); -// -// //5. -// mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + four * mfabb * mfbbb + two * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; -// mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + four * mfbab * mfbbb + two * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; -// mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + four * mfbba * mfbbb + two * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; -// -// //6. -// -// mfccc = CUMccc - ((-four * mfbbb * mfbbb -// - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) -// - four * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) -// - two * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho -// + (four * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) -// + two * (mfcaa * mfaca * mfaac) -// + sixteen * mfbba * mfbab * mfabb) / (rho * rho) -// - c1o3 * (mfacc + mfcac + mfcca) / rho -// - c1o9 * (mfcaa + mfaca + mfaac) / rho -// + (two * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) -// + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 -// + c1o27*((drho * drho - drho) / (rho*rho))); -// //////////////////////////////////////////////////////////////////////////////////// -// -// //////////////////////////////////////////////////////////////////////////////////// -// //the force be with you -// mfbaa = -mfbaa; -// mfaba = -mfaba; -// mfaab = -mfaab; -// //////////////////////////////////////////////////////////////////////////////////// -// -// -// //////////////////////////////////////////////////////////////////////////////////// -// //back -// //////////////////////////////////////////////////////////////////////////////////// -// //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Z - Dir -// m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + one* oMdrho) * (vz2 - vvz) * c1o2; -// m1 = -mfaac - two* mfaab * vvz + mfaaa * (one - vz2) - one* oMdrho * vz2; -// m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + one* oMdrho) * (vz2 + vvz) * c1o2; -// mfaaa = m0; -// mfaab = m1; -// mfaac = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; -// m1 = -mfabc - two* mfabb * vvz + mfaba * (one - vz2); -// m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; -// mfaba = m0; -// mfabb = m1; -// mfabc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; -// m1 = -mfacc - two* mfacb * vvz + mfaca * (one - vz2) - c1o3 * oMdrho * vz2; -// m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; -// mfaca = m0; -// mfacb = m1; -// mfacc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; -// m1 = -mfbac - two* mfbab * vvz + mfbaa * (one - vz2); -// m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; -// mfbaa = m0; -// mfbab = m1; -// mfbac = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; -// m1 = -mfbbc - two* mfbbb * vvz + mfbba * (one - vz2); -// m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; -// mfbba = m0; -// mfbbb = m1; -// mfbbc = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; -// m1 = -mfbcc - two* mfbcb * vvz + mfbca * (one - vz2); -// m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; -// mfbca = m0; -// mfbcb = m1; -// mfbcc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; -// m1 = -mfcac - two* mfcab * vvz + mfcaa * (one - vz2) - c1o3 * oMdrho * vz2; -// m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; -// mfcaa = m0; -// mfcab = m1; -// mfcac = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; -// m1 = -mfcbc - two* mfcbb * vvz + mfcba * (one - vz2); -// m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; -// mfcba = m0; -// mfcbb = m1; -// mfcbc = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; -// m1 = -mfccc - two* mfccb * vvz + mfcca * (one - vz2) - c1o9 * oMdrho * vz2; -// m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; -// mfcca = m0; -// mfccb = m1; -// mfccc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // Y - Dir -// m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfaca - two* mfaba * vvy + mfaaa * (one - vy2) - c1o6 * oMdrho * vy2; -// m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; -// mfaaa = m0; -// mfaba = m1; -// mfaca = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfacb - two* mfabb * vvy + mfaab * (one - vy2) - c2o3 * oMdrho * vy2; -// m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; -// mfaab = m0; -// mfabb = m1; -// mfacb = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfacc - two* mfabc * vvy + mfaac * (one - vy2) - c1o6 * oMdrho * vy2; -// m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; -// mfaac = m0; -// mfabc = m1; -// mfacc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; -// m1 = -mfbca - two* mfbba * vvy + mfbaa * (one - vy2); -// m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; -// mfbaa = m0; -// mfbba = m1; -// mfbca = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; -// m1 = -mfbcb - two* mfbbb * vvy + mfbab * (one - vy2); -// m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; -// mfbab = m0; -// mfbbb = m1; -// mfbcb = m2; -// /////////b////////////////////////////////////////////////////////////////////////// -// m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; -// m1 = -mfbcc - two* mfbbc * vvy + mfbac * (one - vy2); -// m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; -// mfbac = m0; -// mfbbc = m1; -// mfbcc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfcca - two* mfcba * vvy + mfcaa * (one - vy2) - c1o18 * oMdrho * vy2; -// m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; -// mfcaa = m0; -// mfcba = m1; -// mfcca = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfccb - two* mfcbb * vvy + mfcab * (one - vy2) - c2o9 * oMdrho * vy2; -// m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; -// mfcab = m0; -// mfcbb = m1; -// mfccb = m2; -// /////////c////////////////////////////////////////////////////////////////////////// -// m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; -// m1 = -mfccc - two* mfcbc * vvy + mfcac * (one - vy2) - c1o18 * oMdrho * vy2; -// m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; -// mfcac = m0; -// mfcbc = m1; -// mfccc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren -// //////////////////////////////////////////////////////////////////////////////////// -// // X - Dir -// m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcaa - two* mfbaa * vvx + mfaaa * (one - vx2) - c1o36 * oMdrho * vx2; -// m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaaa = m0; -// mfbaa = m1; -// mfcaa = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcba - two* mfbba * vvx + mfaba * (one - vx2) - c1o9 * oMdrho * vx2; -// m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaba = m0; -// mfbba = m1; -// mfcba = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcca - two* mfbca * vvx + mfaca * (one - vx2) - c1o36 * oMdrho * vx2; -// m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaca = m0; -// mfbca = m1; -// mfcca = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcab - two* mfbab * vvx + mfaab * (one - vx2) - c1o9 * oMdrho * vx2; -// m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaab = m0; -// mfbab = m1; -// mfcab = m2; -// ///////////b//////////////////////////////////////////////////////////////////////// -// m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcbb - two* mfbbb * vvx + mfabb * (one - vx2) - c4o9 * oMdrho * vx2; -// m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfabb = m0; -// mfbbb = m1; -// mfcbb = m2; -// ///////////b//////////////////////////////////////////////////////////////////////// -// m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfccb - two* mfbcb * vvx + mfacb * (one - vx2) - c1o9 * oMdrho * vx2; -// m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfacb = m0; -// mfbcb = m1; -// mfccb = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// //////////////////////////////////////////////////////////////////////////////////// -// m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcac - two* mfbac * vvx + mfaac * (one - vx2) - c1o36 * oMdrho * vx2; -// m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; -// mfaac = m0; -// mfbac = m1; -// mfcac = m2; -// ///////////c//////////////////////////////////////////////////////////////////////// -// m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfcbc - two* mfbbc * vvx + mfabc * (one - vx2) - c1o9 * oMdrho * vx2; -// m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; -// mfabc = m0; -// mfbbc = m1; -// mfcbc = m2; -// ///////////c//////////////////////////////////////////////////////////////////////// -// m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; -// m1 = -mfccc - two* mfbcc * vvx + mfacc * (one - vx2) - c1o36 * oMdrho * vx2; -// m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; -// mfacc = m0; -// mfbcc = m1; -// mfccc = m2; -// //////////////////////////////////////////////////////////////////////////////////// -// -// //////////////////////////////////////////////////////////////////////////////////// -// (D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] -// (D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] -// (D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] -// (D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] -// (D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] -// (D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] -// (D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] -// (D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] -// (D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] -// (D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] -// (D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] -// (D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] -// (D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] -// (D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] -// (D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] -// (D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] -// (D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] -// (D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] -// (D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] -// (D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] -// (D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] -// (D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] -// (D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] -// (D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] -// (D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] -// (D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] -// (D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] -// //////////////////////////////////////////////////////////////////////////////////// -// -// (G.g[DIR_P00])[k] = mgabb; -// (G.g[DIR_M00])[kw] = mgcbb; -// (G.g[DIR_0P0])[k] = mgbab; -// (G.g[DIR_0M0])[ks] = mgbcb; -// (G.g[DIR_00P])[k] = mgbba; -// (G.g[DIR_00M])[kb] = mgbbc; -// } -// } -//} -////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/gpu/VirtualFluids_GPU/GPU/ExchangeData27.cu b/src/gpu/VirtualFluids_GPU/GPU/ExchangeData27.cu deleted file mode 100644 index 288ec7ff26bae5b7415e08f4d39aa8cd2ffa4a9b..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/GPU/ExchangeData27.cu +++ /dev/null @@ -1,1072 +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 getSendFsPost27(real* DD, - real* bufferFs, - int* sendIndex, - int buffmax, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<buffmax) - { - //////////////////////////////////////////////////////////////////////////////// - //set index - unsigned int kIndex = sendIndex[k]; - unsigned int kzero = kIndex; - unsigned int ke = kIndex; - unsigned int kw = neighborX[kIndex]; - unsigned int kn = kIndex; - unsigned int ks = neighborY[kIndex]; - unsigned int kt = kIndex; - unsigned int kb = neighborZ[kIndex]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = kIndex; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = kIndex; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = kIndex; - 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 = kIndex; - unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - //set Pointer for Fs - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //set Pointer for Buffer Fs - Distributions27 Dbuff; - Dbuff.f[DIR_P00] = &bufferFs[DIR_P00 * buffmax]; - Dbuff.f[DIR_M00] = &bufferFs[DIR_M00 * buffmax]; - Dbuff.f[DIR_0P0] = &bufferFs[DIR_0P0 * buffmax]; - Dbuff.f[DIR_0M0] = &bufferFs[DIR_0M0 * buffmax]; - Dbuff.f[DIR_00P] = &bufferFs[DIR_00P * buffmax]; - Dbuff.f[DIR_00M] = &bufferFs[DIR_00M * buffmax]; - Dbuff.f[DIR_PP0] = &bufferFs[DIR_PP0 * buffmax]; - Dbuff.f[DIR_MM0] = &bufferFs[DIR_MM0 * buffmax]; - Dbuff.f[DIR_PM0] = &bufferFs[DIR_PM0 * buffmax]; - Dbuff.f[DIR_MP0] = &bufferFs[DIR_MP0 * buffmax]; - Dbuff.f[DIR_P0P] = &bufferFs[DIR_P0P * buffmax]; - Dbuff.f[DIR_M0M] = &bufferFs[DIR_M0M * buffmax]; - Dbuff.f[DIR_P0M] = &bufferFs[DIR_P0M * buffmax]; - Dbuff.f[DIR_M0P] = &bufferFs[DIR_M0P * buffmax]; - Dbuff.f[DIR_0PP] = &bufferFs[DIR_0PP * buffmax]; - Dbuff.f[DIR_0MM] = &bufferFs[DIR_0MM * buffmax]; - Dbuff.f[DIR_0PM] = &bufferFs[DIR_0PM * buffmax]; - Dbuff.f[DIR_0MP] = &bufferFs[DIR_0MP * buffmax]; - Dbuff.f[DIR_000] = &bufferFs[DIR_000 * buffmax]; - Dbuff.f[DIR_PPP] = &bufferFs[DIR_PPP * buffmax]; - Dbuff.f[DIR_MMP] = &bufferFs[DIR_MMP * buffmax]; - Dbuff.f[DIR_PMP] = &bufferFs[DIR_PMP * buffmax]; - Dbuff.f[DIR_MPP] = &bufferFs[DIR_MPP * buffmax]; - Dbuff.f[DIR_PPM] = &bufferFs[DIR_PPM * buffmax]; - Dbuff.f[DIR_MMM] = &bufferFs[DIR_MMM * buffmax]; - Dbuff.f[DIR_PMM] = &bufferFs[DIR_PMM * buffmax]; - Dbuff.f[DIR_MPM] = &bufferFs[DIR_MPM * buffmax]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //copy to buffer - //(Dbuff.f[DIR_P00])[k] = (D.f[DIR_P00])[ke ]; - //(Dbuff.f[DIR_M00])[k] = (D.f[DIR_M00])[kw ]; - //(Dbuff.f[DIR_0P0])[k] = (D.f[DIR_0P0])[kn ]; - //(Dbuff.f[DIR_0M0])[k] = (D.f[DIR_0M0])[ks ]; - //(Dbuff.f[DIR_00P])[k] = (D.f[DIR_00P])[kt ]; - //(Dbuff.f[DIR_00M])[k] = (D.f[DIR_00M])[kb ]; - //(Dbuff.f[DIR_PP0])[k] = (D.f[DIR_PP0])[kne ]; - //(Dbuff.f[DIR_MM0])[k] = (D.f[DIR_MM0])[ksw ]; - //(Dbuff.f[DIR_PM0])[k] = (D.f[DIR_PM0])[kse ]; - //(Dbuff.f[DIR_MP0])[k] = (D.f[DIR_MP0])[knw ]; - //(Dbuff.f[DIR_P0P])[k] = (D.f[DIR_P0P])[kte ]; - //(Dbuff.f[DIR_M0M])[k] = (D.f[DIR_M0M])[kbw ]; - //(Dbuff.f[DIR_P0M])[k] = (D.f[DIR_P0M])[kbe ]; - //(Dbuff.f[DIR_M0P])[k] = (D.f[DIR_M0P])[ktw ]; - //(Dbuff.f[DIR_0PP])[k] = (D.f[DIR_0PP])[ktn ]; - //(Dbuff.f[DIR_0MM])[k] = (D.f[DIR_0MM])[kbs ]; - //(Dbuff.f[DIR_0PM])[k] = (D.f[DIR_0PM])[kbn ]; - //(Dbuff.f[DIR_0MP])[k] = (D.f[DIR_0MP])[kts ]; - //(Dbuff.f[DIR_000])[k] = (D.f[DIR_000])[kzero]; - //(Dbuff.f[DIR_PPP])[k] = (D.f[DIR_PPP])[ktne ]; - //(Dbuff.f[DIR_MMP])[k] = (D.f[DIR_MMP])[ktsw ]; - //(Dbuff.f[DIR_PMP])[k] = (D.f[DIR_PMP])[ktse ]; - //(Dbuff.f[DIR_MPP])[k] = (D.f[DIR_MPP])[ktnw ]; - //(Dbuff.f[DIR_PPM])[k] = (D.f[DIR_PPM])[kbne ]; - //(Dbuff.f[DIR_MMM])[k] = (D.f[DIR_MMM])[kbsw ]; - //(Dbuff.f[DIR_PMM])[k] = (D.f[DIR_PMM])[kbse ]; - //(Dbuff.f[DIR_MPM])[k] = (D.f[DIR_MPM])[kbnw ]; - (Dbuff.f[DIR_P00])[k] = (D.f[DIR_M00])[kw ]; - (Dbuff.f[DIR_M00])[k] = (D.f[DIR_P00])[ke ]; - (Dbuff.f[DIR_0P0])[k] = (D.f[DIR_0M0])[ks ]; - (Dbuff.f[DIR_0M0])[k] = (D.f[DIR_0P0])[kn ]; - (Dbuff.f[DIR_00P])[k] = (D.f[DIR_00M])[kb ]; - (Dbuff.f[DIR_00M])[k] = (D.f[DIR_00P])[kt ]; - (Dbuff.f[DIR_PP0])[k] = (D.f[DIR_MM0])[ksw ]; - (Dbuff.f[DIR_MM0])[k] = (D.f[DIR_PP0])[kne ]; - (Dbuff.f[DIR_PM0])[k] = (D.f[DIR_MP0])[knw ]; - (Dbuff.f[DIR_MP0])[k] = (D.f[DIR_PM0])[kse ]; - (Dbuff.f[DIR_P0P])[k] = (D.f[DIR_M0M])[kbw ]; - (Dbuff.f[DIR_M0M])[k] = (D.f[DIR_P0P])[kte ]; - (Dbuff.f[DIR_P0M])[k] = (D.f[DIR_M0P])[ktw ]; - (Dbuff.f[DIR_M0P])[k] = (D.f[DIR_P0M])[kbe ]; - (Dbuff.f[DIR_0PP])[k] = (D.f[DIR_0MM])[kbs ]; - (Dbuff.f[DIR_0MM])[k] = (D.f[DIR_0PP])[ktn ]; - (Dbuff.f[DIR_0PM])[k] = (D.f[DIR_0MP])[kts ]; - (Dbuff.f[DIR_0MP])[k] = (D.f[DIR_0PM])[kbn ]; - (Dbuff.f[DIR_000])[k] = (D.f[DIR_000])[kzero]; - (Dbuff.f[DIR_PPP])[k] = (D.f[DIR_MMM])[kbsw ]; - (Dbuff.f[DIR_MMP])[k] = (D.f[DIR_PPM])[kbne ]; - (Dbuff.f[DIR_PMP])[k] = (D.f[DIR_MPM])[kbnw ]; - (Dbuff.f[DIR_MPP])[k] = (D.f[DIR_PMM])[kbse ]; - (Dbuff.f[DIR_PPM])[k] = (D.f[DIR_MMP])[ktsw ]; - (Dbuff.f[DIR_MMM])[k] = (D.f[DIR_PPP])[ktne ]; - (Dbuff.f[DIR_PMM])[k] = (D.f[DIR_MPP])[ktnw ]; - (Dbuff.f[DIR_MPM])[k] = (D.f[DIR_PMP])[ktse ]; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -__global__ void setRecvFsPost27(real* DD, - real* bufferFs, - int* recvIndex, - int buffmax, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<buffmax) - { - //////////////////////////////////////////////////////////////////////////////// - //set index - unsigned int kIndex = recvIndex[k]; - unsigned int kzero = kIndex; - unsigned int ke = kIndex; - unsigned int kw = neighborX[kIndex]; - unsigned int kn = kIndex; - unsigned int ks = neighborY[kIndex]; - unsigned int kt = kIndex; - unsigned int kb = neighborZ[kIndex]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = kIndex; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = kIndex; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = kIndex; - 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 = kIndex; - unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - //set Pointer for Fs - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //set Pointer for Buffer Fs - Distributions27 Dbuff; - Dbuff.f[DIR_P00] = &bufferFs[DIR_P00 * buffmax]; - Dbuff.f[DIR_M00] = &bufferFs[DIR_M00 * buffmax]; - Dbuff.f[DIR_0P0] = &bufferFs[DIR_0P0 * buffmax]; - Dbuff.f[DIR_0M0] = &bufferFs[DIR_0M0 * buffmax]; - Dbuff.f[DIR_00P] = &bufferFs[DIR_00P * buffmax]; - Dbuff.f[DIR_00M] = &bufferFs[DIR_00M * buffmax]; - Dbuff.f[DIR_PP0] = &bufferFs[DIR_PP0 * buffmax]; - Dbuff.f[DIR_MM0] = &bufferFs[DIR_MM0 * buffmax]; - Dbuff.f[DIR_PM0] = &bufferFs[DIR_PM0 * buffmax]; - Dbuff.f[DIR_MP0] = &bufferFs[DIR_MP0 * buffmax]; - Dbuff.f[DIR_P0P] = &bufferFs[DIR_P0P * buffmax]; - Dbuff.f[DIR_M0M] = &bufferFs[DIR_M0M * buffmax]; - Dbuff.f[DIR_P0M] = &bufferFs[DIR_P0M * buffmax]; - Dbuff.f[DIR_M0P] = &bufferFs[DIR_M0P * buffmax]; - Dbuff.f[DIR_0PP] = &bufferFs[DIR_0PP * buffmax]; - Dbuff.f[DIR_0MM] = &bufferFs[DIR_0MM * buffmax]; - Dbuff.f[DIR_0PM] = &bufferFs[DIR_0PM * buffmax]; - Dbuff.f[DIR_0MP] = &bufferFs[DIR_0MP * buffmax]; - Dbuff.f[DIR_000] = &bufferFs[DIR_000 * buffmax]; - Dbuff.f[DIR_PPP] = &bufferFs[DIR_PPP * buffmax]; - Dbuff.f[DIR_MMP] = &bufferFs[DIR_MMP * buffmax]; - Dbuff.f[DIR_PMP] = &bufferFs[DIR_PMP * buffmax]; - Dbuff.f[DIR_MPP] = &bufferFs[DIR_MPP * buffmax]; - Dbuff.f[DIR_PPM] = &bufferFs[DIR_PPM * buffmax]; - Dbuff.f[DIR_MMM] = &bufferFs[DIR_MMM * buffmax]; - Dbuff.f[DIR_PMM] = &bufferFs[DIR_PMM * buffmax]; - Dbuff.f[DIR_MPM] = &bufferFs[DIR_MPM * buffmax]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //copy from buffer - //(D.f[DIR_P00])[ke ] = (Dbuff.f[DIR_P00])[k]; - //(D.f[DIR_M00])[kw ] = (Dbuff.f[DIR_M00])[k]; - //(D.f[DIR_0P0])[kn ] = (Dbuff.f[DIR_0P0])[k]; - //(D.f[DIR_0M0])[ks ] = (Dbuff.f[DIR_0M0])[k]; - //(D.f[DIR_00P])[kt ] = (Dbuff.f[DIR_00P])[k]; - //(D.f[DIR_00M])[kb ] = (Dbuff.f[DIR_00M])[k]; - //(D.f[DIR_PP0])[kne ] = (Dbuff.f[DIR_PP0])[k]; - //(D.f[DIR_MM0])[ksw ] = (Dbuff.f[DIR_MM0])[k]; - //(D.f[DIR_PM0])[kse ] = (Dbuff.f[DIR_PM0])[k]; - //(D.f[DIR_MP0])[knw ] = (Dbuff.f[DIR_MP0])[k]; - //(D.f[DIR_P0P])[kte ] = (Dbuff.f[DIR_P0P])[k]; - //(D.f[DIR_M0M])[kbw ] = (Dbuff.f[DIR_M0M])[k]; - //(D.f[DIR_P0M])[kbe ] = (Dbuff.f[DIR_P0M])[k]; - //(D.f[DIR_M0P])[ktw ] = (Dbuff.f[DIR_M0P])[k]; - //(D.f[DIR_0PP])[ktn ] = (Dbuff.f[DIR_0PP])[k]; - //(D.f[DIR_0MM])[kbs ] = (Dbuff.f[DIR_0MM])[k]; - //(D.f[DIR_0PM])[kbn ] = (Dbuff.f[DIR_0PM])[k]; - //(D.f[DIR_0MP])[kts ] = (Dbuff.f[DIR_0MP])[k]; - //(D.f[DIR_000])[kzero] = (Dbuff.f[DIR_000])[k]; - //(D.f[DIR_PPP])[ktne ] = (Dbuff.f[DIR_PPP])[k]; - //(D.f[DIR_MMP])[ktsw ] = (Dbuff.f[DIR_MMP])[k]; - //(D.f[DIR_PMP])[ktse ] = (Dbuff.f[DIR_PMP])[k]; - //(D.f[DIR_MPP])[ktnw ] = (Dbuff.f[DIR_MPP])[k]; - //(D.f[DIR_PPM])[kbne ] = (Dbuff.f[DIR_PPM])[k]; - //(D.f[DIR_MMM])[kbsw ] = (Dbuff.f[DIR_MMM])[k]; - //(D.f[DIR_PMM])[kbse ] = (Dbuff.f[DIR_PMM])[k]; - //(D.f[DIR_MPM])[kbnw ] = (Dbuff.f[DIR_MPM])[k]; - (D.f[DIR_M00])[kw ] = (Dbuff.f[DIR_P00])[k]; - (D.f[DIR_P00])[ke ] = (Dbuff.f[DIR_M00])[k]; - (D.f[DIR_0M0])[ks ] = (Dbuff.f[DIR_0P0])[k]; - (D.f[DIR_0P0])[kn ] = (Dbuff.f[DIR_0M0])[k]; - (D.f[DIR_00M])[kb ] = (Dbuff.f[DIR_00P])[k]; - (D.f[DIR_00P])[kt ] = (Dbuff.f[DIR_00M])[k]; - (D.f[DIR_MM0])[ksw ] = (Dbuff.f[DIR_PP0])[k]; - (D.f[DIR_PP0])[kne ] = (Dbuff.f[DIR_MM0])[k]; - (D.f[DIR_MP0])[knw ] = (Dbuff.f[DIR_PM0])[k]; - (D.f[DIR_PM0])[kse ] = (Dbuff.f[DIR_MP0])[k]; - (D.f[DIR_M0M])[kbw ] = (Dbuff.f[DIR_P0P])[k]; - (D.f[DIR_P0P])[kte ] = (Dbuff.f[DIR_M0M])[k]; - (D.f[DIR_M0P])[ktw ] = (Dbuff.f[DIR_P0M])[k]; - (D.f[DIR_P0M])[kbe ] = (Dbuff.f[DIR_M0P])[k]; - (D.f[DIR_0MM])[kbs ] = (Dbuff.f[DIR_0PP])[k]; - (D.f[DIR_0PP])[ktn ] = (Dbuff.f[DIR_0MM])[k]; - (D.f[DIR_0MP])[kts ] = (Dbuff.f[DIR_0PM])[k]; - (D.f[DIR_0PM])[kbn ] = (Dbuff.f[DIR_0MP])[k]; - (D.f[DIR_000])[kzero] = (Dbuff.f[DIR_000])[k]; - (D.f[DIR_MMM])[kbsw ] = (Dbuff.f[DIR_PPP])[k]; - (D.f[DIR_PPM])[kbne ] = (Dbuff.f[DIR_MMP])[k]; - (D.f[DIR_MPM])[kbnw ] = (Dbuff.f[DIR_PMP])[k]; - (D.f[DIR_PMM])[kbse ] = (Dbuff.f[DIR_MPP])[k]; - (D.f[DIR_MMP])[ktsw ] = (Dbuff.f[DIR_PPM])[k]; - (D.f[DIR_PPP])[ktne ] = (Dbuff.f[DIR_MMM])[k]; - (D.f[DIR_MPP])[ktnw ] = (Dbuff.f[DIR_PMM])[k]; - (D.f[DIR_PMP])[ktse ] = (Dbuff.f[DIR_MPM])[k]; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -__global__ void getSendFsPre27(real* DD, - real* bufferFs, - int* sendIndex, - int buffmax, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<buffmax) - { - //////////////////////////////////////////////////////////////////////////////// - //set index - unsigned int kIndex = sendIndex[k]; - unsigned int kzero = kIndex; - unsigned int ke = kIndex; - unsigned int kw = neighborX[kIndex]; - unsigned int kn = kIndex; - unsigned int ks = neighborY[kIndex]; - unsigned int kt = kIndex; - unsigned int kb = neighborZ[kIndex]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = kIndex; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = kIndex; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = kIndex; - 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 = kIndex; - unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - //set Pointer for Fs - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //set Pointer for Buffer Fs - Distributions27 Dbuff; - Dbuff.f[DIR_P00] = &bufferFs[DIR_P00 * buffmax]; - Dbuff.f[DIR_M00] = &bufferFs[DIR_M00 * buffmax]; - Dbuff.f[DIR_0P0] = &bufferFs[DIR_0P0 * buffmax]; - Dbuff.f[DIR_0M0] = &bufferFs[DIR_0M0 * buffmax]; - Dbuff.f[DIR_00P] = &bufferFs[DIR_00P * buffmax]; - Dbuff.f[DIR_00M] = &bufferFs[DIR_00M * buffmax]; - Dbuff.f[DIR_PP0] = &bufferFs[DIR_PP0 * buffmax]; - Dbuff.f[DIR_MM0] = &bufferFs[DIR_MM0 * buffmax]; - Dbuff.f[DIR_PM0] = &bufferFs[DIR_PM0 * buffmax]; - Dbuff.f[DIR_MP0] = &bufferFs[DIR_MP0 * buffmax]; - Dbuff.f[DIR_P0P] = &bufferFs[DIR_P0P * buffmax]; - Dbuff.f[DIR_M0M] = &bufferFs[DIR_M0M * buffmax]; - Dbuff.f[DIR_P0M] = &bufferFs[DIR_P0M * buffmax]; - Dbuff.f[DIR_M0P] = &bufferFs[DIR_M0P * buffmax]; - Dbuff.f[DIR_0PP] = &bufferFs[DIR_0PP * buffmax]; - Dbuff.f[DIR_0MM] = &bufferFs[DIR_0MM * buffmax]; - Dbuff.f[DIR_0PM] = &bufferFs[DIR_0PM * buffmax]; - Dbuff.f[DIR_0MP] = &bufferFs[DIR_0MP * buffmax]; - Dbuff.f[DIR_000] = &bufferFs[DIR_000 * buffmax]; - Dbuff.f[DIR_PPP] = &bufferFs[DIR_PPP * buffmax]; - Dbuff.f[DIR_MMP] = &bufferFs[DIR_MMP * buffmax]; - Dbuff.f[DIR_PMP] = &bufferFs[DIR_PMP * buffmax]; - Dbuff.f[DIR_MPP] = &bufferFs[DIR_MPP * buffmax]; - Dbuff.f[DIR_PPM] = &bufferFs[DIR_PPM * buffmax]; - Dbuff.f[DIR_MMM] = &bufferFs[DIR_MMM * buffmax]; - Dbuff.f[DIR_PMM] = &bufferFs[DIR_PMM * buffmax]; - Dbuff.f[DIR_MPM] = &bufferFs[DIR_MPM * buffmax]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //copy to buffer - (Dbuff.f[DIR_P00])[k] = (D.f[DIR_P00])[ke ]; - (Dbuff.f[DIR_M00])[k] = (D.f[DIR_M00])[kw ]; - (Dbuff.f[DIR_0P0])[k] = (D.f[DIR_0P0])[kn ]; - (Dbuff.f[DIR_0M0])[k] = (D.f[DIR_0M0])[ks ]; - (Dbuff.f[DIR_00P])[k] = (D.f[DIR_00P])[kt ]; - (Dbuff.f[DIR_00M])[k] = (D.f[DIR_00M])[kb ]; - (Dbuff.f[DIR_PP0])[k] = (D.f[DIR_PP0])[kne ]; - (Dbuff.f[DIR_MM0])[k] = (D.f[DIR_MM0])[ksw ]; - (Dbuff.f[DIR_PM0])[k] = (D.f[DIR_PM0])[kse ]; - (Dbuff.f[DIR_MP0])[k] = (D.f[DIR_MP0])[knw ]; - (Dbuff.f[DIR_P0P])[k] = (D.f[DIR_P0P])[kte ]; - (Dbuff.f[DIR_M0M])[k] = (D.f[DIR_M0M])[kbw ]; - (Dbuff.f[DIR_P0M])[k] = (D.f[DIR_P0M])[kbe ]; - (Dbuff.f[DIR_M0P])[k] = (D.f[DIR_M0P])[ktw ]; - (Dbuff.f[DIR_0PP])[k] = (D.f[DIR_0PP])[ktn ]; - (Dbuff.f[DIR_0MM])[k] = (D.f[DIR_0MM])[kbs ]; - (Dbuff.f[DIR_0PM])[k] = (D.f[DIR_0PM])[kbn ]; - (Dbuff.f[DIR_0MP])[k] = (D.f[DIR_0MP])[kts ]; - (Dbuff.f[DIR_000])[k] = (D.f[DIR_000])[kzero]; - (Dbuff.f[DIR_PPP])[k] = (D.f[DIR_PPP])[ktne ]; - (Dbuff.f[DIR_MMP])[k] = (D.f[DIR_MMP])[ktsw ]; - (Dbuff.f[DIR_PMP])[k] = (D.f[DIR_PMP])[ktse ]; - (Dbuff.f[DIR_MPP])[k] = (D.f[DIR_MPP])[ktnw ]; - (Dbuff.f[DIR_PPM])[k] = (D.f[DIR_PPM])[kbne ]; - (Dbuff.f[DIR_MMM])[k] = (D.f[DIR_MMM])[kbsw ]; - (Dbuff.f[DIR_PMM])[k] = (D.f[DIR_PMM])[kbse ]; - (Dbuff.f[DIR_MPM])[k] = (D.f[DIR_MPM])[kbnw ]; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -__global__ void setRecvFsPre27(real* DD, - real* bufferFs, - int* recvIndex, - int buffmax, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<buffmax) - { - //////////////////////////////////////////////////////////////////////////////// - //set index - unsigned int kIndex = recvIndex[k]; - unsigned int kzero = kIndex; - unsigned int ke = kIndex; - unsigned int kw = neighborX[kIndex]; - unsigned int kn = kIndex; - unsigned int ks = neighborY[kIndex]; - unsigned int kt = kIndex; - unsigned int kb = neighborZ[kIndex]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = kIndex; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = kIndex; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = kIndex; - 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 = kIndex; - unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - //set Pointer for Fs - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //set Pointer for Buffer Fs - Distributions27 Dbuff; - Dbuff.f[DIR_P00] = &bufferFs[DIR_P00 * buffmax]; - Dbuff.f[DIR_M00] = &bufferFs[DIR_M00 * buffmax]; - Dbuff.f[DIR_0P0] = &bufferFs[DIR_0P0 * buffmax]; - Dbuff.f[DIR_0M0] = &bufferFs[DIR_0M0 * buffmax]; - Dbuff.f[DIR_00P] = &bufferFs[DIR_00P * buffmax]; - Dbuff.f[DIR_00M] = &bufferFs[DIR_00M * buffmax]; - Dbuff.f[DIR_PP0] = &bufferFs[DIR_PP0 * buffmax]; - Dbuff.f[DIR_MM0] = &bufferFs[DIR_MM0 * buffmax]; - Dbuff.f[DIR_PM0] = &bufferFs[DIR_PM0 * buffmax]; - Dbuff.f[DIR_MP0] = &bufferFs[DIR_MP0 * buffmax]; - Dbuff.f[DIR_P0P] = &bufferFs[DIR_P0P * buffmax]; - Dbuff.f[DIR_M0M] = &bufferFs[DIR_M0M * buffmax]; - Dbuff.f[DIR_P0M] = &bufferFs[DIR_P0M * buffmax]; - Dbuff.f[DIR_M0P] = &bufferFs[DIR_M0P * buffmax]; - Dbuff.f[DIR_0PP] = &bufferFs[DIR_0PP * buffmax]; - Dbuff.f[DIR_0MM] = &bufferFs[DIR_0MM * buffmax]; - Dbuff.f[DIR_0PM] = &bufferFs[DIR_0PM * buffmax]; - Dbuff.f[DIR_0MP] = &bufferFs[DIR_0MP * buffmax]; - Dbuff.f[DIR_000] = &bufferFs[DIR_000 * buffmax]; - Dbuff.f[DIR_PPP] = &bufferFs[DIR_PPP * buffmax]; - Dbuff.f[DIR_MMP] = &bufferFs[DIR_MMP * buffmax]; - Dbuff.f[DIR_PMP] = &bufferFs[DIR_PMP * buffmax]; - Dbuff.f[DIR_MPP] = &bufferFs[DIR_MPP * buffmax]; - Dbuff.f[DIR_PPM] = &bufferFs[DIR_PPM * buffmax]; - Dbuff.f[DIR_MMM] = &bufferFs[DIR_MMM * buffmax]; - Dbuff.f[DIR_PMM] = &bufferFs[DIR_PMM * buffmax]; - Dbuff.f[DIR_MPM] = &bufferFs[DIR_MPM * buffmax]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //copy from buffer - (D.f[DIR_P00])[ke ] = (Dbuff.f[DIR_P00])[k]; - (D.f[DIR_M00])[kw ] = (Dbuff.f[DIR_M00])[k]; - (D.f[DIR_0P0])[kn ] = (Dbuff.f[DIR_0P0])[k]; - (D.f[DIR_0M0])[ks ] = (Dbuff.f[DIR_0M0])[k]; - (D.f[DIR_00P])[kt ] = (Dbuff.f[DIR_00P])[k]; - (D.f[DIR_00M])[kb ] = (Dbuff.f[DIR_00M])[k]; - (D.f[DIR_PP0])[kne ] = (Dbuff.f[DIR_PP0])[k]; - (D.f[DIR_MM0])[ksw ] = (Dbuff.f[DIR_MM0])[k]; - (D.f[DIR_PM0])[kse ] = (Dbuff.f[DIR_PM0])[k]; - (D.f[DIR_MP0])[knw ] = (Dbuff.f[DIR_MP0])[k]; - (D.f[DIR_P0P])[kte ] = (Dbuff.f[DIR_P0P])[k]; - (D.f[DIR_M0M])[kbw ] = (Dbuff.f[DIR_M0M])[k]; - (D.f[DIR_P0M])[kbe ] = (Dbuff.f[DIR_P0M])[k]; - (D.f[DIR_M0P])[ktw ] = (Dbuff.f[DIR_M0P])[k]; - (D.f[DIR_0PP])[ktn ] = (Dbuff.f[DIR_0PP])[k]; - (D.f[DIR_0MM])[kbs ] = (Dbuff.f[DIR_0MM])[k]; - (D.f[DIR_0PM])[kbn ] = (Dbuff.f[DIR_0PM])[k]; - (D.f[DIR_0MP])[kts ] = (Dbuff.f[DIR_0MP])[k]; - (D.f[DIR_000])[kzero] = (Dbuff.f[DIR_000])[k]; - (D.f[DIR_PPP])[ktne ] = (Dbuff.f[DIR_PPP])[k]; - (D.f[DIR_MMP])[ktsw ] = (Dbuff.f[DIR_MMP])[k]; - (D.f[DIR_PMP])[ktse ] = (Dbuff.f[DIR_PMP])[k]; - (D.f[DIR_MPP])[ktnw ] = (Dbuff.f[DIR_MPP])[k]; - (D.f[DIR_PPM])[kbne ] = (Dbuff.f[DIR_PPM])[k]; - (D.f[DIR_MMM])[kbsw ] = (Dbuff.f[DIR_MMM])[k]; - (D.f[DIR_PMM])[kbse ] = (Dbuff.f[DIR_PMM])[k]; - (D.f[DIR_MPM])[kbnw ] = (Dbuff.f[DIR_MPM])[k]; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -__global__ void getSendGsF3( - real* G6, - real* bufferGs, - int* sendIndex, - int buffmax, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //////////////////////////////////////////////////////////////////////////////// - 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 < buffmax) - { - //////////////////////////////////////////////////////////////////////////////// - //set index - unsigned int kIndex = sendIndex[k]; - unsigned int kr = kIndex; - unsigned int kw = neighborX[kIndex]; - unsigned int ks = neighborY[kIndex]; - unsigned int kb = neighborZ[kIndex]; - //////////////////////////////////////////////////////////////////////////////// - //set Pointer for Gs - Distributions6 G; - if (isEvenTimestep) - { - G.g[DIR_P00] = &G6[DIR_P00 * numberOfLBnodes]; - G.g[DIR_M00] = &G6[DIR_M00 * numberOfLBnodes]; - G.g[DIR_0P0] = &G6[DIR_0P0 * numberOfLBnodes]; - G.g[DIR_0M0] = &G6[DIR_0M0 * numberOfLBnodes]; - G.g[DIR_00P] = &G6[DIR_00P * numberOfLBnodes]; - G.g[DIR_00M] = &G6[DIR_00M * numberOfLBnodes]; - } - else - { - G.g[DIR_M00] = &G6[DIR_P00 * numberOfLBnodes]; - G.g[DIR_P00] = &G6[DIR_M00 * numberOfLBnodes]; - G.g[DIR_0M0] = &G6[DIR_0P0 * numberOfLBnodes]; - G.g[DIR_0P0] = &G6[DIR_0M0 * numberOfLBnodes]; - G.g[DIR_00M] = &G6[DIR_00P * numberOfLBnodes]; - G.g[DIR_00P] = &G6[DIR_00M * numberOfLBnodes]; - } - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //set Pointer for Buffer Gs - Distributions6 Dbuff; - Dbuff.g[DIR_P00] = &bufferGs[DIR_P00 * buffmax]; - Dbuff.g[DIR_M00] = &bufferGs[DIR_M00 * buffmax]; - Dbuff.g[DIR_0P0] = &bufferGs[DIR_0P0 * buffmax]; - Dbuff.g[DIR_0M0] = &bufferGs[DIR_0M0 * buffmax]; - Dbuff.g[DIR_00P] = &bufferGs[DIR_00P * buffmax]; - Dbuff.g[DIR_00M] = &bufferGs[DIR_00M * buffmax]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //write Gs to buffer - (Dbuff.g[DIR_P00])[k] = (G.g[DIR_M00])[kw]; - (Dbuff.g[DIR_M00])[k] = (G.g[DIR_P00])[kr]; - (Dbuff.g[DIR_0P0])[k] = (G.g[DIR_0M0])[ks]; - (Dbuff.g[DIR_0M0])[k] = (G.g[DIR_0P0])[kr]; - (Dbuff.g[DIR_00P])[k] = (G.g[DIR_00M])[kb]; - (Dbuff.g[DIR_00M])[k] = (G.g[DIR_00P])[kr]; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -__global__ void setRecvGsF3( - real* G6, - real* bufferGs, - int* recvIndex, - int buffmax, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //////////////////////////////////////////////////////////////////////////////// - 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 < buffmax) - { - //////////////////////////////////////////////////////////////////////////////// - //set index - unsigned int kIndex = recvIndex[k]; - unsigned int kr = kIndex; - unsigned int kw = neighborX[kIndex]; - unsigned int ks = neighborY[kIndex]; - unsigned int kb = neighborZ[kIndex]; - //////////////////////////////////////////////////////////////////////////////// - //set Pointer for Gs - Distributions6 G; - if (isEvenTimestep) - { - G.g[DIR_P00] = &G6[DIR_P00 * numberOfLBnodes]; - G.g[DIR_M00] = &G6[DIR_M00 * numberOfLBnodes]; - G.g[DIR_0P0] = &G6[DIR_0P0 * numberOfLBnodes]; - G.g[DIR_0M0] = &G6[DIR_0M0 * numberOfLBnodes]; - G.g[DIR_00P] = &G6[DIR_00P * numberOfLBnodes]; - G.g[DIR_00M] = &G6[DIR_00M * numberOfLBnodes]; - } - else - { - G.g[DIR_M00] = &G6[DIR_P00 * numberOfLBnodes]; - G.g[DIR_P00] = &G6[DIR_M00 * numberOfLBnodes]; - G.g[DIR_0M0] = &G6[DIR_0P0 * numberOfLBnodes]; - G.g[DIR_0P0] = &G6[DIR_0M0 * numberOfLBnodes]; - G.g[DIR_00M] = &G6[DIR_00P * numberOfLBnodes]; - G.g[DIR_00P] = &G6[DIR_00M * numberOfLBnodes]; - } - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //set Pointer for Buffer Gs - Distributions6 Dbuff; - Dbuff.g[DIR_P00] = &bufferGs[DIR_P00 * buffmax]; - Dbuff.g[DIR_M00] = &bufferGs[DIR_M00 * buffmax]; - Dbuff.g[DIR_0P0] = &bufferGs[DIR_0P0 * buffmax]; - Dbuff.g[DIR_0M0] = &bufferGs[DIR_0M0 * buffmax]; - Dbuff.g[DIR_00P] = &bufferGs[DIR_00P * buffmax]; - Dbuff.g[DIR_00M] = &bufferGs[DIR_00M * buffmax]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //write buffer to Gs - (G.g[DIR_M00])[kw] = (Dbuff.g[DIR_P00])[k]; - (G.g[DIR_P00])[kr] = (Dbuff.g[DIR_M00])[k]; - (G.g[DIR_0M0])[ks] = (Dbuff.g[DIR_0P0])[k]; - (G.g[DIR_0P0])[kr] = (Dbuff.g[DIR_0M0])[k]; - (G.g[DIR_00M])[kb] = (Dbuff.g[DIR_00P])[k]; - (G.g[DIR_00P])[kr] = (Dbuff.g[DIR_00M])[k]; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/gpu/VirtualFluids_GPU/GPU/NoSlipBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/NoSlipBCs27.cu deleted file mode 100644 index 0013ae977d41cb52ce163a53f2f1342d4d7b4c73..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/GPU/NoSlipBCs27.cu +++ /dev/null @@ -1,2548 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// 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/>. -// -//! \file NoSlipBCs27.cu -//! \ingroup GPU -//! \author Martin Schoenherr, Anna Wellmann -//====================================================================================== -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> -#include "LBM/GPUHelperFunctions/KernelUtilities.h" - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -using namespace vf::gpu; - -////////////////////////////////////////////////////////////////////////////// -__global__ void QDevice3rdMomentsComp27( - real* distributions, - int* subgridDistanceIndices, - real* subgridDistances, - unsigned int numberOfBCnodes, - real omega, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[DIR_P00] = &distributions[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &distributions[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &distributions[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &distributions[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &distributions[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &distributions[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &distributions[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &distributions[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &distributions[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &distributions[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &distributions[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &distributions[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &distributions[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &distributions[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &distributions[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &distributions[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &distributions[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &distributions[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &distributions[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &distributions[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &distributions[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &distributions[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &distributions[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &distributions[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &distributions[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &distributions[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &distributions[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &distributions[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &distributions[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &distributions[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &distributions[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &distributions[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &distributions[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &distributions[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &distributions[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &distributions[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &distributions[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &distributions[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &distributions[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &distributions[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &distributions[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &distributions[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &distributions[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &distributions[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &distributions[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &distributions[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &distributions[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &distributions[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &distributions[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &distributions[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &distributions[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &distributions[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &distributions[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &distributions[DIR_PMP * 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 = &subgridDistances[DIR_P00 * numberOfBCnodes]; - q_dirW = &subgridDistances[DIR_M00 * numberOfBCnodes]; - q_dirN = &subgridDistances[DIR_0P0 * numberOfBCnodes]; - q_dirS = &subgridDistances[DIR_0M0 * numberOfBCnodes]; - q_dirT = &subgridDistances[DIR_00P * numberOfBCnodes]; - q_dirB = &subgridDistances[DIR_00M * numberOfBCnodes]; - q_dirNE = &subgridDistances[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &subgridDistances[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &subgridDistances[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &subgridDistances[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &subgridDistances[DIR_P0P * numberOfBCnodes]; - q_dirBW = &subgridDistances[DIR_M0M * numberOfBCnodes]; - q_dirBE = &subgridDistances[DIR_P0M * numberOfBCnodes]; - q_dirTW = &subgridDistances[DIR_M0P * numberOfBCnodes]; - q_dirTN = &subgridDistances[DIR_0PP * numberOfBCnodes]; - q_dirBS = &subgridDistances[DIR_0MM * numberOfBCnodes]; - q_dirBN = &subgridDistances[DIR_0PM * numberOfBCnodes]; - q_dirTS = &subgridDistances[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &subgridDistances[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &subgridDistances[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &subgridDistances[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &subgridDistances[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &subgridDistances[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &subgridDistances[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &subgridDistances[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &subgridDistances[DIR_MPM * numberOfBCnodes]; - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int numberOfNodesK = subgridDistanceIndices[k]; - unsigned int kzero= numberOfNodesK; - unsigned int ke = numberOfNodesK; - unsigned int kw = neighborX[numberOfNodesK]; - unsigned int kn = numberOfNodesK; - unsigned int ks = neighborY[numberOfNodesK]; - unsigned int kt = numberOfNodesK; - unsigned int kb = neighborZ[numberOfNodesK]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = numberOfNodesK; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = numberOfNodesK; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = numberOfNodesK; - 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 = numberOfNodesK; - 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[DIR_P00])[ke ]; - f_E = (D.f[DIR_M00])[kw ]; - f_S = (D.f[DIR_0P0])[kn ]; - f_N = (D.f[DIR_0M0])[ks ]; - f_B = (D.f[DIR_00P])[kt ]; - f_T = (D.f[DIR_00M])[kb ]; - f_SW = (D.f[DIR_PP0])[kne ]; - f_NE = (D.f[DIR_MM0])[ksw ]; - f_NW = (D.f[DIR_PM0])[kse ]; - f_SE = (D.f[DIR_MP0])[knw ]; - f_BW = (D.f[DIR_P0P])[kte ]; - f_TE = (D.f[DIR_M0M])[kbw ]; - f_TW = (D.f[DIR_P0M])[kbe ]; - f_BE = (D.f[DIR_M0P])[ktw ]; - f_BS = (D.f[DIR_0PP])[ktn ]; - f_TN = (D.f[DIR_0MM])[kbs ]; - f_TS = (D.f[DIR_0PM])[kbn ]; - f_BN = (D.f[DIR_0MP])[kts ]; - f_BSW = (D.f[DIR_PPP])[ktne ]; - f_BNE = (D.f[DIR_MMP])[ktsw ]; - f_BNW = (D.f[DIR_PMP])[ktse ]; - f_BSE = (D.f[DIR_MPP])[ktnw ]; - f_TSW = (D.f[DIR_PPM])[kbne ]; - f_TNE = (D.f[DIR_MMM])[kbsw ]; - f_TNW = (D.f[DIR_PMM])[kbse ]; - f_TSE = (D.f[DIR_MPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - real vx1, vx2, vx3, drho, feq, q, m3; - 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[DIR_000])[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); - - ////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D.f[DIR_P00] = &distributions[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &distributions[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &distributions[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &distributions[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &distributions[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &distributions[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &distributions[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &distributions[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &distributions[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &distributions[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &distributions[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &distributions[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &distributions[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &distributions[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &distributions[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &distributions[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &distributions[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &distributions[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &distributions[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &distributions[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &distributions[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &distributions[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &distributions[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &distributions[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &distributions[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &distributions[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &distributions[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &distributions[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &distributions[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &distributions[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &distributions[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &distributions[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &distributions[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &distributions[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &distributions[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &distributions[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &distributions[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &distributions[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &distributions[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &distributions[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &distributions[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &distributions[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &distributions[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &distributions[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &distributions[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &distributions[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &distributions[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &distributions[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &distributions[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &distributions[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &distributions[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &distributions[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &distributions[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &distributions[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[DIR_000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - //ToDo anders klammern !!!!!! - - q = q_dirE[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_E - f_W - c2o1 * drho * c2o27 * (c3o1*( vx1 )); - feq=c2o27* (drho/*+three*( vx1 )*/+c9o2*( vx1 )*( vx1 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M00])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W-m3+(f_E+f_W-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_E+f_W))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_M00])[kw]=zero; - } - - q = q_dirW[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_W - f_E - c2o1 * drho * c2o27 * (c3o1*(-vx1 )); - feq=c2o27* (drho/*+three*(-vx1 )*/+c9o2*(-vx1 )*(-vx1 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P00])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E-m3+(f_W+f_E-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_W+f_E))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_P00])[ke]=zero; - } - - q = q_dirN[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_N - f_S - c2o1 * drho * c2o27 * (c3o1*( vx2 )); - feq=c2o27* (drho/*+three*( vx2 )*/+c9o2*( vx2 )*( vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0M0])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S-m3+(f_N+f_S-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_N+f_S))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_0M0])[ks]=zero; - } - - q = q_dirS[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_S - f_N - c2o1 * drho * c2o27 * (c3o1*( -vx2 )); - feq=c2o27* (drho/*+three*( -vx2 )*/+c9o2*( -vx2 )*( -vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0P0])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N-m3+(f_S+f_N-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_S+f_N))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_0P0])[kn]=zero; - } - - q = q_dirT[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_T - f_B - c2o1 * drho * c2o27 * (c3o1*( vx3)); - feq=c2o27* (drho/*+three*( vx3)*/+c9o2*( vx3)*( vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_00M])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B-m3+(f_T+f_B-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_T+f_B))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_00M])[kb]=one; - } - - q = q_dirB[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_B - f_T - c2o1 * drho * c2o27 * (c3o1*( -vx3)); - feq=c2o27* (drho/*+three*( -vx3)*/+c9o2*( -vx3)*( -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_00P])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T-m3+(f_B+f_T-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_B+f_T))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_00P])[kt]=zero; - } - - q = q_dirNE[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_NE - f_SW - c2o1 * drho * c1o54 * (c3o1*( vx1+vx2 )); - feq=c1o54* (drho/*+three*( vx1+vx2 )*/+c9o2*( vx1+vx2 )*( vx1+vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW-m3+(f_NE+f_SW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_NE+f_SW))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_MM0])[ksw]=zero; - } - - q = q_dirSW[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_SW - f_NE - c2o1 * drho * c1o54 * (c3o1*(-vx1-vx2 )); - feq=c1o54* (drho/*+three*(-vx1-vx2 )*/+c9o2*(-vx1-vx2 )*(-vx1-vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE-m3+(f_SW+f_NE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_SW+f_NE))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_PP0])[kne]=zero; - } - - q = q_dirSE[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_SE - f_NW - c2o1 * drho * c1o54 * (c3o1*( vx1-vx2 )); - feq=c1o54* (drho/*+three*( vx1-vx2 )*/+c9o2*( vx1-vx2 )*( vx1-vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW-m3+(f_SE+f_NW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_SE+f_NW))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_MP0])[knw]=zero; - } - - q = q_dirNW[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_NW - f_SE - c2o1 * drho * c1o54 * (c3o1*(-vx1+vx2 )); - feq=c1o54* (drho/*+three*(-vx1+vx2 )*/+c9o2*(-vx1+vx2 )*(-vx1+vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE-m3+(f_NW+f_SE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_NW+f_SE))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_PM0])[kse]=zero; - } - - q = q_dirTE[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_TE - f_BW - c2o1 * drho * c1o54 * (c3o1*( vx1 +vx3)); - feq=c1o54* (drho/*+three*( vx1 +vx3)*/+c9o2*( vx1 +vx3)*( vx1 +vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW-m3+(f_TE+f_BW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TE+f_BW))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_M0M])[kbw]=zero; - } - - q = q_dirBW[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_BW - f_TE - c2o1 * drho * c1o54 * (c3o1*(-vx1 -vx3)); - feq=c1o54* (drho/*+three*(-vx1 -vx3)*/+c9o2*(-vx1 -vx3)*(-vx1 -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE-m3+(f_BW+f_TE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BW+f_TE))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_P0P])[kte]=zero; - } - - q = q_dirBE[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_BE - f_TW - c2o1 * drho * c1o54 * (c3o1*( vx1 -vx3)); - feq=c1o54* (drho/*+three*( vx1 -vx3)*/+c9o2*( vx1 -vx3)*( vx1 -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW-m3+(f_BE+f_TW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BE+f_TW))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_M0P])[ktw]=zero; - } - - q = q_dirTW[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_TW - f_BE - c2o1 * drho * c1o54 * (c3o1*(-vx1 +vx3)); - feq=c1o54* (drho/*+three*(-vx1 +vx3)*/+c9o2*(-vx1 +vx3)*(-vx1 +vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE-m3+(f_TW+f_BE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TW+f_BE))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_P0M])[kbe]=zero; - } - - q = q_dirTN[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_TN - f_BS - c2o1 * drho * c1o54 * (c3o1*( vx2+vx3)); - feq=c1o54* (drho/*+three*( vx2+vx3)*/+c9o2*( vx2+vx3)*( vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS-m3+(f_TN+f_BS-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TN+f_BS))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_0MM])[kbs]=zero; - } - - q = q_dirBS[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_BS - f_TN - c2o1 * drho * c1o54 * (c3o1*( -vx2-vx3)); - feq=c1o54* (drho/*+three*( -vx2-vx3)*/+c9o2*( -vx2-vx3)*( -vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN-m3+(f_BS+f_TN-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BS+f_TN))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_0PP])[ktn]=zero; - } - - q = q_dirBN[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_BN - f_TS - c2o1 * drho * c1o54 * (c3o1*( vx2-vx3)); - feq=c1o54* (drho/*+three*( vx2-vx3)*/+c9o2*( vx2-vx3)*( vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS-m3+(f_BN+f_TS-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BN+f_TS))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_0MP])[kts]=zero; - } - - q = q_dirTS[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_TS - f_BN - c2o1 * drho * c1o54 * (c3o1*( -vx2+vx3)); - feq=c1o54* (drho/*+three*( -vx2+vx3)*/+c9o2*( -vx2+vx3)*( -vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN-m3+(f_TS+f_BN-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TS+f_BN))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_0PM])[kbn]=zero; - } - - q = q_dirTNE[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_TNE - f_BSW - c2o1 * drho * c1o216 * (c3o1*( vx1+vx2+vx3)); - feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MMM])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW-m3+(f_TNE+f_BSW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TNE+f_BSW))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_MMM])[kbsw]=zero; - } - - q = q_dirBSW[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_BSW - f_TNE - c2o1 * drho * c1o216 * (c3o1*(-vx1-vx2-vx3)); - feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PPP])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE-m3+(f_BSW+f_TNE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BSW+f_TNE))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_PPP])[ktne]=zero; - } - - q = q_dirBNE[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_BNE - f_TSW - c2o1 * drho * c1o216 * (c3o1*( vx1+vx2-vx3)); - feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MMP])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW-m3+(f_BNE+f_TSW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BNE+f_TSW))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_MMP])[ktsw]=zero; - } - - q = q_dirTSW[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_TSW - f_BNE - c2o1 * drho * c1o216 * (c3o1*(-vx1-vx2+vx3)); - feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PPM])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE-m3+(f_TSW+f_BNE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TSW+f_BNE))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_PPM])[kbne]=zero; - } - - q = q_dirTSE[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_TSE - f_BNW - c2o1 * drho * c1o216 * (c3o1*( vx1-vx2+vx3)); - feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MPM])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW-m3+(f_TSE+f_BNW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TSE+f_BNW))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_MPM])[kbnw]=zero; - } - - q = q_dirBNW[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_BNW - f_TSE - c2o1 * drho * c1o216 * (c3o1*(-vx1+vx2-vx3)); - feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PMP])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE-m3+(f_BNW+f_TSE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BNW+f_TSE))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_PMP])[ktse]=zero; - } - - q = q_dirBSE[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_BSE - f_TNW - c2o1 * drho * c1o216 * (c3o1*( vx1-vx2-vx3)); - feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MPP])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW-m3+(f_BSE+f_TNW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BSE+f_TNW))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_MPP])[ktnw]=zero; - } - - q = q_dirTNW[k]; - if (q>=c0o1 && q<=c1o1) - { - m3 = f_TNW - f_BSE - c2o1 * drho * c1o216 * (c3o1*(-vx1+vx2+vx3)); - feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PMM])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE-m3+(f_TNW+f_BSE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TNW+f_BSE))/(c1o1+q)+(m3*c1o2); - //(D.f[DIR_PMM])[kbse]=zero; - } - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QDeviceIncompHighNu27( - real* DD, - 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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes]; - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int numberOfNodesK = k_Q[k]; - unsigned int kzero= numberOfNodesK; - unsigned int ke = numberOfNodesK; - unsigned int kw = neighborX[numberOfNodesK]; - unsigned int kn = numberOfNodesK; - unsigned int ks = neighborY[numberOfNodesK]; - unsigned int kt = numberOfNodesK; - unsigned int kb = neighborZ[numberOfNodesK]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = numberOfNodesK; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = numberOfNodesK; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = numberOfNodesK; - 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 = numberOfNodesK; - 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_E = (D.f[DIR_P00])[ke ]; - f_W = (D.f[DIR_M00])[kw ]; - f_N = (D.f[DIR_0P0])[kn ]; - f_S = (D.f[DIR_0M0])[ks ]; - f_T = (D.f[DIR_00P])[kt ]; - f_B = (D.f[DIR_00M])[kb ]; - f_NE = (D.f[DIR_PP0])[kne ]; - f_SW = (D.f[DIR_MM0])[ksw ]; - f_SE = (D.f[DIR_PM0])[kse ]; - f_NW = (D.f[DIR_MP0])[knw ]; - f_TE = (D.f[DIR_P0P])[kte ]; - f_BW = (D.f[DIR_M0M])[kbw ]; - f_BE = (D.f[DIR_P0M])[kbe ]; - f_TW = (D.f[DIR_M0P])[ktw ]; - f_TN = (D.f[DIR_0PP])[ktn ]; - f_BS = (D.f[DIR_0MM])[kbs ]; - f_BN = (D.f[DIR_0PM])[kbn ]; - f_TS = (D.f[DIR_0MP])[kts ]; - f_TNE = (D.f[DIR_PPP])[ktne ]; - f_TSW = (D.f[DIR_MMP])[ktsw ]; - f_TSE = (D.f[DIR_PMP])[ktse ]; - f_TNW = (D.f[DIR_MPP])[ktnw ]; - f_BNE = (D.f[DIR_PPM])[kbne ]; - f_BSW = (D.f[DIR_MMM])[kbsw ]; - f_BSE = (D.f[DIR_PMM])[kbse ]; - f_BNW = (D.f[DIR_MPM])[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 + ((D.f[DIR_000])[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));// / (one + 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));// / (one + 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));// / (one + drho); - - real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);// * (one + drho); - - ////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[DIR_000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real VeloX = c0o1; - real VeloY = c0o1; - real VeloZ = c0o1; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - //ToDo anders klammern !!!!!! - - q = q_dirE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( vx1 )*/+c9o2*( vx1 )*( vx1 ) /** (one + drho)*/-cu_sq); - (D.f[DIR_M00])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX )) / (q + c1o1) ; - } - - q = q_dirW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*(-vx1 )*/+c9o2*(-vx1 )*(-vx1 ) /** (one + drho)*/-cu_sq); - (D.f[DIR_P00])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX )) / (q + c1o1) ; - } - - q = q_dirN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( vx2 )*/+c9o2*( vx2 )*( vx2 ) /** (one + drho)*/-cu_sq); - (D.f[DIR_0M0])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY )) / (q + c1o1) ; - } - - q = q_dirS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( -vx2 )*/+c9o2*( -vx2 )*( -vx2 ) /** (one + drho)*/-cu_sq); - (D.f[DIR_0P0])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY )) / (q + c1o1) ; - } - - q = q_dirT[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( vx3)*/+c9o2*( vx3)*( vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_00M])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ )) / (q + c1o1) ; - } - - q = q_dirB[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( -vx3)*/+c9o2*( -vx3)*( -vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_00P])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ )) / (q + c1o1) ; - } - - q = q_dirNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1+vx2 )*/+c9o2*( vx1+vx2 )*( vx1+vx2 ) /** (one + drho)*/-cu_sq); - (D.f[DIR_MM0])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ; - } - - q = q_dirSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1-vx2 )*/+c9o2*(-vx1-vx2 )*(-vx1-vx2 ) /** (one + drho)*/-cu_sq); - (D.f[DIR_PP0])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ; - } - - q = q_dirSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1-vx2 )*/+c9o2*( vx1-vx2 )*( vx1-vx2 ) /** (one + drho)*/-cu_sq); - (D.f[DIR_MP0])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ; - } - - q = q_dirNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1+vx2 )*/+c9o2*(-vx1+vx2 )*(-vx1+vx2 ) /** (one + drho)*/-cu_sq); - (D.f[DIR_PM0])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ; - } - - q = q_dirTE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1 +vx3)*/+c9o2*( vx1 +vx3)*( vx1 +vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_M0M])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ; - } - - q = q_dirBW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1 -vx3)*/+c9o2*(-vx1 -vx3)*(-vx1 -vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_P0P])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ; - } - - q = q_dirBE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1 -vx3)*/+c9o2*( vx1 -vx3)*( vx1 -vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_M0P])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ; - } - - q = q_dirTW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1 +vx3)*/+c9o2*(-vx1 +vx3)*(-vx1 +vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_P0M])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ; - } - - q = q_dirTN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx2+vx3)*/+c9o2*( vx2+vx3)*( vx2+vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_0MM])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ; - } - - q = q_dirBS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( -vx2-vx3)*/+c9o2*( -vx2-vx3)*( -vx2-vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_0PP])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ; - } - - q = q_dirBN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx2-vx3)*/+c9o2*( vx2-vx3)*( vx2-vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_0MP])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ; - } - - q = q_dirTS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( -vx2+vx3)*/+c9o2*( -vx2+vx3)*( -vx2+vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_0PM])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ; - } - - q = q_dirTNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_MMM])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ; - } - - q = q_dirBSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_PPP])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ; - } - - q = q_dirBNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_MMP])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ; - } - - q = q_dirTSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_PPM])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ; - } - - q = q_dirTSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_MPM])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ; - } - - q = q_dirBNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_PMP])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ; - } - - q = q_dirBSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_MPP])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ; - } - - q = q_dirTNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_PMM])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ; - } - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QDeviceCompHighNu27( - real* DD, - 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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes]; - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int numberOfNodesK = k_Q[k]; - unsigned int kzero= numberOfNodesK; - unsigned int ke = numberOfNodesK; - unsigned int kw = neighborX[numberOfNodesK]; - unsigned int kn = numberOfNodesK; - unsigned int ks = neighborY[numberOfNodesK]; - unsigned int kt = numberOfNodesK; - unsigned int kb = neighborZ[numberOfNodesK]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = numberOfNodesK; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = numberOfNodesK; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = numberOfNodesK; - 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 = numberOfNodesK; - 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_E = (D.f[DIR_P00])[ke ]; - f_W = (D.f[DIR_M00])[kw ]; - f_N = (D.f[DIR_0P0])[kn ]; - f_S = (D.f[DIR_0M0])[ks ]; - f_T = (D.f[DIR_00P])[kt ]; - f_B = (D.f[DIR_00M])[kb ]; - f_NE = (D.f[DIR_PP0])[kne ]; - f_SW = (D.f[DIR_MM0])[ksw ]; - f_SE = (D.f[DIR_PM0])[kse ]; - f_NW = (D.f[DIR_MP0])[knw ]; - f_TE = (D.f[DIR_P0P])[kte ]; - f_BW = (D.f[DIR_M0M])[kbw ]; - f_BE = (D.f[DIR_P0M])[kbe ]; - f_TW = (D.f[DIR_M0P])[ktw ]; - f_TN = (D.f[DIR_0PP])[ktn ]; - f_BS = (D.f[DIR_0MM])[kbs ]; - f_BN = (D.f[DIR_0PM])[kbn ]; - f_TS = (D.f[DIR_0MP])[kts ]; - f_TNE = (D.f[DIR_PPP])[ktne ]; - f_TSW = (D.f[DIR_MMP])[ktsw ]; - f_TSE = (D.f[DIR_PMP])[ktse ]; - f_TNW = (D.f[DIR_MPP])[ktnw ]; - f_BNE = (D.f[DIR_PPM])[kbne ]; - f_BSW = (D.f[DIR_MMM])[kbsw ]; - f_BSE = (D.f[DIR_PMM])[kbse ]; - f_BNW = (D.f[DIR_MPM])[kbnw ]; - //f_W = (D.f[DIR_P00])[ke ]; - //f_E = (D.f[DIR_M00])[kw ]; - //f_S = (D.f[DIR_0P0])[kn ]; - //f_N = (D.f[DIR_0M0])[ks ]; - //f_B = (D.f[DIR_00P])[kt ]; - //f_T = (D.f[DIR_00M])[kb ]; - //f_SW = (D.f[DIR_PP0])[kne ]; - //f_NE = (D.f[DIR_MM0])[ksw ]; - //f_NW = (D.f[DIR_PM0])[kse ]; - //f_SE = (D.f[DIR_MP0])[knw ]; - //f_BW = (D.f[DIR_P0P])[kte ]; - //f_TE = (D.f[DIR_M0M])[kbw ]; - //f_TW = (D.f[DIR_P0M])[kbe ]; - //f_BE = (D.f[DIR_M0P])[ktw ]; - //f_BS = (D.f[DIR_0PP])[ktn ]; - //f_TN = (D.f[DIR_0MM])[kbs ]; - //f_TS = (D.f[DIR_0PM])[kbn ]; - //f_BN = (D.f[DIR_0MP])[kts ]; - //f_BSW = (D.f[DIR_PPP])[ktne ]; - //f_BNE = (D.f[DIR_MMP])[ktsw ]; - //f_BNW = (D.f[DIR_PMP])[ktse ]; - //f_BSE = (D.f[DIR_MPP])[ktnw ]; - //f_TSW = (D.f[DIR_PPM])[kbne ]; - //f_TNE = (D.f[DIR_MMM])[kbsw ]; - //f_TNW = (D.f[DIR_PMM])[kbse ]; - //f_TSE = (D.f[DIR_MPM])[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 + ((D.f[DIR_000])[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); - - ////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[DIR_000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real VeloX = c0o1; - real VeloY = c0o1; - real VeloZ = c0o1; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - //ToDo anders klammern !!!!!! - - q = q_dirE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( vx1 )*/+c9o2*( vx1 )*( vx1 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M00])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX )) / (q + c1o1) ; - //(D.f[DIR_M00])[kw]=(one-q)/(one+q)*(f_E-f_W+(f_E+f_W-two*feq*om1)/(one-om1))*c1o2+(q*(f_E+f_W)-six*c2over27*( VeloX ))/(one+q) - c2over27 * drho; - //(D.f[DIR_M00])[kw]=zero; - } - - q = q_dirW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*(-vx1 )*/+c9o2*(-vx1 )*(-vx1 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P00])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX )) / (q + c1o1) ; - //(D.f[DIR_P00])[ke]=(one-q)/(one+q)*(f_W-f_E+(f_W+f_E-two*feq*om1)/(one-om1))*c1o2+(q*(f_W+f_E)-six*c2over27*(-VeloX ))/(one+q) - c2over27 * drho; - //(D.f[DIR_P00])[ke]=zero; - } - - q = q_dirN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( vx2 )*/+c9o2*( vx2 )*( vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0M0])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY )) / (q + c1o1) ; - //(D.f[DIR_0M0])[ks]=(one-q)/(one+q)*(f_N-f_S+(f_N+f_S-two*feq*om1)/(one-om1))*c1o2+(q*(f_N+f_S)-six*c2over27*( VeloY ))/(one+q) - c2over27 * drho; - //(D.f[DIR_0M0])[ks]=zero; - } - - q = q_dirS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( -vx2 )*/+c9o2*( -vx2 )*( -vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0P0])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY )) / (q + c1o1) ; - //(D.f[DIR_0P0])[kn]=(one-q)/(one+q)*(f_S-f_N+(f_S+f_N-two*feq*om1)/(one-om1))*c1o2+(q*(f_S+f_N)-six*c2over27*(-VeloY ))/(one+q) - c2over27 * drho; - //(D.f[DIR_0P0])[kn]=zero; - } - - q = q_dirT[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( vx3)*/+c9o2*( vx3)*( vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_00M])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ )) / (q + c1o1) ; - //(D.f[DIR_00M])[kb]=(one-q)/(one+q)*(f_T-f_B+(f_T+f_B-two*feq*om1)/(one-om1))*c1o2+(q*(f_T+f_B)-six*c2over27*( VeloZ ))/(one+q) - c2over27 * drho; - //(D.f[DIR_00M])[kb]=one; - } - - q = q_dirB[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( -vx3)*/+c9o2*( -vx3)*( -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_00P])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ )) / (q + c1o1) ; - //(D.f[DIR_00P])[kt]=(one-q)/(one+q)*(f_B-f_T+(f_B+f_T-two*feq*om1)/(one-om1))*c1o2+(q*(f_B+f_T)-six*c2over27*(-VeloZ ))/(one+q) - c2over27 * drho; - //(D.f[DIR_00P])[kt]=zero; - } - - q = q_dirNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1+vx2 )*/+c9o2*( vx1+vx2 )*( vx1+vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MM0])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ; - //(D.f[DIR_MM0])[ksw]=(one-q)/(one+q)*(f_NE-f_SW+(f_NE+f_SW-two*feq*om1)/(one-om1))*c1o2+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q) - c1over54 * drho; - //(D.f[DIR_MM0])[ksw]=zero; - } - - q = q_dirSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1-vx2 )*/+c9o2*(-vx1-vx2 )*(-vx1-vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PP0])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ; - //(D.f[DIR_PP0])[kne]=(one-q)/(one+q)*(f_SW-f_NE+(f_SW+f_NE-two*feq*om1)/(one-om1))*c1o2+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q) - c1over54 * drho; - //(D.f[DIR_PP0])[kne]=zero; - } - - q = q_dirSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1-vx2 )*/+c9o2*( vx1-vx2 )*( vx1-vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MP0])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ; - //(D.f[DIR_MP0])[knw]=(one-q)/(one+q)*(f_SE-f_NW+(f_SE+f_NW-two*feq*om1)/(one-om1))*c1o2+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q) - c1over54 * drho; - //(D.f[DIR_MP0])[knw]=zero; - } - - q = q_dirNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1+vx2 )*/+c9o2*(-vx1+vx2 )*(-vx1+vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PM0])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ; - //(D.f[DIR_PM0])[kse]=(one-q)/(one+q)*(f_NW-f_SE+(f_NW+f_SE-two*feq*om1)/(one-om1))*c1o2+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q) - c1over54 * drho; - //(D.f[DIR_PM0])[kse]=zero; - } - - q = q_dirTE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1 +vx3)*/+c9o2*( vx1 +vx3)*( vx1 +vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M0M])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ; - //(D.f[DIR_M0M])[kbw]=(one-q)/(one+q)*(f_TE-f_BW+(f_TE+f_BW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q) - c1over54 * drho; - //(D.f[DIR_M0M])[kbw]=zero; - } - - q = q_dirBW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1 -vx3)*/+c9o2*(-vx1 -vx3)*(-vx1 -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P0P])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ; - //(D.f[DIR_P0P])[kte]=(one-q)/(one+q)*(f_BW-f_TE+(f_BW+f_TE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q) - c1over54 * drho; - //(D.f[DIR_P0P])[kte]=zero; - } - - q = q_dirBE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1 -vx3)*/+c9o2*( vx1 -vx3)*( vx1 -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M0P])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ; - //(D.f[DIR_M0P])[ktw]=(one-q)/(one+q)*(f_BE-f_TW+(f_BE+f_TW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q) - c1over54 * drho; - //(D.f[DIR_M0P])[ktw]=zero; - } - - q = q_dirTW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1 +vx3)*/+c9o2*(-vx1 +vx3)*(-vx1 +vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P0M])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ; - //(D.f[DIR_P0M])[kbe]=(one-q)/(one+q)*(f_TW-f_BE+(f_TW+f_BE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q) - c1over54 * drho; - //(D.f[DIR_P0M])[kbe]=zero; - } - - q = q_dirTN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx2+vx3)*/+c9o2*( vx2+vx3)*( vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0MM])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ; - //(D.f[DIR_0MM])[kbs]=(one-q)/(one+q)*(f_TN-f_BS+(f_TN+f_BS-two*feq*om1)/(one-om1))*c1o2+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q) - c1over54 * drho; - //(D.f[DIR_0MM])[kbs]=zero; - } - - q = q_dirBS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( -vx2-vx3)*/+c9o2*( -vx2-vx3)*( -vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0PP])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ; - //(D.f[DIR_0PP])[ktn]=(one-q)/(one+q)*(f_BS-f_TN+(f_BS+f_TN-two*feq*om1)/(one-om1))*c1o2+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q) - c1over54 * drho; - //(D.f[DIR_0PP])[ktn]=zero; - } - - q = q_dirBN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx2-vx3)*/+c9o2*( vx2-vx3)*( vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0MP])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ; - //(D.f[DIR_0MP])[kts]=(one-q)/(one+q)*(f_BN-f_TS+(f_BN+f_TS-two*feq*om1)/(one-om1))*c1o2+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q) - c1over54 * drho; - //(D.f[DIR_0MP])[kts]=zero; - } - - q = q_dirTS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( -vx2+vx3)*/+c9o2*( -vx2+vx3)*( -vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0PM])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ; - //(D.f[DIR_0PM])[kbn]=(one-q)/(one+q)*(f_TS-f_BN+(f_TS+f_BN-two*feq*om1)/(one-om1))*c1o2+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q) - c1over54 * drho; - //(D.f[DIR_0PM])[kbn]=zero; - } - - q = q_dirTNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MMM])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ; - //(D.f[DIR_MMM])[kbsw]=(one-q)/(one+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q) - c1over216 * drho; - //(D.f[DIR_MMM])[kbsw]=zero; - } - - q = q_dirBSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PPP])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ; - //(D.f[DIR_PPP])[ktne]=(one-q)/(one+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q) - c1over216 * drho; - //(D.f[DIR_PPP])[ktne]=zero; - } - - q = q_dirBNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MMP])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ; - //(D.f[DIR_MMP])[ktsw]=(one-q)/(one+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q) - c1over216 * drho; - //(D.f[DIR_MMP])[ktsw]=zero; - } - - q = q_dirTSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PPM])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ; - //(D.f[DIR_PPM])[kbne]=(one-q)/(one+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q) - c1over216 * drho; - //(D.f[DIR_PPM])[kbne]=zero; - } - - q = q_dirTSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MPM])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ; - //(D.f[DIR_MPM])[kbnw]=(one-q)/(one+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q) - c1over216 * drho; - //(D.f[DIR_MPM])[kbnw]=zero; - } - - q = q_dirBNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PMP])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ; - //(D.f[DIR_PMP])[ktse]=(one-q)/(one+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q) - c1over216 * drho; - //(D.f[DIR_PMP])[ktse]=zero; - } - - q = q_dirBSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MPP])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ; - //(D.f[DIR_MPP])[ktnw]=(one-q)/(one+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q) - c1over216 * drho; - //(D.f[DIR_MPP])[ktnw]=zero; - } - - q = q_dirTNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PMM])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ; - //(D.f[DIR_PMM])[kbse]=(one-q)/(one+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q) - c1over216 * drho; - //(D.f[DIR_PMM])[kbse]=zero; - } - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QDeviceComp27( - real* distributions, - int* subgridDistanceIndices, - real* subgridDistances, - unsigned int numberOfBCnodes, - real omega, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - ////////////////////////////////////////////////////////////////////////// - //! The no-slip boundary condition is executed in the following steps - //! - //////////////////////////////////////////////////////////////////////////////// - //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. - //! - const unsigned nodeIndex = getNodeIndex(); - - if(nodeIndex < numberOfBCnodes) - { - ////////////////////////////////////////////////////////////////////////// - //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref - //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> - //! - Distributions27 dist; - getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); - - //////////////////////////////////////////////////////////////////////////////// - //! - Set local subgrid distances (q's) - //! - SubgridDistances27 subgridD; - getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes); - - //////////////////////////////////////////////////////////////////////////////// - //! - Set neighbor indices (necessary for indirect addressing) - //! - unsigned int indexOfBCnode = subgridDistanceIndices[nodeIndex]; - unsigned int kzero= indexOfBCnode; - unsigned int ke = indexOfBCnode; - unsigned int kw = neighborX[indexOfBCnode]; - unsigned int kn = indexOfBCnode; - unsigned int ks = neighborY[indexOfBCnode]; - unsigned int kt = indexOfBCnode; - unsigned int kb = neighborZ[indexOfBCnode]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = indexOfBCnode; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = indexOfBCnode; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = indexOfBCnode; - 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 = indexOfBCnode; - unsigned int kbsw = neighborZ[ksw]; - - //////////////////////////////////////////////////////////////////////////////// - //! - Set local distributions - //! - real f_W = (dist.f[DIR_P00])[ke ]; - real f_E = (dist.f[DIR_M00])[kw ]; - real f_S = (dist.f[DIR_0P0])[kn ]; - real f_N = (dist.f[DIR_0M0])[ks ]; - real f_B = (dist.f[DIR_00P])[kt ]; - real f_T = (dist.f[DIR_00M])[kb ]; - real f_SW = (dist.f[DIR_PP0])[kne ]; - real f_NE = (dist.f[DIR_MM0])[ksw ]; - real f_NW = (dist.f[DIR_PM0])[kse ]; - real f_SE = (dist.f[DIR_MP0])[knw ]; - real f_BW = (dist.f[DIR_P0P])[kte ]; - real f_TE = (dist.f[DIR_M0M])[kbw ]; - real f_TW = (dist.f[DIR_P0M])[kbe ]; - real f_BE = (dist.f[DIR_M0P])[ktw ]; - real f_BS = (dist.f[DIR_0PP])[ktn ]; - real f_TN = (dist.f[DIR_0MM])[kbs ]; - real f_TS = (dist.f[DIR_0PM])[kbn ]; - real f_BN = (dist.f[DIR_0MP])[kts ]; - real f_BSW = (dist.f[DIR_PPP])[ktne ]; - real f_BNE = (dist.f[DIR_MMP])[ktsw ]; - real f_BNW = (dist.f[DIR_PMP])[ktse ]; - real f_BSE = (dist.f[DIR_MPP])[ktnw ]; - real f_TSW = (dist.f[DIR_PPM])[kbne ]; - real f_TNE = (dist.f[DIR_MMM])[kbsw ]; - real f_TNW = (dist.f[DIR_PMM])[kbse ]; - real f_TSE = (dist.f[DIR_MPM])[kbnw ]; - - //////////////////////////////////////////////////////////////////////////////// - //! - Calculate macroscopic quantities - //! - real 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 + ((dist.f[DIR_000])[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)) / (c1o1 + drho); - - 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)) / (c1o1 + drho); - - 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)) / (c1o1 + drho); - - real cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3) * (c1o1 + drho); - - //////////////////////////////////////////////////////////////////////////////// - //! - change the pointer to write the results in the correct array - //! - getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep); - - //////////////////////////////////////////////////////////////////////////////// - //! - Update distributions with subgrid distance (q) between zero and one - real feq, q, velocityLB; - q = (subgridD.q[DIR_P00])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one - { - velocityLB = vx1; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - (dist.f[DIR_M00])[kw] = getInterpolatedDistributionForNoSlipBC(q, f_E, f_W, feq, omega); - } - - q = (subgridD.q[DIR_M00])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - (dist.f[DIR_P00])[ke] = getInterpolatedDistributionForNoSlipBC(q, f_W, f_E, feq, omega); - } - - q = (subgridD.q[DIR_0P0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - (dist.f[DIR_0M0])[ks] = getInterpolatedDistributionForNoSlipBC(q, f_N, f_S, feq, omega); - } - - q = (subgridD.q[DIR_0M0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - (dist.f[DIR_0P0])[kn] = getInterpolatedDistributionForNoSlipBC(q, f_S, f_N, feq, omega); - } - - q = (subgridD.q[DIR_00P])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - (dist.f[DIR_00M])[kb] = getInterpolatedDistributionForNoSlipBC(q, f_T, f_B, feq, omega); - } - - q = (subgridD.q[DIR_00M])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - (dist.f[DIR_00P])[kt] = getInterpolatedDistributionForNoSlipBC(q, f_B, f_T, feq, omega); - } - - q = (subgridD.q[DIR_PP0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 + vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_MM0])[ksw] = getInterpolatedDistributionForNoSlipBC(q, f_NE, f_SW, feq, omega); - } - - q = (subgridD.q[DIR_MM0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 - vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_PP0])[kne] = getInterpolatedDistributionForNoSlipBC(q, f_SW, f_NE, feq, omega); - } - - q = (subgridD.q[DIR_PM0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 - vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_MP0])[knw] = getInterpolatedDistributionForNoSlipBC(q, f_SE, f_NW, feq, omega); - } - - q = (subgridD.q[DIR_MP0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 + vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_PM0])[kse] = getInterpolatedDistributionForNoSlipBC(q, f_NW, f_SE, feq, omega); - } - - q = (subgridD.q[DIR_P0P])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_M0M])[kbw] = getInterpolatedDistributionForNoSlipBC(q, f_TE, f_BW, feq, omega); - } - - q = (subgridD.q[DIR_M0M])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_P0P])[kte] = getInterpolatedDistributionForNoSlipBC(q, f_BW, f_TE, feq, omega); - } - - q = (subgridD.q[DIR_P0M])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_M0P])[ktw] = getInterpolatedDistributionForNoSlipBC(q, f_BE, f_TW, feq, omega); - } - - q = (subgridD.q[DIR_M0P])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_P0M])[kbe] = getInterpolatedDistributionForNoSlipBC(q, f_TW, f_BE, feq, omega); - } - - q = (subgridD.q[DIR_0PP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_0MM])[kbs] = getInterpolatedDistributionForNoSlipBC(q, f_TN, f_BS, feq, omega); - } - - q = (subgridD.q[DIR_0MM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_0PP])[ktn] = getInterpolatedDistributionForNoSlipBC(q, f_BS, f_TN, feq, omega); - } - - q = (subgridD.q[DIR_0PM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_0MP])[kts] = getInterpolatedDistributionForNoSlipBC(q, f_BN, f_TS, feq, omega); - } - - q = (subgridD.q[DIR_0MP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_0PM])[kbn] = getInterpolatedDistributionForNoSlipBC(q, f_TS, f_BN, feq, omega); - } - - q = (subgridD.q[DIR_PPP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 + vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - (dist.f[DIR_MMM])[kbsw] = getInterpolatedDistributionForNoSlipBC(q, f_TNE, f_BSW, feq, omega); - } - - q = (subgridD.q[DIR_MMM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 - vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - (dist.f[DIR_PPP])[ktne] = getInterpolatedDistributionForNoSlipBC(q, f_BSW, f_TNE, feq, omega); - } - - q = (subgridD.q[DIR_PPM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 + vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - (dist.f[DIR_MMP])[ktsw] = getInterpolatedDistributionForNoSlipBC(q, f_BNE, f_TSW, feq, omega); - } - - q = (subgridD.q[DIR_MMP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 - vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - (dist.f[DIR_PPM])[kbne] = getInterpolatedDistributionForNoSlipBC(q, f_TSW, f_BNE, feq, omega); - } - - q = (subgridD.q[DIR_PMP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 - vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - (dist.f[DIR_MPM])[kbnw] = getInterpolatedDistributionForNoSlipBC(q, f_TSE, f_BNW, feq, omega); - } - - q = (subgridD.q[DIR_MPM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 + vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - (dist.f[DIR_PMP])[ktse] = getInterpolatedDistributionForNoSlipBC(q, f_BNW, f_TSE, feq, omega); - } - - q = (subgridD.q[DIR_PMM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 - vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - (dist.f[DIR_MPP])[ktnw] = getInterpolatedDistributionForNoSlipBC(q, f_BSE, f_TNW, feq, omega); - } - - q = (subgridD.q[DIR_MPP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 + vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - (dist.f[DIR_PMM])[kbse] = getInterpolatedDistributionForNoSlipBC(q, f_TNW, f_BSE, feq, omega); - } - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QDevice27( - real* distributions, - int* subgridDistanceIndices, - real* subgridDistances, - unsigned int numberOfBCnodes, - real omega, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - ////////////////////////////////////////////////////////////////////////// - //! The no-slip boundary condition is executed in the following steps - //! - //////////////////////////////////////////////////////////////////////////////// - //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. - //! - const unsigned nodeIndex = getNodeIndex(); - - ////////////////////////////////////////////////////////////////////////// - //! - Run for all indices in size of boundary condition (numberOfBCnodes) - //! - if(nodeIndex < numberOfBCnodes) - { - - ////////////////////////////////////////////////////////////////////////// - //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref - //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> - //! - Distributions27 dist; - getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); - - //////////////////////////////////////////////////////////////////////////////// - //! - Set local subgrid distances (q's) - //! - SubgridDistances27 subgridD; - getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes); - - //////////////////////////////////////////////////////////////////////////////// - //! - Set neighbor indices (necessary for indirect addressing) - //! - unsigned int indexOfBCnode = subgridDistanceIndices[nodeIndex]; - unsigned int kzero= indexOfBCnode; - unsigned int ke = indexOfBCnode; - unsigned int kw = neighborX[indexOfBCnode]; - unsigned int kn = indexOfBCnode; - unsigned int ks = neighborY[indexOfBCnode]; - unsigned int kt = indexOfBCnode; - unsigned int kb = neighborZ[indexOfBCnode]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = indexOfBCnode; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = indexOfBCnode; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = indexOfBCnode; - 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 = indexOfBCnode; - unsigned int kbsw = neighborZ[ksw]; - - //////////////////////////////////////////////////////////////////////////////// - //! - Set local distributions - //! - real f_W = (dist.f[DIR_P00])[ke ]; - real f_E = (dist.f[DIR_M00])[kw ]; - real f_S = (dist.f[DIR_0P0])[kn ]; - real f_N = (dist.f[DIR_0M0])[ks ]; - real f_B = (dist.f[DIR_00P])[kt ]; - real f_T = (dist.f[DIR_00M])[kb ]; - real f_SW = (dist.f[DIR_PP0])[kne ]; - real f_NE = (dist.f[DIR_MM0])[ksw ]; - real f_NW = (dist.f[DIR_PM0])[kse ]; - real f_SE = (dist.f[DIR_MP0])[knw ]; - real f_BW = (dist.f[DIR_P0P])[kte ]; - real f_TE = (dist.f[DIR_M0M])[kbw ]; - real f_TW = (dist.f[DIR_P0M])[kbe ]; - real f_BE = (dist.f[DIR_M0P])[ktw ]; - real f_BS = (dist.f[DIR_0PP])[ktn ]; - real f_TN = (dist.f[DIR_0MM])[kbs ]; - real f_TS = (dist.f[DIR_0PM])[kbn ]; - real f_BN = (dist.f[DIR_0MP])[kts ]; - real f_BSW = (dist.f[DIR_PPP])[ktne ]; - real f_BNE = (dist.f[DIR_MMP])[ktsw ]; - real f_BNW = (dist.f[DIR_PMP])[ktse ]; - real f_BSE = (dist.f[DIR_MPP])[ktnw ]; - real f_TSW = (dist.f[DIR_PPM])[kbne ]; - real f_TNE = (dist.f[DIR_MMM])[kbsw ]; - real f_TNW = (dist.f[DIR_PMM])[kbse ]; - real f_TSE = (dist.f[DIR_MPM])[kbnw ]; - - //////////////////////////////////////////////////////////////////////////////// - //! - Calculate macroscopic quantities - //! - real 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 + ((dist.f[DIR_000])[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 cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); - - //////////////////////////////////////////////////////////////////////////////// - //! - change the pointer to write the results in the correct array - //! - getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep); - - //////////////////////////////////////////////////////////////////////////////// - //! - Update distributions with subgrid distance (q) between zero and one - //! - real feq, q, velocityLB; - q = (subgridD.q[DIR_P00])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one - { - velocityLB = vx1; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - (dist.f[DIR_M00])[kw] = getInterpolatedDistributionForNoSlipBC(q, f_E, f_W, feq, omega); - } - - q = (subgridD.q[DIR_M00])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - (dist.f[DIR_P00])[ke] = getInterpolatedDistributionForNoSlipBC(q, f_W, f_E, feq, omega); - } - - q = (subgridD.q[DIR_0P0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - (dist.f[DIR_0M0])[ks] = getInterpolatedDistributionForNoSlipBC(q, f_N, f_S, feq, omega); - } - - q = (subgridD.q[DIR_0M0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - (dist.f[DIR_0P0])[kn] = getInterpolatedDistributionForNoSlipBC(q, f_S, f_N, feq, omega); - } - - q = (subgridD.q[DIR_00P])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - (dist.f[DIR_00M])[kb] = getInterpolatedDistributionForNoSlipBC(q, f_T, f_B, feq, omega); - } - - q = (subgridD.q[DIR_00M])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - (dist.f[DIR_00P])[kt] = getInterpolatedDistributionForNoSlipBC(q, f_B, f_T, feq, omega); - } - - q = (subgridD.q[DIR_PP0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 + vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_MM0])[ksw] = getInterpolatedDistributionForNoSlipBC(q, f_NE, f_SW, feq, omega); - } - - q = (subgridD.q[DIR_MM0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 - vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_PP0])[kne] = getInterpolatedDistributionForNoSlipBC(q, f_SW, f_NE, feq, omega); - } - - q = (subgridD.q[DIR_PM0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 - vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_MP0])[knw] = getInterpolatedDistributionForNoSlipBC(q, f_SE, f_NW, feq, omega); - } - - q = (subgridD.q[DIR_MP0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 + vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_PM0])[kse] = getInterpolatedDistributionForNoSlipBC(q, f_NW, f_SE, feq, omega); - } - - q = (subgridD.q[DIR_P0P])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_M0M])[kbw] = getInterpolatedDistributionForNoSlipBC(q, f_TE, f_BW, feq, omega); - } - - q = (subgridD.q[DIR_M0M])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_P0P])[kte] = getInterpolatedDistributionForNoSlipBC(q, f_BW, f_TE, feq, omega); - } - - q = (subgridD.q[DIR_P0M])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_M0P])[ktw] = getInterpolatedDistributionForNoSlipBC(q, f_BE, f_TW, feq, omega); - } - - q = (subgridD.q[DIR_M0P])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_P0M])[kbe] = getInterpolatedDistributionForNoSlipBC(q, f_TW, f_BE, feq, omega); - } - - q = (subgridD.q[DIR_0PP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_0MM])[kbs] = getInterpolatedDistributionForNoSlipBC(q, f_TN, f_BS, feq, omega); - } - - q = (subgridD.q[DIR_0MM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_0PP])[ktn] = getInterpolatedDistributionForNoSlipBC(q, f_BS, f_TN, feq, omega); - } - - q = (subgridD.q[DIR_0PM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_0MP])[kts] = getInterpolatedDistributionForNoSlipBC(q, f_BN, f_TS, feq, omega); - } - - q = (subgridD.q[DIR_0MP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - (dist.f[DIR_0PM])[kbn] = getInterpolatedDistributionForNoSlipBC(q, f_TS, f_BN, feq, omega); - } - - q = (subgridD.q[DIR_PPP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 + vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - (dist.f[DIR_MMM])[kbsw] = getInterpolatedDistributionForNoSlipBC(q, f_TNE, f_BSW, feq, omega); - } - - q = (subgridD.q[DIR_MMM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 - vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - (dist.f[DIR_PPP])[ktne] = getInterpolatedDistributionForNoSlipBC(q, f_BSW, f_TNE, feq, omega); - } - - q = (subgridD.q[DIR_PPM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 + vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - (dist.f[DIR_MMP])[ktsw] = getInterpolatedDistributionForNoSlipBC(q, f_BNE, f_TSW, feq, omega); - } - - q = (subgridD.q[DIR_MMP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 - vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - (dist.f[DIR_PPM])[kbne] = getInterpolatedDistributionForNoSlipBC(q, f_TSW, f_BNE, feq, omega); - } - - q = (subgridD.q[DIR_PMP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 - vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - (dist.f[DIR_MPM])[kbnw] = getInterpolatedDistributionForNoSlipBC(q, f_TSE, f_BNW, feq, omega); - } - - q = (subgridD.q[DIR_MPM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 + vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - (dist.f[DIR_PMP])[ktse] = getInterpolatedDistributionForNoSlipBC(q, f_BNW, f_TSE, feq, omega); - } - - q = (subgridD.q[DIR_PMM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 - vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - (dist.f[DIR_MPP])[ktnw] = getInterpolatedDistributionForNoSlipBC(q, f_BSE, f_TNW, feq, omega); - } - - q = (subgridD.q[DIR_MPP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 + vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - (dist.f[DIR_PMM])[kbse] = getInterpolatedDistributionForNoSlipBC(q, f_TNW, f_BSE, feq, omega); - } - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void BBDevice27( - real* distributions, - int* subgridDistanceIndices, - real* subgridDistances, - unsigned int numberOfBCnodes, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - ////////////////////////////////////////////////////////////////////////// - //! The no-slip boundary condition is executed in the following steps - //! - //////////////////////////////////////////////////////////////////////////////// - //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. - //! - const unsigned nodeIndex = getNodeIndex(); - - ////////////////////////////////////////////////////////////////////////// - // run for all indices in size of boundary condition (numberOfBCnodes) - if(nodeIndex < numberOfBCnodes) - { - ////////////////////////////////////////////////////////////////////////// - //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref - //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> - //! - Distributions27 dist; - getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); - - //////////////////////////////////////////////////////////////////////////////// - //! - Set local subgrid distances (q's) - //! - SubgridDistances27 subgridD; - getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes); - - //////////////////////////////////////////////////////////////////////////////// - //! - Set neighbor indices (necessary for indirect addressing) - //! - unsigned int indexOfBCnode = subgridDistanceIndices[nodeIndex]; - unsigned int ke = indexOfBCnode; - unsigned int kw = neighborX[indexOfBCnode]; - unsigned int kn = indexOfBCnode; - unsigned int ks = neighborY[indexOfBCnode]; - unsigned int kt = indexOfBCnode; - unsigned int kb = neighborZ[indexOfBCnode]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = indexOfBCnode; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = indexOfBCnode; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = indexOfBCnode; - 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 = indexOfBCnode; - unsigned int kbsw = neighborZ[ksw]; - - //////////////////////////////////////////////////////////////////////////////// - //! - Set local distributions - //! - real f_W = (dist.f[DIR_P00])[ke ]; - real f_E = (dist.f[DIR_M00])[kw ]; - real f_S = (dist.f[DIR_0P0])[kn ]; - real f_N = (dist.f[DIR_0M0])[ks ]; - real f_B = (dist.f[DIR_00P])[kt ]; - real f_T = (dist.f[DIR_00M])[kb ]; - real f_SW = (dist.f[DIR_PP0])[kne ]; - real f_NE = (dist.f[DIR_MM0])[ksw ]; - real f_NW = (dist.f[DIR_PM0])[kse ]; - real f_SE = (dist.f[DIR_MP0])[knw ]; - real f_BW = (dist.f[DIR_P0P])[kte ]; - real f_TE = (dist.f[DIR_M0M])[kbw ]; - real f_TW = (dist.f[DIR_P0M])[kbe ]; - real f_BE = (dist.f[DIR_M0P])[ktw ]; - real f_BS = (dist.f[DIR_0PP])[ktn ]; - real f_TN = (dist.f[DIR_0MM])[kbs ]; - real f_TS = (dist.f[DIR_0PM])[kbn ]; - real f_BN = (dist.f[DIR_0MP])[kts ]; - real f_BSW = (dist.f[DIR_PPP])[ktne ]; - real f_BNE = (dist.f[DIR_MMP])[ktsw ]; - real f_BNW = (dist.f[DIR_PMP])[ktse ]; - real f_BSE = (dist.f[DIR_MPP])[ktnw ]; - real f_TSW = (dist.f[DIR_PPM])[kbne ]; - real f_TNE = (dist.f[DIR_MMM])[kbsw ]; - real f_TNW = (dist.f[DIR_PMM])[kbse ]; - real f_TSE = (dist.f[DIR_MPM])[kbnw ]; - - //////////////////////////////////////////////////////////////////////////////// - //! - change the pointer to write the results in the correct array - //! - getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep); - - //////////////////////////////////////////////////////////////////////////////// - //! - rewrite distributions if there is a sub-grid distance (q) in same direction - real q; - q = (subgridD.q[DIR_P00])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_M00])[kw ]=f_E ; - q = (subgridD.q[DIR_M00])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_P00])[ke ]=f_W ; - q = (subgridD.q[DIR_0P0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_0M0])[ks ]=f_N ; - q = (subgridD.q[DIR_0M0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_0P0])[kn ]=f_S ; - q = (subgridD.q[DIR_00P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_00M])[kb ]=f_T ; - q = (subgridD.q[DIR_00M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_00P])[kt ]=f_B ; - q = (subgridD.q[DIR_PP0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_MM0])[ksw ]=f_NE ; - q = (subgridD.q[DIR_MM0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_PP0])[kne ]=f_SW ; - q = (subgridD.q[DIR_PM0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_MP0])[knw ]=f_SE ; - q = (subgridD.q[DIR_MP0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_PM0])[kse ]=f_NW ; - q = (subgridD.q[DIR_P0P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_M0M])[kbw ]=f_TE ; - q = (subgridD.q[DIR_M0M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_P0P])[kte ]=f_BW ; - q = (subgridD.q[DIR_P0M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_M0P])[ktw ]=f_BE ; - q = (subgridD.q[DIR_M0P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_P0M])[kbe ]=f_TW ; - q = (subgridD.q[DIR_0PP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_0MM])[kbs ]=f_TN ; - q = (subgridD.q[DIR_0MM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_0PP])[ktn ]=f_BS ; - q = (subgridD.q[DIR_0PM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_0MP])[kts ]=f_BN ; - q = (subgridD.q[DIR_0MP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_0PM])[kbn ]=f_TS ; - q = (subgridD.q[DIR_PPP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_MMM])[kbsw]=f_TNE; - q = (subgridD.q[DIR_MMM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_PPP])[ktne]=f_BSW; - q = (subgridD.q[DIR_PPM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_MMP])[ktsw]=f_BNE; - q = (subgridD.q[DIR_MMP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_PPM])[kbne]=f_TSW; - q = (subgridD.q[DIR_PMP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_MPM])[kbnw]=f_TSE; - q = (subgridD.q[DIR_MPM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_PMP])[ktse]=f_BNW; - q = (subgridD.q[DIR_PMM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_MPP])[ktnw]=f_BSE; - q = (subgridD.q[DIR_MPP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_PMM])[kbse]=f_TNW; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - diff --git a/src/gpu/VirtualFluids_GPU/GPU/PressBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/PressBCs27.cu deleted file mode 100644 index e0ea3c05251e995c55c2b980327059dfa7fd4069..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/GPU/PressBCs27.cu +++ /dev/null @@ -1,5294 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// 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/>. -// -//! \file PressBCs27.cu -//! \ingroup GPU -//! \author Martin Schoenherr, Anna Wellmann -//====================================================================================== -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include "basics/constants/NumericConstants.h" -#include "lbm/MacroscopicQuantities.h" -#include "LBM/GPUHelperFunctions/KernelUtilities.h" - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -using namespace vf::gpu; - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -__global__ void QInflowScaleByPressDevice27( - real* rhoBC, - real* DD, - int* k_Q, - int* k_N, - int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //////////////////////////////////////////////////////////////////////////////// - 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) - { - //////////////////////////////////////////////////////////////////////////////// - //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]; - //////////////////////////////////////////////////////////////////////////////// - //index1 - unsigned int K1QK = k_N[k]; - unsigned int k1zero= K1QK; - unsigned int k1e = K1QK; - unsigned int k1w = neighborX[K1QK]; - unsigned int k1n = K1QK; - unsigned int k1s = neighborY[K1QK]; - unsigned int k1t = K1QK; - unsigned int k1b = neighborZ[K1QK]; - unsigned int k1sw = neighborY[k1w]; - unsigned int k1ne = K1QK; - unsigned int k1se = k1s; - unsigned int k1nw = k1w; - unsigned int k1bw = neighborZ[k1w]; - unsigned int k1te = K1QK; - unsigned int k1be = k1b; - unsigned int k1tw = k1w; - unsigned int k1bs = neighborZ[k1s]; - unsigned int k1tn = K1QK; - unsigned int k1bn = k1b; - unsigned int k1ts = k1s; - unsigned int k1tse = k1s; - unsigned int k1bnw = k1bw; - unsigned int k1tnw = k1w; - unsigned int k1bse = k1bs; - unsigned int k1tsw = k1sw; - unsigned int k1bne = k1b; - unsigned int k1tne = K1QK; - unsigned int k1bsw = neighborZ[k1sw]; - //////////////////////////////////////////////////////////////////////////////// - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real f1_E = (D.f[DIR_P00])[k1e ]; - real f1_W = (D.f[DIR_M00])[k1w ]; - real f1_N = (D.f[DIR_0P0])[k1n ]; - real f1_S = (D.f[DIR_0M0])[k1s ]; - real f1_T = (D.f[DIR_00P])[k1t ]; - real f1_B = (D.f[DIR_00M])[k1b ]; - real f1_NE = (D.f[DIR_PP0])[k1ne ]; - real f1_SW = (D.f[DIR_MM0])[k1sw ]; - real f1_SE = (D.f[DIR_PM0])[k1se ]; - real f1_NW = (D.f[DIR_MP0])[k1nw ]; - real f1_TE = (D.f[DIR_P0P])[k1te ]; - real f1_BW = (D.f[DIR_M0M])[k1bw ]; - real f1_BE = (D.f[DIR_P0M])[k1be ]; - real f1_TW = (D.f[DIR_M0P])[k1tw ]; - real f1_TN = (D.f[DIR_0PP])[k1tn ]; - real f1_BS = (D.f[DIR_0MM])[k1bs ]; - real f1_BN = (D.f[DIR_0PM])[k1bn ]; - real f1_TS = (D.f[DIR_0MP])[k1ts ]; - //real f1_ZERO = (D.f[DIR_000])[k1zero]; - real f1_TNE = (D.f[DIR_PPP])[k1tne ]; - real f1_TSW = (D.f[DIR_MMP])[k1tsw ]; - real f1_TSE = (D.f[DIR_PMP])[k1tse ]; - real f1_TNW = (D.f[DIR_MPP])[k1tnw ]; - real f1_BNE = (D.f[DIR_PPM])[k1bne ]; - real f1_BSW = (D.f[DIR_MMM])[k1bsw ]; - real f1_BSE = (D.f[DIR_PMM])[k1bse ]; - real f1_BNW = (D.f[DIR_MPM])[k1bnw ]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real f_E = (D.f[DIR_P00])[ke ]; - real f_W = (D.f[DIR_M00])[kw ]; - real f_N = (D.f[DIR_0P0])[kn ]; - real f_S = (D.f[DIR_0M0])[ks ]; - real f_T = (D.f[DIR_00P])[kt ]; - real f_B = (D.f[DIR_00M])[kb ]; - real f_NE = (D.f[DIR_PP0])[kne ]; - real f_SW = (D.f[DIR_MM0])[ksw ]; - real f_SE = (D.f[DIR_PM0])[kse ]; - real f_NW = (D.f[DIR_MP0])[knw ]; - real f_TE = (D.f[DIR_P0P])[kte ]; - real f_BW = (D.f[DIR_M0M])[kbw ]; - real f_BE = (D.f[DIR_P0M])[kbe ]; - real f_TW = (D.f[DIR_M0P])[ktw ]; - real f_TN = (D.f[DIR_0PP])[ktn ]; - real f_BS = (D.f[DIR_0MM])[kbs ]; - real f_BN = (D.f[DIR_0PM])[kbn ]; - real f_TS = (D.f[DIR_0MP])[kts ]; - //real f_ZERO = (D.f[DIR_000])[kzero]; - real f_TNE = (D.f[DIR_PPP])[ktne ]; - real f_TSW = (D.f[DIR_MMP])[ktsw ]; - real f_TSE = (D.f[DIR_PMP])[ktse ]; - real f_TNW = (D.f[DIR_MPP])[ktnw ]; - real f_BNE = (D.f[DIR_PPM])[kbne ]; - real f_BSW = (D.f[DIR_MMM])[kbsw ]; - real f_BSE = (D.f[DIR_PMM])[kbse ]; - real f_BNW = (D.f[DIR_MPM])[kbnw ]; - ////////////////////////////////////////////////////////////////////////// - // real vx1, vx2, vx3; - real drho, drho1; - ////////////////////////////////////////////////////////////////////////// - //Dichte - drho1 = f1_TSE + f1_TNW + f1_TNE + f1_TSW + f1_BSE + f1_BNW + f1_BNE + f1_BSW + - f1_BN + f1_TS + f1_TN + f1_BS + f1_BE + f1_TW + f1_TE + f1_BW + f1_SE + f1_NW + f1_NE + f1_SW + - f1_T + f1_B + f1_N + f1_S + f1_E + f1_W + ((D.f[DIR_000])[k1zero]); - 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[DIR_000])[kzero]); - ////////////////////////////////////////////////////////////////////////// - //Schallgeschwindigkeit - real cs = c1o1 / sqrtf(c3o1); - ////////////////////////////////////////////////////////////////////////// - real rhoInterpol = drho1 * cs + (c1o1 - cs) * drho; - //real diffRho = (rhoBC[k] + one) / (rhoInterpol + one); - real diffRhoToAdd = rhoBC[k] - rhoInterpol; - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //no velocity - ////////////////////////////////////////// - f_E = f1_E * cs + (c1o1 - cs) * f_E ; - f_W = f1_W * cs + (c1o1 - cs) * f_W ; - f_N = f1_N * cs + (c1o1 - cs) * f_N ; - f_S = f1_S * cs + (c1o1 - cs) * f_S ; - f_T = f1_T * cs + (c1o1 - cs) * f_T ; - f_B = f1_B * cs + (c1o1 - cs) * f_B ; - f_NE = f1_NE * cs + (c1o1 - cs) * f_NE ; - f_SW = f1_SW * cs + (c1o1 - cs) * f_SW ; - f_SE = f1_SE * cs + (c1o1 - cs) * f_SE ; - f_NW = f1_NW * cs + (c1o1 - cs) * f_NW ; - f_TE = f1_TE * cs + (c1o1 - cs) * f_TE ; - f_BW = f1_BW * cs + (c1o1 - cs) * f_BW ; - f_BE = f1_BE * cs + (c1o1 - cs) * f_BE ; - f_TW = f1_TW * cs + (c1o1 - cs) * f_TW ; - f_TN = f1_TN * cs + (c1o1 - cs) * f_TN ; - f_BS = f1_BS * cs + (c1o1 - cs) * f_BS ; - f_BN = f1_BN * cs + (c1o1 - cs) * f_BN ; - f_TS = f1_TS * cs + (c1o1 - cs) * f_TS ; - f_TNE = f1_TNE * cs + (c1o1 - cs) * f_TNE ; - f_TSW = f1_TSW * cs + (c1o1 - cs) * f_TSW ; - f_TSE = f1_TSE * cs + (c1o1 - cs) * f_TSE ; - f_TNW = f1_TNW * cs + (c1o1 - cs) * f_TNW ; - f_BNE = f1_BNE * cs + (c1o1 - cs) * f_BNE ; - f_BSW = f1_BSW * cs + (c1o1 - cs) * f_BSW ; - f_BSE = f1_BSE * cs + (c1o1 - cs) * f_BSE ; - f_BNW = f1_BNW * cs + (c1o1 - cs) * f_BNW ; - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //scale by press - ////////////////////////////////////////// - //f_E = (f_E + c2over27 ) * diffRho - c2over27 ; - // f_W = (f_W + c2over27 ) * diffRho - c2over27 ; - // f_N = (f_N + c2over27 ) * diffRho - c2over27 ; - // f_S = (f_S + c2over27 ) * diffRho - c2over27 ; - // f_T = (f_T + c2over27 ) * diffRho - c2over27 ; - // f_B = (f_B + c2over27 ) * diffRho - c2over27 ; - //f_NE = (f_NE + c1over54 ) * diffRho - c1over54 ; - // f_SW = (f_SW + c1over54 ) * diffRho - c1over54 ; - // f_SE = (f_SE + c1over54 ) * diffRho - c1over54 ; - // f_NW = (f_NW + c1over54 ) * diffRho - c1over54 ; - // f_TE = (f_TE + c1over54 ) * diffRho - c1over54 ; - // f_BW = (f_BW + c1over54 ) * diffRho - c1over54 ; - // f_BE = (f_BE + c1over54 ) * diffRho - c1over54 ; - // f_TW = (f_TW + c1over54 ) * diffRho - c1over54 ; - // f_TN = (f_TN + c1over54 ) * diffRho - c1over54 ; - // f_BS = (f_BS + c1over54 ) * diffRho - c1over54 ; - // f_BN = (f_BN + c1over54 ) * diffRho - c1over54 ; - // f_TS = (f_TS + c1over54 ) * diffRho - c1over54 ; - // f_TNE = (f_TNE + c1over216) * diffRho - c1over216; - // f_TSW = (f_TSW + c1over216) * diffRho - c1over216; - // f_TSE = (f_TSE + c1over216) * diffRho - c1over216; - // f_TNW = (f_TNW + c1over216) * diffRho - c1over216; - // f_BNE = (f_BNE + c1over216) * diffRho - c1over216; - // f_BSW = (f_BSW + c1over216) * diffRho - c1over216; - // f_BSE = (f_BSE + c1over216) * diffRho - c1over216; - // f_BNW = (f_BNW + c1over216) * diffRho - c1over216; - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // add press - ////////////////////////////////////////// - f_E = (f_E + c2o27 * diffRhoToAdd); - f_W = (f_W + c2o27 * diffRhoToAdd); - f_N = (f_N + c2o27 * diffRhoToAdd); - f_S = (f_S + c2o27 * diffRhoToAdd); - f_T = (f_T + c2o27 * diffRhoToAdd); - f_B = (f_B + c2o27 * diffRhoToAdd); - f_NE = (f_NE + c1o54 * diffRhoToAdd); - f_SW = (f_SW + c1o54 * diffRhoToAdd); - f_SE = (f_SE + c1o54 * diffRhoToAdd); - f_NW = (f_NW + c1o54 * diffRhoToAdd); - f_TE = (f_TE + c1o54 * diffRhoToAdd); - f_BW = (f_BW + c1o54 * diffRhoToAdd); - f_BE = (f_BE + c1o54 * diffRhoToAdd); - f_TW = (f_TW + c1o54 * diffRhoToAdd); - f_TN = (f_TN + c1o54 * diffRhoToAdd); - f_BS = (f_BS + c1o54 * diffRhoToAdd); - f_BN = (f_BN + c1o54 * diffRhoToAdd); - f_TS = (f_TS + c1o54 * diffRhoToAdd); - f_TNE = (f_TNE + c1o216 * diffRhoToAdd); - f_TSW = (f_TSW + c1o216 * diffRhoToAdd); - f_TSE = (f_TSE + c1o216 * diffRhoToAdd); - f_TNW = (f_TNW + c1o216 * diffRhoToAdd); - f_BNE = (f_BNE + c1o216 * diffRhoToAdd); - f_BSW = (f_BSW + c1o216 * diffRhoToAdd); - f_BSE = (f_BSE + c1o216 * diffRhoToAdd); - f_BNW = (f_BNW + c1o216 * diffRhoToAdd); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - ////////////////////////////////////////////////////////////////////////// - //__syncthreads(); - // -X - //(D.f[DIR_P00])[ke ] = f_E ; - //(D.f[DIR_PM0])[kse ] = f_SE ; - //(D.f[DIR_PP0])[kne ] = f_NE ; - //(D.f[DIR_P0M])[kbe ] = f_BE ; - //(D.f[DIR_P0P])[kte ] = f_TE ; - //(D.f[DIR_PMP])[ktse ] = f_TSE ; - //(D.f[DIR_PPP])[ktne ] = f_TNE ; - //(D.f[DIR_PMM])[kbse ] = f_BSE ; - //(D.f[DIR_PPM])[kbne ] = f_BNE ; - // X - (D.f[DIR_M00])[kw ] = f_W ; - (D.f[DIR_MM0])[ksw ] = f_SW ; - (D.f[DIR_MP0])[knw ] = f_NW ; - (D.f[DIR_M0M])[kbw ] = f_BW ; - (D.f[DIR_M0P])[ktw ] = f_TW ; - (D.f[DIR_MMP])[ktsw ] = f_TSW ; - (D.f[DIR_MPP])[ktnw ] = f_TNW ; - (D.f[DIR_MMM])[kbsw ] = f_BSW ; - (D.f[DIR_MPM])[kbnw ] = f_BNW ; - // Y - //(D.f[DIR_0M0])[ks ] = f_S ; - //(D.f[DIR_PM0])[kse ] = f_SE ; - //(D.f[DIR_MM0])[ksw ] = f_SW ; - //(D.f[DIR_0MP])[kts ] = f_TS ; - //(D.f[DIR_0MM])[kbs ] = f_BS ; - //(D.f[DIR_PMP])[ktse ] = f_TSE ; - //(D.f[DIR_MMP])[ktsw ] = f_TSW ; - //(D.f[DIR_PMM])[kbse ] = f_BSE ; - //(D.f[DIR_MMM])[kbsw ] = f_BSW ; - // Z - //(D.f[DIR_00M])[kb ] = f_B ; - //(D.f[DIR_P0M])[kbe ] = f_BE ; - //(D.f[DIR_M0M])[kbw ] = f_BW ; - //(D.f[DIR_0PM])[kbn ] = f_BN ; - //(D.f[DIR_0MM])[kbs ] = f_BS ; - //(D.f[DIR_PPM])[kbne ] = f_BNE ; - //(D.f[DIR_MPM])[kbnw ] = f_BNW ; - //(D.f[DIR_PMM])[kbse ] = f_BSE ; - //(D.f[DIR_MMM])[kbsw ] = f_BSW ; - ////////////////////////////////////////////////////////////////////////// - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -__global__ void QPressDeviceIncompNEQ27( - real* rhoBC, - real* DD, - int* k_Q, - int* k_N, - int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //////////////////////////////////////////////////////////////////////////////// - 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) - { - //////////////////////////////////////////////////////////////////////////////// - //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]; - //////////////////////////////////////////////////////////////////////////////// - //index1 - unsigned int K1QK = k_N[k]; - unsigned int k1zero= K1QK; - unsigned int k1e = K1QK; - unsigned int k1w = neighborX[K1QK]; - unsigned int k1n = K1QK; - unsigned int k1s = neighborY[K1QK]; - unsigned int k1t = K1QK; - unsigned int k1b = neighborZ[K1QK]; - unsigned int k1sw = neighborY[k1w]; - unsigned int k1ne = K1QK; - unsigned int k1se = k1s; - unsigned int k1nw = k1w; - unsigned int k1bw = neighborZ[k1w]; - unsigned int k1te = K1QK; - unsigned int k1be = k1b; - unsigned int k1tw = k1w; - unsigned int k1bs = neighborZ[k1s]; - unsigned int k1tn = K1QK; - unsigned int k1bn = k1b; - unsigned int k1ts = k1s; - unsigned int k1tse = k1s; - unsigned int k1bnw = k1bw; - unsigned int k1tnw = k1w; - unsigned int k1bse = k1bs; - unsigned int k1tsw = k1sw; - unsigned int k1bne = k1b; - unsigned int k1tne = K1QK; - unsigned int k1bsw = neighborZ[k1sw]; - //////////////////////////////////////////////////////////////////////////////// - Distributions27 D; - if (isEvenTimestep==true) //// ACHTUNG PREColl !!!!!!!!!!!!!! - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO, - f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW; - - f1_W = (D.f[DIR_P00])[k1e ]; - f1_E = (D.f[DIR_M00])[k1w ]; - f1_S = (D.f[DIR_0P0])[k1n ]; - f1_N = (D.f[DIR_0M0])[k1s ]; - f1_B = (D.f[DIR_00P])[k1t ]; - f1_T = (D.f[DIR_00M])[k1b ]; - f1_SW = (D.f[DIR_PP0])[k1ne ]; - f1_NE = (D.f[DIR_MM0])[k1sw ]; - f1_NW = (D.f[DIR_PM0])[k1se ]; - f1_SE = (D.f[DIR_MP0])[k1nw ]; - f1_BW = (D.f[DIR_P0P])[k1te ]; - f1_TE = (D.f[DIR_M0M])[k1bw ]; - f1_TW = (D.f[DIR_P0M])[k1be ]; - f1_BE = (D.f[DIR_M0P])[k1tw ]; - f1_BS = (D.f[DIR_0PP])[k1tn ]; - f1_TN = (D.f[DIR_0MM])[k1bs ]; - f1_TS = (D.f[DIR_0PM])[k1bn ]; - f1_BN = (D.f[DIR_0MP])[k1ts ]; - f1_ZERO = (D.f[DIR_000])[k1zero]; - f1_BSW = (D.f[DIR_PPP])[k1tne ]; - f1_BNE = (D.f[DIR_MMP])[k1tsw ]; - f1_BNW = (D.f[DIR_PMP])[k1tse ]; - f1_BSE = (D.f[DIR_MPP])[k1tnw ]; - f1_TSW = (D.f[DIR_PPM])[k1bne ]; - f1_TNE = (D.f[DIR_MMM])[k1bsw ]; - f1_TNW = (D.f[DIR_PMM])[k1bse ]; - f1_TSE = (D.f[DIR_MPM])[k1bnw ]; - - ////////////////////////////////////////////////////////////////////////// - real drho1 = f1_ZERO+f1_E+f1_W+f1_N+f1_S+f1_T+f1_B+f1_NE+f1_SW+f1_SE+f1_NW+f1_TE+f1_BW+f1_BE+f1_TW+f1_TN+f1_BS+f1_BN+f1_TS+ - f1_TNE+f1_TSW+f1_TSE+f1_TNW+f1_BNE+f1_BSW+f1_BSE+f1_BNW; - - real vx1 = ((f1_TSE - f1_BNW) - (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) - (f1_TSW - f1_BNE)) + - ((f1_BE - f1_TW) + (f1_TE - f1_BW)) + ((f1_SE - f1_NW) + (f1_NE - f1_SW)) + - (f1_E - f1_W); - - - real vx2 = (-(f1_TSE - f1_BNW) + (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) - (f1_TSW - f1_BNE)) + - ((f1_BN - f1_TS) + (f1_TN - f1_BS)) + (-(f1_SE - f1_NW) + (f1_NE - f1_SW)) + - (f1_N - f1_S); - - real vx3 = ((f1_TSE - f1_BNW) + (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) + (f1_TSW - f1_BNE)) + - (-(f1_BN - f1_TS) + (f1_TN - f1_BS)) + ((f1_TE - f1_BW) - (f1_BE - f1_TW)) + - (f1_T - f1_B); - - real cusq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - f1_ZERO -= c8o27* (drho1-(drho1+c1o1)*cusq); - f1_E -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cusq)); - f1_W -= c2o27* (drho1+(drho1+c1o1)*(c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cusq)); - f1_N -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cusq)); - f1_S -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cusq)); - f1_T -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx3)+c9o2*( vx3)*( vx3)-cusq)); - f1_B -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cusq)); - f1_NE -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cusq)); - f1_SW -= c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cusq)); - f1_SE -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cusq)); - f1_NW -= c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cusq)); - f1_TE -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cusq)); - f1_BW -= c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cusq)); - f1_BE -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cusq)); - f1_TW -= c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cusq)); - f1_TN -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cusq)); - f1_BS -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cusq)); - f1_BN -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cusq)); - f1_TS -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cusq)); - f1_TNE -= c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq)); - f1_BSW -= c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq)); - f1_BNE -= c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq)); - f1_TSW -= c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq)); - f1_TSE -= c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq)); - f1_BNW -= c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq)); - f1_BSE -= c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq)); - f1_TNW -= c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq)); - - drho1 = rhoBC[k]; - - //if(vx1 < zero){ - // vx1 *= 0.9; - //} - //if(vx2 < zero){ - // vx2 *= c1o10;//0.9; - //} - - f1_ZERO += c8o27* (drho1-(drho1+c1o1)*cusq); - f1_E += c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cusq)); - f1_W += c2o27* (drho1+(drho1+c1o1)*(c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cusq)); - f1_N += c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cusq)); - f1_S += c2o27* (drho1+(drho1+c1o1)*(c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cusq)); - f1_T += c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx3)+c9o2*( vx3)*( vx3)-cusq)); - f1_B += c2o27* (drho1+(drho1+c1o1)*(c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cusq)); - f1_NE += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cusq)); - f1_SW += c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cusq)); - f1_SE += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cusq)); - f1_NW += c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cusq)); - f1_TE += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cusq)); - f1_BW += c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cusq)); - f1_BE += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cusq)); - f1_TW += c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cusq)); - f1_TN += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cusq)); - f1_BS += c1o54* (drho1+(drho1+c1o1)*(c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cusq)); - f1_BN += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cusq)); - f1_TS += c1o54* (drho1+(drho1+c1o1)*(c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cusq)); - f1_TNE += c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq)); - f1_BSW += c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq)); - f1_BNE += c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq)); - f1_TSW += c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq)); - f1_TSE += c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq)); - f1_BNW += c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq)); - f1_BSE += c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq)); - f1_TNW += c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq)); - - //drho1 = (drho1 + rhoBC[k])/2.f; - //drho1 = drho1 - rhoBC[k]; - ////////////////////////////////////////////////////////////////////////// - - __syncthreads(); - - (D.f[DIR_P00])[ke ] = f1_W ; - (D.f[DIR_M00])[kw ] = f1_E ; - (D.f[DIR_0P0])[kn ] = f1_S ; - (D.f[DIR_0M0])[ks ] = f1_N ; - (D.f[DIR_00P])[kt ] = f1_B ; - (D.f[DIR_00M])[kb ] = f1_T ; - (D.f[DIR_PP0])[kne ] = f1_SW ; - (D.f[DIR_MM0])[ksw ] = f1_NE ; - (D.f[DIR_PM0])[kse ] = f1_NW ; - (D.f[DIR_MP0])[knw ] = f1_SE ; - (D.f[DIR_P0P])[kte ] = f1_BW ; - (D.f[DIR_M0M])[kbw ] = f1_TE ; - (D.f[DIR_P0M])[kbe ] = f1_TW ; - (D.f[DIR_M0P])[ktw ] = f1_BE ; - (D.f[DIR_0PP])[ktn ] = f1_BS ; - (D.f[DIR_0MM])[kbs ] = f1_TN ; - (D.f[DIR_0PM])[kbn ] = f1_TS ; - (D.f[DIR_0MP])[kts ] = f1_BN ; - (D.f[DIR_000])[kzero] = f1_ZERO; - (D.f[DIR_PPP])[ktne ] = f1_BSW ; - (D.f[DIR_MMP])[ktsw ] = f1_BNE ; - (D.f[DIR_PMP])[ktse ] = f1_BNW ; - (D.f[DIR_MPP])[ktnw ] = f1_BSE ; - (D.f[DIR_PPM])[kbne ] = f1_TSW ; - (D.f[DIR_MMM])[kbsw ] = f1_TNE ; - (D.f[DIR_PMM])[kbse ] = f1_TNW ; - (D.f[DIR_MPM])[kbnw ] = f1_TSE ; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -__global__ void QPressDeviceNEQ27( - real* rhoBC, - real* distributions, - int* bcNodeIndices, - int* bcNeighborIndices, - int numberOfBCnodes, - real omega1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //////////////////////////////////////////////////////////////////////////////// - //! The pressure boundary condition is executed in the following steps - //! - - //////////////////////////////////////////////////////////////////////////////// - //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. - //! - const unsigned nodeIndex = getNodeIndex(); - - //////////////////////////////////////////////////////////////////////////////// - //! - Run for all indices in size of boundary condition (numberOfBCnodes) - //! - if(nodeIndex < numberOfBCnodes) - { - ////////////////////////////////////////////////////////////////////////// - //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref - //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> - //! - Distributions27 dist; - getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); - - //////////////////////////////////////////////////////////////////////////////// - //! - Set local pressure - //! - real rhoBClocal = rhoBC[nodeIndex]; - - //////////////////////////////////////////////////////////////////////////////// - //! - Set neighbor indices (necessary for indirect addressing) - //! - unsigned int KQK = bcNodeIndices[nodeIndex]; - 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]; - //////////////////////////////////////////////////////////////////////////////// - //! - Set neighbor indices (necessary for indirect addressing) for neighboring node - //! - unsigned int K1QK = bcNeighborIndices[nodeIndex]; - unsigned int k1zero= K1QK; - unsigned int k1e = K1QK; - unsigned int k1w = neighborX[K1QK]; - unsigned int k1n = K1QK; - unsigned int k1s = neighborY[K1QK]; - unsigned int k1t = K1QK; - unsigned int k1b = neighborZ[K1QK]; - unsigned int k1sw = neighborY[k1w]; - unsigned int k1ne = K1QK; - unsigned int k1se = k1s; - unsigned int k1nw = k1w; - unsigned int k1bw = neighborZ[k1w]; - unsigned int k1te = K1QK; - unsigned int k1be = k1b; - unsigned int k1tw = k1w; - unsigned int k1bs = neighborZ[k1s]; - unsigned int k1tn = K1QK; - unsigned int k1bn = k1b; - unsigned int k1ts = k1s; - unsigned int k1tse = k1s; - unsigned int k1bnw = k1bw; - unsigned int k1tnw = k1w; - unsigned int k1bse = k1bs; - unsigned int k1tsw = k1sw; - unsigned int k1bne = k1b; - unsigned int k1tne = K1QK; - unsigned int k1bsw = neighborZ[k1sw]; - - //////////////////////////////////////////////////////////////////////////////// - //! - Set local distributions for neighboring node - //! - real f1_W = (dist.f[DIR_P00])[k1e ]; - real f1_E = (dist.f[DIR_M00])[k1w ]; - real f1_S = (dist.f[DIR_0P0])[k1n ]; - real f1_N = (dist.f[DIR_0M0])[k1s ]; - real f1_B = (dist.f[DIR_00P])[k1t ]; - real f1_T = (dist.f[DIR_00M])[k1b ]; - real f1_SW = (dist.f[DIR_PP0])[k1ne ]; - real f1_NE = (dist.f[DIR_MM0])[k1sw ]; - real f1_NW = (dist.f[DIR_PM0])[k1se ]; - real f1_SE = (dist.f[DIR_MP0])[k1nw ]; - real f1_BW = (dist.f[DIR_P0P])[k1te ]; - real f1_TE = (dist.f[DIR_M0M])[k1bw ]; - real f1_TW = (dist.f[DIR_P0M])[k1be ]; - real f1_BE = (dist.f[DIR_M0P])[k1tw ]; - real f1_BS = (dist.f[DIR_0PP])[k1tn ]; - real f1_TN = (dist.f[DIR_0MM])[k1bs ]; - real f1_TS = (dist.f[DIR_0PM])[k1bn ]; - real f1_BN = (dist.f[DIR_0MP])[k1ts ]; - real f1_ZERO = (dist.f[DIR_000])[k1zero]; - real f1_BSW = (dist.f[DIR_PPP])[k1tne ]; - real f1_BNE = (dist.f[DIR_MMP])[k1tsw ]; - real f1_BNW = (dist.f[DIR_PMP])[k1tse ]; - real f1_BSE = (dist.f[DIR_MPP])[k1tnw ]; - real f1_TSW = (dist.f[DIR_PPM])[k1bne ]; - real f1_TNE = (dist.f[DIR_MMM])[k1bsw ]; - real f1_TNW = (dist.f[DIR_PMM])[k1bse ]; - real f1_TSE = (dist.f[DIR_MPM])[k1bnw ]; - - //////////////////////////////////////////////////////////////////////////////// - //! - Calculate macroscopic quantities (for neighboring node) - //! - real drho1 = f1_TSE + f1_TNW + f1_TNE + f1_TSW + f1_BSE + f1_BNW + f1_BNE + f1_BSW + - f1_BN + f1_TS + f1_TN + f1_BS + f1_BE + f1_TW + f1_TE + f1_BW + f1_SE + f1_NW + f1_NE + f1_SW + - f1_T + f1_B + f1_N + f1_S + f1_E + f1_W + ((dist.f[DIR_000])[kzero]); - - real vx1 = (((f1_TSE - f1_BNW) - (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) - (f1_TSW - f1_BNE)) + - ((f1_BE - f1_TW) + (f1_TE - f1_BW)) + ((f1_SE - f1_NW) + (f1_NE - f1_SW)) + - (f1_E - f1_W)) / (c1o1 + drho1); - - real vx2 = ((-(f1_TSE - f1_BNW) + (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) - (f1_TSW - f1_BNE)) + - ((f1_BN - f1_TS) + (f1_TN - f1_BS)) + (-(f1_SE - f1_NW) + (f1_NE - f1_SW)) + - (f1_N - f1_S)) / (c1o1 + drho1); - - real vx3 = (((f1_TSE - f1_BNW) + (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) + (f1_TSW - f1_BNE)) + - (-(f1_BN - f1_TS) + (f1_TN - f1_BS)) + ((f1_TE - f1_BW) - (f1_BE - f1_TW)) + - (f1_T - f1_B)) / (c1o1 + drho1); - - real cusq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); - - //////////////////////////////////////////////////////////////////////////////// - //! subtract the equilibrium (eq) to obtain the non-equilibrium (neq) (for neighboring node) - //! - f1_ZERO -= c8o27* (drho1-(drho1+c1o1)*cusq); - f1_E -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cusq)); - f1_W -= c2o27* (drho1+(drho1+c1o1)*(c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cusq)); - f1_N -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cusq)); - f1_S -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cusq)); - f1_T -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx3)+c9o2*( vx3)*( vx3)-cusq)); - f1_B -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cusq)); - f1_NE -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cusq)); - f1_SW -= c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cusq)); - f1_SE -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cusq)); - f1_NW -= c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cusq)); - f1_TE -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cusq)); - f1_BW -= c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cusq)); - f1_BE -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cusq)); - f1_TW -= c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cusq)); - f1_TN -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cusq)); - f1_BS -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cusq)); - f1_BN -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cusq)); - f1_TS -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cusq)); - f1_TNE -= c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq)); - f1_BSW -= c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq)); - f1_BNE -= c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq)); - f1_TSW -= c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq)); - f1_TSE -= c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq)); - f1_BNW -= c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq)); - f1_BSE -= c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq)); - f1_TNW -= c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq)); - - //////////////////////////////////////////////////////////////////////////////// - //! redefine drho1 with rhoBClocal - //! - drho1 = rhoBClocal; - - //////////////////////////////////////////////////////////////////////////////// - //! add the equilibrium (eq), which is calculated with rhoBClocal (for neighboring node) - //! - f1_ZERO += c8o27* (drho1-(drho1+c1o1)*cusq); - f1_E += c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cusq)); - f1_W += c2o27* (drho1+(drho1+c1o1)*(c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cusq)); - f1_N += c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cusq)); - f1_S += c2o27* (drho1+(drho1+c1o1)*(c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cusq)); - f1_T += c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx3)+c9o2*( vx3)*( vx3)-cusq)); - f1_B += c2o27* (drho1+(drho1+c1o1)*(c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cusq)); - f1_NE += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cusq)); - f1_SW += c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cusq)); - f1_SE += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cusq)); - f1_NW += c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cusq)); - f1_TE += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cusq)); - f1_BW += c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cusq)); - f1_BE += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cusq)); - f1_TW += c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cusq)); - f1_TN += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cusq)); - f1_BS += c1o54* (drho1+(drho1+c1o1)*(c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cusq)); - f1_BN += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cusq)); - f1_TS += c1o54* (drho1+(drho1+c1o1)*(c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cusq)); - f1_TNE += c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq)); - f1_BSW += c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq)); - f1_BNE += c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq)); - f1_TSW += c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq)); - f1_TSE += c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq)); - f1_BNW += c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq)); - f1_BSE += c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq)); - f1_TNW += c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq)); - - ////////////////////////////////////////////////////////////////////////// - - __syncthreads(); - - //////////////////////////////////////////////////////////////////////////////// - //! write the new distributions to the bc nodes - //! - (dist.f[DIR_P00])[ke ] = f1_W ; - (dist.f[DIR_M00])[kw ] = f1_E ; - (dist.f[DIR_0P0])[kn ] = f1_S ; - (dist.f[DIR_0M0])[ks ] = f1_N ; - (dist.f[DIR_00P])[kt ] = f1_B ; - (dist.f[DIR_00M])[kb ] = f1_T ; - (dist.f[DIR_PP0])[kne ] = f1_SW ; - (dist.f[DIR_MM0])[ksw ] = f1_NE ; - (dist.f[DIR_PM0])[kse ] = f1_NW ; - (dist.f[DIR_MP0])[knw ] = f1_SE ; - (dist.f[DIR_P0P])[kte ] = f1_BW ; - (dist.f[DIR_M0M])[kbw ] = f1_TE ; - (dist.f[DIR_P0M])[kbe ] = f1_TW ; - (dist.f[DIR_M0P])[ktw ] = f1_BE ; - (dist.f[DIR_0PP])[ktn ] = f1_BS ; - (dist.f[DIR_0MM])[kbs ] = f1_TN ; - (dist.f[DIR_0PM])[kbn ] = f1_TS ; - (dist.f[DIR_0MP])[kts ] = f1_BN ; - (dist.f[DIR_000])[kzero] = f1_ZERO; - (dist.f[DIR_PPP])[ktne ] = f1_BSW ; - (dist.f[DIR_MMP])[ktsw ] = f1_BNE ; - (dist.f[DIR_PMP])[ktse ] = f1_BNW ; - (dist.f[DIR_MPP])[ktnw ] = f1_BSE ; - (dist.f[DIR_PPM])[kbne ] = f1_TSW ; - (dist.f[DIR_MMM])[kbsw ] = f1_TNE ; - (dist.f[DIR_PMM])[kbse ] = f1_TNW ; - (dist.f[DIR_MPM])[kbnw ] = f1_TSE ; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////// -__global__ void LB_BC_Press_East27( - int nx, - int ny, - int tz, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //thread-index - int ty = blockIdx.x; - int tx = threadIdx.x; - - int k, k1, nxny; // Zugriff auf arrays im device - - int x = tx + STARTOFFX; // Globaler x-Index - int y = ty + STARTOFFY; // Globaler y-Index - int z = tz + STARTOFFZ; // Globaler z-Index - - k = nx*(ny*z + y) + x; - nxny = nx*ny; - k1 = k-nxny; - - if( bcMatD[k] == GEO_PRESS && bcMatD[k1] == GEO_FLUID) - { - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int kzero= k; - unsigned int ke = k; - unsigned int kw = neighborX[k]; - unsigned int kn = k; - unsigned int ks = neighborY[k]; - unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = k; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = k; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = k; - 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 = k; - unsigned int kbsw = neighborZ[ksw]; - //unsigned int kzero= k; - //unsigned int ke = k; - //unsigned int kw = k + 1; - //unsigned int kn = k; - //unsigned int ks = k + nx; - //unsigned int kt = k; - //unsigned int kb = k + nxny; - //unsigned int ksw = k + nx + 1; - //unsigned int kne = k; - //unsigned int kse = k + nx; - //unsigned int knw = k + 1; - //unsigned int kbw = k + nxny + 1; - //unsigned int kte = k; - //unsigned int kbe = k + nxny; - //unsigned int ktw = k + 1; - //unsigned int kbs = k + nxny + nx; - //unsigned int ktn = k; - //unsigned int kbn = k + nxny; - //unsigned int kts = k + nx; - //unsigned int ktse = k + nx; - //unsigned int kbnw = k + nxny + 1; - //unsigned int ktnw = k + 1; - //unsigned int kbse = k + nxny + nx; - //unsigned int ktsw = k + nx + 1; - //unsigned int kbne = k + nxny; - //unsigned int ktne = k; - //unsigned int kbsw = k + nxny + nx + 1; - //////////////////////////////////////////////////////////////////////////////// - //index1 - unsigned int k1zero= k1; - unsigned int k1e = k1; - unsigned int k1w = neighborX[k1]; - unsigned int k1n = k1; - unsigned int k1s = neighborY[k1]; - unsigned int k1t = k1; - unsigned int k1b = neighborZ[k1]; - unsigned int k1sw = neighborY[k1w]; - unsigned int k1ne = k1; - unsigned int k1se = k1s; - unsigned int k1nw = k1w; - unsigned int k1bw = neighborZ[k1w]; - unsigned int k1te = k1; - unsigned int k1be = k1b; - unsigned int k1tw = k1w; - unsigned int k1bs = neighborZ[k1s]; - unsigned int k1tn = k1; - unsigned int k1bn = k1b; - unsigned int k1ts = k1s; - unsigned int k1tse = k1s; - unsigned int k1bnw = k1bw; - unsigned int k1tnw = k1w; - unsigned int k1bse = k1bs; - unsigned int k1tsw = k1sw; - unsigned int k1bne = k1b; - unsigned int k1tne = k1; - unsigned int k1bsw = neighborZ[k1sw]; - //unsigned int k1zero= k1; - //unsigned int k1e = k1; - //unsigned int k1w = k1 + 1; - //unsigned int k1n = k1; - //unsigned int k1s = k1 + nx; - //unsigned int k1t = k1; - //unsigned int k1b = k1 + nxny; - //unsigned int k1sw = k1 + nx + 1; - //unsigned int k1ne = k1; - //unsigned int k1se = k1 + nx; - //unsigned int k1nw = k1 + 1; - //unsigned int k1bw = k1 + nxny + 1; - //unsigned int k1te = k1; - //unsigned int k1be = k1 + nxny; - //unsigned int k1tw = k1 + 1; - //unsigned int k1bs = k1 + nxny + nx; - //unsigned int k1tn = k1; - //unsigned int k1bn = k1 + nxny; - //unsigned int k1ts = k1 + nx; - //unsigned int k1tse = k1 + nx; - //unsigned int k1bnw = k1 + nxny + 1; - //unsigned int k1tnw = k1 + 1; - //unsigned int k1bse = k1 + nxny + nx; - //unsigned int k1tsw = k1 + nx + 1; - //unsigned int k1bne = k1 + nxny; - //unsigned int k1tne = k1; - //unsigned int k1bsw = k1 + nxny + nx + 1; - //////////////////////////////////////////////////////////////////////////////// - real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO, - f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW; - - f1_W = (D.f[DIR_P00])[k1e ]; - f1_E = (D.f[DIR_M00])[k1w ]; - f1_S = (D.f[DIR_0P0])[k1n ]; - f1_N = (D.f[DIR_0M0])[k1s ]; - f1_B = (D.f[DIR_00P])[k1t ]; - f1_T = (D.f[DIR_00M])[k1b ]; - f1_SW = (D.f[DIR_PP0])[k1ne ]; - f1_NE = (D.f[DIR_MM0])[k1sw ]; - f1_NW = (D.f[DIR_PM0])[k1se ]; - f1_SE = (D.f[DIR_MP0])[k1nw ]; - f1_BW = (D.f[DIR_P0P])[k1te ]; - f1_TE = (D.f[DIR_M0M])[k1bw ]; - f1_TW = (D.f[DIR_P0M])[k1be ]; - f1_BE = (D.f[DIR_M0P])[k1tw ]; - f1_BS = (D.f[DIR_0PP])[k1tn ]; - f1_TN = (D.f[DIR_0MM])[k1bs ]; - f1_TS = (D.f[DIR_0PM])[k1bn ]; - f1_BN = (D.f[DIR_0MP])[k1ts ]; - f1_ZERO = (D.f[DIR_000])[k1zero]; - f1_BSW = (D.f[DIR_PPP])[k1tne ]; - f1_BNE = (D.f[DIR_MMP])[k1tsw ]; - f1_BNW = (D.f[DIR_PMP])[k1tse ]; - f1_BSE = (D.f[DIR_MPP])[k1tnw ]; - f1_TSW = (D.f[DIR_PPM])[k1bne ]; - f1_TNE = (D.f[DIR_MMM])[k1bsw ]; - f1_TNW = (D.f[DIR_PMM])[k1bse ]; - f1_TSE = (D.f[DIR_MPM])[k1bnw ]; - - real drho1 = f1_ZERO+f1_E+f1_W+f1_N+f1_S+f1_T+f1_B+f1_NE+f1_SW+f1_SE+f1_NW+f1_TE+f1_BW+f1_BE+f1_TW+f1_TN+f1_BS+f1_BN+f1_TS+ - f1_TNE+f1_TSW+f1_TSE+f1_TNW+f1_BNE+f1_BSW+f1_BSE+f1_BNW; - - __syncthreads(); - - (D.f[DIR_P00])[ke ] = f1_W -c2o27*drho1; - (D.f[DIR_M00])[kw ] = f1_E -c2o27*drho1; - (D.f[DIR_0P0])[kn ] = f1_S -c2o27*drho1; - (D.f[DIR_0M0])[ks ] = f1_N -c2o27*drho1; - (D.f[DIR_00P])[kt ] = f1_B -c2o27*drho1; - (D.f[DIR_00M])[kb ] = f1_T -c2o27*drho1; - (D.f[DIR_PP0])[kne ] = f1_SW -c1o54*drho1; - (D.f[DIR_MM0])[ksw ] = f1_NE -c1o54*drho1; - (D.f[DIR_PM0])[kse ] = f1_NW -c1o54*drho1; - (D.f[DIR_MP0])[knw ] = f1_SE -c1o54*drho1; - (D.f[DIR_P0P])[kte ] = f1_BW -c1o54*drho1; - (D.f[DIR_M0M])[kbw ] = f1_TE -c1o54*drho1; - (D.f[DIR_P0M])[kbe ] = f1_TW -c1o54*drho1; - (D.f[DIR_M0P])[ktw ] = f1_BE -c1o54*drho1; - (D.f[DIR_0PP])[ktn ] = f1_BS -c1o54*drho1; - (D.f[DIR_0MM])[kbs ] = f1_TN -c1o54*drho1; - (D.f[DIR_0PM])[kbn ] = f1_TS -c1o54*drho1; - (D.f[DIR_0MP])[kts ] = f1_BN -c1o54*drho1; - (D.f[DIR_000])[kzero] = f1_ZERO-c8o27*drho1; - (D.f[DIR_PPP])[ktne ] = f1_BSW -c1o216*drho1; - (D.f[DIR_MMP])[ktsw ] = f1_BNE -c1o216*drho1; - (D.f[DIR_PMP])[ktse ] = f1_BNW -c1o216*drho1; - (D.f[DIR_MPP])[ktnw ] = f1_BSE -c1o216*drho1; - (D.f[DIR_PPM])[kbne ] = f1_TSW -c1o216*drho1; - (D.f[DIR_MMM])[kbsw ] = f1_TNE -c1o216*drho1; - (D.f[DIR_PMM])[kbse ] = f1_TNW -c1o216*drho1; - (D.f[DIR_MPM])[kbnw ] = f1_TSE -c1o216*drho1; - } - __syncthreads(); -} -////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QPressDevice27( - real* rhoBC, - real* DD, - 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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * 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[DIR_P00])[ke ]; - f_E = (D.f[DIR_M00])[kw ]; - f_S = (D.f[DIR_0P0])[kn ]; - f_N = (D.f[DIR_0M0])[ks ]; - f_B = (D.f[DIR_00P])[kt ]; - f_T = (D.f[DIR_00M])[kb ]; - f_SW = (D.f[DIR_PP0])[kne ]; - f_NE = (D.f[DIR_MM0])[ksw ]; - f_NW = (D.f[DIR_PM0])[kse ]; - f_SE = (D.f[DIR_MP0])[knw ]; - f_BW = (D.f[DIR_P0P])[kte ]; - f_TE = (D.f[DIR_M0M])[kbw ]; - f_TW = (D.f[DIR_P0M])[kbe ]; - f_BE = (D.f[DIR_M0P])[ktw ]; - f_BS = (D.f[DIR_0PP])[ktn ]; - f_TN = (D.f[DIR_0MM])[kbs ]; - f_TS = (D.f[DIR_0PM])[kbn ]; - f_BN = (D.f[DIR_0MP])[kts ]; - f_BSW = (D.f[DIR_PPP])[ktne ]; - f_BNE = (D.f[DIR_MMP])[ktsw ]; - f_BNW = (D.f[DIR_PMP])[ktse ]; - f_BSE = (D.f[DIR_MPP])[ktnw ]; - f_TSW = (D.f[DIR_PPM])[kbne ]; - f_TNE = (D.f[DIR_MMM])[kbsw ]; - f_TNW = (D.f[DIR_PMM])[kbse ]; - f_TSE = (D.f[DIR_MPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - real q, vx1, vx2, vx3, drho; - 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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - ////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - drho = rhoBC[k]; - //deltaRho = (rhoBC[k] + one) / (deltaRho + one); - //////////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - q = q_dirE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_M00])[kw]=c2o27* (drho+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - //(D.f[DIR_P00])[ke]=c2over27* (drho+three*( vx1 )+c9over2*( vx1 )*( vx1 )-cu_sq); - } - - q = q_dirW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_P00])[ke]=c2o27* (drho+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - //(D.f[DIR_M00])[kw]=c2over27* (drho+three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cu_sq); - } - - q = q_dirN[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_0M0])[ks]=c2o27* (drho+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - //(D.f[DIR_0P0])[kn]=c2over27* (drho+three*( vx2 )+c9over2*( vx2 )*( vx2 )-cu_sq); - } - - q = q_dirS[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_0P0])[kn]=c2o27* (drho+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - //(D.f[DIR_0M0])[ks]=c2over27* (drho+three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cu_sq); - } - - q = q_dirT[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_00M])[kb]=c2o27* (drho+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - //(D.f[DIR_00P])[kt]=c2over27* (drho+three*( vx3)+c9over2*( vx3)*( vx3)-cu_sq); - } - - q = q_dirB[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_00P])[kt]=c2o27* (drho+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - //(D.f[DIR_00M])[kb]=c2over27* (drho+three*( -vx3)+c9over2*( -vx3)*( -vx3)-cu_sq); - } - - q = q_dirNE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_MM0])[ksw]=c1o54* (drho+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - //(D.f[DIR_PP0])[kne]=c1over54* (drho+three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - } - - q = q_dirSW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_PP0])[kne]=c1o54* (drho+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - //(D.f[DIR_MM0])[ksw]=c1over54* (drho+three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - } - - q = q_dirSE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_MP0])[knw]=c1o54* (drho+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - //(D.f[DIR_PM0])[kse]=c1over54* (drho+three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - } - - q = q_dirNW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_PM0])[kse]=c1o54* (drho+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - //(D.f[DIR_MP0])[knw]=c1over54* (drho+three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - } - - q = q_dirTE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_M0M])[kbw]=c1o54* (drho+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - //(D.f[DIR_P0P])[kte]=c1over54* (drho+three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - } - - q = q_dirBW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_P0P])[kte]=c1o54* (drho+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - //(D.f[DIR_M0M])[kbw]=c1over54* (drho+three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - } - - q = q_dirBE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_M0P])[ktw]=c1o54* (drho+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - //(D.f[DIR_P0M])[kbe]=c1over54* (drho+three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - } - - q = q_dirTW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_P0M])[kbe]=c1o54* (drho+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - //(D.f[DIR_M0P])[ktw]=c1over54* (drho+three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - } - - q = q_dirTN[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_0MM])[kbs]=c1o54* (drho+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - //(D.f[DIR_0PP])[ktn]=c1over54* (drho+three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cu_sq); - } - - q = q_dirBS[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_0PP])[ktn]=c1o54* (drho+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - //(D.f[DIR_0MM])[kbs]=c1over54* (drho+three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - } - - q = q_dirBN[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_0MP])[kts]=c1o54* (drho+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - //(D.f[DIR_0PM])[kbn]=c1over54* (drho+three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cu_sq); - } - - q = q_dirTS[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_0PM])[kbn]=c1o54* (drho+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - //(D.f[DIR_0MP])[kts]=c1over54* (drho+three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - } - - q = q_dirTNE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_MMM])[kbsw]=c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - //(D.f[DIR_PPP])[ktne]=c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - } - - q = q_dirBSW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_PPP])[ktne]=c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - //(D.f[DIR_MMM])[kbsw]=c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - } - - q = q_dirBNE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_MMP])[ktsw]=c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - //(D.f[DIR_PPM])[kbne]=c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - } - - q = q_dirTSW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_PPM])[kbne]=c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - //(D.f[DIR_MMP])[ktsw]=c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - } - - q = q_dirTSE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_MPM])[kbnw]=c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - //(D.f[DIR_PMP])[ktse]=c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - } - - q = q_dirBNW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_PMP])[ktse]=c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - //(D.f[DIR_MPM])[kbnw]=c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - } - - q = q_dirBSE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_MPP])[ktnw]=c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - //(D.f[DIR_PMM])[kbse]=c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - } - - q = q_dirTNW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_PMM])[kbse]=c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - //(D.f[DIR_MPP])[ktnw]=c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - } - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QPressDeviceAntiBB27( - real* rhoBC, - real* vx, - real* vy, - real* vz, - real* DD, - int* k_Q, - real* QQ, - 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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * 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_ZERO; - - f_W = (D.f[DIR_P00])[ke ]; - f_E = (D.f[DIR_M00])[kw ]; - f_S = (D.f[DIR_0P0])[kn ]; - f_N = (D.f[DIR_0M0])[ks ]; - f_B = (D.f[DIR_00P])[kt ]; - f_T = (D.f[DIR_00M])[kb ]; - f_SW = (D.f[DIR_PP0])[kne ]; - f_NE = (D.f[DIR_MM0])[ksw ]; - f_NW = (D.f[DIR_PM0])[kse ]; - f_SE = (D.f[DIR_MP0])[knw ]; - f_BW = (D.f[DIR_P0P])[kte ]; - f_TE = (D.f[DIR_M0M])[kbw ]; - f_TW = (D.f[DIR_P0M])[kbe ]; - f_BE = (D.f[DIR_M0P])[ktw ]; - f_BS = (D.f[DIR_0PP])[ktn ]; - f_TN = (D.f[DIR_0MM])[kbs ]; - f_TS = (D.f[DIR_0PM])[kbn ]; - f_BN = (D.f[DIR_0MP])[kts ]; - f_BSW = (D.f[DIR_PPP])[ktne ]; - f_BNE = (D.f[DIR_MMP])[ktsw ]; - f_BNW = (D.f[DIR_PMP])[ktse ]; - f_BSE = (D.f[DIR_MPP])[ktnw ]; - f_TSW = (D.f[DIR_PPM])[kbne ]; - f_TNE = (D.f[DIR_MMM])[kbsw ]; - f_TNW = (D.f[DIR_PMM])[kbse ]; - f_TSE = (D.f[DIR_MPM])[kbnw ]; - f_ZERO = (D.f[DIR_000])[kzero]; - //////////////////////////////////////////////////////////////////////////////// - //real vx1, vx2, vx3, drho; - //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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - ////////////////////////////////////////////////////////////////////////// - real drho = f_ZERO+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; - drho = drho - rhoBC[k]; - drho *= 0.01f; - //////////////////////////////////////////////////////////////////////////////// - real q; - //deltaRho = (rhoBC[k] + one) / (deltaRho + one); - //////////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - q = q_dirE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_M00])[kw]=f_W-c2o27*drho; - } - - q = q_dirW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_P00])[ke]=f_E-c2o27*drho; - } - - q = q_dirN[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_0M0])[ks]=f_S-c2o27*drho; - } - - q = q_dirS[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_0P0])[kn]=f_N-c2o27*drho; - } - - q = q_dirT[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_00M])[kb]=f_B-c2o27*drho; - } - - q = q_dirB[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_00P])[kt]=f_T-c2o27*drho; - } - - q = q_dirNE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_MM0])[ksw]=f_SW-c1o54*drho; - } - - q = q_dirSW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_PP0])[kne]=f_NE-c1o54*drho; - } - - q = q_dirSE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_MP0])[knw]=f_NW-c1o54*drho; - } - - q = q_dirNW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_PM0])[kse]=f_SE-c1o54*drho; - } - - q = q_dirTE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_M0M])[kbw]=f_BW-c1o54*drho; - } - - q = q_dirBW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_P0P])[kte]=f_TE-c1o54*drho; - } - - q = q_dirBE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_M0P])[ktw]=f_TW-c1o54*drho; - } - - q = q_dirTW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_P0M])[kbe]=f_BE-c1o54*drho; - } - - q = q_dirTN[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_0MM])[kbs]=f_BS-c1o54*drho; - } - - q = q_dirBS[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_0PP])[ktn]=f_TN-c1o54*drho; - } - - q = q_dirBN[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_0MP])[kts]=f_TS-c1o54*drho; - } - - q = q_dirTS[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_0PM])[kbn]=f_BN-c1o54*drho; - } - - q = q_dirTNE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_MMM])[kbsw]=f_BSW-c1o216*drho; - } - - q = q_dirBSW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_PPP])[ktne]=f_TNE-c1o216*drho; - } - - q = q_dirBNE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_MMP])[ktsw]=f_TSW-c1o216*drho; - } - - q = q_dirTSW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_PPM])[kbne]=f_BNE-c1o216*drho; - } - - q = q_dirTSE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_MPM])[kbnw]=f_BNW-c1o216*drho; - } - - q = q_dirBNW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_PMP])[ktse]=f_TSE-c1o216*drho; - } - - q = q_dirBSE[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_MPP])[ktnw]=f_TNW-c1o216*drho; - } - - q = q_dirTNW[k]; - if (q>=c0o1 && q<=c1o1) - { - (D.f[DIR_PMM])[kbse]=f_BSE-c1o216*drho; - } - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QPressDeviceFixBackflow27( - real* rhoBC, - real* DD, - int* k_Q, - int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //////////////////////////////////////////////////////////////////////////////// - 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) - { - //////////////////////////////////////////////////////////////////////////////// - //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 deltaRho; - //////////////////////////////////////////////////////////////////////////////// - deltaRho = rhoBC[k]; - //////////////////////////////////////////////////////////////////////////////// - Distributions27 D; - if (isEvenTimestep==false) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_M00])[kw] = c2o27 * deltaRho; - (D.f[DIR_P00])[ke] = c2o27 * deltaRho; - (D.f[DIR_0M0])[ks] = c2o27 * deltaRho; - (D.f[DIR_0P0])[kn] = c2o27 * deltaRho; - (D.f[DIR_00M])[kb] = c2o27 * deltaRho; - (D.f[DIR_00P])[kt] = c2o27 * deltaRho; - (D.f[DIR_MM0])[ksw] = c1o54 * deltaRho; - (D.f[DIR_PP0])[kne] = c1o54 * deltaRho; - (D.f[DIR_MP0])[knw] = c1o54 * deltaRho; - (D.f[DIR_PM0])[kse] = c1o54 * deltaRho; - (D.f[DIR_M0M])[kbw] = c1o54 * deltaRho; - (D.f[DIR_P0P])[kte] = c1o54 * deltaRho; - (D.f[DIR_M0P])[ktw] = c1o54 * deltaRho; - (D.f[DIR_P0M])[kbe] = c1o54 * deltaRho; - (D.f[DIR_0MM])[kbs] = c1o54 * deltaRho; - (D.f[DIR_0PP])[ktn] = c1o54 * deltaRho; - (D.f[DIR_0MP])[kts] = c1o54 * deltaRho; - (D.f[DIR_0PM])[kbn] = c1o54 * deltaRho; - (D.f[DIR_MMM])[kbsw] = c1o216 * deltaRho; - (D.f[DIR_PPP])[ktne] = c1o216 * deltaRho; - (D.f[DIR_MMP])[ktsw] = c1o216 * deltaRho; - (D.f[DIR_PPM])[kbne] = c1o216 * deltaRho; - (D.f[DIR_MPM])[kbnw] = c1o216 * deltaRho; - (D.f[DIR_PMP])[ktse] = c1o216 * deltaRho; - (D.f[DIR_MPP])[ktnw] = c1o216 * deltaRho; - (D.f[DIR_PMM])[kbse] = c1o216 * deltaRho; - (D.f[DIR_000])[kzero] = c8o27 * deltaRho; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QPressDeviceDirDepBot27( - real* rhoBC, - real* DD, - int* k_Q, - int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //////////////////////////////////////////////////////////////////////////////// - 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) - { - //////////////////////////////////////////////////////////////////////////////// - //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 rho; - //////////////////////////////////////////////////////////////////////////////// - rho = rhoBC[k]; - //////////////////////////////////////////////////////////////////////////////// - Distributions27 D; - if (isEvenTimestep==false) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real f_E,f_W,f_N,f_S,f_T,f_NE,f_SW,f_SE,f_NW,f_TE,f_TW,f_TN,f_TS,f_ZERO,f_TNE,f_TSW,f_TSE,f_TNW;//, - //f_B,f_BW,f_BE,f_BS,f_BN,f_BSW,f_BNE,f_BNW,f_BSE; - - f_E = (D.f[DIR_P00])[ke ]; - f_W = (D.f[DIR_M00])[kw ]; - f_N = (D.f[DIR_0P0])[kn ]; - f_S = (D.f[DIR_0M0])[ks ]; - f_T = (D.f[DIR_00P])[kt ]; - f_NE = (D.f[DIR_PP0])[kne ]; - f_SW = (D.f[DIR_MM0])[ksw ]; - f_SE = (D.f[DIR_PM0])[kse ]; - f_NW = (D.f[DIR_MP0])[knw ]; - f_TE = (D.f[DIR_P0P])[kte ]; - f_TW = (D.f[DIR_M0P])[ktw ]; - f_TN = (D.f[DIR_0PP])[ktn ]; - f_TS = (D.f[DIR_0MP])[kts ]; - f_ZERO = (D.f[DIR_000])[kzero]; - f_TNE = (D.f[DIR_PPP])[ktne ]; - f_TSW = (D.f[DIR_MMP])[ktsw ]; - f_TSE = (D.f[DIR_PMP])[ktse ]; - f_TNW = (D.f[DIR_MPP])[ktnw ]; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - //f_B = (four*rho- four*f_SW- eight*f_TSW-four*f_W- eight*f_TW- four*f_NW- eight*f_TNW-four*f_S- eight*f_TS-four*f_ZERO+ f_T-four*f_N- eight*f_TN- four*f_SE- eight*f_TSE-four*f_E- eight*f_TE- four*f_NE- eight*f_TNE)/nine; - //f_BW = ( two*rho+ f_SW- four*f_TSW+ f_W- four*f_TW+ f_NW- four*f_TNW- two*f_S- four*f_TS- two*f_ZERO-four*f_T- two*f_N- four*f_TN- five*f_SE- four*f_TSE-five*f_E+fourteen*f_TE- five*f_NE- four*f_TNE)/eighteen; - //f_BE = ( two*rho- five*f_SW- four*f_TSW-five*f_W+fourteen*f_TW- five*f_NW- four*f_TNW- two*f_S- four*f_TS- two*f_ZERO-four*f_T- two*f_N- four*f_TN+ f_SE- four*f_TSE+ f_E- four*f_TE+ f_NE- four*f_TNE)/eighteen; - //f_BS = ( two*rho+ f_SW- four*f_TSW- two*f_W- four*f_TW- five*f_NW- four*f_TNW+ f_S- four*f_TS- two*f_ZERO-four*f_T-five*f_N+fourteen*f_TN+ f_SE- four*f_TSE- two*f_E- four*f_TE- five*f_NE- four*f_TNE)/eighteen; - //f_BN = ( two*rho- five*f_SW- four*f_TSW- two*f_W- four*f_TW+ f_NW- four*f_TNW-five*f_S+fourteen*f_TS- two*f_ZERO-four*f_T+ f_N- four*f_TN- five*f_SE- four*f_TSE- two*f_E- four*f_TE+ f_NE- four*f_TNE)/eighteen; - //f_BSW = ( two*rho+ four*f_SW- four*f_TSW+ f_W- four*f_TW- two*f_NW- four*f_TNW+ f_S- four*f_TS- two*f_ZERO-four*f_T-five*f_N- four*f_TN- two*f_SE- four*f_TSE-five*f_E- four*f_TE-eight*f_NE+sixtyeight*f_TNE)/seventytwo; - //f_BNE = ( two*rho-eight*f_SW+sixtyeight*f_TSW-five*f_W- four*f_TW- two*f_NW- four*f_TNW-five*f_S- four*f_TS- two*f_ZERO-four*f_T+ f_N- four*f_TN- two*f_SE- four*f_TSE+ f_E- four*f_TE+ four*f_NE- four*f_TNE)/seventytwo; - //f_BNW = ( two*rho- two*f_SW- four*f_TSW+ f_W- four*f_TW+ four*f_NW- four*f_TNW-five*f_S- four*f_TS- two*f_ZERO-four*f_T+ f_N- four*f_TN-eight*f_SE+sixtyeight*f_TSE-five*f_E- four*f_TE- two*f_NE- four*f_TNE)/seventytwo; - //f_BSE = ( two*rho- two*f_SW- four*f_TSW-five*f_W- four*f_TW-eight*f_NW+sixtyeight*f_TNW+ f_S- four*f_TS- two*f_ZERO-four*f_T-five*f_N- four*f_TN+ four*f_SE- four*f_TSE+ f_E- four*f_TE- two*f_NE- four*f_TNE)/seventytwo; - - //real drho = f_ZERO+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; - //real vx1 = (f_E -f_W +f_NE-f_SW+f_SE-f_NW+f_TE-f_BW+f_BE-f_TW+ f_TNE-f_TSW+f_TSE-f_TNW+ f_BNE-f_BSW+f_BSE-f_BNW); - //real vx2 = (f_N -f_S +f_NE-f_SW-f_SE+f_NW+f_TN-f_BS+f_BN-f_TS+ f_TNE-f_TSW-f_TSE+f_TNW+ f_BNE-f_BSW-f_BSE+f_BNW); - //real vx3 = (f_T -f_B +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); - - //real cusq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - //(D.f[DIR_000])[kzero] = c8over27* (drho-cusq); - //(D.f[DIR_P00])[ke] = c2over27* (drho+three*( vx1 )+c9over2*( vx1 )*( vx1 )-cusq); - //(D.f[DIR_M00])[kw] = c2over27* (drho+three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cusq); - //(D.f[DIR_0P0])[kn] = c2over27* (drho+three*( vx2 )+c9over2*( vx2 )*( vx2 )-cusq); - //(D.f[DIR_0M0])[ks] = c2over27* (drho+three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cusq); - //(D.f[DIR_00P])[kt] = c2over27* (drho+three*( vx3)+c9over2*( vx3)*( vx3)-cusq); - //(D.f[DIR_00M])[kb] = c2over27* (drho+three*( -vx3)+c9over2*( -vx3)*( -vx3)-cusq); - //(D.f[DIR_PP0])[kne] = c1over54* (drho+three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cusq); - //(D.f[DIR_MM0])[ksw] = c1over54* (drho+three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cusq); - //(D.f[DIR_PM0])[kse] = c1over54* (drho+three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cusq); - //(D.f[DIR_MP0])[knw] = c1over54* (drho+three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cusq); - //(D.f[DIR_P0P])[kte] = c1over54* (drho+three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cusq); - //(D.f[DIR_M0M])[kbw] = c1over54* (drho+three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cusq); - //(D.f[DIR_P0M])[kbe] = c1over54* (drho+three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cusq); - //(D.f[DIR_M0P])[ktw] = c1over54* (drho+three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cusq); - //(D.f[DIR_0PP])[ktn] = c1over54* (drho+three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cusq); - //(D.f[DIR_0MM])[kbs] = c1over54* (drho+three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cusq); - //(D.f[DIR_0PM])[kbn] = c1over54* (drho+three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cusq); - //(D.f[DIR_0MP])[kts] = c1over54* (drho+three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cusq); - //(D.f[DIR_PPP])[ktne] = c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq); - //(D.f[DIR_MMM])[kbsw] = c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq); - //(D.f[DIR_PPM])[kbne] = c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq); - //(D.f[DIR_MMP])[ktsw] = c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq); - //(D.f[DIR_PMP])[ktse] = c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq); - //(D.f[DIR_MPM])[kbnw] = c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq); - //(D.f[DIR_PMM])[kbse] = c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq); - //(D.f[DIR_MPP])[ktnw] = c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq); - real drho = f_ZERO+f_E+f_W+f_N+f_S+f_T+f_NE+f_SW+f_SE+f_NW+f_TE+f_TW+f_TN+f_TS+f_TNE+f_TSW+f_TSE+f_TNW; - real dTop = f_T+f_TE+f_TW+f_TN+f_TS+f_TNE+f_TSW+f_TSE+f_TNW; - (D.f[DIR_00M])[kb] = (f_T+c2o27)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c2o27; - (D.f[DIR_M0M])[kbw] = (f_TW+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54; - (D.f[DIR_P0M])[kbe] = (f_TE+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54; - (D.f[DIR_0MM])[kbs] = (f_TS+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54; - (D.f[DIR_0PM])[kbn] = (f_TN+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54; - (D.f[DIR_MMM])[kbsw] = (f_TSW+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216; - (D.f[DIR_PPM])[kbne] = (f_TNE+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216; - (D.f[DIR_MPM])[kbnw] = (f_TNW+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216; - (D.f[DIR_PMM])[kbse] = (f_TSE+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -__host__ __device__ real computeOutflowDistribution(const real* const &f, const real* const &f1, const int dir, const real cs) -{ - return f1[dir] * cs + (c1o1 - cs) * f[dir]; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -__global__ void QPressNoRhoDevice27( - real* rhoBC, - real* distributions, - int* k_Q, - int* k_N, - int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep, - int direction) -{ - //////////////////////////////////////////////////////////////////////////////// - //! - Get the node index coordinates from threadIdx, blockIdx, blockDim and gridDim. - //! - const unsigned nodeIndex = getNodeIndex(); - - ////////////////////////////////////////////////////////////////////////// - - if(nodeIndex >= numberOfBCnodes) return; - - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int KQK = k_Q[nodeIndex]; - // 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]; - //////////////////////////////////////////////////////////////////////////////// - //index1 - unsigned int K1QK = k_N[nodeIndex]; - //unsigned int k1zero= K1QK; - unsigned int k1e = K1QK; - unsigned int k1w = neighborX[K1QK]; - unsigned int k1n = K1QK; - unsigned int k1s = neighborY[K1QK]; - unsigned int k1t = K1QK; - unsigned int k1b = neighborZ[K1QK]; - unsigned int k1sw = neighborY[k1w]; - unsigned int k1ne = K1QK; - unsigned int k1se = k1s; - unsigned int k1nw = k1w; - unsigned int k1bw = neighborZ[k1w]; - unsigned int k1te = K1QK; - unsigned int k1be = k1b; - unsigned int k1tw = k1w; - unsigned int k1bs = neighborZ[k1s]; - unsigned int k1tn = K1QK; - unsigned int k1bn = k1b; - unsigned int k1ts = k1s; - unsigned int k1tse = k1s; - unsigned int k1bnw = k1bw; - unsigned int k1tnw = k1w; - unsigned int k1bse = k1bs; - unsigned int k1tsw = k1sw; - unsigned int k1bne = k1b; - unsigned int k1tne = K1QK; - unsigned int k1bsw = neighborZ[k1sw]; - //////////////////////////////////////////////////////////////////////////////// - Distributions27 dist; - getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); - real f[27], f1[27]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - f1[DIR_P00] = (dist.f[DIR_P00])[k1e ]; - f1[DIR_M00] = (dist.f[DIR_M00])[k1w ]; - f1[DIR_0P0] = (dist.f[DIR_0P0])[k1n ]; - f1[DIR_0M0] = (dist.f[DIR_0M0])[k1s ]; - f1[DIR_00P] = (dist.f[DIR_00P])[k1t ]; - f1[DIR_00M] = (dist.f[DIR_00M])[k1b ]; - f1[DIR_PP0] = (dist.f[DIR_PP0])[k1ne ]; - f1[DIR_MM0] = (dist.f[DIR_MM0])[k1sw ]; - f1[DIR_PM0] = (dist.f[DIR_PM0])[k1se ]; - f1[DIR_MP0] = (dist.f[DIR_MP0])[k1nw ]; - f1[DIR_P0P] = (dist.f[DIR_P0P])[k1te ]; - f1[DIR_M0M] = (dist.f[DIR_M0M])[k1bw ]; - f1[DIR_P0M] = (dist.f[DIR_P0M])[k1be ]; - f1[DIR_M0P] = (dist.f[DIR_M0P])[k1tw ]; - f1[DIR_0PP] = (dist.f[DIR_0PP])[k1tn ]; - f1[DIR_0MM] = (dist.f[DIR_0MM])[k1bs ]; - f1[DIR_0PM] = (dist.f[DIR_0PM])[k1bn ]; - f1[DIR_0MP] = (dist.f[DIR_0MP])[k1ts ]; - // f1[DIR_000] = (dist.f[DIR_000])[k1zero]; - f1[DIR_PPP] = (dist.f[DIR_PPP])[k1tne ]; - f1[DIR_MMP] = (dist.f[DIR_MMP])[k1tsw ]; - f1[DIR_PMP] = (dist.f[DIR_PMP])[k1tse ]; - f1[DIR_MPP] = (dist.f[DIR_MPP])[k1tnw ]; - f1[DIR_PPM] = (dist.f[DIR_PPM])[k1bne ]; - f1[DIR_MMM] = (dist.f[DIR_MMM])[k1bsw ]; - f1[DIR_PMM] = (dist.f[DIR_PMM])[k1bse ]; - f1[DIR_MPM] = (dist.f[DIR_MPM])[k1bnw ]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - f[DIR_P00] = (dist.f[DIR_P00])[ke ]; - f[DIR_M00] = (dist.f[DIR_M00])[kw ]; - f[DIR_0P0] = (dist.f[DIR_0P0])[kn ]; - f[DIR_0M0] = (dist.f[DIR_0M0])[ks ]; - f[DIR_00P] = (dist.f[DIR_00P])[kt ]; - f[DIR_00M] = (dist.f[DIR_00M])[kb ]; - f[DIR_PP0] = (dist.f[DIR_PP0])[kne ]; - f[DIR_MM0] = (dist.f[DIR_MM0])[ksw ]; - f[DIR_PM0] = (dist.f[DIR_PM0])[kse ]; - f[DIR_MP0] = (dist.f[DIR_MP0])[knw ]; - f[DIR_P0P] = (dist.f[DIR_P0P])[kte ]; - f[DIR_M0M] = (dist.f[DIR_M0M])[kbw ]; - f[DIR_P0M] = (dist.f[DIR_P0M])[kbe ]; - f[DIR_M0P] = (dist.f[DIR_M0P])[ktw ]; - f[DIR_0PP] = (dist.f[DIR_0PP])[ktn ]; - f[DIR_0MM] = (dist.f[DIR_0MM])[kbs ]; - f[DIR_0PM] = (dist.f[DIR_0PM])[kbn ]; - f[DIR_0MP] = (dist.f[DIR_0MP])[kts ]; - // f[DIR_000] = (dist.f[DIR_000])[kzero]; - f[DIR_PPP] = (dist.f[DIR_PPP])[ktne ]; - f[DIR_MMP] = (dist.f[DIR_MMP])[ktsw ]; - f[DIR_PMP] = (dist.f[DIR_PMP])[ktse ]; - f[DIR_MPP] = (dist.f[DIR_MPP])[ktnw ]; - f[DIR_PPM] = (dist.f[DIR_PPM])[kbne ]; - f[DIR_MMM] = (dist.f[DIR_MMM])[kbsw ]; - f[DIR_PMM] = (dist.f[DIR_PMM])[kbse ]; - f[DIR_MPM] = (dist.f[DIR_MPM])[kbnw ]; - ////////////////////////////////////////////////////////////////////////// - - - real cs = c1o1 / sqrtf(c3o1); - - ////////////////////////////////////////////////////////////////////////// - getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep); - switch(direction) - { - case MZZ: - (dist.f[DIR_P00])[ke ] = computeOutflowDistribution(f, f1, DIR_P00, cs); - (dist.f[DIR_PM0])[kse ] = computeOutflowDistribution(f, f1, DIR_PM0, cs); - (dist.f[DIR_PP0])[kne ] = computeOutflowDistribution(f, f1, DIR_PP0, cs); - (dist.f[DIR_P0M])[kbe ] = computeOutflowDistribution(f, f1, DIR_P0M, cs); - (dist.f[DIR_P0P])[kte ] = computeOutflowDistribution(f, f1, DIR_P0P, cs); - (dist.f[DIR_PMP])[ktse ] = computeOutflowDistribution(f, f1, DIR_PMP, cs); - (dist.f[DIR_PPP])[ktne ] = computeOutflowDistribution(f, f1, DIR_PPP, cs); - (dist.f[DIR_PMM])[kbse ] = computeOutflowDistribution(f, f1, DIR_PMM, cs); - (dist.f[DIR_PPM])[kbne ] = computeOutflowDistribution(f, f1, DIR_PPM, cs); - break; - - case PZZ: - (dist.f[DIR_M00])[kw ] = computeOutflowDistribution(f, f1, DIR_M00, cs); - (dist.f[DIR_MM0])[ksw ] = computeOutflowDistribution(f, f1, DIR_MM0, cs); - (dist.f[DIR_MP0])[knw ] = computeOutflowDistribution(f, f1, DIR_MP0, cs); - (dist.f[DIR_M0M])[kbw ] = computeOutflowDistribution(f, f1, DIR_M0M, cs); - (dist.f[DIR_M0P])[ktw ] = computeOutflowDistribution(f, f1, DIR_M0P, cs); - (dist.f[DIR_MMP])[ktsw ] = computeOutflowDistribution(f, f1, DIR_MMP, cs); - (dist.f[DIR_MPP])[ktnw ] = computeOutflowDistribution(f, f1, DIR_MPP, cs); - (dist.f[DIR_MMM])[kbsw ] = computeOutflowDistribution(f, f1, DIR_MMM, cs); - (dist.f[DIR_MPM])[kbnw ] = computeOutflowDistribution(f, f1, DIR_MPM, cs); - break; - - case ZMZ: - (dist.f[DIR_0P0])[kn ] = computeOutflowDistribution(f, f1, DIR_0P0, cs); - (dist.f[DIR_PP0])[kne ] = computeOutflowDistribution(f, f1, DIR_PP0, cs); - (dist.f[DIR_MP0])[knw ] = computeOutflowDistribution(f, f1, DIR_MP0, cs); - (dist.f[DIR_0PP])[ktn ] = computeOutflowDistribution(f, f1, DIR_0PP, cs); - (dist.f[DIR_0PM])[kbn ] = computeOutflowDistribution(f, f1, DIR_0PM, cs); - (dist.f[DIR_PPP])[ktne ] = computeOutflowDistribution(f, f1, DIR_PPP, cs); - (dist.f[DIR_MPP])[ktnw ] = computeOutflowDistribution(f, f1, DIR_MPP, cs); - (dist.f[DIR_PPM])[kbne ] = computeOutflowDistribution(f, f1, DIR_PPM, cs); - (dist.f[DIR_MPM])[kbnw ] = computeOutflowDistribution(f, f1, DIR_MPM, cs); - break; - - case ZPZ: - (dist.f[DIR_0M0])[ks ] = computeOutflowDistribution(f, f1, DIR_0M0, cs); - (dist.f[DIR_PM0])[kse ] = computeOutflowDistribution(f, f1, DIR_PM0, cs); - (dist.f[DIR_MM0])[ksw ] = computeOutflowDistribution(f, f1, DIR_MM0, cs); - (dist.f[DIR_0MP])[kts ] = computeOutflowDistribution(f, f1, DIR_0MP, cs); - (dist.f[DIR_0MM])[kbs ] = computeOutflowDistribution(f, f1, DIR_0MM, cs); - (dist.f[DIR_PMP])[ktse ] = computeOutflowDistribution(f, f1, DIR_PMP, cs); - (dist.f[DIR_MMP])[ktsw ] = computeOutflowDistribution(f, f1, DIR_MMP, cs); - (dist.f[DIR_PMM])[kbse ] = computeOutflowDistribution(f, f1, DIR_PMM, cs); - (dist.f[DIR_MMM])[kbsw ] = computeOutflowDistribution(f, f1, DIR_MMM, cs); - break; - - case ZZM: - (dist.f[DIR_00P])[kt ] = computeOutflowDistribution(f, f1, DIR_00P, cs); - (dist.f[DIR_P0P])[kte ] = computeOutflowDistribution(f, f1, DIR_P0P, cs); - (dist.f[DIR_M0P])[ktw ] = computeOutflowDistribution(f, f1, DIR_M0P, cs); - (dist.f[DIR_0PP])[ktn ] = computeOutflowDistribution(f, f1, DIR_0PP, cs); - (dist.f[DIR_0MP])[kts ] = computeOutflowDistribution(f, f1, DIR_0MP, cs); - (dist.f[DIR_PPP])[ktne ] = computeOutflowDistribution(f, f1, DIR_PPP, cs); - (dist.f[DIR_MPP])[ktnw ] = computeOutflowDistribution(f, f1, DIR_MPP, cs); - (dist.f[DIR_PMP])[ktse ] = computeOutflowDistribution(f, f1, DIR_PMP, cs); - (dist.f[DIR_MMP])[ktsw ] = computeOutflowDistribution(f, f1, DIR_MMP, cs); - break; - - case ZZP: - (dist.f[DIR_00M])[kb ] = computeOutflowDistribution(f, f1, DIR_00M, cs); - (dist.f[DIR_P0M])[kbe ] = computeOutflowDistribution(f, f1, DIR_P0M, cs); - (dist.f[DIR_M0M])[kbw ] = computeOutflowDistribution(f, f1, DIR_M0M, cs); - (dist.f[DIR_0PM])[kbn ] = computeOutflowDistribution(f, f1, DIR_0PM, cs); - (dist.f[DIR_0MM])[kbs ] = computeOutflowDistribution(f, f1, DIR_0MM, cs); - (dist.f[DIR_PPM])[kbne ] = computeOutflowDistribution(f, f1, DIR_PPM, cs); - (dist.f[DIR_MPM])[kbnw ] = computeOutflowDistribution(f, f1, DIR_MPM, cs); - (dist.f[DIR_PMM])[kbse ] = computeOutflowDistribution(f, f1, DIR_PMM, cs); - (dist.f[DIR_MMM])[kbsw ] = computeOutflowDistribution(f, f1, DIR_MMM, cs); - break; - default: - break; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -__host__ __device__ real computeOutflowDistribution(const real* const &f, const real* const &f1, const int dir, const real rhoCorrection, const real cs, const real weight) -{ - return f1[dir ] * cs + (c1o1 - cs) * f[dir ] - weight *rhoCorrection; -} - -__global__ void QPressZeroRhoOutflowDevice27( - real* rhoBC, - real* distributions, - int* k_Q, - int* k_N, - int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep, - int direction, - real densityCorrectionFactor) -{ - //////////////////////////////////////////////////////////////////////////////// - //! - Get the node index coordinates from threadIdx, blockIdx, blockDim and gridDim. - //! - const unsigned nodeIndex = getNodeIndex(); - - ////////////////////////////////////////////////////////////////////////// - - if( nodeIndex >= numberOfBCnodes ) return; - - //////////////////////////////////////////////////////////////////////////////// - //index - - uint k_000 = k_Q[nodeIndex]; - uint k_M00 = neighborX[k_000]; - uint k_0M0 = neighborY[k_000]; - uint k_00M = neighborZ[k_000]; - uint k_MM0 = neighborY[k_M00]; - uint k_M0M = neighborZ[k_M00]; - uint k_0MM = neighborZ[k_0M0]; - uint k_MMM = neighborZ[k_MM0]; - - //////////////////////////////////////////////////////////////////////////////// - //index of neighbor - uint kN_000 = k_N[nodeIndex]; - uint kN_M00 = neighborX[k_000]; - uint kN_0M0 = neighborY[k_000]; - uint kN_00M = neighborZ[k_000]; - uint kN_MM0 = neighborY[k_M00]; - uint kN_M0M = neighborZ[k_M00]; - uint kN_0MM = neighborZ[k_0M0]; - uint kN_MMM = neighborZ[k_MM0]; - //////////////////////////////////////////////////////////////////////////////// - Distributions27 dist; - getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); - real f[27], fN[27]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - f[DIR_000] = (dist.f[DIR_000])[k_000]; - f[DIR_P00] = (dist.f[DIR_P00])[k_000]; - f[DIR_M00] = (dist.f[DIR_M00])[k_M00]; - f[DIR_0P0] = (dist.f[DIR_0P0])[k_000]; - f[DIR_0M0] = (dist.f[DIR_0M0])[k_0M0]; - f[DIR_00P] = (dist.f[DIR_00P])[k_000]; - f[DIR_00M] = (dist.f[DIR_00M])[k_00M]; - f[DIR_PP0] = (dist.f[DIR_PP0])[k_000]; - f[DIR_MM0] = (dist.f[DIR_MM0])[k_MM0]; - f[DIR_PM0] = (dist.f[DIR_PM0])[k_0M0]; - f[DIR_MP0] = (dist.f[DIR_MP0])[k_M00]; - f[DIR_P0P] = (dist.f[DIR_P0P])[k_000]; - f[DIR_M0M] = (dist.f[DIR_M0M])[k_M0M]; - f[DIR_P0M] = (dist.f[DIR_P0M])[k_00M]; - f[DIR_M0P] = (dist.f[DIR_M0P])[k_M00]; - f[DIR_0PP] = (dist.f[DIR_0PP])[k_000]; - f[DIR_0MM] = (dist.f[DIR_0MM])[k_0MM]; - f[DIR_0PM] = (dist.f[DIR_0PM])[k_00M]; - f[DIR_0MP] = (dist.f[DIR_0MP])[k_0M0]; - f[DIR_PPP] = (dist.f[DIR_PPP])[k_000]; - f[DIR_MPP] = (dist.f[DIR_MPP])[k_M00]; - f[DIR_PMP] = (dist.f[DIR_PMP])[k_0M0]; - f[DIR_MMP] = (dist.f[DIR_MMP])[k_MM0]; - f[DIR_PPM] = (dist.f[DIR_PPM])[k_00M]; - f[DIR_MPM] = (dist.f[DIR_MPM])[k_M0M]; - f[DIR_PMM] = (dist.f[DIR_PMM])[k_0MM]; - f[DIR_MMM] = (dist.f[DIR_MMM])[k_MMM]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - fN[DIR_000] = (dist.f[DIR_000])[kN_000]; - fN[DIR_P00] = (dist.f[DIR_P00])[kN_000]; - fN[DIR_M00] = (dist.f[DIR_M00])[kN_M00]; - fN[DIR_0P0] = (dist.f[DIR_0P0])[kN_000]; - fN[DIR_0M0] = (dist.f[DIR_0M0])[kN_0M0]; - fN[DIR_00P] = (dist.f[DIR_00P])[kN_000]; - fN[DIR_00M] = (dist.f[DIR_00M])[kN_00M]; - fN[DIR_PP0] = (dist.f[DIR_PP0])[kN_000]; - fN[DIR_MM0] = (dist.f[DIR_MM0])[kN_MM0]; - fN[DIR_PM0] = (dist.f[DIR_PM0])[kN_0M0]; - fN[DIR_MP0] = (dist.f[DIR_MP0])[kN_M00]; - fN[DIR_P0P] = (dist.f[DIR_P0P])[kN_000]; - fN[DIR_M0M] = (dist.f[DIR_M0M])[kN_M0M]; - fN[DIR_P0M] = (dist.f[DIR_P0M])[kN_00M]; - fN[DIR_M0P] = (dist.f[DIR_M0P])[kN_M00]; - fN[DIR_0PP] = (dist.f[DIR_0PP])[kN_000]; - fN[DIR_0MM] = (dist.f[DIR_0MM])[kN_0MM]; - fN[DIR_0PM] = (dist.f[DIR_0PM])[kN_00M]; - fN[DIR_0MP] = (dist.f[DIR_0MP])[kN_0M0]; - fN[DIR_PPP] = (dist.f[DIR_PPP])[kN_000]; - fN[DIR_MPP] = (dist.f[DIR_MPP])[kN_M00]; - fN[DIR_PMP] = (dist.f[DIR_PMP])[kN_0M0]; - fN[DIR_MMP] = (dist.f[DIR_MMP])[kN_MM0]; - fN[DIR_PPM] = (dist.f[DIR_PPM])[kN_00M]; - fN[DIR_MPM] = (dist.f[DIR_MPM])[kN_M0M]; - fN[DIR_PMM] = (dist.f[DIR_PMM])[kN_0MM]; - fN[DIR_MMM] = (dist.f[DIR_MMM])[kN_MMM]; - ////////////////////////////////////////////////////////////////////////// - real drho = vf::lbm::getDensity(f); - - real rhoCorrection = densityCorrectionFactor*drho; - - real cs = c1o1 / sqrtf(c3o1); - - getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep); - - switch(direction) - { - case MZZ: - (dist.f[DIR_P00])[k_000] = computeOutflowDistribution(f, fN, DIR_P00 , rhoCorrection, cs, c2o27); - (dist.f[DIR_PM0])[k_0M0] = computeOutflowDistribution(f, fN, DIR_PM0, rhoCorrection, cs, c1o54); - (dist.f[DIR_PP0])[k_000] = computeOutflowDistribution(f, fN, DIR_PP0, rhoCorrection, cs, c1o54); - (dist.f[DIR_P0M])[k_00M] = computeOutflowDistribution(f, fN, DIR_P0M, rhoCorrection, cs, c1o54); - (dist.f[DIR_P0P])[k_000] = computeOutflowDistribution(f, fN, DIR_P0P, rhoCorrection, cs, c1o54); - (dist.f[DIR_PMP])[k_0M0] = computeOutflowDistribution(f, fN, DIR_PMP, rhoCorrection, cs, c1o216); - (dist.f[DIR_PPP])[k_000] = computeOutflowDistribution(f, fN, DIR_PPP, rhoCorrection, cs, c1o216); - (dist.f[DIR_PMM])[k_0MM] = computeOutflowDistribution(f, fN, DIR_PMM, rhoCorrection, cs, c1o216); - (dist.f[DIR_PPM])[k_00M] = computeOutflowDistribution(f, fN, DIR_PPM, rhoCorrection, cs, c1o216); - break; - - case PZZ: - (dist.f[DIR_M00])[k_M00] = computeOutflowDistribution(f, fN, DIR_M00, rhoCorrection, cs, c2o27); - (dist.f[DIR_MM0])[k_MM0] = computeOutflowDistribution(f, fN, DIR_MM0, rhoCorrection, cs, c1o54); - (dist.f[DIR_MP0])[k_M00] = computeOutflowDistribution(f, fN, DIR_MP0, rhoCorrection, cs, c1o54); - (dist.f[DIR_M0M])[k_M0M] = computeOutflowDistribution(f, fN, DIR_M0M, rhoCorrection, cs, c1o54); - (dist.f[DIR_M0P])[k_M00] = computeOutflowDistribution(f, fN, DIR_M0P, rhoCorrection, cs, c1o54); - (dist.f[DIR_MMP])[k_MM0] = computeOutflowDistribution(f, fN, DIR_MMP, rhoCorrection, cs, c1o216); - (dist.f[DIR_MPP])[k_M00] = computeOutflowDistribution(f, fN, DIR_MPP, rhoCorrection, cs, c1o216); - (dist.f[DIR_MMM])[k_MMM] = computeOutflowDistribution(f, fN, DIR_MMM, rhoCorrection, cs, c1o216); - (dist.f[DIR_MPM])[k_M0M] = computeOutflowDistribution(f, fN, DIR_MPM, rhoCorrection, cs, c1o216); - break; - - case ZMZ: - (dist.f[DIR_0P0])[k_000] = computeOutflowDistribution(f, fN, DIR_0P0, rhoCorrection, cs, c2o27); - (dist.f[DIR_PP0])[k_000] = computeOutflowDistribution(f, fN, DIR_PP0, rhoCorrection, cs, c1o54); - (dist.f[DIR_MP0])[k_M00] = computeOutflowDistribution(f, fN, DIR_MP0, rhoCorrection, cs, c1o54); - (dist.f[DIR_0PP])[k_000] = computeOutflowDistribution(f, fN, DIR_0PP, rhoCorrection, cs, c1o54); - (dist.f[DIR_0PM])[k_00M] = computeOutflowDistribution(f, fN, DIR_0PM, rhoCorrection, cs, c1o54); - (dist.f[DIR_PPP])[k_000] = computeOutflowDistribution(f, fN, DIR_PPP, rhoCorrection, cs, c1o216); - (dist.f[DIR_MPP])[k_M00] = computeOutflowDistribution(f, fN, DIR_MPP, rhoCorrection, cs, c1o216); - (dist.f[DIR_PPM])[k_00M] = computeOutflowDistribution(f, fN, DIR_PPM, rhoCorrection, cs, c1o216); - (dist.f[DIR_MPM])[k_M0M] = computeOutflowDistribution(f, fN, DIR_MPM, rhoCorrection, cs, c1o216); - break; - - case ZPZ: - (dist.f[DIR_0M0])[k_0M0] =computeOutflowDistribution(f, fN, DIR_0M0, rhoCorrection, cs, c2o27); - (dist.f[DIR_PM0])[k_0M0] =computeOutflowDistribution(f, fN, DIR_PM0, rhoCorrection, cs, c1o54); - (dist.f[DIR_MM0])[k_MM0] =computeOutflowDistribution(f, fN, DIR_MM0, rhoCorrection, cs, c1o54); - (dist.f[DIR_0MP])[k_0M0] =computeOutflowDistribution(f, fN, DIR_0MP, rhoCorrection, cs, c1o54); - (dist.f[DIR_0MM])[k_0MM] =computeOutflowDistribution(f, fN, DIR_0MM, rhoCorrection, cs, c1o54); - (dist.f[DIR_PMP])[k_0M0] =computeOutflowDistribution(f, fN, DIR_PMP, rhoCorrection, cs, c1o216); - (dist.f[DIR_MMP])[k_MM0] =computeOutflowDistribution(f, fN, DIR_MMP, rhoCorrection, cs, c1o216); - (dist.f[DIR_PMM])[k_0MM] =computeOutflowDistribution(f, fN, DIR_PMM, rhoCorrection, cs, c1o216); - (dist.f[DIR_MMM])[k_MMM] =computeOutflowDistribution(f, fN, DIR_MMM, rhoCorrection, cs, c1o216); - break; - - case ZZM: - (dist.f[DIR_00P])[k_000] = computeOutflowDistribution(f, fN, DIR_00P, rhoCorrection, cs, c2o27); - (dist.f[DIR_P0P])[k_000] = computeOutflowDistribution(f, fN, DIR_P0P, rhoCorrection, cs, c1o54); - (dist.f[DIR_M0P])[k_M00] = computeOutflowDistribution(f, fN, DIR_M0P, rhoCorrection, cs, c1o54); - (dist.f[DIR_0PP])[k_000] = computeOutflowDistribution(f, fN, DIR_0PP, rhoCorrection, cs, c1o54); - (dist.f[DIR_0MP])[k_0M0] = computeOutflowDistribution(f, fN, DIR_0MP, rhoCorrection, cs, c1o54); - (dist.f[DIR_PPP])[k_000] = computeOutflowDistribution(f, fN, DIR_PPP, rhoCorrection, cs, c1o216); - (dist.f[DIR_MPP])[k_M00] = computeOutflowDistribution(f, fN, DIR_MPP, rhoCorrection, cs, c1o216); - (dist.f[DIR_PMP])[k_0M0] = computeOutflowDistribution(f, fN, DIR_PMP, rhoCorrection, cs, c1o216); - (dist.f[DIR_MMP])[k_MM0] = computeOutflowDistribution(f, fN, DIR_MMP, rhoCorrection, cs, c1o216); - break; - - case ZZP: - (dist.f[DIR_00M])[k_00M] = computeOutflowDistribution(f, fN, DIR_00M, rhoCorrection, cs, c2o27); - (dist.f[DIR_P0M])[k_00M] = computeOutflowDistribution(f, fN, DIR_P0M, rhoCorrection, cs, c1o54); - (dist.f[DIR_M0M])[k_M0M] = computeOutflowDistribution(f, fN, DIR_M0M, rhoCorrection, cs, c1o54); - (dist.f[DIR_0PM])[k_00M] = computeOutflowDistribution(f, fN, DIR_0PM, rhoCorrection, cs, c1o54); - (dist.f[DIR_0MM])[k_0MM] = computeOutflowDistribution(f, fN, DIR_0MM, rhoCorrection, cs, c1o54); - (dist.f[DIR_PPM])[k_00M] = computeOutflowDistribution(f, fN, DIR_PPM, rhoCorrection, cs, c1o216); - (dist.f[DIR_MPM])[k_M0M] = computeOutflowDistribution(f, fN, DIR_MPM, rhoCorrection, cs, c1o216); - (dist.f[DIR_PMM])[k_0MM] = computeOutflowDistribution(f, fN, DIR_PMM, rhoCorrection, cs, c1o216); - (dist.f[DIR_MMM])[k_MMM] = computeOutflowDistribution(f, fN, DIR_MMM, rhoCorrection, cs, c1o216); - break; - default: - break; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -__global__ void QPressDeviceOld27( - real* rhoBC, - real* DD, - int* k_Q, - int* k_N, - int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //////////////////////////////////////////////////////////////////////////////// - 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) - { - //////////////////////////////////////////////////////////////////////////////// - //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]; - //////////////////////////////////////////////////////////////////////////////// - //index1 - unsigned int K1QK = k_N[k]; - unsigned int k1zero= K1QK; - unsigned int k1e = K1QK; - unsigned int k1w = neighborX[K1QK]; - unsigned int k1n = K1QK; - unsigned int k1s = neighborY[K1QK]; - unsigned int k1t = K1QK; - unsigned int k1b = neighborZ[K1QK]; - unsigned int k1sw = neighborY[k1w]; - unsigned int k1ne = K1QK; - unsigned int k1se = k1s; - unsigned int k1nw = k1w; - unsigned int k1bw = neighborZ[k1w]; - unsigned int k1te = K1QK; - unsigned int k1be = k1b; - unsigned int k1tw = k1w; - unsigned int k1bs = neighborZ[k1s]; - unsigned int k1tn = K1QK; - unsigned int k1bn = k1b; - unsigned int k1ts = k1s; - unsigned int k1tse = k1s; - unsigned int k1bnw = k1bw; - unsigned int k1tnw = k1w; - unsigned int k1bse = k1bs; - unsigned int k1tsw = k1sw; - unsigned int k1bne = k1b; - unsigned int k1tne = K1QK; - unsigned int k1bsw = neighborZ[k1sw]; - //////////////////////////////////////////////////////////////////////////////// - Distributions27 D; - if (isEvenTimestep==false) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO, - f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW; - - f1_W = (D.f[DIR_P00])[k1e ]; - f1_E = (D.f[DIR_M00])[k1w ]; - f1_S = (D.f[DIR_0P0])[k1n ]; - f1_N = (D.f[DIR_0M0])[k1s ]; - f1_B = (D.f[DIR_00P])[k1t ]; - f1_T = (D.f[DIR_00M])[k1b ]; - f1_SW = (D.f[DIR_PP0])[k1ne ]; - f1_NE = (D.f[DIR_MM0])[k1sw ]; - f1_NW = (D.f[DIR_PM0])[k1se ]; - f1_SE = (D.f[DIR_MP0])[k1nw ]; - f1_BW = (D.f[DIR_P0P])[k1te ]; - f1_TE = (D.f[DIR_M0M])[k1bw ]; - f1_TW = (D.f[DIR_P0M])[k1be ]; - f1_BE = (D.f[DIR_M0P])[k1tw ]; - f1_BS = (D.f[DIR_0PP])[k1tn ]; - f1_TN = (D.f[DIR_0MM])[k1bs ]; - f1_TS = (D.f[DIR_0PM])[k1bn ]; - f1_BN = (D.f[DIR_0MP])[k1ts ]; - f1_ZERO = (D.f[DIR_000])[k1zero]; - f1_BSW = (D.f[DIR_PPP])[k1tne ]; - f1_BNE = (D.f[DIR_MMP])[k1tsw ]; - f1_BNW = (D.f[DIR_PMP])[k1tse ]; - f1_BSE = (D.f[DIR_MPP])[k1tnw ]; - f1_TSW = (D.f[DIR_PPM])[k1bne ]; - f1_TNE = (D.f[DIR_MMM])[k1bsw ]; - f1_TNW = (D.f[DIR_PMM])[k1bse ]; - f1_TSE = (D.f[DIR_MPM])[k1bnw ]; - - ////////////////////////////////////////////////////////////////////////// - real drho1 = f1_ZERO+f1_E+f1_W+f1_N+f1_S+f1_T+f1_B+f1_NE+f1_SW+f1_SE+f1_NW+f1_TE+f1_BW+f1_BE+f1_TW+f1_TN+f1_BS+f1_BN+f1_TS+ - f1_TNE+f1_TSW+f1_TSE+f1_TNW+f1_BNE+f1_BSW+f1_BSE+f1_BNW; - - //drho1 = (drho1 + rhoBC[k])/2.f; - drho1 = drho1 - rhoBC[k]; - ////////////////////////////////////////////////////////////////////////// - - __syncthreads(); - - (D.f[DIR_P00])[ke ] = f1_W -c2o27*drho1; // c1o100; // zero; // - (D.f[DIR_M00])[kw ] = f1_E -c2o27*drho1; // c1o100; // zero; // - (D.f[DIR_0P0])[kn ] = f1_S -c2o27*drho1; // c1o100; // zero; // - (D.f[DIR_0M0])[ks ] = f1_N -c2o27*drho1; // c1o100; // zero; // - (D.f[DIR_00P])[kt ] = f1_B -c2o27*drho1; // c1o100; // zero; // - (D.f[DIR_00M])[kb ] = f1_T -c2o27*drho1; // c1o100; // zero; // - (D.f[DIR_PP0])[kne ] = f1_SW -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_MM0])[ksw ] = f1_NE -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_PM0])[kse ] = f1_NW -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_MP0])[knw ] = f1_SE -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_P0P])[kte ] = f1_BW -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_M0M])[kbw ] = f1_TE -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_P0M])[kbe ] = f1_TW -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_M0P])[ktw ] = f1_BE -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_0PP])[ktn ] = f1_BS -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_0MM])[kbs ] = f1_TN -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_0PM])[kbn ] = f1_TS -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_0MP])[kts ] = f1_BN -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_000])[kzero] = f1_ZERO-c8o27*drho1; // c1o100; // zero; // - (D.f[DIR_PPP])[ktne ] = f1_BSW -c1o216*drho1; // c1o100; // zero; // - (D.f[DIR_MMP])[ktsw ] = f1_BNE -c1o216*drho1; // c1o100; // zero; // - (D.f[DIR_PMP])[ktse ] = f1_BNW -c1o216*drho1; // c1o100; // zero; // - (D.f[DIR_MPP])[ktnw ] = f1_BSE -c1o216*drho1; // c1o100; // zero; // - (D.f[DIR_PPM])[kbne ] = f1_TSW -c1o216*drho1; // c1o100; // zero; // - (D.f[DIR_MMM])[kbsw ] = f1_TNE -c1o216*drho1; // c1o100; // zero; // - (D.f[DIR_PMM])[kbse ] = f1_TNW -c1o216*drho1; // c1o100; // zero; // - (D.f[DIR_MPM])[kbnw ] = f1_TSE -c1o216*drho1; // c1o100; // zero; // - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -__global__ void QPressDeviceEQZ27( - real* rhoBC, - real* DD, - int* k_Q, - int* k_N, - real* kTestRE, - int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //////////////////////////////////////////////////////////////////////////////// - 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) - { - //////////////////////////////////////////////////////////////////////////////// - //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]; - //////////////////////////////////////////////////////////////////////////////// - //index1 - unsigned int K1QK = k_N[k]; - unsigned int k1zero= K1QK; - unsigned int k1e = K1QK; - unsigned int k1w = neighborX[K1QK]; - unsigned int k1n = K1QK; - unsigned int k1s = neighborY[K1QK]; - unsigned int k1t = K1QK; - unsigned int k1b = neighborZ[K1QK]; - unsigned int k1sw = neighborY[k1w]; - unsigned int k1ne = K1QK; - unsigned int k1se = k1s; - unsigned int k1nw = k1w; - unsigned int k1bw = neighborZ[k1w]; - unsigned int k1te = K1QK; - unsigned int k1be = k1b; - unsigned int k1tw = k1w; - unsigned int k1bs = neighborZ[k1s]; - unsigned int k1tn = K1QK; - unsigned int k1bn = k1b; - unsigned int k1ts = k1s; - unsigned int k1tse = k1s; - unsigned int k1bnw = k1bw; - unsigned int k1tnw = k1w; - unsigned int k1bse = k1bs; - unsigned int k1tsw = k1sw; - unsigned int k1bne = k1b; - unsigned int k1tne = K1QK; - unsigned int k1bsw = neighborZ[k1sw]; - //////////////////////////////////////////////////////////////////////////////// - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////// - // Distributions27 kDistTest; - // kDistTest.f[DIR_P00] = &kTestRE[DIR_P00 * numberOfBCnodes]; - // kDistTest.f[DIR_M00] = &kTestRE[DIR_M00 * numberOfBCnodes]; - // kDistTest.f[DIR_0P0] = &kTestRE[DIR_0P0 * numberOfBCnodes]; - // kDistTest.f[DIR_0M0] = &kTestRE[DIR_0M0 * numberOfBCnodes]; - // kDistTest.f[DIR_00P] = &kTestRE[DIR_00P * numberOfBCnodes]; - // kDistTest.f[DIR_00M] = &kTestRE[DIR_00M * numberOfBCnodes]; - // kDistTest.f[DIR_PP0] = &kTestRE[DIR_PP0 * numberOfBCnodes]; - // kDistTest.f[DIR_MM0] = &kTestRE[DIR_MM0 * numberOfBCnodes]; - // kDistTest.f[DIR_PM0] = &kTestRE[DIR_PM0 * numberOfBCnodes]; - // kDistTest.f[DIR_MP0] = &kTestRE[DIR_MP0 * numberOfBCnodes]; - // kDistTest.f[DIR_P0P] = &kTestRE[DIR_P0P * numberOfBCnodes]; - // kDistTest.f[DIR_M0M] = &kTestRE[DIR_M0M * numberOfBCnodes]; - // kDistTest.f[DIR_P0M] = &kTestRE[DIR_P0M * numberOfBCnodes]; - // kDistTest.f[DIR_M0P] = &kTestRE[DIR_M0P * numberOfBCnodes]; - // kDistTest.f[DIR_0PP] = &kTestRE[DIR_0PP * numberOfBCnodes]; - // kDistTest.f[DIR_0MM] = &kTestRE[DIR_0MM * numberOfBCnodes]; - // kDistTest.f[DIR_0PM] = &kTestRE[DIR_0PM * numberOfBCnodes]; - // kDistTest.f[DIR_0MP] = &kTestRE[DIR_0MP * numberOfBCnodes]; - // kDistTest.f[DIR_000] = &kTestRE[DIR_000 * numberOfBCnodes]; - // kDistTest.f[DIR_PPP] = &kTestRE[DIR_PPP * numberOfBCnodes]; - // kDistTest.f[DIR_MMP] = &kTestRE[DIR_MMP * numberOfBCnodes]; - // kDistTest.f[DIR_PMP] = &kTestRE[DIR_PMP * numberOfBCnodes]; - // kDistTest.f[DIR_MPP] = &kTestRE[DIR_MPP * numberOfBCnodes]; - // kDistTest.f[DIR_PPM] = &kTestRE[DIR_PPM * numberOfBCnodes]; - // kDistTest.f[DIR_MMM] = &kTestRE[DIR_MMM * numberOfBCnodes]; - // kDistTest.f[DIR_PMM] = &kTestRE[DIR_PMM * numberOfBCnodes]; - // kDistTest.f[DIR_MPM] = &kTestRE[DIR_MPM * numberOfBCnodes]; - // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // //real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO,f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW; - // //f1_W = (D.f[DIR_P00])[k1e ]; - // //f1_E = (D.f[DIR_M00])[k1w ]; - // //f1_S = (D.f[DIR_0P0])[k1n ]; - // //f1_N = (D.f[DIR_0M0])[k1s ]; - // //f1_B = (D.f[DIR_00P])[k1t ]; - // //f1_T = (D.f[DIR_00M])[k1b ]; - // //f1_SW = (D.f[DIR_PP0])[k1ne ]; - // //f1_NE = (D.f[DIR_MM0])[k1sw ]; - // //f1_NW = (D.f[DIR_PM0])[k1se ]; - // //f1_SE = (D.f[DIR_MP0])[k1nw ]; - // //f1_BW = (D.f[DIR_P0P])[k1te ]; - // //f1_TE = (D.f[DIR_M0M])[k1bw ]; - // //f1_TW = (D.f[DIR_P0M])[k1be ]; - // //f1_BE = (D.f[DIR_M0P])[k1tw ]; - // //f1_BS = (D.f[DIR_0PP])[k1tn ]; - // //f1_TN = (D.f[DIR_0MM])[k1bs ]; - // //f1_TS = (D.f[DIR_0PM])[k1bn ]; - // //f1_BN = (D.f[DIR_0MP])[k1ts ]; - // //f1_ZERO = (D.f[DIR_000])[k1zero]; - // //f1_BSW = (D.f[DIR_PPP])[k1tne ]; - // //f1_BNE = (D.f[DIR_MMP])[k1tsw ]; - // //f1_BNW = (D.f[DIR_PMP])[k1tse ]; - // //f1_BSE = (D.f[DIR_MPP])[k1tnw ]; - // //f1_TSW = (D.f[DIR_PPM])[k1bne ]; - // //f1_TNE = (D.f[DIR_MMM])[k1bsw ]; - // //f1_TNW = (D.f[DIR_PMM])[k1bse ]; - // //f1_TSE = (D.f[DIR_MPM])[k1bnw ]; - // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO,f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW; - // f1_E = (D.f[DIR_P00])[k1e ]; - // f1_W = (D.f[DIR_M00])[k1w ]; - // f1_N = (D.f[DIR_0P0])[k1n ]; - // f1_S = (D.f[DIR_0M0])[k1s ]; - // f1_T = (D.f[DIR_00P])[k1t ]; - // f1_B = (D.f[DIR_00M])[k1b ]; - // f1_NE = (D.f[DIR_PP0])[k1ne ]; - // f1_SW = (D.f[DIR_MM0])[k1sw ]; - // f1_SE = (D.f[DIR_PM0])[k1se ]; - // f1_NW = (D.f[DIR_MP0])[k1nw ]; - // f1_TE = (D.f[DIR_P0P])[k1te ]; - // f1_BW = (D.f[DIR_M0M])[k1bw ]; - // f1_BE = (D.f[DIR_P0M])[k1be ]; - // f1_TW = (D.f[DIR_M0P])[k1tw ]; - // f1_TN = (D.f[DIR_0PP])[k1tn ]; - // f1_BS = (D.f[DIR_0MM])[k1bs ]; - // f1_BN = (D.f[DIR_0PM])[k1bn ]; - // f1_TS = (D.f[DIR_0MP])[k1ts ]; - // f1_ZERO = (D.f[DIR_000])[k1zero]; - // f1_TNE = (D.f[DIR_PPP])[k1tne ]; - // f1_TSW = (D.f[DIR_MMP])[k1tsw ]; - // f1_TSE = (D.f[DIR_PMP])[k1tse ]; - // f1_TNW = (D.f[DIR_MPP])[k1tnw ]; - // f1_BNE = (D.f[DIR_PPM])[k1bne ]; - // f1_BSW = (D.f[DIR_MMM])[k1bsw ]; - // f1_BSE = (D.f[DIR_PMM])[k1bse ]; - // f1_BNW = (D.f[DIR_MPM])[k1bnw ]; - // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - // ////////////////////////////////////////////////////////////////////////// - // real drho1 = f1_ZERO+f1_E+f1_W+f1_N+f1_S+f1_T+f1_B+f1_NE+f1_SW+f1_SE+f1_NW+f1_TE+f1_BW+f1_BE+f1_TW+f1_TN+f1_BS+f1_BN+f1_TS+ f1_TNE+f1_TSW+f1_TSE+f1_TNW+f1_BNE+f1_BSW+f1_BSE+f1_BNW; - //real vx1 = (((f1_TNE-f1_BSW)+(f1_BSE-f1_TNW)+(f1_BNE-f1_TSW)+(f1_TSE-f1_BNW)) + (((f1_NE-f1_SW)+(f1_TE-f1_BW))+((f1_SE-f1_NW)+(f1_BE-f1_TW))) + (f1_E-f1_W)) / (one + drho1); - //real vx2 = (((f1_TNE-f1_BSW)+(f1_TNW-f1_BSE)+(f1_BNE-f1_TSW)+(f1_BNW-f1_TSE)) + (((f1_NE-f1_SW)+(f1_TN-f1_BS))+((f1_BN-f1_TS)+(f1_NW-f1_SE))) + (f1_N-f1_S)) / (one + drho1); - //real vx3 = (((f1_TNE-f1_BSW)+(f1_TNW-f1_BSE)+(f1_TSW-f1_BNE)+(f1_TSE-f1_BNW)) + (((f1_TE-f1_BW)+(f1_TN-f1_BS))+((f1_TW-f1_BE)+(f1_TS-f1_BN))) + (f1_T-f1_B)) / (one + drho1); - // ////////////////////////////////////////////////////////////////////////// - ////real omega = om1; - // real cusq = c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - // ////////////////////////////////////////////////////////////////////////// - ////T�st MK - ////if(vx1 < zero) vx1 = zero; - // ////////////////////////////////////////////////////////////////////////// - ////becomes higher with neighbor source and lower with local source - // //real fZERO = c8over27* (rhoBC[k]-(one + rhoBC[k])*(cusq)) ; - // //real fE = c2over27* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1 )+c9over2*( vx1 )*( vx1 )-cusq)); - // //real fW = c2over27* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cusq)); - // //real fN = c2over27* (rhoBC[k]+(one + rhoBC[k])*(three*( vx2 )+c9over2*( vx2 )*( vx2 )-cusq)); - // //real fS = c2over27* (rhoBC[k]+(one + rhoBC[k])*(three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cusq)); - // //real fT = c2over27* (rhoBC[k]+(one + rhoBC[k])*(three*( vx3)+c9over2*( vx3)*( vx3)-cusq)); - // //real fB = c2over27* (rhoBC[k]+(one + rhoBC[k])*(three*( -vx3)+c9over2*( -vx3)*( -vx3)-cusq)); - // //real fNE = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cusq)); - // //real fSW = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cusq)); - // //real fSE = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cusq)); - // //real fNW = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cusq)); - // //real fTE = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cusq)); - // //real fBW = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cusq)); - // //real fBE = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cusq)); - // //real fTW = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cusq)); - // //real fTN = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cusq)); - // //real fBS = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cusq)); - // //real fBN = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cusq)); - // //real fTS = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cusq)); - // //real fTNE = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq)); - // //real fBSW = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq)); - // //real fBNE = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq)); - // //real fTSW = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq)); - // //real fTSE = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq)); - // //real fBNW = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq)); - // //real fBSE = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq)); - // //real fTNW = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq)); - // ////////////////////////////////////////////////////////////////////////// - //// based on VirtualFluids (kucher + fard) - // real fZERO = c8over27 * rhoBC[k] * (one - cusq); - // real fE = c2over27 * rhoBC[k] * (one + three * ( vx1 ) + c9over2 * ( vx1 ) * ( vx1 ) - cusq); - // real fW = c2over27 * rhoBC[k] * (one + three * (-vx1 ) + c9over2 * (-vx1 ) * (-vx1 ) - cusq); - // real fN = c2over27 * rhoBC[k] * (one + three * ( vx2 ) + c9over2 * ( vx2 ) * ( vx2 ) - cusq); - // real fS = c2over27 * rhoBC[k] * (one + three * ( -vx2 ) + c9over2 * ( -vx2 ) * ( -vx2 ) - cusq); - // real fT = c2over27 * rhoBC[k] * (one + three * ( vx3) + c9over2 * ( vx3) * ( vx3) - cusq); - // real fB = c2over27 * rhoBC[k] * (one + three * ( -vx3) + c9over2 * ( -vx3) * ( -vx3) - cusq); - // real fNE = c1over54 * rhoBC[k] * (one + three * ( vx1+vx2 ) + c9over2 * ( vx1+vx2 ) * ( vx1+vx2 ) - cusq); - // real fSW = c1over54 * rhoBC[k] * (one + three * (-vx1-vx2 ) + c9over2 * (-vx1-vx2 ) * (-vx1-vx2 ) - cusq); - // real fSE = c1over54 * rhoBC[k] * (one + three * ( vx1-vx2 ) + c9over2 * ( vx1-vx2 ) * ( vx1-vx2 ) - cusq); - // real fNW = c1over54 * rhoBC[k] * (one + three * (-vx1+vx2 ) + c9over2 * (-vx1+vx2 ) * (-vx1+vx2 ) - cusq); - // real fTE = c1over54 * rhoBC[k] * (one + three * ( vx1 +vx3) + c9over2 * ( vx1 +vx3) * ( vx1 +vx3) - cusq); - // real fBW = c1over54 * rhoBC[k] * (one + three * (-vx1 -vx3) + c9over2 * (-vx1 -vx3) * (-vx1 -vx3) - cusq); - // real fBE = c1over54 * rhoBC[k] * (one + three * ( vx1 -vx3) + c9over2 * ( vx1 -vx3) * ( vx1 -vx3) - cusq); - // real fTW = c1over54 * rhoBC[k] * (one + three * (-vx1 +vx3) + c9over2 * (-vx1 +vx3) * (-vx1 +vx3) - cusq); - // real fTN = c1over54 * rhoBC[k] * (one + three * ( vx2+vx3) + c9over2 * ( vx2+vx3) * ( vx2+vx3) - cusq); - // real fBS = c1over54 * rhoBC[k] * (one + three * ( -vx2-vx3) + c9over2 * ( -vx2-vx3) * ( -vx2-vx3) - cusq); - // real fBN = c1over54 * rhoBC[k] * (one + three * ( vx2-vx3) + c9over2 * ( vx2-vx3) * ( vx2-vx3) - cusq); - // real fTS = c1over54 * rhoBC[k] * (one + three * ( -vx2+vx3) + c9over2 * ( -vx2+vx3) * ( -vx2+vx3) - cusq); - // real fTNE = c1over216 * rhoBC[k] * (one + three * ( vx1+vx2+vx3) + c9over2 * ( vx1+vx2+vx3) * ( vx1+vx2+vx3) - cusq); - // real fBSW = c1over216 * rhoBC[k] * (one + three * (-vx1-vx2-vx3) + c9over2 * (-vx1-vx2-vx3) * (-vx1-vx2-vx3) - cusq); - // real fBNE = c1over216 * rhoBC[k] * (one + three * ( vx1+vx2-vx3) + c9over2 * ( vx1+vx2-vx3) * ( vx1+vx2-vx3) - cusq); - // real fTSW = c1over216 * rhoBC[k] * (one + three * (-vx1-vx2+vx3) + c9over2 * (-vx1-vx2+vx3) * (-vx1-vx2+vx3) - cusq); - // real fTSE = c1over216 * rhoBC[k] * (one + three * ( vx1-vx2+vx3) + c9over2 * ( vx1-vx2+vx3) * ( vx1-vx2+vx3) - cusq); - // real fBNW = c1over216 * rhoBC[k] * (one + three * (-vx1+vx2-vx3) + c9over2 * (-vx1+vx2-vx3) * (-vx1+vx2-vx3) - cusq); - // real fBSE = c1over216 * rhoBC[k] * (one + three * ( vx1-vx2-vx3) + c9over2 * ( vx1-vx2-vx3) * ( vx1-vx2-vx3) - cusq); - // real fTNW = c1over216 * rhoBC[k] * (one + three * (-vx1+vx2+vx3) + c9over2 * (-vx1+vx2+vx3) * (-vx1+vx2+vx3) - cusq); - //// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //////test - //// real fZERO = c8over27 * ((drho1 + rhoBC[k]) / two) * (one - cusq); - //// real fE = c2over27 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1 ) + c9over2 * ( vx1 ) * ( vx1 ) - cusq); - //// real fW = c2over27 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1 ) + c9over2 * (-vx1 ) * (-vx1 ) - cusq); - //// real fN = c2over27 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx2 ) + c9over2 * ( vx2 ) * ( vx2 ) - cusq); - //// real fS = c2over27 * ((drho1 + rhoBC[k]) / two) * (one + three * ( -vx2 ) + c9over2 * ( -vx2 ) * ( -vx2 ) - cusq); - //// real fT = c2over27 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx3) + c9over2 * ( vx3) * ( vx3) - cusq); - //// real fB = c2over27 * ((drho1 + rhoBC[k]) / two) * (one + three * ( -vx3) + c9over2 * ( -vx3) * ( -vx3) - cusq); - //// real fNE = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1+vx2 ) + c9over2 * ( vx1+vx2 ) * ( vx1+vx2 ) - cusq); - //// real fSW = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1-vx2 ) + c9over2 * (-vx1-vx2 ) * (-vx1-vx2 ) - cusq); - //// real fSE = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1-vx2 ) + c9over2 * ( vx1-vx2 ) * ( vx1-vx2 ) - cusq); - //// real fNW = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1+vx2 ) + c9over2 * (-vx1+vx2 ) * (-vx1+vx2 ) - cusq); - //// real fTE = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1 +vx3) + c9over2 * ( vx1 +vx3) * ( vx1 +vx3) - cusq); - //// real fBW = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1 -vx3) + c9over2 * (-vx1 -vx3) * (-vx1 -vx3) - cusq); - //// real fBE = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1 -vx3) + c9over2 * ( vx1 -vx3) * ( vx1 -vx3) - cusq); - //// real fTW = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1 +vx3) + c9over2 * (-vx1 +vx3) * (-vx1 +vx3) - cusq); - //// real fTN = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx2+vx3) + c9over2 * ( vx2+vx3) * ( vx2+vx3) - cusq); - //// real fBS = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * ( -vx2-vx3) + c9over2 * ( -vx2-vx3) * ( -vx2-vx3) - cusq); - //// real fBN = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx2-vx3) + c9over2 * ( vx2-vx3) * ( vx2-vx3) - cusq); - //// real fTS = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * ( -vx2+vx3) + c9over2 * ( -vx2+vx3) * ( -vx2+vx3) - cusq); - //// real fTNE = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1+vx2+vx3) + c9over2 * ( vx1+vx2+vx3) * ( vx1+vx2+vx3) - cusq); - //// real fBSW = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1-vx2-vx3) + c9over2 * (-vx1-vx2-vx3) * (-vx1-vx2-vx3) - cusq); - //// real fBNE = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1+vx2-vx3) + c9over2 * ( vx1+vx2-vx3) * ( vx1+vx2-vx3) - cusq); - //// real fTSW = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1-vx2+vx3) + c9over2 * (-vx1-vx2+vx3) * (-vx1-vx2+vx3) - cusq); - //// real fTSE = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1-vx2+vx3) + c9over2 * ( vx1-vx2+vx3) * ( vx1-vx2+vx3) - cusq); - //// real fBNW = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1+vx2-vx3) + c9over2 * (-vx1+vx2-vx3) * (-vx1+vx2-vx3) - cusq); - //// real fBSE = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1-vx2-vx3) + c9over2 * ( vx1-vx2-vx3) * ( vx1-vx2-vx3) - cusq); - //// real fTNW = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1+vx2+vx3) + c9over2 * (-vx1+vx2+vx3) * (-vx1+vx2+vx3) - cusq); - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // based on BGK Plus Comp - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //double mfabb = (D.f[DIR_P00])[k1e ]; - //double mfcbb = (D.f[DIR_M00])[k1w ]; - //double mfbab = (D.f[DIR_0P0])[k1n ]; - //double mfbcb = (D.f[DIR_0M0])[k1s ]; - //double mfbba = (D.f[DIR_00P])[k1t ]; - //double mfbbc = (D.f[DIR_00M])[k1b ]; - //double mfaab = (D.f[DIR_PP0])[k1ne ]; - //double mfccb = (D.f[DIR_MM0])[k1sw ]; - //double mfacb = (D.f[DIR_PM0])[k1se ]; - //double mfcab = (D.f[DIR_MP0])[k1nw ]; - //double mfaba = (D.f[DIR_P0P])[k1te ]; - //double mfcbc = (D.f[DIR_M0M])[k1bw ]; - //double mfabc = (D.f[DIR_P0M])[k1be ]; - //double mfcba = (D.f[DIR_M0P])[k1tw ]; - //double mfbaa = (D.f[DIR_0PP])[k1tn ]; - //double mfbcc = (D.f[DIR_0MM])[k1bs ]; - //double mfbac = (D.f[DIR_0PM])[k1bn ]; - //double mfbca = (D.f[DIR_0MP])[k1ts ]; - //double mfbbb = (D.f[DIR_000])[k1zero]; - //double mfaaa = (D.f[DIR_PPP])[k1tne ]; - //double mfcca = (D.f[DIR_MMP])[k1tsw ]; - //double mfaca = (D.f[DIR_PMP])[k1tse ]; - //double mfcaa = (D.f[DIR_MPP])[k1tnw ]; - //double mfaac = (D.f[DIR_PPM])[k1bne ]; - //double mfccc = (D.f[DIR_MMM])[k1bsw ]; - //double mfacc = (D.f[DIR_PMM])[k1bse ]; - //double mfcac = (D.f[DIR_MPM])[k1bnw ]; - real mfabb = (D.f[DIR_P00])[k1e ]; - real mfcbb = (D.f[DIR_M00])[k1w ]; - real mfbab = (D.f[DIR_0P0])[k1n ]; - real mfbcb = (D.f[DIR_0M0])[k1s ]; - real mfbba = (D.f[DIR_00P])[k1t ]; - real mfbbc = (D.f[DIR_00M])[k1b ]; - real mfaab = (D.f[DIR_PP0])[k1ne ]; - real mfccb = (D.f[DIR_MM0])[k1sw ]; - real mfacb = (D.f[DIR_PM0])[k1se ]; - real mfcab = (D.f[DIR_MP0])[k1nw ]; - real mfaba = (D.f[DIR_P0P])[k1te ]; - real mfcbc = (D.f[DIR_M0M])[k1bw ]; - real mfabc = (D.f[DIR_P0M])[k1be ]; - real mfcba = (D.f[DIR_M0P])[k1tw ]; - real mfbaa = (D.f[DIR_0PP])[k1tn ]; - real mfbcc = (D.f[DIR_0MM])[k1bs ]; - real mfbac = (D.f[DIR_0PM])[k1bn ]; - real mfbca = (D.f[DIR_0MP])[k1ts ]; - real mfbbb = (D.f[DIR_000])[k1zero]; - real mfaaa = (D.f[DIR_PPP])[k1tne ]; - real mfcca = (D.f[DIR_MMP])[k1tsw ]; - real mfaca = (D.f[DIR_PMP])[k1tse ]; - real mfcaa = (D.f[DIR_MPP])[k1tnw ]; - real mfaac = (D.f[DIR_PPM])[k1bne ]; - real mfccc = (D.f[DIR_MMM])[k1bsw ]; - real mfacc = (D.f[DIR_PMM])[k1bse ]; - real mfcac = (D.f[DIR_MPM])[k1bnw ]; - - //real mfcbb = (D.f[DIR_P00])[ke ]; - //real mfabb = (D.f[DIR_M00])[kw ]; - //real mfbcb = (D.f[DIR_0P0])[kn ]; - //real mfbab = (D.f[DIR_0M0])[ks ]; - //real mfbbc = (D.f[DIR_00P])[kt ]; - //real mfbba = (D.f[DIR_00M])[kb ]; - //real mfccb = (D.f[DIR_PP0])[kne ]; - //real mfaab = (D.f[DIR_MM0])[ksw ]; - //real mfcab = (D.f[DIR_PM0])[kse ]; - //real mfacb = (D.f[DIR_MP0])[knw ]; - //real mfcbc = (D.f[DIR_P0P])[kte ]; - //real mfaba = (D.f[DIR_M0M])[kbw ]; - //real mfcba = (D.f[DIR_P0M])[kbe ]; - //real mfabc = (D.f[DIR_M0P])[ktw ]; - //real mfbcc = (D.f[DIR_0PP])[ktn ]; - //real mfbaa = (D.f[DIR_0MM])[kbs ]; - //real mfbca = (D.f[DIR_0PM])[kbn ]; - //real mfbac = (D.f[DIR_0MP])[kts ]; - //real mfbbb = (D.f[DIR_000])[kzero]; - //real mfccc = (D.f[DIR_PPP])[ktne ]; - //real mfaac = (D.f[DIR_MMP])[ktsw ]; - //real mfcac = (D.f[DIR_PMP])[ktse ]; - //real mfacc = (D.f[DIR_MPP])[ktnw ]; - //real mfcca = (D.f[DIR_PPM])[kbne ]; - //real mfaaa = (D.f[DIR_MMM])[kbsw ]; - //real mfcaa = (D.f[DIR_PMM])[kbse ]; - //real mfaca = (D.f[DIR_MPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////////// - //real rho = (((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + - // (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + - // ((mfabb+mfcbb) + (mfbab+mfbcb)) + (mfbba+mfbbc)) + mfbbb) + one;//!!!!Achtung + one - //////////////////////////////////////////////////////////////////////////////////// - real rho = rhoBC[k]; - //////////////////////////////////////////////////////////////////////////////////// - real OoRho = c1o1 / (rho * 1.5f); - //////////////////////////////////////////////////////////////////////////////////// - real vvx = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + - (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + - (mfcbb-mfabb)) * OoRho; - real vvy =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + - (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + - (mfbcb-mfbab)) * OoRho; - real vvz =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + - (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + - (mfbbc-mfbba)) * OoRho; - ///////////////////////// - //Test Values - //double vvx = 0.016; - //double vvy = zero; - //double vvz = zero; - //////////////////////////////////////////////////////////////////////////////////////// - ////round off error test - //if(vvx!=zero){ - // (kDistTest.f[DIR_P00])[k] = mfabb; - // (kDistTest.f[DIR_M00])[k] = mfcbb; - // (kDistTest.f[DIR_0P0])[k] = mfbab; - // (kDistTest.f[DIR_0M0])[k] = mfbcb; - // (kDistTest.f[DIR_00P])[k] = mfbba; - // (kDistTest.f[DIR_00M])[k] = mfbbc; - // (kDistTest.f[DIR_PP0])[k] = mfaab; - // (kDistTest.f[DIR_MM0])[k] = mfccb; - // (kDistTest.f[DIR_PM0])[k] = mfacb; - // (kDistTest.f[DIR_MP0])[k] = mfcab; - // (kDistTest.f[DIR_P0P])[k] = mfaba; - // (kDistTest.f[DIR_M0M])[k] = mfcbc; - // (kDistTest.f[DIR_P0M])[k] = mfabc; - // (kDistTest.f[DIR_M0P])[k] = mfcba; - // (kDistTest.f[DIR_0PP])[k] = mfbaa; - // (kDistTest.f[DIR_0MM])[k] = mfbcc; - // (kDistTest.f[DIR_0PM])[k] = mfbac; - // (kDistTest.f[DIR_0MP])[k] = mfbca; - // (kDistTest.f[DIR_000])[k] = KQK; - // (kDistTest.f[DIR_PPP])[k] = mfaaa; - // (kDistTest.f[DIR_MMP])[k] = mfcca; - // (kDistTest.f[DIR_PMP])[k] = mfaca; - // (kDistTest.f[DIR_MPP])[k] = mfcaa; - // (kDistTest.f[DIR_PPM])[k] = mfaac; - // (kDistTest.f[DIR_MMM])[k] = mfccc; - // (kDistTest.f[DIR_PMM])[k] = mfacc; - // (kDistTest.f[DIR_MPM])[k] = mfcac; - //}else{ - // (kDistTest.f[DIR_P00])[k] = zero; - // (kDistTest.f[DIR_M00])[k] = zero; - // (kDistTest.f[DIR_0P0])[k] = zero; - // (kDistTest.f[DIR_0M0])[k] = zero; - // (kDistTest.f[DIR_00P])[k] = zero; - // (kDistTest.f[DIR_00M])[k] = zero; - // (kDistTest.f[DIR_PP0])[k] = zero; - // (kDistTest.f[DIR_MM0])[k] = zero; - // (kDistTest.f[DIR_PM0])[k] = zero; - // (kDistTest.f[DIR_MP0])[k] = zero; - // (kDistTest.f[DIR_P0P])[k] = zero; - // (kDistTest.f[DIR_M0M])[k] = zero; - // (kDistTest.f[DIR_P0M])[k] = zero; - // (kDistTest.f[DIR_M0P])[k] = zero; - // (kDistTest.f[DIR_0PP])[k] = zero; - // (kDistTest.f[DIR_0MM])[k] = zero; - // (kDistTest.f[DIR_0PM])[k] = zero; - // (kDistTest.f[DIR_0MP])[k] = zero; - // (kDistTest.f[DIR_000])[k] = zero; - // (kDistTest.f[DIR_PPP])[k] = zero; - // (kDistTest.f[DIR_MMP])[k] = zero; - // (kDistTest.f[DIR_PMP])[k] = zero; - // (kDistTest.f[DIR_MPP])[k] = zero; - // (kDistTest.f[DIR_PPM])[k] = zero; - // (kDistTest.f[DIR_MMM])[k] = zero; - // (kDistTest.f[DIR_PMM])[k] = zero; - // (kDistTest.f[DIR_MPM])[k] = zero; - //} - - ////////////////////////////////////////////////////////////////////////////////////// - //// first bad fix for negative x velocity - ////if(vvx > zero) vvx = zero; - ////////////////////////////////////////////////////////////////////////////////////// - ////// second bad fix for negative x velocity - ////if(vvx > zero){ - //// vvx = -vvx; - //// vvy = -vvy; - //// vvz = -vvz; - ////} - //////////////////////////////////////////////////////////////////////////////////// - double vx2 = vvx * vvx; - double vy2 = vvy * vvy; - double vz2 = vvz * vvz; - ////////////////////////////////////////////////////////////////////////////////// - //original - real XXb = -c2o3 + vx2; - real XXc = -c1o2 * (XXb + c1o1 + vvx); - real XXa = XXc + vvx; - real YYb = -c2o3 + vy2; - real YYc = -c1o2 * (YYb + c1o1 + vvy); - real YYa = YYc + vvy; - real ZZb = -c2o3 + vz2; - real ZZc = -c1o2 * (ZZb + c1o1 + vvz); - real ZZa = ZZc + vvz; - ////////////////////////////////////////////////////////////////////////////////// - //unkonditioniert - mfcbb = -(rhoBC[k] + c1o1) * XXc * YYb * ZZb - c2o27; - mfabb = -(rhoBC[k] + c1o1) * XXa * YYb * ZZb - c2o27; - mfbcb = -(rhoBC[k] + c1o1) * XXb * YYc * ZZb - c2o27; - mfbab = -(rhoBC[k] + c1o1) * XXb * YYa * ZZb - c2o27; - mfbbc = -(rhoBC[k] + c1o1) * XXb * YYb * ZZc - c2o27; - mfbba = -(rhoBC[k] + c1o1) * XXb * YYb * ZZa - c2o27; - mfccb = -(rhoBC[k] + c1o1) * XXc * YYc * ZZb - c1o54; - mfaab = -(rhoBC[k] + c1o1) * XXa * YYa * ZZb - c1o54; - mfcab = -(rhoBC[k] + c1o1) * XXc * YYa * ZZb - c1o54; - mfacb = -(rhoBC[k] + c1o1) * XXa * YYc * ZZb - c1o54; - mfcbc = -(rhoBC[k] + c1o1) * XXc * YYb * ZZc - c1o54; - mfaba = -(rhoBC[k] + c1o1) * XXa * YYb * ZZa - c1o54; - mfcba = -(rhoBC[k] + c1o1) * XXc * YYb * ZZa - c1o54; - mfabc = -(rhoBC[k] + c1o1) * XXa * YYb * ZZc - c1o54; - mfbcc = -(rhoBC[k] + c1o1) * XXb * YYc * ZZc - c1o54; - mfbaa = -(rhoBC[k] + c1o1) * XXb * YYa * ZZa - c1o54; - mfbca = -(rhoBC[k] + c1o1) * XXb * YYc * ZZa - c1o54; - mfbac = -(rhoBC[k] + c1o1) * XXb * YYa * ZZc - c1o54; - mfbbb = -(rhoBC[k] + c1o1) * XXb * YYb * ZZb - c8o27; - mfccc = -(rhoBC[k] + c1o1) * XXc * YYc * ZZc - c1o216; - mfaac = -(rhoBC[k] + c1o1) * XXa * YYa * ZZc - c1o216; - mfcac = -(rhoBC[k] + c1o1) * XXc * YYa * ZZc - c1o216; - mfacc = -(rhoBC[k] + c1o1) * XXa * YYc * ZZc - c1o216; - mfcca = -(rhoBC[k] + c1o1) * XXc * YYc * ZZa - c1o216; - mfaaa = -(rhoBC[k] + c1o1) * XXa * YYa * ZZa - c1o216; - mfcaa = -(rhoBC[k] + c1o1) * XXc * YYa * ZZa - c1o216; - mfaca = -(rhoBC[k] + c1o1) * XXa * YYc * ZZa - c1o216; - ////////////////////////////////////////////////////////// - ////konditioniert - //double OneOver216RhoPlusOne = c1over216*(rhoBC[k]+one); - //double OnoOver216Rho = c1over216*rhoBC[k]; - //mfcbb = OnoOver216Rho*sixteen + OneOver216RhoPlusOne*twelve*(-(two*vy2) - two*vz2 + three*vy2*vz2 + vvx*(-two + three*vy2)*(-two + three*vz2) + vx2*(-two + three*vy2)*(-two + three*vz2)); - //mfabb = OnoOver216Rho*sixteen - OneOver216RhoPlusOne*twelve*(two*vy2 + two*vz2 - three*vy2*vz2 + vvx*(-two + three*vy2)*(-two + three*vz2) + vx2*(-four + six*vy2 + six*vz2 - nine*vy2*vz2)); - //mfbcb = four*(-(four*OneOver216RhoPlusOne) + four*OnoOver216Rho + OneOver216RhoPlusOne*(-two + three*vx2)*(one + three*vvy + three*vy2)*(-two + three*vz2)); - //mfbab = four*(four*OnoOver216Rho - OneOver216RhoPlusOne*three*(vvy*(-two + three*vx2)*(-two + three*vz2) - one*vx2*(one + three*vy2)*(-two + three*vz2) + two*(-(two*vy2) + vz2 + three*vy2*vz2))); - //mfbbc = four*(-(four*OneOver216RhoPlusOne) + four*OnoOver216Rho + OneOver216RhoPlusOne*(-two + three*vx2)*(-two + three*vy2)*(one + three*vvz + three*vz2)); - //mfbba = four*(four*OnoOver216Rho - OneOver216RhoPlusOne*three*(vvz*(-two + three*vx2)*(-two + three*vy2) - one*vx2*(-two + three*vy2)*(one + three*vz2) + two*(vy2 - two*vz2 + three*vy2*vz2))); - //mfccb = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(-(two*vx2) - two*vy2 - six*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(-two + three*vz2) + vvx*(one + three*vvy + three*vy2)*(-two + three*vz2)))); - //mfaab = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(-(two*vx2) - two*vy2 - six*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-two + three*vz2) + vvx*(-one + three*vvy - three*vy2)*(-two + three*vz2)))); - //mfcab = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(two*vx2 + two*vy2 + six*vx2*vy2 - one*vz2 - three*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(-two + three*vz2) + vvx*(-one + three*vvy - three*vy2)*(-two + three*vz2))); - //mfacb = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(two*vx2 + two*vy2 + six*vx2*vy2 - one*vz2 - three*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-two + three*vz2) + vvx*(one + three*vvy + three*vy2)*(-two + three*vz2))); - //mfcbc = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(-(two*vx2) + vy2 + three*vx2*vy2 + vvz*(one + three*vx2)*(-two + three*vy2) - two*vz2 - six*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvx*(-two + three*vy2)*(one + three*vvz + three*vz2)))); - //mfaba = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(-(two*vx2) + vy2 + three*vx2*vy2 - one*vvz*(one + three*vx2)*(-two + three*vy2) - two*vz2 - six*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvx*(-two + three*vy2)*(-one + three*vvz - three*vz2)))); - //mfcba = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(two*vx2 - one*vy2 - three*vx2*vy2 + vvz*(one + three*vx2)*(-two + three*vy2) + two*vz2 + six*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 + vvx*(-two + three*vy2)*(-one + three*vvz - three*vz2))); - //mfabc = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(two*vx2 - one*vy2 - three*vx2*vy2 - one*vvz*(one + three*vx2)*(-two + three*vy2) + two*vz2 + six*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 + vvx*(-two + three*vy2)*(one + three*vvz + three*vz2))); - //mfbcc = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(vx2 - two*vy2 + three*vx2*vy2 + vvz*(-two + three*vx2)*(one + three*vy2) - two*vz2 + three*vx2*vz2 - six*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(-two + three*vx2)*(one + three*vvz + three*vz2)))); - //mfbaa = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(vx2 - two*vy2 + three*vx2*vy2 - one*vvz*(-two + three*vx2)*(one + three*vy2) - two*vz2 + three*vx2*vz2 - six*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(-two + three*vx2)*(-one + three*vvz - three*vz2)))); - //mfbca = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(-(one*vx2) + two*vy2 - three*vx2*vy2 + vvz*(-two + three*vx2)*(one + three*vy2) + two*vz2 - three*vx2*vz2 + six*vy2*vz2 - nine*vx2*vy2*vz2 + vvy*(-two + three*vx2)*(-one + three*vvz - three*vz2))); - //mfbac = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(-(one*vx2) + two*vy2 - three*vx2*vy2 - one*vvz*(-two + three*vx2)*(one + three*vy2) + two*vz2 - three*vx2*vz2 + six*vy2*vz2 - nine*vx2*vy2*vz2 + vvy*(-two + three*vx2)*(one + three*vvz + three*vz2))); - //mfbbb = eight*(eight*OnoOver216Rho + OneOver216RhoPlusOne*three*(four*vy2 + four*vz2 - six*vy2*vz2 + vx2*(-two + three*vy2)*(-two + three*vz2))); - //mfccc = OnoOver216Rho + OneOver216RhoPlusOne*three*(vvz + vx2 + three*vvz*vx2 + vy2 + three*vvz*vy2 + three*vx2*vy2 + nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(one + three*vvz + three*vz2) + vvx*(one + three*vvy + three*vy2)*(one + three*vvz + three*vz2)); - //mfaac = OnoOver216Rho + OneOver216RhoPlusOne*three*(vvz + vx2 + three*vvz*vx2 + vy2 + three*vvz*vy2 + three*vx2*vy2 + nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(one + three*vvz + three*vz2) + vvx*(-one + three*vvy - three*vy2)*(one + three*vvz + three*vz2)); - //mfcac = OnoOver216Rho + OneOver216RhoPlusOne*three*(vvz + vx2 + three*vvz*vx2 + vy2 + three*vvz*vy2 + three*vx2*vy2 + nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(one + three*vvz + three*vz2) - one*vvx*(-one + three*vvy - three*vy2)*(one + three*vvz + three*vz2)); - //mfacc = OnoOver216Rho + OneOver216RhoPlusOne*three*(vvz + vx2 + three*vvz*vx2 + vy2 + three*vvz*vy2 + three*vx2*vy2 + nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(one + three*vvz + three*vz2) - one*vvx*(one + three*vvy + three*vy2)*(one + three*vvz + three*vz2)); - //mfcca = OnoOver216Rho + OneOver216RhoPlusOne*three*(-(one*vvz) + vx2 - three*vvz*vx2 + vy2 - three*vvz*vy2 + three*vx2*vy2 - nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-one + three*vvz - three*vz2) - one*vvx*(one + three*vvy + three*vy2)*(-one + three*vvz - three*vz2)); - //mfaaa = OnoOver216Rho - OneOver216RhoPlusOne*three*(vvz - one*vx2 + three*vvz*vx2 - one*vy2 + three*vvz*vy2 - three*vx2*vy2 + nine*vvz*vx2*vy2 - one*vz2 - three*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-one + three*vvz - three*vz2) + vvx*(-one + three*vvy - three*vy2)*(-one + three*vvz - three*vz2)); - //mfcaa = OnoOver216Rho + OneOver216RhoPlusOne*three*(-(one*vvz) + vx2 - three*vvz*vx2 + vy2 - three*vvz*vy2 + three*vx2*vy2 - nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(-one + three*vvz - three*vz2) + vvx*(-one + three*vvy - three*vy2)*(-one + three*vvz - three*vz2)); - //mfaca = OnoOver216Rho + OneOver216RhoPlusOne*three*(-(one*vvz) + vx2 - three*vvz*vx2 + vy2 - three*vvz*vy2 + three*vx2*vy2 - nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-one + three*vvz - three*vz2) + vvx*(one + three*vvy + three*vy2)*(-one + three*vvz - three*vz2)); - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //if (isEvenTimestep==true) - //{ - // D.f[DIR_P00] = &DD[DIR_P00 * size_Mat]; - // D.f[DIR_M00] = &DD[DIR_M00 * size_Mat]; - // D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat]; - // D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat]; - // D.f[DIR_00P] = &DD[DIR_00P * size_Mat]; - // D.f[DIR_00M] = &DD[DIR_00M * size_Mat]; - // D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat]; - // D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat]; - // D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat]; - // D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat]; - // D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat]; - // D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat]; - // D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat]; - // D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat]; - // D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat]; - // D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat]; - // D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat]; - // D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat]; - // D.f[DIR_000] = &DD[DIR_000 * size_Mat]; - // D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat]; - // D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat]; - // D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat]; - // D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat]; - // D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat]; - // D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat]; - // D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat]; - // D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat]; - //} - //else - //{ - // D.f[DIR_M00] = &DD[DIR_P00 * size_Mat]; - // D.f[DIR_P00] = &DD[DIR_M00 * size_Mat]; - // D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat]; - // D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat]; - // D.f[DIR_00M] = &DD[DIR_00P * size_Mat]; - // D.f[DIR_00P] = &DD[DIR_00M * size_Mat]; - // D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat]; - // D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat]; - // D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat]; - // D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat]; - // D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat]; - // D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat]; - // D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat]; - // D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat]; - // D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat]; - // D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat]; - // D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat]; - // D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat]; - // D.f[DIR_000] = &DD[DIR_000 * size_Mat]; - // D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat]; - // D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat]; - // D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat]; - // D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat]; - // D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat]; - // D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat]; - // D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat]; - // D.f[DIR_MPM] = &DD[DIR_PMP * size_Mat]; - //} - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //__syncthreads(); - - (D.f[DIR_P00])[ke ] = mfabb;//mfcbb; - (D.f[DIR_M00])[kw ] = mfcbb;//mfabb; - (D.f[DIR_0P0])[kn ] = mfbab;//mfbcb; - (D.f[DIR_0M0])[ks ] = mfbcb;//mfbab; - (D.f[DIR_00P])[kt ] = mfbba;//mfbbc; - (D.f[DIR_00M])[kb ] = mfbbc;//mfbba; - (D.f[DIR_PP0])[kne ] = mfaab;//mfccb; - (D.f[DIR_MM0])[ksw ] = mfccb;//mfaab; - (D.f[DIR_PM0])[kse ] = mfacb;//mfcab; - (D.f[DIR_MP0])[knw ] = mfcab;//mfacb; - (D.f[DIR_P0P])[kte ] = mfaba;//mfcbc; - (D.f[DIR_M0M])[kbw ] = mfcbc;//mfaba; - (D.f[DIR_P0M])[kbe ] = mfabc;//mfcba; - (D.f[DIR_M0P])[ktw ] = mfcba;//mfabc; - (D.f[DIR_0PP])[ktn ] = mfbaa;//mfbcc; - (D.f[DIR_0MM])[kbs ] = mfbcc;//mfbaa; - (D.f[DIR_0PM])[kbn ] = mfbac;//mfbca; - (D.f[DIR_0MP])[kts ] = mfbca;//mfbac; - (D.f[DIR_000])[kzero] = mfbbb;//mfbbb; - (D.f[DIR_PPP])[ktne ] = mfaaa;//mfccc; - (D.f[DIR_MMP])[ktsw ] = mfcca;//mfaac; - (D.f[DIR_PMP])[ktse ] = mfaca;//mfcac; - (D.f[DIR_MPP])[ktnw ] = mfcaa;//mfacc; - (D.f[DIR_PPM])[kbne ] = mfaac;//mfcca; - (D.f[DIR_MMM])[kbsw ] = mfccc;//mfaaa; - (D.f[DIR_PMM])[kbse ] = mfacc;//mfcaa; - (D.f[DIR_MPM])[kbnw ] = mfcac;//mfaca; - //(D.f[DIR_P00])[ke ] = mfcbb; - //(D.f[DIR_M00])[kw ] = mfabb; - //(D.f[DIR_0P0])[kn ] = mfbcb; - //(D.f[DIR_0M0])[ks ] = mfbab; - //(D.f[DIR_00P])[kt ] = mfbbc; - //(D.f[DIR_00M])[kb ] = mfbba; - //(D.f[DIR_PP0])[kne ] = mfccb; - //(D.f[DIR_MM0])[ksw ] = mfaab; - //(D.f[DIR_PM0])[kse ] = mfcab; - //(D.f[DIR_MP0])[knw ] = mfacb; - //(D.f[DIR_P0P])[kte ] = mfcbc; - //(D.f[DIR_M0M])[kbw ] = mfaba; - //(D.f[DIR_P0M])[kbe ] = mfcba; - //(D.f[DIR_M0P])[ktw ] = mfabc; - //(D.f[DIR_0PP])[ktn ] = mfbcc; - //(D.f[DIR_0MM])[kbs ] = mfbaa; - //(D.f[DIR_0PM])[kbn ] = mfbca; - //(D.f[DIR_0MP])[kts ] = mfbac; - //(D.f[DIR_000])[kzero] = mfbbb; - //(D.f[DIR_PPP])[ktne ] = mfccc; - //(D.f[DIR_MMP])[ktsw ] = mfaac; - //(D.f[DIR_PMP])[ktse ] = mfcac; - //(D.f[DIR_MPP])[ktnw ] = mfacc; - //(D.f[DIR_PPM])[kbne ] = mfcca; - //(D.f[DIR_MMM])[kbsw ] = mfaaa; - //(D.f[DIR_PMM])[kbse ] = mfcaa; - //(D.f[DIR_MPM])[kbnw ] = mfaca; - - //(D.f[DIR_P00])[ke ] = fE ; //f1_E ; //fW; //fE ; - //(D.f[DIR_M00])[kw ] = fW ; //f1_W ; //fE; //fW ; - //(D.f[DIR_0P0])[kn ] = fN ; //f1_N ; //fS; //fN ; - //(D.f[DIR_0M0])[ks ] = fS ; //f1_S ; //fN; //fS ; - //(D.f[DIR_00P])[kt ] = fT ; //f1_T ; //fB; //fT ; - //(D.f[DIR_00M])[kb ] = fB ; //f1_B ; //fT; //fB ; - //(D.f[DIR_PP0])[kne ] = fNE; //f1_NE; //fSW; //fNE; - //(D.f[DIR_MM0])[ksw ] = fSW; //f1_SW; //fNE; //fSW; - //(D.f[DIR_PM0])[kse ] = fSE; //f1_SE; //fNW; //fSE; - //(D.f[DIR_MP0])[knw ] = fNW; //f1_NW; //fSE; //fNW; - //(D.f[DIR_P0P])[kte ] = fTE; //f1_TE; //fBW; //fTE; - //(D.f[DIR_M0M])[kbw ] = fBW; //f1_BW; //fTE; //fBW; - //(D.f[DIR_P0M])[kbe ] = fBE; //f1_BE; //fTW; //fBE; - //(D.f[DIR_M0P])[ktw ] = fTW; //f1_TW; //fBE; //fTW; - //(D.f[DIR_0PP])[ktn ] = fTN; //f1_TN; //fBS; //fTN; - //(D.f[DIR_0MM])[kbs ] = fBS; //f1_BS; //fTN; //fBS; - //(D.f[DIR_0PM])[kbn ] = fBN; //f1_BN; //fTS; //fBN; - //(D.f[DIR_0MP])[kts ] = fTS; //f1_TS; //fBN; //fTS; - //(D.f[DIR_000])[kzero] = fZERO;//f1_ZERO; //fZERO; //fZERO; - //(D.f[DIR_PPP])[ktne ] = fTNE; //f1_TNE; //fBSW; //fTNE; - //(D.f[DIR_MMM])[kbsw ] = fBSW; //f1_BSW; //fTNE; //fBSW; - //(D.f[DIR_PPM])[kbne ] = fBNE; //f1_BNE; //fTSW; //fBNE; - //(D.f[DIR_MMP])[ktsw ] = fTSW; //f1_TSW; //fBNE; //fTSW; - //(D.f[DIR_PMP])[ktse ] = fTSE; //f1_TSE; //fBNW; //fTSE; - //(D.f[DIR_MPM])[kbnw ] = fBNW; //f1_BNW; //fTSE; //fBNW; - //(D.f[DIR_PMM])[kbse ] = fBSE; //f1_BSE; //fTNW; //fBSE; - //(D.f[DIR_MPP])[ktnw ] = fTNW; //f1_TNW; //fBSE; //fTNW; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -__global__ void QPressDeviceZero27( - real* DD, - int* k_Q, - unsigned int numberOfBCnodes, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //////////////////////////////////////////////////////////////////////////////// - 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) - { - //////////////////////////////////////////////////////////////////////////////// - //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]; - //////////////////////////////////////////////////////////////////////////////// - Distributions27 D; - if (isEvenTimestep==false) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //__syncthreads(); - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[ke ] =c0o1; - (D.f[DIR_M00])[kw ] =c0o1; - (D.f[DIR_0P0])[kn ] =c0o1; - (D.f[DIR_0M0])[ks ] =c0o1; - (D.f[DIR_00P])[kt ] =c0o1; - (D.f[DIR_00M])[kb ] =c0o1; - (D.f[DIR_PP0])[kne ] =c0o1; - (D.f[DIR_MM0])[ksw ] =c0o1; - (D.f[DIR_PM0])[kse ] =c0o1; - (D.f[DIR_MP0])[knw ] =c0o1; - (D.f[DIR_P0P])[kte ] =c0o1; - (D.f[DIR_M0M])[kbw ] =c0o1; - (D.f[DIR_P0M])[kbe ] =c0o1; - (D.f[DIR_M0P])[ktw ] =c0o1; - (D.f[DIR_0PP])[ktn ] =c0o1; - (D.f[DIR_0MM])[kbs ] =c0o1; - (D.f[DIR_0PM])[kbn ] =c0o1; - (D.f[DIR_0MP])[kts ] =c0o1; - (D.f[DIR_000])[kzero] =c0o1; - (D.f[DIR_PPP])[ktne ] =c0o1; - (D.f[DIR_MMP])[ktsw ] =c0o1; - (D.f[DIR_PMP])[ktse ] =c0o1; - (D.f[DIR_MPP])[ktnw ] =c0o1; - (D.f[DIR_PPM])[kbne ] =c0o1; - (D.f[DIR_MMM])[kbsw ] =c0o1; - (D.f[DIR_PMM])[kbse ] =c0o1; - (D.f[DIR_MPM])[kbnw ] =c0o1; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -__global__ void QPressDeviceFake27( - real* rhoBC, - real* DD, - int* k_Q, - int* k_N, - int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //////////////////////////////////////////////////////////////////////////////// - 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) - { - //////////////////////////////////////////////////////////////////////////////// - //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]; - //////////////////////////////////////////////////////////////////////////////// - //index1 - unsigned int K1QK = k_N[k]; - unsigned int k1zero= K1QK; - unsigned int k1e = K1QK; - unsigned int k1w = neighborX[K1QK]; - unsigned int k1n = K1QK; - unsigned int k1s = neighborY[K1QK]; - unsigned int k1t = K1QK; - unsigned int k1b = neighborZ[K1QK]; - unsigned int k1sw = neighborY[k1w]; - unsigned int k1ne = K1QK; - unsigned int k1se = k1s; - unsigned int k1nw = k1w; - unsigned int k1bw = neighborZ[k1w]; - unsigned int k1te = K1QK; - unsigned int k1be = k1b; - unsigned int k1tw = k1w; - unsigned int k1bs = neighborZ[k1s]; - unsigned int k1tn = K1QK; - unsigned int k1bn = k1b; - unsigned int k1ts = k1s; - unsigned int k1tse = k1s; - unsigned int k1bnw = k1bw; - unsigned int k1tnw = k1w; - unsigned int k1bse = k1bs; - unsigned int k1tsw = k1sw; - unsigned int k1bne = k1b; - unsigned int k1tne = K1QK; - unsigned int k1bsw = neighborZ[k1sw]; - //////////////////////////////////////////////////////////////////////////////// - Distributions27 D; - if (isEvenTimestep==false) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO, - f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW; - - f1_W = (D.f[DIR_P00])[k1e ]; - f1_E = (D.f[DIR_M00])[k1w ]; - f1_S = (D.f[DIR_0P0])[k1n ]; - f1_N = (D.f[DIR_0M0])[k1s ]; - f1_B = (D.f[DIR_00P])[k1t ]; - f1_T = (D.f[DIR_00M])[k1b ]; - f1_SW = (D.f[DIR_PP0])[k1ne ]; - f1_NE = (D.f[DIR_MM0])[k1sw ]; - f1_NW = (D.f[DIR_PM0])[k1se ]; - f1_SE = (D.f[DIR_MP0])[k1nw ]; - f1_BW = (D.f[DIR_P0P])[k1te ]; - f1_TE = (D.f[DIR_M0M])[k1bw ]; - f1_TW = (D.f[DIR_P0M])[k1be ]; - f1_BE = (D.f[DIR_M0P])[k1tw ]; - f1_BS = (D.f[DIR_0PP])[k1tn ]; - f1_TN = (D.f[DIR_0MM])[k1bs ]; - f1_TS = (D.f[DIR_0PM])[k1bn ]; - f1_BN = (D.f[DIR_0MP])[k1ts ]; - f1_ZERO = (D.f[DIR_000])[k1zero]; - f1_BSW = (D.f[DIR_PPP])[k1tne ]; - f1_BNE = (D.f[DIR_MMP])[k1tsw ]; - f1_BNW = (D.f[DIR_PMP])[k1tse ]; - f1_BSE = (D.f[DIR_MPP])[k1tnw ]; - f1_TSW = (D.f[DIR_PPM])[k1bne ]; - f1_TNE = (D.f[DIR_MMM])[k1bsw ]; - f1_TNW = (D.f[DIR_PMM])[k1bse ]; - f1_TSE = (D.f[DIR_MPM])[k1bnw ]; - - //////////////////////////////////////////////////////////////////////////////// - real vx1, vx2, vx3; - vx1 = ((f1_TSE - f1_BNW) - (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) - (f1_TSW - f1_BNE)) + - ((f1_BE - f1_TW) + (f1_TE - f1_BW)) + ((f1_SE - f1_NW) + (f1_NE - f1_SW)) + - (f1_E - f1_W); - - - vx2 = (-(f1_TSE - f1_BNW) + (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) - (f1_TSW - f1_BNE)) + - ((f1_BN - f1_TS) + (f1_TN - f1_BS)) + (-(f1_SE - f1_NW) + (f1_NE - f1_SW)) + - (f1_N - f1_S); - - vx3 = ((f1_TSE - f1_BNW) + (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) + (f1_TSW - f1_BNE)) + - (-(f1_BN - f1_TS) + (f1_TN - f1_BS)) + ((f1_TE - f1_BW) - (f1_BE - f1_TW)) + - (f1_T - f1_B); - - real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - ////////////////////////////////////////////////////////////////////////// - real drho1 = f1_ZERO+f1_E+f1_W+f1_N+f1_S+f1_T+f1_B+f1_NE+f1_SW+f1_SE+f1_NW+f1_TE+f1_BW+f1_BE+f1_TW+f1_TN+f1_BS+f1_BN+f1_TS+ - f1_TNE+f1_TSW+f1_TSE+f1_TNW+f1_BNE+f1_BSW+f1_BSE+f1_BNW; - - //drho1 = (drho1 + rhoBC[k])/2.f; - drho1 = drho1 - rhoBC[k]; - - __syncthreads(); - - (D.f[DIR_P00])[ke ] = c2o27* (rhoBC[k]+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - (D.f[DIR_M00])[kw ] = c2o27* (rhoBC[k]+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - (D.f[DIR_0P0])[kn ] = c2o27* (rhoBC[k]+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - (D.f[DIR_0M0])[ks ] = c2o27* (rhoBC[k]+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - (D.f[DIR_00P])[kt ] = c2o27* (rhoBC[k]+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - (D.f[DIR_00M])[kb ] = c2o27* (rhoBC[k]+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - (D.f[DIR_PP0])[kne ] = f1_SW -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_MM0])[ksw ] = f1_NE -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_PM0])[kse ] = f1_NW -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_MP0])[knw ] = f1_SE -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_P0P])[kte ] = f1_BW -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_M0M])[kbw ] = f1_TE -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_P0M])[kbe ] = f1_TW -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_M0P])[ktw ] = f1_BE -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_0PP])[ktn ] = f1_BS -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_0MM])[kbs ] = f1_TN -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_0PM])[kbn ] = f1_TS -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_0MP])[kts ] = f1_BN -c1o54*drho1; // c1o100; // zero; // - (D.f[DIR_000])[kzero] = f1_ZERO-c8o27*drho1; // c1o100; // zero; // - (D.f[DIR_PPP])[ktne ] = f1_BSW -c1o216*drho1; // c1o100; // zero; // - (D.f[DIR_MMP])[ktsw ] = f1_BNE -c1o216*drho1; // c1o100; // zero; // - (D.f[DIR_PMP])[ktse ] = f1_BNW -c1o216*drho1; // c1o100; // zero; // - (D.f[DIR_MPP])[ktnw ] = f1_BSE -c1o216*drho1; // c1o100; // zero; // - (D.f[DIR_PPM])[kbne ] = f1_TSW -c1o216*drho1; // c1o100; // zero; // - (D.f[DIR_MMM])[kbsw ] = f1_TNE -c1o216*drho1; // c1o100; // zero; // - (D.f[DIR_PMM])[kbse ] = f1_TNW -c1o216*drho1; // c1o100; // zero; // - (D.f[DIR_MPM])[kbnw ] = f1_TSE -c1o216*drho1; // c1o100; // zero; // - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////// -__global__ void QPressDevice27_IntBB( - real* rho, - real* DD, - 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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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 VeloX = vx[k]; - //real VeloY = vy[k]; - //real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny) - //////////////////////////////////////////////////////////////////////////////// - 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * 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[DIR_P00])[ke ]; - f_E = (D.f[DIR_M00])[kw ]; - f_S = (D.f[DIR_0P0])[kn ]; - f_N = (D.f[DIR_0M0])[ks ]; - f_B = (D.f[DIR_00P])[kt ]; - f_T = (D.f[DIR_00M])[kb ]; - f_SW = (D.f[DIR_PP0])[kne ]; - f_NE = (D.f[DIR_MM0])[ksw ]; - f_NW = (D.f[DIR_PM0])[kse ]; - f_SE = (D.f[DIR_MP0])[knw ]; - f_BW = (D.f[DIR_P0P])[kte ]; - f_TE = (D.f[DIR_M0M])[kbw ]; - f_TW = (D.f[DIR_P0M])[kbe ]; - f_BE = (D.f[DIR_M0P])[ktw ]; - f_BS = (D.f[DIR_0PP])[ktn ]; - f_TN = (D.f[DIR_0MM])[kbs ]; - f_TS = (D.f[DIR_0PM])[kbn ]; - f_BN = (D.f[DIR_0MP])[kts ]; - f_BSW = (D.f[DIR_PPP])[ktne ]; - f_BNE = (D.f[DIR_MMP])[ktsw ]; - f_BNW = (D.f[DIR_PMP])[ktse ]; - f_BSE = (D.f[DIR_MPP])[ktnw ]; - f_TSW = (D.f[DIR_PPM])[kbne ]; - f_TNE = (D.f[DIR_MMM])[kbsw ]; - f_TNW = (D.f[DIR_PMM])[kbse ]; - f_TSE = (D.f[DIR_MPM])[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 + ((D.f[DIR_000])[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); - - ////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[DIR_000])[k]=c1o10; - real rhoDiff = drho - rho[k]; - real VeloX = vx1; - real VeloY = vx2; - real VeloZ = vx3; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - q = q_dirE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho+c9o2*( vx1 )*( vx1 )-cu_sq); - (D.f[DIR_M00])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c2o27*(rhoDiff + c6o1*( VeloX )))/(c1o1+q); - } - - q = q_dirW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho+c9o2*(-vx1 )*(-vx1 )-cu_sq); - (D.f[DIR_P00])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c2o27*(rhoDiff + c6o1*(-VeloX )))/(c1o1+q); - } - - q = q_dirN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho+c9o2*( vx2 )*( vx2 )-cu_sq); - (D.f[DIR_0M0])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c2o27*(rhoDiff + c6o1*( VeloY )))/(c1o1+q); - } - - q = q_dirS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho+c9o2*( -vx2 )*( -vx2 )-cu_sq); - (D.f[DIR_0P0])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c2o27*(rhoDiff + c6o1*(-VeloY )))/(c1o1+q); - } - - q = q_dirT[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho+c9o2*( vx3)*( vx3)-cu_sq); - (D.f[DIR_00M])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c2o27*(rhoDiff + c6o1*( VeloZ )))/(c1o1+q); - } - - q = q_dirB[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho+c9o2*( -vx3)*( -vx3)-cu_sq); - (D.f[DIR_00P])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c2o27*(rhoDiff + c6o1*(-VeloZ )))/(c1o1+q); - } - - q = q_dirNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - (D.f[DIR_MM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c1o54*(rhoDiff + c6o1*(VeloX+VeloY)))/(c1o1+q); - } - - q = q_dirSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - (D.f[DIR_PP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c1o54*(rhoDiff + c6o1*(-VeloX-VeloY)))/(c1o1+q); - } - - q = q_dirSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - (D.f[DIR_MP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c1o54*(rhoDiff + c6o1*( VeloX-VeloY)))/(c1o1+q); - } - - q = q_dirNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - (D.f[DIR_PM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c1o54*(rhoDiff + c6o1*(-VeloX+VeloY)))/(c1o1+q); - } - - q = q_dirTE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - (D.f[DIR_M0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c1o54*(rhoDiff + c6o1*( VeloX+VeloZ)))/(c1o1+q); - } - - q = q_dirBW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - (D.f[DIR_P0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c1o54*(rhoDiff + c6o1*(-VeloX-VeloZ)))/(c1o1+q); - } - - q = q_dirBE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - (D.f[DIR_M0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c1o54*(rhoDiff + c6o1*( VeloX-VeloZ)))/(c1o1+q); - } - - q = q_dirTW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - (D.f[DIR_P0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c1o54*(rhoDiff + c6o1*(-VeloX+VeloZ)))/(c1o1+q); - } - - q = q_dirTN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - (D.f[DIR_0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c1o54*(rhoDiff + c6o1*( VeloY+VeloZ)))/(c1o1+q); - } - - q = q_dirBS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - (D.f[DIR_0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c1o54*(rhoDiff + c6o1*( -VeloY-VeloZ)))/(c1o1+q); - } - - q = q_dirBN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - (D.f[DIR_0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c1o54*(rhoDiff + c6o1*( VeloY-VeloZ)))/(c1o1+q); - } - - q = q_dirTS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - (D.f[DIR_0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c1o54*(rhoDiff + c6o1*( -VeloY+VeloZ)))/(c1o1+q); - } - - q = q_dirTNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - (D.f[DIR_MMM])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c1o216*(rhoDiff + c6o1*( VeloX+VeloY+VeloZ)))/(c1o1+q); - } - - q = q_dirBSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - (D.f[DIR_PPP])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c1o216*(rhoDiff + c6o1*(-VeloX-VeloY-VeloZ)))/(c1o1+q); - } - - q = q_dirBNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - (D.f[DIR_MMP])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c1o216*(rhoDiff + c6o1*( VeloX+VeloY-VeloZ)))/(c1o1+q); - } - - q = q_dirTSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - (D.f[DIR_PPM])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c1o216*(rhoDiff + c6o1*(-VeloX-VeloY+VeloZ)))/(c1o1+q); - } - - q = q_dirTSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - (D.f[DIR_MPM])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c1o216*(rhoDiff + c6o1*( VeloX-VeloY+VeloZ)))/(c1o1+q); - } - - q = q_dirBNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - (D.f[DIR_PMP])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c1o216*(rhoDiff + c6o1*(-VeloX+VeloY-VeloZ)))/(c1o1+q); - } - - q = q_dirBSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - (D.f[DIR_MPP])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c1o216*(rhoDiff + c6o1*( VeloX-VeloY-VeloZ)))/(c1o1+q); - } - - q = q_dirTNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - (D.f[DIR_PMM])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c1o216*(rhoDiff + c6o1*(-VeloX+VeloY+VeloZ)))/(c1o1+q); - } - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - diff --git a/src/gpu/VirtualFluids_GPU/GPU/SchlafferBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/SchlafferBCs27.cu deleted file mode 100644 index 70e938db5df2bae442034ce0303081e8b175e5f6..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/GPU/SchlafferBCs27.cu +++ /dev/null @@ -1,590 +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; - -// TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/29 -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -__global__ void PressSchlaff27(real* rhoBC, - real* DD, - real* vx0, - real* vy0, - real* vz0, - real* deltaVz0, - int* k_Q, - int* k_N, - int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //////////////////////////////////////////////////////////////////////////////// - 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) - { - //////////////////////////////////////////////////////////////////////////////// - //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]; - //////////////////////////////////////////////////////////////////////////////// - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO,f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW; - - f1_E = (D.f[DIR_P00])[ke ]; - f1_W = (D.f[DIR_M00])[kw ]; - f1_N = (D.f[DIR_0P0])[kn ]; - f1_S = (D.f[DIR_0M0])[ks ]; - f1_T = (D.f[DIR_00P])[kt ]; - f1_B = (D.f[DIR_00M])[kb ]; - f1_NE = (D.f[DIR_PP0])[kne ]; - f1_SW = (D.f[DIR_MM0])[ksw ]; - f1_SE = (D.f[DIR_PM0])[kse ]; - f1_NW = (D.f[DIR_MP0])[knw ]; - f1_TE = (D.f[DIR_P0P])[kte ]; - f1_BW = (D.f[DIR_M0M])[kbw ]; - f1_BE = (D.f[DIR_P0M])[kbe ]; - f1_TW = (D.f[DIR_M0P])[ktw ]; - f1_TN = (D.f[DIR_0PP])[ktn ]; - f1_BS = (D.f[DIR_0MM])[kbs ]; - f1_BN = (D.f[DIR_0PM])[kbn ]; - f1_TS = (D.f[DIR_0MP])[kts ]; - f1_ZERO = (D.f[DIR_000])[kzero]; - f1_TNE = (D.f[DIR_PPP])[ktne ]; - f1_TSW = (D.f[DIR_MMP])[ktsw ]; - f1_TSE = (D.f[DIR_PMP])[ktse ]; - f1_TNW = (D.f[DIR_MPP])[ktnw ]; - f1_BNE = (D.f[DIR_PPM])[kbne ]; - f1_BSW = (D.f[DIR_MMM])[kbsw ]; - f1_BSE = (D.f[DIR_PMM])[kbse ]; - f1_BNW = (D.f[DIR_MPM])[kbnw ]; - ////////////////////////////////////////////////////////////////////////// - real cs = c1o1/sqrt(c3o1); - real csp1 = cs + c1o1; - real csp1Sq = (c1o1 + cs)*(c1o1 + cs); - real relFac = c21o20; // 0.9...1.0 - ////////////////////////////////////////////////////////////////////////// - // For adaption: - // Pressure limits with rho0 = 1: - // 2.2e-10 ~ 0.94 dB - // 6.2e-10 ~ 9.9 dB - // 6.2e-9 ~ 29.9 dB - // 2.0e-7 ~ 60.1 dB /Vel - // 2.0e-5 ~ 100.1 dB /press - const double dPlimit = Op0000002; - const double dRlimit = dPlimit * c3o1;// three = c1oCs2; - const double uSlimit = dRlimit * c1o1;// one = c1oRho0; - ////////////////////////////////////////////////////////////////////////// - real VX = vx0[k]; - real VY = vy0[k]; - real VZ = vz0[k]; - ////////////////////////////////////////////////////////////////////////// - - real temp = c2o1*(f1_TNE + f1_TSE + f1_TSW + f1_TNW) + c2o1*(f1_TE + f1_TW + f1_TN + f1_TS) + f1_NE + f1_SW + f1_SE + f1_NW + c2o1*f1_T + f1_E + f1_W + f1_N + f1_S + f1_ZERO; - - real vs_z = relFac * (VZ+cs) * ( csp1 - sqrt(csp1Sq + c2o1*VZ - c2o1*temp) ); //old = relFac * cs * ( csp1 - sqrt(csp1Sq + two*VZ - two*temp) ); - - // 3. Compute density of compensated velocity: - real tempDeltaV = deltaVz0[k]; - real rholoc = temp - c1o1 * (VZ + tempDeltaV + vs_z); - - // 4. Compute density deviation: - real drho = rholoc - rhoBC[k]; - - // 5. Adapt Speed: - real dv = tempDeltaV + vs_z; - - if( drho > dRlimit) { - VZ += dv + uSlimit; - tempDeltaV += uSlimit; - } - else if( drho < -dRlimit) { - VZ += dv - uSlimit; - tempDeltaV -= uSlimit; - } - else { - VZ += dv + drho; - tempDeltaV += drho; - } - - //VZ = vz0[k] + vs_z; - // 6. Set unknown distributions: - f1_B = f1_T - c4o9 * VZ; - f1_BW = f1_TE - c1o9 * (VX + VZ); - f1_BE = f1_TW + c1o9 * (VX - VZ); - f1_BS = f1_TN - c1o9 * (VY + VZ); - f1_BN = f1_TS + c1o9 * (VY - VZ); - f1_BSW = f1_TNE - c1o36 * (VX + VY + VZ); - f1_BNW = f1_TSE - c1o36 * (VX - VY + VZ); - f1_BNE = f1_TSW + c1o36 * (VX + VY - VZ); - f1_BSE = f1_TNW + c1o36 * (VX - VY - VZ); - - deltaVz0[k] = tempDeltaV; - - (D.f[DIR_00M])[kb ] = f1_B ; - (D.f[DIR_M0M])[kbw ] = f1_BW ; - (D.f[DIR_P0M])[kbe ] = f1_BE ; - (D.f[DIR_0MM])[kbs ] = f1_BS ; - (D.f[DIR_0PM])[kbn ] = f1_BN ; - (D.f[DIR_PPM])[kbne ] = f1_BNE ; - (D.f[DIR_MMM])[kbsw ] = f1_BSW ; - (D.f[DIR_PMM])[kbse ] = f1_BSE ; - (D.f[DIR_MPM])[kbnw ] = f1_BNW ; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/29 -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -__global__ void VelSchlaff27( int t, - real* DD, - real* vz0, - real* deltaVz0, - int* k_Q, - int* k_N, - int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //////////////////////////////////////////////////////////////////////////////// - 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) - { - //////////////////////////////////////////////////////////////////////////////// - //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]; - //////////////////////////////////////////////////////////////////////////////// - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO, - f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW; - - f1_E = (D.f[DIR_P00])[ke ]; - f1_W = (D.f[DIR_M00])[kw ]; - f1_N = (D.f[DIR_0P0])[kn ]; - f1_S = (D.f[DIR_0M0])[ks ]; - f1_T = (D.f[DIR_00P])[kt ]; - f1_B = (D.f[DIR_00M])[kb ]; - f1_NE = (D.f[DIR_PP0])[kne ]; - f1_SW = (D.f[DIR_MM0])[ksw ]; - f1_SE = (D.f[DIR_PM0])[kse ]; - f1_NW = (D.f[DIR_MP0])[knw ]; - f1_TE = (D.f[DIR_P0P])[kte ]; - f1_BW = (D.f[DIR_M0M])[kbw ]; - f1_BE = (D.f[DIR_P0M])[kbe ]; - f1_TW = (D.f[DIR_M0P])[ktw ]; - f1_TN = (D.f[DIR_0PP])[ktn ]; - f1_BS = (D.f[DIR_0MM])[kbs ]; - f1_BN = (D.f[DIR_0PM])[kbn ]; - f1_TS = (D.f[DIR_0MP])[kts ]; - f1_ZERO = (D.f[DIR_000])[kzero]; - f1_TNE = (D.f[DIR_PPP])[ktne ]; - f1_TSW = (D.f[DIR_MMP])[ktsw ]; - f1_TSE = (D.f[DIR_PMP])[ktse ]; - f1_TNW = (D.f[DIR_MPP])[ktnw ]; - f1_BNE = (D.f[DIR_PPM])[kbne ]; - f1_BSW = (D.f[DIR_MMM])[kbsw ]; - f1_BSE = (D.f[DIR_PMM])[kbse ]; - f1_BNW = (D.f[DIR_MPM])[kbnw ]; - //f1_W = (D.f[DIR_P00])[ke ]; - //f1_E = (D.f[DIR_M00])[kw ]; - //f1_S = (D.f[DIR_0P0])[kn ]; - //f1_N = (D.f[DIR_0M0])[ks ]; - //f1_B = (D.f[DIR_00P])[kt ]; - //f1_T = (D.f[DIR_00M])[kb ]; - //f1_SW = (D.f[DIR_PP0])[kne ]; - //f1_NE = (D.f[DIR_MM0])[ksw ]; - //f1_NW = (D.f[DIR_PM0])[kse ]; - //f1_SE = (D.f[DIR_MP0])[knw ]; - //f1_BW = (D.f[DIR_P0P])[kte ]; - //f1_TE = (D.f[DIR_M0M])[kbw ]; - //f1_TW = (D.f[DIR_P0M])[kbe ]; - //f1_BE = (D.f[DIR_M0P])[ktw ]; - //f1_BS = (D.f[DIR_0PP])[ktn ]; - //f1_TN = (D.f[DIR_0MM])[kbs ]; - //f1_TS = (D.f[DIR_0PM])[kbn ]; - //f1_BN = (D.f[DIR_0MP])[kts ]; - //f1_ZERO = (D.f[DIR_000])[kzero]; - //f1_BSW = (D.f[DIR_PPP])[ktne ]; - //f1_BNE = (D.f[DIR_MMP])[ktsw ]; - //f1_BNW = (D.f[DIR_PMP])[ktse ]; - //f1_BSE = (D.f[DIR_MPP])[ktnw ]; - //f1_TSW = (D.f[DIR_PPM])[kbne ]; - //f1_TNE = (D.f[DIR_MMM])[kbsw ]; - //f1_TNW = (D.f[DIR_PMM])[kbse ]; - //f1_TSE = (D.f[DIR_MPM])[kbnw ]; - ////////////////////////////////////////////////////////////////////////// - real cs = c1o1/sqrt(c3o1); - real csp1 = cs + c1o1; - real csp1Sq = (c1o1 + cs)*(c1o1 + cs); - real relFac = c19o20; // 0.9...1.0 - ////////////////////////////////////////////////////////////////////////// - // For adaption: - // Pressure limits with rho0 = 1: - // 2.2e-10 ~ 0.94 dB - // 6.2e-10 ~ 9.9 dB - // 6.2e-9 ~ 29.9 dB - // 2.0e-7 ~ 60.1 dB /Vel - // 2.0e-5 ~ 100.1 dB /press - real uSlimit = Op0000002; - ////////////////////////////////////////////////////////////////////////// - real VX = c0o1; - real VY = c0o1; - real VZ = vz0[k]; - ////////////////////////////////////////////////////////////////////////// - real temp = f1_ZERO + f1_E + f1_W + f1_N + f1_S + f1_NE + f1_SW + f1_SE + f1_NW + c2o1*(f1_B + f1_BE + f1_BW + f1_BN + f1_BS + f1_BNE + f1_BSE + f1_BSW + f1_BNW); - //real temp = f1_ZERO + f1_E + f1_W + f1_N + f1_S + f1_NE + f1_SW + f1_SE + f1_NW + two*(f1_T + f1_TE + f1_TW + f1_TN + f1_TS + f1_TNE + f1_TSE + f1_TSW + f1_TNW); - ////real temp2= c1mcsSq + two*VZ - two*temp; - real vs_z; - //if (t < 5) - //{ - // vs_z = zero; - //} - //else - //{ - vs_z = relFac * (cs-VZ) * ( sqrt(csp1Sq - c2o1*VZ - c2o1*temp) - csp1 ); //old = relFac * cs * ( sqrt(csp1Sq - two*VZ - two*temp) - csp1 ); - //} - - // 3. Adapt Speed: - real tempDeltaV = deltaVz0[k]; - real dv = tempDeltaV + vs_z; - - if( dv > uSlimit) { - VZ += dv - uSlimit; - tempDeltaV -= uSlimit; - } - else if( dv < -uSlimit) { - VZ += dv + uSlimit; - tempDeltaV += uSlimit; - } - else { - tempDeltaV = -vs_z; - } - - //VZ = vz0[k]+vs_z; - // 4. Set unknown distributions: - //f1_B = f1_T - c4o9 * VZ; - //f1_BW = f1_TE - c1o9 * (VX + VZ); - //f1_BE = f1_TW + c1o9 * (VX - VZ); - //f1_BS = f1_TN - c1o9 * (VY + VZ); - //f1_BN = f1_TS + c1o9 * (VY - VZ); - //f1_BSW = f1_TNE - c1o36 * (VX + VY + VZ); - //f1_BNW = f1_TSE - c1o36 * (VX - VY + VZ); - //f1_BNE = f1_TSW + c1o36 * (VX + VY - VZ); - //f1_BSE = f1_TNW + c1o36 * (VX - VY - VZ); - - f1_T = f1_B + c4o9 * VZ; - f1_TE = f1_BW + c1o9 * (VX + VZ); - f1_TW = f1_BE - c1o9 * (VX - VZ); - f1_TN = f1_BS + c1o9 * (VY + VZ); - f1_TS = f1_BN - c1o9 * (VY - VZ); - f1_TNE = f1_BSW + c1o36 * (VX + VY + VZ); - f1_TSE = f1_BNW + c1o36 * (VX - VY + VZ); - f1_TSW = f1_BNE - c1o36 * (VX + VY - VZ); - f1_TNW = f1_BSE - c1o36 * (VX - VY - VZ); - - deltaVz0[k] = tempDeltaV; - (D.f[DIR_00P])[kt ] = f1_T ; - (D.f[DIR_P0P])[kte ] = f1_TE ; - (D.f[DIR_M0P])[ktw ] = f1_TW ; - (D.f[DIR_0PP])[ktn ] = f1_TN ; - (D.f[DIR_0MP])[kts ] = f1_TS ; - (D.f[DIR_PPP])[ktne ] = f1_TNE; - (D.f[DIR_MMP])[ktsw ] = f1_TSW; - (D.f[DIR_PMP])[ktse ] = f1_TSE; - (D.f[DIR_MPP])[ktnw ] = f1_TNW; - - //(D.f[DIR_00M])[kb ] = f1_B ; - //(D.f[DIR_M0M])[kbw ] = f1_BW ; - //(D.f[DIR_P0M])[kbe ] = f1_BE ; - //(D.f[DIR_0MM])[kbs ] = f1_BS ; - //(D.f[DIR_0PM])[kbn ] = f1_BN ; - //(D.f[DIR_PPM])[kbne ] = f1_BNE ; - //(D.f[DIR_MMM])[kbsw ] = f1_BSW ; - //(D.f[DIR_PMM])[kbse ] = f1_BSE ; - //(D.f[DIR_MPM])[kbnw ] = f1_BNW ; - - - //(D.f[DIR_00P])[kt ] = f1_B ; - //(D.f[DIR_P0P])[kte ] = f1_BW ; - //(D.f[DIR_M0P])[ktw ] = f1_BE ; - //(D.f[DIR_0PP])[ktn ] = f1_BS ; - //(D.f[DIR_0MP])[kts ] = f1_BN ; - //(D.f[DIR_PPP])[ktne ] = f1_BSW; - //(D.f[DIR_MMP])[ktsw ] = f1_BNE; - //(D.f[DIR_PMP])[ktse ] = f1_BNW; - //(D.f[DIR_MPP])[ktnw ] = f1_BSE; - - //(D.f[DIR_P00])[ke ] = f1_W -c2over27*drho1; - //(D.f[DIR_M00])[kw ] = f1_E -c2over27*drho1; - //(D.f[DIR_0P0])[kn ] = f1_S -c2over27*drho1; - //(D.f[DIR_0M0])[ks ] = f1_N -c2over27*drho1; - //(D.f[DIR_00P])[kt ] = f1_B -c2over27*drho1; - //(D.f[DIR_00M])[kb ] = f1_T -c2over27*drho1; - //(D.f[DIR_PP0])[kne ] = f1_SW -c1over54*drho1; - //(D.f[DIR_MM0])[ksw ] = f1_NE -c1over54*drho1; - //(D.f[DIR_PM0])[kse ] = f1_NW -c1over54*drho1; - //(D.f[DIR_MP0])[knw ] = f1_SE -c1over54*drho1; - //(D.f[DIR_P0P])[kte ] = f1_BW -c1over54*drho1; - //(D.f[DIR_M0M])[kbw ] = f1_TE -c1over54*drho1; - //(D.f[DIR_P0M])[kbe ] = f1_TW -c1over54*drho1; - //(D.f[DIR_M0P])[ktw ] = f1_BE -c1over54*drho1; - //(D.f[DIR_0PP])[ktn ] = f1_BS -c1over54*drho1; - //(D.f[DIR_0MM])[kbs ] = f1_TN -c1over54*drho1; - //(D.f[DIR_0PM])[kbn ] = f1_TS -c1over54*drho1; - //(D.f[DIR_0MP])[kts ] = f1_BN -c1over54*drho1; - //(D.f[DIR_000])[kzero] = f1_ZERO-c8over27*drho1; - //(D.f[DIR_PPP])[ktne ] = f1_BSW -c1over216*drho1; - //(D.f[DIR_MMP])[ktsw ] = f1_BNE -c1over216*drho1; - //(D.f[DIR_PMP])[ktse ] = f1_BNW -c1over216*drho1; - //(D.f[DIR_MPP])[ktnw ] = f1_BSE -c1over216*drho1; - //(D.f[DIR_PPM])[kbne ] = f1_TSW -c1over216*drho1; - //(D.f[DIR_MMM])[kbsw ] = f1_TNE -c1over216*drho1; - //(D.f[DIR_PMM])[kbse ] = f1_TNW -c1over216*drho1; - //(D.f[DIR_MPM])[kbnw ] = f1_TSE -c1over216*drho1; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - diff --git a/src/gpu/VirtualFluids_GPU/GPU/SetForcing27.cu b/src/gpu/VirtualFluids_GPU/GPU/SetForcing27.cu deleted file mode 100644 index d847d00193f68127927e2f3fa3fbf1eda7f9a736..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/GPU/SetForcing27.cu +++ /dev/null @@ -1,174 +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 GetVeloforForcing27( real* DD, - int* bcIndex, - int nonAtBC, - real* Vx, - real* Vy, - real* Vz, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - Distributions27 D; - if (isEvenTimestep==false) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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 < nonAtBC) - { - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int KQK = bcIndex[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 mfcbb = (D.f[DIR_P00])[ke ]; - real mfabb = (D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[kn ]; - real mfbab = (D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[kt ]; - real mfbba = (D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[kne ]; - real mfaab = (D.f[DIR_MM0])[ksw ]; - real mfcab = (D.f[DIR_PM0])[kse ]; - real mfacb = (D.f[DIR_MP0])[knw ]; - real mfcbc = (D.f[DIR_P0P])[kte ]; - real mfaba = (D.f[DIR_M0M])[kbw ]; - real mfcba = (D.f[DIR_P0M])[kbe ]; - real mfabc = (D.f[DIR_M0P])[ktw ]; - real mfbcc = (D.f[DIR_0PP])[ktn ]; - real mfbaa = (D.f[DIR_0MM])[kbs ]; - real mfbca = (D.f[DIR_0PM])[kbn ]; - real mfbac = (D.f[DIR_0MP])[kts ]; - real mfbbb = (D.f[DIR_000])[kzero]; - real mfccc = (D.f[DIR_PPP])[ktne ]; - real mfaac = (D.f[DIR_MMP])[ktsw ]; - real mfcac = (D.f[DIR_PMP])[ktse ]; - real mfacc = (D.f[DIR_MPP])[ktnw ]; - real mfcca = (D.f[DIR_PPM])[kbne ]; - real mfaaa = (D.f[DIR_MMM])[kbsw ]; - real mfcaa = (D.f[DIR_PMM])[kbse ]; - real mfaca = (D.f[DIR_MPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////////// - real rho = (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + - mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb + - mfabb+mfcbb + mfbab+mfbcb + mfbba+mfbbc + mfbbb + c1o1);//!!!!Achtung + one - //////////////////////////////////////////////////////////////////////////////////// - real vx =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + - (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + - (mfcbb-mfabb))/ rho; - real vy =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + - (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + - (mfbcb-mfbab)) / rho; - real vz =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + - (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + - (mfbbc-mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - Vx[k] = vx; - Vy[k] = vy; - Vz[k] = vz; - //////////////////////////////////////////////////////////////////////////////////// - } -} - diff --git a/src/gpu/VirtualFluids_GPU/GPU/ThinWallBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/ThinWallBCs27.cu deleted file mode 100644 index f76b31c768553aed46fd640d9cdace8ba753b6b8..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/GPU/ThinWallBCs27.cu +++ /dev/null @@ -1,1137 +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 QVelDeviceCompThinWallsPartOne27( - real* vx, - real* vy, - real* vz, - real* DD, - int* k_Q, - real* QQ, - uint numberOfBCnodes, - real om1, - uint* neighborX, - uint* neighborY, - uint* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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 VeloX = vx[k]; - real VeloY = vy[k]; - real VeloZ = vz[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 = &QQ[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes]; - //////////////////////////////////////////////////////////////////////////////// - //index - uint KQK = k_Q[k]; - uint kzero= KQK; - uint ke = KQK; - uint kw = neighborX[KQK]; - uint kn = KQK; - uint ks = neighborY[KQK]; - uint kt = KQK; - uint kb = neighborZ[KQK]; - uint ksw = neighborY[kw]; - uint kne = KQK; - uint kse = ks; - uint knw = kw; - uint kbw = neighborZ[kw]; - uint kte = KQK; - uint kbe = kb; - uint ktw = kw; - uint kbs = neighborZ[ks]; - uint ktn = KQK; - uint kbn = kb; - uint kts = ks; - uint ktse = ks; - uint kbnw = kbw; - uint ktnw = kw; - uint kbse = kbs; - uint ktsw = ksw; - uint kbne = kb; - uint ktne = KQK; - uint 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[DIR_P00])[ke ]; - f_E = (D.f[DIR_M00])[kw ]; - f_S = (D.f[DIR_0P0])[kn ]; - f_N = (D.f[DIR_0M0])[ks ]; - f_B = (D.f[DIR_00P])[kt ]; - f_T = (D.f[DIR_00M])[kb ]; - f_SW = (D.f[DIR_PP0])[kne ]; - f_NE = (D.f[DIR_MM0])[ksw ]; - f_NW = (D.f[DIR_PM0])[kse ]; - f_SE = (D.f[DIR_MP0])[knw ]; - f_BW = (D.f[DIR_P0P])[kte ]; - f_TE = (D.f[DIR_M0M])[kbw ]; - f_TW = (D.f[DIR_P0M])[kbe ]; - f_BE = (D.f[DIR_M0P])[ktw ]; - f_BS = (D.f[DIR_0PP])[ktn ]; - f_TN = (D.f[DIR_0MM])[kbs ]; - f_TS = (D.f[DIR_0PM])[kbn ]; - f_BN = (D.f[DIR_0MP])[kts ]; - f_BSW = (D.f[DIR_PPP])[ktne ]; - f_BNE = (D.f[DIR_MMP])[ktsw ]; - f_BNW = (D.f[DIR_PMP])[ktse ]; - f_BSE = (D.f[DIR_MPP])[ktnw ]; - f_TSW = (D.f[DIR_PPM])[kbne ]; - f_TNE = (D.f[DIR_MMM])[kbsw ]; - f_TNW = (D.f[DIR_PMM])[kbse ]; - f_TSE = (D.f[DIR_MPM])[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 + ((D.f[DIR_000])[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); - - ////////////////////////////////////////////////////////////////////////// - - q = q_dirE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho + c9o2 * ( vx1 )*( vx1 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M00])[kw] = (c1o1 - q) / (c1o1 + q)*(f_E - f_W + (f_E + f_W - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_E + f_W) - c6o1*c2o27*(VeloX)) / (c1o1 + q); - } - - q = q_dirW[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c2o27* (drho + c9o2 * (-vx1)*(-vx1) * (c1o1 + drho) - cu_sq); - (D.f[DIR_P00])[ke] = (c1o1 - q) / (c1o1 + q)*(f_W - f_E + (f_W + f_E - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_W + f_E) - c6o1*c2o27*(-VeloX)) / (c1o1 + q); - } - - q = q_dirN[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c2o27* (drho + c9o2 * (vx2)*(vx2) * (c1o1 + drho) - cu_sq); - (D.f[DIR_0M0])[ks] = (c1o1 - q) / (c1o1 + q)*(f_N - f_S + (f_N + f_S - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_N + f_S) - c6o1*c2o27*(VeloY)) / (c1o1 + q); - } - - q = q_dirS[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c2o27* (drho + c9o2 * (-vx2)*(-vx2) * (c1o1 + drho) - cu_sq); - (D.f[DIR_0P0])[kn] = (c1o1 - q) / (c1o1 + q)*(f_S - f_N + (f_S + f_N - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_S + f_N) - c6o1*c2o27*(-VeloY)) / (c1o1 + q); - } - - q = q_dirT[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c2o27* (drho + c9o2 * (vx3)*(vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_00M])[kb] = (c1o1 - q) / (c1o1 + q)*(f_T - f_B + (f_T + f_B - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_T + f_B) - c6o1*c2o27*(VeloZ)) / (c1o1 + q); - } - - q = q_dirB[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c2o27* (drho + c9o2 * (-vx3)*(-vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_00P])[kt] = (c1o1 - q) / (c1o1 + q)*(f_B - f_T + (f_B + f_T - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_B + f_T) - c6o1*c2o27*(-VeloZ)) / (c1o1 + q); - } - - q = q_dirNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho + c9o2 * ( vx1+vx2 )*( vx1+vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*( VeloX+VeloY))/(c1o1+q); - } - - q = q_dirSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho + c9o2 * (-vx1-vx2 )*(-vx1-vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q); - } - - q = q_dirSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho + c9o2 * ( vx1-vx2 )*( vx1-vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q); - } - - q = q_dirNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho + c9o2 * (-vx1+vx2 )*(-vx1+vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q); - } - - q = q_dirTE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho + c9o2 * ( vx1 +vx3)*( vx1 +vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q); - } - - q = q_dirBW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho + c9o2 * (-vx1 -vx3)*(-vx1 -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q); - } - - q = q_dirBE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho + c9o2 * ( vx1 -vx3)*( vx1 -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q); - } - - q = q_dirTW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho + c9o2 * (-vx1 +vx3)*(-vx1 +vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q); - } - - q = q_dirTN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho + c9o2 * ( vx2+vx3)*( vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q); - } - - q = q_dirBS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho + c9o2 * ( -vx2-vx3)*( -vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*(-VeloY-VeloZ))/(c1o1+q); - } - - q = q_dirBN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho + c9o2 * ( vx2-vx3)*( vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q); - } - - q = q_dirTS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho + c9o2 * ( -vx2+vx3)*( -vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*(-VeloY+VeloZ))/(c1o1+q); - } - - q = q_dirTNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho + c9o2 * ( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MMM])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q); - } - - q = q_dirBSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho + c9o2 * (-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PPP])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q); - } - - q = q_dirBNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho + c9o2 * ( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MMP])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q); - } - - q = q_dirTSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho + c9o2 * (-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PPM])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q); - } - - q = q_dirTSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho + c9o2 * ( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MPM])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q); - } - - q = q_dirBNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho + c9o2 * (-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PMP])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q); - } - - q = q_dirBSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho + c9o2 * ( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MPP])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q); - } - - q = q_dirTNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho + c9o2 * (-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PMM])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q); - } - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QDeviceCompThinWallsPartOne27( - real* DD, - 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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * 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[DIR_P00])[ke]; - f_E = (D.f[DIR_M00])[kw]; - f_S = (D.f[DIR_0P0])[kn]; - f_N = (D.f[DIR_0M0])[ks]; - f_B = (D.f[DIR_00P])[kt]; - f_T = (D.f[DIR_00M])[kb]; - f_SW = (D.f[DIR_PP0])[kne]; - f_NE = (D.f[DIR_MM0])[ksw]; - f_NW = (D.f[DIR_PM0])[kse]; - f_SE = (D.f[DIR_MP0])[knw]; - f_BW = (D.f[DIR_P0P])[kte]; - f_TE = (D.f[DIR_M0M])[kbw]; - f_TW = (D.f[DIR_P0M])[kbe]; - f_BE = (D.f[DIR_M0P])[ktw]; - f_BS = (D.f[DIR_0PP])[ktn]; - f_TN = (D.f[DIR_0MM])[kbs]; - f_TS = (D.f[DIR_0PM])[kbn]; - f_BN = (D.f[DIR_0MP])[kts]; - f_BSW = (D.f[DIR_PPP])[ktne]; - f_BNE = (D.f[DIR_MMP])[ktsw]; - f_BNW = (D.f[DIR_PMP])[ktse]; - f_BSE = (D.f[DIR_MPP])[ktnw]; - f_TSW = (D.f[DIR_PPM])[kbne]; - f_TNE = (D.f[DIR_MMM])[kbsw]; - f_TNW = (D.f[DIR_PMM])[kbse]; - f_TSE = (D.f[DIR_MPM])[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 + ((D.f[DIR_000])[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); - //////////////////////////////////////////////////////////////////////////////// - - q = q_dirE[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c2o27* (drho + c9o2*(vx1)*(vx1) * (c1o1 + drho) - cu_sq); - (D.f[DIR_M00])[kw] = (c1o1 - q) / (c1o1 + q)*(f_E - f_W + (f_E + f_W - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_E + f_W)) / (c1o1 + q); - } - - q = q_dirW[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c2o27* (drho + c9o2*(-vx1)*(-vx1) * (c1o1 + drho) - cu_sq); - (D.f[DIR_P00])[ke] = (c1o1 - q) / (c1o1 + q)*(f_W - f_E + (f_W + f_E - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_W + f_E)) / (c1o1 + q); - } - - q = q_dirN[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c2o27* (drho + c9o2*(vx2)*(vx2) * (c1o1 + drho) - cu_sq); - (D.f[DIR_0M0])[ks] = (c1o1 - q) / (c1o1 + q)*(f_N - f_S + (f_N + f_S - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_N + f_S)) / (c1o1 + q); - } - - q = q_dirS[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c2o27* (drho + c9o2*(-vx2)*(-vx2) * (c1o1 + drho) - cu_sq); - (D.f[DIR_0P0])[kn] = (c1o1 - q) / (c1o1 + q)*(f_S - f_N + (f_S + f_N - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_S + f_N)) / (c1o1 + q); - } - - q = q_dirT[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c2o27* (drho + c9o2*(vx3)*(vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_00M])[kb] = (c1o1 - q) / (c1o1 + q)*(f_T - f_B + (f_T + f_B - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_T + f_B)) / (c1o1 + q); - } - - q = q_dirB[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c2o27* (drho + c9o2*(-vx3)*(-vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_00P])[kt] = (c1o1 - q) / (c1o1 + q)*(f_B - f_T + (f_B + f_T - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_B + f_T)) / (c1o1 + q); - } - - q = q_dirNE[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o54* (drho + c9o2*(vx1 + vx2)*(vx1 + vx2) * (c1o1 + drho) - cu_sq); - (D.f[DIR_MM0])[ksw] = (c1o1 - q) / (c1o1 + q)*(f_NE - f_SW + (f_NE + f_SW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_NE + f_SW)) / (c1o1 + q); - } - - q = q_dirSW[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o54* (drho + c9o2*(-vx1 - vx2)*(-vx1 - vx2) * (c1o1 + drho) - cu_sq); - (D.f[DIR_PP0])[kne] = (c1o1 - q) / (c1o1 + q)*(f_SW - f_NE + (f_SW + f_NE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_SW + f_NE)) / (c1o1 + q); - } - - q = q_dirSE[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o54* (drho + c9o2*(vx1 - vx2)*(vx1 - vx2) * (c1o1 + drho) - cu_sq); - (D.f[DIR_MP0])[knw] = (c1o1 - q) / (c1o1 + q)*(f_SE - f_NW + (f_SE + f_NW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_SE + f_NW)) / (c1o1 + q); - } - - q = q_dirNW[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o54* (drho + c9o2*(-vx1 + vx2)*(-vx1 + vx2) * (c1o1 + drho) - cu_sq); - (D.f[DIR_PM0])[kse] = (c1o1 - q) / (c1o1 + q)*(f_NW - f_SE + (f_NW + f_SE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_NW + f_SE)) / (c1o1 + q); - } - - q = q_dirTE[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o54* (drho + c9o2*(vx1 + vx3)*(vx1 + vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_M0M])[kbw] = (c1o1 - q) / (c1o1 + q)*(f_TE - f_BW + (f_TE + f_BW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TE + f_BW)) / (c1o1 + q); - } - - q = q_dirBW[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o54* (drho + c9o2*(-vx1 - vx3)*(-vx1 - vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_P0P])[kte] = (c1o1 - q) / (c1o1 + q)*(f_BW - f_TE + (f_BW + f_TE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BW + f_TE)) / (c1o1 + q); - } - - q = q_dirBE[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o54* (drho + c9o2*(vx1 - vx3)*(vx1 - vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_M0P])[ktw] = (c1o1 - q) / (c1o1 + q)*(f_BE - f_TW + (f_BE + f_TW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BE + f_TW)) / (c1o1 + q); - } - - q = q_dirTW[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o54* (drho + c9o2*(-vx1 + vx3)*(-vx1 + vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_P0M])[kbe] = (c1o1 - q) / (c1o1 + q)*(f_TW - f_BE + (f_TW + f_BE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TW + f_BE)) / (c1o1 + q); - } - - q = q_dirTN[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o54* (drho + c9o2*(vx2 + vx3)*(vx2 + vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_0MM])[kbs] = (c1o1 - q) / (c1o1 + q)*(f_TN - f_BS + (f_TN + f_BS - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TN + f_BS)) / (c1o1 + q); - } - - q = q_dirBS[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o54* (drho + c9o2*(-vx2 - vx3)*(-vx2 - vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_0PP])[ktn] = (c1o1 - q) / (c1o1 + q)*(f_BS - f_TN + (f_BS + f_TN - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BS + f_TN)) / (c1o1 + q); - } - - q = q_dirBN[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o54* (drho + c9o2*(vx2 - vx3)*(vx2 - vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_0MP])[kts] = (c1o1 - q) / (c1o1 + q)*(f_BN - f_TS + (f_BN + f_TS - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BN + f_TS)) / (c1o1 + q); - } - - q = q_dirTS[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o54* (drho + c9o2*(-vx2 + vx3)*(-vx2 + vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_0PM])[kbn] = (c1o1 - q) / (c1o1 + q)*(f_TS - f_BN + (f_TS + f_BN - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TS + f_BN)) / (c1o1 + q); - } - - q = q_dirTNE[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o216*(drho + c9o2*(vx1 + vx2 + vx3)*(vx1 + vx2 + vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_MMM])[kbsw] = (c1o1 - q) / (c1o1 + q)*(f_TNE - f_BSW + (f_TNE + f_BSW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TNE + f_BSW)) / (c1o1 + q); - } - - q = q_dirBSW[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o216*(drho + c9o2*(-vx1 - vx2 - vx3)*(-vx1 - vx2 - vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_PPP])[ktne] = (c1o1 - q) / (c1o1 + q)*(f_BSW - f_TNE + (f_BSW + f_TNE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BSW + f_TNE)) / (c1o1 + q); - } - - q = q_dirBNE[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o216*(drho + c9o2*(vx1 + vx2 - vx3)*(vx1 + vx2 - vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_MMP])[ktsw] = (c1o1 - q) / (c1o1 + q)*(f_BNE - f_TSW + (f_BNE + f_TSW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BNE + f_TSW)) / (c1o1 + q); - } - - q = q_dirTSW[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o216*(drho + c9o2*(-vx1 - vx2 + vx3)*(-vx1 - vx2 + vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_PPM])[kbne] = (c1o1 - q) / (c1o1 + q)*(f_TSW - f_BNE + (f_TSW + f_BNE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TSW + f_BNE)) / (c1o1 + q); - } - - q = q_dirTSE[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o216*(drho + c9o2*(vx1 - vx2 + vx3)*(vx1 - vx2 + vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_MPM])[kbnw] = (c1o1 - q) / (c1o1 + q)*(f_TSE - f_BNW + (f_TSE + f_BNW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TSE + f_BNW)) / (c1o1 + q); - } - - q = q_dirBNW[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o216*(drho + c9o2*(-vx1 + vx2 - vx3)*(-vx1 + vx2 - vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_PMP])[ktse] = (c1o1 - q) / (c1o1 + q)*(f_BNW - f_TSE + (f_BNW + f_TSE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BNW + f_TSE)) / (c1o1 + q); - } - - q = q_dirBSE[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o216*(drho + c9o2*(vx1 - vx2 - vx3)*(vx1 - vx2 - vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_MPP])[ktnw] = (c1o1 - q) / (c1o1 + q)*(f_BSE - f_TNW + (f_BSE + f_TNW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BSE + f_TNW)) / (c1o1 + q); - } - - q = q_dirTNW[k]; - if (q >= c0o1 && q <= c1o1) - { - feq = c1o216*(drho + c9o2*(-vx1 + vx2 + vx3)*(-vx1 + vx2 + vx3) * (c1o1 + drho) - cu_sq); - (D.f[DIR_PMM])[kbse] = (c1o1 - q) / (c1o1 + q)*(f_TNW - f_BSE + (f_TNW + f_BSE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TNW + f_BSE)) / (c1o1 + q); - } - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QThinWallsPartTwo27( - real* DD, - int* k_Q, - real* QQ, - uint numberOfBCnodes, - uint* geom, - uint* neighborX, - uint* neighborY, - uint* neighborZ, - uint* neighborWSB, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //////////////////////////////////////////////////////////////////////////////// - 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes]; - //////////////////////////////////////////////////////////////////////////////// - //index - uint KQK = k_Q[k]; - //uint kzero= KQK; - uint ke = KQK; - uint kw = neighborX[KQK]; - uint kn = KQK; - uint ks = neighborY[KQK]; - uint kt = KQK; - uint kb = neighborZ[KQK]; - uint ksw = neighborY[kw]; - uint kne = KQK; - uint kse = ks; - uint knw = kw; - uint kbw = neighborZ[kw]; - uint kte = KQK; - uint kbe = kb; - uint ktw = kw; - uint kbs = neighborZ[ks]; - uint ktn = KQK; - uint kbn = kb; - uint kts = ks; - uint ktse = ks; - uint kbnw = kbw; - uint ktnw = kw; - uint kbse = kbs; - uint ktsw = ksw; - uint kbne = kb; - uint ktne = KQK; - uint kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////// - //anti ET intermediate steps - uint kmmm = neighborWSB[KQK]; // -1 -1 -1 - uint k0mm = neighborX[kmmm]; // 0 -1 -1 - uint km0m = neighborY[kmmm]; // -1 0 -1 - uint kmm0 = neighborZ[kmmm]; // -1 -1 0 - uint k0m0 = neighborX[kmm0]; // 0 -1 0 - uint km00 = neighborY[kmm0]; // -1 0 0 - ///////////////////////////////////////////////// - //final indices for anti ET - uint kpmm = neighborX[k0mm]; // 1 -1 -1 - uint kmpm = neighborY[km0m]; // -1 1 -1 - uint kmmp = neighborZ[kmm0]; // -1 -1 1 - uint kmp0 = neighborY[km00]; // -1 1 0 - uint km0p = neighborZ[km00]; // -1 0 1 - uint k0mp = neighborZ[k0m0]; // 0 -1 1 - //////////////////////////////////////////////////////////////////////////////// - Distributions27 D, DN; - if (isEvenTimestep == true) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - if (isEvenTimestep==false) - { - DN.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - DN.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - DN.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - DN.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - DN.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - DN.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - DN.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - DN.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - DN.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - DN.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - DN.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - DN.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - DN.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - DN.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - DN.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - DN.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - DN.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - DN.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - DN.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - DN.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - DN.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - DN.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - DN.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - DN.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - DN.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - DN.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - DN.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - DN.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - DN.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - DN.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - DN.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - DN.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - DN.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - DN.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - DN.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - DN.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - DN.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - DN.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - DN.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - DN.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - DN.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - DN.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - DN.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - DN.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - DN.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - DN.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - DN.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - DN.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - DN.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - DN.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - DN.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - DN.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - DN.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - DN.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //directions allways exchange - //(-1 -1 -1) (-1 0 0) ( 0 -1 0) ( 0 0 -1) (-1 -1 0) (-1 0 -1) ( 0 -1 -1) ( 1 1 -1) ( 1 -1 1) (-1 1 1) ( 1 -1 0) ( 1 0 -1) ( 0 1 -1) - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //directions exchange if solid neighbor - //( 1 1 1) ( 1 0 0) ( 0 1 0) ( 0 0 1) ( 1 1 0) ( 1 0 1) ( 0 1 1) (-1 -1 1) (-1 1 -1) ( 1 -1 -1) (-1 1 0) (-1 0 1) ( 0 -1 1) - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real q, tmp; - q = q_dirE[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kw ] < GEO_FLUID){tmp = (DN.f[DIR_M00])[kw ]; (DN.f[DIR_M00])[kw ]=(D.f[DIR_M00])[kw ]; (D.f[DIR_M00])[kw ]=tmp;}} - q = q_dirW[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[DIR_P00])[ke ]; (DN.f[DIR_P00])[ke ]=(D.f[DIR_P00])[ke ]; (D.f[DIR_P00])[ke ]=tmp;}} - q = q_dirN[k]; if (q>=c0o1 && q<=c1o1){ if (geom[ks ] < GEO_FLUID){tmp = (DN.f[DIR_0M0])[ks ]; (DN.f[DIR_0M0])[ks ]=(D.f[DIR_0M0])[ks ]; (D.f[DIR_0M0])[ks ]=tmp;}} - q = q_dirS[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[DIR_0P0])[kn ]; (DN.f[DIR_0P0])[kn ]=(D.f[DIR_0P0])[kn ]; (D.f[DIR_0P0])[kn ]=tmp;}} - q = q_dirT[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kb ] < GEO_FLUID){tmp = (DN.f[DIR_00M])[kb ]; (DN.f[DIR_00M])[kb ]=(D.f[DIR_00M])[kb ]; (D.f[DIR_00M])[kb ]=tmp;}} - q = q_dirB[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[DIR_00P])[kt ]; (DN.f[DIR_00P])[kt ]=(D.f[DIR_00P])[kt ]; (D.f[DIR_00P])[kt ]=tmp;}} - q = q_dirNE[k]; if (q>=c0o1 && q<=c1o1){ if (geom[ksw ] < GEO_FLUID){tmp = (DN.f[DIR_MM0])[ksw ]; (DN.f[DIR_MM0])[ksw ]=(D.f[DIR_MM0])[ksw ]; (D.f[DIR_MM0])[ksw ]=tmp;}} - q = q_dirSW[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[DIR_PP0])[kne ]; (DN.f[DIR_PP0])[kne ]=(D.f[DIR_PP0])[kne ]; (D.f[DIR_PP0])[kne ]=tmp;}} - q = q_dirSE[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[DIR_MP0])[knw ]; (DN.f[DIR_MP0])[knw ]=(D.f[DIR_MP0])[knw ]; (D.f[DIR_MP0])[knw ]=tmp;}} - q = q_dirNW[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kmp0] < GEO_FLUID){tmp = (DN.f[DIR_PM0])[kse ]; (DN.f[DIR_PM0])[kse ]=(D.f[DIR_PM0])[kse ]; (D.f[DIR_PM0])[kse ]=tmp;}} - q = q_dirTE[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kbw ] < GEO_FLUID){tmp = (DN.f[DIR_M0M])[kbw ]; (DN.f[DIR_M0M])[kbw ]=(D.f[DIR_M0M])[kbw ]; (D.f[DIR_M0M])[kbw ]=tmp;}} - q = q_dirBW[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[DIR_P0P])[kte ]; (DN.f[DIR_P0P])[kte ]=(D.f[DIR_P0P])[kte ]; (D.f[DIR_P0P])[kte ]=tmp;}} - q = q_dirBE[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[DIR_M0P])[ktw ]; (DN.f[DIR_M0P])[ktw ]=(D.f[DIR_M0P])[ktw ]; (D.f[DIR_M0P])[ktw ]=tmp;}} - q = q_dirTW[k]; if (q>=c0o1 && q<=c1o1){ if (geom[km0p] < GEO_FLUID){tmp = (DN.f[DIR_P0M])[kbe ]; (DN.f[DIR_P0M])[kbe ]=(D.f[DIR_P0M])[kbe ]; (D.f[DIR_P0M])[kbe ]=tmp;}} - q = q_dirTN[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kbs ] < GEO_FLUID){tmp = (DN.f[DIR_0MM])[kbs ]; (DN.f[DIR_0MM])[kbs ]=(D.f[DIR_0MM])[kbs ]; (D.f[DIR_0MM])[kbs ]=tmp;}} - q = q_dirBS[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[DIR_0PP])[ktn ]; (DN.f[DIR_0PP])[ktn ]=(D.f[DIR_0PP])[ktn ]; (D.f[DIR_0PP])[ktn ]=tmp;}} - q = q_dirBN[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[DIR_0MP])[kts ]; (DN.f[DIR_0MP])[kts ]=(D.f[DIR_0MP])[kts ]; (D.f[DIR_0MP])[kts ]=tmp;}} - q = q_dirTS[k]; if (q>=c0o1 && q<=c1o1){ if (geom[k0mp] < GEO_FLUID){tmp = (DN.f[DIR_0PM])[kbn ]; (DN.f[DIR_0PM])[kbn ]=(D.f[DIR_0PM])[kbn ]; (D.f[DIR_0PM])[kbn ]=tmp;}} - q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kbsw] < GEO_FLUID){tmp = (DN.f[DIR_MMM])[kbsw]; (DN.f[DIR_MMM])[kbsw]=(D.f[DIR_MMM])[kbsw]; (D.f[DIR_MMM])[kbsw]=tmp;}} - q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[DIR_PPP])[ktne]; (DN.f[DIR_PPP])[ktne]=(D.f[DIR_PPP])[ktne]; (D.f[DIR_PPP])[ktne]=tmp;}} - q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[DIR_MMP])[ktsw]; (DN.f[DIR_MMP])[ktsw]=(D.f[DIR_MMP])[ktsw]; (D.f[DIR_MMP])[ktsw]=tmp;}} - q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kmmp] < GEO_FLUID){tmp = (DN.f[DIR_PPM])[kbne]; (DN.f[DIR_PPM])[kbne]=(D.f[DIR_PPM])[kbne]; (D.f[DIR_PPM])[kbne]=tmp;}} - q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[DIR_MPM])[kbnw]; (DN.f[DIR_MPM])[kbnw]=(D.f[DIR_MPM])[kbnw]; (D.f[DIR_MPM])[kbnw]=tmp;}} - q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kmpm] < GEO_FLUID){tmp = (DN.f[DIR_PMP])[ktse]; (DN.f[DIR_PMP])[ktse]=(D.f[DIR_PMP])[ktse]; (D.f[DIR_PMP])[ktse]=tmp;}} - q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kpmm] < GEO_FLUID){tmp = (DN.f[DIR_MPP])[ktnw]; (DN.f[DIR_MPP])[ktnw]=(D.f[DIR_MPP])[ktnw]; (D.f[DIR_MPP])[ktnw]=tmp;}} - q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[DIR_PMM])[kbse]; (DN.f[DIR_PMM])[kbse]=(D.f[DIR_PMM])[kbse]; (D.f[DIR_PMM])[kbse]=tmp;}} - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/gpu/VirtualFluids_GPU/GPU/VelocityBCs27.cu b/src/gpu/VirtualFluids_GPU/GPU/VelocityBCs27.cu deleted file mode 100644 index 6207c98f9290520199e3cd9c31294ef5520b1798..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/GPU/VelocityBCs27.cu +++ /dev/null @@ -1,5844 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// 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/>. -// -//! \file VelocityBCs27.cu -//! \ingroup GPU -//! \author Martin Schoenherr, Anna Wellmann -//====================================================================================== -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include "basics/constants/NumericConstants.h" -#include "LBM/GPUHelperFunctions/KernelUtilities.h" - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -using namespace vf::gpu; - -////////////////////////////////////////////////////////////////////////////// -__global__ void QVelDeviceCompPlusSlip27( - real* vx, - real* vy, - real* vz, - real* DD, - 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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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 VeloX = vx[k]; - real VeloY = vy[k]; - real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny) - //////////////////////////////////////////////////////////////////////////////// - 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * 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[DIR_P00])[ke]; - f_E = (D.f[DIR_M00])[kw]; - f_S = (D.f[DIR_0P0])[kn]; - f_N = (D.f[DIR_0M0])[ks]; - f_B = (D.f[DIR_00P])[kt]; - f_T = (D.f[DIR_00M])[kb]; - f_SW = (D.f[DIR_PP0])[kne]; - f_NE = (D.f[DIR_MM0])[ksw]; - f_NW = (D.f[DIR_PM0])[kse]; - f_SE = (D.f[DIR_MP0])[knw]; - f_BW = (D.f[DIR_P0P])[kte]; - f_TE = (D.f[DIR_M0M])[kbw]; - f_TW = (D.f[DIR_P0M])[kbe]; - f_BE = (D.f[DIR_M0P])[ktw]; - f_BS = (D.f[DIR_0PP])[ktn]; - f_TN = (D.f[DIR_0MM])[kbs]; - f_TS = (D.f[DIR_0PM])[kbn]; - f_BN = (D.f[DIR_0MP])[kts]; - f_BSW = (D.f[DIR_PPP])[ktne]; - f_BNE = (D.f[DIR_MMP])[ktsw]; - f_BNW = (D.f[DIR_PMP])[ktse]; - f_BSE = (D.f[DIR_MPP])[ktnw]; - f_TSW = (D.f[DIR_PPM])[kbne]; - f_TNE = (D.f[DIR_MMM])[kbsw]; - f_TNW = (D.f[DIR_PMM])[kbse]; - f_TSE = (D.f[DIR_MPM])[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 + ((D.f[DIR_000])[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); - - ////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep == false) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[DIR_000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - //ToDo anders Klammern - - /////To Slip Or Not To Slip? - // We assume slip BC if |vec(V_BC)|=1. To avoid problems we take V_BC*V_BC>0.99 (c99o100) - if (VeloX*VeloX + VeloY*VeloY + VeloZ*VeloZ > c99o100) - { - // vt=v-(n \dot v) *n - // n=(VeloX,VeloY,VeloZ) a misuse of the velocity variable! - real normalV = VeloX*vx1 + VeloY*vx2 + VeloZ*vx3; - vx1 = vx1 - normalV*VeloX; - vx2 = vx2 - normalV*VeloY; - vx3 = vx3 - normalV*VeloZ; - } - //////////////// - - q = q_dirE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( vx1 )*/+c9o2*( vx1 )*( vx1 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M00])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX ))/(c1o1+q);// - c2over27 * drho; - //(D.f[DIR_M00])[kw]=zero; - } - - q = q_dirW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*(-vx1 )*/+c9o2*(-vx1 )*(-vx1 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P00])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX ))/(c1o1+q);// - c2over27 * drho; - //(D.f[DIR_P00])[ke]=zero; - } - - q = q_dirN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( vx2 )*/+c9o2*( vx2 )*( vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0M0])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY ))/(c1o1+q);// - c2over27 * drho; - //(D.f[DIR_0M0])[ks]=zero; - } - - q = q_dirS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( -vx2 )*/+c9o2*( -vx2 )*( -vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0P0])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY ))/(c1o1+q);// - c2over27 * drho; - //(D.f[DIR_0P0])[kn]=zero; - } - - q = q_dirT[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( vx3)*/+c9o2*( vx3)*( vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_00M])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ ))/(c1o1+q);// - c2over27 * drho; - //(D.f[DIR_00M])[kb]=one; - } - - q = q_dirB[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( -vx3)*/+c9o2*( -vx3)*( -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_00P])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ ))/(c1o1+q);// - c2over27 * drho; - //(D.f[DIR_00P])[kt]=zero; - } - - q = q_dirNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1+vx2 )*/+c9o2*( vx1+vx2 )*( vx1+vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q);// - c1over54 * drho; - //(D.f[DIR_MM0])[ksw]=zero; - } - - q = q_dirSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1-vx2 )*/+c9o2*(-vx1-vx2 )*(-vx1-vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);// - c1over54 * drho; - //(D.f[DIR_PP0])[kne]=zero; - } - - q = q_dirSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1-vx2 )*/+c9o2*( vx1-vx2 )*( vx1-vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);// - c1over54 * drho; - //(D.f[DIR_MP0])[knw]=zero; - } - - q = q_dirNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1+vx2 )*/+c9o2*(-vx1+vx2 )*(-vx1+vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);// - c1over54 * drho; - //(D.f[DIR_PM0])[kse]=zero; - } - - q = q_dirTE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1 +vx3)*/+c9o2*( vx1 +vx3)*( vx1 +vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);// - c1over54 * drho; - //(D.f[DIR_M0M])[kbw]=zero; - } - - q = q_dirBW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1 -vx3)*/+c9o2*(-vx1 -vx3)*(-vx1 -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);// - c1over54 * drho; - //(D.f[DIR_P0P])[kte]=zero; - } - - q = q_dirBE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1 -vx3)*/+c9o2*( vx1 -vx3)*( vx1 -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);// - c1over54 * drho; - //(D.f[DIR_M0P])[ktw]=zero; - } - - q = q_dirTW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1 +vx3)*/+c9o2*(-vx1 +vx3)*(-vx1 +vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);// - c1over54 * drho; - //(D.f[DIR_P0M])[kbe]=zero; - } - - q = q_dirTN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx2+vx3)*/+c9o2*( vx2+vx3)*( vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);// - c1over54 * drho; - //(D.f[DIR_0MM])[kbs]=zero; - } - - q = q_dirBS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( -vx2-vx3)*/+c9o2*( -vx2-vx3)*( -vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q);// - c1over54 * drho; - //(D.f[DIR_0PP])[ktn]=zero; - } - - q = q_dirBN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx2-vx3)*/+c9o2*( vx2-vx3)*( vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);// - c1over54 * drho; - //(D.f[DIR_0MP])[kts]=zero; - } - - q = q_dirTS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( -vx2+vx3)*/+c9o2*( -vx2+vx3)*( -vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q);// - c1over54 * drho; - //(D.f[DIR_0PM])[kbn]=zero; - } - - q = q_dirTNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MMM])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q);// - c1over216 * drho; - //(D.f[DIR_MMM])[kbsw]=zero; - } - - q = q_dirBSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PPP])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q);// - c1over216 * drho; - //(D.f[DIR_PPP])[ktne]=zero; - } - - q = q_dirBNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MMP])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q);// - c1over216 * drho; - //(D.f[DIR_MMP])[ktsw]=zero; - } - - q = q_dirTSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PPM])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q);// - c1over216 * drho; - //(D.f[DIR_PPM])[kbne]=zero; - } - - q = q_dirTSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MPM])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q);// - c1over216 * drho; - //(D.f[DIR_MPM])[kbnw]=zero; - } - - q = q_dirBNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PMP])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q);// - c1over216 * drho; - //(D.f[DIR_PMP])[ktse]=zero; - } - - q = q_dirBSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MPP])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q);// - c1over216 * drho; - //(D.f[DIR_MPP])[ktnw]=zero; - } - - q = q_dirTNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PMM])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q);// - c1over216 * drho; - //(D.f[DIR_PMM])[kbse]=zero; - } - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -__global__ void QVeloDeviceEQ27( - real* VeloX, - real* VeloY, - real* VeloZ, - real* DD, - int* k_Q, - int numberOfBCnodes, - real om1, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - //////////////////////////////////////////////////////////////////////////////// - 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) - { - //////////////////////////////////////////////////////////////////////////////// - //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]; - //////////////////////////////////////////////////////////////////////////////// - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // based on BGK Plus Comp - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[ke ]; - real mfabb = (D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[kn ]; - real mfbab = (D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[kt ]; - real mfbba = (D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[kne ]; - real mfaab = (D.f[DIR_MM0])[ksw ]; - real mfcab = (D.f[DIR_PM0])[kse ]; - real mfacb = (D.f[DIR_MP0])[knw ]; - real mfcbc = (D.f[DIR_P0P])[kte ]; - real mfaba = (D.f[DIR_M0M])[kbw ]; - real mfcba = (D.f[DIR_P0M])[kbe ]; - real mfabc = (D.f[DIR_M0P])[ktw ]; - real mfbcc = (D.f[DIR_0PP])[ktn ]; - real mfbaa = (D.f[DIR_0MM])[kbs ]; - real mfbca = (D.f[DIR_0PM])[kbn ]; - real mfbac = (D.f[DIR_0MP])[kts ]; - real mfbbb = (D.f[DIR_000])[kzero]; - real mfccc = (D.f[DIR_PPP])[ktne ]; - real mfaac = (D.f[DIR_MMP])[ktsw ]; - real mfcac = (D.f[DIR_PMP])[ktse ]; - real mfacc = (D.f[DIR_MPP])[ktnw ]; - real mfcca = (D.f[DIR_PPM])[kbne ]; - real mfaaa = (D.f[DIR_MMM])[kbsw ]; - real mfcaa = (D.f[DIR_PMM])[kbse ]; - real mfaca = (D.f[DIR_MPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////////// - real rho = (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + - mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb + - mfabb+mfcbb + mfbab+mfbcb + mfbba+mfbbc + mfbbb + c1o1);//!!!!Achtung + one - //////////////////////////////////////////////////////////////////////////////////// - real vvx = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + - (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + - (mfcbb-mfabb)) / rho; - real vvy =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + - (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + - (mfbcb-mfbab)) / rho; - real vvz =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + - (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + - (mfbbc-mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - if(VeloX[k]!=c0o1) vvx = VeloX[k]; - if(VeloY[k]!=c0o1) vvy = VeloY[k]; - if(VeloZ[k]!=c0o1) vvz = VeloZ[k]; - //////////////////////////////////////////////////////////////////////////////////// - real vx2 = vvx * vvx; - real vy2 = vvy * vvy; - real vz2 = vvz * vvz; - //////////////////////////////////////////////////////////////////////////////////// - real XXb = -c2o3 + vx2; - real XXc = -c1o2 * (XXb + c1o1 + vvx); - real XXa = XXc + vvx; - real YYb = -c2o3 + vy2; - real YYc = -c1o2 * (YYb + c1o1 + vvy); - real YYa = YYc + vvy; - real ZZb = -c2o3 + vz2; - real ZZc = -c1o2 * (ZZb + c1o1 + vvz); - real ZZa = ZZc + vvz; - //////////////////////////////////////////////////////////////////////////////////// - mfcbb = -rho * XXc * YYb * ZZb - c2o27 ; - mfabb = -rho * XXa * YYb * ZZb - c2o27 ; - mfbcb = -rho * XXb * YYc * ZZb - c2o27 ; - mfbab = -rho * XXb * YYa * ZZb - c2o27 ; - mfbbc = -rho * XXb * YYb * ZZc - c2o27 ; - mfbba = -rho * XXb * YYb * ZZa - c2o27 ; - mfccb = -rho * XXc * YYc * ZZb - c1o54 ; - mfaab = -rho * XXa * YYa * ZZb - c1o54 ; - mfcab = -rho * XXc * YYa * ZZb - c1o54 ; - mfacb = -rho * XXa * YYc * ZZb - c1o54 ; - mfcbc = -rho * XXc * YYb * ZZc - c1o54 ; - mfaba = -rho * XXa * YYb * ZZa - c1o54 ; - mfcba = -rho * XXc * YYb * ZZa - c1o54 ; - mfabc = -rho * XXa * YYb * ZZc - c1o54 ; - mfbcc = -rho * XXb * YYc * ZZc - c1o54 ; - mfbaa = -rho * XXb * YYa * ZZa - c1o54 ; - mfbca = -rho * XXb * YYc * ZZa - c1o54 ; - mfbac = -rho * XXb * YYa * ZZc - c1o54 ; - mfbbb = -rho * XXb * YYb * ZZb - c8o27 ; - mfccc = -rho * XXc * YYc * ZZc - c1o216; - mfaac = -rho * XXa * YYa * ZZc - c1o216; - mfcac = -rho * XXc * YYa * ZZc - c1o216; - mfacc = -rho * XXa * YYc * ZZc - c1o216; - mfcca = -rho * XXc * YYc * ZZa - c1o216; - mfaaa = -rho * XXa * YYa * ZZa - c1o216; - mfcaa = -rho * XXc * YYa * ZZa - c1o216; - mfaca = -rho * XXa * YYc * ZZa - c1o216; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[ke ] = mfabb;//mfcbb; - (D.f[DIR_M00])[kw ] = mfcbb;//mfabb; - (D.f[DIR_0P0])[kn ] = mfbab;//mfbcb; - (D.f[DIR_0M0])[ks ] = mfbcb;//mfbab; - (D.f[DIR_00P])[kt ] = mfbba;//mfbbc; - (D.f[DIR_00M])[kb ] = mfbbc;//mfbba; - (D.f[DIR_PP0])[kne ] = mfaab;//mfccb; - (D.f[DIR_MM0])[ksw ] = mfccb;//mfaab; - (D.f[DIR_PM0])[kse ] = mfacb;//mfcab; - (D.f[DIR_MP0])[knw ] = mfcab;//mfacb; - (D.f[DIR_P0P])[kte ] = mfaba;//mfcbc; - (D.f[DIR_M0M])[kbw ] = mfcbc;//mfaba; - (D.f[DIR_P0M])[kbe ] = mfabc;//mfcba; - (D.f[DIR_M0P])[ktw ] = mfcba;//mfabc; - (D.f[DIR_0PP])[ktn ] = mfbaa;//mfbcc; - (D.f[DIR_0MM])[kbs ] = mfbcc;//mfbaa; - (D.f[DIR_0PM])[kbn ] = mfbac;//mfbca; - (D.f[DIR_0MP])[kts ] = mfbca;//mfbac; - (D.f[DIR_000])[kzero] = mfbbb;//mfbbb; - (D.f[DIR_PPP])[ktne ] = mfaaa;//mfccc; - (D.f[DIR_MMP])[ktsw ] = mfcca;//mfaac; - (D.f[DIR_PMP])[ktse ] = mfaca;//mfcac; - (D.f[DIR_MPP])[ktnw ] = mfcaa;//mfacc; - (D.f[DIR_PPM])[kbne ] = mfaac;//mfcca; - (D.f[DIR_MMM])[kbsw ] = mfccc;//mfaaa; - (D.f[DIR_PMM])[kbse ] = mfacc;//mfcaa; - (D.f[DIR_MPM])[kbnw ] = mfcac;//mfaca; - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QVelDeviceIncompHighNu27( - real* vx, - real* vy, - real* vz, - real* DD, - 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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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 VeloX = vx[k]; - real VeloY = vy[k]; - real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny) - //////////////////////////////////////////////////////////////////////////////// - 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * 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_E = (D.f[DIR_P00])[ke ]; - f_W = (D.f[DIR_M00])[kw ]; - f_N = (D.f[DIR_0P0])[kn ]; - f_S = (D.f[DIR_0M0])[ks ]; - f_T = (D.f[DIR_00P])[kt ]; - f_B = (D.f[DIR_00M])[kb ]; - f_NE = (D.f[DIR_PP0])[kne ]; - f_SW = (D.f[DIR_MM0])[ksw ]; - f_SE = (D.f[DIR_PM0])[kse ]; - f_NW = (D.f[DIR_MP0])[knw ]; - f_TE = (D.f[DIR_P0P])[kte ]; - f_BW = (D.f[DIR_M0M])[kbw ]; - f_BE = (D.f[DIR_P0M])[kbe ]; - f_TW = (D.f[DIR_M0P])[ktw ]; - f_TN = (D.f[DIR_0PP])[ktn ]; - f_BS = (D.f[DIR_0MM])[kbs ]; - f_BN = (D.f[DIR_0PM])[kbn ]; - f_TS = (D.f[DIR_0MP])[kts ]; - f_TNE = (D.f[DIR_PPP])[ktne ]; - f_TSW = (D.f[DIR_MMP])[ktsw ]; - f_TSE = (D.f[DIR_PMP])[ktse ]; - f_TNW = (D.f[DIR_MPP])[ktnw ]; - f_BNE = (D.f[DIR_PPM])[kbne ]; - f_BSW = (D.f[DIR_MMM])[kbsw ]; - f_BSE = (D.f[DIR_PMM])[kbse ]; - f_BNW = (D.f[DIR_MPM])[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 + ((D.f[DIR_000])[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));// / (one + 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));// / (one + 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));// / (one + drho); - - real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);// * (one + drho); - - ////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[DIR_000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - //ToDo anders Klammern - - q = q_dirE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( vx1 )*/+c9o2*( vx1 )*( vx1 ) /** (one + drho)*/-cu_sq); - (D.f[DIR_M00])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX )) / (q + c1o1) ; - } - - q = q_dirW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*(-vx1 )*/+c9o2*(-vx1 )*(-vx1 ) /** (one + drho)*/-cu_sq); - (D.f[DIR_P00])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX )) / (q + c1o1) ; - } - - q = q_dirN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( vx2 )*/+c9o2*( vx2 )*( vx2 ) /** (one + drho)*/-cu_sq); - (D.f[DIR_0M0])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY )) / (q + c1o1) ; - } - - q = q_dirS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( -vx2 )*/+c9o2*( -vx2 )*( -vx2 ) /** (one + drho)*/-cu_sq); - (D.f[DIR_0P0])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY )) / (q + c1o1) ; - } - - q = q_dirT[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( vx3)*/+c9o2*( vx3)*( vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_00M])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ )) / (q + c1o1) ; - } - - q = q_dirB[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( -vx3)*/+c9o2*( -vx3)*( -vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_00P])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ )) / (q + c1o1) ; - } - - q = q_dirNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1+vx2 )*/+c9o2*( vx1+vx2 )*( vx1+vx2 ) /** (one + drho)*/-cu_sq); - (D.f[DIR_MM0])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ; - } - - q = q_dirSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1-vx2 )*/+c9o2*(-vx1-vx2 )*(-vx1-vx2 ) /** (one + drho)*/-cu_sq); - (D.f[DIR_PP0])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ; - } - - q = q_dirSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1-vx2 )*/+c9o2*( vx1-vx2 )*( vx1-vx2 ) /** (one + drho)*/-cu_sq); - (D.f[DIR_MP0])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ; - } - - q = q_dirNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1+vx2 )*/+c9o2*(-vx1+vx2 )*(-vx1+vx2 ) /** (one + drho)*/-cu_sq); - (D.f[DIR_PM0])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ; - } - - q = q_dirTE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1 +vx3)*/+c9o2*( vx1 +vx3)*( vx1 +vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_M0M])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ; - } - - q = q_dirBW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1 -vx3)*/+c9o2*(-vx1 -vx3)*(-vx1 -vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_P0P])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ; - } - - q = q_dirBE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1 -vx3)*/+c9o2*( vx1 -vx3)*( vx1 -vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_M0P])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ; - } - - q = q_dirTW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1 +vx3)*/+c9o2*(-vx1 +vx3)*(-vx1 +vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_P0M])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ; - } - - q = q_dirTN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx2+vx3)*/+c9o2*( vx2+vx3)*( vx2+vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_0MM])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ; - } - - q = q_dirBS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( -vx2-vx3)*/+c9o2*( -vx2-vx3)*( -vx2-vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_0PP])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ; - } - - q = q_dirBN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx2-vx3)*/+c9o2*( vx2-vx3)*( vx2-vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_0MP])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ; - } - - q = q_dirTS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( -vx2+vx3)*/+c9o2*( -vx2+vx3)*( -vx2+vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_0PM])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ; - } - - q = q_dirTNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_MMM])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ; - } - - q = q_dirBSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_PPP])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ; - } - - q = q_dirBNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_MMP])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ; - } - - q = q_dirTSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_PPM])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ; - } - - q = q_dirTSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_MPM])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ; - } - - q = q_dirBNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_PMP])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ; - } - - q = q_dirBSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_MPP])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ; - } - - q = q_dirTNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) /** (one + drho)*/-cu_sq); - (D.f[DIR_PMM])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ; - } - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QVelDeviceCompHighNu27( - real* vx, - real* vy, - real* vz, - real* DD, - 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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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 VeloX = vx[k]; - real VeloY = vy[k]; - real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny) - //////////////////////////////////////////////////////////////////////////////// - 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * 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_E = (D.f[DIR_P00])[ke ]; - f_W = (D.f[DIR_M00])[kw ]; - f_N = (D.f[DIR_0P0])[kn ]; - f_S = (D.f[DIR_0M0])[ks ]; - f_T = (D.f[DIR_00P])[kt ]; - f_B = (D.f[DIR_00M])[kb ]; - f_NE = (D.f[DIR_PP0])[kne ]; - f_SW = (D.f[DIR_MM0])[ksw ]; - f_SE = (D.f[DIR_PM0])[kse ]; - f_NW = (D.f[DIR_MP0])[knw ]; - f_TE = (D.f[DIR_P0P])[kte ]; - f_BW = (D.f[DIR_M0M])[kbw ]; - f_BE = (D.f[DIR_P0M])[kbe ]; - f_TW = (D.f[DIR_M0P])[ktw ]; - f_TN = (D.f[DIR_0PP])[ktn ]; - f_BS = (D.f[DIR_0MM])[kbs ]; - f_BN = (D.f[DIR_0PM])[kbn ]; - f_TS = (D.f[DIR_0MP])[kts ]; - f_TNE = (D.f[DIR_PPP])[ktne ]; - f_TSW = (D.f[DIR_MMP])[ktsw ]; - f_TSE = (D.f[DIR_PMP])[ktse ]; - f_TNW = (D.f[DIR_MPP])[ktnw ]; - f_BNE = (D.f[DIR_PPM])[kbne ]; - f_BSW = (D.f[DIR_MMM])[kbsw ]; - f_BSE = (D.f[DIR_PMM])[kbse ]; - f_BNW = (D.f[DIR_MPM])[kbnw ]; - //f_W = (D.f[DIR_P00])[ke ]; - //f_E = (D.f[DIR_M00])[kw ]; - //f_S = (D.f[DIR_0P0])[kn ]; - //f_N = (D.f[DIR_0M0])[ks ]; - //f_B = (D.f[DIR_00P])[kt ]; - //f_T = (D.f[DIR_00M])[kb ]; - //f_SW = (D.f[DIR_PP0])[kne ]; - //f_NE = (D.f[DIR_MM0])[ksw ]; - //f_NW = (D.f[DIR_PM0])[kse ]; - //f_SE = (D.f[DIR_MP0])[knw ]; - //f_BW = (D.f[DIR_P0P])[kte ]; - //f_TE = (D.f[DIR_M0M])[kbw ]; - //f_TW = (D.f[DIR_P0M])[kbe ]; - //f_BE = (D.f[DIR_M0P])[ktw ]; - //f_BS = (D.f[DIR_0PP])[ktn ]; - //f_TN = (D.f[DIR_0MM])[kbs ]; - //f_TS = (D.f[DIR_0PM])[kbn ]; - //f_BN = (D.f[DIR_0MP])[kts ]; - //f_BSW = (D.f[DIR_PPP])[ktne ]; - //f_BNE = (D.f[DIR_MMP])[ktsw ]; - //f_BNW = (D.f[DIR_PMP])[ktse ]; - //f_BSE = (D.f[DIR_MPP])[ktnw ]; - //f_TSW = (D.f[DIR_PPM])[kbne ]; - //f_TNE = (D.f[DIR_MMM])[kbsw ]; - //f_TNW = (D.f[DIR_PMM])[kbse ]; - //f_TSE = (D.f[DIR_MPM])[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 + ((D.f[DIR_000])[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); - - ////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[DIR_000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - //ToDo anders Klammern - - q = q_dirE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( vx1 )*/+c9o2*( vx1 )*( vx1 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M00])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX )) / (q + c1o1) ; - //(D.f[DIR_M00])[kw]=(one-q)/(one+q)*(f_E-f_W+(f_E+f_W-two*feq*om1)/(one-om1))*c1o2+(q*(f_E+f_W)-six*c2over27*( VeloX ))/(one+q) - c2over27 * drho; - //(D.f[DIR_M00])[kw]=zero; - } - - q = q_dirW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*(-vx1 )*/+c9o2*(-vx1 )*(-vx1 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P00])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX )) / (q + c1o1) ; - //(D.f[DIR_P00])[ke]=(one-q)/(one+q)*(f_W-f_E+(f_W+f_E-two*feq*om1)/(one-om1))*c1o2+(q*(f_W+f_E)-six*c2over27*(-VeloX ))/(one+q) - c2over27 * drho; - //(D.f[DIR_P00])[ke]=zero; - } - - q = q_dirN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( vx2 )*/+c9o2*( vx2 )*( vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0M0])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY )) / (q + c1o1) ; - //(D.f[DIR_0M0])[ks]=(one-q)/(one+q)*(f_N-f_S+(f_N+f_S-two*feq*om1)/(one-om1))*c1o2+(q*(f_N+f_S)-six*c2over27*( VeloY ))/(one+q) - c2over27 * drho; - //(D.f[DIR_0M0])[ks]=zero; - } - - q = q_dirS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( -vx2 )*/+c9o2*( -vx2 )*( -vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0P0])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY )) / (q + c1o1) ; - //(D.f[DIR_0P0])[kn]=(one-q)/(one+q)*(f_S-f_N+(f_S+f_N-two*feq*om1)/(one-om1))*c1o2+(q*(f_S+f_N)-six*c2over27*(-VeloY ))/(one+q) - c2over27 * drho; - //(D.f[DIR_0P0])[kn]=zero; - } - - q = q_dirT[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( vx3)*/+c9o2*( vx3)*( vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_00M])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ )) / (q + c1o1) ; - //(D.f[DIR_00M])[kb]=(one-q)/(one+q)*(f_T-f_B+(f_T+f_B-two*feq*om1)/(one-om1))*c1o2+(q*(f_T+f_B)-six*c2over27*( VeloZ ))/(one+q) - c2over27 * drho; - //(D.f[DIR_00M])[kb]=one; - } - - q = q_dirB[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( -vx3)*/+c9o2*( -vx3)*( -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_00P])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ )) / (q + c1o1) ; - //(D.f[DIR_00P])[kt]=(one-q)/(one+q)*(f_B-f_T+(f_B+f_T-two*feq*om1)/(one-om1))*c1o2+(q*(f_B+f_T)-six*c2over27*(-VeloZ ))/(one+q) - c2over27 * drho; - //(D.f[DIR_00P])[kt]=zero; - } - - q = q_dirNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1+vx2 )*/+c9o2*( vx1+vx2 )*( vx1+vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MM0])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ; - //(D.f[DIR_MM0])[ksw]=(one-q)/(one+q)*(f_NE-f_SW+(f_NE+f_SW-two*feq*om1)/(one-om1))*c1o2+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q) - c1over54 * drho; - //(D.f[DIR_MM0])[ksw]=zero; - } - - q = q_dirSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1-vx2 )*/+c9o2*(-vx1-vx2 )*(-vx1-vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PP0])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ; - //(D.f[DIR_PP0])[kne]=(one-q)/(one+q)*(f_SW-f_NE+(f_SW+f_NE-two*feq*om1)/(one-om1))*c1o2+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q) - c1over54 * drho; - //(D.f[DIR_PP0])[kne]=zero; - } - - q = q_dirSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1-vx2 )*/+c9o2*( vx1-vx2 )*( vx1-vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MP0])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ; - //(D.f[DIR_MP0])[knw]=(one-q)/(one+q)*(f_SE-f_NW+(f_SE+f_NW-two*feq*om1)/(one-om1))*c1o2+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q) - c1over54 * drho; - //(D.f[DIR_MP0])[knw]=zero; - } - - q = q_dirNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1+vx2 )*/+c9o2*(-vx1+vx2 )*(-vx1+vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PM0])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ; - //(D.f[DIR_PM0])[kse]=(one-q)/(one+q)*(f_NW-f_SE+(f_NW+f_SE-two*feq*om1)/(one-om1))*c1o2+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q) - c1over54 * drho; - //(D.f[DIR_PM0])[kse]=zero; - } - - q = q_dirTE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1 +vx3)*/+c9o2*( vx1 +vx3)*( vx1 +vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M0M])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ; - //(D.f[DIR_M0M])[kbw]=(one-q)/(one+q)*(f_TE-f_BW+(f_TE+f_BW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q) - c1over54 * drho; - //(D.f[DIR_M0M])[kbw]=zero; - } - - q = q_dirBW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1 -vx3)*/+c9o2*(-vx1 -vx3)*(-vx1 -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P0P])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ; - //(D.f[DIR_P0P])[kte]=(one-q)/(one+q)*(f_BW-f_TE+(f_BW+f_TE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q) - c1over54 * drho; - //(D.f[DIR_P0P])[kte]=zero; - } - - q = q_dirBE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1 -vx3)*/+c9o2*( vx1 -vx3)*( vx1 -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M0P])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ; - //(D.f[DIR_M0P])[ktw]=(one-q)/(one+q)*(f_BE-f_TW+(f_BE+f_TW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q) - c1over54 * drho; - //(D.f[DIR_M0P])[ktw]=zero; - } - - q = q_dirTW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1 +vx3)*/+c9o2*(-vx1 +vx3)*(-vx1 +vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P0M])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ; - //(D.f[DIR_P0M])[kbe]=(one-q)/(one+q)*(f_TW-f_BE+(f_TW+f_BE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q) - c1over54 * drho; - //(D.f[DIR_P0M])[kbe]=zero; - } - - q = q_dirTN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx2+vx3)*/+c9o2*( vx2+vx3)*( vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0MM])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ; - //(D.f[DIR_0MM])[kbs]=(one-q)/(one+q)*(f_TN-f_BS+(f_TN+f_BS-two*feq*om1)/(one-om1))*c1o2+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q) - c1over54 * drho; - //(D.f[DIR_0MM])[kbs]=zero; - } - - q = q_dirBS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( -vx2-vx3)*/+c9o2*( -vx2-vx3)*( -vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0PP])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ; - //(D.f[DIR_0PP])[ktn]=(one-q)/(one+q)*(f_BS-f_TN+(f_BS+f_TN-two*feq*om1)/(one-om1))*c1o2+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q) - c1over54 * drho; - //(D.f[DIR_0PP])[ktn]=zero; - } - - q = q_dirBN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx2-vx3)*/+c9o2*( vx2-vx3)*( vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0MP])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ; - //(D.f[DIR_0MP])[kts]=(one-q)/(one+q)*(f_BN-f_TS+(f_BN+f_TS-two*feq*om1)/(one-om1))*c1o2+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q) - c1over54 * drho; - //(D.f[DIR_0MP])[kts]=zero; - } - - q = q_dirTS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( -vx2+vx3)*/+c9o2*( -vx2+vx3)*( -vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0PM])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ; - //(D.f[DIR_0PM])[kbn]=(one-q)/(one+q)*(f_TS-f_BN+(f_TS+f_BN-two*feq*om1)/(one-om1))*c1o2+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q) - c1over54 * drho; - //(D.f[DIR_0PM])[kbn]=zero; - } - - q = q_dirTNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MMM])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ; - //(D.f[DIR_MMM])[kbsw]=(one-q)/(one+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q) - c1over216 * drho; - //(D.f[DIR_MMM])[kbsw]=zero; - } - - q = q_dirBSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PPP])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ; - //(D.f[DIR_PPP])[ktne]=(one-q)/(one+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q) - c1over216 * drho; - //(D.f[DIR_PPP])[ktne]=zero; - } - - q = q_dirBNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MMP])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ; - //(D.f[DIR_MMP])[ktsw]=(one-q)/(one+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q) - c1over216 * drho; - //(D.f[DIR_MMP])[ktsw]=zero; - } - - q = q_dirTSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PPM])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ; - //(D.f[DIR_PPM])[kbne]=(one-q)/(one+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q) - c1over216 * drho; - //(D.f[DIR_PPM])[kbne]=zero; - } - - q = q_dirTSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MPM])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ; - //(D.f[DIR_MPM])[kbnw]=(one-q)/(one+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q) - c1over216 * drho; - //(D.f[DIR_MPM])[kbnw]=zero; - } - - q = q_dirBNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PMP])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ; - //(D.f[DIR_PMP])[ktse]=(one-q)/(one+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q) - c1over216 * drho; - //(D.f[DIR_PMP])[ktse]=zero; - } - - q = q_dirBSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MPP])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ; - //(D.f[DIR_MPP])[ktnw]=(one-q)/(one+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q) - c1over216 * drho; - //(D.f[DIR_MPP])[ktnw]=zero; - } - - q = q_dirTNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PMM])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ; - //(D.f[DIR_PMM])[kbse]=(one-q)/(one+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q) - c1over216 * drho; - //(D.f[DIR_PMM])[kbse]=zero; - } - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QVelDeviceCompZeroPress27( - real* velocityX, - real* velocityY, - real* velocityZ, - real* distribution, - int* subgridDistanceIndices, - real* subgridDistances, - unsigned int numberOfBCnodes, - real omega, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - ////////////////////////////////////////////////////////////////////////// - //! The velocity boundary condition is executed in the following steps - //! - //////////////////////////////////////////////////////////////////////////////// - //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. - //! - const unsigned nodeIndex = getNodeIndex(); - - ////////////////////////////////////////////////////////////////////////// - //! - Run for all indices in size of boundary condition (numberOfBCnodes) - //! - if(nodeIndex < numberOfBCnodes) - { - - ////////////////////////////////////////////////////////////////////////// - //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref - //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> - //! - Distributions27 dist; - getPointersToDistributions(dist, distribution, numberOfLBnodes, isEvenTimestep); - - //////////////////////////////////////////////////////////////////////////////// - //! - Set local velocities - //! - real VeloX = velocityX[nodeIndex]; - real VeloY = velocityY[nodeIndex]; - real VeloZ = velocityZ[nodeIndex]; - - - //////////////////////////////////////////////////////////////////////////////// - //! - Set local subgrid distances (q's) - //! - SubgridDistances27 subgridD; - getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes); - - //////////////////////////////////////////////////////////////////////////////// - //! - Set neighbor indices (necessary for indirect addressing) - //! - unsigned int KQK = subgridDistanceIndices[nodeIndex]; - 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]; - - //////////////////////////////////////////////////////////////////////////////// - //! - Set local distributions - //! - real f_W = (dist.f[DIR_P00])[ke ]; - real f_E = (dist.f[DIR_M00])[kw ]; - real f_S = (dist.f[DIR_0P0])[kn ]; - real f_N = (dist.f[DIR_0M0])[ks ]; - real f_B = (dist.f[DIR_00P])[kt ]; - real f_T = (dist.f[DIR_00M])[kb ]; - real f_SW = (dist.f[DIR_PP0])[kne ]; - real f_NE = (dist.f[DIR_MM0])[ksw ]; - real f_NW = (dist.f[DIR_PM0])[kse ]; - real f_SE = (dist.f[DIR_MP0])[knw ]; - real f_BW = (dist.f[DIR_P0P])[kte ]; - real f_TE = (dist.f[DIR_M0M])[kbw ]; - real f_TW = (dist.f[DIR_P0M])[kbe ]; - real f_BE = (dist.f[DIR_M0P])[ktw ]; - real f_BS = (dist.f[DIR_0PP])[ktn ]; - real f_TN = (dist.f[DIR_0MM])[kbs ]; - real f_TS = (dist.f[DIR_0PM])[kbn ]; - real f_BN = (dist.f[DIR_0MP])[kts ]; - real f_BSW = (dist.f[DIR_PPP])[ktne ]; - real f_BNE = (dist.f[DIR_MMP])[ktsw ]; - real f_BNW = (dist.f[DIR_PMP])[ktse ]; - real f_BSE = (dist.f[DIR_MPP])[ktnw ]; - real f_TSW = (dist.f[DIR_PPM])[kbne ]; - real f_TNE = (dist.f[DIR_MMM])[kbsw ]; - real f_TNW = (dist.f[DIR_PMM])[kbse ]; - real f_TSE = (dist.f[DIR_MPM])[kbnw ]; - - //////////////////////////////////////////////////////////////////////////////// - //! - Calculate macroscopic quantities - //! - real 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 + ((dist.f[DIR_000])[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)) / (c1o1 + drho); - - - 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)) / (c1o1 + drho); - - 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)) / (c1o1 + drho); - - real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3) * (c1o1 + drho); - - //////////////////////////////////////////////////////////////////////////////// - //! - change the pointer to write the results in the correct array - //! - getPointersToDistributions(dist, distribution, numberOfLBnodes, !isEvenTimestep); - - //////////////////////////////////////////////////////////////////////////////// - //! - Update distributions with subgrid distance (q) between zero and one - real feq, q, velocityLB, velocityBC; - q = (subgridD.q[DIR_P00])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one - { - velocityLB = vx1; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - velocityBC = VeloX; - (dist.f[DIR_M00])[kw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_E, f_W, feq, omega, drho, velocityBC, c2o27); - } - - q = (subgridD.q[DIR_M00])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - velocityBC = -VeloX; - (dist.f[DIR_P00])[ke] = getInterpolatedDistributionForVeloWithPressureBC(q, f_W, f_E, feq, omega, drho, velocityBC, c2o27); - } - - q = (subgridD.q[DIR_0P0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - velocityBC = VeloY; - (dist.f[DIR_0M0])[ks] = getInterpolatedDistributionForVeloWithPressureBC(q, f_N, f_S, feq, omega, drho, velocityBC, c2o27); - } - - q = (subgridD.q[DIR_0M0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - velocityBC = -VeloY; - (dist.f[DIR_0P0])[kn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_S, f_N, feq, omega, drho, velocityBC, c2o27); - } - - q = (subgridD.q[DIR_00P])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - velocityBC = VeloZ; - (dist.f[DIR_00M])[kb] = getInterpolatedDistributionForVeloWithPressureBC(q, f_T, f_B, feq, omega, drho, velocityBC, c2o27); - } - - q = (subgridD.q[DIR_00M])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - velocityBC = -VeloZ; - (dist.f[DIR_00P])[kt] = getInterpolatedDistributionForVeloWithPressureBC(q, f_B, f_T, feq, omega, drho, velocityBC, c2o27); - } - - q = (subgridD.q[DIR_PP0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 + vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = VeloX + VeloY; - (dist.f[DIR_MM0])[ksw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NE, f_SW, feq, omega, drho, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_MM0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 - vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = -VeloX - VeloY; - (dist.f[DIR_PP0])[kne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SW, f_NE, feq, omega, drho, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_PM0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 - vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = VeloX - VeloY; - (dist.f[DIR_MP0])[knw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SE, f_NW, feq, omega, drho, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_MP0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 + vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = -VeloX + VeloY; - (dist.f[DIR_PM0])[kse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NW, f_SE, feq, omega, drho, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_P0P])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = VeloX + VeloZ; - (dist.f[DIR_M0M])[kbw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TE, f_BW, feq, omega, drho, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_M0M])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = -VeloX - VeloZ; - (dist.f[DIR_P0P])[kte] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BW, f_TE, feq, omega, drho, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_P0M])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = VeloX - VeloZ; - (dist.f[DIR_M0P])[ktw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BE, f_TW, feq, omega, drho, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_M0P])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = -VeloX + VeloZ; - (dist.f[DIR_P0M])[kbe] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TW, f_BE, feq, omega, drho, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_0PP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = VeloY + VeloZ; - (dist.f[DIR_0MM])[kbs] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TN, f_BS, feq, omega, drho, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_0MM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = -VeloY - VeloZ; - (dist.f[DIR_0PP])[ktn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BS, f_TN, feq, omega, drho, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_0PM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = VeloY - VeloZ; - (dist.f[DIR_0MP])[kts] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BN, f_TS, feq, omega, drho, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_0MP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = -VeloY + VeloZ; - (dist.f[DIR_0PM])[kbn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TS, f_BN, feq, omega, drho, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_PPP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 + vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - velocityBC = VeloX + VeloY + VeloZ; - (dist.f[DIR_MMM])[kbsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNE, f_BSW, feq, omega, drho, velocityBC, c1o216); - } - - q = (subgridD.q[DIR_MMM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 - vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - velocityBC = -VeloX - VeloY - VeloZ; - (dist.f[DIR_PPP])[ktne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSW, f_TNE, feq, omega, drho, velocityBC, c1o216); - } - - q = (subgridD.q[DIR_PPM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 + vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - velocityBC = VeloX + VeloY - VeloZ; - (dist.f[DIR_MMP])[ktsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNE, f_TSW, feq, omega, drho, velocityBC, c1o216); - } - - q = (subgridD.q[DIR_MMP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 - vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - velocityBC = -VeloX - VeloY + VeloZ; - (dist.f[DIR_PPM])[kbne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSW, f_BNE, feq, omega, drho, velocityBC, c1o216); - } - - q = (subgridD.q[DIR_PMP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 - vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - velocityBC = VeloX - VeloY + VeloZ; - (dist.f[DIR_MPM])[kbnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSE, f_BNW, feq, omega, drho, velocityBC, c1o216); - } - - q = (subgridD.q[DIR_MPM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 + vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - velocityBC = -VeloX + VeloY - VeloZ; - (dist.f[DIR_PMP])[ktse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNW, f_TSE, feq, omega, drho, velocityBC, c1o216); - } - - q = (subgridD.q[DIR_PMM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 - vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - velocityBC = VeloX - VeloY - VeloZ; - (dist.f[DIR_MPP])[ktnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSE, f_TNW, feq, omega, drho, velocityBC, c1o216); - } - - q = (subgridD.q[DIR_MPP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 + vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - velocityBC = -VeloX + VeloY + VeloZ; - (dist.f[DIR_PMM])[kbse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNW, f_BSE, feq, omega, drho, velocityBC, c1o216); - } - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QVelDeviceCompZeroPress1h27( - int inx, - int iny, - real* vx, - real* vy, - real* vz, - real* DD, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - real Phi, - real angularVelocity, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* coordX, - real* coordY, - real* coordZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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 VeloX = vx[k]; - //real VeloY = vy[k]; - //real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny) - //////////////////////////////////////////////////////////////////////////////// - real VeloX = cosf(Phi)*vx[k] - sinf(Phi)*vy[k]; - real VeloY = sinf(Phi)*vx[k] + cosf(Phi)*vy[k]; - //real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny) - //////////////////////////////////////////////////////////////////////////////////// - //Ship - real coord0X = 281.125f;//7.5f; - real coord0Y = 388.125f;//7.5f; - real ux = - angularVelocity * (coordY[k_Q[k]] - coord0Y); - real uy = angularVelocity * (coordX[k_Q[k]] - coord0X); - real VeloXpur=VeloX; - real VeloYpur=VeloY; - VeloX-=ux; - VeloY-=uy; - //////////////////////////////////////////////////////////////////////////////// - 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * 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]; - ////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real vx1, vx2, vx3, drho, feq, q, cu_sq; - ///////// equilibrium BC - cu_sq=c3o2*(VeloX*VeloX +VeloY*VeloY); - VeloXpur*=-c1o1; - VeloYpur*=-c1o1; - vx1=VeloX; - vx2=VeloY; - vx3=c0o1; - drho=c0o1; - - q = q_dirE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho+c3o1*( VeloXpur )+c9o2*( vx1 )*( vx1 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M00])[kw]= feq - c2o27 * drho; - } - - q = q_dirW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho+c3o1*(-VeloXpur )+c9o2*(-vx1 )*(-vx1 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P00])[ke]= feq - c2o27 * drho; - } - - q = q_dirN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho+c3o1*( VeloYpur )+c9o2*( vx2 )*( vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0M0])[ks]= feq - c2o27 * drho; - } - - q = q_dirS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho+c3o1*( -VeloYpur )+c9o2*( -vx2 )*( -vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0P0])[kn]= feq - c2o27 * drho; - } - - q = q_dirT[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho+c3o1*( vx3)+c9o2*( vx3)*( vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_00M])[kb]= feq - c2o27 * drho; - } - - q = q_dirB[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_00P])[kt]= feq - c2o27 * drho; - } - - q = q_dirNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*( VeloXpur+VeloYpur )+c9o2*( vx1+vx2 )*( vx1+vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MM0])[ksw]= feq - c1o54 * drho; - } - - q = q_dirSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*(-VeloXpur-VeloYpur )+c9o2*(-vx1-vx2 )*(-vx1-vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PP0])[kne]= feq - c1o54 * drho; - } - - q = q_dirSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*( VeloXpur-VeloYpur )+c9o2*( vx1-vx2 )*( vx1-vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MP0])[knw]= feq - c1o54 * drho; - } - - q = q_dirNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*(-VeloXpur+VeloYpur )+c9o2*(-vx1+vx2 )*(-vx1+vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PM0])[kse]= feq - c1o54 * drho; - } - - q = q_dirTE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*( VeloXpur +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M0M])[kbw]= feq - c1o54 * drho; - } - - q = q_dirBW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*(-VeloXpur -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P0P])[kte]= feq - c1o54 * drho; - } - - q = q_dirBE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*( VeloXpur -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M0P])[ktw]= feq - c1o54 * drho; - } - - q = q_dirTW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*(-VeloXpur +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P0M])[kbe]= feq - c1o54 * drho; - } - - q = q_dirTN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*( VeloYpur+vx3)+c9o2*( vx2+vx3)*( vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0MM])[kbs]= feq - c1o54 * drho; - } - - q = q_dirBS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*( -VeloYpur-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0PP])[ktn]= feq - c1o54 * drho; - } - - q = q_dirBN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*( VeloYpur-vx3)+c9o2*( vx2-vx3)*( vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0MP])[kts]= feq - c1o54 * drho; - } - - q = q_dirTS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*( -VeloYpur+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0PM])[kbn]= feq - c1o54 * drho; - } - - q = q_dirTNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c3o1*( VeloXpur+VeloYpur+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MMM])[kbsw]= feq - c1o216 * drho; - } - - q = q_dirBSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c3o1*(-VeloXpur-VeloYpur-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PPP])[ktne]= feq - c1o216 * drho; - } - - q = q_dirBNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c3o1*( VeloXpur+VeloYpur-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MMP])[ktsw]= feq - c1o216 * drho; - } - - q = q_dirTSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c3o1*(-VeloXpur-VeloYpur+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PPM])[kbne]= feq - c1o216 * drho; - } - - q = q_dirTSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c3o1*( VeloXpur-VeloYpur+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MPM])[kbnw]= feq - c1o216 * drho; - } - - q = q_dirBNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c3o1*(-VeloXpur+VeloYpur-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PMP])[ktse]= feq - c1o216 * drho; - } - - q = q_dirBSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c3o1*( VeloXpur-VeloYpur-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MPP])[ktnw]= feq - c1o216 * drho; - } - - q = q_dirTNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c3o1*(-VeloXpur+VeloYpur+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PMM])[kbse]= feq - c1o216 * drho; - } - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void LB_BC_Vel_West_27( - int nx, - int ny, - int nz, - int itz, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - bool isEvenTimestep, - real u0x, - unsigned int grid_nx, - unsigned int grid_ny, - real om) -{ - //thread-index - unsigned int ity = blockIdx.x; - unsigned int itx = threadIdx.x; - - unsigned int k, nxny; // Zugriff auf arrays im device - - unsigned int x = itx + STARTOFFX; // Globaler x-Index - unsigned int y = ity + STARTOFFY; // Globaler y-Index - unsigned int z = itz + STARTOFFZ; // Globaler z-Index - - k = nx*(ny*z + y) + x; - nxny = nx*ny; - unsigned int k1 = k+nxny; - - if( bcMatD[k] == GEO_VELO ) - { - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int kzero= k; - unsigned int ke = k; - unsigned int kw = neighborX[k]; - unsigned int kn = k; - unsigned int ks = neighborY[k]; - unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = k; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = k; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = k; - 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 = k; - unsigned int kbsw = neighborZ[ksw]; - //unsigned int kzero= k; - //unsigned int ke = k; - //unsigned int kw = k + 1; - //unsigned int kn = k; - //unsigned int ks = k + nx; - //unsigned int kt = k; - //unsigned int kb = k + nxny; - //unsigned int ksw = k + nx + 1; - //unsigned int kne = k; - //unsigned int kse = k + nx; - //unsigned int knw = k + 1; - //unsigned int kbw = k + nxny + 1; - //unsigned int kte = k; - //unsigned int kbe = k + nxny; - //unsigned int ktw = k + 1; - //unsigned int kbs = k + nxny + nx; - //unsigned int ktn = k; - //unsigned int kbn = k + nxny; - //unsigned int kts = k + nx; - //unsigned int ktse = k + nx; - //unsigned int kbnw = k + nxny + 1; - //unsigned int ktnw = k + 1; - //unsigned int kbse = k + nxny + nx; - //unsigned int ktsw = k + nx + 1; - //unsigned int kbne = k + nxny; - //unsigned int ktne = k; - //unsigned int kbsw = k + nxny + nx + 1; - //////////////////////////////////////////////////////////////////////////////// - //index1 - unsigned int k1zero= k1; - unsigned int k1e = k1; - unsigned int k1w = neighborX[k1]; - unsigned int k1n = k1; - unsigned int k1s = neighborY[k1]; - unsigned int k1t = k1; - unsigned int k1b = neighborZ[k1]; - unsigned int k1sw = neighborY[k1w]; - unsigned int k1ne = k1; - unsigned int k1se = k1s; - unsigned int k1nw = k1w; - unsigned int k1bw = neighborZ[k1w]; - unsigned int k1te = k1; - unsigned int k1be = k1b; - unsigned int k1tw = k1w; - unsigned int k1bs = neighborZ[k1s]; - unsigned int k1tn = k1; - unsigned int k1bn = k1b; - unsigned int k1ts = k1s; - unsigned int k1tse = k1s; - unsigned int k1bnw = k1bw; - unsigned int k1tnw = k1w; - unsigned int k1bse = k1bs; - unsigned int k1tsw = k1sw; - unsigned int k1bne = k1b; - unsigned int k1tne = k1; - unsigned int k1bsw = neighborZ[k1sw]; - //unsigned int k1zero= k1; - //unsigned int k1e = k1; - //unsigned int k1w = k1 + 1; - //unsigned int k1n = k1; - //unsigned int k1s = k1 + nx; - //unsigned int k1t = k1; - //unsigned int k1b = k1 + nxny; - //unsigned int k1sw = k1 + nx + 1; - //unsigned int k1ne = k1; - //unsigned int k1se = k1 + nx; - //unsigned int k1nw = k1 + 1; - //unsigned int k1bw = k1 + nxny + 1; - //unsigned int k1te = k1; - //unsigned int k1be = k1 + nxny; - //unsigned int k1tw = k1 + 1; - //unsigned int k1bs = k1 + nxny + nx; - //unsigned int k1tn = k1; - //unsigned int k1bn = k1 + nxny; - //unsigned int k1ts = k1 + nx; - //unsigned int k1tse = k1 + nx; - //unsigned int k1bnw = k1 + nxny + 1; - //unsigned int k1tnw = k1 + 1; - //unsigned int k1bse = k1 + nxny + nx; - //unsigned int k1tsw = k1 + nx + 1; - //unsigned int k1bne = k1 + nxny; - //unsigned int k1tne = k1; - //unsigned int k1bsw = k1 + nxny + nx + 1; - //////////////////////////////////////////////////////////////////////////////// - real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO, - f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW; - - f1_W = (D.f[DIR_P00])[k1e ]; - f1_E = (D.f[DIR_M00])[k1w ]; - f1_S = (D.f[DIR_0P0])[k1n ]; - f1_N = (D.f[DIR_0M0])[k1s ]; - f1_B = (D.f[DIR_00P])[k1t ]; - f1_T = (D.f[DIR_00M])[k1b ]; - f1_SW = (D.f[DIR_PP0])[k1ne ]; - f1_NE = (D.f[DIR_MM0])[k1sw ]; - f1_NW = (D.f[DIR_PM0])[k1se ]; - f1_SE = (D.f[DIR_MP0])[k1nw ]; - f1_BW = (D.f[DIR_P0P])[k1te ]; - f1_TE = (D.f[DIR_M0M])[k1bw ]; - f1_TW = (D.f[DIR_P0M])[k1be ]; - f1_BE = (D.f[DIR_M0P])[k1tw ]; - f1_BS = (D.f[DIR_0PP])[k1tn ]; - f1_TN = (D.f[DIR_0MM])[k1bs ]; - f1_TS = (D.f[DIR_0PM])[k1bn ]; - f1_BN = (D.f[DIR_0MP])[k1ts ]; - f1_ZERO = (D.f[DIR_000])[k1zero]; - f1_BSW = (D.f[DIR_PPP])[k1tne ]; - f1_BNE = (D.f[DIR_MMP])[k1tsw ]; - f1_BNW = (D.f[DIR_PMP])[k1tse ]; - f1_BSE = (D.f[DIR_MPP])[k1tnw ]; - f1_TSW = (D.f[DIR_PPM])[k1bne ]; - f1_TNE = (D.f[DIR_MMM])[k1bsw ]; - f1_TNW = (D.f[DIR_PMM])[k1bse ]; - f1_TSE = (D.f[DIR_MPM])[k1bnw ]; - - real drho1 = f1_ZERO+f1_E+f1_W+f1_N+f1_S+f1_T+f1_B+f1_NE+f1_SW+f1_SE+f1_NW+f1_TE+f1_BW+f1_BE+f1_TW+f1_TN+f1_BS+f1_BN+f1_TS+ - f1_TNE+f1_TSW+f1_TSE+f1_TNW+f1_BNE+f1_BSW+f1_BSE+f1_BNW; - - __syncthreads(); - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real drho = drho1; - real vx1 = c0o1; - real vx2 = c0o1; - real vx3 = u0x; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - (D.f[DIR_000])[kzero] = c8o27* (drho-cu_sq); - (D.f[DIR_P00])[ke ] = c2o27* (drho+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - (D.f[DIR_M00])[kw ] = c2o27* (drho+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - (D.f[DIR_0P0])[kn ] = c2o27* (drho+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - (D.f[DIR_0M0])[ks ] = c2o27* (drho+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - (D.f[DIR_00P])[kt ] = c2o27* (drho+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - (D.f[DIR_00M])[kb ] = c2o27* (drho+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - (D.f[DIR_PP0])[kne ] = c1o54* (drho+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - (D.f[DIR_MM0])[ksw ] = c1o54* (drho+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - (D.f[DIR_PM0])[kse ] = c1o54* (drho+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - (D.f[DIR_MP0])[knw ] = c1o54* (drho+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - (D.f[DIR_P0P])[kte ] = c1o54* (drho+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - (D.f[DIR_M0M])[kbw ] = c1o54* (drho+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - (D.f[DIR_P0M])[kbe ] = c1o54* (drho+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - (D.f[DIR_M0P])[ktw ] = c1o54* (drho+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - (D.f[DIR_0PP])[ktn ] = c1o54* (drho+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - (D.f[DIR_0MM])[kbs ] = c1o54* (drho+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - (D.f[DIR_0PM])[kbn ] = c1o54* (drho+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - (D.f[DIR_0MP])[kts ] = c1o54* (drho+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - (D.f[DIR_PPP])[ktne ] = c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - (D.f[DIR_MMM])[kbsw ] = c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - (D.f[DIR_PPM])[kbne ] = c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - (D.f[DIR_MMP])[ktsw ] = c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - (D.f[DIR_PMP])[ktse ] = c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - (D.f[DIR_MPM])[kbnw ] = c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - (D.f[DIR_PMM])[kbse ] = c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - (D.f[DIR_MPP])[ktnw ] = c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - } - __syncthreads(); -} -////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QVelDevPlainBB27( - real* velocityX, - real* velocityY, - real* velocityZ, - real* distributions, - int* subgridDistanceIndices, - real* subgridDistances, - uint numberOfBCnodes, - uint* neighborX, - uint* neighborY, - uint* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - ////////////////////////////////////////////////////////////////////////// - //! The velocity boundary condition is executed in the following steps - //! - //////////////////////////////////////////////////////////////////////////////// - //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. - //! - const unsigned nodeIndex = getNodeIndex(); - - ////////////////////////////////////////////////////////////////////////// - // run for all indices in size of boundary condition (numberOfBCnodes) - if(nodeIndex < numberOfBCnodes) - { - ////////////////////////////////////////////////////////////////////////// - //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref - //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> - //! - Distributions27 dist; - getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); - - //////////////////////////////////////////////////////////////////////////////// - //! - Set local velocities - //! - real VeloX = velocityX[nodeIndex]; - real VeloY = velocityY[nodeIndex]; - real VeloZ = velocityZ[nodeIndex]; - - //////////////////////////////////////////////////////////////////////////////// - //! - Set local subgrid distances (q's) - //! - SubgridDistances27 subgridD; - getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes); - - //////////////////////////////////////////////////////////////////////////////// - //! - Set neighbor indices (necessary for indirect addressing) - //! - uint indexOfBCnode = subgridDistanceIndices[nodeIndex]; - uint ke = indexOfBCnode; - uint kw = neighborX[indexOfBCnode]; - uint kn = indexOfBCnode; - uint ks = neighborY[indexOfBCnode]; - uint kt = indexOfBCnode; - uint kb = neighborZ[indexOfBCnode]; - uint ksw = neighborY[kw]; - uint kne = indexOfBCnode; - uint kse = ks; - uint knw = kw; - uint kbw = neighborZ[kw]; - uint kte = indexOfBCnode; - uint kbe = kb; - uint ktw = kw; - uint kbs = neighborZ[ks]; - uint ktn = indexOfBCnode; - uint kbn = kb; - uint kts = ks; - uint ktse = ks; - uint kbnw = kbw; - uint ktnw = kw; - uint kbse = kbs; - uint ktsw = ksw; - uint kbne = kb; - uint ktne = indexOfBCnode; - uint kbsw = neighborZ[ksw]; - - //////////////////////////////////////////////////////////////////////////////// - //! - Set local distributions - //! - real f_W = (dist.f[DIR_P00])[ke ]; - real f_E = (dist.f[DIR_M00])[kw ]; - real f_S = (dist.f[DIR_0P0])[kn ]; - real f_N = (dist.f[DIR_0M0])[ks ]; - real f_B = (dist.f[DIR_00P])[kt ]; - real f_T = (dist.f[DIR_00M])[kb ]; - real f_SW = (dist.f[DIR_PP0])[kne ]; - real f_NE = (dist.f[DIR_MM0])[ksw ]; - real f_NW = (dist.f[DIR_PM0])[kse ]; - real f_SE = (dist.f[DIR_MP0])[knw ]; - real f_BW = (dist.f[DIR_P0P])[kte ]; - real f_TE = (dist.f[DIR_M0M])[kbw ]; - real f_TW = (dist.f[DIR_P0M])[kbe ]; - real f_BE = (dist.f[DIR_M0P])[ktw ]; - real f_BS = (dist.f[DIR_0PP])[ktn ]; - real f_TN = (dist.f[DIR_0MM])[kbs ]; - real f_TS = (dist.f[DIR_0PM])[kbn ]; - real f_BN = (dist.f[DIR_0MP])[kts ]; - real f_BSW = (dist.f[DIR_PPP])[ktne ]; - real f_BNE = (dist.f[DIR_MMP])[ktsw ]; - real f_BNW = (dist.f[DIR_PMP])[ktse ]; - real f_BSE = (dist.f[DIR_MPP])[ktnw ]; - real f_TSW = (dist.f[DIR_PPM])[kbne ]; - real f_TNE = (dist.f[DIR_MMM])[kbsw ]; - real f_TNW = (dist.f[DIR_PMM])[kbse ]; - real f_TSE = (dist.f[DIR_MPM])[kbnw ]; - - //////////////////////////////////////////////////////////////////////////////// - //! - change the pointer to write the results in the correct array - //! - getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep); - - //////////////////////////////////////////////////////////////////////////////// - //! - rewrite distributions if there is a sub-grid distance (q) in same direction - real q; - q = (subgridD.q[DIR_P00])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_M00])[kw ]=f_E + c4o9 * (-VeloX); - q = (subgridD.q[DIR_M00])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_P00])[ke ]=f_W + c4o9 * ( VeloX); - q = (subgridD.q[DIR_0P0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_0M0])[ks ]=f_N + c4o9 * (-VeloY); - q = (subgridD.q[DIR_0M0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_0P0])[kn ]=f_S + c4o9 * ( VeloY); - q = (subgridD.q[DIR_00P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_00M])[kb ]=f_T + c4o9 * (-VeloZ); - q = (subgridD.q[DIR_00M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_00P])[kt ]=f_B + c4o9 * ( VeloZ); - q = (subgridD.q[DIR_PP0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_MM0])[ksw ]=f_NE + c1o9 * (-VeloX - VeloY); - q = (subgridD.q[DIR_MM0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_PP0])[kne ]=f_SW + c1o9 * ( VeloX + VeloY); - q = (subgridD.q[DIR_PM0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_MP0])[knw ]=f_SE + c1o9 * (-VeloX + VeloY); - q = (subgridD.q[DIR_MP0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_PM0])[kse ]=f_NW + c1o9 * ( VeloX - VeloY); - q = (subgridD.q[DIR_P0P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_M0M])[kbw ]=f_TE + c1o9 * (-VeloX - VeloZ); - q = (subgridD.q[DIR_M0M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_P0P])[kte ]=f_BW + c1o9 * ( VeloX + VeloZ); - q = (subgridD.q[DIR_P0M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_M0P])[ktw ]=f_BE + c1o9 * (-VeloX + VeloZ); - q = (subgridD.q[DIR_M0P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_P0M])[kbe ]=f_TW + c1o9 * ( VeloX - VeloZ); - q = (subgridD.q[DIR_0PP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_0MM])[kbs ]=f_TN + c1o9 * (-VeloY - VeloZ); - q = (subgridD.q[DIR_0MM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_0PP])[ktn ]=f_BS + c1o9 * ( VeloY + VeloZ); - q = (subgridD.q[DIR_0PM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_0MP])[kts ]=f_BN + c1o9 * (-VeloY + VeloZ); - q = (subgridD.q[DIR_0MP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_0PM])[kbn ]=f_TS + c1o9 * ( VeloY - VeloZ); - q = (subgridD.q[DIR_PPP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_MMM])[kbsw]=f_TNE + c1o36 * (-VeloX - VeloY - VeloZ); - q = (subgridD.q[DIR_MMM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_PPP])[ktne]=f_BSW + c1o36 * ( VeloX + VeloY + VeloZ); - q = (subgridD.q[DIR_PPM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_MMP])[ktsw]=f_BNE + c1o36 * (-VeloX - VeloY + VeloZ); - q = (subgridD.q[DIR_MMP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_PPM])[kbne]=f_TSW + c1o36 * ( VeloX + VeloY - VeloZ); - q = (subgridD.q[DIR_PMP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_MPM])[kbnw]=f_TSE + c1o36 * (-VeloX + VeloY - VeloZ); - q = (subgridD.q[DIR_MPM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_PMP])[ktse]=f_BNW + c1o36 * ( VeloX - VeloY + VeloZ); - q = (subgridD.q[DIR_PMM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_MPP])[ktnw]=f_BSE + c1o36 * (-VeloX + VeloY + VeloZ); - q = (subgridD.q[DIR_MPP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[DIR_PMM])[kbse]=f_TNW + c1o36 * ( VeloX - VeloY - VeloZ); - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QVelDevCouette27( - real* vx, - real* vy, - real* vz, - real* DD, - 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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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 VeloX = vx[k]; - real VeloY = vy[k]; - real VeloZ = vz[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 = &QQ[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * 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[DIR_P00])[ke ]; - real f_E = (D.f[DIR_M00])[kw ]; - real f_S = (D.f[DIR_0P0])[kn ]; - real f_N = (D.f[DIR_0M0])[ks ]; - real f_B = (D.f[DIR_00P])[kt ]; - real f_T = (D.f[DIR_00M])[kb ]; - real f_SW = (D.f[DIR_PP0])[kne ]; - real f_NE = (D.f[DIR_MM0])[ksw ]; - real f_NW = (D.f[DIR_PM0])[kse ]; - real f_SE = (D.f[DIR_MP0])[knw ]; - real f_BW = (D.f[DIR_P0P])[kte ]; - real f_TE = (D.f[DIR_M0M])[kbw ]; - real f_TW = (D.f[DIR_P0M])[kbe ]; - real f_BE = (D.f[DIR_M0P])[ktw ]; - real f_BS = (D.f[DIR_0PP])[ktn ]; - real f_TN = (D.f[DIR_0MM])[kbs ]; - real f_TS = (D.f[DIR_0PM])[kbn ]; - real f_BN = (D.f[DIR_0MP])[kts ]; - real f_BSW = (D.f[DIR_PPP])[ktne ]; - real f_BNE = (D.f[DIR_MMP])[ktsw ]; - real f_BNW = (D.f[DIR_PMP])[ktse ]; - real f_BSE = (D.f[DIR_MPP])[ktnw ]; - real f_TSW = (D.f[DIR_PPM])[kbne ]; - real f_TNE = (D.f[DIR_MMM])[kbsw ]; - real f_TNW = (D.f[DIR_PMM])[kbse ]; - real f_TSE = (D.f[DIR_MPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - /////// FlowDirection Y !!!!!!!!!! /////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //calculate velocity - //real vx1 = ((f_TNE-f_BSW)+(f_BSE-f_TNW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)) + (((f_NE-f_SW)+(f_TE-f_BW))+((f_SE-f_NW)+(f_BE-f_TW))) + (f_E-f_W); - real vx2 = ((f_TNE-f_BSW)+(f_TNW-f_BSE)+(f_BNE-f_TSW)+(f_BNW-f_TSE)) + (((f_NE-f_SW)+(f_TN-f_BS))+((f_BN-f_TS)+(f_NW-f_SE))) + (f_N-f_S); - //real vx3 = ((f_TNE-f_BSW)+(f_TNW-f_BSE)+(f_TSW-f_BNE)+(f_TSE-f_BNW)) + (((f_TE-f_BW)+(f_TN-f_BS))+((f_TW-f_BE)+(f_TS-f_BN))) + (f_T-f_B); - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //constant - real on=c0o1;//c1o2;//one; - real ms=-c6o1; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //2nd order moment - real kxxMyyFromfcNEQ = c0o1;//-c3o2 * (f_BW+f_W+f_TW-f_BS-f_S-f_TS-f_BN-f_N-f_TN+f_BE+f_E+f_TE-(vx1*vx1-vx2*vx2)); //all DIR_P00+DIR_M00 minus all DIR_0P0+DIR_0M0 (no combinations of xy left) - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //set distributions - real q; - q = q_dirE[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_M00])[kw ]=f_E + ms*c2o27 * VeloX; - q = q_dirW[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_P00])[ke ]=f_W - ms*c2o27 * VeloX; - q = q_dirN[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_0M0])[ks ]=f_N + ms*c2o27 * VeloY; - q = q_dirS[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_0P0])[kn ]=f_S - ms*c2o27 * VeloY; - q = q_dirT[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_00M])[kb ]=f_T + ms*c2o27 * VeloZ - c3o2*c2o27*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on; - q = q_dirB[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_00P])[kt ]=f_B - ms*c2o27 * VeloZ; - q = q_dirNE[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_MM0])[ksw ]=f_NE + ms*c1o54 * VeloX + ms*c1o54 * VeloY; - q = q_dirSW[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_PP0])[kne ]=f_SW - ms*c1o54 * VeloX - ms*c1o54 * VeloY; - q = q_dirSE[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_MP0])[knw ]=f_SE + ms*c1o54 * VeloX - ms*c1o54 * VeloY; - q = q_dirNW[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_PM0])[kse ]=f_NW - ms*c1o54 * VeloX + ms*c1o54 * VeloY; - q = q_dirTE[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_M0M])[kbw ]=f_TE + ms*c1o54 * VeloX + ms*c1o54 * VeloZ - c3o2*c1o54*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on-c1o12*kxxMyyFromfcNEQ; - q = q_dirBW[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_P0P])[kte ]=f_BW - ms*c1o54 * VeloX - ms*c1o54 * VeloZ; - q = q_dirBE[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_M0P])[ktw ]=f_BE + ms*c1o54 * VeloX - ms*c1o54 * VeloZ; - q = q_dirTW[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_P0M])[kbe ]=f_TW - ms*c1o54 * VeloX + ms*c1o54 * VeloZ - c3o2*c1o54*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on-c1o12*kxxMyyFromfcNEQ; - q = q_dirTN[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_0MM])[kbs ]=f_TN + ms*c1o54 * VeloY + ms*c1o54 * VeloZ + c3o1*c1o54*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on+c1o12*kxxMyyFromfcNEQ; - q = q_dirBS[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_0PP])[ktn ]=f_BS - ms*c1o54 * VeloY - ms*c1o54 * VeloZ; - q = q_dirBN[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_0MP])[kts ]=f_BN + ms*c1o54 * VeloY - ms*c1o54 * VeloZ; - q = q_dirTS[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_0PM])[kbn ]=f_TS - ms*c1o54 * VeloY + ms*c1o54 * VeloZ + c3o1*c1o54*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on+c1o12*kxxMyyFromfcNEQ; - q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_MMM])[kbsw]=f_TNE + ms*c1o216 * VeloX + ms*c1o216 * VeloY + ms*c1o216 * VeloZ + c3o1*c1o216*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on; - q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_PPP])[ktne]=f_BSW - ms*c1o216 * VeloX - ms*c1o216 * VeloY - ms*c1o216 * VeloZ; - q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_MMP])[ktsw]=f_BNE + ms*c1o216 * VeloX + ms*c1o216 * VeloY - ms*c1o216 * VeloZ; - q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_PPM])[kbne]=f_TSW - ms*c1o216 * VeloX - ms*c1o216 * VeloY + ms*c1o216 * VeloZ + c3o1*c1o216*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on; - q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_MPM])[kbnw]=f_TSE + ms*c1o216 * VeloX - ms*c1o216 * VeloY + ms*c1o216 * VeloZ + c3o1*c1o216*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on; - q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_PMP])[ktse]=f_BNW - ms*c1o216 * VeloX + ms*c1o216 * VeloY - ms*c1o216 * VeloZ; - q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_MPP])[ktnw]=f_BSE + ms*c1o216 * VeloX - ms*c1o216 * VeloY - ms*c1o216 * VeloZ; - q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D.f[DIR_PMM])[kbse]=f_TNW - ms*c1o216 * VeloX + ms*c1o216 * VeloY + ms*c1o216 * VeloZ + c3o1*c1o216*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on; - //q = q_dirE[k]; if (q>=zero && q<=one) (D.f[DIR_M00])[kw ]=f_E + ms*c2over27 * VeloX; - // q = q_dirW[k]; if (q>=zero && q<=one) (D.f[DIR_P00])[ke ]=f_W - ms*c2over27 * VeloX; - // q = q_dirN[k]; if (q>=zero && q<=one) (D.f[DIR_0M0])[ks ]=f_N + ms*c2over27 * VeloY; - // q = q_dirS[k]; if (q>=zero && q<=one) (D.f[DIR_0P0])[kn ]=f_S - ms*c2over27 * VeloY; - //q = q_dirT[k]; if (q>=zero && q<=one) (D.f[DIR_00M])[kb ]=f_T + ms*c2over27 * VeloZ - c1o9*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on; - // q = q_dirB[k]; if (q>=zero && q<=one) (D.f[DIR_00P])[kt ]=f_B - ms*c2over27 * VeloZ; - // q = q_dirNE[k]; if (q>=zero && q<=one) (D.f[DIR_MM0])[ksw ]=f_NE + ms*c1over54 * VeloX + ms*c1over54 * VeloY; - //q = q_dirSW[k]; if (q>=zero && q<=one) (D.f[DIR_PP0])[kne ]=f_SW - ms*c1over54 * VeloX - ms*c1over54 * VeloY; - //q = q_dirSE[k]; if (q>=zero && q<=one) (D.f[DIR_MP0])[knw ]=f_SE + ms*c1over54 * VeloX - ms*c1over54 * VeloY; - //q = q_dirNW[k]; if (q>=zero && q<=one) (D.f[DIR_PM0])[kse ]=f_NW - ms*c1over54 * VeloX + ms*c1over54 * VeloY; - //q = q_dirTE[k]; if (q>=zero && q<=one) (D.f[DIR_M0M])[kbw ]=f_TE + ms*c1over54 * VeloX + ms*c1over54 * VeloZ - c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on; - //q = q_dirBW[k]; if (q>=zero && q<=one) (D.f[DIR_P0P])[kte ]=f_BW - ms*c1over54 * VeloX - ms*c1over54 * VeloZ; - //q = q_dirBE[k]; if (q>=zero && q<=one) (D.f[DIR_M0P])[ktw ]=f_BE + ms*c1over54 * VeloX - ms*c1over54 * VeloZ; - //q = q_dirTW[k]; if (q>=zero && q<=one) (D.f[DIR_P0M])[kbe ]=f_TW - ms*c1over54 * VeloX + ms*c1over54 * VeloZ - c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on; - //q = q_dirTN[k]; if (q>=zero && q<=one) (D.f[DIR_0MM])[kbs ]=f_TN + ms*c1over54 * VeloY + ms*c1over54 * VeloZ + c1o2*c1o9*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on; - //q = q_dirBS[k]; if (q>=zero && q<=one) (D.f[DIR_0PP])[ktn ]=f_BS - ms*c1over54 * VeloY - ms*c1over54 * VeloZ; - //q = q_dirBN[k]; if (q>=zero && q<=one) (D.f[DIR_0MP])[kts ]=f_BN + ms*c1over54 * VeloY - ms*c1over54 * VeloZ; - //q = q_dirTS[k]; if (q>=zero && q<=one) (D.f[DIR_0PM])[kbn ]=f_TS - ms*c1over54 * VeloY + ms*c1over54 * VeloZ + c1o2*c1o9*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on; - // q = q_dirTNE[k]; if (q>=zero && q<=one) (D.f[DIR_MMM])[kbsw]=f_TNE + ms*c1over216 * VeloX + ms*c1over216 * VeloY + ms*c1over216 * VeloZ + c1o2*c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on; - // q = q_dirBSW[k]; if (q>=zero && q<=one) (D.f[DIR_PPP])[ktne]=f_BSW - ms*c1over216 * VeloX - ms*c1over216 * VeloY - ms*c1over216 * VeloZ; - // q = q_dirBNE[k]; if (q>=zero && q<=one) (D.f[DIR_MMP])[ktsw]=f_BNE + ms*c1over216 * VeloX + ms*c1over216 * VeloY - ms*c1over216 * VeloZ; - // q = q_dirTSW[k]; if (q>=zero && q<=one) (D.f[DIR_PPM])[kbne]=f_TSW - ms*c1over216 * VeloX - ms*c1over216 * VeloY + ms*c1over216 * VeloZ + c1o2*c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on; - // q = q_dirTSE[k]; if (q>=zero && q<=one) (D.f[DIR_MPM])[kbnw]=f_TSE + ms*c1over216 * VeloX - ms*c1over216 * VeloY + ms*c1over216 * VeloZ + c1o2*c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on; - // q = q_dirBNW[k]; if (q>=zero && q<=one) (D.f[DIR_PMP])[ktse]=f_BNW - ms*c1over216 * VeloX + ms*c1over216 * VeloY - ms*c1over216 * VeloZ; - // q = q_dirBSE[k]; if (q>=zero && q<=one) (D.f[DIR_MPP])[ktnw]=f_BSE + ms*c1over216 * VeloX - ms*c1over216 * VeloY - ms*c1over216 * VeloZ; - // q = q_dirTNW[k]; if (q>=zero && q<=one) (D.f[DIR_PMM])[kbse]=f_TNW - ms*c1over216 * VeloX + ms*c1over216 * VeloY + ms*c1over216 * VeloZ + c1o2*c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QVelDev1h27( - int inx, - int iny, - real* vx, - real* vy, - real* vz, - real* DD, - int* k_Q, - real* QQ, - unsigned int numberOfBCnodes, - real om1, - real Phi, - real angularVelocity, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* coordX, - real* coordY, - real* coordZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - Distributions27 D; - if (isEvenTimestep==true) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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 VeloX = cosf(Phi)*vx[k] - sinf(Phi)*vy[k]; - real VeloY = sinf(Phi)*vx[k] + cosf(Phi)*vy[k]; - //real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny) - //////////////////////////////////////////////////////////////////////////////////// - //Ship - real coord0X = 281.125f;//7.5f; - real coord0Y = 388.125f;//7.5f; - real ux = - angularVelocity * (coordY[k_Q[k]] - coord0Y); - real uy = angularVelocity * (coordX[k_Q[k]] - coord0X); - real VeloXpur=VeloX; - real VeloYpur=VeloY; - VeloX-=ux; - VeloY-=uy; - //////////////////////////////////////////////////////////////////////////////// - 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * 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]; - //unsigned int nxny = nx*ny; - //unsigned int kzero= KQK; - //unsigned int ke = KQK; - //unsigned int kw = KQK + 1; - //unsigned int kn = KQK; - //unsigned int ks = KQK + nx; - //unsigned int kt = KQK; - //unsigned int kb = KQK + nxny; - //unsigned int ksw = KQK + nx + 1; - //unsigned int kne = KQK; - //unsigned int kse = KQK + nx; - //unsigned int knw = KQK + 1; - //unsigned int kbw = KQK + nxny + 1; - //unsigned int kte = KQK; - //unsigned int kbe = KQK + nxny; - //unsigned int ktw = KQK + 1; - //unsigned int kbs = KQK + nxny + nx; - //unsigned int ktn = KQK; - //unsigned int kbn = KQK + nxny; - //unsigned int kts = KQK + nx; - //unsigned int ktse = KQK + nx; - //unsigned int kbnw = KQK + nxny + 1; - //unsigned int ktnw = KQK + 1; - //unsigned int kbse = KQK + nxny + nx; - //unsigned int ktsw = KQK + nx + 1; - //unsigned int kbne = KQK + nxny; - //unsigned int ktne = KQK; - //unsigned int kbsw = KQK + nxny + nx + 1; - //////////////////////////////////////////////////////////////////////////////// - //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[DIR_P00])[ke ]; - //f_E = (D.f[DIR_M00])[kw ]; - //f_S = (D.f[DIR_0P0])[kn ]; - //f_N = (D.f[DIR_0M0])[ks ]; - //f_B = (D.f[DIR_00P])[kt ]; - //f_T = (D.f[DIR_00M])[kb ]; - //f_SW = (D.f[DIR_PP0])[kne ]; - //f_NE = (D.f[DIR_MM0])[ksw ]; - //f_NW = (D.f[DIR_PM0])[kse ]; - //f_SE = (D.f[DIR_MP0])[knw ]; - //f_BW = (D.f[DIR_P0P])[kte ]; - //f_TE = (D.f[DIR_M0M])[kbw ]; - //f_TW = (D.f[DIR_P0M])[kbe ]; - //f_BE = (D.f[DIR_M0P])[ktw ]; - //f_BS = (D.f[DIR_0PP])[ktn ]; - //f_TN = (D.f[DIR_0MM])[kbs ]; - //f_TS = (D.f[DIR_0PM])[kbn ]; - //f_BN = (D.f[DIR_0MP])[kts ]; - //f_BSW = (D.f[DIR_PPP])[ktne ]; - //f_BNE = (D.f[DIR_MMP])[ktsw ]; - //f_BNW = (D.f[DIR_PMP])[ktse ]; - //f_BSE = (D.f[DIR_MPP])[ktnw ]; - //f_TSW = (D.f[DIR_PPM])[kbne ]; - //f_TNE = (D.f[DIR_MMM])[kbsw ]; - //f_TNW = (D.f[DIR_PMM])[kbse ]; - //f_TSE = (D.f[DIR_MPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - real /*vx1, vx2,*/ vx3, drho, feq, q, cu_sq; - //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[DIR_000])[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); - - //cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - ////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[DIR_000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - //ToDo anders Klammern - - //q = q_dirE[k]; - //if (q>=zero && q<=one) - //{ - // feq=c2over27* (drho/*+three*( vx1 )*/+c9over2*( vx1 )*( vx1 )-cu_sq); - // (D.f[DIR_M00])[kw]=(one-q)/(one+q)*(f_E-f_W+(f_E+f_W-two*feq*om1)/(one-om1))*c1o2+(q*(f_E+f_W)-six*c2over27*( VeloX ))/(one+q); - // //(D.f[DIR_M00])[kw]=zero; - //} - - //q = q_dirW[k]; - //if (q>=zero && q<=one) - //{ - // feq=c2over27* (drho/*+three*(-vx1 )*/+c9over2*(-vx1 )*(-vx1 )-cu_sq); - // (D.f[DIR_P00])[ke]=(one-q)/(one+q)*(f_W-f_E+(f_W+f_E-two*feq*om1)/(one-om1))*c1o2+(q*(f_W+f_E)-six*c2over27*(-VeloX ))/(one+q); - // //(D.f[DIR_P00])[ke]=zero; - //} - - //q = q_dirN[k]; - //if (q>=zero && q<=one) - //{ - // feq=c2over27* (drho/*+three*( vx2 )*/+c9over2*( vx2 )*( vx2 )-cu_sq); - // (D.f[DIR_0M0])[ks]=(one-q)/(one+q)*(f_N-f_S+(f_N+f_S-two*feq*om1)/(one-om1))*c1o2+(q*(f_N+f_S)-six*c2over27*( VeloY ))/(one+q); - // //(D.f[DIR_0M0])[ks]=zero; - //} - - //q = q_dirS[k]; - //if (q>=zero && q<=one) - //{ - // feq=c2over27* (drho/*+three*( -vx2 )*/+c9over2*( -vx2 )*( -vx2 )-cu_sq); - // (D.f[DIR_0P0])[kn]=(one-q)/(one+q)*(f_S-f_N+(f_S+f_N-two*feq*om1)/(one-om1))*c1o2+(q*(f_S+f_N)-six*c2over27*(-VeloY ))/(one+q); - // //(D.f[DIR_0P0])[kn]=zero; - //} - - //q = q_dirT[k]; - //if (q>=zero && q<=one) - //{ - // feq=c2over27* (drho/*+three*( vx3)*/+c9over2*( vx3)*( vx3)-cu_sq); - // (D.f[DIR_00M])[kb]=(one-q)/(one+q)*(f_T-f_B+(f_T+f_B-two*feq*om1)/(one-om1))*c1o2+(q*(f_T+f_B)-six*c2over27*( VeloZ ))/(one+q); - // //(D.f[DIR_00M])[kb]=one; - //} - - //q = q_dirB[k]; - //if (q>=zero && q<=one) - //{ - // feq=c2over27* (drho/*+three*( -vx3)*/+c9over2*( -vx3)*( -vx3)-cu_sq); - // (D.f[DIR_00P])[kt]=(one-q)/(one+q)*(f_B-f_T+(f_B+f_T-two*feq*om1)/(one-om1))*c1o2+(q*(f_B+f_T)-six*c2over27*(-VeloZ ))/(one+q); - // //(D.f[DIR_00P])[kt]=zero; - //} - - //q = q_dirNE[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over54* (drho/*+three*( vx1+vx2 )*/+c9over2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - // (D.f[DIR_MM0])[ksw]=(one-q)/(one+q)*(f_NE-f_SW+(f_NE+f_SW-two*feq*om1)/(one-om1))*c1o2+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q); - // //(D.f[DIR_MM0])[ksw]=zero; - //} - - //q = q_dirSW[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over54* (drho/*+three*(-vx1-vx2 )*/+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - // (D.f[DIR_PP0])[kne]=(one-q)/(one+q)*(f_SW-f_NE+(f_SW+f_NE-two*feq*om1)/(one-om1))*c1o2+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q); - // //(D.f[DIR_PP0])[kne]=zero; - //} - - //q = q_dirSE[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over54* (drho/*+three*( vx1-vx2 )*/+c9over2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - // (D.f[DIR_MP0])[knw]=(one-q)/(one+q)*(f_SE-f_NW+(f_SE+f_NW-two*feq*om1)/(one-om1))*c1o2+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q); - // //(D.f[DIR_MP0])[knw]=zero; - //} - - //q = q_dirNW[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over54* (drho/*+three*(-vx1+vx2 )*/+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - // (D.f[DIR_PM0])[kse]=(one-q)/(one+q)*(f_NW-f_SE+(f_NW+f_SE-two*feq*om1)/(one-om1))*c1o2+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q); - // //(D.f[DIR_PM0])[kse]=zero; - //} - - //q = q_dirTE[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over54* (drho/*+three*( vx1 +vx3)*/+c9over2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - // (D.f[DIR_M0M])[kbw]=(one-q)/(one+q)*(f_TE-f_BW+(f_TE+f_BW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q); - // //(D.f[DIR_M0M])[kbw]=zero; - //} - - //q = q_dirBW[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over54* (drho/*+three*(-vx1 -vx3)*/+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - // (D.f[DIR_P0P])[kte]=(one-q)/(one+q)*(f_BW-f_TE+(f_BW+f_TE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q); - // //(D.f[DIR_P0P])[kte]=zero; - //} - - //q = q_dirBE[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over54* (drho/*+three*( vx1 -vx3)*/+c9over2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - // (D.f[DIR_M0P])[ktw]=(one-q)/(one+q)*(f_BE-f_TW+(f_BE+f_TW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q); - // //(D.f[DIR_M0P])[ktw]=zero; - //} - - //q = q_dirTW[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over54* (drho/*+three*(-vx1 +vx3)*/+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - // (D.f[DIR_P0M])[kbe]=(one-q)/(one+q)*(f_TW-f_BE+(f_TW+f_BE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q); - // //(D.f[DIR_P0M])[kbe]=zero; - //} - - //q = q_dirTN[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over54* (drho/*+three*( vx2+vx3)*/+c9over2*( vx2+vx3)*( vx2+vx3)-cu_sq); - // (D.f[DIR_0MM])[kbs]=(one-q)/(one+q)*(f_TN-f_BS+(f_TN+f_BS-two*feq*om1)/(one-om1))*c1o2+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q); - // //(D.f[DIR_0MM])[kbs]=zero; - //} - - //q = q_dirBS[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over54* (drho/*+three*( -vx2-vx3)*/+c9over2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - // (D.f[DIR_0PP])[ktn]=(one-q)/(one+q)*(f_BS-f_TN+(f_BS+f_TN-two*feq*om1)/(one-om1))*c1o2+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q); - // //(D.f[DIR_0PP])[ktn]=zero; - //} - - //q = q_dirBN[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over54* (drho/*+three*( vx2-vx3)*/+c9over2*( vx2-vx3)*( vx2-vx3)-cu_sq); - // (D.f[DIR_0MP])[kts]=(one-q)/(one+q)*(f_BN-f_TS+(f_BN+f_TS-two*feq*om1)/(one-om1))*c1o2+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q); - // //(D.f[DIR_0MP])[kts]=zero; - //} - - //q = q_dirTS[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over54* (drho/*+three*( -vx2+vx3)*/+c9over2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - // (D.f[DIR_0PM])[kbn]=(one-q)/(one+q)*(f_TS-f_BN+(f_TS+f_BN-two*feq*om1)/(one-om1))*c1o2+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q); - // //(D.f[DIR_0PM])[kbn]=zero; - //} - - //q = q_dirTNE[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over216*(drho/*+three*( vx1+vx2+vx3)*/+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - // (D.f[DIR_MMM])[kbsw]=(one-q)/(one+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q); - // //(D.f[DIR_MMM])[kbsw]=zero; - //} - - //q = q_dirBSW[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over216*(drho/*+three*(-vx1-vx2-vx3)*/+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - // (D.f[DIR_PPP])[ktne]=(one-q)/(one+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q); - // //(D.f[DIR_PPP])[ktne]=zero; - //} - - //q = q_dirBNE[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over216*(drho/*+three*( vx1+vx2-vx3)*/+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - // (D.f[DIR_MMP])[ktsw]=(one-q)/(one+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q); - // //(D.f[DIR_MMP])[ktsw]=zero; - //} - - //q = q_dirTSW[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over216*(drho/*+three*(-vx1-vx2+vx3)*/+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - // (D.f[DIR_PPM])[kbne]=(one-q)/(one+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q); - // //(D.f[DIR_PPM])[kbne]=zero; - //} - - //q = q_dirTSE[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over216*(drho/*+three*( vx1-vx2+vx3)*/+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - // (D.f[DIR_MPM])[kbnw]=(one-q)/(one+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q); - // //(D.f[DIR_MPM])[kbnw]=zero; - //} - - //q = q_dirBNW[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over216*(drho/*+three*(-vx1+vx2-vx3)*/+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - // (D.f[DIR_PMP])[ktse]=(one-q)/(one+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q); - // //(D.f[DIR_PMP])[ktse]=zero; - //} - - //q = q_dirBSE[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over216*(drho/*+three*( vx1-vx2-vx3)*/+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - // (D.f[DIR_MPP])[ktnw]=(one-q)/(one+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q); - // //(D.f[DIR_MPP])[ktnw]=zero; - //} - - //q = q_dirTNW[k]; - //if (q>=zero && q<=one) - //{ - // feq=c1over216*(drho/*+three*(-vx1+vx2+vx3)*/+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - // (D.f[DIR_PMM])[kbse]=(one-q)/(one+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q); - // //(D.f[DIR_PMM])[kbse]=zero; - //} - - ///////// equilibrium BC - cu_sq=c3o2*(VeloX*VeloX +VeloY*VeloY); - VeloXpur*=-c1o1; - VeloYpur*=-c1o1; - vx3=c0o1; - drho=c0o1; - q = q_dirE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho+c3o1*( VeloXpur )+c9o2*( VeloX )*( VeloX )-cu_sq); - (D.f[DIR_M00])[kw]=feq; - //(D.f[DIR_M00])[kw]=zero; - } - - q = q_dirW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho+c3o1*(-VeloXpur )+c9o2*(-VeloX )*(-VeloX )-cu_sq); - (D.f[DIR_P00])[ke]=feq; - //(D.f[DIR_P00])[ke]=zero; - } - - q = q_dirN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho+c3o1*( VeloYpur )+c9o2*( VeloY )*( VeloY )-cu_sq); - (D.f[DIR_0M0])[ks]=feq; - //(D.f[DIR_0M0])[ks]=zero; - } - - q = q_dirS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho+c3o1*( -VeloYpur )+c9o2*( -VeloY )*( -VeloY )-cu_sq); - (D.f[DIR_0P0])[kn]=feq; - //(D.f[DIR_0P0])[kn]=zero; - } - - q = q_dirT[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - (D.f[DIR_00M])[kb]=feq; - //(D.f[DIR_00M])[kb]=one; - } - - q = q_dirB[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - (D.f[DIR_00P])[kt]=feq; - //(D.f[DIR_00P])[kt]=zero; - } - - q = q_dirNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*( VeloXpur+VeloYpur )+c9o2*( VeloX+VeloY )*( VeloX+VeloY )-cu_sq); - (D.f[DIR_MM0])[ksw]=feq; - //(D.f[DIR_MM0])[ksw]=zero; - } - - q = q_dirSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*(-VeloXpur-VeloYpur )+c9o2*(-VeloX-VeloY )*(-VeloX-VeloY )-cu_sq); - (D.f[DIR_PP0])[kne]=feq; - //(D.f[DIR_PP0])[kne]=zero; - } - - q = q_dirSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*( VeloXpur-VeloYpur )+c9o2*( VeloX-VeloY )*( VeloX-VeloY )-cu_sq); - (D.f[DIR_MP0])[knw]=feq; - //(D.f[DIR_MP0])[knw]=zero; - } - - q = q_dirNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*(-VeloXpur+VeloYpur )+c9o2*(-VeloX+VeloY )*(-VeloX+VeloY )-cu_sq); - (D.f[DIR_PM0])[kse]=feq; - //(D.f[DIR_PM0])[kse]=zero; - } - - q = q_dirTE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*( VeloXpur +vx3)+c9o2*( VeloX +vx3)*( VeloX +vx3)-cu_sq); - (D.f[DIR_M0M])[kbw]=feq; - //(D.f[DIR_M0M])[kbw]=zero; - } - - q = q_dirBW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*(-VeloXpur -vx3)+c9o2*(-VeloX -vx3)*(-VeloX -vx3)-cu_sq); - (D.f[DIR_P0P])[kte]=feq; - //(D.f[DIR_P0P])[kte]=zero; - } - - q = q_dirBE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*( VeloXpur -vx3)+c9o2*( VeloX -vx3)*( VeloX -vx3)-cu_sq); - (D.f[DIR_M0P])[ktw]=feq; - //(D.f[DIR_M0P])[ktw]=zero; - } - - q = q_dirTW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*(-VeloXpur +vx3)+c9o2*(-VeloX +vx3)*(-VeloX +vx3)-cu_sq); - (D.f[DIR_P0M])[kbe]=feq; - //(D.f[DIR_P0M])[kbe]=zero; - } - - q = q_dirTN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*( VeloYpur+vx3)+c9o2*( VeloY+vx3)*( VeloY+vx3)-cu_sq); - (D.f[DIR_0MM])[kbs]=feq; - //(D.f[DIR_0MM])[kbs]=zero; - } - - q = q_dirBS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*( -VeloYpur-vx3)+c9o2*( -VeloY-vx3)*( -VeloY-vx3)-cu_sq); - (D.f[DIR_0PP])[ktn]=feq; - //(D.f[DIR_0PP])[ktn]=zero; - } - - q = q_dirBN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*( VeloYpur-vx3)+c9o2*( VeloY-vx3)*( VeloY-vx3)-cu_sq); - (D.f[DIR_0MP])[kts]=feq; - //(D.f[DIR_0MP])[kts]=zero; - } - - q = q_dirTS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho+c3o1*( -VeloYpur+vx3)+c9o2*( -VeloY+vx3)*( -VeloY+vx3)-cu_sq); - (D.f[DIR_0PM])[kbn]=feq; - //(D.f[DIR_0PM])[kbn]=zero; - } - - q = q_dirTNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c3o1*( VeloXpur+VeloYpur+vx3)+c9o2*( VeloX+VeloY+vx3)*( VeloX+VeloY+vx3)-cu_sq); - (D.f[DIR_MMM])[kbsw]=feq; - //(D.f[DIR_MMM])[kbsw]=zero; - } - - q = q_dirBSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c3o1*(-VeloXpur-VeloYpur-vx3)+c9o2*(-VeloX-VeloY-vx3)*(-VeloX-VeloY-vx3)-cu_sq); - (D.f[DIR_PPP])[ktne]=feq; - //(D.f[DIR_PPP])[ktne]=zero; - } - - q = q_dirBNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c3o1*( VeloXpur+VeloYpur-vx3)+c9o2*( VeloX+VeloY-vx3)*( VeloX+VeloY-vx3)-cu_sq); - (D.f[DIR_MMP])[ktsw]=feq; - //(D.f[DIR_MMP])[ktsw]=zero; - } - - q = q_dirTSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c3o1*(-VeloXpur-VeloYpur+vx3)+c9o2*(-VeloX-VeloY+vx3)*(-VeloX-VeloY+vx3)-cu_sq); - (D.f[DIR_PPM])[kbne]=feq; - //(D.f[DIR_PPM])[kbne]=zero; - } - - q = q_dirTSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c3o1*( VeloXpur-VeloYpur+vx3)+c9o2*( VeloX-VeloY+vx3)*( VeloX-VeloY+vx3)-cu_sq); - (D.f[DIR_MPM])[kbnw]=feq; - //(D.f[DIR_MPM])[kbnw]=zero; - } - - q = q_dirBNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c3o1*(-VeloXpur+VeloYpur-vx3)+c9o2*(-VeloX+VeloY-vx3)*(-VeloX+VeloY-vx3)-cu_sq); - (D.f[DIR_PMP])[ktse]=feq; - //(D.f[DIR_PMP])[ktse]=zero; - } - - q = q_dirBSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c3o1*( VeloXpur-VeloYpur-vx3)+c9o2*( VeloX-VeloY-vx3)*( VeloX-VeloY-vx3)-cu_sq); - (D.f[DIR_MPP])[ktnw]=feq; - //(D.f[DIR_MPP])[ktnw]=zero; - } - - q = q_dirTNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho+c3o1*(-VeloXpur+VeloYpur+vx3)+c9o2*(-VeloX+VeloY+vx3)*(-VeloX+VeloY+vx3)-cu_sq); - (D.f[DIR_PMM])[kbse]=feq; - //(D.f[DIR_PMM])[kbse]=zero; - } - - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QVelDeviceComp27( - real* velocityX, - real* velocityY, - real* velocityZ, - real* distributions, - int* subgridDistanceIndices, - real* subgridDistances, - unsigned int numberOfBCnodes, - real omega, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned long long numberOfLBnodes, - bool isEvenTimestep) -{ - ////////////////////////////////////////////////////////////////////////// - //! The velocity boundary condition is executed in the following steps - //! - //////////////////////////////////////////////////////////////////////////////// - //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. - //! - const unsigned nodeIndex = getNodeIndex(); - - ////////////////////////////////////////////////////////////////////////// - //! - Run for all indices in size of boundary condition (numberOfBCnodes) - //! - if(nodeIndex < numberOfBCnodes) - { - ////////////////////////////////////////////////////////////////////////// - //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref - //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> - //! - Distributions27 dist; - getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); - - //////////////////////////////////////////////////////////////////////////////// - //! - Set local velocities - //! - real VeloX = velocityX[nodeIndex]; - real VeloY = velocityY[nodeIndex]; - real VeloZ = velocityZ[nodeIndex]; - - //////////////////////////////////////////////////////////////////////////////// - //! - Set local subgrid distances (q's) - //! - SubgridDistances27 subgridD; - getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes); - - //////////////////////////////////////////////////////////////////////////////// - //! - Set neighbor indices (necessary for indirect addressing) - //! - unsigned int indexOfBCnode = subgridDistanceIndices[nodeIndex]; - unsigned int kzero= indexOfBCnode; - unsigned int ke = indexOfBCnode; - unsigned int kw = neighborX[indexOfBCnode]; - unsigned int kn = indexOfBCnode; - unsigned int ks = neighborY[indexOfBCnode]; - unsigned int kt = indexOfBCnode; - unsigned int kb = neighborZ[indexOfBCnode]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = indexOfBCnode; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = indexOfBCnode; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = indexOfBCnode; - 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 = indexOfBCnode; - unsigned int kbsw = neighborZ[ksw]; - - //////////////////////////////////////////////////////////////////////////////// - //! - Set local distributions - //! - real f_W = (dist.f[DIR_P00])[ke ]; - real f_E = (dist.f[DIR_M00])[kw ]; - real f_S = (dist.f[DIR_0P0])[kn ]; - real f_N = (dist.f[DIR_0M0])[ks ]; - real f_B = (dist.f[DIR_00P])[kt ]; - real f_T = (dist.f[DIR_00M])[kb ]; - real f_SW = (dist.f[DIR_PP0])[kne ]; - real f_NE = (dist.f[DIR_MM0])[ksw ]; - real f_NW = (dist.f[DIR_PM0])[kse ]; - real f_SE = (dist.f[DIR_MP0])[knw ]; - real f_BW = (dist.f[DIR_P0P])[kte ]; - real f_TE = (dist.f[DIR_M0M])[kbw ]; - real f_TW = (dist.f[DIR_P0M])[kbe ]; - real f_BE = (dist.f[DIR_M0P])[ktw ]; - real f_BS = (dist.f[DIR_0PP])[ktn ]; - real f_TN = (dist.f[DIR_0MM])[kbs ]; - real f_TS = (dist.f[DIR_0PM])[kbn ]; - real f_BN = (dist.f[DIR_0MP])[kts ]; - real f_BSW = (dist.f[DIR_PPP])[ktne ]; - real f_BNE = (dist.f[DIR_MMP])[ktsw ]; - real f_BNW = (dist.f[DIR_PMP])[ktse ]; - real f_BSE = (dist.f[DIR_MPP])[ktnw ]; - real f_TSW = (dist.f[DIR_PPM])[kbne ]; - real f_TNE = (dist.f[DIR_MMM])[kbsw ]; - real f_TNW = (dist.f[DIR_PMM])[kbse ]; - real f_TSE = (dist.f[DIR_MPM])[kbnw ]; - - //////////////////////////////////////////////////////////////////////////////// - //! - Calculate macroscopic quantities - //! - real 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 + ((dist.f[DIR_000])[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)) / (c1o1 + drho); - - 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)) / (c1o1 + drho); - - 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)) / (c1o1 + drho); - - real cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3) * (c1o1 + drho); - - //////////////////////////////////////////////////////////////////////////////// - //! - change the pointer to write the results in the correct array - //! - getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep); - - //////////////////////////////////////////////////////////////////////////////// - //! - Update distributions with subgrid distance (q) between zero and one - //! - real feq, q, velocityLB, velocityBC; - q = (subgridD.q[DIR_P00])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one - { - velocityLB = vx1; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - velocityBC = VeloX; - (dist.f[DIR_M00])[kw] = getInterpolatedDistributionForVeloBC(q, f_E, f_W, feq, omega, velocityBC, c2o27); - } - - q = (subgridD.q[DIR_M00])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - velocityBC = -VeloX; - (dist.f[DIR_P00])[ke] = getInterpolatedDistributionForVeloBC(q, f_W, f_E, feq, omega, velocityBC, c2o27); - } - - q = (subgridD.q[DIR_0P0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - velocityBC = VeloY; - (dist.f[DIR_0M0])[ks] = getInterpolatedDistributionForVeloBC(q, f_N, f_S, feq, omega, velocityBC, c2o27); - } - - q = (subgridD.q[DIR_0M0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - velocityBC = -VeloY; - (dist.f[DIR_0P0])[kn] = getInterpolatedDistributionForVeloBC(q, f_S, f_N, feq, omega, velocityBC, c2o27); - } - - q = (subgridD.q[DIR_00P])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - velocityBC = VeloZ; - (dist.f[DIR_00M])[kb] = getInterpolatedDistributionForVeloBC(q, f_T, f_B, feq, omega, velocityBC, c2o27); - } - - q = (subgridD.q[DIR_00M])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); - velocityBC = -VeloZ; - (dist.f[DIR_00P])[kt] = getInterpolatedDistributionForVeloBC(q, f_B, f_T, feq, omega, velocityBC, c2o27); - } - - q = (subgridD.q[DIR_PP0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 + vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = VeloX + VeloY; - (dist.f[DIR_MM0])[ksw] = getInterpolatedDistributionForVeloBC(q, f_NE, f_SW, feq, omega, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_MM0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 - vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = -VeloX - VeloY; - (dist.f[DIR_PP0])[kne] = getInterpolatedDistributionForVeloBC(q, f_SW, f_NE, feq, omega, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_PM0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 - vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = VeloX - VeloY; - (dist.f[DIR_MP0])[knw] = getInterpolatedDistributionForVeloBC(q, f_SE, f_NW, feq, omega, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_MP0])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 + vx2; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = -VeloX + VeloY; - (dist.f[DIR_PM0])[kse] = getInterpolatedDistributionForVeloBC(q, f_NW, f_SE, feq, omega, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_P0P])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = VeloX + VeloZ; - (dist.f[DIR_M0M])[kbw] = getInterpolatedDistributionForVeloBC(q, f_TE, f_BW, feq, omega, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_M0M])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = -VeloX - VeloZ; - (dist.f[DIR_P0P])[kte] = getInterpolatedDistributionForVeloBC(q, f_BW, f_TE, feq, omega, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_P0M])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = VeloX - VeloZ; - (dist.f[DIR_M0P])[ktw] = getInterpolatedDistributionForVeloBC(q, f_BE, f_TW, feq, omega, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_M0P])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = -VeloX + VeloZ; - (dist.f[DIR_P0M])[kbe] = getInterpolatedDistributionForVeloBC(q, f_TW, f_BE, feq, omega, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_0PP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = VeloY + VeloZ; - (dist.f[DIR_0MM])[kbs] = getInterpolatedDistributionForVeloBC(q, f_TN, f_BS, feq, omega, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_0MM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = -VeloY - VeloZ; - (dist.f[DIR_0PP])[ktn] = getInterpolatedDistributionForVeloBC(q, f_BS, f_TN, feq, omega, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_0PM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = VeloY - VeloZ; - (dist.f[DIR_0MP])[kts] = getInterpolatedDistributionForVeloBC(q, f_BN, f_TS, feq, omega, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_0MP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); - velocityBC = -VeloY + VeloZ; - (dist.f[DIR_0PM])[kbn] = getInterpolatedDistributionForVeloBC(q, f_TS, f_BN, feq, omega, velocityBC, c1o54); - } - - q = (subgridD.q[DIR_PPP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 + vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - velocityBC = VeloX + VeloY + VeloZ; - (dist.f[DIR_MMM])[kbsw] = getInterpolatedDistributionForVeloBC(q, f_TNE, f_BSW, feq, omega, velocityBC, c1o216); - } - - q = (subgridD.q[DIR_MMM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 - vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - velocityBC = -VeloX - VeloY - VeloZ; - (dist.f[DIR_PPP])[ktne] = getInterpolatedDistributionForVeloBC(q, f_BSW, f_TNE, feq, omega, velocityBC, c1o216); - } - - q = (subgridD.q[DIR_PPM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 + vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - velocityBC = VeloX + VeloY - VeloZ; - (dist.f[DIR_MMP])[ktsw] = getInterpolatedDistributionForVeloBC(q, f_BNE, f_TSW, feq, omega, velocityBC, c1o216); - } - - q = (subgridD.q[DIR_MMP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 - vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - velocityBC = -VeloX - VeloY + VeloZ; - (dist.f[DIR_PPM])[kbne] = getInterpolatedDistributionForVeloBC(q, f_TSW, f_BNE, feq, omega, velocityBC, c1o216); - } - - q = (subgridD.q[DIR_PMP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 - vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - velocityBC = VeloX - VeloY + VeloZ; - (dist.f[DIR_MPM])[kbnw] = getInterpolatedDistributionForVeloBC(q, f_TSE, f_BNW, feq, omega, velocityBC, c1o216); - } - - q = (subgridD.q[DIR_MPM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 + vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - velocityBC = -VeloX + VeloY - VeloZ; - (dist.f[DIR_PMP])[ktse] = getInterpolatedDistributionForVeloBC(q, f_BNW, f_TSE, feq, omega, velocityBC, c1o216); - } - - q = (subgridD.q[DIR_PMM])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = vx1 - vx2 - vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - velocityBC = VeloX - VeloY - VeloZ; - (dist.f[DIR_MPP])[ktnw] = getInterpolatedDistributionForVeloBC(q, f_BSE, f_TNW, feq, omega, velocityBC, c1o216); - } - - q = (subgridD.q[DIR_MPP])[nodeIndex]; - if (q>=c0o1 && q<=c1o1) - { - velocityLB = -vx1 + vx2 + vx3; - feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); - velocityBC = -VeloX + VeloY + VeloZ; - (dist.f[DIR_PMM])[kbse] = getInterpolatedDistributionForVeloBC(q, f_TNW, f_BSE, feq, omega, velocityBC, c1o216); - } - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -////////////////////////////////////////////////////////////////////////////// -__global__ void QVelDevice27( - int inx, - int iny, - real* vx, - real* vy, - real* vz, - real* DD, - 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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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 VeloX = vx[k]; - real VeloY = vy[k]; - real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny) - //////////////////////////////////////////////////////////////////////////////// - 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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * 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]; - //unsigned int nxny = nx*ny; - //unsigned int kzero= KQK; - //unsigned int ke = KQK; - //unsigned int kw = KQK + 1; - //unsigned int kn = KQK; - //unsigned int ks = KQK + nx; - //unsigned int kt = KQK; - //unsigned int kb = KQK + nxny; - //unsigned int ksw = KQK + nx + 1; - //unsigned int kne = KQK; - //unsigned int kse = KQK + nx; - //unsigned int knw = KQK + 1; - //unsigned int kbw = KQK + nxny + 1; - //unsigned int kte = KQK; - //unsigned int kbe = KQK + nxny; - //unsigned int ktw = KQK + 1; - //unsigned int kbs = KQK + nxny + nx; - //unsigned int ktn = KQK; - //unsigned int kbn = KQK + nxny; - //unsigned int kts = KQK + nx; - //unsigned int ktse = KQK + nx; - //unsigned int kbnw = KQK + nxny + 1; - //unsigned int ktnw = KQK + 1; - //unsigned int kbse = KQK + nxny + nx; - //unsigned int ktsw = KQK + nx + 1; - //unsigned int kbne = KQK + nxny; - //unsigned int ktne = KQK; - //unsigned int kbsw = KQK + nxny + nx + 1; - //////////////////////////////////////////////////////////////////////////////// - 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[DIR_P00])[ke ]; - f_E = (D.f[DIR_M00])[kw ]; - f_S = (D.f[DIR_0P0])[kn ]; - f_N = (D.f[DIR_0M0])[ks ]; - f_B = (D.f[DIR_00P])[kt ]; - f_T = (D.f[DIR_00M])[kb ]; - f_SW = (D.f[DIR_PP0])[kne ]; - f_NE = (D.f[DIR_MM0])[ksw ]; - f_NW = (D.f[DIR_PM0])[kse ]; - f_SE = (D.f[DIR_MP0])[knw ]; - f_BW = (D.f[DIR_P0P])[kte ]; - f_TE = (D.f[DIR_M0M])[kbw ]; - f_TW = (D.f[DIR_P0M])[kbe ]; - f_BE = (D.f[DIR_M0P])[ktw ]; - f_BS = (D.f[DIR_0PP])[ktn ]; - f_TN = (D.f[DIR_0MM])[kbs ]; - f_TS = (D.f[DIR_0PM])[kbn ]; - f_BN = (D.f[DIR_0MP])[kts ]; - f_BSW = (D.f[DIR_PPP])[ktne ]; - f_BNE = (D.f[DIR_MMP])[ktsw ]; - f_BNW = (D.f[DIR_PMP])[ktse ]; - f_BSE = (D.f[DIR_MPP])[ktnw ]; - f_TSW = (D.f[DIR_PPM])[kbne ]; - f_TNE = (D.f[DIR_MMM])[kbsw ]; - f_TNW = (D.f[DIR_PMM])[kbse ]; - f_TSE = (D.f[DIR_MPM])[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 + ((D.f[DIR_000])[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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - ////////////////////////////////////////////////////////////////////////// - if (isEvenTimestep==false) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - } - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Test - //(D.f[DIR_000])[k]=c1o10; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - //ToDo anders Klammern - - q = q_dirE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( vx1 )*/+c9o2*( vx1 )*( vx1 )-cu_sq); - (D.f[DIR_M00])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX ))/(c1o1+q); - //(D.f[DIR_M00])[kw]=zero; - } - - q = q_dirW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*(-vx1 )*/+c9o2*(-vx1 )*(-vx1 )-cu_sq); - (D.f[DIR_P00])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX ))/(c1o1+q); - //(D.f[DIR_P00])[ke]=zero; - } - - q = q_dirN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( vx2 )*/+c9o2*( vx2 )*( vx2 )-cu_sq); - (D.f[DIR_0M0])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY ))/(c1o1+q); - //(D.f[DIR_0M0])[ks]=zero; - } - - q = q_dirS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( -vx2 )*/+c9o2*( -vx2 )*( -vx2 )-cu_sq); - (D.f[DIR_0P0])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY ))/(c1o1+q); - //(D.f[DIR_0P0])[kn]=zero; - } - - q = q_dirT[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( vx3)*/+c9o2*( vx3)*( vx3)-cu_sq); - (D.f[DIR_00M])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ ))/(c1o1+q); - //(D.f[DIR_00M])[kb]=one; - } - - q = q_dirB[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c2o27* (drho/*+three*( -vx3)*/+c9o2*( -vx3)*( -vx3)-cu_sq); - (D.f[DIR_00P])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ ))/(c1o1+q); - //(D.f[DIR_00P])[kt]=zero; - } - - q = q_dirNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1+vx2 )*/+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - (D.f[DIR_MM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q); - //(D.f[DIR_MM0])[ksw]=zero; - } - - q = q_dirSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1-vx2 )*/+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - (D.f[DIR_PP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q); - //(D.f[DIR_PP0])[kne]=zero; - } - - q = q_dirSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1-vx2 )*/+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - (D.f[DIR_MP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q); - //(D.f[DIR_MP0])[knw]=zero; - } - - q = q_dirNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1+vx2 )*/+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - (D.f[DIR_PM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q); - //(D.f[DIR_PM0])[kse]=zero; - } - - q = q_dirTE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1 +vx3)*/+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - (D.f[DIR_M0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q); - //(D.f[DIR_M0M])[kbw]=zero; - } - - q = q_dirBW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1 -vx3)*/+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - (D.f[DIR_P0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q); - //(D.f[DIR_P0P])[kte]=zero; - } - - q = q_dirBE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx1 -vx3)*/+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - (D.f[DIR_M0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q); - //(D.f[DIR_M0P])[ktw]=zero; - } - - q = q_dirTW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*(-vx1 +vx3)*/+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - (D.f[DIR_P0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q); - //(D.f[DIR_P0M])[kbe]=zero; - } - - q = q_dirTN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx2+vx3)*/+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - (D.f[DIR_0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q); - //(D.f[DIR_0MM])[kbs]=zero; - } - - q = q_dirBS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( -vx2-vx3)*/+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - (D.f[DIR_0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q); - //(D.f[DIR_0PP])[ktn]=zero; - } - - q = q_dirBN[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( vx2-vx3)*/+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - (D.f[DIR_0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q); - //(D.f[DIR_0MP])[kts]=zero; - } - - q = q_dirTS[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o54* (drho/*+three*( -vx2+vx3)*/+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - (D.f[DIR_0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q); - //(D.f[DIR_0PM])[kbn]=zero; - } - - q = q_dirTNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - (D.f[DIR_MMM])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q); - //(D.f[DIR_MMM])[kbsw]=zero; - } - - q = q_dirBSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - (D.f[DIR_PPP])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q); - //(D.f[DIR_PPP])[ktne]=zero; - } - - q = q_dirBNE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - (D.f[DIR_MMP])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q); - //(D.f[DIR_MMP])[ktsw]=zero; - } - - q = q_dirTSW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - (D.f[DIR_PPM])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q); - //(D.f[DIR_PPM])[kbne]=zero; - } - - q = q_dirTSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - (D.f[DIR_MPM])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q); - //(D.f[DIR_MPM])[kbnw]=zero; - } - - q = q_dirBNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - (D.f[DIR_PMP])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q); - //(D.f[DIR_PMP])[ktse]=zero; - } - - q = q_dirBSE[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - (D.f[DIR_MPP])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q); - //(D.f[DIR_MPP])[ktnw]=zero; - } - - q = q_dirTNW[k]; - if (q>=c0o1 && q<=c1o1) - { - feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - (D.f[DIR_PMM])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q); - //(D.f[DIR_PMM])[kbse]=zero; - } - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////// -__global__ void PropellerBC( - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* rho, - real* ux, - real* uy, - real* uz, - int* k_Q, - unsigned int size_Prop, - unsigned long long numberOfLBnodes, - unsigned int* bcMatD, - real* DD, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Prop) - { - //////////////////////////////////////////////////////////////////////////////// - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - } - ////////////////////////////////////////////////////////////////////////// - unsigned int KQK = k_Q[k]; - unsigned int BC = bcMatD[KQK]; - if( (BC != GEO_SOLID) && (BC != GEO_VOID)) - { - ////////////////////////////////////////////////////////////////////////// - real vx1 = ux[k]; - real vx2 = uy[k]; - real vx3 = uz[k]; - //real vx1 = -c1o100; - //real vx2 = zero; - //real vx3 = zero; - ////////////////////////////////////////////////////////////////////////// - //index - ////////////////////////////////////////////////////////////////////////// - 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_ZERO; - - f_ZERO= (D.f[DIR_000])[kzero]; - f_E = (D.f[DIR_P00])[ke ]; - f_W = (D.f[DIR_M00])[kw ]; - f_N = (D.f[DIR_0P0])[kn ]; - f_S = (D.f[DIR_0M0])[ks ]; - f_T = (D.f[DIR_00P])[kt ]; - f_B = (D.f[DIR_00M])[kb ]; - f_NE = (D.f[DIR_PP0])[kne ]; - f_SW = (D.f[DIR_MM0])[ksw ]; - f_SE = (D.f[DIR_PM0])[kse ]; - f_NW = (D.f[DIR_MP0])[knw ]; - f_TE = (D.f[DIR_P0P])[kte ]; - f_BW = (D.f[DIR_M0M])[kbw ]; - f_BE = (D.f[DIR_P0M])[kbe ]; - f_TW = (D.f[DIR_M0P])[ktw ]; - f_TN = (D.f[DIR_0PP])[ktn ]; - f_BS = (D.f[DIR_0MM])[kbs ]; - f_BN = (D.f[DIR_0PM])[kbn ]; - f_TS = (D.f[DIR_0MP])[kts ]; - f_TNE = (D.f[DIR_PPP])[ktne ]; - f_BSW = (D.f[DIR_MMM])[kbsw ]; - f_BNE = (D.f[DIR_PPM])[kbne ]; - f_TSW = (D.f[DIR_MMP])[ktsw ]; - f_TSE = (D.f[DIR_PMP])[ktse ]; - f_BNW = (D.f[DIR_MPM])[kbnw ]; - f_BSE = (D.f[DIR_PMM])[kbse ]; - f_TNW = (D.f[DIR_MPP])[ktnw ]; - //f_W = (D.f[DIR_P00])[ke ]; - //f_E = (D.f[DIR_M00])[kw ]; - //f_S = (D.f[DIR_0P0])[kn ]; - //f_N = (D.f[DIR_0M0])[ks ]; - //f_B = (D.f[DIR_00P])[kt ]; - //f_T = (D.f[DIR_00M])[kb ]; - //f_SW = (D.f[DIR_PP0])[kne ]; - //f_NE = (D.f[DIR_MM0])[ksw ]; - //f_NW = (D.f[DIR_PM0])[kse ]; - //f_SE = (D.f[DIR_MP0])[knw ]; - //f_BW = (D.f[DIR_P0P])[kte ]; - //f_TE = (D.f[DIR_M0M])[kbw ]; - //f_TW = (D.f[DIR_P0M])[kbe ]; - //f_BE = (D.f[DIR_M0P])[ktw ]; - //f_BS = (D.f[DIR_0PP])[ktn ]; - //f_TN = (D.f[DIR_0MM])[kbs ]; - //f_TS = (D.f[DIR_0PM])[kbn ]; - //f_BN = (D.f[DIR_0MP])[kts ]; - //f_BSW = (D.f[DIR_PPP])[ktne ]; - //f_TNE = (D.f[DIR_MMM])[kbsw ]; - //f_TSW = (D.f[DIR_PPM])[kbne ]; - //f_BNE = (D.f[DIR_MMP])[ktsw ]; - //f_BNW = (D.f[DIR_PMP])[ktse ]; - //f_TSE = (D.f[DIR_MPM])[kbnw ]; - //f_TNW = (D.f[DIR_PMM])[kbse ]; - //f_BSE = (D.f[DIR_MPP])[ktnw ]; - ////////////////////////////////////////////////////////////////////////////////// - real vxo1, vxo2, vxo3, drho; - drho = /*zero;*/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; - - vxo1 = (((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); - - - vxo2 = ((-(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); - - vxo3 = (((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 cusq=c3o2*(vxo1*vxo1+vxo2*vxo2+vxo3*vxo3); - //vx1 = vx1 * two - vxo1; - //vx2 = vx2 * two - vxo2; - //vx3 = vx3 * two - vxo3; - real cusq2=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - //f_ZERO = ((one+drho) * ( c8over27 *(one+(-cusq2)))) - c8over27; - //f_E = ((one+drho) * ( c2over27 *(one+three*( vx1 )+c9over2*( vx1 )*( vx1 )-cusq2))) - c2over27 ; - //f_W = ((one+drho) * ( c2over27 *(one+three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cusq2))) - c2over27 ; - //f_N = ((one+drho) * ( c2over27 *(one+three*( vx2 )+c9over2*( vx2 )*( vx2 )-cusq2))) - c2over27 ; - //f_S = ((one+drho) * ( c2over27 *(one+three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cusq2))) - c2over27 ; - //f_T = ((one+drho) * ( c2over27 *(one+three*( vx3)+c9over2*( vx3)*( vx3)-cusq2))) - c2over27 ; - //f_B = ((one+drho) * ( c2over27 *(one+three*( -vx3)+c9over2*( -vx3)*( -vx3)-cusq2))) - c2over27 ; - //f_NE = ((one+drho) * ( c1over54 *(one+three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cusq2))) - c1over54 ; - //f_SW = ((one+drho) * ( c1over54 *(one+three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cusq2))) - c1over54 ; - //f_SE = ((one+drho) * ( c1over54 *(one+three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cusq2))) - c1over54 ; - //f_NW = ((one+drho) * ( c1over54 *(one+three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cusq2))) - c1over54 ; - //f_TE = ((one+drho) * ( c1over54 *(one+three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cusq2))) - c1over54 ; - //f_BW = ((one+drho) * ( c1over54 *(one+three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cusq2))) - c1over54 ; - //f_BE = ((one+drho) * ( c1over54 *(one+three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cusq2))) - c1over54 ; - //f_TW = ((one+drho) * ( c1over54 *(one+three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cusq2))) - c1over54 ; - //f_TN = ((one+drho) * ( c1over54 *(one+three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cusq2))) - c1over54 ; - //f_BS = ((one+drho) * ( c1over54 *(one+three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cusq2))) - c1over54 ; - //f_BN = ((one+drho) * ( c1over54 *(one+three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cusq2))) - c1over54 ; - //f_TS = ((one+drho) * ( c1over54 *(one+three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cusq2))) - c1over54 ; - //f_TNE = ((one+drho) * ( c1over216*(one+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq2))) - c1over216; - //f_BSW = ((one+drho) * ( c1over216*(one+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq2))) - c1over216; - //f_BNE = ((one+drho) * ( c1over216*(one+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq2))) - c1over216; - //f_TSW = ((one+drho) * ( c1over216*(one+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq2))) - c1over216; - //f_TSE = ((one+drho) * ( c1over216*(one+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq2))) - c1over216; - //f_BNW = ((one+drho) * ( c1over216*(one+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq2))) - c1over216; - //f_BSE = ((one+drho) * ( c1over216*(one+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq2))) - c1over216; - //f_TNW = ((one+drho) * ( c1over216*(one+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq2))) - c1over216; - f_ZERO = f_ZERO + ((c1o1+drho) * (- c8o27* (-cusq) + c8o27* (-cusq2))); - f_E = f_E + ((c1o1+drho) * (- c2o27* (c3o1*( vxo1 )+c9o2*( vxo1 )*( vxo1 )-cusq) + c2o27* (c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cusq2))); - f_W = f_W + ((c1o1+drho) * (- c2o27* (c3o1*(-vxo1 )+c9o2*(-vxo1 )*(-vxo1 )-cusq) + c2o27* (c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cusq2))); - f_N = f_N + ((c1o1+drho) * (- c2o27* (c3o1*( vxo2 )+c9o2*( vxo2 )*( vxo2 )-cusq) + c2o27* (c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cusq2))); - f_S = f_S + ((c1o1+drho) * (- c2o27* (c3o1*( -vxo2 )+c9o2*( -vxo2 )*( -vxo2 )-cusq) + c2o27* (c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cusq2))); - f_T = f_T + ((c1o1+drho) * (- c2o27* (c3o1*( vxo3)+c9o2*( vxo3)*( vxo3)-cusq) + c2o27* (c3o1*( vx3)+c9o2*( vx3)*( vx3)-cusq2))); - f_B = f_B + ((c1o1+drho) * (- c2o27* (c3o1*( -vxo3)+c9o2*( -vxo3)*( -vxo3)-cusq) + c2o27* (c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cusq2))); - f_NE = f_NE + ((c1o1+drho) * (- c1o54* (c3o1*( vxo1+vxo2 )+c9o2*( vxo1+vxo2 )*( vxo1+vxo2 )-cusq) + c1o54* (c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cusq2))); - f_SW = f_SW + ((c1o1+drho) * (- c1o54* (c3o1*(-vxo1-vxo2 )+c9o2*(-vxo1-vxo2 )*(-vxo1-vxo2 )-cusq) + c1o54* (c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cusq2))); - f_SE = f_SE + ((c1o1+drho) * (- c1o54* (c3o1*( vxo1-vxo2 )+c9o2*( vxo1-vxo2 )*( vxo1-vxo2 )-cusq) + c1o54* (c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cusq2))); - f_NW = f_NW + ((c1o1+drho) * (- c1o54* (c3o1*(-vxo1+vxo2 )+c9o2*(-vxo1+vxo2 )*(-vxo1+vxo2 )-cusq) + c1o54* (c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cusq2))); - f_TE = f_TE + ((c1o1+drho) * (- c1o54* (c3o1*( vxo1 +vxo3)+c9o2*( vxo1 +vxo3)*( vxo1 +vxo3)-cusq) + c1o54* (c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cusq2))); - f_BW = f_BW + ((c1o1+drho) * (- c1o54* (c3o1*(-vxo1 -vxo3)+c9o2*(-vxo1 -vxo3)*(-vxo1 -vxo3)-cusq) + c1o54* (c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cusq2))); - f_BE = f_BE + ((c1o1+drho) * (- c1o54* (c3o1*( vxo1 -vxo3)+c9o2*( vxo1 -vxo3)*( vxo1 -vxo3)-cusq) + c1o54* (c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cusq2))); - f_TW = f_TW + ((c1o1+drho) * (- c1o54* (c3o1*(-vxo1 +vxo3)+c9o2*(-vxo1 +vxo3)*(-vxo1 +vxo3)-cusq) + c1o54* (c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cusq2))); - f_TN = f_TN + ((c1o1+drho) * (- c1o54* (c3o1*( vxo2+vxo3)+c9o2*( vxo2+vxo3)*( vxo2+vxo3)-cusq) + c1o54* (c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cusq2))); - f_BS = f_BS + ((c1o1+drho) * (- c1o54* (c3o1*( -vxo2-vxo3)+c9o2*( -vxo2-vxo3)*( -vxo2-vxo3)-cusq) + c1o54* (c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cusq2))); - f_BN = f_BN + ((c1o1+drho) * (- c1o54* (c3o1*( vxo2-vxo3)+c9o2*( vxo2-vxo3)*( vxo2-vxo3)-cusq) + c1o54* (c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cusq2))); - f_TS = f_TS + ((c1o1+drho) * (- c1o54* (c3o1*( -vxo2+vxo3)+c9o2*( -vxo2+vxo3)*( -vxo2+vxo3)-cusq) + c1o54* (c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cusq2))); - f_TNE = f_TNE + ((c1o1+drho) * (- c1o216*(c3o1*( vxo1+vxo2+vxo3)+c9o2*( vxo1+vxo2+vxo3)*( vxo1+vxo2+vxo3)-cusq) + c1o216*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq2))); - f_BSW = f_BSW + ((c1o1+drho) * (- c1o216*(c3o1*(-vxo1-vxo2-vxo3)+c9o2*(-vxo1-vxo2-vxo3)*(-vxo1-vxo2-vxo3)-cusq) + c1o216*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq2))); - f_BNE = f_BNE + ((c1o1+drho) * (- c1o216*(c3o1*( vxo1+vxo2-vxo3)+c9o2*( vxo1+vxo2-vxo3)*( vxo1+vxo2-vxo3)-cusq) + c1o216*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq2))); - f_TSW = f_TSW + ((c1o1+drho) * (- c1o216*(c3o1*(-vxo1-vxo2+vxo3)+c9o2*(-vxo1-vxo2+vxo3)*(-vxo1-vxo2+vxo3)-cusq) + c1o216*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq2))); - f_TSE = f_TSE + ((c1o1+drho) * (- c1o216*(c3o1*( vxo1-vxo2+vxo3)+c9o2*( vxo1-vxo2+vxo3)*( vxo1-vxo2+vxo3)-cusq) + c1o216*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq2))); - f_BNW = f_BNW + ((c1o1+drho) * (- c1o216*(c3o1*(-vxo1+vxo2-vxo3)+c9o2*(-vxo1+vxo2-vxo3)*(-vxo1+vxo2-vxo3)-cusq) + c1o216*(c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq2))); - f_BSE = f_BSE + ((c1o1+drho) * (- c1o216*(c3o1*( vxo1-vxo2-vxo3)+c9o2*( vxo1-vxo2-vxo3)*( vxo1-vxo2-vxo3)-cusq) + c1o216*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq2))); - f_TNW = f_TNW + ((c1o1+drho) * (- c1o216*(c3o1*(-vxo1+vxo2+vxo3)+c9o2*(-vxo1+vxo2+vxo3)*(-vxo1+vxo2+vxo3)-cusq) + c1o216*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq2))); - - (D.f[DIR_000])[kzero] = f_ZERO; - (D.f[DIR_P00])[ke ] = f_E ; // f_W ;// - (D.f[DIR_M00])[kw ] = f_W ; // f_E ;// - (D.f[DIR_0P0])[kn ] = f_N ; // f_S ;// - (D.f[DIR_0M0])[ks ] = f_S ; // f_N ;// - (D.f[DIR_00P])[kt ] = f_T ; // f_B ;// - (D.f[DIR_00M])[kb ] = f_B ; // f_T ;// - (D.f[DIR_PP0])[kne ] = f_NE ; // f_SW ;// - (D.f[DIR_MM0])[ksw ] = f_SW ; // f_NE ;// - (D.f[DIR_PM0])[kse ] = f_SE ; // f_NW ;// - (D.f[DIR_MP0])[knw ] = f_NW ; // f_SE ;// - (D.f[DIR_P0P])[kte ] = f_TE ; // f_BW ;// - (D.f[DIR_M0M])[kbw ] = f_BW ; // f_TE ;// - (D.f[DIR_P0M])[kbe ] = f_BE ; // f_TW ;// - (D.f[DIR_M0P])[ktw ] = f_TW ; // f_BE ;// - (D.f[DIR_0PP])[ktn ] = f_TN ; // f_BS ;// - (D.f[DIR_0MM])[kbs ] = f_BS ; // f_TN ;// - (D.f[DIR_0PM])[kbn ] = f_BN ; // f_TS ;// - (D.f[DIR_0MP])[kts ] = f_TS ; // f_BN ;// - (D.f[DIR_PPP])[ktne ] = f_TNE ; // f_BSW ;// - (D.f[DIR_MMM])[kbsw ] = f_BSW ; // f_BNE ;// - (D.f[DIR_PPM])[kbne ] = f_BNE ; // f_BNW ;// - (D.f[DIR_MMP])[ktsw ] = f_TSW ; // f_BSE ;// - (D.f[DIR_PMP])[ktse ] = f_TSE ; // f_TSW ;// - (D.f[DIR_MPM])[kbnw ] = f_BNW ; // f_TNE ;// - (D.f[DIR_PMM])[kbse ] = f_BSE ; // f_TNW ;// - (D.f[DIR_MPP])[ktnw ] = f_TNW ; // f_TSE ;// - - ////////////////////////////////////////////////////////////////////////// - ////(D.f[DIR_000])[kzero] = c8over27* (drho-cu_sq); - //(D.f[DIR_P00])[ke ] = three*c2over27* ( vx1 ); //six - //(D.f[DIR_M00])[kw ] = three*c2over27* (-vx1 ); //six - //(D.f[DIR_0P0])[kn ] = three*c2over27* ( vx2 ); //six - //(D.f[DIR_0M0])[ks ] = three*c2over27* ( -vx2 ); //six - //(D.f[DIR_00P])[kt ] = three*c2over27* ( vx3); //six - //(D.f[DIR_00M])[kb ] = three*c2over27* ( -vx3); //six - //(D.f[DIR_PP0])[kne ] = three*c1over54* ( vx1+vx2 ); //six - //(D.f[DIR_MM0])[ksw ] = three*c1over54* (-vx1-vx2 ); //six - //(D.f[DIR_PM0])[kse ] = three*c1over54* ( vx1-vx2 ); //six - //(D.f[DIR_MP0])[knw ] = three*c1over54* (-vx1+vx2 ); //six - //(D.f[DIR_P0P])[kte ] = three*c1over54* ( vx1 +vx3); //six - //(D.f[DIR_M0M])[kbw ] = three*c1over54* (-vx1 -vx3); //six - //(D.f[DIR_P0M])[kbe ] = three*c1over54* ( vx1 -vx3); //six - //(D.f[DIR_M0P])[ktw ] = three*c1over54* (-vx1 +vx3); //six - //(D.f[DIR_0PP])[ktn ] = three*c1over54* ( vx2+vx3); //six - //(D.f[DIR_0MM])[kbs ] = three*c1over54* ( -vx2-vx3); //six - //(D.f[DIR_0PM])[kbn ] = three*c1over54* ( vx2-vx3); //six - //(D.f[DIR_0MP])[kts ] = three*c1over54* ( -vx2+vx3); //six - //(D.f[DIR_PPP])[ktne ] = three*c1over216*( vx1+vx2+vx3); //six - //(D.f[DIR_MMM])[kbsw ] = three*c1over216*(-vx1-vx2-vx3); //six - //(D.f[DIR_PPM])[kbne ] = three*c1over216*( vx1+vx2-vx3); //six - //(D.f[DIR_MMP])[ktsw ] = three*c1over216*(-vx1-vx2+vx3); //six - //(D.f[DIR_PMP])[ktse ] = three*c1over216*( vx1-vx2+vx3); //six - //(D.f[DIR_MPM])[kbnw ] = three*c1over216*(-vx1+vx2-vx3); //six - //(D.f[DIR_PMM])[kbse ] = three*c1over216*( vx1-vx2-vx3); //six - //(D.f[DIR_MPP])[ktnw ] = three*c1over216*(-vx1+vx2+vx3); //six - //(D.f[DIR_000])[kzero] = c8over27* (drho-cu_sq); - //(D.f[DIR_P00])[ke ] = c2over27* (drho+three*( vx1 )+c9over2*( vx1 )*( vx1 )-cu_sq); - //(D.f[DIR_M00])[kw ] = c2over27* (drho+three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cu_sq); - //(D.f[DIR_0P0])[kn ] = c2over27* (drho+three*( vx2 )+c9over2*( vx2 )*( vx2 )-cu_sq); - //(D.f[DIR_0M0])[ks ] = c2over27* (drho+three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cu_sq); - //(D.f[DIR_00P])[kt ] = c2over27* (drho+three*( vx3)+c9over2*( vx3)*( vx3)-cu_sq); - //(D.f[DIR_00M])[kb ] = c2over27* (drho+three*( -vx3)+c9over2*( -vx3)*( -vx3)-cu_sq); - //(D.f[DIR_PP0])[kne ] = c1over54* (drho+three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - //(D.f[DIR_MM0])[ksw ] = c1over54* (drho+three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - //(D.f[DIR_PM0])[kse ] = c1over54* (drho+three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - //(D.f[DIR_MP0])[knw ] = c1over54* (drho+three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - //(D.f[DIR_P0P])[kte ] = c1over54* (drho+three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - //(D.f[DIR_M0M])[kbw ] = c1over54* (drho+three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - //(D.f[DIR_P0M])[kbe ] = c1over54* (drho+three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - //(D.f[DIR_M0P])[ktw ] = c1over54* (drho+three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - //(D.f[DIR_0PP])[ktn ] = c1over54* (drho+three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cu_sq); - //(D.f[DIR_0MM])[kbs ] = c1over54* (drho+three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - //(D.f[DIR_0PM])[kbn ] = c1over54* (drho+three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cu_sq); - //(D.f[DIR_0MP])[kts ] = c1over54* (drho+three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - //(D.f[DIR_PPP])[ktne ] = c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - //(D.f[DIR_MMM])[kbsw ] = c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - //(D.f[DIR_PPM])[kbne ] = c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - //(D.f[DIR_MMP])[ktsw ] = c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - //(D.f[DIR_PMP])[ktse ] = c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - //(D.f[DIR_MPM])[kbnw ] = c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - //(D.f[DIR_PMM])[kbse ] = c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - //(D.f[DIR_MPP])[ktnw ] = c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - } - } -} -////////////////////////////////////////////////////////////////////////// - - diff --git a/src/gpu/VirtualFluids_GPU/GPU/WaleCumulant27.cu b/src/gpu/VirtualFluids_GPU/GPU/WaleCumulant27.cu deleted file mode 100644 index 6bac690a881494520a33e901c35c3f51e4d2bfc7..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/GPU/WaleCumulant27.cu +++ /dev/null @@ -1,1048 +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; - -#include "math.h" - - - -//////////////////////////////////////////////////////////////////////////////// -__global__ void LB_Kernel_WaleBySoniMalav_Cum_AA2016_Comp_SP_27( - real omega_in, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* neighborWSB, - real* veloX, - real* veloY, - real* veloZ, - real* DDStart, - real* turbulentViscosity, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<numberOfLBnodes) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if (BC == GEO_FLUID /*(BC != GEO_SOLID) && (BC != GEO_VOID)*/) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int kw = neighborX[k]; - unsigned int ks = neighborY[k]; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kbw = neighborZ[kw]; - unsigned int kbs = neighborZ[ks]; - unsigned int kbsw = neighborZ[ksw]; - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k]; - real mfabb = (D.f[DIR_M00])[kw]; - real mfbcb = (D.f[DIR_0P0])[k]; - real mfbab = (D.f[DIR_0M0])[ks]; - real mfbbc = (D.f[DIR_00P])[k]; - real mfbba = (D.f[DIR_00M])[kb]; - real mfccb = (D.f[DIR_PP0])[k]; - real mfaab = (D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks]; - real mfacb = (D.f[DIR_MP0])[kw]; - real mfcbc = (D.f[DIR_P0P])[k]; - real mfaba = (D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb]; - real mfabc = (D.f[DIR_M0P])[kw]; - real mfbcc = (D.f[DIR_0PP])[k]; - real mfbaa = (D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb]; - real mfbac = (D.f[DIR_0MP])[ks]; - real mfbbb = (D.f[DIR_000])[k]; - real mfccc = (D.f[DIR_PPP])[k]; - real mfaac = (D.f[DIR_MMP])[ksw]; - real mfcac = (D.f[DIR_PMP])[ks]; - real mfacc = (D.f[DIR_MPP])[kw]; - real mfcca = (D.f[DIR_PPM])[kb]; - real mfaaa = (D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs]; - real mfaca = (D.f[DIR_MPM])[kbw]; - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - - real rho = c1o1 + drho; - //////////////////////////////////////////////////////////////////////////////////// - //slow - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) / rho; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) / rho; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) / rho; - ////////////////////////////////////////////////////////////////////////////////////// - real nuOld = c1o3 * (c1o1 / omega_in - c1o2); - real nuTurb = c0o1; - unsigned int kPx = neighborX[k]; - unsigned int kPy = neighborY[k]; - unsigned int kPz = neighborZ[k]; - unsigned int kMxyz = neighborWSB[k]; - unsigned int kMx = neighborZ[neighborY[kMxyz]]; - unsigned int kMy = neighborZ[neighborX[kMxyz]]; - unsigned int kMz = neighborY[neighborX[kMxyz]]; - - real Cw = 0.55; - unsigned int DelX = 1; - - //////////////////////////////////////////////////////////////////////////////////// - ///////////////////// WALE model /////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //float tauTotal; - float wOper; // total relaxation time and operator for the WALE model - float dxux, dyuy, dzuz, dyux, dxuy, dzux, dxuz, dzuy, dyuz; // 9 velocity gradients required for computing the strain rate tensor and vorticity tensor - - // gradients wrt X-axis - if (bcMatD[kMx] != GEO_FLUID) - { - dxux = (veloX[kPx] - veloX[k]) / c1o1; - dxuy = (veloY[kPx] - veloY[k]) / c1o1; - dxuz = (veloZ[kPx] - veloZ[k]) / c1o1; - } - else if (bcMatD[kPx] != GEO_FLUID) - { - dxux = (veloX[k] - veloX[kMx]) / c1o1; - dxuy = (veloY[k] - veloY[kMx]) / c1o1; - dxuz = (veloZ[k] - veloZ[kMx]) / c1o1; - } - else if (bcMatD[kPx] == GEO_FLUID && bcMatD[kMx] == GEO_FLUID) - { - dxux = (veloX[kPx] - veloX[kMx]) / c2o1; - dxuy = (veloY[kPx] - veloY[kMx]) / c2o1; - dxuz = (veloZ[kPx] - veloZ[kMx]) / c2o1; - } - - // gradients wrt Y-axis - if (bcMatD[kMy] != GEO_FLUID) - { - dyux = (veloX[kPy] - veloX[k]) / c1o1; - dyuy = (veloY[kPy] - veloY[k]) / c1o1; - dyuz = (veloZ[kPy] - veloZ[k]) / c1o1; - } - else if (bcMatD[kPy] != GEO_FLUID) - { - dyux = (veloX[k] - veloX[kMy]) / c1o1; - dyuy = (veloY[k] - veloY[kMy]) / c1o1; - dyuz = (veloZ[k] - veloZ[kMy]) / c1o1; - } - else if (bcMatD[kPy] == GEO_FLUID && bcMatD[kMy] == GEO_FLUID) - { - dyux = (veloX[kPy] - veloX[kMy]) / c2o1; - dyuy = (veloY[kPy] - veloY[kMy]) / c2o1; - dyuz = (veloZ[kPy] - veloZ[kMy]) / c2o1; - } - - // gradients wrt Z-axis - if (bcMatD[kMz] != GEO_FLUID) - { - dzux = (veloX[kPz] - veloX[k]) / c1o1; - dzuy = (veloY[kPz] - veloY[k]) / c1o1; - dzuz = (veloZ[kPz] - veloZ[k]) / c1o1; - } - else if (bcMatD[kPz] != GEO_FLUID) - { - dzux = (veloX[k] - veloX[kMz]) / c1o1; - dzuy = (veloY[k] - veloY[kMz]) / c1o1; - dzuz = (veloZ[k] - veloZ[kMz]) / c1o1; - } - else if (bcMatD[kPz] == GEO_FLUID && bcMatD[kMz] == GEO_FLUID) - { - dzux = (veloX[kPz] - veloX[kMz]) / c2o1; - dzuy = (veloY[kPz] - veloY[kMz]) / c2o1; - dzuz = (veloZ[kPz] - veloZ[kMz]) / c2o1; - } - //dxux = (veloX[kPx] - veloX[kMx]) / two; dyux = (veloX[kPy] - veloX[kMy]) / two; dzux = (veloX[kPz] - veloX[kMz]) / two; - //dxuy = (veloY[kPx] - veloY[kMx]) / two; dyuy = (veloY[kPy] - veloY[kMy]) / two; dzuy = (veloY[kPz] - veloY[kMz]) / two; - //dxuz = (veloZ[kPx] - veloZ[kMx]) / two; dyuz = (veloZ[kPy] - veloZ[kMy]) / two; dzuz = (veloZ[kPz] - veloZ[kMz]) / two; - - - /////////// Computing the strain rate and the vorticity tensor /////////// - /////////// i=1, j=2, k=3 will be used as indices to compute the strain tensor components as shown below - /////////// S12 is equivalent to Sij and S13 equivalent to Sik and so on. The same applies for the vorticity tensor also//////// - - real Sii, Sij, Sik, Sji, Sjj, Sjk, Ski, Skj, Skk; // Strain tensor components - - - Sii = dxux; Sij = c1o2 * (dyux + dxuy); Sik = c1o2 * (dzux + dxuz); - Sji = Sij; Sjj = dyuy; Sjk = c1o2 * (dzuy + dyuz); - Ski = Sik; Skj = Sjk; Skk = dzuz; - - real Rij, Rik, Rji, Rjk, Rki, Rkj; // Vorticity or Rotation tensor components - // the vorticity components will have zero diagonal components - - Rij = c1o2 * (dyux - dxuy); Rik = c1o2 * (dzux - dxuz); - Rji = -1.0f * Rij; Rjk = c1o2 * (dzuy - dyuz); - Rki = -1.0f * Rik; Rkj = -1.0f * Rjk; - - ///////// Computation for the terms of the traceless tensor ///////////// - ///////// Terms for the matrix multiplication of strain tensor i.e Sik*Skj ////////// - - real S1t = Sii*Sii + Sij*Sji + Sik*Ski; real S2t = Sii*Sij + Sij*Sjj + Sik*Skj; real S3t = Sii*Sik + Sij*Sjk + Sik*Skk; - real S4t = Sji*Sii + Sjj*Sji + Sjk*Ski; real S5t = Sji*Sij + Sjj*Sjj + Sjk*Skj; real S6t = Sji*Sik + Sjj*Sjk + Sjk*Skk; - real S7t = Ski*Sii + Skj*Sji + Skk*Ski; real S8t = Ski*Sij + Skj*Sjj + Skk*Skj; real S9t = Ski*Sik + Skj*Sjk + Skk*Skk; - - ///////// Terms for the matrix multiplication of Rotation tensor i.e Rik*Rkj ////////// - - real R1t = Rij*Rji + Rik*Rki; real R2t = Rik*Rkj; real R3t = Rij*Rjk; - real R4t = Rjk*Rki; real R5t = Rji*Rij + Rjk*Rkj; real R6t = Rji*Rik; - real R7t = Rkj*Rji; real R8t = Rki*Rij; real R9t = Rki*Rik + Rkj*Rjk; - - ///// Inner product between the terms of the strain (Sij*Sij) and rotation tensor (Rij*Rij) //// - - real S2 = Sii*Sii + c2o1 * Sij*Sij + c2o1 * Sik*Sik + Sjj*Sjj + c2o1 * Sjk*Sjk + Skk*Skk; - real R2 = c2o1 * Rij*Rij + c2o1 * Rik*Rik + c2o1 * Rjk*Rjk; - - //Computation for the traceless tensor - - real traceTerm = c1o3 * (S2 - R2); - - real S1d, S2d, S3d, S4d, S5d, S6d, S7d, S8d, S9d; - - S1d = S1t + R1t - traceTerm; S2d = S2t + R2t; S3d = S3t + R3t; - S4d = S4t + R4t; S5d = S5t + R5t - traceTerm; S6d = S6t + R6t; - S7d = S7t + R7t; S8d = S8t + R8t; S9d = S9t + R9t - traceTerm; - - // Contraction of the traceless tensor - - real SdSd = S1d*S1d + S2d*S2d + S3d*S3d + S4d*S4d + S5d*S5d + S6d*S6d + S7d*S7d + S8d*S8d + S9d*S9d; - /////////////// Computing turbulent viscosity /////////////////////// - - //wOper = (real)pow((double)SdSd, 1.5) / ((real)pow((double)S2, 2.5) + (real)pow((double)SdSd, 1.25) + smallSingle);// 1e-26f); - wOper = (float)pow((double)SdSd, 0.25) / ((float)pow((double)((float)pow((double)S2, 0.5) / ((float)pow((double)SdSd, 0.25) + 1e-10)), 5.0) + 1); - - nuTurb = (Cw*Cw * DelX*DelX) * wOper; - - turbulentViscosity[k] = nuTurb; - - real omega = c1o1 / (c3o1 * (nuOld + nuTurb) + c1o2); - - ///////////// Wale Model /////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - { - real fx = forces[0] / (pow((double)c2o1, (double)level)); //zero;//0.0032653/(pow(two,level)); //0.000000005;//(two/1600000.0) / 120.0; // - real fy = forces[1] / (pow((double)c2o1, (double)level)); //zero; - real fz = forces[2] / (pow((double)c2o1, (double)level)); //zero; - vvx += fx*c1o2; - vvy += fy*c1o2; - vvz += fz*c1o2; - } - //////////////////////////////////////////////////////////////////////////////////// - //real omega = omega_in + nuTurb; - //////////////////////////////////////////////////////////////////////////////////// - //fast - real oMdrho = c1o1; // comp special - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - ////////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimitP = 0.01f;// * 0.0001f; - real qudricLimitM = 0.01f;// * 0.0001f; - real qudricLimitD = 0.01f;// * 0.001f; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; //set the bulk viscosity one is high / two is very low and zero is (too) high ... (also called omega 2) - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - real OxyyPxzz = c8o1*(-c2o1+omega)*(c1o1+c2o1*omega)/(-c8o1-c14o1*omega+c7o1*omega*omega);//one; - real OxyyMxzz = c8o1*(-c2o1+omega)*(-c7o1+c4o1*omega)/(c56o1-c50o1*omega+c9o1*omega*omega);//one; - real Oxyz = c24o1*(-c2o1+omega)*(-c2o1-c7o1*omega+c3o1*omega*omega)/(c48o1+c152o1*omega-c130o1*omega*omega+c29o1*omega*omega*omega);//one; - //////////////////////////////////////////////////////////// - //4. - ////////////////////////////// - real O4 = c1o1; - ////////////////////////////// - //real O4 = omega;//TRT - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = c1o1; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = c1o1; - //////////////////////////////////////////////////////////// - - - //central moments to cumulants - //4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; //ab 15.05.2015 verwendet - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; //ab 15.05.2015 verwendet - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; //ab 15.05.2015 verwendet - - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - //+ c1o27*(one -three/rho +two/(rho*rho))); - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction - { - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - } - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - ////////////////////////////////////////////////////////////////////////// - //das ist der limiter - wadjust = Oxyz + (c1o1 - Oxyz)*abs(mfbbb) / (abs(mfbbb) + qudricLimitD); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimitP); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimitM); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimitP); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimitM); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimitP); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimitM); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //mfbbb += OxyyMxzz * (-mfbbb); - //mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - //mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - //mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - //mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - //mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - //mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - //mit limiter - // wadjust = O4+(one-O4)*abs(CUMacc)/(abs(CUMacc)+qudricLimit); - //CUMacc += wadjust * (-CUMacc); - // wadjust = O4+(one-O4)*abs(CUMcac)/(abs(CUMcac)+qudricLimit); - //CUMcac += wadjust * (-CUMcac); - // wadjust = O4+(one-O4)*abs(CUMcca)/(abs(CUMcca)+qudricLimit); - //CUMcca += wadjust * (-CUMcca); - - // wadjust = O4+(one-O4)*abs(CUMbbc)/(abs(CUMbbc)+qudricLimit); - //CUMbbc += wadjust * (-CUMbbc); - // wadjust = O4+(one-O4)*abs(CUMbcb)/(abs(CUMbcb)+qudricLimit); - //CUMbcb += wadjust * (-CUMbcb); - // wadjust = O4+(one-O4)*abs(CUMcbb)/(abs(CUMcbb)+qudricLimit); - //CUMcbb += wadjust * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; //ab 15.05.2015 verwendet - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; //ab 15.05.2015 verwendet - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; //ab 15.05.2015 verwendet - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho));//(one/rho-one)); - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho));//(one/rho-one)); - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho));//(one/rho-one)); - - //5. - mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - //+ c1o27*(one -three/rho +two/(rho*rho))); - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb; - (D.f[DIR_M00])[kw] = mfcbb; - (D.f[DIR_0P0])[k] = mfbab; - (D.f[DIR_0M0])[ks] = mfbcb; - (D.f[DIR_00P])[k] = mfbba; - (D.f[DIR_00M])[kb] = mfbbc; - (D.f[DIR_PP0])[k] = mfaab; - (D.f[DIR_MM0])[ksw] = mfccb; - (D.f[DIR_PM0])[ks] = mfacb; - (D.f[DIR_MP0])[kw] = mfcab; - (D.f[DIR_P0P])[k] = mfaba; - (D.f[DIR_M0M])[kbw] = mfcbc; - (D.f[DIR_P0M])[kb] = mfabc; - (D.f[DIR_M0P])[kw] = mfcba; - (D.f[DIR_0PP])[k] = mfbaa; - (D.f[DIR_0MM])[kbs] = mfbcc; - (D.f[DIR_0PM])[kb] = mfbac; - (D.f[DIR_0MP])[ks] = mfbca; - (D.f[DIR_000])[k] = mfbbb; - (D.f[DIR_PPP])[k] = mfaaa; - (D.f[DIR_PMP])[ks] = mfaca; - (D.f[DIR_PPM])[kb] = mfaac; - (D.f[DIR_PMM])[kbs] = mfacc; - (D.f[DIR_MPP])[kw] = mfcaa; - (D.f[DIR_MMP])[ksw] = mfcca; - (D.f[DIR_MPM])[kbw] = mfcac; - (D.f[DIR_MMM])[kbsw] = mfccc; - //////////////////////////////////////////////////////////////////////////////////// - } - } -} -//////////////////////////////////////////////////////////////////////////////// - - - - - - - diff --git a/src/gpu/VirtualFluids_GPU/GPU/WallFunction.cu b/src/gpu/VirtualFluids_GPU/GPU/WallFunction.cu deleted file mode 100644 index 6de196e1788494b20c24a73cb9ec02a360f868ea..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/GPU/WallFunction.cu +++ /dev/null @@ -1,520 +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 WallFunction27( - real* vx, - real* vy, - real* vz, - real* DD, - 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[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * 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 VeloX = vx[k]; - //real VeloY = vy[k]; - //real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny) - //////////////////////////////////////////////////////////////////////////////// - //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[DIR_P00 * numberOfBCnodes]; - //q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - //q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - //q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - //q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - //q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - //q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - //q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - //q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - //q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - //q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - //q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - //q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - //q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - //q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - //q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - //q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - //q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - //q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - //q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - //q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - //q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - //q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - //q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - //q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - //q_dirBNW = &QQ[DIR_MPM * 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[DIR_P00])[ke ]; - f_E = (D.f[DIR_M00])[kw ]; - f_S = (D.f[DIR_0P0])[kn ]; - f_N = (D.f[DIR_0M0])[ks ]; - f_B = (D.f[DIR_00P])[kt ]; - f_T = (D.f[DIR_00M])[kb ]; - f_SW = (D.f[DIR_PP0])[kne ]; - f_NE = (D.f[DIR_MM0])[ksw ]; - f_NW = (D.f[DIR_PM0])[kse ]; - f_SE = (D.f[DIR_MP0])[knw ]; - f_BW = (D.f[DIR_P0P])[kte ]; - f_TE = (D.f[DIR_M0M])[kbw ]; - f_TW = (D.f[DIR_P0M])[kbe ]; - f_BE = (D.f[DIR_M0P])[ktw ]; - f_BS = (D.f[DIR_0PP])[ktn ]; - f_TN = (D.f[DIR_0MM])[kbs ]; - f_TS = (D.f[DIR_0PM])[kbn ]; - f_BN = (D.f[DIR_0MP])[kts ]; - f_BSW = (D.f[DIR_PPP])[ktne ]; - f_BNE = (D.f[DIR_MMP])[ktsw ]; - f_BNW = (D.f[DIR_PMP])[ktse ]; - f_BSE = (D.f[DIR_MPP])[ktnw ]; - f_TSW = (D.f[DIR_PPM])[kbne ]; - f_TNE = (D.f[DIR_MMM])[kbsw ]; - f_TNW = (D.f[DIR_PMM])[kbse ]; - f_TSE = (D.f[DIR_MPM])[kbnw ]; - //////////////////////////////////////////////////////////////////////////////// - // real vx2, vx3, feq, q; - real vx1, 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[DIR_000])[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) * (one + drho); - - real nu = c1o3 * (c1o1 / om1 - c1o2); - real qw = c1o1; - real uTau = sqrt(nu * (vx1 - VeloX) / qw); - - if (abs(uTau)/nu>11){ - uTau = vx1 * 0.41 / (log10(9.8 * uTau * qw / nu)); - - - - vx[k] = vx1 - uTau * uTau * qw / nu; - vx[k] = (vx[k]> 0.05) ? 0.05 : ((vx[k]< -0.05) ? -0.05 : vx[k] ); - } - else{ vx[k]=c0o1; } - //vy[k] = 0.01; //Test...muss wieder raus - //vz[k] = 0.01; //Test...muss wieder raus - - // ////////////////////////////////////////////////////////////////////////// - // if (isEvenTimestep==false) - // { - // D.f[DIR_P00] = &DD[DIR_P00 * size_Mat]; - // D.f[DIR_M00] = &DD[DIR_M00 * size_Mat]; - // D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat]; - // D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat]; - // D.f[DIR_00P] = &DD[DIR_00P * size_Mat]; - // D.f[DIR_00M] = &DD[DIR_00M * size_Mat]; - // D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat]; - // D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat]; - // D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat]; - // D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat]; - // D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat]; - // D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat]; - // D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat]; - // D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat]; - // D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat]; - // D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat]; - // D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat]; - // D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat]; - // D.f[DIR_000] = &DD[DIR_000 * size_Mat]; - // D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat]; - // D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat]; - // D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat]; - // D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat]; - // D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat]; - // D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat]; - // D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat]; - // D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat]; - // } - // else - // { - // D.f[DIR_M00] = &DD[DIR_P00 * size_Mat]; - // D.f[DIR_P00] = &DD[DIR_M00 * size_Mat]; - // D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat]; - // D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat]; - // D.f[DIR_00M] = &DD[DIR_00P * size_Mat]; - // D.f[DIR_00P] = &DD[DIR_00M * size_Mat]; - // D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat]; - // D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat]; - // D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat]; - // D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat]; - // D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat]; - // D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat]; - // D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat]; - // D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat]; - // D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat]; - // D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat]; - // D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat]; - // D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat]; - // D.f[DIR_000] = &DD[DIR_000 * size_Mat]; - // D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat]; - // D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat]; - // D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat]; - // D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat]; - // D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat]; - // D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat]; - // D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat]; - // D.f[DIR_MPM] = &DD[DIR_PMP * size_Mat]; - // } - // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // //Test - // //(D.f[DIR_000])[k]=c1o10; - // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ////ToDo anders Klammern - - // q = q_dirE[k]; - // if (q>=zero && q<=one) - // { - // feq=c2over27* (drho/*+three*( vx1 )*/+c9over2*( vx1 )*( vx1 ) * (one + drho)-cu_sq); - // (D.f[DIR_M00])[kw]=(one-q)/(one+q)*(f_E-f_W+(f_E+f_W-two*feq*om1)/(one-om1))*c1o2+(q*(f_E+f_W)-six*c2over27*( VeloX ))/(one+q);// - c2over27 * drho; - // //(D.f[DIR_M00])[kw]=zero; - // } - - // q = q_dirW[k]; - // if (q>=zero && q<=one) - // { - // feq=c2over27* (drho/*+three*(-vx1 )*/+c9over2*(-vx1 )*(-vx1 ) * (one + drho)-cu_sq); - // (D.f[DIR_P00])[ke]=(one-q)/(one+q)*(f_W-f_E+(f_W+f_E-two*feq*om1)/(one-om1))*c1o2+(q*(f_W+f_E)-six*c2over27*(-VeloX ))/(one+q);// - c2over27 * drho; - // //(D.f[DIR_P00])[ke]=zero; - // } - - // q = q_dirN[k]; - // if (q>=zero && q<=one) - // { - // feq=c2over27* (drho/*+three*( vx2 )*/+c9over2*( vx2 )*( vx2 ) * (one + drho)-cu_sq); - // (D.f[DIR_0M0])[ks]=(one-q)/(one+q)*(f_N-f_S+(f_N+f_S-two*feq*om1)/(one-om1))*c1o2+(q*(f_N+f_S)-six*c2over27*( VeloY ))/(one+q);// - c2over27 * drho; - // //(D.f[DIR_0M0])[ks]=zero; - // } - - // q = q_dirS[k]; - // if (q>=zero && q<=one) - // { - // feq=c2over27* (drho/*+three*( -vx2 )*/+c9over2*( -vx2 )*( -vx2 ) * (one + drho)-cu_sq); - // (D.f[DIR_0P0])[kn]=(one-q)/(one+q)*(f_S-f_N+(f_S+f_N-two*feq*om1)/(one-om1))*c1o2+(q*(f_S+f_N)-six*c2over27*(-VeloY ))/(one+q);// - c2over27 * drho; - // //(D.f[DIR_0P0])[kn]=zero; - // } - - // q = q_dirT[k]; - // if (q>=zero && q<=one) - // { - // feq=c2over27* (drho/*+three*( vx3)*/+c9over2*( vx3)*( vx3) * (one + drho)-cu_sq); - // (D.f[DIR_00M])[kb]=(one-q)/(one+q)*(f_T-f_B+(f_T+f_B-two*feq*om1)/(one-om1))*c1o2+(q*(f_T+f_B)-six*c2over27*( VeloZ ))/(one+q);// - c2over27 * drho; - // //(D.f[DIR_00M])[kb]=one; - // } - - // q = q_dirB[k]; - // if (q>=zero && q<=one) - // { - // feq=c2over27* (drho/*+three*( -vx3)*/+c9over2*( -vx3)*( -vx3) * (one + drho)-cu_sq); - // (D.f[DIR_00P])[kt]=(one-q)/(one+q)*(f_B-f_T+(f_B+f_T-two*feq*om1)/(one-om1))*c1o2+(q*(f_B+f_T)-six*c2over27*(-VeloZ ))/(one+q);// - c2over27 * drho; - // //(D.f[DIR_00P])[kt]=zero; - // } - - // q = q_dirNE[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over54* (drho/*+three*( vx1+vx2 )*/+c9over2*( vx1+vx2 )*( vx1+vx2 ) * (one + drho)-cu_sq); - // (D.f[DIR_MM0])[ksw]=(one-q)/(one+q)*(f_NE-f_SW+(f_NE+f_SW-two*feq*om1)/(one-om1))*c1o2+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q);// - c1over54 * drho; - // //(D.f[DIR_MM0])[ksw]=zero; - // } - - // q = q_dirSW[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over54* (drho/*+three*(-vx1-vx2 )*/+c9over2*(-vx1-vx2 )*(-vx1-vx2 ) * (one + drho)-cu_sq); - // (D.f[DIR_PP0])[kne]=(one-q)/(one+q)*(f_SW-f_NE+(f_SW+f_NE-two*feq*om1)/(one-om1))*c1o2+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q);// - c1over54 * drho; - // //(D.f[DIR_PP0])[kne]=zero; - // } - - // q = q_dirSE[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over54* (drho/*+three*( vx1-vx2 )*/+c9over2*( vx1-vx2 )*( vx1-vx2 ) * (one + drho)-cu_sq); - // (D.f[DIR_MP0])[knw]=(one-q)/(one+q)*(f_SE-f_NW+(f_SE+f_NW-two*feq*om1)/(one-om1))*c1o2+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q);// - c1over54 * drho; - // //(D.f[DIR_MP0])[knw]=zero; - // } - - // q = q_dirNW[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over54* (drho/*+three*(-vx1+vx2 )*/+c9over2*(-vx1+vx2 )*(-vx1+vx2 ) * (one + drho)-cu_sq); - // (D.f[DIR_PM0])[kse]=(one-q)/(one+q)*(f_NW-f_SE+(f_NW+f_SE-two*feq*om1)/(one-om1))*c1o2+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q);// - c1over54 * drho; - // //(D.f[DIR_PM0])[kse]=zero; - // } - - // q = q_dirTE[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over54* (drho/*+three*( vx1 +vx3)*/+c9over2*( vx1 +vx3)*( vx1 +vx3) * (one + drho)-cu_sq); - // (D.f[DIR_M0M])[kbw]=(one-q)/(one+q)*(f_TE-f_BW+(f_TE+f_BW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q);// - c1over54 * drho; - // //(D.f[DIR_M0M])[kbw]=zero; - // } - - // q = q_dirBW[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over54* (drho/*+three*(-vx1 -vx3)*/+c9over2*(-vx1 -vx3)*(-vx1 -vx3) * (one + drho)-cu_sq); - // (D.f[DIR_P0P])[kte]=(one-q)/(one+q)*(f_BW-f_TE+(f_BW+f_TE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q);// - c1over54 * drho; - // //(D.f[DIR_P0P])[kte]=zero; - // } - - // q = q_dirBE[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over54* (drho/*+three*( vx1 -vx3)*/+c9over2*( vx1 -vx3)*( vx1 -vx3) * (one + drho)-cu_sq); - // (D.f[DIR_M0P])[ktw]=(one-q)/(one+q)*(f_BE-f_TW+(f_BE+f_TW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q);// - c1over54 * drho; - // //(D.f[DIR_M0P])[ktw]=zero; - // } - - // q = q_dirTW[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over54* (drho/*+three*(-vx1 +vx3)*/+c9over2*(-vx1 +vx3)*(-vx1 +vx3) * (one + drho)-cu_sq); - // (D.f[DIR_P0M])[kbe]=(one-q)/(one+q)*(f_TW-f_BE+(f_TW+f_BE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q);// - c1over54 * drho; - // //(D.f[DIR_P0M])[kbe]=zero; - // } - - // q = q_dirTN[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over54* (drho/*+three*( vx2+vx3)*/+c9over2*( vx2+vx3)*( vx2+vx3) * (one + drho)-cu_sq); - // (D.f[DIR_0MM])[kbs]=(one-q)/(one+q)*(f_TN-f_BS+(f_TN+f_BS-two*feq*om1)/(one-om1))*c1o2+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q);// - c1over54 * drho; - // //(D.f[DIR_0MM])[kbs]=zero; - // } - - // q = q_dirBS[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over54* (drho/*+three*( -vx2-vx3)*/+c9over2*( -vx2-vx3)*( -vx2-vx3) * (one + drho)-cu_sq); - // (D.f[DIR_0PP])[ktn]=(one-q)/(one+q)*(f_BS-f_TN+(f_BS+f_TN-two*feq*om1)/(one-om1))*c1o2+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q);// - c1over54 * drho; - // //(D.f[DIR_0PP])[ktn]=zero; - // } - - // q = q_dirBN[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over54* (drho/*+three*( vx2-vx3)*/+c9over2*( vx2-vx3)*( vx2-vx3) * (one + drho)-cu_sq); - // (D.f[DIR_0MP])[kts]=(one-q)/(one+q)*(f_BN-f_TS+(f_BN+f_TS-two*feq*om1)/(one-om1))*c1o2+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q);// - c1over54 * drho; - // //(D.f[DIR_0MP])[kts]=zero; - // } - - // q = q_dirTS[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over54* (drho/*+three*( -vx2+vx3)*/+c9over2*( -vx2+vx3)*( -vx2+vx3) * (one + drho)-cu_sq); - // (D.f[DIR_0PM])[kbn]=(one-q)/(one+q)*(f_TS-f_BN+(f_TS+f_BN-two*feq*om1)/(one-om1))*c1o2+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q);// - c1over54 * drho; - // //(D.f[DIR_0PM])[kbn]=zero; - // } - - // q = q_dirTNE[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over216*(drho/*+three*( vx1+vx2+vx3)*/+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (one + drho)-cu_sq); - // (D.f[DIR_MMM])[kbsw]=(one-q)/(one+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q);// - c1over216 * drho; - // //(D.f[DIR_MMM])[kbsw]=zero; - // } - - // q = q_dirBSW[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over216*(drho/*+three*(-vx1-vx2-vx3)*/+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (one + drho)-cu_sq); - // (D.f[DIR_PPP])[ktne]=(one-q)/(one+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q);// - c1over216 * drho; - // //(D.f[DIR_PPP])[ktne]=zero; - // } - - // q = q_dirBNE[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over216*(drho/*+three*( vx1+vx2-vx3)*/+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (one + drho)-cu_sq); - // (D.f[DIR_MMP])[ktsw]=(one-q)/(one+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q);// - c1over216 * drho; - // //(D.f[DIR_MMP])[ktsw]=zero; - // } - - // q = q_dirTSW[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over216*(drho/*+three*(-vx1-vx2+vx3)*/+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (one + drho)-cu_sq); - // (D.f[DIR_PPM])[kbne]=(one-q)/(one+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q);// - c1over216 * drho; - // //(D.f[DIR_PPM])[kbne]=zero; - // } - - // q = q_dirTSE[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over216*(drho/*+three*( vx1-vx2+vx3)*/+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (one + drho)-cu_sq); - // (D.f[DIR_MPM])[kbnw]=(one-q)/(one+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q);// - c1over216 * drho; - // //(D.f[DIR_MPM])[kbnw]=zero; - // } - - // q = q_dirBNW[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over216*(drho/*+three*(-vx1+vx2-vx3)*/+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (one + drho)-cu_sq); - // (D.f[DIR_PMP])[ktse]=(one-q)/(one+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q);// - c1over216 * drho; - // //(D.f[DIR_PMP])[ktse]=zero; - // } - - // q = q_dirBSE[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over216*(drho/*+three*( vx1-vx2-vx3)*/+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (one + drho)-cu_sq); - // (D.f[DIR_MPP])[ktnw]=(one-q)/(one+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q);// - c1over216 * drho; - // //(D.f[DIR_MPP])[ktnw]=zero; - // } - - // q = q_dirTNW[k]; - // if (q>=zero && q<=one) - // { - // feq=c1over216*(drho/*+three*(-vx1+vx2+vx3)*/+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (one + drho)-cu_sq); - // (D.f[DIR_PMM])[kbse]=(one-q)/(one+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q);// - c1over216 * drho; - // //(D.f[DIR_PMM])[kbse]=zero; - // } - } -} -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - - - - - - diff --git a/src/gpu/VirtualFluids_GPU/Kernel/ADKernel.h b/src/gpu/VirtualFluids_GPU/Kernel/ADKernel.h deleted file mode 100644 index 583ef78aa459c580bb2249e4dbf920ce39e8bbb3..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/ADKernel.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef ADV_DIFF_KERNEL_H -#define ADV_DIFF_KERNEL_H - -#include "Kernel/KernelImp.h" - -class ADKernel : public KernelImp -{ - virtual void run() = 0; -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplusUnified.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplusUnified.cu deleted file mode 100644 index bafd4477dc611b77f17c896dc85832b71acdccc0..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplusUnified.cu +++ /dev/null @@ -1,57 +0,0 @@ -#include "B15CompressibleNavierStokesBGKplusUnified.h" - -#include <stdexcept> - -#include "Parameter/Parameter.h" -#include "../RunLBMKernel.cuh" - -#include <lbm/BGK.h> -#include <lbm/KernelParameter.h> - - -namespace vf -{ -namespace gpu -{ - - -B15CompressibleNavierStokesBGKplusUnified::B15CompressibleNavierStokesBGKplusUnified(std::shared_ptr<Parameter> para, int level) - : KernelImp(para, level) -{ -#ifndef BUILD_CUDA_LTO - throw std::invalid_argument("To use the BKGUnified kernel, pass -DBUILD_CUDA_LTO=ON to cmake. Requires: CUDA 11.2 & cc 5.0"); -#endif - - myPreProcessorTypes.push_back(InitCompSP27); - - - - this->cudaGrid = cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); -} - - -void B15CompressibleNavierStokesBGKplusUnified::run() -{ - GPUKernelParameter kernelParameter{ - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - (int)para->getParD(level)->numberOfNodes, - nullptr, /* forces not used in bgk kernel */ - para->getParD(level)->isEvenTimestep }; - - auto lambda = [] __device__(lbm::KernelParameter parameter) { - return lbm::bgk(parameter); - }; - - runKernel<<<cudaGrid.grid, cudaGrid.threads>>>(lambda, kernelParameter); - - getLastCudaError("LB_Kernel_BGKUnified execution failed"); -} - - -} -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplusUnified.h b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplusUnified.h deleted file mode 100644 index ffc8ce41d13369b78d19ff0d55bab988696cdb5d..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplusUnified.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef B15CompressibleNavierStokesBGKplusUnified_H -#define B15CompressibleNavierStokesBGKplusUnified_H - -#include "Kernel/KernelImp.h" - -namespace vf -{ -namespace gpu -{ - -class B15CompressibleNavierStokesBGKplusUnified : public KernelImp -{ -public: - B15CompressibleNavierStokesBGKplusUnified(std::shared_ptr<Parameter> para, int level); - - void run(); -}; - -} -} - -#endif diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes.cu deleted file mode 100644 index 2f906587857bfa6cf90d0441a5488efefc140f3d..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes.cu +++ /dev/null @@ -1,40 +0,0 @@ -#include "C06CompressibleNavierStokes.h" - -#include "C06CompressibleNavierStokes_Device.cuh" -#include "Parameter/Parameter.h" -#include <cuda_helper/CudaGrid.h> - -std::shared_ptr<C06CompressibleNavierStokes> C06CompressibleNavierStokes::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<C06CompressibleNavierStokes>(new C06CompressibleNavierStokes(para, level)); -} - -void C06CompressibleNavierStokes::run() -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); - - C06CompressibleNavierStokes_Device <<< grid.grid, grid.threads >>>( - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->numberOfNodes, - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_Kernel_Cascade_Comp_SP_27 execution failed"); -} - -C06CompressibleNavierStokes::C06CompressibleNavierStokes(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitCompSP27); - - -} - -C06CompressibleNavierStokes::C06CompressibleNavierStokes() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes.h b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes.h deleted file mode 100644 index 8004ad52ea2471ed6319fc373175e509dedef5ff..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef C06CompressibleNavierStokes_H -#define C06CompressibleNavierStokes_H - -#include "Kernel/KernelImp.h" - -class C06CompressibleNavierStokes : public KernelImp -{ -public: - static std::shared_ptr<C06CompressibleNavierStokes> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - C06CompressibleNavierStokes(); - C06CompressibleNavierStokes(std::shared_ptr< Parameter> para, int level); -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes_Device.cu deleted file mode 100644 index 6cf0fd639523d4cef8290f860f03b4bc75e3252c..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes_Device.cu +++ /dev/null @@ -1,766 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void C06CompressibleNavierStokes_Device(real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - int size_Mat, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if( (BC != GEO_SOLID) && (BC != GEO_VOID) ) - { - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k ];//[ke ]; - real mfabb = (D.f[DIR_M00])[kw ];//[kw ]; - real mfbcb = (D.f[DIR_0P0])[k ];//[kn ]; - real mfbab = (D.f[DIR_0M0])[ks ];//[ks ]; - real mfbbc = (D.f[DIR_00P])[k ];//[kt ]; - real mfbba = (D.f[DIR_00M])[kb ];//[kb ]; - real mfccb = (D.f[DIR_PP0])[k ];//[kne ]; - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ]; - real mfcab = (D.f[DIR_PM0])[ks ];//[kse ]; - real mfacb = (D.f[DIR_MP0])[kw ];//[knw ]; - real mfcbc = (D.f[DIR_P0P])[k ];//[kte ]; - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ]; - real mfcba = (D.f[DIR_P0M])[kb ];//[kbe ]; - real mfabc = (D.f[DIR_M0P])[kw ];//[ktw ]; - real mfbcc = (D.f[DIR_0PP])[k ];//[ktn ]; - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ]; - real mfbca = (D.f[DIR_0PM])[kb ];//[kbn ]; - real mfbac = (D.f[DIR_0MP])[ks ];//[kts ]; - real mfbbb = (D.f[DIR_000])[k ];//[kzero]; - real mfccc = (D.f[DIR_PPP])[k ];//[ktne ]; - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ]; - real mfcac = (D.f[DIR_PMP])[ks ];//[ktse ]; - real mfacc = (D.f[DIR_MPP])[kw ];//[ktnw ]; - real mfcca = (D.f[DIR_PPM])[kb ];//[kbne ]; - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ] - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ]; - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ]; - //////////////////////////////////////////////////////////////////////////////////// - real rho = (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + - mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb + - mfabb+mfcbb + mfbab+mfbcb + mfbba+mfbbc + mfbbb) + c1o1;//!!!Achtung + one - //////////////////////////////////////////////////////////////////////////////////// - //slow - //real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + - // (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + - // ((mfabb+mfcbb) + (mfbab+mfbcb) + (mfbba+mfbbc)));//fehlt mfbbb - real vvx =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + - (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + - (mfcbb-mfabb)) / rho; - real vvy =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + - (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + - (mfbcb-mfbab)) / rho; - real vvz =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + - (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + - (mfbbc-mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - //fast - real oMdrho = c1o1; // comp special - //real oMdrho = one - (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + - // mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb + - // mfabb+mfcbb + mfbab+mfbcb + mfbba+mfbbc + mfbbb);//fehlt mfbbb nicht mehr - //////////////////////////////////////////////////////////////////////////////////// - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2=vvx*vvx; - vy2=vvy*vvy; - vz2=vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = 0.01f; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - - - //////////////////////////////////////////////////////////////////////////////////// - // Cascade - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; - real OxyyPxzz = c1o1;//two-omega;//eight*(two-omega)/(eight -omega);//one;//omega;//two-omega;// - real OxyyMxzz = c1o1;//omega;//one;//eight*(two-omega)/(eight -omega);//one;//two-omega;//one;// - real O4 = c1o1; - real O5 = c1o1; - real O6 = c1o1; - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction - { - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - } - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - -// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// //no correction -// mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz); -// mxxMyy += -(-omega) * (-mxxMyy); -// mxxMzz += -(-omega) * (-mxxMzz); -// /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - // linear combinations back - mfcaa = c1o3 * ( mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * ( mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mfbbb)/(abs(mfbbb)+qudricLimit); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxxyPyzz)/(abs(mxxyPyzz)+qudricLimit); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxxyMyzz)/(abs(mxxyMyzz)+qudricLimit); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxxzPyyz)/(abs(mxxzPyyz)+qudricLimit); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxxzMyyz)/(abs(mxxzMyyz)+qudricLimit); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxyyPxzz)/(abs(mxyyPxzz)+qudricLimit); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxyyMxzz)/(abs(mxyyMxzz)+qudricLimit); - mxyyMxzz += wadjust * (-mxyyMxzz); - - // linear combinations back - mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - mfacc = mfaaa * c1o9 * O4 + (c1o1 - O4) * mfacc; - mfcac = mfaaa * c1o9 * O4 + (c1o1 - O4) * mfcac; - mfcca = mfaaa * c1o9 * O4 + (c1o1 - O4) * mfcca; - - mfbbc += O4 * (-mfbbc); - mfbcb += O4 * (-mfbcb); - mfcbb += O4 * (-mfcbb); - - //5. - mfbcc += O5 * (-mfbcc); - mfcbc += O5 * (-mfcbc); - mfccb += O5 * (-mfccb); - - //6. - mfccc = mfaaa * c1o27 * O6 + (c1o1 - O6) * mfccc; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1- vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * ( vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * ( vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1- vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * ( vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1- vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * ( vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1- vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * ( vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * ( vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1- vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * ( vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * ( vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1- vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * ( vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1- vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * ( vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1- vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * ( vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1- vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1- vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1- vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1- vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * ( vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1- vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * ( vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * ( vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1- vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * ( vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * ( vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1- vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * ( vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1- vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1- vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1- vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1- vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[ DIR_P00 ])[k ] = mfabb; - (D.f[ DIR_M00 ])[kw ] = mfcbb; - (D.f[ DIR_0P0 ])[k ] = mfbab; - (D.f[ DIR_0M0 ])[ks ] = mfbcb; - (D.f[ DIR_00P ])[k ] = mfbba; - (D.f[ DIR_00M ])[kb ] = mfbbc; - (D.f[ DIR_PP0 ])[k ] = mfaab; - (D.f[ DIR_MM0 ])[ksw ] = mfccb; - (D.f[ DIR_PM0 ])[ks ] = mfacb; - (D.f[ DIR_MP0 ])[kw ] = mfcab; - (D.f[ DIR_P0P ])[k ] = mfaba; - (D.f[ DIR_M0M ])[kbw ] = mfcbc; - (D.f[ DIR_P0M ])[kb ] = mfabc; - (D.f[ DIR_M0P ])[kw ] = mfcba; - (D.f[ DIR_0PP ])[k ] = mfbaa; - (D.f[ DIR_0MM ])[kbs ] = mfbcc; - (D.f[ DIR_0PM ])[kb ] = mfbac; - (D.f[ DIR_0MP ])[ks ] = mfbca; - (D.f[ DIR_000])[k ] = mfbbb; - (D.f[ DIR_PPP ])[k ] = mfaaa; - (D.f[ DIR_PMP ])[ks ] = mfaca; - (D.f[ DIR_PPM ])[kb ] = mfaac; - (D.f[ DIR_PMM ])[kbs ] = mfacc; - (D.f[ DIR_MPP ])[kw ] = mfcaa; - (D.f[ DIR_MMP ])[ksw ] = mfcca; - (D.f[ DIR_MPM ])[kbw ] = mfcac; - (D.f[ DIR_MMM ])[kbsw] = mfccc; - //////////////////////////////////////////////////////////////////////////////////// - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes_Device.cuh deleted file mode 100644 index fb8fc657a03c89efbad879ca1c9b4e493acabd86..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes_Device.cuh +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef C06CompressibleNavierStokes_Device_H -#define C06CompressibleNavierStokes_Device_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void C06CompressibleNavierStokes_Device( - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - int size_Mat, - bool EvenOrOdd); - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/FluidFlowCompStrategy.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/FluidFlowCompStrategy.cpp deleted file mode 100644 index 39a8bac0c116370f1f2c90e91469f87a2ed6b35e..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/FluidFlowCompStrategy.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include "FluidFlowCompStrategy.h" - -#include "Parameter/Parameter.h" - -std::shared_ptr<FluidFlowCompStrategy> FluidFlowCompStrategy::getInstance() -{ - static std::shared_ptr<FluidFlowCompStrategy> uniqueInstance; - if (!uniqueInstance) - uniqueInstance = std::shared_ptr<FluidFlowCompStrategy>(new FluidFlowCompStrategy()); - return uniqueInstance; -} - -bool FluidFlowCompStrategy::checkParameter(std::shared_ptr<Parameter> para) -{ - if (para->getUseWale()) - return false; - else if (!para->getCompOn()) - return false; - else - return true; -} - -FluidFlowCompStrategy::FluidFlowCompStrategy() { -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/FluidFlowCompStrategy.h b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/FluidFlowCompStrategy.h deleted file mode 100644 index c9a6675bd7a4b82442c55b23bac6f9b49b811938..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/FluidFlowCompStrategy.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef FLUID_FLOW_COMP_STRATEGY_H -#define FLUID_FLOW_COMP_STRATEGY_H - -#include "Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h" - - -class FluidFlowCompStrategy : public CheckParameterStrategy -{ -public: - static std::shared_ptr<FluidFlowCompStrategy> getInstance(); - - bool checkParameter(std::shared_ptr<Parameter> para); - -private: - FluidFlowCompStrategy(); - -}; -#endif diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes.cu deleted file mode 100644 index 7e8a0f5af702da465116320c0a02638b4a5274f9..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes.cu +++ /dev/null @@ -1,41 +0,0 @@ -#include "K08CompressibleNavierStokes.h" - -#include "K08CompressibleNavierStokes_Device.cuh" -#include "Parameter/Parameter.h" -#include <cuda_helper/CudaGrid.h> - -std::shared_ptr<K08CompressibleNavierStokes> K08CompressibleNavierStokes::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<K08CompressibleNavierStokes>(new K08CompressibleNavierStokes(para, level)); -} - -void K08CompressibleNavierStokes::run() -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); - - K08CompressibleNavierStokes_Device <<< grid.grid, grid.threads >>>( - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->numberOfNodes, - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_Kernel_Cum_Comp_SP_27 execution failed"); -} - - -K08CompressibleNavierStokes::K08CompressibleNavierStokes(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitCompSP27); - - -} - -K08CompressibleNavierStokes::K08CompressibleNavierStokes() -{ -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes.h b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes.h deleted file mode 100644 index 2f91a459818173775aeb0b966ec6677fe7803b48..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef K08CompressibleNavierStokes_H -#define K08CompressibleNavierStokes_H - -#include "Kernel/KernelImp.h" - -class K08CompressibleNavierStokes : public KernelImp -{ -public: - static std::shared_ptr<K08CompressibleNavierStokes> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - K08CompressibleNavierStokes(); - K08CompressibleNavierStokes(std::shared_ptr< Parameter> para, int level); - -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes_Device.cu deleted file mode 100644 index 021ec25f3d70802402bb2d96ca6a462e60774982..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes_Device.cu +++ /dev/null @@ -1,907 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void K08CompressibleNavierStokes_Device(real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - int size_Mat, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if ((BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int kzero = k; - unsigned int ke = k; - unsigned int kw = neighborX[k]; - unsigned int kn = k; - unsigned int ks = neighborY[k]; - unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = k; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = k; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = k; - 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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real f_E = (D.f[DIR_P00])[ke];// + c2over27 ; - real f_W = (D.f[DIR_M00])[kw];// + c2over27 ; - real f_N = (D.f[DIR_0P0])[kn];// + c2over27 ; - real f_S = (D.f[DIR_0M0])[ks];// + c2over27 ; - real f_T = (D.f[DIR_00P])[kt];// + c2over27 ; - real f_B = (D.f[DIR_00M])[kb];// + c2over27 ; - real f_NE = (D.f[DIR_PP0])[kne];// + c1over54 ; - real f_SS = (D.f[DIR_MM0])[ksw];// + c1over54 ; - real f_SE = (D.f[DIR_PM0])[kse];// + c1over54 ; - real f_NW = (D.f[DIR_MP0])[knw];// + c1over54 ; - real f_TE = (D.f[DIR_P0P])[kte];// + c1over54 ; - real f_BW = (D.f[DIR_M0M])[kbw];// + c1over54 ; - real f_EB = (D.f[DIR_P0M])[kbe];// + c1over54 ; - real f_TW = (D.f[DIR_M0P])[ktw];// + c1over54 ; - real f_TN = (D.f[DIR_0PP])[ktn];// + c1over54 ; - real f_BS = (D.f[DIR_0MM])[kbs];// + c1over54 ; - real f_BN = (D.f[DIR_0PM])[kbn];// + c1over54 ; - real f_TS = (D.f[DIR_0MP])[kts];// + c1over54 ; - real f_R = (D.f[DIR_000])[kzero];// + c8over27 ; - real f_TNE = (D.f[DIR_PPP])[ktne];// + c1over216; - real f_TSW = (D.f[DIR_MMP])[ktsw];// + c1over216; - real f_TSE = (D.f[DIR_PMP])[ktse];// + c1over216; - real f_TNW = (D.f[DIR_MPP])[ktnw];// + c1over216; - real f_BNE = (D.f[DIR_PPM])[kbne];// + c1over216; - real f_BSW = (D.f[DIR_MMM])[kbsw];// + c1over216; - real f_BSE = (D.f[DIR_PMM])[kbse];// + c1over216; - real f_BNW = (D.f[DIR_MPM])[kbnw];// + c1over216; - //////////////////////////////////////////////////////////////////////////////////// - real fx = c0o1; - real fy = c0o1; - real fz = c0o1; - //////////////////////////////////////////////////////////////////////////////////// - real rho = f_NW + f_W + f_SS + f_S + f_SE + f_E + f_NE + f_N + f_R + f_TN + f_BN + f_TS + f_BS + f_TE + f_EB + f_TW + f_BW + f_TNW + f_BNW + f_TNE + f_BNE + f_TSW + f_BSW + f_TSE + f_BSE + f_T + f_B + c1o1;// ACHTUNG ne EINS !!!!!!!! - real pix = (f_NE + f_E + f_SE + f_TE + f_EB - f_NW - f_W - f_SS - f_TW - f_BW + f_TNE + f_BNE + f_TSE + f_BSE - f_TNW - f_BNW - f_TSW - f_BSW); - real piy = (f_NE + f_N + f_NW + f_TN + f_BN - f_SE - f_S - f_SS - f_TS - f_BS + f_TNE + f_BNE + f_TNW + f_BNW - f_TSE - f_BSE - f_TSW - f_BSW); - real piz = (f_TN + f_TS + f_TW + f_TE + f_T - f_BN - f_BS - f_BW - f_EB - f_B + f_TNE + f_TNW + f_TSE + f_TSW - f_BNE - f_BNW - f_BSE - f_BSW); - real vvx = pix / rho + fx; - real vvy = piy / rho + fy; - real vvz = piz / rho + fz; - real vx2 = vvx*vvx; - real vy2 = vvy*vvy; - real vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real mfaaa = f_BSW; - real mfaab = f_SS; - real mfaac = f_TSW; - real mfaba = f_BW; - real mfabb = f_W; - real mfabc = f_TW; - real mfbaa = f_BS; - real mfbab = f_S; - real mfbac = f_TS; - real mfbba = f_B; - real mfbbb = f_R; - real mfbbc = f_T; - real mfaca = f_BNW; - real mfacb = f_NW; - real mfacc = f_TNW; - real mfcaa = f_BSE; - real mfcab = f_SE; - real mfcac = f_TSE; - real mfcca = f_BNE; - real mfccb = f_NE; - real mfccc = f_TNE; - real mfbca = f_BN; - real mfbcb = f_N; - real mfbcc = f_TN; - real mfcba = f_EB; - real mfcbb = f_E; - real mfcbc = f_TE; - real m0, m1, m2; - real wadjust; - real qudricLimit = c1o100; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - ////////////////////////////////////////////////////////////////////////////////////// - //// BGK - ////////////////////////////////////////////////////////////////////////////////////// - ////2. - //mfabb += -(-omega) * (-mfabb); - //mfbab += -(-omega) * (-mfbab); - //mfbba += -(-omega) * (-mfbba); - // - //mfcaa += -(-omega) * (c1o3 * mfaaa - mfcaa); - //mfaca += -(-omega) * (c1o3 * mfaaa - mfaca); - //mfaac += -(-omega) * (c1o3 * mfaaa - mfaac); - // - ////3. - //mfabc += -(-omega) * (-mfabc); - //mfbac += -(-omega) * (-mfbac); - // - //mfacb += -(-omega) * (-mfacb); - //mfbca += -(-omega) * (-mfbca); - - //mfcab += -(-omega) * (-mfcab); - //mfcba += -(-omega) * (-mfcba); - - //mfbbb += -(-omega) * (-mfbbb); - - ////4. - //mfacc += -(-omega) * (c1o9 * mfaaa - mfacc); - //mfcac += -(-omega) * (c1o9 * mfaaa - mfcac); - //mfcca += -(-omega) * (c1o9 * mfaaa - mfcca); - - //mfbbc += -(-omega) * (-mfbbc); - //mfbcb += -(-omega) * (-mfbcb); - //mfcbb += -(-omega) * (-mfcbb); - - ////5. - //mfbcc += -(-omega) * (-mfbcc); - //mfcbc += -(-omega) * (-mfcbc); - //mfccb += -(-omega) * (-mfccb); - - ////6. - //mfccc += -(-omega) * (c1o27 * mfaaa - mfccc); - ////////////////////////////////////////////////////////////////////////////////////// - - - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; - real OxyyPxzz = c1o1;//two+(-omega);//one; - real OxyyMxzz = c1o1;//two+(-omega);//one; - real O4 = c1o1; - real O5 = c1o1; - real O6 = c1o1; - - //Cum 4. - real CUMcbb = mfcbb - ((mfcaa + c1o3 * rho) * mfabb + c2o1* mfbba * mfbab) / rho; - real CUMbcb = mfbcb - ((mfaca + c1o3 * rho) * mfbab + c2o1* mfbba * mfabb) / rho; - real CUMbbc = mfbbc - ((mfaac + c1o3 * rho) * mfbba + c2o1* mfbab * mfabb) / rho; - - real CUMcca = mfcca - (mfcaa * mfaca + c2o1* mfbba * mfbba) / rho - c1o3 * (mfcaa + mfaca); - real CUMcac = mfcac - (mfcaa * mfaac + c2o1* mfbab * mfbab) / rho - c1o3 * (mfcaa + mfaac); - real CUMacc = mfacc - (mfaac * mfaca + c2o1* mfabb * mfabb) / rho - c1o3 * (mfaac + mfaca); - - //Cum 5. - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + c4o1* mfabb * mfbbb + c2o1* (mfbab * mfacb + mfbba * mfabc)) / rho - c1o3 * (mfbca + mfbac); - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + c4o1* mfbab * mfbbb + c2o1* (mfabb * mfcab + mfbba * mfbac)) / rho - c1o3 * (mfcba + mfabc); - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + c4o1* mfbba * mfbbb + c2o1* (mfbab * mfbca + mfabb * mfcba)) / rho - c1o3 * (mfacb + mfcab); - - //Cum 6. - real CUMccc = mfccc + (-c4o1* mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1* (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1* (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1* (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1* (mfcaa * mfaca * mfaac) - + c16o1* mfbba * mfbab * mfabb) / (rho * rho) - - c1o3* (mfacc + mfcac + mfcca) - + c1o9* (mfcaa + mfaca + mfaac) - + (c2o1* (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 / rho; - - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - //relax - //hat noch nicht so gut funktioniert...Optimierungsbedarf - //{ - // real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + OxxPyyPzz * (mfaaa - mxxPyyPzz); - // real dyuy = dxux + omega * c3o2 * mxxMyy; - // real dzuz = dxux + omega * c3o2 * mxxMzz; - - // //relax - // mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - // mxxMyy += omega * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); - // mxxMzz += omega * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); - - // ////////////////////////////////////////////////////////////////////////// - // //limiter-Scheise Teil 2 - // //mxxMyy += oxxyy * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); - // //mxxMzz += oxxzz * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); - // ////////////////////////////////////////////////////////////////////////// - - //} - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - { - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 2 - //mxxMyy += oxxyy * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); - //mxxMzz += oxxzz * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); - ////////////////////////////////////////////////////////////////////////// - - } - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz); - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += -(-omega) * (-mfabb); - mfbab += -(-omega) * (-mfbab); - mfbba += -(-omega) * (-mfbba); - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1 * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1 * mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mfbbb) / (abs(mfbbb) + qudricLimit); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimit); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimit); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimit); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimit); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimit); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimit); - mxyyMxzz += wadjust * (-mxyyMxzz); - - // linear combinations back - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3 * rho) * mfabb + c2o1* mfbba * mfbab) / rho; - mfbcb = CUMbcb + ((mfaca + c1o3 * rho) * mfbab + c2o1* mfbba * mfabb) / rho; - mfbbc = CUMbbc + ((mfaac + c1o3 * rho) * mfbba + c2o1* mfbab * mfabb) / rho; - - mfcca = CUMcca + (mfcaa * mfaca + c2o1* mfbba * mfbba) / rho + c1o3 * (mfcaa + mfaca); - mfcac = CUMcac + (mfcaa * mfaac + c2o1* mfbab * mfbab) / rho + c1o3 * (mfcaa + mfaac); - mfacc = CUMacc + (mfaac * mfaca + c2o1* mfabb * mfabb) / rho + c1o3 * (mfaac + mfaca); - - //5. - mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + c4o1* mfabb * mfbbb + c2o1* (mfbab * mfacb + mfbba * mfabc)) / rho + c1o3 * (mfbca + mfbac); - mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + c4o1* mfbab * mfbbb + c2o1* (mfabb * mfcab + mfbba * mfbac)) / rho + c1o3 * (mfcba + mfabc); - mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + c4o1* mfbba * mfbbb + c2o1* (mfbab * mfbca + mfabb * mfcba)) / rho + c1o3 * (mfacb + mfcab); - - //6. - mfccc = CUMccc - ((-c4o1* mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1* (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1* (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1* (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1* (mfcaa * mfaca * mfaac) - + c16o1* mfbba * mfbab * mfabb) / (rho * rho) - - c1o3* (mfacc + mfcac + mfcca) - + c1o9* (mfcaa + mfaca + mfaac) - + (c2o1* (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3 / rho); - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + 1.) * (vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1* vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + 1.) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3) * (vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3) * (vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9) * (vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6) * (vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3) * (vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6) * (vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18) * (vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9) * (vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18) * (vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9) * (vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36) * (vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9) * (vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9) * (vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36) * (vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36) * (vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[ke] = mfabb;// - c2over27 ;// - (D.f[DIR_M00])[kw] = mfcbb;// - c2over27 ; - (D.f[DIR_0P0])[kn] = mfbab;// - c2over27 ; - (D.f[DIR_0M0])[ks] = mfbcb;// - c2over27 ; - (D.f[DIR_00P])[kt] = mfbba;// - c2over27 ; - (D.f[DIR_00M])[kb] = mfbbc;// - c2over27 ; - (D.f[DIR_PP0])[kne] = mfaab;// - c1over54 ; - (D.f[DIR_MM0])[ksw] = mfccb;// - c1over54 ; - (D.f[DIR_PM0])[kse] = mfacb;// - c1over54 ; - (D.f[DIR_MP0])[knw] = mfcab;// - c1over54 ; - (D.f[DIR_P0P])[kte] = mfaba;// - c1over54 ; - (D.f[DIR_M0M])[kbw] = mfcbc;// - c1over54 ; - (D.f[DIR_P0M])[kbe] = mfabc;// - c1over54 ; - (D.f[DIR_M0P])[ktw] = mfcba;// - c1over54 ; - (D.f[DIR_0PP])[ktn] = mfbaa;// - c1over54 ; - (D.f[DIR_0MM])[kbs] = mfbcc;// - c1over54 ; - (D.f[DIR_0PM])[kbn] = mfbac;// - c1over54 ; - (D.f[DIR_0MP])[kts] = mfbca;// - c1over54 ; - (D.f[DIR_000])[kzero] = mfbbb;// - c8over27 ; - (D.f[DIR_PPP])[ktne] = mfaaa;// - c1over216; - (D.f[DIR_PMP])[ktse] = mfaca;// - c1over216; - (D.f[DIR_PPM])[kbne] = mfaac;// - c1over216; - (D.f[DIR_PMM])[kbse] = mfacc;// - c1over216; - (D.f[DIR_MPP])[ktnw] = mfcaa;// - c1over216; - (D.f[DIR_MMP])[ktsw] = mfcca;// - c1over216; - (D.f[DIR_MPM])[kbnw] = mfcac;// - c1over216; - (D.f[DIR_MMM])[kbsw] = mfccc;// - c1over216; - //////////////////////////////////////////////////////////////////////////////////// - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes_Device.cuh deleted file mode 100644 index b2a6d02b6ab40e8dc89238b207c7f274ab7fe828..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes_Device.cuh +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef K08CompressibleNavierStokes_Device_H -#define K08CompressibleNavierStokes_Device_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void K08CompressibleNavierStokes_Device( - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - int size_Mat, - bool EvenOrOdd); - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity.cu deleted file mode 100644 index b52f6cc855a5d4dba45b3106841e7951a1d7f3b3..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity.cu +++ /dev/null @@ -1,42 +0,0 @@ -#include "K15CompressibleNavierStokesBulkViscosity.h" - -#include "K15CompressibleNavierStokesBulkViscosity_Device.cuh" -#include "Parameter/Parameter.h" -#include <cuda_helper/CudaGrid.h> - -std::shared_ptr<K15CompressibleNavierStokesBulkViscosity> K15CompressibleNavierStokesBulkViscosity::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<K15CompressibleNavierStokesBulkViscosity>(new K15CompressibleNavierStokesBulkViscosity(para, level)); -} - -void K15CompressibleNavierStokesBulkViscosity::run() -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); - - K15CompressibleNavierStokesBulkViscosity_Device <<<grid.grid, grid.threads>>>( - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->numberOfNodes, - level, - para->getForcesDev(), - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_Kernel_CumulantK15BulkComp execution failed"); -} - -K15CompressibleNavierStokesBulkViscosity::K15CompressibleNavierStokesBulkViscosity(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitCompSP27); - - -} - -K15CompressibleNavierStokesBulkViscosity::K15CompressibleNavierStokesBulkViscosity() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity.h b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity.h deleted file mode 100644 index a29eb1b4e8712eb0ad0a1d1519840597620d91c6..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef K15CompressibleNavierStokesBulkViscosity_H -#define K15CompressibleNavierStokesBulkViscosity_H - -#include "Kernel/KernelImp.h" - -class K15CompressibleNavierStokesBulkViscosity : public KernelImp -{ -public: - static std::shared_ptr<K15CompressibleNavierStokesBulkViscosity> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - K15CompressibleNavierStokesBulkViscosity(); - K15CompressibleNavierStokesBulkViscosity(std::shared_ptr< Parameter> para, int level); -}; - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity_Device.cu deleted file mode 100644 index 91716f420dbff6aeb6d6505e1ff6fbc76dfbf92c..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity_Device.cu +++ /dev/null @@ -1,945 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void K15CompressibleNavierStokesBulkViscosity_Device(real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - int size_Mat, - int level, - real* forces, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if ((BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - - //unsigned int kzero= k; - //unsigned int ke = k; - //unsigned int kw = neighborX[k]; - //unsigned int kn = k; - //unsigned int ks = neighborY[k]; - //unsigned int kt = k; - //unsigned int kb = neighborZ[k]; - //unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - //unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - //unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - //unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke - real mfabb = (D.f[DIR_M00])[kw];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn - real mfbab = (D.f[DIR_0M0])[ks];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt - real mfbba = (D.f[DIR_00M])[kb];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse - real mfacb = (D.f[DIR_MP0])[kw];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw - real mfcbc = (D.f[DIR_P0P])[k];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe - real mfabc = (D.f[DIR_M0P])[kw];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw - real mfbcc = (D.f[DIR_0PP])[k];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn - real mfbac = (D.f[DIR_0MP])[ks];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts - real mfbbb = (D.f[DIR_000])[k];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero - real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw - real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse - real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw - real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - - real rho = c1o1 + drho; - //////////////////////////////////////////////////////////////////////////////////// - //slow - //real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + - // (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + - // ((mfabb+mfcbb) + (mfbab+mfbcb) + (mfbba+mfbbc)));//fehlt mfbbb - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) / rho; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) / rho; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - real fx = forces[0] / (pow((double)c2o1, (double)level)); //zero;//0.0032653/(pow(two,level)); //0.000000005;//(two/1600000.0) / 120.0; // - real fy = forces[1] / (pow((double)c2o1, (double)level)); //zero; - real fz = forces[2] / (pow((double)c2o1, (double)level)); //zero; - vvx += fx; - vvy += fy; - vvz += fz; - //////////////////////////////////////////////////////////////////////////////////// - //real omega = omega_in; - //////////////////////////////////////////////////////////////////////////////////// - //fast - real oMdrho = c1o1; // comp special - //real oMdrho = one - (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + - // mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb + - // mfabb+mfcbb + mfbab+mfbcb + mfbba+mfbbc + mfbbb);//fehlt mfbbb nicht mehr - //real vvx =mfccc-mfaaa + mfcac-mfaca + mfcaa-mfacc + mfcca-mfaac + - // mfcba-mfabc + mfcbc-mfaba + mfcab-mfacb + mfccb-mfaab + - // mfcbb-mfabb; - //real vvy =mfccc-mfaaa + mfaca-mfcac + mfacc-mfcaa + mfcca-mfaac + - // mfbca-mfbac + mfbcc-mfbaa + mfacb-mfcab + mfccb-mfaab + - // mfbcb-mfbab; - //real vvz =mfccc-mfaaa + mfcac-mfaca + mfacc-mfcaa + mfaac-mfcca + - // mfbac-mfbca + mfbcc-mfbaa + mfabc-mfcba + mfcbc-mfaba + - // mfbbc-mfbba; - //////////////////////////////////////////////////////////////////////////////////// - // oMdrho assembler style -------> faaaaaastaaaa - // or much sloooowaaaa ... it dep�ndssssss on sadaku - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimitP = 0.01f;// * 0.0001f; - real qudricLimitM = 0.01f;// * 0.0001f; - real qudricLimitD = 0.01f;// * 0.001f; - real qudricLimitOmega2 = 0.01f; - const real gamma = 3400.f; //air - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c4o1 * omega / (c4o1 + c3o1 * gamma * (c2o1 - omega));//one; //set the bulk viscosity one is high / two is very low and zero is (too) high ... (also called omega 2) - - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - real OxyyPxzz = c1o1; - real OxyyMxzz = c1o1; - real Oxyz = c1o1; - //////////////////////////////////////////////////////////// - //4. - ////////////////////////////// - real O4 = c1o1; - ////////////////////////////// - //real O4 = omega;//TRT - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = c1o1; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = c1o1; - //////////////////////////////////////////////////////////// - - - //central moments to cumulants - //4. - //real CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + two * mfbba * mfbab) / rho; //bis 15.05.2015 verwendet - //real CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + two * mfbba * mfabb) / rho; //bis 15.05.2015 verwendet - //real CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + two * mfbab * mfabb) / rho; //bis 15.05.2015 verwendet - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; //ab 15.05.2015 verwendet - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; //ab 15.05.2015 verwendet - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; //ab 15.05.2015 verwendet - - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - { - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - //with limiter (bulk) - wadjust = OxxPyyPzz + (c1o1 - OxxPyyPzz)*abs(mfaaa - mxxPyyPzz - c3o1 * (c1o1 / OxxPyyPzz - c1o2) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz)) / - (abs(mfaaa - mxxPyyPzz - c3o1 * (c1o1 / OxxPyyPzz - c1o2) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz)) + qudricLimitOmega2); - mxxPyyPzz += wadjust*(mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - //without limiter (no bulk) - //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - } - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - ////////////////////////////////////////////////////////////////////////// - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - ////////////////////////////////////////////////////////////////////////// - //das ist der limiter - wadjust = Oxyz + (c1o1 - Oxyz)*abs(mfbbb) / (abs(mfbbb) + qudricLimitD); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimitP); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimitM); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimitP); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimitM); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimitP); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimitM); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //mfbbb += OxyyMxzz * (-mfbbb); - //mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - //mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - //mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - //mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - //mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - //mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - //mit limiter - // wadjust = O4+(one-O4)*abs(CUMacc)/(abs(CUMacc)+qudricLimit); - //CUMacc += wadjust * (-CUMacc); - // wadjust = O4+(one-O4)*abs(CUMcac)/(abs(CUMcac)+qudricLimit); - //CUMcac += wadjust * (-CUMcac); - // wadjust = O4+(one-O4)*abs(CUMcca)/(abs(CUMcca)+qudricLimit); - //CUMcca += wadjust * (-CUMcca); - - // wadjust = O4+(one-O4)*abs(CUMbbc)/(abs(CUMbbc)+qudricLimit); - //CUMbbc += wadjust * (-CUMbbc); - // wadjust = O4+(one-O4)*abs(CUMbcb)/(abs(CUMbcb)+qudricLimit); - //CUMbcb += wadjust * (-CUMbcb); - // wadjust = O4+(one-O4)*abs(CUMcbb)/(abs(CUMcbb)+qudricLimit); - //CUMcbb += wadjust * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] - (D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] - (D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] - (D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] - (D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] - (D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] - (D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] - (D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] - (D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] - (D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] - (D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] - (D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] - (D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] - (D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] - (D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] - (D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] - (D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] - (D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] - (D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] - (D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] - (D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] - (D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] - (D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] - (D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] - (D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] - (D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] - (D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] - //////////////////////////////////////////////////////////////////////////////////// - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity_Device.cuh deleted file mode 100644 index 18c2a7a3400ce2511a17b589ca25236876af84d8..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity_Device.cuh +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef K15CompressibleNavierStokesBulkViscosity_Device_H -#define K15CompressibleNavierStokesBulkViscosity_Device_H - -#include <DataTypes.h> -#include <curand.h> - - -__global__ void K15CompressibleNavierStokesBulkViscosity_Device(real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - int size_Mat, - int level, - real* forces, - bool EvenOrOdd); - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge.cu deleted file mode 100644 index eadf2a147ed526943d1ada85474dfd0ba522cd38..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge.cu +++ /dev/null @@ -1,43 +0,0 @@ -#include "K15CompressibleNavierStokesSponge.h" - -#include "K15CompressibleNavierStokesSponge_Device.cuh" -#include "Parameter/Parameter.h" -#include <cuda_helper/CudaGrid.h> - -std::shared_ptr<K15CompressibleNavierStokesSponge> K15CompressibleNavierStokesSponge::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<K15CompressibleNavierStokesSponge>(new K15CompressibleNavierStokesSponge(para, level)); -} - -void K15CompressibleNavierStokesSponge::run() -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); - - K15CompressibleNavierStokesSponge_Device <<< grid.grid, grid.threads >>>( - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->coordinateX, - para->getParD(level)->coordinateY, - para->getParD(level)->coordinateZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->numberOfNodes, - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_Kernel_CumulantK15SpongeComp execution failed"); -} - -K15CompressibleNavierStokesSponge::K15CompressibleNavierStokesSponge(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitCompSP27); - - -} - -K15CompressibleNavierStokesSponge::K15CompressibleNavierStokesSponge() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge.h b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge.h deleted file mode 100644 index cff5a369bc68d868a041f436b2dd3975b66775ed..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef K15CompressibleNavierStokesSponge_H -#define K15CompressibleNavierStokesSponge_H - -#include "Kernel/KernelImp.h" - -class K15CompressibleNavierStokesSponge : public KernelImp -{ -public: - static std::shared_ptr<K15CompressibleNavierStokesSponge> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - K15CompressibleNavierStokesSponge(); - K15CompressibleNavierStokesSponge(std::shared_ptr< Parameter> para, int level); - -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge_Device.cu deleted file mode 100644 index 6b3a06614a1bec560e8d361c3610f9a00a0cdaf3..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge_Device.cu +++ /dev/null @@ -1,926 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void K15CompressibleNavierStokesSponge_Device(real omegaIn, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* coordX, - real* coordY, - real* coordZ, - real* DDStart, - int size_Mat, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if ((BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k]; - real mfabb = (D.f[DIR_M00])[kw]; - real mfbcb = (D.f[DIR_0P0])[k]; - real mfbab = (D.f[DIR_0M0])[ks]; - real mfbbc = (D.f[DIR_00P])[k]; - real mfbba = (D.f[DIR_00M])[kb]; - real mfccb = (D.f[DIR_PP0])[k]; - real mfaab = (D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks]; - real mfacb = (D.f[DIR_MP0])[kw]; - real mfcbc = (D.f[DIR_P0P])[k]; - real mfaba = (D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb]; - real mfabc = (D.f[DIR_M0P])[kw]; - real mfbcc = (D.f[DIR_0PP])[k]; - real mfbaa = (D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb]; - real mfbac = (D.f[DIR_0MP])[ks]; - real mfbbb = (D.f[DIR_000])[k]; - real mfccc = (D.f[DIR_PPP])[k]; - real mfaac = (D.f[DIR_MMP])[ksw]; - real mfcac = (D.f[DIR_PMP])[ks]; - real mfacc = (D.f[DIR_MPP])[kw]; - real mfcca = (D.f[DIR_PPM])[kb]; - real mfaaa = (D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs]; - real mfaca = (D.f[DIR_MPM])[kbw]; - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - - real rho = c1o1 + drho; - //////////////////////////////////////////////////////////////////////////////////// - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) / rho; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) / rho; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - real fx = c0o1; //0.000000005;//(two/1600000.0) / 120.0; //zero; - real fy = c0o1; - real fz = c0o1; - vvx += fx; - vvy += fy; - vvz += fz; - //////////////////////////////////////////////////////////////////////////////////// - real oMdrho = c1o1; // comp special - //////////////////////////////////////////////////////////////////////////////////// - real m0, m1, m2; - real vx2 = vvx * vvx; - real vy2 = vvy * vvy; - real vz2 = vvz * vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = 0.01f; - //////////////////////////////////////////////////////////////////////////////////// - //sponge layer inflow - real startXsponge = 1507.0f;//120.995703125; - real endXsponge = 1537.0f;//120.987890625; - real sizeSponge = endXsponge - startXsponge; - real factor = c1o1; - real omega = factor * omegaIn; - if (coordX[k] > startXsponge) { - factor = (((endXsponge - coordX[k]) / sizeSponge) * c1o2) + c1o2; - omega = factor * omegaIn; - } - //////////////////////////////////////////////////////////////////////////////////// - //sponge layer outflow - endXsponge = 30.0f; - if (coordX[k] < endXsponge) { - factor = (((coordX[k]) / endXsponge) * c1o2) + c1o2; - omega = factor * omegaIn; - } - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; - - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - real OxyyPxzz = c1o1;//two-omega;//(1000.*(-2. + omega))/(-1000. + 439.*omega);//(eight * (omega - two)) / (omega - eight);//two-omega;//eight*(two-omega)/(eight -omega);//one;//omega;//two-omega;// - real OxyyMxzz = c1o1;//two-omega;//(1000.*(-2. + omega))/(-1000. + 439.*omega);//(eight * (omega - two)) / (omega - eight);//omega;//one;//eight*(two-omega)/(eight -omega);//one;//two-omega;//one;// - ////////////////////////////// - //real OxyyPxzz = two-omega;// - //real OxyyMxzz = two-omega;// - ////////////////////////////// - //real OxyyPxzz = (eight * (omega - two)) / (omega - eight);//Ginzburg - //real OxyyMxzz = (eight * (omega - two)) / (omega - eight);//Ginzburg - ////////////////////////////// - //real OxyyPxzz = omega;//BGK - //real OxyyMxzz = omega;//BGK - ////////////////////////////// - //real OxyyPxzz = (one + omega) / two;//1P5 - //real OxyyMxzz = (one + omega) / two;//1P5 - ////////////////////////////// - //real OxyyPxzz = (three - omega) / two;//0P5 - //real OxyyMxzz = (three - omega) / two;//0P5 - ////////////////////////////// - //real OxyyPxzz = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car - //real OxyyMxzz = (one + (eight * (omega - two)) / (omega - eight)) / two;//one + Ginzburg / two ... Car - //////////////////////////////////////////////////////////// - //4. - ////////////////////////////// - real O4 = c1o1; - ////////////////////////////// - //real O4 = omega;//TRT - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = c1o1; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = c1o1; - //////////////////////////////////////////////////////////// - - - //central moments to cumulants - //4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - //+ c1o27*(one -three/rho +two/(rho*rho))); - - - - - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - { - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - } - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - ////////////////////////////////////////////////////////////////////////// - //das ist der limiter - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mfbbb) / (abs(mfbbb) + qudricLimit); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimit); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimit); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimit); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimit); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimit); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimit); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - mfbbb += OxyyMxzz * (-mfbbb); - mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - - //// linear combinations back - - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - //mit limiter - wadjust = O4 + (c1o1 - O4)*abs(CUMacc) / (abs(CUMacc) + qudricLimit); - CUMacc += wadjust * (-CUMacc); - wadjust = O4 + (c1o1 - O4)*abs(CUMcac) / (abs(CUMcac) + qudricLimit); - CUMcac += wadjust * (-CUMcac); - wadjust = O4 + (c1o1 - O4)*abs(CUMcca) / (abs(CUMcca) + qudricLimit); - CUMcca += wadjust * (-CUMcca); - - wadjust = O4 + (c1o1 - O4)*abs(CUMbbc) / (abs(CUMbbc) + qudricLimit); - CUMbbc += wadjust * (-CUMbbc); - wadjust = O4 + (c1o1 - O4)*abs(CUMbcb) / (abs(CUMbcb) + qudricLimit); - CUMbcb += wadjust * (-CUMbcb); - wadjust = O4 + (c1o1 - O4)*abs(CUMcbb) / (abs(CUMcbb) + qudricLimit); - CUMcbb += wadjust * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //CUMacc += O4 * (-CUMacc); - //CUMcac += O4 * (-CUMcac); - //CUMcca += O4 * (-CUMcca); - - //CUMbbc += O4 * (-CUMbbc); - //CUMbcb += O4 * (-CUMbcb); - //CUMcbb += O4 * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - //+ c1o27*(one -three/rho +two/(rho*rho))); - - - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb; - (D.f[DIR_M00])[kw] = mfcbb; - (D.f[DIR_0P0])[k] = mfbab; - (D.f[DIR_0M0])[ks] = mfbcb; - (D.f[DIR_00P])[k] = mfbba; - (D.f[DIR_00M])[kb] = mfbbc; - (D.f[DIR_PP0])[k] = mfaab; - (D.f[DIR_MM0])[ksw] = mfccb; - (D.f[DIR_PM0])[ks] = mfacb; - (D.f[DIR_MP0])[kw] = mfcab; - (D.f[DIR_P0P])[k] = mfaba; - (D.f[DIR_M0M])[kbw] = mfcbc; - (D.f[DIR_P0M])[kb] = mfabc; - (D.f[DIR_M0P])[kw] = mfcba; - (D.f[DIR_0PP])[k] = mfbaa; - (D.f[DIR_0MM])[kbs] = mfbcc; - (D.f[DIR_0PM])[kb] = mfbac; - (D.f[DIR_0MP])[ks] = mfbca; - (D.f[DIR_000])[k] = mfbbb; - (D.f[DIR_PPP])[k] = mfaaa; - (D.f[DIR_PMP])[ks] = mfaca; - (D.f[DIR_PPM])[kb] = mfaac; - (D.f[DIR_PMM])[kbs] = mfacc; - (D.f[DIR_MPP])[kw] = mfcaa; - (D.f[DIR_MMP])[ksw] = mfcca; - (D.f[DIR_MPM])[kbw] = mfcac; - (D.f[DIR_MMM])[kbsw] = mfccc; - //////////////////////////////////////////////////////////////////////////////////// - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge_Device.cuh deleted file mode 100644 index b79c2a9941c44c12f1e5eadf0b66a1402f394856..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge_Device.cuh +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef K15CompressibleNavierStokesSponge_Device_H -#define K15CompressibleNavierStokesSponge_Device_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void K15CompressibleNavierStokesSponge_Device(real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* coordX, - real* coordY, - real* coordZ, - real* DDStart, - int size_Mat, - bool EvenOrOdd); - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesUnified.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesUnified.cu deleted file mode 100644 index 6e1fbfbe60808fda3980fff462f237096b6a4568..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesUnified.cu +++ /dev/null @@ -1,55 +0,0 @@ -#include "K15CompressibleNavierStokesUnified.h" - -#include <stdexcept> - -#include "../RunLBMKernel.cuh" - -#include "Parameter/Parameter.h" - -#include <lbm/CumulantChimera.h> - -namespace vf -{ -namespace gpu -{ - -K15CompressibleNavierStokesUnified::K15CompressibleNavierStokesUnified(std::shared_ptr<Parameter> para, int level) - : KernelImp(para, level) -{ -#ifndef BUILD_CUDA_LTO - throw std::invalid_argument( - "To use the CumulantK15Unified kernel, pass -DBUILD_CUDA_LTO=ON to cmake. Requires: CUDA 11.2 & cc 5.0"); -#endif - - myPreProcessorTypes.push_back(InitCompSP27); - - - - this->cudaGrid = cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); -} - -void K15CompressibleNavierStokesUnified::run() -{ - GPUKernelParameter kernelParameter{ - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - (int)para->getParD(level)->numberOfNodes, - para->getParD(level)->forcing, - para->getParD(level)->isEvenTimestep }; - - auto lambda = [] __device__(lbm::KernelParameter parameter) { - return lbm::cumulantChimera(parameter, lbm::setRelaxationRatesK15); - }; - - vf::gpu::runKernel<<<cudaGrid.grid, cudaGrid.threads>>>(lambda, kernelParameter); - - getLastCudaError("LB_Kernel_CumulantK15Comp execution failed"); -} - - -} -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesUnified.h b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesUnified.h deleted file mode 100644 index e16211520a4e310d4ee1a73c00437a4d18441354..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesUnified.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef K15CompressibleNavierStokesUnified_H -#define K15CompressibleNavierStokesUnified_H - -#include "Kernel/KernelImp.h" - -namespace vf -{ -namespace gpu -{ -class K15CompressibleNavierStokesUnified : public KernelImp -{ -public: - K15CompressibleNavierStokesUnified(std::shared_ptr<Parameter> para, int level); - - void run(); -}; - -} -} - -#endif diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokes.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokes.cu deleted file mode 100644 index fccd9bfd246c9bd927bd9dcce6da8993e3d57374..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokes.cu +++ /dev/null @@ -1,143 +0,0 @@ -#include "K17CompressibleNavierStokes.h" -#include <logger/Logger.h> -#include "Parameter/Parameter.h" -#include "Parameter/CudaStreamManager.h" -#include "K17CompressibleNavierStokes_Device.cuh" - -#include <cuda.h> - -template<TurbulenceModel turbulenceModel> -std::shared_ptr< K17CompressibleNavierStokes<turbulenceModel> > K17CompressibleNavierStokes<turbulenceModel>::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<K17CompressibleNavierStokes<turbulenceModel> >(new K17CompressibleNavierStokes<turbulenceModel>(para,level)); -} - -template<TurbulenceModel turbulenceModel> -void K17CompressibleNavierStokes<turbulenceModel>::run() -{ - K17CompressibleNavierStokes_Device < turbulenceModel, false, false > <<< cudaGrid.grid, cudaGrid.threads >>>( para->getParD(level)->omega, - para->getParD(level)->neighborX, para->getParD(level)->neighborY, para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->rho, - para->getParD(level)->velocityX, para->getParD(level)->velocityY, para->getParD(level)->velocityZ, - para->getParD(level)->turbViscosity, - para->getSGSConstant(), - para->getParD(level)->numberOfNodes, - level, - para->getForcesDev(), - para->getParD(level)->forceX_SP, para->getParD(level)->forceY_SP, para->getParD(level)->forceZ_SP, - para->getQuadricLimitersDev(), - para->getParD(level)->isEvenTimestep, - para->getParD(level)->taggedFluidNodeIndices[CollisionTemplate::Default], - para->getParD(level)->numberOfTaggedFluidNodes[CollisionTemplate::Default]); - - getLastCudaError("K17CompressibleNavierStokes_Device execution failed"); -} - -template<TurbulenceModel turbulenceModel> -void K17CompressibleNavierStokes<turbulenceModel>::runOnIndices( const unsigned int *indices, unsigned int size_indices, CollisionTemplate collisionTemplate, CudaStreamIndex streamIndex ) -{ - cudaStream_t stream = para->getStreamManager()->getStream(streamIndex); - - switch (collisionTemplate) - { - case CollisionTemplate::Default: - K17CompressibleNavierStokes_Device < turbulenceModel, false, false > <<< cudaGrid.grid, cudaGrid.threads, 0, stream >>>(para->getParD(level)->omega, - para->getParD(level)->neighborX, para->getParD(level)->neighborY, para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->rho, - para->getParD(level)->velocityX, para->getParD(level)->velocityY, para->getParD(level)->velocityZ, - para->getParD(level)->turbViscosity, - para->getSGSConstant(), - para->getParD(level)->numberOfNodes, - level, - para->getForcesDev(), - para->getParD(level)->forceX_SP, para->getParD(level)->forceY_SP, para->getParD(level)->forceZ_SP, - para->getQuadricLimitersDev(), - para->getParD(level)->isEvenTimestep, - indices, - size_indices); - break; - - case CollisionTemplate::WriteMacroVars: - K17CompressibleNavierStokes_Device < turbulenceModel, true, false > <<< cudaGrid.grid, cudaGrid.threads, 0, stream >>>( para->getParD(level)->omega, - para->getParD(level)->neighborX, para->getParD(level)->neighborY, para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->rho, - para->getParD(level)->velocityX, para->getParD(level)->velocityY, para->getParD(level)->velocityZ, - para->getParD(level)->turbViscosity, - para->getSGSConstant(), - para->getParD(level)->numberOfNodes, - level, - para->getForcesDev(), - para->getParD(level)->forceX_SP, para->getParD(level)->forceY_SP, para->getParD(level)->forceZ_SP, - para->getQuadricLimitersDev(), - para->getParD(level)->isEvenTimestep, - indices, - size_indices); - break; - - case CollisionTemplate::SubDomainBorder: - case CollisionTemplate::AllFeatures: - K17CompressibleNavierStokes_Device < turbulenceModel, true, true > <<< cudaGrid.grid, cudaGrid.threads, 0, stream >>>( para->getParD(level)->omega, - para->getParD(level)->neighborX, para->getParD(level)->neighborY, para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->rho, - para->getParD(level)->velocityX, para->getParD(level)->velocityY, para->getParD(level)->velocityZ, - para->getParD(level)->turbViscosity, - para->getSGSConstant(), - para->getParD(level)->numberOfNodes, - level, - para->getForcesDev(), - para->getParD(level)->forceX_SP, para->getParD(level)->forceY_SP, para->getParD(level)->forceZ_SP, - para->getQuadricLimitersDev(), - para->getParD(level)->isEvenTimestep, - indices, - size_indices); - break; - - case CollisionTemplate::ApplyBodyForce: - K17CompressibleNavierStokes_Device < turbulenceModel, false, true > <<< cudaGrid.grid, cudaGrid.threads, 0, stream >>>( para->getParD(level)->omega, - para->getParD(level)->neighborX, para->getParD(level)->neighborY, para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->rho, - para->getParD(level)->velocityX, para->getParD(level)->velocityY, para->getParD(level)->velocityZ, - para->getParD(level)->turbViscosity, - para->getSGSConstant(), - para->getParD(level)->numberOfNodes, - level, - para->getForcesDev(), - para->getParD(level)->forceX_SP, para->getParD(level)->forceY_SP, para->getParD(level)->forceZ_SP, - para->getQuadricLimitersDev(), - para->getParD(level)->isEvenTimestep, - indices, - size_indices); - break; - default: - throw std::runtime_error("Invalid CollisionTemplate in CumulantK17::runOnIndices()"); - break; - } - - getLastCudaError("K17CompressibleNavierStokes_Device execution failed"); -} - -template<TurbulenceModel turbulenceModel> -K17CompressibleNavierStokes<turbulenceModel>::K17CompressibleNavierStokes(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitCompSP27); - - - - this->cudaGrid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); - this->kernelUsesFluidNodeIndices = true; - - VF_LOG_INFO("Using turbulence model: {}", turbulenceModel); -} - -template class K17CompressibleNavierStokes<TurbulenceModel::AMD>; -template class K17CompressibleNavierStokes<TurbulenceModel::Smagorinsky>; -template class K17CompressibleNavierStokes<TurbulenceModel::QR>; -template class K17CompressibleNavierStokes<TurbulenceModel::None>; diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokes.h b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokes.h deleted file mode 100644 index 543b2de3e2ef9ad7c4bf4881aae2afb6110ec552..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokes.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef K17CompressibleNavierStokes_H -#define K17CompressibleNavierStokes_H - -#include "Kernel/KernelImp.h" -#include "Parameter/Parameter.h" - -template<TurbulenceModel turbulenceModel> -class K17CompressibleNavierStokes : public KernelImp -{ -public: - static std::shared_ptr< K17CompressibleNavierStokes<turbulenceModel> > getNewInstance(std::shared_ptr< Parameter> para, int level); - void run() override; - void runOnIndices(const unsigned int *indices, unsigned int size_indices, CollisionTemplate collisionTemplate, CudaStreamIndex streamIndex) override; - -private: - K17CompressibleNavierStokes(); - K17CompressibleNavierStokes(std::shared_ptr<Parameter> para, int level); -}; - -#endif diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity.cu deleted file mode 100644 index bf6e7801cfc5c6c431f10f12d41521842955d7b4..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity.cu +++ /dev/null @@ -1,47 +0,0 @@ -#include "K17CompressibleNavierStokesBulkViscosity.h" - -#include "K17CompressibleNavierStokesBulkViscosity_Device.cuh" -#include "Parameter/Parameter.h" - -std::shared_ptr<K17CompressibleNavierStokesBulkViscosity> K17CompressibleNavierStokesBulkViscosity::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<K17CompressibleNavierStokesBulkViscosity>(new K17CompressibleNavierStokesBulkViscosity(para, level)); -} - -void K17CompressibleNavierStokesBulkViscosity::run() -{ - int size_Array = para->getParD(level)->size_Array_SP; - int numberOfThreads = para->getParD(level)->numberofthreads; - - int Grid = size_Array / numberOfThreads; - dim3 grid(Grid, 1, 1); - dim3 threads(numberOfThreads, 1, 1); - - K17CompressibleNavierStokesBulkViscosity_Device << < grid, threads >> >( - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->numberOfNodes, - level, - para->getForcesDev(), - para->getQuadricLimitersDev(), - para->getParD(level)->isEvenTimestep); - getLastCudaError("K17CompressibleNavierStokesBulkViscosity_Device execution failed"); -} - -K17CompressibleNavierStokesBulkViscosity::K17CompressibleNavierStokesBulkViscosity(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitCompSP27); - - -} - -K17CompressibleNavierStokesBulkViscosity::K17CompressibleNavierStokesBulkViscosity() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity.h b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity.h deleted file mode 100644 index 9411cc4969af4fcd13f1a853710510a40fdf5069..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef K17CompressibleNavierStokesBulkViscosity_H -#define K17CompressibleNavierStokesBulkViscosity_H - -#include "Kernel/KernelImp.h" - -class K17CompressibleNavierStokesBulkViscosity : public KernelImp -{ -public: - static std::shared_ptr<K17CompressibleNavierStokesBulkViscosity> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - K17CompressibleNavierStokesBulkViscosity(); - K17CompressibleNavierStokesBulkViscosity(std::shared_ptr< Parameter> para, int level); - -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity_Device.cu deleted file mode 100644 index 1803c083f8f04182cbe1556c33936fc052499596..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity_Device.cu +++ /dev/null @@ -1,919 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void K17CompressibleNavierStokesBulkViscosity_Device(real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - int size_Mat, - int level, - real* forces, - real* quadricLimiters, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if ((BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke - real mfabb = (D.f[DIR_M00])[kw];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn - real mfbab = (D.f[DIR_0M0])[ks];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt - real mfbba = (D.f[DIR_00M])[kb];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse - real mfacb = (D.f[DIR_MP0])[kw];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw - real mfcbc = (D.f[DIR_P0P])[k];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe - real mfabc = (D.f[DIR_M0P])[kw];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw - real mfbcc = (D.f[DIR_0PP])[k];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn - real mfbac = (D.f[DIR_0MP])[ks];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts - real mfbbb = (D.f[DIR_000])[k];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero - real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw - real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse - real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw - real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - - real rho = c1o1 + drho; - //////////////////////////////////////////////////////////////////////////////////// - //slow - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) / rho; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) / rho; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - real fx = forces[0] / (pow((double)c2o1, (double)level)); //zero;//0.0032653/(pow(two,level)); //0.000000005;//(two/1600000.0) / 120.0; // - real fy = forces[1] / (pow((double)c2o1, (double)level)); //zero; - real fz = forces[2] / (pow((double)c2o1, (double)level)); //zero; - vvx += fx; - vvy += fy; - vvz += fz; - //////////////////////////////////////////////////////////////////////////////////// - //real omega = omega_in; - //////////////////////////////////////////////////////////////////////////////////// - real oMdrho = c1o1; // comp special - //////////////////////////////////////////////////////////////////////////////////// - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimitP = quadricLimiters[0]; //0.01f; // * 0.0001f; // 1000000.0f; // 1000000.0f; // - real qudricLimitM = quadricLimiters[1]; //0.01f; // * 0.0001f; // 1000000.0f; // 1000000.0f; // - real qudricLimitD = quadricLimiters[2]; //0.01f; // * 0.001f; // 1000000.0f; // 1000000.0f; // - real qudricLimitOmega2 = 0.01f; - const real gamma = 3400.f; //air - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c4o1 * omega / (c4o1 + c3o1 * gamma * (c2o1 - omega));//one; //set the bulk viscosity one is high / two is very low and zero is (too) high ... (also called omega 2) - - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - //no bulk viscosity - //real OxyyPxzz = eight*(-two+omega)*(one+two*omega)/(-eight-fourteen*omega+seven*omega*omega);//one; - //real OxyyMxzz = eight*(-two+omega)*(-seven+four*omega)/(fiftysix-fifty*omega+nine*omega*omega);//one; - //real Oxyz = twentyfour*(-two+omega)*(-two-seven*omega+three*omega*omega)/(fourtyeight+c152*omega-c130*omega*omega+twentynine*omega*omega*omega);//one; - //with bulk viscosity - real OxyyPxzz = c8o1*(-c2o1 + omega)*(OxxPyyPzz * (-c1o1 + c3o1*omega) - c5o1 * omega) / (c8o1 * (c5o1 - c2o1 * omega) * omega + OxxPyyPzz * (c8o1 + omega * (c9o1 * omega - c26o1)));//one; - real OxyyMxzz = c8o1*(-c2o1 + omega)*(omega + OxxPyyPzz*(c3o1 * omega - c7o1)) / (OxxPyyPzz * (c56o1 - c42o1 * omega + c9o1 * omega * omega) - c8o1 * omega);//one; - real Oxyz = c24o1*(-c2o1 + omega)*(c4o1*omega*omega + omega * OxxPyyPzz * (c18o1 - c13o1 * omega) + OxxPyyPzz * OxxPyyPzz * (c2o1 + omega * (c6o1 * omega - c11o1))) / - (c16o1 * omega * omega * (omega - c6o1) - c2o1 * omega * OxxPyyPzz *(c216o1 + c5o1 * omega * (c9o1 * omega - c46o1)) + - OxxPyyPzz * OxxPyyPzz * (omega * (c3o1 * omega - c10o1) * (c15o1 * omega - c28o1) - c48o1));//one; - //////////////////////////////////////////////////////////// - //4. - ////////////////////////////// - real O4 = c1o1; - ////////////////////////////// - //real O4 = omega;//TRT - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = c1o1; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = c1o1; - //////////////////////////////////////////////////////////// - - - //central moments to cumulants - //4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - - - - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - //////////////////////////////////////////////////////////////////////////// - real Dxy = -c3o1*omega*mfbba; - real Dxz = -c3o1*omega*mfbab; - real Dyz = -c3o1*omega*mfabb; - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - //with limiter (bulk) - wadjust = OxxPyyPzz + (c1o1 - OxxPyyPzz)*abs(mfaaa - mxxPyyPzz - c3o1 * (c1o1 / OxxPyyPzz - c1o2) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz)) / - (abs(mfaaa - mxxPyyPzz - c3o1 * (c1o1 / OxxPyyPzz - c1o2) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz)) + qudricLimitOmega2); - mxxPyyPzz += wadjust*(mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - //without limiter (no bulk) - //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - ////////////////////////////////////////////////////////////////////////// - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - - //relax - ////////////////////////////////////////////////////////////////////////// - //das ist der limiter - wadjust = Oxyz + (c1o1 - Oxyz)*abs(mfbbb) / (abs(mfbbb) + qudricLimitD); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimitP); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimitM); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimitP); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimitM); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimitP); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimitM); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //mfbbb += OxyyMxzz * (-mfbbb); - //mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - //mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - //mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - //mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - //mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - //mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - //mit limiter - real factorA = (c4o1 * omega * omega + c2o1 * omega * OxxPyyPzz * (omega - c6o1) + OxxPyyPzz * OxxPyyPzz * (omega * (c10o1 - c3o1 * omega) - c4o1)) / - ((omega - OxxPyyPzz) * (OxxPyyPzz * (c2o1 + c3o1 * omega) - c8o1 * omega)); - real factorB = (c4o1 * omega * OxxPyyPzz * (c9o1 * omega - c16o1) - c4o1 * omega * omega - c2o1 * OxxPyyPzz * OxxPyyPzz * (c2o1 + c9o1 * omega * (omega - c2o1))) / - (c3o1 * (omega - OxxPyyPzz) * (OxxPyyPzz * (c2o1 + c3o1 * omega) - c8o1 * omega)); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //CUMacc += O4 * (-CUMacc); - //CUMcac += O4 * (-CUMcac); - //CUMcca += O4 * (-CUMcca); - //CUMbbc += O4 * (-CUMbbc); - //CUMbcb += O4 * (-CUMbcb); - //CUMcbb += O4 * (-CUMcbb); - //no bulk viscosity - //CUMacc = -O4*(one/omega-c1o2)*(dyuy+dzuz)*c2o3 *(four+two*omega-three*omega*omega)/(two-seven*omega+five*omega*omega)+(one-O4) * (CUMacc); - //CUMcac = -O4*(one/omega-c1o2)*(dxux+dzuz)*c2o3 *(four+two*omega-three*omega*omega)/(two-seven*omega+five*omega*omega)+(one-O4) * (CUMcac); - //CUMcca = -O4*(one/omega-c1o2)*(dyuy+dxux)*c2o3 *(four+two*omega-three*omega*omega)/(two-seven*omega+five*omega*omega)+(one-O4) * (CUMcca); - //CUMbbc = -O4*(one/omega-c1o2)*Dxy*c1o3 *(four+twentyeight*omega-fourteen*omega*omega)/(six-twentyone*omega+fiveteen*omega*omega)+(one-O4) * (CUMbbc); - //CUMbcb = -O4*(one/omega-c1o2)*Dxz*c1o3 *(four+twentyeight*omega-fourteen*omega*omega)/(six-twentyone*omega+fiveteen*omega*omega)+(one-O4) * (CUMbcb); - //CUMcbb = -O4*(one/omega-c1o2)*Dyz*c1o3 *(four+twentyeight*omega-fourteen*omega*omega)/(six-twentyone*omega+fiveteen*omega*omega)+(one-O4) * (CUMcbb); - //with bulk viscosity - CUMacc = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMacc); - CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMcac); - CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * factorA + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy * c1o3 * factorB + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz * c1o3 * factorB + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz * c1o3 * factorB + (c1o1 - O4) * (CUMcbb); - - - ////////////////////////////////////////////////////////////////////////// - - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] - (D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] - (D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] - (D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] - (D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] - (D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] - (D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] - (D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] - (D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] - (D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] - (D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] - (D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] - (D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] - (D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] - (D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] - (D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] - (D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] - (D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] - (D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] - (D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] - (D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] - (D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] - (D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] - (D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] - (D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] - (D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] - (D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] - //////////////////////////////////////////////////////////////////////////////////// - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity_Device.cuh deleted file mode 100644 index 62b349df5750bd5baf743feb52e14146aeddea2b..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity_Device.cuh +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef K17CompressibleNavierStokesBulkViscosity_Device_H -#define K17CompressibleNavierStokesBulkViscosity_Device_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void K17CompressibleNavierStokesBulkViscosity_Device(real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - int size_Mat, - int level, - real* forces, - real* quadricLimiters, - bool EvenOrOdd); -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy.cu deleted file mode 100644 index 0f637558ba9ed16afb0311ab4eefba5d7b4d1208..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy.cu +++ /dev/null @@ -1,38 +0,0 @@ -#include "K17CompressibleNavierStokesChimeraLegacy.h" - -#include "Parameter/Parameter.h" -#include "K17CompressibleNavierStokesChimeraLegacy_Device.cuh" -#include "cuda_helper/CudaGrid.h" - -std::shared_ptr<K17CompressibleNavierStokesChimeraLegacy> K17CompressibleNavierStokesChimeraLegacy::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<K17CompressibleNavierStokesChimeraLegacy>(new K17CompressibleNavierStokesChimeraLegacy(para,level)); -} - -void K17CompressibleNavierStokesChimeraLegacy::run() -{ - K17CompressibleNavierStokesChimeraLegacy_Device <<< cudaGrid.grid, cudaGrid.threads >>>( - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->numberOfNodes, - level, - para->getIsBodyForce(), - para->getForcesDev(), - para->getParD(level)->forceX_SP, - para->getParD(level)->forceY_SP, - para->getParD(level)->forceZ_SP, - para->getQuadricLimitersDev(), - para->getParD(level)->isEvenTimestep); - getLastCudaError("K17CompressibleNavierStokesChimeraLegacy_Device execution failed"); -} - -K17CompressibleNavierStokesChimeraLegacy::K17CompressibleNavierStokesChimeraLegacy(std::shared_ptr<Parameter> para, int level): KernelImp(para, level) -{ - myPreProcessorTypes.push_back(InitCompSP27); - - this->cudaGrid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy.h b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy.h deleted file mode 100644 index b611526ce8f53ec0ed8215e3378764cf9858d19b..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef K17CompressibleNavierStokesChimeraLegacy_H -#define K17CompressibleNavierStokesChimeraLegacy_H - -#include "Kernel/KernelImp.h" - -class K17CompressibleNavierStokesChimeraLegacy : public KernelImp -{ -public: - static std::shared_ptr<K17CompressibleNavierStokesChimeraLegacy> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - K17CompressibleNavierStokesChimeraLegacy(); - K17CompressibleNavierStokesChimeraLegacy(std::shared_ptr<Parameter> para, int level); -}; - -#endif diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy_Device.cu deleted file mode 100644 index d796f38bca8b7c70940515db78160fe460a702f9..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy_Device.cu +++ /dev/null @@ -1,655 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// 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/>. -// -//! \file Cumulant27chim.cu -//! \ingroup GPU -//! \author Martin Schoenherr -//======================================================================================= -/* Device code */ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include "basics/constants/NumericConstants.h" -#include "LBM/GPUHelperFunctions/ChimeraTransformation.h" - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -using namespace vf::gpu; - -//////////////////////////////////////////////////////////////////////////////// -__global__ void K17CompressibleNavierStokesChimeraLegacy_Device( - real omega, - uint* typeOfGridNode, - uint* neighborX, - uint* neighborY, - uint* neighborZ, - real* distributions, - int size_Mat, - int level, - bool bodyForce, - real* forces, - real* bodyForceX, - real* bodyForceY, - real* bodyForceZ, - real* quadricLimiters, - bool isEvenTimestep) -{ - ////////////////////////////////////////////////////////////////////////// - //! Cumulant K17 Kernel is based on \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 - //! ]</b></a> and \ref <a href="https://doi.org/10.1016/j.jcp.2017.07.004"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.07.004 ]</b></a> - //! - //! The cumulant kernel is executed in the following steps - //! - //////////////////////////////////////////////////////////////////////////////// - //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. - //! - 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; - - ////////////////////////////////////////////////////////////////////////// - // run for all indices in size_Mat and fluid nodes - if ((k < size_Mat) && (typeOfGridNode[k] == GEO_FLUID)) { - ////////////////////////////////////////////////////////////////////////// - //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on - //! timestep is based on the esoteric twist algorithm \ref <a - //! href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), - //! DOI:10.3390/computation5020019 ]</b></a> - //! - Distributions27 dist; - if (isEvenTimestep) { - dist.f[DIR_P00] = &distributions[DIR_P00 * size_Mat]; - dist.f[DIR_M00] = &distributions[DIR_M00 * size_Mat]; - dist.f[DIR_0P0] = &distributions[DIR_0P0 * size_Mat]; - dist.f[DIR_0M0] = &distributions[DIR_0M0 * size_Mat]; - dist.f[DIR_00P] = &distributions[DIR_00P * size_Mat]; - dist.f[DIR_00M] = &distributions[DIR_00M * size_Mat]; - dist.f[DIR_PP0] = &distributions[DIR_PP0 * size_Mat]; - dist.f[DIR_MM0] = &distributions[DIR_MM0 * size_Mat]; - dist.f[DIR_PM0] = &distributions[DIR_PM0 * size_Mat]; - dist.f[DIR_MP0] = &distributions[DIR_MP0 * size_Mat]; - dist.f[DIR_P0P] = &distributions[DIR_P0P * size_Mat]; - dist.f[DIR_M0M] = &distributions[DIR_M0M * size_Mat]; - dist.f[DIR_P0M] = &distributions[DIR_P0M * size_Mat]; - dist.f[DIR_M0P] = &distributions[DIR_M0P * size_Mat]; - dist.f[DIR_0PP] = &distributions[DIR_0PP * size_Mat]; - dist.f[DIR_0MM] = &distributions[DIR_0MM * size_Mat]; - dist.f[DIR_0PM] = &distributions[DIR_0PM * size_Mat]; - dist.f[DIR_0MP] = &distributions[DIR_0MP * size_Mat]; - dist.f[DIR_000] = &distributions[DIR_000 * size_Mat]; - dist.f[DIR_PPP] = &distributions[DIR_PPP * size_Mat]; - dist.f[DIR_MMP] = &distributions[DIR_MMP * size_Mat]; - dist.f[DIR_PMP] = &distributions[DIR_PMP * size_Mat]; - dist.f[DIR_MPP] = &distributions[DIR_MPP * size_Mat]; - dist.f[DIR_PPM] = &distributions[DIR_PPM * size_Mat]; - dist.f[DIR_MMM] = &distributions[DIR_MMM * size_Mat]; - dist.f[DIR_PMM] = &distributions[DIR_PMM * size_Mat]; - dist.f[DIR_MPM] = &distributions[DIR_MPM * size_Mat]; - } else { - dist.f[DIR_M00] = &distributions[DIR_P00 * size_Mat]; - dist.f[DIR_P00] = &distributions[DIR_M00 * size_Mat]; - dist.f[DIR_0M0] = &distributions[DIR_0P0 * size_Mat]; - dist.f[DIR_0P0] = &distributions[DIR_0M0 * size_Mat]; - dist.f[DIR_00M] = &distributions[DIR_00P * size_Mat]; - dist.f[DIR_00P] = &distributions[DIR_00M * size_Mat]; - dist.f[DIR_MM0] = &distributions[DIR_PP0 * size_Mat]; - dist.f[DIR_PP0] = &distributions[DIR_MM0 * size_Mat]; - dist.f[DIR_MP0] = &distributions[DIR_PM0 * size_Mat]; - dist.f[DIR_PM0] = &distributions[DIR_MP0 * size_Mat]; - dist.f[DIR_M0M] = &distributions[DIR_P0P * size_Mat]; - dist.f[DIR_P0P] = &distributions[DIR_M0M * size_Mat]; - dist.f[DIR_M0P] = &distributions[DIR_P0M * size_Mat]; - dist.f[DIR_P0M] = &distributions[DIR_M0P * size_Mat]; - dist.f[DIR_0MM] = &distributions[DIR_0PP * size_Mat]; - dist.f[DIR_0PP] = &distributions[DIR_0MM * size_Mat]; - dist.f[DIR_0MP] = &distributions[DIR_0PM * size_Mat]; - dist.f[DIR_0PM] = &distributions[DIR_0MP * size_Mat]; - dist.f[DIR_000] = &distributions[DIR_000 * size_Mat]; - dist.f[DIR_MMM] = &distributions[DIR_PPP * size_Mat]; - dist.f[DIR_PPM] = &distributions[DIR_MMP * size_Mat]; - dist.f[DIR_MPM] = &distributions[DIR_PMP * size_Mat]; - dist.f[DIR_PMM] = &distributions[DIR_MPP * size_Mat]; - dist.f[DIR_MMP] = &distributions[DIR_PPM * size_Mat]; - dist.f[DIR_PPP] = &distributions[DIR_MMM * size_Mat]; - dist.f[DIR_MPP] = &distributions[DIR_PMM * size_Mat]; - dist.f[DIR_PMP] = &distributions[DIR_MPM * size_Mat]; - } - //////////////////////////////////////////////////////////////////////////////// - //! - Set neighbor indices (necessary for indirect addressing) - uint kw = neighborX[k]; - uint ks = neighborY[k]; - uint kb = neighborZ[k]; - uint ksw = neighborY[kw]; - uint kbw = neighborZ[kw]; - uint kbs = neighborZ[ks]; - uint kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////////// - //! - Set local distributions - //! - real mfcbb = (dist.f[DIR_P00])[k]; - real mfabb = (dist.f[DIR_M00])[kw]; - real mfbcb = (dist.f[DIR_0P0])[k]; - real mfbab = (dist.f[DIR_0M0])[ks]; - real mfbbc = (dist.f[DIR_00P])[k]; - real mfbba = (dist.f[DIR_00M])[kb]; - real mfccb = (dist.f[DIR_PP0])[k]; - real mfaab = (dist.f[DIR_MM0])[ksw]; - real mfcab = (dist.f[DIR_PM0])[ks]; - real mfacb = (dist.f[DIR_MP0])[kw]; - real mfcbc = (dist.f[DIR_P0P])[k]; - real mfaba = (dist.f[DIR_M0M])[kbw]; - real mfcba = (dist.f[DIR_P0M])[kb]; - real mfabc = (dist.f[DIR_M0P])[kw]; - real mfbcc = (dist.f[DIR_0PP])[k]; - real mfbaa = (dist.f[DIR_0MM])[kbs]; - real mfbca = (dist.f[DIR_0PM])[kb]; - real mfbac = (dist.f[DIR_0MP])[ks]; - real mfbbb = (dist.f[DIR_000])[k]; - real mfccc = (dist.f[DIR_PPP])[k]; - real mfaac = (dist.f[DIR_MMP])[ksw]; - real mfcac = (dist.f[DIR_PMP])[ks]; - real mfacc = (dist.f[DIR_MPP])[kw]; - real mfcca = (dist.f[DIR_PPM])[kb]; - real mfaaa = (dist.f[DIR_MMM])[kbsw]; - real mfcaa = (dist.f[DIR_PMM])[kbs]; - real mfaca = (dist.f[DIR_MPM])[kbw]; - //////////////////////////////////////////////////////////////////////////////////// - //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), - //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + - ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + - mfbbb; - - real rho = c1o1 + drho; - real OOrho = c1o1 / rho; - - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + (mfcbb - mfabb)) * - OOrho; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + (mfbcb - mfbab)) * - OOrho; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + (mfbbc - mfbba)) * - OOrho; - //////////////////////////////////////////////////////////////////////////////////// - //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), - //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - real factor = c1o1; - for (size_t i = 1; i <= level; i++) { - factor *= c2o1; - } - - real fx = forces[0]; - real fy = forces[1]; - real fz = forces[2]; - - if( bodyForce ){ - fx += bodyForceX[k]; - fy += bodyForceY[k]; - fz += bodyForceZ[k]; - - //Reset body force - bodyForceX[k] = 0.0f; - bodyForceY[k] = 0.0f; - bodyForceZ[k] = 0.0f; - } - - vvx += fx * c1o2 / factor; - vvy += fy * c1o2 / factor; - vvz += fz * c1o2 / factor; - //////////////////////////////////////////////////////////////////////////////////// - // calculate the square of velocities for this lattice node - real vx2 = vvx * vvx; - real vy2 = vvy * vvy; - real vz2 = vvz * vvz; - //////////////////////////////////////////////////////////////////////////////////// - //! - Set relaxation limiters for third order cumulants to default value \f$ \lambda=0.001 \f$ according to - //! section 6 in \ref <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - real wadjust; - real qudricLimitP = quadricLimiters[0]; - real qudricLimitM = quadricLimiters[1]; - real qudricLimitD = quadricLimiters[2]; - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), - //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> see also Eq. (6)-(14) in \ref <a - //! href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 - //! ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36); - forwardInverseChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9); - forwardInverseChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36); - forwardInverseChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9); - forwardInverseChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9); - forwardInverseChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9); - forwardInverseChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36); - forwardInverseChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9); - forwardInverseChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6); - forwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - forwardInverseChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18); - forwardInverseChimeraWithK(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3); - forwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - forwardInverseChimeraWithK(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9); - forwardInverseChimeraWithK(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6); - forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - forwardInverseChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1); - forwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - forwardInverseChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3); - forwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - forwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - forwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - forwardInverseChimeraWithK(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3); - forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - forwardInverseChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c3o1, c1o9); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Setting relaxation rates for non-hydrodynamic cumulants (default values). Variable names and equations - //! according to <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! => [NAME IN PAPER]=[NAME IN CODE]=[DEFAULT VALUE]. - //! - Trace of second order cumulants \f$ C_{200}+C_{020}+C_{002} \f$ used to adjust bulk - //! viscosity:\f$\omega_2=OxxPyyPzz=1.0 \f$. - //! - Third order cumulants \f$ C_{120}+C_{102}, C_{210}+C_{012}, C_{201}+C_{021} \f$: \f$ \omega_3=OxyyPxzz - //! \f$ set according to Eq. (111) with simplifications assuming \f$ \omega_2=1.0\f$. - //! - Third order cumulants \f$ C_{120}-C_{102}, C_{210}-C_{012}, C_{201}-C_{021} \f$: \f$ \omega_4 = OxyyMxzz - //! \f$ set according to Eq. (112) with simplifications assuming \f$ \omega_2 = 1.0\f$. - //! - Third order cumulants \f$ C_{111} \f$: \f$ \omega_5 = Oxyz \f$ set according to Eq. (113) with - //! simplifications assuming \f$ \omega_2 = 1.0\f$ (modify for different bulk viscosity). - //! - Fourth order cumulants \f$ C_{220}, C_{202}, C_{022}, C_{211}, C_{121}, C_{112} \f$: for simplification - //! all set to the same default value \f$ \omega_6=\omega_7=\omega_8=O4=1.0 \f$. - //! - Fifth order cumulants \f$ C_{221}, C_{212}, C_{122}\f$: \f$\omega_9=O5=1.0\f$. - //! - Sixth order cumulant \f$ C_{222}\f$: \f$\omega_{10}=O6=1.0\f$. - //! - //////////////////////////////////////////////////////////// - // 2. - real OxxPyyPzz = c1o1; - //////////////////////////////////////////////////////////// - // 3. - real OxyyPxzz = c8o1 * (-c2o1 + omega) * (c1o1 + c2o1 * omega) / (-c8o1 - c14o1 * omega + c7o1 * omega * omega); - real OxyyMxzz = - c8o1 * (-c2o1 + omega) * (-c7o1 + c4o1 * omega) / (c56o1 - c50o1 * omega + c9o1 * omega * omega); - real Oxyz = c24o1 * (-c2o1 + omega) * (-c2o1 - c7o1 * omega + c3o1 * omega * omega) / - (c48o1 + c152o1 * omega - c130o1 * omega * omega + c29o1 * omega * omega * omega); - //////////////////////////////////////////////////////////// - // 4. - real O4 = c1o1; - //////////////////////////////////////////////////////////// - // 5. - real O5 = c1o1; - //////////////////////////////////////////////////////////// - // 6. - real O6 = c1o1; - - //////////////////////////////////////////////////////////////////////////////////// - //! - A and DIR_00M: parameters for fourth order convergence of the diffusion term according to Eq. (115) and (116) - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> with simplifications assuming \f$ \omega_2 = 1.0 \f$ (modify for - //! different bulk viscosity). - //! - real factorA = (c4o1 + c2o1 * omega - c3o1 * omega * omega) / (c2o1 - c7o1 * omega + c5o1 * omega * omega); - real factorB = (c4o1 + c28o1 * omega - c14o1 * omega * omega) / (c6o1 - c21o1 * omega + c15o1 * omega * omega); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute cumulants from central moments according to Eq. (20)-(23) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////// - // 4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) * OOrho; - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) * OOrho; - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) * OOrho; - - real CUMcca = - mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) * OOrho - c1o9 * (drho * OOrho)); - real CUMcac = - mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) * OOrho - c1o9 * (drho * OOrho)); - real CUMacc = - mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) * OOrho - c1o9 * (drho * OOrho)); - //////////////////////////////////////////////////////////// - // 5. - real CUMbcc = - mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + - c1o3 * (mfbca + mfbac)) * - OOrho; - real CUMcbc = - mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + - c1o3 * (mfcba + mfabc)) * - OOrho; - real CUMccb = - mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + - c1o3 * (mfacb + mfcab)) * - OOrho; - //////////////////////////////////////////////////////////// - // 6. - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) * - OOrho + - (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + - c2o1 * (mfcaa * mfaca * mfaac) + c16o1 * mfbba * mfbab * mfabb) * - OOrho * OOrho - - c1o3 * (mfacc + mfcac + mfcca) * OOrho - c1o9 * (mfcaa + mfaca + mfaac) * OOrho + - (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + - (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 * (mfaac + mfaca + mfcaa)) * - OOrho * OOrho * c2o3 + - c1o27 * ((drho * drho - drho) * OOrho * OOrho)); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute linear combinations of second and third order cumulants - //! - //////////////////////////////////////////////////////////// - // 2. - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - //////////////////////////////////////////////////////////// - // 3. - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //////////////////////////////////////////////////////////////////////////////////// - // incl. correction - //////////////////////////////////////////////////////////// - //! - Compute velocity gradients from second order cumulants according to Eq. (27)-(32) - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> Further explanations of the correction in viscosity in Appendix H of - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), - //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> Note that the division by rho is omitted here as we need rho times - //! the gradients later. - //! - real Dxy = -c3o1 * omega * mfbba; - real Dxz = -c3o1 * omega * mfbab; - real Dyz = -c3o1 * omega * mfabb; - real dxux = c1o2 * (-omega) * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - //////////////////////////////////////////////////////////// - //! - Relaxation of second order cumulants with correction terms according to Eq. (33)-(35) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - mxxPyyPzz += - OxxPyyPzz * (mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - //////////////////////////////////////////////////////////////////////////////////// - ////no correction - // mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz); - // mxxMyy += -(-omega) * (-mxxMyy); - // mxxMzz += -(-omega) * (-mxxMzz); - ////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - //////////////////////////////////////////////////////////////////////////////////// - // relax - ////////////////////////////////////////////////////////////////////////// - // incl. limiter - //! - Relaxation of third order cumulants including limiter according to Eq. (116)-(123) - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - wadjust = Oxyz + (c1o1 - Oxyz) * abs(mfbbb) / (abs(mfbbb) + qudricLimitD); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimitP); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimitM); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimitP); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimitM); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimitP); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimitM); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - // no limiter - // mfbbb += OxyyMxzz * (-mfbbb); - // mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - // mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - // mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - // mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - // mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - // mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute inverse linear combinations of second and third order cumulants - //! - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1 * mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1 * mxxMzz + mxxPyyPzz); - - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // 4. - // no limiter - //! - Relax fourth order cumulants to modified equilibrium for fourth order convergence of diffusion according - //! to Eq. (43)-(48) <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - CUMacc = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMacc); - CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMcac); - CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * factorA + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy * c1o3 * factorB + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz * c1o3 * factorB + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz * c1o3 * factorB + (c1o1 - O4) * (CUMcbb); - - ////////////////////////////////////////////////////////////////////////// - // 5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - ////////////////////////////////////////////////////////////////////////// - // 6. - CUMccc += O6 * (-CUMccc); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute central moments from post collision cumulants according to Eq. (53)-(56) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - - ////////////////////////////////////////////////////////////////////////// - // 4. - mfcbb = CUMcbb + c1o3 * ((c3o1 * mfcaa + c1o1) * mfabb + c6o1 * mfbba * mfbab) * OOrho; - mfbcb = CUMbcb + c1o3 * ((c3o1 * mfaca + c1o1) * mfbab + c6o1 * mfbba * mfabb) * OOrho; - mfbbc = CUMbbc + c1o3 * ((c3o1 * mfaac + c1o1) * mfbba + c6o1 * mfbab * mfabb) * OOrho; - - mfcca = - CUMcca + - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) * c9o1 + c3o1 * (mfcaa + mfaca)) * OOrho - (drho * OOrho)) * c1o9; - mfcac = - CUMcac + - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) * c9o1 + c3o1 * (mfcaa + mfaac)) * OOrho - (drho * OOrho)) * c1o9; - mfacc = - CUMacc + - (((mfaac * mfaca + c2o1 * mfabb * mfabb) * c9o1 + c3o1 * (mfaac + mfaca)) * OOrho - (drho * OOrho)) * c1o9; - - ////////////////////////////////////////////////////////////////////////// - // 5. - mfbcc = CUMbcc + c1o3 * - (c3o1 * (mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + - c2o1 * (mfbab * mfacb + mfbba * mfabc)) + - (mfbca + mfbac)) * - OOrho; - mfcbc = CUMcbc + c1o3 * - (c3o1 * (mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + - c2o1 * (mfabb * mfcab + mfbba * mfbac)) + - (mfcba + mfabc)) * - OOrho; - mfccb = CUMccb + c1o3 * - (c3o1 * (mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + - c2o1 * (mfbab * mfbca + mfabb * mfcba)) + - (mfacb + mfcab)) * - OOrho; - - ////////////////////////////////////////////////////////////////////////// - // 6. - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) * - OOrho + - (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) + - c2o1 * (mfcaa * mfaca * mfaac) + c16o1 * mfbba * mfbab * mfabb) * - OOrho * OOrho - - c1o3 * (mfacc + mfcac + mfcca) * OOrho - c1o9 * (mfcaa + mfaca + mfaac) * OOrho + - (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) + - (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 * (mfaac + mfaca + mfcaa)) * - OOrho * OOrho * c2o3 + - c1o27 * ((drho * drho - drho) * OOrho * OOrho)); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Add acceleration (body force) to first order cumulants according to Eq. (85)-(87) in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), - //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), - //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> see also Eq. (88)-(96) in <a - //! href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 - //! ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - backwardInverseChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1); - backwardChimera(mfaba, mfbba, mfcba, vvx, vx2); - backwardInverseChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3); - backwardChimera(mfaab, mfbab, mfcab, vvx, vx2); - backwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); - backwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); - backwardInverseChimeraWithK(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3); - backwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); - backwardInverseChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c9o1, c1o9); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6); - backwardChimera(mfaab, mfabb, mfacb, vvy, vy2); - backwardInverseChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18); - backwardInverseChimeraWithK(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3); - backwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); - backwardInverseChimeraWithK(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9); - backwardInverseChimeraWithK(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6); - backwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); - backwardInverseChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36); - backwardInverseChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9); - backwardInverseChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36); - backwardInverseChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9); - backwardInverseChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9); - backwardInverseChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9); - backwardInverseChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36); - backwardInverseChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9); - backwardInverseChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Write distributions: style of reading and writing the distributions from/to - //! stored arrays dependent on timestep is based on the esoteric twist algorithm - //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), - //! DOI:10.3390/computation5020019 ]</b></a> - //! - (dist.f[DIR_P00])[k] = mfabb; - (dist.f[DIR_M00])[kw] = mfcbb; - (dist.f[DIR_0P0])[k] = mfbab; - (dist.f[DIR_0M0])[ks] = mfbcb; - (dist.f[DIR_00P])[k] = mfbba; - (dist.f[DIR_00M])[kb] = mfbbc; - (dist.f[DIR_PP0])[k] = mfaab; - (dist.f[DIR_MM0])[ksw] = mfccb; - (dist.f[DIR_PM0])[ks] = mfacb; - (dist.f[DIR_MP0])[kw] = mfcab; - (dist.f[DIR_P0P])[k] = mfaba; - (dist.f[DIR_M0M])[kbw] = mfcbc; - (dist.f[DIR_P0M])[kb] = mfabc; - (dist.f[DIR_M0P])[kw] = mfcba; - (dist.f[DIR_0PP])[k] = mfbaa; - (dist.f[DIR_0MM])[kbs] = mfbcc; - (dist.f[DIR_0PM])[kb] = mfbac; - (dist.f[DIR_0MP])[ks] = mfbca; - (dist.f[DIR_000])[k] = mfbbb; - (dist.f[DIR_PPP])[k] = mfaaa; - (dist.f[DIR_PMP])[ks] = mfaca; - (dist.f[DIR_PPM])[kb] = mfaac; - (dist.f[DIR_PMM])[kbs] = mfacc; - (dist.f[DIR_MPP])[kw] = mfcaa; - (dist.f[DIR_MMP])[ksw] = mfcca; - (dist.f[DIR_MPM])[kbw] = mfcac; - (dist.f[DIR_MMM])[kbsw] = mfccc; - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy_Device.cuh deleted file mode 100644 index bd2bd08ca184f468bd5491532fc9c444328ab487..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy_Device.cuh +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef K17CompressibleNavierStokesChimeraLegacy_Device_H -#define K17CompressibleNavierStokesChimeraLegacy_Device_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void K17CompressibleNavierStokesChimeraLegacy_Device( - real omega, - uint* typeOfGridNode, - uint* neighborX, - uint* neighborY, - uint* neighborZ, - real* distributions, - int size_Mat, - int level, - bool bodyForce, - real* forces, - real* bodyForceX, - real* bodyForceY, - real* bodyForceZ, - real* quadricLimiters, - bool isEvenTimestep); -#endif diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants.cu deleted file mode 100644 index 1b3c978487bd8c2cd39ab92e6ac6d2af59c5cf04..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants.cu +++ /dev/null @@ -1,39 +0,0 @@ -#include "K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants.h" - -#include "K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device.cuh" -#include "Parameter/Parameter.h" -#include "cuda_helper/CudaGrid.h" - -std::shared_ptr<K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants> K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants>(new K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants(para, level)); -} - -void K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants::run() -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); - - K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device <<< grid.grid, grid.threads >>>( - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->numberOfNodes, - level, - para->getForcesDev(), - para->getQuadricLimitersDev(), - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_Kernel_Cumulant_D3Q27All4 execution failed"); -} - -K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants::K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitCompSP27); - - -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants.h b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants.h deleted file mode 100644 index cfc30852016375a4c6512f1ed1e35f069d5e366a..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_H -#define K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_H - -#include "Kernel/KernelImp.h" - -class K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants : public KernelImp -{ -public: - static std::shared_ptr<K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants(); - K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants(std::shared_ptr< Parameter> para, int level); -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device.cu deleted file mode 100644 index 4919f56979ef004d3d74049feadc43895ad7cf28..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device.cu +++ /dev/null @@ -1,1095 +0,0 @@ -#include "K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device.cuh" - -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - int size_Mat, - int level, - real* forces, - real* quadricLimiters, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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 < size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if ((BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - - //unsigned int kzero= k; - //unsigned int ke = k; - //unsigned int kw = neighborX[k]; - //unsigned int kn = k; - //unsigned int ks = neighborY[k]; - //unsigned int kt = k; - //unsigned int kb = neighborZ[k]; - //unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - //unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - //unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - //unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke - real mfabb = (D.f[DIR_M00])[kw];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn - real mfbab = (D.f[DIR_0M0])[ks];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt - real mfbba = (D.f[DIR_00M])[kb];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse - real mfacb = (D.f[DIR_MP0])[kw];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw - real mfcbc = (D.f[DIR_P0P])[k];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe - real mfabc = (D.f[DIR_M0P])[kw];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw - real mfbcc = (D.f[DIR_0PP])[k];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn - real mfbac = (D.f[DIR_0MP])[ks];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts - real mfbbb = (D.f[DIR_000])[k];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero - real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw - real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse - real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw - real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - - real rho = c1o1 + drho; - //////////////////////////////////////////////////////////////////////////////////// - //slow - //real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + - // (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + - // ((mfabb+mfcbb) + (mfbab+mfbcb) + (mfbba+mfbbc)));//fehlt mfbbb - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) / rho; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) / rho; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - real fx = forces[0] / (pow((double)c2o1, (double)level)); //zero;//0.0032653/(pow(two,level)); //0.000000005;//(two/1600000.0) / 120.0; // - real fy = forces[1] / (pow((double)c2o1, (double)level)); //zero; - real fz = forces[2] / (pow((double)c2o1, (double)level)); //zero; - vvx += fx; - vvy += fy; - vvz += fz; - //////////////////////////////////////////////////////////////////////////////////// - //real omega = omega_in; - //////////////////////////////////////////////////////////////////////////////////// - //fast - real oMdrho = c1o1; // comp special - //real oMdrho = one - (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + - // mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb + - // mfabb+mfcbb + mfbab+mfbcb + mfbba+mfbbc + mfbbb);//fehlt mfbbb nicht mehr - //real vvx =mfccc-mfaaa + mfcac-mfaca + mfcaa-mfacc + mfcca-mfaac + - // mfcba-mfabc + mfcbc-mfaba + mfcab-mfacb + mfccb-mfaab + - // mfcbb-mfabb; - //real vvy =mfccc-mfaaa + mfaca-mfcac + mfacc-mfcaa + mfcca-mfaac + - // mfbca-mfbac + mfbcc-mfbaa + mfacb-mfcab + mfccb-mfaab + - // mfbcb-mfbab; - //real vvz =mfccc-mfaaa + mfcac-mfaca + mfacc-mfcaa + mfaac-mfcca + - // mfbac-mfbca + mfbcc-mfbaa + mfabc-mfcba + mfcbc-mfaba + - // mfbbc-mfbba; - //////////////////////////////////////////////////////////////////////////////////// - // oMdrho assembler style -------> faaaaaastaaaa - // or much sloooowaaaa ... it dep�ndssssss on sadaku - real m0, m1, m2; - //real oMdrho; - //{ - // oMdrho=mfccc+mfaaa; - // m0=mfaca+mfcac; - // m1=mfacc+mfcaa; - // m2=mfaac+mfcca; - // oMdrho+=m0; - // m1+=m2; - // oMdrho+=m1; - // m0=mfbac+mfbca; - // m1=mfbaa+mfbcc; - // m0+=m1; - // m1=mfabc+mfcba; - // m2=mfaba+mfcbc; - // m1+=m2; - // m0+=m1; - // m1=mfacb+mfcab; - // m2=mfaab+mfccb; - // m1+=m2; - // m0+=m1; - // oMdrho+=m0; - // m0=mfabb+mfcbb; - // m1=mfbab+mfbcb; - // m2=mfbba+mfbbc; - // m0+=m1+m2; - // m0+=mfbbb; //hat gefehlt - // oMdrho = one - (oMdrho + m0); - //} - //real vvx; - real vx2; - //{ - // vvx = mfccc-mfaaa; - // m0 = mfcac-mfaca; - // m1 = mfcaa-mfacc; - // m2 = mfcca-mfaac; - // vvx+= m0; - // m1 += m2; - // vvx+= m1; - // vx2 = mfcba-mfabc; - // m0 = mfcbc-mfaba; - // m1 = mfcab-mfacb; - // m2 = mfccb-mfaab; - // vx2+= m0; - // m1 += m2; - // vx2+= m1; - // vvx+= vx2; - // vx2 = mfcbb-mfabb; - // vvx+= vx2; - //} - //real vvy; - real vy2; - //{ - // vvy = mfccc-mfaaa; - // m0 = mfaca-mfcac; - // m1 = mfacc-mfcaa; - // m2 = mfcca-mfaac; - // vvy+= m0; - // m1 += m2; - // vvy+= m1; - // vy2 = mfbca-mfbac; - // m0 = mfbcc-mfbaa; - // m1 = mfacb-mfcab; - // m2 = mfccb-mfaab; - // vy2+= m0; - // m1 += m2; - // vy2+= m1; - // vvy+= vy2; - // vy2 = mfbcb-mfbab; - // vvy+= vy2; - //} - //real vvz; - real vz2; - //{ - // vvz = mfccc-mfaaa; - // m0 = mfcac-mfaca; - // m1 = mfacc-mfcaa; - // m2 = mfaac-mfcca; - // vvz+= m0; - // m1 += m2; - // vvz+= m1; - // vz2 = mfbac-mfbca; - // m0 = mfbcc-mfbaa; - // m1 = mfabc-mfcba; - // m2 = mfcbc-mfaba; - // vz2+= m0; - // m1 += m2; - // vz2+= m1; - // vvz+= vz2; - // vz2 = mfbbc-mfbba; - // vvz+= vz2; - //} - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimitP = quadricLimiters[0]; //0.01f; // * 0.0001f; // 1000000.0f; // 1000000.0f; // - real qudricLimitM = quadricLimiters[1]; //0.01f; // * 0.0001f; // 1000000.0f; // 1000000.0f; // - real qudricLimitD = quadricLimiters[2]; //0.01f; // * 0.001f; // 1000000.0f; // 1000000.0f; // - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //limiter advect - //real lambdaAdvect = 1000;//100000; - //real limAdvect = lambdaAdvect * (c1o1 / omega - c1o2) * (c1o1 / omega - c1o2); - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; //set the bulk viscosity one is high / two is very low and zero is (too) high ... (also called omega 2) - - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - real OxyyPxzz = c8o1*(-c2o1 + omega)*(c1o1 + c2o1*omega) / (-c8o1 - c14o1*omega + c7o1*omega*omega);//one; - real OxyyMxzz = c8o1*(-c2o1 + omega)*(-c7o1 + c4o1*omega) / (c56o1 - c50o1*omega + c9o1*omega*omega);//one; - real Oxyz = c24o1*(-c2o1 + omega)*(-c2o1 - c7o1*omega + c3o1*omega*omega) / (c48o1 + c152o1*omega - c130o1*omega*omega + c29o1*omega*omega*omega);//one; - //////////////////////////////////////////////////////////// - //4. - ////////////////////////////// - //real O4 = one; - ////////////////////////////// - real O4 = c1o1 / (100 * (c1o1 / omega - c1o2) + c1o2);//TRT - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = OxyyPxzz;// two - omega; // one; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = c1o1; - //////////////////////////////////////////////////////////// - - real factorA = (c4o1 * omega * omega + c2o1 * omega * OxxPyyPzz * (omega - c6o1) + OxxPyyPzz * OxxPyyPzz * (omega * (c10o1 - c3o1 * omega) - c4o1)) / - ((omega - OxxPyyPzz) * (OxxPyyPzz * (c2o1 + c3o1 * omega) - c8o1 * omega)); - real factorB = (c4o1 * omega * OxxPyyPzz * (c9o1 * omega - c16o1) - c4o1 * omega * omega - c2o1 * OxxPyyPzz * OxxPyyPzz * (c2o1 + c9o1 * omega * (omega - c2o1))) / - (c3o1 * (omega - OxxPyyPzz) * (OxxPyyPzz * (c2o1 + c3o1 * omega) - c8o1 * omega)); - - - //central moments to cumulants - //4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)*(c1o1 + rho*c6o1*factorB / (c2o1 + c3o1 * factorB))) / rho; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)*(c1o1 + rho*c6o1*factorB / (c2o1 + c3o1 * factorB))) / rho; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)*(c1o1 + rho*c6o1*factorB / (c2o1 + c3o1 * factorB))) / rho; - - real scaleD2 = - (-c27o1 * omega*(omega - OxxPyyPzz)*(c2o1 * OxxPyyPzz + omega*(-c8o1 + c3o1 * OxxPyyPzz))*(-c4o1 * OxxPyyPzz + omega*(-c2o1 + c3o1 * OxxPyyPzz))*O5) / - ((-c2o1 + omega)*(c6o1 * OxxPyyPzz*(c32o1 + (c100o1 - c69o1 * OxxPyyPzz)*OxxPyyPzz)*(omega*omega) + - (c40o1 + c3o1 * OxxPyyPzz*(-c52o1 + c3o1 * OxxPyyPzz*(-c8o1 + c9o1 * OxxPyyPzz)))*(omega*omega*omega) + - c264o1 * omega*(-c3o1 + c2o1 * OxxPyyPzz)*(OxxPyyPzz*OxxPyyPzz) - c88o1 * (OxxPyyPzz*OxxPyyPzz*OxxPyyPzz))); - - real dxxux = CUMbcc*scaleD2; - real dyyuy = CUMcbc*scaleD2; - real dzzuz = CUMccb*scaleD2; - - //dxxux *= limAdvect / (limAdvect + sqrt(abs(vvx * dxxux))); - //dyyuy *= limAdvect / (limAdvect + sqrt(abs(vvy * dyyuy))); - //dzzuz *= limAdvect / (limAdvect + sqrt(abs(vvz * dzzuz))); - - //real limD2 = 1.0e10; - //dxxux /= one + limD2*abs(dxxux); - //dyyuy /= one + limD2*abs(dyyuy); - //dzzuz /= one + limD2*abs(dzzuz); - - //6. - - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - - //////////////////////////////////////////////////////////////////////////// - real Dxy = -c3o1*omega*mfbba; - real Dxz = -c3o1*omega*mfbab; - real Dyz = -c3o1*omega*mfabb; - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - ////////////////////////////////////////////////////////////////////////////// - //real divTest = (mxxPyyPzz - (mfaaa + (-c3o1 * (c1o1 - OxxPyyPzz*c1o2)*(vx2*dxux + vy2*dyuy + vz2*dzuz) + (c6o1 - c3o1 * (omega + OxxPyyPzz) + omega*OxxPyyPzz) / - //(c3o1 * omega)*(dxux*dxux / rho + dyuy*dyuy / rho + dzuz*dzuz / rho + vvx*dxxux + vvy*dyyuy + vvz*dzzuz)) / OxxPyyPzz)) / OxxPyyPzz; - - //dxxux *= limAdvect / (limAdvect + sqrt(abs(divTest))); - //dyyuy *= limAdvect / (limAdvect + sqrt(abs(divTest))); - //dzzuz *= limAdvect / (limAdvect + sqrt(abs(divTest))); - - //dxxux *= exp(-sqrt(fabs(divTest))/limAdvect); - //dyyuy *= exp(-sqrt(fabs(divTest)) / limAdvect); - //dzzuz *= exp(-sqrt(fabs(divTest)) / limAdvect); - - //////////////////////////////////////////////////////////////////////////// - //relax - //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - //mxxMyy += omega * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - //mxxMzz += omega * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz) - + (c6o1 - c3o1 * (omega + OxxPyyPzz) + omega * OxxPyyPzz) / (c3o1 * omega) * ((dxux * dxux + dyuy * dyuy + dzuz * dzuz) / rho + vvx * dxxux + vvy * dyyuy + vvz * dzzuz); - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy) - + omega * (c2o1*(c1o1 / omega - c1o2) * (c1o1 / omega - c1o2) - c1o6) * ((dxux * dxux - dyuy * dyuy) / rho + vvx * dxxux - vvy * dyyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz) - + omega * (c2o1*(c1o1 / omega - c1o2) * (c1o1 / omega - c1o2) - c1o6) * ((dxux * dxux - dzuz * dzuz) / rho + vvx * dxxux - vvz * dzzuz); - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - - //relax - ////////////////////////////////////////////////////////////////////////// - //das ist der limiter - wadjust = Oxyz + (c1o1 - Oxyz)*abs(mfbbb) / (abs(mfbbb) + qudricLimitD); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimitP); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimitM); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimitP); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimitM); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimitP); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimitM); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //mfbbb += OxyyMxzz * (-mfbbb); - //mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - //mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - //mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - //mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - //mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - //mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - //mit limiter - // wadjust = O4+(one-O4)*abs(CUMacc)/(abs(CUMacc)+qudricLimit); - //CUMacc += wadjust * (-CUMacc); - // wadjust = O4+(one-O4)*abs(CUMcac)/(abs(CUMcac)+qudricLimit); - //CUMcac += wadjust * (-CUMcac); - // wadjust = O4+(one-O4)*abs(CUMcca)/(abs(CUMcca)+qudricLimit); - //CUMcca += wadjust * (-CUMcca); - - // wadjust = O4+(one-O4)*abs(CUMbbc)/(abs(CUMbbc)+qudricLimit); - //CUMbbc += wadjust * (-CUMbbc); - // wadjust = O4+(one-O4)*abs(CUMbcb)/(abs(CUMbcb)+qudricLimit); - //CUMbcb += wadjust * (-CUMbcb); - // wadjust = O4+(one-O4)*abs(CUMcbb)/(abs(CUMcbb)+qudricLimit); - //CUMcbb += wadjust * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //CUMacc += O4 * (-CUMacc); - //CUMcac += O4 * (-CUMcac); - //CUMcca += O4 * (-CUMcca); - //CUMbbc += O4 * (-CUMbbc); - //CUMbcb += O4 * (-CUMbcb); - //CUMcbb += O4 * (-CUMcbb); - //CUMacc = -O4*(one / omega - c1o2)*(dyuy + dzuz)*c2o3 *(four + two*omega - three*omega*omega) / (two - seven*omega + five*omega*omega) + (one - O4) * (CUMacc); - //CUMcac = -O4*(one / omega - c1o2)*(dxux + dzuz)*c2o3 *(four + two*omega - three*omega*omega) / (two - seven*omega + five*omega*omega) + (one - O4) * (CUMcac); - //CUMcca = -O4*(one / omega - c1o2)*(dyuy + dxux)*c2o3 *(four + two*omega - three*omega*omega) / (two - seven*omega + five*omega*omega) + (one - O4) * (CUMcca); - //CUMbbc = -O4*(one / omega - c1o2)*Dxy*c1o3 *(four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega) + (one - O4) * (CUMbbc); - //CUMbcb = -O4*(one / omega - c1o2)*Dxz*c1o3 *(four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega) + (one - O4) * (CUMbcb); - //CUMcbb = -O4*(one / omega - c1o2)*Dyz*c1o3 *(four + twentyeight*omega - fourteen*omega*omega) / (six - twentyone*omega + fiveteen*omega*omega) + (one - O4) * (CUMcbb); - CUMacc = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMacc); - CUMcac = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMcac); - CUMcca = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * factorA + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4 * (c1o1 / omega - c1o2) * Dxy * c1o3 * factorB + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4 * (c1o1 / omega - c1o2) * Dxz * c1o3 * factorB + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4 * (c1o1 / omega - c1o2) * Dyz * c1o3 * factorB + (c1o1 - O4) * (CUMcbb); - ////////////////////////////////////////////////////////////////////////// - - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)*(c1o1 + rho*c6o1*factorB / (c2o1 + c3o1 * factorB))) / rho; - mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)*(c1o1 + rho*c6o1*factorB / (c2o1 + c3o1 * factorB))) / rho; - mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)*(c1o1 + rho*c6o1*factorB / (c2o1 + c3o1 * factorB))) / rho; - - //6. - - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] - (D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] - (D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] - (D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] - (D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] - (D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] - (D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] - (D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] - (D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] - (D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] - (D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] - (D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] - (D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] - (D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] - (D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] - (D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] - (D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] - (D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] - (D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] - (D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] - (D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] - (D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] - (D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] - (D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] - (D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] - (D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] - (D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] - //////////////////////////////////////////////////////////////////////////////////// - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device.cuh deleted file mode 100644 index df7f6a09676740503aaed1f4b16b0b8db96624c8..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device.cuh +++ /dev/null @@ -1,19 +0,0 @@ -#ifndef K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device_H -#define K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - int size_Mat, - int level, - real* forces, - real* quadricLimiters, - bool EvenOrOdd); -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesUnified.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesUnified.cu deleted file mode 100644 index 45a998e215b999a9f920358132865fbfccc458aa..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesUnified.cu +++ /dev/null @@ -1,56 +0,0 @@ -#include "K17CompressibleNavierStokesUnified.h" - -#include <stdexcept> - -#include "Parameter/Parameter.h" -#include "../RunLBMKernel.cuh" - -#include <lbm/CumulantChimera.h> - -namespace vf -{ -namespace gpu -{ - - -K17CompressibleNavierStokesUnified::K17CompressibleNavierStokesUnified(std::shared_ptr<Parameter> para, int level) - : KernelImp(para, level) -{ -#ifndef BUILD_CUDA_LTO - throw std::invalid_argument("To use the CumulantK17Unified kernel, pass -DBUILD_CUDA_LTO=ON to cmake. Requires: CUDA 11.2 & cc 5.0"); -#endif - - myPreProcessorTypes.push_back(InitCompSP27); - - - - this->cudaGrid = cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); -} - - - -void K17CompressibleNavierStokesUnified::run() -{ - GPUKernelParameter kernelParameter{ - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - (int)para->getParD(level)->numberOfNodes, - para->getParD(level)->forcing, - para->getParD(level)->isEvenTimestep }; - - auto lambda = [] __device__(lbm::KernelParameter parameter) { - return lbm::cumulantChimera(parameter, lbm::setRelaxationRatesK17); - }; - - runKernel<<<cudaGrid.grid, cudaGrid.threads>>>(lambda, kernelParameter); - - getLastCudaError("K17CompressibleNavierStokesUnified execution failed"); -} - - -} -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesUnified.h b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesUnified.h deleted file mode 100644 index 2b416a6d80d6bbb961152e6d3c559922e280b997..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesUnified.h +++ /dev/null @@ -1,23 +0,0 @@ -#ifndef K17CompressibleNavierStokesUnified_H -#define K17CompressibleNavierStokesUnified_H - -#include "Kernel/KernelImp.h" - -namespace vf -{ -namespace gpu -{ - - -class K17CompressibleNavierStokesUnified : public KernelImp -{ -public: - K17CompressibleNavierStokesUnified(std::shared_ptr<Parameter> para, int level); - - void run(); -}; - -} -} - -#endif diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokes_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokes_Device.cu deleted file mode 100644 index 732e96ce44e64d2f86bf899bd87bb33de4725874..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokes_Device.cu +++ /dev/null @@ -1,726 +0,0 @@ - -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// 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/>. -// -//! \file CumlantK17_Device.cu -//! \author Anna Wellmann, Martin Schönherr, Henry Korb, Henrik Asmuth -//! \date 05/12/2022 -//! \brief Kernel for CumulantK17 including different turbulence models and options for local body forces and writing macroscopic variables -//! -//! CumulantK17 kernel using chimera transformations and quartic limiters as present in Geier et al. (2017). Additional options are three different -//! eddy-viscosity turbulence models (Smagorinsky, AMD, QR) that can be set via the template parameter turbulenceModel (with default -//! TurbulenceModel::None). -//! The kernel is executed separately for each subset of fluid node indices with a different tag CollisionTemplate. For each subset, only the locally -//! required options are switched on ( \param writeMacroscopicVariables and/or \param applyBodyForce) in order to minimize memory accesses. The default -//! refers to the plain cumlant kernel (CollisionTemplate::Default). -//! Nodes are added to subsets (taggedFluidNodes) in Simulation::init using a corresponding tag with different values of CollisionTemplate. These subsets -//! are provided by the utilized PostCollisionInteractiors depending on they specific requirements (e.g. writeMacroscopicVariables for probes). - -//======================================================================================= -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include "basics/constants/NumericConstants.h" -#include "LBM/GPUHelperFunctions/KernelUtilities.h" -#include "LBM/GPUHelperFunctions/ChimeraTransformation.h" - -#include "GPU/TurbulentViscosityInlines.cuh" - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -using namespace vf::gpu; - -//////////////////////////////////////////////////////////////////////////////// -template<TurbulenceModel turbulenceModel, bool writeMacroscopicVariables, bool applyBodyForce> -__global__ void K17CompressibleNavierStokes_Device( - real omega_in, - uint* neighborX, - uint* neighborY, - uint* neighborZ, - real* distributions, - real* rho, - real* vx, - real* vy, - real* vz, - real* turbulentViscosity, - real SGSconstant, - unsigned long long numberOfLBnodes, - int level, - real* forces, - real* bodyForceX, - real* bodyForceY, - real* bodyForceZ, - real* quadricLimiters, - bool isEvenTimestep, - const uint *fluidNodeIndices, - uint numberOfFluidNodes) -{ - ////////////////////////////////////////////////////////////////////////// - //! Cumulant K17 Kernel is based on \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 - //! ]</b></a> and \ref <a href="https://doi.org/10.1016/j.jcp.2017.07.004"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.07.004 ]</b></a> - //! - //! The cumulant kernel is executed in the following steps - //! - //////////////////////////////////////////////////////////////////////////////// - //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. - //! - const unsigned nodeIndex = getNodeIndex(); - - ////////////////////////////////////////////////////////////////////////// - // run for all indices in size_Mat and fluid nodes - if (nodeIndex >= numberOfFluidNodes) - return; - //////////////////////////////////////////////////////////////////////////////// - //! - Get the node index from the array containing all indices of fluid nodes - //! - const unsigned k_000 = fluidNodeIndices[nodeIndex]; - - ////////////////////////////////////////////////////////////////////////// - //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on - //! timestep is based on the esoteric twist algorithm \ref <a - //! href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), - //! DOI:10.3390/computation5020019 ]</b></a> - //! - Distributions27 dist; - getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); - - //////////////////////////////////////////////////////////////////////////////// - //! - Set neighbor indices (necessary for indirect addressing) - uint k_M00 = neighborX[k_000]; - uint k_0M0 = neighborY[k_000]; - uint k_00M = neighborZ[k_000]; - uint k_MM0 = neighborY[k_M00]; - uint k_M0M = neighborZ[k_M00]; - uint k_0MM = neighborZ[k_0M0]; - uint k_MMM = neighborZ[k_MM0]; - //////////////////////////////////////////////////////////////////////////////////// - //! - Set local distributions - //! - real f_000 = (dist.f[DIR_000])[k_000]; - real f_P00 = (dist.f[DIR_P00])[k_000]; - real f_M00 = (dist.f[DIR_M00])[k_M00]; - real f_0P0 = (dist.f[DIR_0P0])[k_000]; - real f_0M0 = (dist.f[DIR_0M0])[k_0M0]; - real f_00P = (dist.f[DIR_00P])[k_000]; - real f_00M = (dist.f[DIR_00M])[k_00M]; - real f_PP0 = (dist.f[DIR_PP0])[k_000]; - real f_MM0 = (dist.f[DIR_MM0])[k_MM0]; - real f_PM0 = (dist.f[DIR_PM0])[k_0M0]; - real f_MP0 = (dist.f[DIR_MP0])[k_M00]; - real f_P0P = (dist.f[DIR_P0P])[k_000]; - real f_M0M = (dist.f[DIR_M0M])[k_M0M]; - real f_P0M = (dist.f[DIR_P0M])[k_00M]; - real f_M0P = (dist.f[DIR_M0P])[k_M00]; - real f_0PP = (dist.f[DIR_0PP])[k_000]; - real f_0MM = (dist.f[DIR_0MM])[k_0MM]; - real f_0PM = (dist.f[DIR_0PM])[k_00M]; - real f_0MP = (dist.f[DIR_0MP])[k_0M0]; - real f_PPP = (dist.f[DIR_PPP])[k_000]; - real f_MPP = (dist.f[DIR_MPP])[k_M00]; - real f_PMP = (dist.f[DIR_PMP])[k_0M0]; - real f_MMP = (dist.f[DIR_MMP])[k_MM0]; - real f_PPM = (dist.f[DIR_PPM])[k_00M]; - real f_MPM = (dist.f[DIR_MPM])[k_M0M]; - real f_PMM = (dist.f[DIR_PMM])[k_0MM]; - real f_MMM = (dist.f[DIR_MMM])[k_MMM]; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Define aliases to use the same variable for the moments (m's): - //! - real& m_111 = f_000; - real& m_211 = f_P00; - real& m_011 = f_M00; - real& m_121 = f_0P0; - real& m_101 = f_0M0; - real& m_112 = f_00P; - real& m_110 = f_00M; - real& m_221 = f_PP0; - real& m_001 = f_MM0; - real& m_201 = f_PM0; - real& m_021 = f_MP0; - real& m_212 = f_P0P; - real& m_010 = f_M0M; - real& m_210 = f_P0M; - real& m_012 = f_M0P; - real& m_122 = f_0PP; - real& m_100 = f_0MM; - real& m_120 = f_0PM; - real& m_102 = f_0MP; - real& m_222 = f_PPP; - real& m_022 = f_MPP; - real& m_202 = f_PMP; - real& m_002 = f_MMP; - real& m_220 = f_PPM; - real& m_020 = f_MPM; - real& m_200 = f_PMM; - real& m_000 = f_MMM; - - //////////////////////////////////////////////////////(unsigned long)////////////////////////////// - //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), - //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - real drho = ((((f_PPP + f_MMM) + (f_MPM + f_PMP)) + ((f_MPP + f_PMM) + (f_MMP + f_PPM))) + - (((f_0MP + f_0PM) + (f_0MM + f_0PP)) + ((f_M0P + f_P0M) + (f_M0M + f_P0P)) + - ((f_MP0 + f_PM0) + (f_MM0 + f_PP0))) + - ((f_M00 + f_P00) + (f_0M0 + f_0P0) + (f_00M + f_00P))) + - f_000; - - real oneOverRho = c1o1 / (c1o1 + drho); - - real vvx = ((((f_PPP - f_MMM) + (f_PMP - f_MPM)) + ((f_PMM - f_MPP) + (f_PPM - f_MMP))) + - (((f_P0M - f_M0P) + (f_P0P - f_M0M)) + ((f_PM0 - f_MP0) + (f_PP0 - f_MM0))) + (f_P00 - f_M00)) * - oneOverRho; - real vvy = ((((f_PPP - f_MMM) + (f_MPM - f_PMP)) + ((f_MPP - f_PMM) + (f_PPM - f_MMP))) + - (((f_0PM - f_0MP) + (f_0PP - f_0MM)) + ((f_MP0 - f_PM0) + (f_PP0 - f_MM0))) + (f_0P0 - f_0M0)) * - oneOverRho; - real vvz = ((((f_PPP - f_MMM) + (f_PMP - f_MPM)) + ((f_MPP - f_PMM) + (f_MMP - f_PPM))) + - (((f_0MP - f_0PM) + (f_0PP - f_0MM)) + ((f_M0P - f_P0M) + (f_P0P - f_M0M))) + (f_00P - f_00M)) * - oneOverRho; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), - //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - real factor = c1o1; - for (size_t i = 1; i <= level; i++) { - factor *= c2o1; - } - - real fx = forces[0]; - real fy = forces[1]; - real fz = forces[2]; - - if( applyBodyForce ){ - fx += bodyForceX[k_000]; - fy += bodyForceY[k_000]; - fz += bodyForceZ[k_000]; - - // real vx = vvx; - // real vy = vvy; - // real vz = vvz; - real acc_x = fx * c1o2 / factor; - real acc_y = fy * c1o2 / factor; - real acc_z = fz * c1o2 / factor; - - vvx += acc_x; - vvy += acc_y; - vvz += acc_z; - - // Reset body force. To be used when not using round-off correction. - bodyForceX[k_000] = 0.0f; - bodyForceY[k_000] = 0.0f; - bodyForceZ[k_000] = 0.0f; - - //////////////////////////////////////////////////////////////////////////////////// - //!> Round-off correction - //! - //!> Similar to Kahan summation algorithm (https://en.wikipedia.org/wiki/Kahan_summation_algorithm) - //!> Essentially computes the round-off error of the applied force and adds it in the next time step as a compensation. - //!> Seems to be necesseary at very high Re boundary layers, where the forcing and velocity can - //!> differ by several orders of magnitude. - //!> \note 16/05/2022: Testing, still ongoing! - //! - // bodyForceX[k_000] = (acc_x-(vvx-vx))*factor*c2o1; - // bodyForceY[k_000] = (acc_y-(vvy-vy))*factor*c2o1; - // bodyForceZ[k_000] = (acc_z-(vvz-vz))*factor*c2o1; - } - else{ - vvx += fx * c1o2 / factor; - vvy += fy * c1o2 / factor; - vvz += fz * c1o2 / factor; - } - - - //////////////////////////////////////////////////////////////////////////////////// - // calculate the square of velocities for this lattice node - real vx2 = vvx * vvx; - real vy2 = vvy * vvy; - real vz2 = vvz * vvz; - //////////////////////////////////////////////////////////////////////////////////// - //! - Set relaxation limiters for third order cumulants to default value \f$ \lambda=0.001 \f$ according to - //! section 6 in \ref <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - real quadricLimitP = quadricLimiters[0]; - real quadricLimitM = quadricLimiters[1]; - real quadricLimitD = quadricLimiters[2]; - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), - //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> see also Eq. (6)-(14) in \ref <a - //! href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 - //! ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - forwardInverseChimeraWithK(f_MMM, f_MM0, f_MMP, vvz, vz2, c36o1, c1o36); - forwardInverseChimeraWithK(f_M0M, f_M00, f_M0P, vvz, vz2, c9o1, c1o9); - forwardInverseChimeraWithK(f_MPM, f_MP0, f_MPP, vvz, vz2, c36o1, c1o36); - forwardInverseChimeraWithK(f_0MM, f_0M0, f_0MP, vvz, vz2, c9o1, c1o9); - forwardInverseChimeraWithK(f_00M, f_000, f_00P, vvz, vz2, c9o4, c4o9); - forwardInverseChimeraWithK(f_0PM, f_0P0, f_0PP, vvz, vz2, c9o1, c1o9); - forwardInverseChimeraWithK(f_PMM, f_PM0, f_PMP, vvz, vz2, c36o1, c1o36); - forwardInverseChimeraWithK(f_P0M, f_P00, f_P0P, vvz, vz2, c9o1, c1o9); - forwardInverseChimeraWithK(f_PPM, f_PP0, f_PPP, vvz, vz2, c36o1, c1o36); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - forwardInverseChimeraWithK(f_MMM, f_M0M, f_MPM, vvy, vy2, c6o1, c1o6); - forwardChimera( f_MM0, f_M00, f_MP0, vvy, vy2); - forwardInverseChimeraWithK(f_MMP, f_M0P, f_MPP, vvy, vy2, c18o1, c1o18); - forwardInverseChimeraWithK(f_0MM, f_00M, f_0PM, vvy, vy2, c3o2, c2o3); - forwardChimera( f_0M0, f_000, f_0P0, vvy, vy2); - forwardInverseChimeraWithK(f_0MP, f_00P, f_0PP, vvy, vy2, c9o2, c2o9); - forwardInverseChimeraWithK(f_PMM, f_P0M, f_PPM, vvy, vy2, c6o1, c1o6); - forwardChimera( f_PM0, f_P00, f_PP0, vvy, vy2); - forwardInverseChimeraWithK(f_PMP, f_P0P, f_PPP, vvy, vy2, c18o1, c1o18); - - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - forwardInverseChimeraWithK(f_MMM, f_0MM, f_PMM, vvx, vx2, c1o1, c1o1); - forwardChimera( f_M0M, f_00M, f_P0M, vvx, vx2); - forwardInverseChimeraWithK(f_MPM, f_0PM, f_PPM, vvx, vx2, c3o1, c1o3); - forwardChimera( f_MM0, f_0M0, f_PM0, vvx, vx2); - forwardChimera( f_M00, f_000, f_P00, vvx, vx2); - forwardChimera( f_MP0, f_0P0, f_PP0, vvx, vx2); - forwardInverseChimeraWithK(f_MMP, f_0MP, f_PMP, vvx, vx2, c3o1, c1o3); - forwardChimera( f_M0P, f_00P, f_P0P, vvx, vx2); - forwardInverseChimeraWithK(f_MPP, f_0PP, f_PPP, vvx, vx2, c3o1, c1o9); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Setting relaxation rates for non-hydrodynamic cumulants (default values). Variable names and equations - //! according to <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! => [NAME IN PAPER]=[NAME IN CODE]=[DEFAULT VALUE]. - //! - Trace of second order cumulants \f$ C_{200}+C_{020}+C_{002} \f$ used to adjust bulk - //! viscosity:\f$\omega_2=OxxPyyPzz=1.0 \f$. - //! - Third order cumulants \f$ C_{120}+C_{102}, C_{210}+C_{012}, C_{201}+C_{021} \f$: \f$ \omega_3=OxyyPxzz - //! \f$ set according to Eq. (111) with simplifications assuming \f$ \omega_2=1.0\f$. - //! - Third order cumulants \f$ C_{120}-C_{102}, C_{210}-C_{012}, C_{201}-C_{021} \f$: \f$ \omega_4 = OxyyMxzz - //! \f$ set according to Eq. (112) with simplifications assuming \f$ \omega_2 = 1.0\f$. - //! - Third order cumulants \f$ C_{111} \f$: \f$ \omega_5 = Oxyz \f$ set according to Eq. (113) with - //! simplifications assuming \f$ \omega_2 = 1.0\f$ (modify for different bulk viscosity). - //! - Fourth order cumulants \f$ C_{220}, C_{202}, C_{022}, C_{211}, C_{121}, C_{112} \f$: for simplification - //! all set to the same default value \f$ \omega_6=\omega_7=\omega_8=O4=1.0 \f$. - //! - Fifth order cumulants \f$ C_{221}, C_{212}, C_{122}\f$: \f$\omega_9=O5=1.0\f$. - //! - Sixth order cumulant \f$ C_{222}\f$: \f$\omega_{10}=O6=1.0\f$. - //! - //////////////////////////////////////////////////////////////////////////////////// - //! - Calculate modified omega with turbulent viscosity - //! - real omega = omega_in; - if(turbulenceModel != TurbulenceModel::None){ omega /= (c1o1 + c3o1*omega_in*turbulentViscosity[k_000]); } - //////////////////////////////////////////////////////////// - // 2. - real OxxPyyPzz = c1o1; - //////////////////////////////////////////////////////////// - // 3. - real OxyyPxzz = c8o1 * (-c2o1 + omega) * (c1o1 + c2o1 * omega) / (-c8o1 - c14o1 * omega + c7o1 * omega * omega); - real OxyyMxzz = - c8o1 * (-c2o1 + omega) * (-c7o1 + c4o1 * omega) / (c56o1 - c50o1 * omega + c9o1 * omega * omega); - real Oxyz = c24o1 * (-c2o1 + omega) * (-c2o1 - c7o1 * omega + c3o1 * omega * omega) / - (c48o1 + c152o1 * omega - c130o1 * omega * omega + c29o1 * omega * omega * omega); - //////////////////////////////////////////////////////////// - // 4. - real O4 = c1o1; - //////////////////////////////////////////////////////////// - // 5. - real O5 = c1o1; - //////////////////////////////////////////////////////////// - // 6. - real O6 = c1o1; - - //////////////////////////////////////////////////////////////////////////////////// - //! - A and DIR_00M: parameters for fourth order convergence of the diffusion term according to Eq. (115) and (116) - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> with simplifications assuming \f$ \omega_2 = 1.0 \f$ (modify for - //! different bulk viscosity). - //! - real factorA = (c4o1 + c2o1 * omega - c3o1 * omega * omega) / (c2o1 - c7o1 * omega + c5o1 * omega * omega); - real factorB = (c4o1 + c28o1 * omega - c14o1 * omega * omega) / (c6o1 - c21o1 * omega + c15o1 * omega * omega); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute cumulants from central moments according to Eq. (20)-(23) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - //////////////////////////////////////////////////////////// - // 4. - real c_211 = m_211 - ((m_200 + c1o3) * m_011 + c2o1 * m_110 * m_101) * oneOverRho; - real c_121 = m_121 - ((m_020 + c1o3) * m_101 + c2o1 * m_110 * m_011) * oneOverRho; - real c_112 = m_112 - ((m_002 + c1o3) * m_110 + c2o1 * m_101 * m_011) * oneOverRho; - - real c_220 = m_220 - (((m_200 * m_020 + c2o1 * m_110 * m_110) + c1o3 * (m_200 + m_020)) * oneOverRho - c1o9 * (drho * oneOverRho)); - real c_202 = m_202 - (((m_200 * m_002 + c2o1 * m_101 * m_101) + c1o3 * (m_200 + m_002)) * oneOverRho - c1o9 * (drho * oneOverRho)); - real c_022 = m_022 - (((m_002 * m_020 + c2o1 * m_011 * m_011) + c1o3 * (m_002 + m_020)) * oneOverRho - c1o9 * (drho * oneOverRho)); - //////////////////////////////////////////////////////////// - // 5. - real c_122 = - m_122 - ((m_002 * m_120 + m_020 * m_102 + c4o1 * m_011 * m_111 + c2o1 * (m_101 * m_021 + m_110 * m_012)) + - c1o3 * (m_120 + m_102)) * - oneOverRho; - real c_212 = - m_212 - ((m_002 * m_210 + m_200 * m_012 + c4o1 * m_101 * m_111 + c2o1 * (m_011 * m_201 + m_110 * m_102)) + - c1o3 * (m_210 + m_012)) * - oneOverRho; - real c_221 = - m_221 - ((m_200 * m_021 + m_020 * m_201 + c4o1 * m_110 * m_111 + c2o1 * (m_101 * m_120 + m_011 * m_210)) + - c1o3 * (m_021 + m_201)) * - oneOverRho; - //////////////////////////////////////////////////////////// - // 6. - real c_222 = m_222 + ((-c4o1 * m_111 * m_111 - (m_200 * m_022 + m_020 * m_202 + m_002 * m_220) - - c4o1 * (m_011 * m_211 + m_101 * m_121 + m_110 * m_112) - - c2o1 * (m_120 * m_102 + m_210 * m_012 + m_201 * m_021)) * - oneOverRho + - (c4o1 * (m_101 * m_101 * m_020 + m_011 * m_011 * m_200 + m_110 * m_110 * m_002) + - c2o1 * (m_200 * m_020 * m_002) + c16o1 * m_110 * m_101 * m_011) * - oneOverRho * oneOverRho - - c1o3 * (m_022 + m_202 + m_220) * oneOverRho - c1o9 * (m_200 + m_020 + m_002) * oneOverRho + - (c2o1 * (m_101 * m_101 + m_011 * m_011 + m_110 * m_110) + - (m_002 * m_020 + m_002 * m_200 + m_020 * m_200) + c1o3 * (m_002 + m_020 + m_200)) * - oneOverRho * oneOverRho * c2o3 + - c1o27 * ((drho * drho - drho) * oneOverRho * oneOverRho)); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute linear combinations of second and third order cumulants - //! - //////////////////////////////////////////////////////////// - // 2. - real mxxPyyPzz = m_200 + m_020 + m_002; - real mxxMyy = m_200 - m_020; - real mxxMzz = m_200 - m_002; - //////////////////////////////////////////////////////////// - // 3. - real mxxyPyzz = m_210 + m_012; - real mxxyMyzz = m_210 - m_012; - - real mxxzPyyz = m_201 + m_021; - real mxxzMyyz = m_201 - m_021; - - real mxyyPxzz = m_120 + m_102; - real mxyyMxzz = m_120 - m_102; - - //////////////////////////////////////////////////////////////////////////////////// - // incl. correction - //////////////////////////////////////////////////////////// - //! - Compute velocity gradients from second order cumulants according to Eq. (27)-(32) - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> Further explanations of the correction in viscosity in Appendix H of - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), - //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> Note that the division by rho is omitted here as we need rho times - //! the gradients later. - //! - real Dxy = -c3o1 * omega * m_110; - real Dxz = -c3o1 * omega * m_101; - real Dyz = -c3o1 * omega * m_011; - real dxux = c1o2 * (-omega) * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (m_000 - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //////////////////////////////////////////////////////////////////////////////////// - switch (turbulenceModel) - { - case TurbulenceModel::None: - case TurbulenceModel::AMD: //AMD is computed in separate kernel - break; - case TurbulenceModel::Smagorinsky: - turbulentViscosity[k_000] = calcTurbulentViscositySmagorinsky(SGSconstant, dxux, dyuy, dzuz, Dxy, Dxz , Dyz); - break; - case TurbulenceModel::QR: - turbulentViscosity[k_000] = calcTurbulentViscosityQR(SGSconstant, dxux, dyuy, dzuz, Dxy, Dxz , Dyz); - break; - default: - break; - } - //////////////////////////////////////////////////////////// - //! - Relaxation of second order cumulants with correction terms according to Eq. (33)-(35) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - mxxPyyPzz += OxxPyyPzz * (m_000 - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - //////////////////////////////////////////////////////////////////////////////////// - ////no correction - // mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz); - // mxxMyy += -(-omega) * (-mxxMyy); - // mxxMzz += -(-omega) * (-mxxMzz); - ////////////////////////////////////////////////////////////////////////// - m_011 += omega * (-m_011); - m_101 += omega * (-m_101); - m_110 += omega * (-m_110); - - //////////////////////////////////////////////////////////////////////////////////// - // relax - ////////////////////////////////////////////////////////////////////////// - // incl. limiter - //! - Relaxation of third order cumulants including limiter according to Eq. (116)-(123) - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - real wadjust = Oxyz + (c1o1 - Oxyz) * abs(m_111) / (abs(m_111) + quadricLimitD); - m_111 += wadjust * (-m_111); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * abs(mxxyPyzz) / (abs(mxxyPyzz) + quadricLimitP); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * abs(mxxyMyzz) / (abs(mxxyMyzz) + quadricLimitM); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * abs(mxxzPyyz) / (abs(mxxzPyyz) + quadricLimitP); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * abs(mxxzMyyz) / (abs(mxxzMyyz) + quadricLimitM); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * abs(mxyyPxzz) / (abs(mxyyPxzz) + quadricLimitP); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * abs(mxyyMxzz) / (abs(mxyyMxzz) + quadricLimitM); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - // no limiter - // mfbbb += OxyyMxzz * (-mfbbb); - // mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - // mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - // mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - // mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - // mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - // mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute inverse linear combinations of second and third order cumulants - //! - m_200 = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - m_020 = c1o3 * (-c2o1 * mxxMyy + mxxMzz + mxxPyyPzz); - m_002 = c1o3 * (mxxMyy - c2o1 * mxxMzz + mxxPyyPzz); - - m_210 = ( mxxyMyzz + mxxyPyzz) * c1o2; - m_012 = (-mxxyMyzz + mxxyPyzz) * c1o2; - m_201 = ( mxxzMyyz + mxxzPyyz) * c1o2; - m_021 = (-mxxzMyyz + mxxzPyyz) * c1o2; - m_120 = ( mxyyMxzz + mxyyPxzz) * c1o2; - m_102 = (-mxyyMxzz + mxyyPxzz) * c1o2; - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - // 4. - // no limiter - //! - Relax fourth order cumulants to modified equilibrium for fourth order convergence of diffusion according - //! to Eq. (43)-(48) <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - c_022 = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * factorA + (c1o1 - O4) * (c_022); - c_202 = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * factorA + (c1o1 - O4) * (c_202); - c_220 = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * factorA + (c1o1 - O4) * (c_220); - c_112 = -O4 * (c1o1 / omega - c1o2) * Dxy * c1o3 * factorB + (c1o1 - O4) * (c_112); - c_121 = -O4 * (c1o1 / omega - c1o2) * Dxz * c1o3 * factorB + (c1o1 - O4) * (c_121); - c_211 = -O4 * (c1o1 / omega - c1o2) * Dyz * c1o3 * factorB + (c1o1 - O4) * (c_211); - - - ////////////////////////////////////////////////////////////////////////// - // 5. - c_122 += O5 * (-c_122); - c_212 += O5 * (-c_212); - c_221 += O5 * (-c_221); - - ////////////////////////////////////////////////////////////////////////// - // 6. - c_222 += O6 * (-c_222); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute central moments from post collision cumulants according to Eq. (53)-(56) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), - //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> - //! - - ////////////////////////////////////////////////////////////////////////// - // 4. - m_211 = c_211 + c1o3 * ((c3o1 * m_200 + c1o1) * m_011 + c6o1 * m_110 * m_101) * oneOverRho; - m_121 = c_121 + c1o3 * ((c3o1 * m_020 + c1o1) * m_101 + c6o1 * m_110 * m_011) * oneOverRho; - m_112 = c_112 + c1o3 * ((c3o1 * m_002 + c1o1) * m_110 + c6o1 * m_101 * m_011) * oneOverRho; - - m_220 = - c_220 + (((m_200 * m_020 + c2o1 * m_110 * m_110) * c9o1 + c3o1 * (m_200 + m_020)) * oneOverRho - (drho * oneOverRho)) * c1o9; - m_202 = - c_202 + (((m_200 * m_002 + c2o1 * m_101 * m_101) * c9o1 + c3o1 * (m_200 + m_002)) * oneOverRho - (drho * oneOverRho)) * c1o9; - m_022 = - c_022 + (((m_002 * m_020 + c2o1 * m_011 * m_011) * c9o1 + c3o1 * (m_002 + m_020)) * oneOverRho - (drho * oneOverRho)) * c1o9; - - ////////////////////////////////////////////////////////////////////////// - // 5. - m_122 = c_122 + c1o3 * - (c3o1 * (m_002 * m_120 + m_020 * m_102 + c4o1 * m_011 * m_111 + c2o1 * (m_101 * m_021 + m_110 * m_012)) + - (m_120 + m_102)) * oneOverRho; - m_212 = c_212 + c1o3 * - (c3o1 * (m_002 * m_210 + m_200 * m_012 + c4o1 * m_101 * m_111 + c2o1 * (m_011 * m_201 + m_110 * m_102)) + - (m_210 + m_012)) * oneOverRho; - m_221 = c_221 + c1o3 * - (c3o1 * (m_200 * m_021 + m_020 * m_201 + c4o1 * m_110 * m_111 + c2o1 * (m_101 * m_120 + m_011 * m_210)) + - (m_021 + m_201)) * oneOverRho; - - ////////////////////////////////////////////////////////////////////////// - // 6. - m_222 = c_222 - ((-c4o1 * m_111 * m_111 - (m_200 * m_022 + m_020 * m_202 + m_002 * m_220) - - c4o1 * (m_011 * m_211 + m_101 * m_121 + m_110 * m_112) - - c2o1 * (m_120 * m_102 + m_210 * m_012 + m_201 * m_021)) * - oneOverRho + - (c4o1 * (m_101 * m_101 * m_020 + m_011 * m_011 * m_200 + m_110 * m_110 * m_002) + - c2o1 * (m_200 * m_020 * m_002) + c16o1 * m_110 * m_101 * m_011) * - oneOverRho * oneOverRho - - c1o3 * (m_022 + m_202 + m_220) * oneOverRho - c1o9 * (m_200 + m_020 + m_002) * oneOverRho + - (c2o1 * (m_101 * m_101 + m_011 * m_011 + m_110 * m_110) + - (m_002 * m_020 + m_002 * m_200 + m_020 * m_200) + c1o3 * (m_002 + m_020 + m_200)) * - oneOverRho * oneOverRho * c2o3 + - c1o27 * ((drho * drho - drho) * oneOverRho * oneOverRho)); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Add acceleration (body force) to first order cumulants according to Eq. (85)-(87) in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), - //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> - //! - m_100 = -m_100; - m_010 = -m_010; - m_001 = -m_001; - - //Write to array here to distribute read/write - if(writeMacroscopicVariables || turbulenceModel==TurbulenceModel::AMD) - { - rho[k_000] = drho; - vx[k_000] = vvx; - vy[k_000] = vvy; - vz[k_000] = vvz; - } - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), - //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> see also Eq. (88)-(96) in <a - //! href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 - //! ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - backwardInverseChimeraWithK(m_000, m_100, m_200, vvx, vx2, c1o1, c1o1); - backwardChimera( m_010, m_110, m_210, vvx, vx2); - backwardInverseChimeraWithK(m_020, m_120, m_220, vvx, vx2, c3o1, c1o3); - backwardChimera( m_001, m_101, m_201, vvx, vx2); - backwardChimera( m_011, m_111, m_211, vvx, vx2); - backwardChimera( m_021, m_121, m_221, vvx, vx2); - backwardInverseChimeraWithK(m_002, m_102, m_202, vvx, vx2, c3o1, c1o3); - backwardChimera( m_012, m_112, m_212, vvx, vx2); - backwardInverseChimeraWithK(m_022, m_122, m_222, vvx, vx2, c9o1, c1o9); - - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - backwardInverseChimeraWithK(m_000, m_010, m_020, vvy, vy2, c6o1, c1o6); - backwardChimera( m_001, m_011, m_021, vvy, vy2); - backwardInverseChimeraWithK(m_002, m_012, m_022, vvy, vy2, c18o1, c1o18); - backwardInverseChimeraWithK(m_100, m_110, m_120, vvy, vy2, c3o2, c2o3); - backwardChimera( m_101, m_111, m_121, vvy, vy2); - backwardInverseChimeraWithK(m_102, m_112, m_122, vvy, vy2, c9o2, c2o9); - backwardInverseChimeraWithK(m_200, m_210, m_220, vvy, vy2, c6o1, c1o6); - backwardChimera( m_201, m_211, m_221, vvy, vy2); - backwardInverseChimeraWithK(m_202, m_212, m_222, vvy, vy2, c18o1, c1o18); - - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - backwardInverseChimeraWithK(m_000, m_001, m_002, vvz, vz2, c36o1, c1o36); - backwardInverseChimeraWithK(m_010, m_011, m_012, vvz, vz2, c9o1, c1o9); - backwardInverseChimeraWithK(m_020, m_021, m_022, vvz, vz2, c36o1, c1o36); - backwardInverseChimeraWithK(m_100, m_101, m_102, vvz, vz2, c9o1, c1o9); - backwardInverseChimeraWithK(m_110, m_111, m_112, vvz, vz2, c9o4, c4o9); - backwardInverseChimeraWithK(m_120, m_121, m_122, vvz, vz2, c9o1, c1o9); - backwardInverseChimeraWithK(m_200, m_201, m_202, vvz, vz2, c36o1, c1o36); - backwardInverseChimeraWithK(m_210, m_211, m_212, vvz, vz2, c9o1, c1o9); - backwardInverseChimeraWithK(m_220, m_221, m_222, vvz, vz2, c36o1, c1o36); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Write distributions: style of reading and writing the distributions from/to - //! stored arrays dependent on timestep is based on the esoteric twist algorithm - //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), - //! DOI:10.3390/computation5020019 ]</b></a> - //! - (dist.f[DIR_P00])[k_000] = f_M00; - (dist.f[DIR_M00])[k_M00] = f_P00; - (dist.f[DIR_0P0])[k_000] = f_0M0; - (dist.f[DIR_0M0])[k_0M0] = f_0P0; - (dist.f[DIR_00P])[k_000] = f_00M; - (dist.f[DIR_00M])[k_00M] = f_00P; - (dist.f[DIR_PP0])[k_000] = f_MM0; - (dist.f[DIR_MM0])[k_MM0] = f_PP0; - (dist.f[DIR_PM0])[k_0M0] = f_MP0; - (dist.f[DIR_MP0])[k_M00] = f_PM0; - (dist.f[DIR_P0P])[k_000] = f_M0M; - (dist.f[DIR_M0M])[k_M0M] = f_P0P; - (dist.f[DIR_P0M])[k_00M] = f_M0P; - (dist.f[DIR_M0P])[k_M00] = f_P0M; - (dist.f[DIR_0PP])[k_000] = f_0MM; - (dist.f[DIR_0MM])[k_0MM] = f_0PP; - (dist.f[DIR_0PM])[k_00M] = f_0MP; - (dist.f[DIR_0MP])[k_0M0] = f_0PM; - (dist.f[DIR_000])[k_000] = f_000; - (dist.f[DIR_PPP])[k_000] = f_MMM; - (dist.f[DIR_PMP])[k_0M0] = f_MPM; - (dist.f[DIR_PPM])[k_00M] = f_MMP; - (dist.f[DIR_PMM])[k_0MM] = f_MPP; - (dist.f[DIR_MPP])[k_M00] = f_PMM; - (dist.f[DIR_MMP])[k_MM0] = f_PPM; - (dist.f[DIR_MPM])[k_M0M] = f_PMP; - (dist.f[DIR_MMM])[k_MMM] = f_PPP; -} - -template __global__ void K17CompressibleNavierStokes_Device < TurbulenceModel::AMD, true, true > ( real omega_in, uint* neighborX, uint* neighborY, uint* neighborZ, real* distributions, real* rho, real* vx, real* vy, real* vz, real* turbulentViscosity, real SGSconstant, unsigned long long numberOfLBnodes, int level, real* forces, real* bodyForceX, real* bodyForceY, real* bodyForceZ, real* quadricLimiters, bool isEvenTimestep, const uint *fluidNodeIndices, uint numberOfFluidNodes); - -template __global__ void K17CompressibleNavierStokes_Device < TurbulenceModel::Smagorinsky, true, true > ( real omega_in, uint* neighborX, uint* neighborY, uint* neighborZ, real* distributions, real* rho, real* vx, real* vy, real* vz, real* turbulentViscosity, real SGSconstant, unsigned long long numberOfLBnodes, int level, real* forces, real* bodyForceX, real* bodyForceY, real* bodyForceZ, real* quadricLimiters, bool isEvenTimestep, const uint *fluidNodeIndices, uint numberOfFluidNodes); - -template __global__ void K17CompressibleNavierStokes_Device < TurbulenceModel::QR, true, true > ( real omega_in, uint* neighborX, uint* neighborY, uint* neighborZ, real* distributions, real* rho, real* vx, real* vy, real* vz, real* turbulentViscosity, real SGSconstant, unsigned long long numberOfLBnodes, int level, real* forces, real* bodyForceX, real* bodyForceY, real* bodyForceZ, real* quadricLimiters, bool isEvenTimestep, const uint *fluidNodeIndices, uint numberOfFluidNodes); - -template __global__ void K17CompressibleNavierStokes_Device < TurbulenceModel::None, true, true > ( real omega_in, uint* neighborX, uint* neighborY, uint* neighborZ, real* distributions, real* rho, real* vx, real* vy, real* vz, real* turbulentViscosity, real SGSconstant, unsigned long long numberOfLBnodes, int level, real* forces, real* bodyForceX, real* bodyForceY, real* bodyForceZ, real* quadricLimiters, bool isEvenTimestep, const uint *fluidNodeIndices, uint numberOfFluidNodes); - -template __global__ void K17CompressibleNavierStokes_Device < TurbulenceModel::AMD, true, false > ( real omega_in, uint* neighborX, uint* neighborY, uint* neighborZ, real* distributions, real* rho, real* vx, real* vy, real* vz, real* turbulentViscosity, real SGSconstant, unsigned long long numberOfLBnodes, int level, real* forces, real* bodyForceX, real* bodyForceY, real* bodyForceZ, real* quadricLimiters, bool isEvenTimestep, const uint *fluidNodeIndices, uint numberOfFluidNodes); - -template __global__ void K17CompressibleNavierStokes_Device < TurbulenceModel::Smagorinsky, true, false > ( real omega_in, uint* neighborX, uint* neighborY, uint* neighborZ, real* distributions, real* rho, real* vx, real* vy, real* vz, real* turbulentViscosity, real SGSconstant, unsigned long long numberOfLBnodes, int level, real* forces, real* bodyForceX, real* bodyForceY, real* bodyForceZ, real* quadricLimiters, bool isEvenTimestep, const uint *fluidNodeIndices, uint numberOfFluidNodes); - -template __global__ void K17CompressibleNavierStokes_Device < TurbulenceModel::QR, true, false > ( real omega_in, uint* neighborX, uint* neighborY, uint* neighborZ, real* distributions, real* rho, real* vx, real* vy, real* vz, real* turbulentViscosity, real SGSconstant, unsigned long long numberOfLBnodes, int level, real* forces, real* bodyForceX, real* bodyForceY, real* bodyForceZ, real* quadricLimiters, bool isEvenTimestep, const uint *fluidNodeIndices, uint numberOfFluidNodes); - -template __global__ void K17CompressibleNavierStokes_Device < TurbulenceModel::None, true, false > ( real omega_in, uint* neighborX, uint* neighborY, uint* neighborZ, real* distributions, real* rho, real* vx, real* vy, real* vz, real* turbulentViscosity, real SGSconstant, unsigned long long numberOfLBnodes, int level, real* forces, real* bodyForceX, real* bodyForceY, real* bodyForceZ, real* quadricLimiters, bool isEvenTimestep, const uint *fluidNodeIndices, uint numberOfFluidNodes); - -template __global__ void K17CompressibleNavierStokes_Device < TurbulenceModel::AMD, false, true > ( real omega_in, uint* neighborX, uint* neighborY, uint* neighborZ, real* distributions, real* rho, real* vx, real* vy, real* vz, real* turbulentViscosity, real SGSconstant, unsigned long long numberOfLBnodes, int level, real* forces, real* bodyForceX, real* bodyForceY, real* bodyForceZ, real* quadricLimiters, bool isEvenTimestep, const uint *fluidNodeIndices, uint numberOfFluidNodes); - -template __global__ void K17CompressibleNavierStokes_Device < TurbulenceModel::Smagorinsky, false, true > ( real omega_in, uint* neighborX, uint* neighborY, uint* neighborZ, real* distributions, real* rho, real* vx, real* vy, real* vz, real* turbulentViscosity, real SGSconstant, unsigned long long numberOfLBnodes, int level, real* forces, real* bodyForceX, real* bodyForceY, real* bodyForceZ, real* quadricLimiters, bool isEvenTimestep, const uint *fluidNodeIndices, uint numberOfFluidNodes); - -template __global__ void K17CompressibleNavierStokes_Device < TurbulenceModel::QR, false, true > ( real omega_in, uint* neighborX, uint* neighborY, uint* neighborZ, real* distributions, real* rho, real* vx, real* vy, real* vz, real* turbulentViscosity, real SGSconstant, unsigned long long numberOfLBnodes, int level, real* forces, real* bodyForceX, real* bodyForceY, real* bodyForceZ, real* quadricLimiters, bool isEvenTimestep, const uint *fluidNodeIndices, uint numberOfFluidNodes); - -template __global__ void K17CompressibleNavierStokes_Device < TurbulenceModel::None, false, true > ( real omega_in, uint* neighborX, uint* neighborY, uint* neighborZ, real* distributions, real* rho, real* vx, real* vy, real* vz, real* turbulentViscosity, real SGSconstant, unsigned long long numberOfLBnodes, int level, real* forces, real* bodyForceX, real* bodyForceY, real* bodyForceZ, real* quadricLimiters, bool isEvenTimestep, const uint *fluidNodeIndices, uint numberOfFluidNodes); - -template __global__ void K17CompressibleNavierStokes_Device < TurbulenceModel::AMD, false, false > ( real omega_in, uint* neighborX, uint* neighborY, uint* neighborZ, real* distributions, real* rho, real* vx, real* vy, real* vz, real* turbulentViscosity, real SGSconstant, unsigned long long numberOfLBnodes, int level, real* forces, real* bodyForceX, real* bodyForceY, real* bodyForceZ, real* quadricLimiters, bool isEvenTimestep, const uint *fluidNodeIndices, uint numberOfFluidNodes); - -template __global__ void K17CompressibleNavierStokes_Device < TurbulenceModel::Smagorinsky, false, false > ( real omega_in, uint* neighborX, uint* neighborY, uint* neighborZ, real* distributions, real* rho, real* vx, real* vy, real* vz, real* turbulentViscosity, real SGSconstant, unsigned long long numberOfLBnodes, int level, real* forces, real* bodyForceX, real* bodyForceY, real* bodyForceZ, real* quadricLimiters, bool isEvenTimestep, const uint *fluidNodeIndices, uint numberOfFluidNodes); - -template __global__ void K17CompressibleNavierStokes_Device < TurbulenceModel::QR, false, false > ( real omega_in, uint* neighborX, uint* neighborY, uint* neighborZ, real* distributions, real* rho, real* vx, real* vy, real* vz, real* turbulentViscosity, real SGSconstant, unsigned long long numberOfLBnodes, int level, real* forces, real* bodyForceX, real* bodyForceY, real* bodyForceZ, real* quadricLimiters, bool isEvenTimestep, const uint *fluidNodeIndices, uint numberOfFluidNodes); - -template __global__ void K17CompressibleNavierStokes_Device < TurbulenceModel::None, false, false > ( real omega_in, uint* neighborX, uint* neighborY, uint* neighborZ, real* distributions, real* rho, real* vx, real* vy, real* vz, real* turbulentViscosity, real SGSconstant, unsigned long long numberOfLBnodes, int level, real* forces, real* bodyForceX, real* bodyForceY, real* bodyForceZ, real* quadricLimiters, bool isEvenTimestep, const uint *fluidNodeIndices, uint numberOfFluidNodes); diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokes_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokes_Device.cuh deleted file mode 100644 index 49f144422bf5803582edebf9826f34b2af3f929a..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokes_Device.cuh +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef K17CompressibleNavierStokes_Device_H -#define K17CompressibleNavierStokes_Device_H - -#include <DataTypes.h> -#include <curand.h> - -template< TurbulenceModel turbulenceModel, bool writeMacroscopicVariables, bool applyBodyForce > __global__ void K17CompressibleNavierStokes_Device( - real omega_in, - uint* neighborX, - uint* neighborY, - uint* neighborZ, - real* distributions, - real* rho, - real* vx, - real* vy, - real* vz, - real* turbulentViscosity, - real SGSconstant, - unsigned long long numberOfLBnodes, - int level, - real* forces, - real* bodyForceX, - real* bodyForceY, - real* bodyForceZ, - real* quadricLimiters, - bool isEvenTimestep, - const uint *fluidNodeIndices, - uint numberOfFluidNodes); -#endif diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes.cu deleted file mode 100644 index efc90492b18c2360c49f523e26c4bcfe2b594e47..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes.cu +++ /dev/null @@ -1,41 +0,0 @@ -#include "K18CompressibleNavierStokes.h" - -#include "K18CompressibleNavierStokes_Device.cuh" -#include "Parameter/Parameter.h" -#include <cuda_helper/CudaGrid.h> - -std::shared_ptr<K18CompressibleNavierStokes> K18CompressibleNavierStokes::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<K18CompressibleNavierStokes>(new K18CompressibleNavierStokes(para, level)); -} - -void K18CompressibleNavierStokes::run() -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); - - K18CompressibleNavierStokes_Device <<< grid.grid, grid.threads >>>( - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->g6.g[0], - para->getParD(level)->numberOfNodes, - level, - para->getForcesDev(), - para->getQuadricLimitersDev(), - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_Kernel_CumulantK18Comp execution failed"); -} - -K18CompressibleNavierStokes::K18CompressibleNavierStokes(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitCompSP27); - myPreProcessorTypes.push_back(InitF3); - - -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes.h b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes.h deleted file mode 100644 index d75920c78efe48ad586c4c92f775c3868195e9b8..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef K18CompressibleNavierStokes_H -#define K18CompressibleNavierStokes_H - -#include "Kernel/KernelImp.h" - -class K18CompressibleNavierStokes : public KernelImp -{ -public: - static std::shared_ptr< K18CompressibleNavierStokes> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - K18CompressibleNavierStokes(); - K18CompressibleNavierStokes(std::shared_ptr< Parameter> para, int level); -}; - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes_Device.cu deleted file mode 100644 index 169dedd3660ba9fc3c5e15bdfb60941bad2856c3..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes_Device.cu +++ /dev/null @@ -1,955 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void K18CompressibleNavierStokes_Device( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - real* G6, - int size_Mat, - int level, - real* forces, - real* quadricLimiters, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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 < size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if ((BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; - } - - Distributions6 G; - if (EvenOrOdd == true) - { - G.g[DIR_P00] = &G6[DIR_P00 * size_Mat]; - G.g[DIR_M00] = &G6[DIR_M00 * size_Mat]; - G.g[DIR_0P0] = &G6[DIR_0P0 * size_Mat]; - G.g[DIR_0M0] = &G6[DIR_0M0 * size_Mat]; - G.g[DIR_00P] = &G6[DIR_00P * size_Mat]; - G.g[DIR_00M] = &G6[DIR_00M * size_Mat]; - } - else - { - G.g[DIR_M00] = &G6[DIR_P00 * size_Mat]; - G.g[DIR_P00] = &G6[DIR_M00 * size_Mat]; - G.g[DIR_0M0] = &G6[DIR_0P0 * size_Mat]; - G.g[DIR_0P0] = &G6[DIR_0M0 * size_Mat]; - G.g[DIR_00M] = &G6[DIR_00P * size_Mat]; - G.g[DIR_00P] = &G6[DIR_00M * size_Mat]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mgcbb = (G.g[DIR_P00])[k]; - real mgabb = (G.g[DIR_M00])[kw]; - real mgbcb = (G.g[DIR_0P0])[k]; - real mgbab = (G.g[DIR_0M0])[ks]; - real mgbbc = (G.g[DIR_00P])[k]; - real mgbba = (G.g[DIR_00M])[kb]; - real dxxux = c1o2 * (-mgcbb + mgabb); - real dyyuy = c1o2 * (-mgbcb + mgbab); - real dzzuz = c1o2 * (-mgbbc + mgbba); - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k]; - real mfabb = (D.f[DIR_M00])[kw]; - real mfbcb = (D.f[DIR_0P0])[k]; - real mfbab = (D.f[DIR_0M0])[ks]; - real mfbbc = (D.f[DIR_00P])[k]; - real mfbba = (D.f[DIR_00M])[kb]; - real mfccb = (D.f[DIR_PP0])[k]; - real mfaab = (D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks]; - real mfacb = (D.f[DIR_MP0])[kw]; - real mfcbc = (D.f[DIR_P0P])[k]; - real mfaba = (D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb]; - real mfabc = (D.f[DIR_M0P])[kw]; - real mfbcc = (D.f[DIR_0PP])[k]; - real mfbaa = (D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb]; - real mfbac = (D.f[DIR_0MP])[ks]; - real mfbbb = (D.f[DIR_000])[k]; - real mfccc = (D.f[DIR_PPP])[k]; - real mfaac = (D.f[DIR_MMP])[ksw]; - real mfcac = (D.f[DIR_PMP])[ks]; - real mfacc = (D.f[DIR_MPP])[kw]; - real mfcca = (D.f[DIR_PPM])[kb]; - real mfaaa = (D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs]; - real mfaca = (D.f[DIR_MPM])[kbw]; - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - - real rho = c1o1 + drho; - //////////////////////////////////////////////////////////////////////////////////// - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) / rho; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) / rho; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - real fx = forces[0] / (pow((double)c2o1, (double)level)); //zero;//0.0032653/(pow(two,level)); //0.000000005;//(two/1600000.0) / 120.0; // - real fy = forces[1] / (pow((double)c2o1, (double)level)); //zero; - real fz = forces[2] / (pow((double)c2o1, (double)level)); //zero; - vvx += fx; - vvy += fy; - vvz += fz; - //////////////////////////////////////////////////////////////////////////////////// - //real omega = omega_in; - //////////////////////////////////////////////////////////////////////////////////// - //fast - real oMdrho = c1o1; // comp special - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimitP = quadricLimiters[0]; //0.01f; // * 0.0001f; // 1000000.0f; // 1000000.0f; // - real qudricLimitM = quadricLimiters[1]; //0.01f; // * 0.0001f; // 1000000.0f; // 1000000.0f; // - real qudricLimitD = quadricLimiters[2]; //0.01f; // * 0.001f; // 1000000.0f; // 1000000.0f; // - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; //set the bulk viscosity one is high / two is very low and zero is (too) high ... (also called omega 2) - - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - real OxyyPxzz = c8o1*(-c2o1 + omega)*(c1o1 + c2o1*omega) / (-c8o1 - c14o1*omega + c7o1*omega*omega);//one; - real OxyyMxzz = c8o1*(-c2o1 + omega)*(-c7o1 + c4o1*omega) / (c56o1 - c50o1*omega + c9o1*omega*omega);//one; - real Oxyz = c24o1*(-c2o1 + omega)*(-c2o1 - c7o1*omega + c3o1*omega*omega) / (c48o1 + c152o1*omega - c130o1*omega*omega + c29o1*omega*omega*omega);//one; - //////////////////////////////////////////////////////////// - //4. - ////////////////////////////// - real O4 = c1o1; - ////////////////////////////// - //real O4 = omega;//TRT - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = c1o1; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = c1o1; - //////////////////////////////////////////////////////////// - - - //central moments to cumulants - //4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - //////////////////////////////////////////////////////////////////////////// - real Dxy = -c3o1*omega*mfbba; - real Dxz = -c3o1*omega*mfbab; - real Dyz = -c3o1*omega*mfabb; - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - mgabb = dxux; - mgbab = dyuy; - mgbba = dzuz; - - mgcbb = dxux; - mgbcb = dyuy; - mgbbc = dzuz; - - //relax - //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - //mxxMyy += omega * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - //mxxMzz += omega * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz) - + (c6o1 - c3o1 * (omega + OxxPyyPzz) + omega * OxxPyyPzz) / (c3o1 * omega) * ((dxux * dxux + dyuy * dyuy + dzuz * dzuz) / rho + vvx * dxxux + vvy * dyyuy + vvz * dzzuz); - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy) - + omega * (c2o1*(c1o1 / omega - c1o2) * (c1o1 / omega - c1o2) - c1o6) * ((dxux * dxux - dyuy * dyuy) / rho + vvx * dxxux - vvy * dyyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz) - + omega * (c2o1*(c1o1 / omega - c1o2) * (c1o1 / omega - c1o2) - c1o6) * ((dxux * dxux - dzuz * dzuz) / rho + vvx * dxxux - vvz * dzzuz); - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - - //relax - ////////////////////////////////////////////////////////////////////////// - //das ist der limiter - wadjust = Oxyz + (c1o1 - Oxyz)*abs(mfbbb) / (abs(mfbbb) + qudricLimitD); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimitP); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimitM); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimitP); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimitM); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimitP); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimitM); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //mfbbb += OxyyMxzz * (-mfbbb); - //mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - //mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - //mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - //mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - //mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - //mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - //mit limiter - // wadjust = O4+(one-O4)*abs(CUMacc)/(abs(CUMacc)+qudricLimit); - //CUMacc += wadjust * (-CUMacc); - // wadjust = O4+(one-O4)*abs(CUMcac)/(abs(CUMcac)+qudricLimit); - //CUMcac += wadjust * (-CUMcac); - // wadjust = O4+(one-O4)*abs(CUMcca)/(abs(CUMcca)+qudricLimit); - //CUMcca += wadjust * (-CUMcca); - - // wadjust = O4+(one-O4)*abs(CUMbbc)/(abs(CUMbbc)+qudricLimit); - //CUMbbc += wadjust * (-CUMbbc); - // wadjust = O4+(one-O4)*abs(CUMbcb)/(abs(CUMbcb)+qudricLimit); - //CUMbcb += wadjust * (-CUMbcb); - // wadjust = O4+(one-O4)*abs(CUMcbb)/(abs(CUMcbb)+qudricLimit); - //CUMcbb += wadjust * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //CUMacc += O4 * (-CUMacc); - //CUMcac += O4 * (-CUMcac); - //CUMcca += O4 * (-CUMcca); - //CUMbbc += O4 * (-CUMbbc); - //CUMbcb += O4 * (-CUMbcb); - //CUMcbb += O4 * (-CUMcbb); - CUMacc = -O4*(c1o1 / omega - c1o2)*(dyuy + dzuz)*c2o3 *(c4o1 + c2o1*omega - c3o1*omega*omega) / (c2o1 - c7o1*omega + c5o1*omega*omega) + (c1o1 - O4) * (CUMacc); - CUMcac = -O4*(c1o1 / omega - c1o2)*(dxux + dzuz)*c2o3 *(c4o1 + c2o1*omega - c3o1*omega*omega) / (c2o1 - c7o1*omega + c5o1*omega*omega) + (c1o1 - O4) * (CUMcac); - CUMcca = -O4*(c1o1 / omega - c1o2)*(dyuy + dxux)*c2o3 *(c4o1 + c2o1*omega - c3o1*omega*omega) / (c2o1 - c7o1*omega + c5o1*omega*omega) + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4*(c1o1 / omega - c1o2)*Dxy*c1o3 *(c4o1 + c28o1*omega - c14o1*omega*omega) / (c6o1 - c21o1*omega + c15o1*omega*omega) + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4*(c1o1 / omega - c1o2)*Dxz*c1o3 *(c4o1 + c28o1*omega - c14o1*omega*omega) / (c6o1 - c21o1*omega + c15o1*omega*omega) + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4*(c1o1 / omega - c1o2)*Dyz*c1o3 *(c4o1 + c28o1*omega - c14o1*omega*omega) / (c6o1 - c21o1*omega + c15o1*omega*omega) + (c1o1 - O4) * (CUMcbb); - ////////////////////////////////////////////////////////////////////////// - - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb; - (D.f[DIR_M00])[kw] = mfcbb; - (D.f[DIR_0P0])[k] = mfbab; - (D.f[DIR_0M0])[ks] = mfbcb; - (D.f[DIR_00P])[k] = mfbba; - (D.f[DIR_00M])[kb] = mfbbc; - (D.f[DIR_PP0])[k] = mfaab; - (D.f[DIR_MM0])[ksw] = mfccb; - (D.f[DIR_PM0])[ks] = mfacb; - (D.f[DIR_MP0])[kw] = mfcab; - (D.f[DIR_P0P])[k] = mfaba; - (D.f[DIR_M0M])[kbw] = mfcbc; - (D.f[DIR_P0M])[kb] = mfabc; - (D.f[DIR_M0P])[kw] = mfcba; - (D.f[DIR_0PP])[k] = mfbaa; - (D.f[DIR_0MM])[kbs] = mfbcc; - (D.f[DIR_0PM])[kb] = mfbac; - (D.f[DIR_0MP])[ks] = mfbca; - (D.f[DIR_000])[k] = mfbbb; - (D.f[DIR_PPP])[k] = mfaaa; - (D.f[DIR_PMP])[ks] = mfaca; - (D.f[DIR_PPM])[kb] = mfaac; - (D.f[DIR_PMM])[kbs] = mfacc; - (D.f[DIR_MPP])[kw] = mfcaa; - (D.f[DIR_MMP])[ksw] = mfcca; - (D.f[DIR_MPM])[kbw] = mfcac; - (D.f[DIR_MMM])[kbsw] = mfccc; - //////////////////////////////////////////////////////////////////////////////////// - - (G.g[DIR_P00])[k] = mgabb; - (G.g[DIR_M00])[kw] = mgcbb; - (G.g[DIR_0P0])[k] = mgbab; - (G.g[DIR_0M0])[ks] = mgbcb; - (G.g[DIR_00P])[k] = mgbba; - (G.g[DIR_00M])[kb] = mgbbc; - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes_Device.cuh deleted file mode 100644 index 601071a73c8ea2e0e9d3d0e1b3ba69f921fd821d..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes_Device.cuh +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef K18CompressibleNavierStokes_Device_H -#define K18CompressibleNavierStokes_Device_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void K18CompressibleNavierStokes_Device( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - real* F3, - int size_Mat, - int level, - real* forces, - real* quadricLimiters, - bool EvenOrOdd); - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes.cu deleted file mode 100644 index 1a07b5a09614e38bd589b3f02d70b831d73b587e..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes.cu +++ /dev/null @@ -1,41 +0,0 @@ -#include "K20CompressibleNavierStokes.h" - -#include "K20CompressibleNavierStokes_Device.cuh" -#include "Parameter/Parameter.h" -#include <cuda_helper/CudaGrid.h> - -std::shared_ptr<K20CompressibleNavierStokes> K20CompressibleNavierStokes::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<K20CompressibleNavierStokes>(new K20CompressibleNavierStokes(para, level)); -} - -void K20CompressibleNavierStokes::run() -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); - - K20CompressibleNavierStokes_Device <<< grid.grid, grid.threads >>>( - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->g6.g[0], - para->getParD(level)->numberOfNodes, - level, - para->getForcesDev(), - para->getQuadricLimitersDev(), - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_Kernel_CumulantK20Comp execution failed"); -} - -K20CompressibleNavierStokes::K20CompressibleNavierStokes(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitCompSP27); - myPreProcessorTypes.push_back(InitF3); - - -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes.h b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes.h deleted file mode 100644 index fc6d4e72acf330a482e80c145a669bda74c0dd8a..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef K20CompressibleNavierStokes_H -#define K20CompressibleNavierStokes_H - -#include "Kernel/KernelImp.h" - -class K20CompressibleNavierStokes : public KernelImp -{ -public: - static std::shared_ptr< K20CompressibleNavierStokes> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - K20CompressibleNavierStokes(); - K20CompressibleNavierStokes(std::shared_ptr< Parameter> para, int level); -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes_Device.cu deleted file mode 100644 index d722baa512dea2d7cc01ebf4f986f3239345fb40..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes_Device.cu +++ /dev/null @@ -1,959 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void K20CompressibleNavierStokes_Device( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - real* G6, - int size_Mat, - int level, - real* forces, - real* quadricLimiters, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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 < size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if ((BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; - } - - Distributions6 G; - if (EvenOrOdd == true) - { - G.g[DIR_P00] = &G6[DIR_P00 * size_Mat]; - G.g[DIR_M00] = &G6[DIR_M00 * size_Mat]; - G.g[DIR_0P0] = &G6[DIR_0P0 * size_Mat]; - G.g[DIR_0M0] = &G6[DIR_0M0 * size_Mat]; - G.g[DIR_00P] = &G6[DIR_00P * size_Mat]; - G.g[DIR_00M] = &G6[DIR_00M * size_Mat]; - } - else - { - G.g[DIR_M00] = &G6[DIR_P00 * size_Mat]; - G.g[DIR_P00] = &G6[DIR_M00 * size_Mat]; - G.g[DIR_0M0] = &G6[DIR_0P0 * size_Mat]; - G.g[DIR_0P0] = &G6[DIR_0M0 * size_Mat]; - G.g[DIR_00M] = &G6[DIR_00P * size_Mat]; - G.g[DIR_00P] = &G6[DIR_00M * size_Mat]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mgcbb = (G.g[DIR_P00])[k]; - real mgabb = (G.g[DIR_M00])[kw]; - real mgbcb = (G.g[DIR_0P0])[k]; - real mgbab = (G.g[DIR_0M0])[ks]; - real mgbbc = (G.g[DIR_00P])[k]; - real mgbba = (G.g[DIR_00M])[kb]; - real dxuxdxux = c1o2 * (-mgcbb + mgabb); - real dyuydyuy = c1o2 * (-mgbcb + mgbab); - real dzuzdzuz = c1o2 * (-mgbbc + mgbba); - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k]; - real mfabb = (D.f[DIR_M00])[kw]; - real mfbcb = (D.f[DIR_0P0])[k]; - real mfbab = (D.f[DIR_0M0])[ks]; - real mfbbc = (D.f[DIR_00P])[k]; - real mfbba = (D.f[DIR_00M])[kb]; - real mfccb = (D.f[DIR_PP0])[k]; - real mfaab = (D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks]; - real mfacb = (D.f[DIR_MP0])[kw]; - real mfcbc = (D.f[DIR_P0P])[k]; - real mfaba = (D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb]; - real mfabc = (D.f[DIR_M0P])[kw]; - real mfbcc = (D.f[DIR_0PP])[k]; - real mfbaa = (D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb]; - real mfbac = (D.f[DIR_0MP])[ks]; - real mfbbb = (D.f[DIR_000])[k]; - real mfccc = (D.f[DIR_PPP])[k]; - real mfaac = (D.f[DIR_MMP])[ksw]; - real mfcac = (D.f[DIR_PMP])[ks]; - real mfacc = (D.f[DIR_MPP])[kw]; - real mfcca = (D.f[DIR_PPM])[kb]; - real mfaaa = (D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs]; - real mfaca = (D.f[DIR_MPM])[kbw]; - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - - real rho = c1o1 + drho; - //////////////////////////////////////////////////////////////////////////////////// - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) / rho; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) / rho; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - real fx = forces[0] / (pow((double)c2o1, (double)level)); //zero;//0.0032653/(pow(two,level)); //0.000000005;//(two/1600000.0) / 120.0; // - real fy = forces[1] / (pow((double)c2o1, (double)level)); //zero; - real fz = forces[2] / (pow((double)c2o1, (double)level)); //zero; - vvx += fx; - vvy += fy; - vvz += fz; - //////////////////////////////////////////////////////////////////////////////////// - real oMdrho = c1o1; // comp special - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimitP = quadricLimiters[0]; //0.01f; // * 0.0001f; // 1000000.0f; // 1000000.0f; // - real qudricLimitM = quadricLimiters[1]; //0.01f; // * 0.0001f; // 1000000.0f; // 1000000.0f; // - real qudricLimitD = quadricLimiters[2]; //0.01f; // * 0.001f; // 1000000.0f; // 1000000.0f; // - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; //set the bulk viscosity one is high / two is very low and zero is (too) high ... (also called omega 2) - - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - //real OxyyPxzz = one; - //real OxyyMxzz = one; - //real Oxyz = one; - //////////////////////////////////////////////////////////// - real OxyyPxzz = c8o1*(-c2o1 + omega)*(c1o1 + c2o1*omega) / (-c8o1 - c14o1*omega + c7o1*omega*omega);//one; - real OxyyMxzz = c8o1*(-c2o1 + omega)*(-c7o1 + c4o1*omega) / (c56o1 - c50o1*omega + c9o1*omega*omega);//one; - real Oxyz = c24o1*(-c2o1 + omega)*(-c2o1 - c7o1*omega + c3o1*omega*omega) / (c48o1 + c152o1*omega - c130o1*omega*omega + c29o1*omega*omega*omega);//one; - //4. - ////////////////////////////// - real O4 = c1o1; - ////////////////////////////// - //real O4 = omega;//TRT - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = c1o1; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = c1o1; - //////////////////////////////////////////////////////////// - - - //central moments to cumulants - //4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - //////////////////////////////////////////////////////////////////////////// - real Dxy = -c3o1*omega*mfbba; - real Dxz = -c3o1*omega*mfbab; - real Dyz = -c3o1*omega*mfabb; - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - mgabb = vvx*dxux; - mgbab = vvy*dyuy; - mgbba = vvz*dzuz; - - mgcbb = vvx*dxux; - mgbcb = vvy*dyuy; - mgbbc = vvz*dzuz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz) - + (c6o1 - c3o1 * (omega + OxxPyyPzz) + omega * OxxPyyPzz) / (c3o1 * omega) * - (dxuxdxux + dyuydyuy + dzuzdzuz); - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy) - + omega * (c2o1*(c1o1 / omega - c1o2) * (c1o1 / omega - c1o2) - c1o6) * (dxuxdxux - dyuydyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz) - + omega * (c2o1*(c1o1 / omega - c1o2) * (c1o1 / omega - c1o2) - c1o6) *(dxuxdxux - dzuzdzuz); - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - - //relax - ////////////////////////////////////////////////////////////////////////// - //das ist der limiter - wadjust = Oxyz + (c1o1 - Oxyz)*abs(mfbbb) / (abs(mfbbb) + qudricLimitD); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimitP); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimitM); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimitP); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimitM); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimitP); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimitM); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //mfbbb += OxyyMxzz * (-mfbbb); - //mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - //mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - //mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - //mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - //mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - //mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - //mit limiter - // wadjust = O4+(one-O4)*abs(CUMacc)/(abs(CUMacc)+qudricLimit); - //CUMacc += wadjust * (-CUMacc); - // wadjust = O4+(one-O4)*abs(CUMcac)/(abs(CUMcac)+qudricLimit); - //CUMcac += wadjust * (-CUMcac); - // wadjust = O4+(one-O4)*abs(CUMcca)/(abs(CUMcca)+qudricLimit); - //CUMcca += wadjust * (-CUMcca); - - // wadjust = O4+(one-O4)*abs(CUMbbc)/(abs(CUMbbc)+qudricLimit); - //CUMbbc += wadjust * (-CUMbbc); - // wadjust = O4+(one-O4)*abs(CUMbcb)/(abs(CUMbcb)+qudricLimit); - //CUMbcb += wadjust * (-CUMbcb); - // wadjust = O4+(one-O4)*abs(CUMcbb)/(abs(CUMcbb)+qudricLimit); - //CUMcbb += wadjust * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //CUMacc += O4 * (-CUMacc); - //CUMcac += O4 * (-CUMcac); - //CUMcca += O4 * (-CUMcca); - //CUMbbc += O4 * (-CUMbbc); - //CUMbcb += O4 * (-CUMbcb); - //CUMcbb += O4 * (-CUMcbb); - - //Dxy = zero; - // Dxz = zero; - // Dyz = zero; - // dxux = zero; - // dyuy = zero; - // dzuz = zero; - CUMacc = -O4*(c1o1 / omega - c1o2)*(dyuy + dzuz)*c2o3 *(c4o1 + c2o1*omega - c3o1*omega*omega) / (c2o1 - c7o1*omega + c5o1*omega*omega) + (c1o1 - O4) * (CUMacc); - CUMcac = -O4*(c1o1 / omega - c1o2)*(dxux + dzuz)*c2o3 *(c4o1 + c2o1*omega - c3o1*omega*omega) / (c2o1 - c7o1*omega + c5o1*omega*omega) + (c1o1 - O4) * (CUMcac); - CUMcca = -O4*(c1o1 / omega - c1o2)*(dyuy + dxux)*c2o3 *(c4o1 + c2o1*omega - c3o1*omega*omega) / (c2o1 - c7o1*omega + c5o1*omega*omega) + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4*(c1o1 / omega - c1o2)*Dxy*c1o3 *(c4o1 + c28o1*omega - c14o1*omega*omega) / (c6o1 - c21o1*omega + c15o1*omega*omega) + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4*(c1o1 / omega - c1o2)*Dxz*c1o3 *(c4o1 + c28o1*omega - c14o1*omega*omega) / (c6o1 - c21o1*omega + c15o1*omega*omega) + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4*(c1o1 / omega - c1o2)*Dyz*c1o3 *(c4o1 + c28o1*omega - c14o1*omega*omega) / (c6o1 - c21o1*omega + c15o1*omega*omega) + (c1o1 - O4) * (CUMcbb); - ////////////////////////////////////////////////////////////////////////// - - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb; - (D.f[DIR_M00])[kw] = mfcbb; - (D.f[DIR_0P0])[k] = mfbab; - (D.f[DIR_0M0])[ks] = mfbcb; - (D.f[DIR_00P])[k] = mfbba; - (D.f[DIR_00M])[kb] = mfbbc; - (D.f[DIR_PP0])[k] = mfaab; - (D.f[DIR_MM0])[ksw] = mfccb; - (D.f[DIR_PM0])[ks] = mfacb; - (D.f[DIR_MP0])[kw] = mfcab; - (D.f[DIR_P0P])[k] = mfaba; - (D.f[DIR_M0M])[kbw] = mfcbc; - (D.f[DIR_P0M])[kb] = mfabc; - (D.f[DIR_M0P])[kw] = mfcba; - (D.f[DIR_0PP])[k] = mfbaa; - (D.f[DIR_0MM])[kbs] = mfbcc; - (D.f[DIR_0PM])[kb] = mfbac; - (D.f[DIR_0MP])[ks] = mfbca; - (D.f[DIR_000])[k] = mfbbb; - (D.f[DIR_PPP])[k] = mfaaa; - (D.f[DIR_PMP])[ks] = mfaca; - (D.f[DIR_PPM])[kb] = mfaac; - (D.f[DIR_PMM])[kbs] = mfacc; - (D.f[DIR_MPP])[kw] = mfcaa; - (D.f[DIR_MMP])[ksw] = mfcca; - (D.f[DIR_MPM])[kbw] = mfcac; - (D.f[DIR_MMM])[kbsw] = mfccc; - //////////////////////////////////////////////////////////////////////////////////// - - (G.g[DIR_P00])[k] = mgabb; - (G.g[DIR_M00])[kw] = mgcbb; - (G.g[DIR_0P0])[k] = mgbab; - (G.g[DIR_0M0])[ks] = mgbcb; - (G.g[DIR_00P])[k] = mgbba; - (G.g[DIR_00M])[kb] = mgbbc; - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes_Device.cuh deleted file mode 100644 index b86fc38428b964304772cf283b310d6056be2682..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes_Device.cuh +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef K20CompressibleNavierStokes_Device_H -#define K20CompressibleNavierStokes_Device_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void K20CompressibleNavierStokes_Device( real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - real* F3, - int size_Mat, - int level, - real* forces, - real* quadricLimiters, - bool EvenOrOdd); - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes.cu deleted file mode 100644 index ffba813e2626c61323c13a5d4ac74d331e6e6c78..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes.cu +++ /dev/null @@ -1,39 +0,0 @@ -#include "M02CompressibleNavierStokes.h" - -#include "M02CompressibleNavierStokes_Device.cuh" -#include "Parameter/Parameter.h" -#include <cuda_helper/CudaGrid.h> - -std::shared_ptr<M02CompressibleNavierStokes> M02CompressibleNavierStokes::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<M02CompressibleNavierStokes>(new M02CompressibleNavierStokes(para, level)); -} - -void M02CompressibleNavierStokes::run() -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); - - M02CompressibleNavierStokes_Device <<< grid.grid, grid.threads >>>( - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->numberOfNodes, - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_Kernel_MRT_Comp_SP_27 execution failed"); -} - -M02CompressibleNavierStokes::M02CompressibleNavierStokes(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitCompSP27); - -} - -M02CompressibleNavierStokes::M02CompressibleNavierStokes() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes.h b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes.h deleted file mode 100644 index b18eb3dfb7f144e664d9dd2236b5a76a1c63dfa2..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef M02CompressibleNavierStokes_H -#define M02CompressibleNavierStokes_H - -#include "Kernel/KernelImp.h" - - -class M02CompressibleNavierStokes : public KernelImp -{ -public: - static std::shared_ptr<M02CompressibleNavierStokes> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - M02CompressibleNavierStokes(); - M02CompressibleNavierStokes(std::shared_ptr< Parameter> para, int level); -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes_Device.cu deleted file mode 100644 index ae0f67fdb44884ffbcdf555fd48b275b64499c85..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes_Device.cu +++ /dev/null @@ -1,772 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void M02CompressibleNavierStokes_Device(real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - int size_Mat, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if ((BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke - real mfabb = (D.f[DIR_M00])[kw];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn - real mfbab = (D.f[DIR_0M0])[ks];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt - real mfbba = (D.f[DIR_00M])[kb];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse - real mfacb = (D.f[DIR_MP0])[kw];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw - real mfcbc = (D.f[DIR_P0P])[k];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe - real mfabc = (D.f[DIR_M0P])[kw];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw - real mfbcc = (D.f[DIR_0PP])[k];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn - real mfbac = (D.f[DIR_0MP])[ks];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts - real mfbbb = (D.f[DIR_000])[k];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero - real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw - real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse - real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw - real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////////// - real rho = (mfccc + mfaaa + mfaca + mfcac + mfacc + mfcaa + mfaac + mfcca + - mfbac + mfbca + mfbaa + mfbcc + mfabc + mfcba + mfaba + mfcbc + mfacb + mfcab + mfaab + mfccb + - mfabb + mfcbb + mfbab + mfbcb + mfbba + mfbbc + mfbbb) + c1o1;// !!!Achtung + one - //////////////////////////////////////////////////////////////////////////////////// - //slow - //real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + - // (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + - // ((mfabb+mfcbb) + (mfbab+mfbcb) + (mfbba+mfbbc)));//fehlt mfbbb - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) / rho; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) / rho; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - //fast - real oMdrho = c1o1; // comp special - //real oMdrho = one - (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + - // mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb + - // mfabb+mfcbb + mfbab+mfbcb + mfbba+mfbbc + mfbbb);//fehlt mfbbb nicht mehr - //real vvx =mfccc-mfaaa + mfcac-mfaca + mfcaa-mfacc + mfcca-mfaac + - // mfcba-mfabc + mfcbc-mfaba + mfcab-mfacb + mfccb-mfaab + - // mfcbb-mfabb; - //real vvy =mfccc-mfaaa + mfaca-mfcac + mfacc-mfcaa + mfcca-mfaac + - // mfbca-mfbac + mfbcc-mfbaa + mfacb-mfcab + mfccb-mfaab + - // mfbcb-mfbab; - //real vvz =mfccc-mfaaa + mfcac-mfaca + mfacc-mfcaa + mfaac-mfcca + - // mfbac-mfbca + mfbcc-mfbaa + mfabc-mfcba + mfcbc-mfaba + - // mfbbc-mfbba; - //////////////////////////////////////////////////////////////////////////////////// - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - //real wadjust; - //real qudricLimit = 0.01f; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1; - mfbac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1; - mfbbc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1; - mfcac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1; - mfcbc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1; - mfbca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1; - mfcab = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1; - mfcac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // MRT - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; - real OxyyPxzz = c1o1;//two-omega;//eight*(two-omega)/(eight -omega);//one;//omega;//two-omega;// - real OxyyMxzz = c1o1;//omega;//one;//eight*(two-omega)/(eight -omega);//one;//two-omega;//one;// - real O4 = c1o1; - real O5 = c1o1; - real O6 = c1o1; - - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction - { - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz + (-c2o1*vx2 + vy2 + vz2)*rho) + c1o2 * OxxPyyPzz * (mfaaa + (vx2 + vy2 + vz2)*rho - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * (mxxMyy + (-vx2 + vy2)*rho); - real dzuz = dxux + omega * c3o2 * (mxxMzz + (-vx2 + vz2)*rho); - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa + (vx2 + vy2 + vz2)*rho - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += omega * ((vx2 - vy2)*rho - mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * ((vx2 - vz2)*rho - mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - } - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // //no correction - // mxxPyyPzz += OxxPyyPzz*(mfaaa+(vx2+vy2+vz2)*rho-mxxPyyPzz); - // mxxMyy += -(-omega) * ((vx2-vy2)*rho-mxxMyy); - // mxxMzz += -(-omega) * ((vx2-vz2)*rho-mxxMzz); - // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * ((vvy*vvz)*rho - mfabb); - mfbab += omega * ((vvx*vvz)*rho - mfbab); - mfbba += omega * ((vvx*vvy)*rho - mfbba); - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - mxxyMyzz += OxyyMxzz*((vx2 - vz2)*vvy*rho - mxxyMyzz); - mxxzMyyz += OxyyMxzz*((vx2 - vy2)*vvz*rho - mxxzMyyz); - mxyyMxzz += OxyyMxzz*((vy2 - vz2)*vvx*rho - mxyyMxzz); - - mxxyPyzz += OxyyPxzz*((c2o3 + vx2 + vz2)*vvy*rho - mxxyPyzz); - mxxzPyyz += OxyyPxzz*((c2o3 + vx2 + vy2)*vvz*rho - mxxzPyyz); - mxyyPxzz += OxyyPxzz*((c2o3 + vy2 + vz2)*vvx*rho - mxyyPxzz); - - mfbbb += OxyyMxzz * (vvx*vvy*vvz*rho - mfbbb); - - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - //mfacc += O4*((c1o3+vy2)*(c1o3+vz2)*rho+c1o9*(mfaaa-one)-mfacc); - //mfcac += O4*((c1o3+vx2)*(c1o3+vz2)*rho+c1o9*(mfaaa-one)-mfcac); - //mfcca += O4*((c1o3+vx2)*(c1o3+vy2)*rho+c1o9*(mfaaa-one)-mfcca); - mfacc += O4*((c1o3 + vy2)*(c1o3 + vz2)*rho - c1o9 - mfacc); - mfcac += O4*((c1o3 + vx2)*(c1o3 + vz2)*rho - c1o9 - mfcac); - mfcca += O4*((c1o3 + vx2)*(c1o3 + vy2)*rho - c1o9 - mfcca); - - mfcbb += O4*((c1o3 + vx2)*vvy*vvz*rho - mfcbb); - mfbcb += O4*((c1o3 + vy2)*vvx*vvz*rho - mfbcb); - mfbbc += O4*((c1o3 + vz2)*vvx*vvy*rho - mfbbc); - - //5. - mfbcc += O5*((c1o3 + vy2)*(c1o3 + vz2)*vvx*rho - mfbcc); - mfcbc += O5*((c1o3 + vx2)*(c1o3 + vz2)*vvy*rho - mfcbc); - mfccb += O5*((c1o3 + vx2)*(c1o3 + vy2)*vvz*rho - mfccb); - - //6. - mfccc += O6*((c1o3 + vx2)*(c1o3 + vy2)*(c1o3 + vz2)*rho - c1o27 - mfccc); - - - //bad fix - vvx = c0o1; - vvy = c0o1; - vvz = c0o1; - vx2 = c0o1; - vy2 = c0o1; - vz2 = c0o1; - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] - (D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] - (D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] - (D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] - (D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] - (D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] - (D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] - (D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] - (D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] - (D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] - (D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] - (D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] - (D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] - (D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] - (D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] - (D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] - (D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] - (D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] - (D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] - (D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] - (D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] - (D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] - (D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] - (D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] - (D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] - (D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] - (D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] - //////////////////////////////////////////////////////////////////////////////////// - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes_Device.cuh deleted file mode 100644 index 06542a20c7c40367195fda9bdb3acac339e62f0e..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes_Device.cuh +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef M02CompressibleNavierStokes_Device_H -#define M02CompressibleNavierStokes_Device_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void M02CompressibleNavierStokes_Device(real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - int size_Mat, - bool EvenOrOdd); - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/RunLBMKernel.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/RunLBMKernel.cuh deleted file mode 100644 index 3be594e3e39a57cd71741cd060e9dddda15d6035..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/RunLBMKernel.cuh +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef GPU_CUMULANT_KERNEL_H -#define GPU_CUMULANT_KERNEL_H - - -#include <DataTypes.h> -#include <cuda_runtime.h> - -#include "lbm/KernelParameter.h" - -#include "Kernel/Utilities/DistributionHelper.cuh" - -namespace vf -{ -namespace gpu -{ - - -struct GPUKernelParameter -{ - real omega; - unsigned int* typeOfGridNode; - unsigned int* neighborX; - unsigned int* neighborY; - unsigned int* neighborZ; - real* distributions; - int numberOfLBnodes; - real* forces; - bool isEvenTimestep; -}; - -template<typename KernelFunctor> -__global__ void runKernel(KernelFunctor kernel, GPUKernelParameter kernelParameter) -{ - //////////////////////////////////////////////////////////////////////////////// - //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. - //! - const unsigned nodeIndex = getNodeIndex(); - - if(nodeIndex >= kernelParameter.numberOfLBnodes) - return; - - if (!isValidFluidNode(kernelParameter.typeOfGridNode[nodeIndex])) - return; - - DistributionWrapper distributionWrapper { - kernelParameter.distributions, - (unsigned int)kernelParameter.numberOfLBnodes, - kernelParameter.isEvenTimestep, - nodeIndex, - kernelParameter.neighborX, - kernelParameter.neighborY, - kernelParameter.neighborZ - }; - - lbm::KernelParameter parameter {distributionWrapper.distribution, kernelParameter.omega, kernelParameter.forces}; - kernel(parameter); - - distributionWrapper.write(); -} - -} -} - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/C06IncompressibleNavierStokes.cu b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/C06IncompressibleNavierStokes.cu deleted file mode 100644 index 16f6ffd99e8e7b68b954976fd79f0f2aeb7370b9..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/C06IncompressibleNavierStokes.cu +++ /dev/null @@ -1,40 +0,0 @@ -#include "C06IncompressibleNavierStokes.h" - -#include "CascadeIncompSP27_Device.cuh" -#include "Parameter/Parameter.h" -#include <cuda_helper/CudaGrid.h> - -std::shared_ptr<C06IncompressibleNavierStokes> C06IncompressibleNavierStokes::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<C06IncompressibleNavierStokes>(new C06IncompressibleNavierStokes(para, level)); -} - -void C06IncompressibleNavierStokes::run() -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); - - C06IncompressibleNavierStokes_Device <<< grid.grid, grid.threads >>>( - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->numberOfNodes, - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_Kernel_Cascade_Incomp_SP_27 execution failed"); -} - -C06IncompressibleNavierStokes::C06IncompressibleNavierStokes(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitSP27); - - -} - -C06IncompressibleNavierStokes::C06IncompressibleNavierStokes() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/C06IncompressibleNavierStokes.h b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/C06IncompressibleNavierStokes.h deleted file mode 100644 index 292b37ee75e1f8098845888776089d448e133332..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/C06IncompressibleNavierStokes.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef C06IncompressibleNavierStokes_H -#define C06IncompressibleNavierStokes_H - -#include "Kernel/KernelImp.h" - -class C06IncompressibleNavierStokes : public KernelImp -{ -public: - static std::shared_ptr<C06IncompressibleNavierStokes> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - C06IncompressibleNavierStokes(); - C06IncompressibleNavierStokes(std::shared_ptr< Parameter> para, int level); - -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/CascadeIncompSP27_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/CascadeIncompSP27_Device.cu deleted file mode 100644 index 3f51dd4044887803a1b6b5f2470639ce4537b8d2..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/CascadeIncompSP27_Device.cu +++ /dev/null @@ -1,762 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void C06IncompressibleNavierStokes_Device( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - int size_Mat, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if ((BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke - real mfabb = (D.f[DIR_M00])[kw];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn - real mfbab = (D.f[DIR_0M0])[ks];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt - real mfbba = (D.f[DIR_00M])[kb];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse - real mfacb = (D.f[DIR_MP0])[kw];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw - real mfcbc = (D.f[DIR_P0P])[k];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe - real mfabc = (D.f[DIR_M0P])[kw];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw - real mfbcc = (D.f[DIR_0PP])[k];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn - real mfbac = (D.f[DIR_0MP])[ks];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts - real mfbbb = (D.f[DIR_000])[k];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero - real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw - real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse - real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw - real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////////// - //slow - //real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + - // (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + - // ((mfabb+mfcbb) + (mfbab+mfbcb) + (mfbba+mfbbc)));//fehlt mfbbb - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - //////////////////////////////////////////////////////////////////////////////////// - //fast - real oMdrho = c1o1 - (mfccc + mfaaa + mfaca + mfcac + mfacc + mfcaa + mfaac + mfcca + - mfbac + mfbca + mfbaa + mfbcc + mfabc + mfcba + mfaba + mfcbc + mfacb + mfcab + mfaab + mfccb + - mfabb + mfcbb + mfbab + mfbcb + mfbba + mfbbc + mfbbb);//fehlt mfbbb nicht mehr - //////////////////////////////////////////////////////////////////////////////////// - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = 0.01f; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - - - //////////////////////////////////////////////////////////////////////////////////// - // Cascade - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = omega; - real OxyyPxzz = c1o1;//two-omega;//eight*(two-omega)/(eight -omega);//one;//omega;//two-omega;// - real OxyyMxzz = c1o1;//omega;//one;//eight*(two-omega)/(eight -omega);//one;//two-omega;//one;// - real O4 = c1o1; - real O5 = c1o1; - real O6 = c1o1; - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction - { - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - } - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // //no correction - // mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz); - // mxxMyy += -(-omega) * (-mxxMyy); - // mxxMzz += -(-omega) * (-mxxMzz); - // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mfbbb) / (abs(mfbbb) + qudricLimit); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimit); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimit); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimit); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimit); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimit); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimit); - mxyyMxzz += wadjust * (-mxyyMxzz); - - // linear combinations back - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - mfacc = mfaaa * c1o9 * O4 + (c1o1 - O4) * mfacc; - mfcac = mfaaa * c1o9 * O4 + (c1o1 - O4) * mfcac; - mfcca = mfaaa * c1o9 * O4 + (c1o1 - O4) * mfcca; - - mfbbc += O4 * (-mfbbc); - mfbcb += O4 * (-mfbcb); - mfcbb += O4 * (-mfcbb); - - //5. - mfbcc += O5 * (-mfbcc); - mfcbc += O5 * (-mfcbc); - mfccb += O5 * (-mfccb); - - //6. - mfccc = mfaaa * c1o27 * O6 + (c1o1 - O6) * mfccc; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] - (D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] - (D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] - (D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] - (D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] - (D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] - (D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] - (D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] - (D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] - (D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] - (D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] - (D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] - (D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] - (D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] - (D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] - (D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] - (D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] - (D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] - (D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] - (D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] - (D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] - (D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] - (D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] - (D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] - (D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] - (D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] - (D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] - //////////////////////////////////////////////////////////////////////////////////// - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/CascadeIncompSP27_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/CascadeIncompSP27_Device.cuh deleted file mode 100644 index daebc3345411812700a8776da1b1f5917dff2f59..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/C06/CascadeIncompSP27_Device.cuh +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef C06IncompressibleNavierStokes_Device_H -#define C06IncompressibleNavierStokes_Device_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void C06IncompressibleNavierStokes_Device( - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - int size_Mat, - bool EvenOrOdd); - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/FluidFlowIncompStrategy.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/FluidFlowIncompStrategy.cpp deleted file mode 100644 index 2da393a2d71cfcfe78ab2c3eef3c6989f584335d..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/FluidFlowIncompStrategy.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include "FluidFlowIncompStrategy.h" - -#include "Parameter/Parameter.h" - -std::shared_ptr<FluidFlowIncompStrategy> FluidFlowIncompStrategy::getInstance() -{ - static std::shared_ptr<FluidFlowIncompStrategy> uniqueInstance; - if (!uniqueInstance) - uniqueInstance = std::shared_ptr<FluidFlowIncompStrategy>(new FluidFlowIncompStrategy()); - return uniqueInstance; -} - -bool FluidFlowIncompStrategy::checkParameter(std::shared_ptr<Parameter> para) -{ - if (para->getUseWale()) - return false; - else if (para->getCompOn()) - return false; - else - return true; -} - -FluidFlowIncompStrategy::FluidFlowIncompStrategy() { -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/FluidFlowIncompStrategy.h b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/FluidFlowIncompStrategy.h deleted file mode 100644 index fd578319e163fff08290d5bd5cd3caf859c094ce..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/FluidFlowIncompStrategy.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef FLUID_FLOW_INCOMP_STRATEGY_H -#define FLUID_FLOW_INCOMP_STRATEGY_H - -#include "Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h" - - -class FluidFlowIncompStrategy : public CheckParameterStrategy -{ -public: - static std::shared_ptr<FluidFlowIncompStrategy> getInstance(); - - bool checkParameter(std::shared_ptr<Parameter> para); - -private: - FluidFlowIncompStrategy(); - -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck.cu b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck.cu deleted file mode 100644 index 0db31e686cfce85c19ae5b4aa37fef71ecc6e354..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck.cu +++ /dev/null @@ -1,43 +0,0 @@ -#include "K15IncompressibleNavierStokesIsoCheck.h" - -#include "K15IncompressibleNavierStokesIsoCheck_Device.cuh" -#include "Parameter/Parameter.h" -#include <cuda_helper/CudaGrid.h> - -std::shared_ptr<K15IncompressibleNavierStokesIsoCheck> K15IncompressibleNavierStokesIsoCheck::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<K15IncompressibleNavierStokesIsoCheck>(new K15IncompressibleNavierStokesIsoCheck(para, level)); -} - -void K15IncompressibleNavierStokesIsoCheck::run() -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); - - K15IncompressibleNavierStokesIsoCheck_Device <<< grid.grid, grid.threads >>>( - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->dxxUx, - para->getParD(level)->dyyUy, - para->getParD(level)->dzzUz, - para->getParD(level)->numberOfNodes, - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_Kernel_Cum_IsoTest_Incomp_SP_27 execution failed"); -} - -K15IncompressibleNavierStokesIsoCheck::K15IncompressibleNavierStokesIsoCheck(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitSP27); - - -} - -K15IncompressibleNavierStokesIsoCheck::K15IncompressibleNavierStokesIsoCheck() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck.h b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck.h deleted file mode 100644 index c2871b389c421b191cb65b36fd8cab3c6c35cb2c..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef K15IncompressibleNavierStokesIsoCheck_H -#define K15IncompressibleNavierStokesIsoCheck_H - -#include "Kernel/KernelImp.h" - -class K15IncompressibleNavierStokesIsoCheck : public KernelImp -{ -public: - static std::shared_ptr<K15IncompressibleNavierStokesIsoCheck> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - K15IncompressibleNavierStokesIsoCheck(); - K15IncompressibleNavierStokesIsoCheck(std::shared_ptr< Parameter> para, int level); - -}; - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck_Device.cu deleted file mode 100644 index 6c91d9bfc4cf2c39b812a493986da29b45165407..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck_Device.cu +++ /dev/null @@ -1,1007 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void K15IncompressibleNavierStokesIsoCheck_Device( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - real* dxxUx, - real* dyyUy, - real* dzzUz, - int size_Mat, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if ((BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke - real mfabb = (D.f[DIR_M00])[kw];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn - real mfbab = (D.f[DIR_0M0])[ks];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt - real mfbba = (D.f[DIR_00M])[kb];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse - real mfacb = (D.f[DIR_MP0])[kw];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw - real mfcbc = (D.f[DIR_P0P])[k];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe - real mfabc = (D.f[DIR_M0P])[kw];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw - real mfbcc = (D.f[DIR_0PP])[k];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn - real mfbac = (D.f[DIR_0MP])[ks];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts - real mfbbb = (D.f[DIR_000])[k];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero - real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw - real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse - real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw - real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////////// - //slow - //real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + - // (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + - // ((mfabb+mfcbb) + (mfbab+mfbcb) + (mfbba+mfbbc)));//fehlt mfbbb - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - //////////////////////////////////////////////////////////////////////////////////// - //fast - real oMdrho = c1o1 - (mfccc + mfaaa + mfaca + mfcac + mfacc + mfcaa + mfaac + mfcca + - mfbac + mfbca + mfbaa + mfbcc + mfabc + mfcba + mfaba + mfcbc + mfacb + mfcab + mfaab + mfccb + - mfabb + mfcbb + mfbab + mfbcb + mfbba + mfbbc + mfbbb);//fehlt mfbbb nicht mehr - //real vvx =mfccc-mfaaa + mfcac-mfaca + mfcaa-mfacc + mfcca-mfaac + - // mfcba-mfabc + mfcbc-mfaba + mfcab-mfacb + mfccb-mfaab + - // mfcbb-mfabb; - //real vvy =mfccc-mfaaa + mfaca-mfcac + mfacc-mfcaa + mfcca-mfaac + - // mfbca-mfbac + mfbcc-mfbaa + mfacb-mfcab + mfccb-mfaab + - // mfbcb-mfbab; - //real vvz =mfccc-mfaaa + mfcac-mfaca + mfacc-mfcaa + mfaac-mfcca + - // mfbac-mfbca + mfbcc-mfbaa + mfabc-mfcba + mfcbc-mfaba + - // mfbbc-mfbba; - //////////////////////////////////////////////////////////////////////////////////// - // oMdrho assembler style -------> faaaaaastaaaa - // or much sloooowaaaa ... it dep�ndssssss on sadaku - real m0, m1, m2; - //real oMdrho; - //{ - // oMdrho=mfccc+mfaaa; - // m0=mfaca+mfcac; - // m1=mfacc+mfcaa; - // m2=mfaac+mfcca; - // oMdrho+=m0; - // m1+=m2; - // oMdrho+=m1; - // m0=mfbac+mfbca; - // m1=mfbaa+mfbcc; - // m0+=m1; - // m1=mfabc+mfcba; - // m2=mfaba+mfcbc; - // m1+=m2; - // m0+=m1; - // m1=mfacb+mfcab; - // m2=mfaab+mfccb; - // m1+=m2; - // m0+=m1; - // oMdrho+=m0; - // m0=mfabb+mfcbb; - // m1=mfbab+mfbcb; - // m2=mfbba+mfbbc; - // m0+=m1+m2; - // m0+=mfbbb; //hat gefehlt - // oMdrho = one - (oMdrho + m0); - //} - //real vvx; - real vx2; - //{ - // vvx = mfccc-mfaaa; - // m0 = mfcac-mfaca; - // m1 = mfcaa-mfacc; - // m2 = mfcca-mfaac; - // vvx+= m0; - // m1 += m2; - // vvx+= m1; - // vx2 = mfcba-mfabc; - // m0 = mfcbc-mfaba; - // m1 = mfcab-mfacb; - // m2 = mfccb-mfaab; - // vx2+= m0; - // m1 += m2; - // vx2+= m1; - // vvx+= vx2; - // vx2 = mfcbb-mfabb; - // vvx+= vx2; - //} - //real vvy; - real vy2; - //{ - // vvy = mfccc-mfaaa; - // m0 = mfaca-mfcac; - // m1 = mfacc-mfcaa; - // m2 = mfcca-mfaac; - // vvy+= m0; - // m1 += m2; - // vvy+= m1; - // vy2 = mfbca-mfbac; - // m0 = mfbcc-mfbaa; - // m1 = mfacb-mfcab; - // m2 = mfccb-mfaab; - // vy2+= m0; - // m1 += m2; - // vy2+= m1; - // vvy+= vy2; - // vy2 = mfbcb-mfbab; - // vvy+= vy2; - //} - //real vvz; - real vz2; - //{ - // vvz = mfccc-mfaaa; - // m0 = mfcac-mfaca; - // m1 = mfacc-mfcaa; - // m2 = mfaac-mfcca; - // vvz+= m0; - // m1 += m2; - // vvz+= m1; - // vz2 = mfbac-mfbca; - // m0 = mfbcc-mfbaa; - // m1 = mfabc-mfcba; - // m2 = mfcbc-mfaba; - // vz2+= m0; - // m1 += m2; - // vz2+= m1; - // vvz+= vz2; - // vz2 = mfbbc-mfbba; - // vvz+= vz2; - //} - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = 0.01f; - //real s9 = minusomega; - //test - //s9 = 0.; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // BGK - //////////////////////////////////////////////////////////////////////////////////// - ////2. - //mfabb += omega * (-mfabb); - //mfbab += omega * (-mfbab); - //mfbba += omega * (-mfbba); - // - //mfcaa += omega * (c1o3 * mfaaa - mfcaa); - //mfaca += omega * (c1o3 * mfaaa - mfaca); - //mfaac += omega * (c1o3 * mfaaa - mfaac); - // - ////3. - //mfabc += omega * (-mfabc); - //mfbac += omega * (-mfbac); - // - //mfacb += omega * (-mfacb); - //mfbca += omega * (-mfbca); - - //mfcab += omega * (-mfcab); - //mfcba += omega * (-mfcba); - - //mfbbb += omega * (-mfbbb); - - ////4. - //mfacc += omega * (c1o9 * mfaaa - mfacc); - //mfcac += omega * (c1o9 * mfaaa - mfcac); - //mfcca += omega * (c1o9 * mfaaa - mfcca); - - //mfbbc += omega * (-mfbbc); - //mfbcb += omega * (-mfbcb); - //mfcbb += omega * (-mfcbb); - - ////5. - //mfbcc += omega * (-mfbcc); - //mfcbc += omega * (-mfcbc); - //mfccb += omega * (-mfccb); - - ////6. - //mfccc += omega * (c1o27 * mfaaa - mfccc); - ////////////////////////////////////////////////////////////////////////////////////// - - - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; - real OxyyPxzz = c1o1;//two-omega;//eight*(two-omega)/(eight -omega);//one;//omega;//two-omega;// - real OxyyMxzz = c1o1;//omega;//one;//eight*(two-omega)/(eight -omega);//one;//two-omega;//one;// - real O4 = c1o1; - real O5 = c1o1; - real O6 = c1o1; - - //Cum 4. - real CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + c2o1 * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + c2o1 * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + c2o1 * mfbab * mfabb); - - real CUMcca = mfcca - (mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho - c1o1)*oMdrho; - real CUMcac = mfcac - (mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho - c1o1)*oMdrho; - real CUMacc = mfacc - (mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho - c1o1)*oMdrho; - - //Cum 5. - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; - - //Cum 6. - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) - - c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9*oMdrho*oMdrho - - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho*(c1o1 - c2o1* oMdrho) - c1o27* oMdrho * oMdrho*(-c2o1* oMdrho) - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) + c1o27*oMdrho; - - - - - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Iso Test Part 1 - real dxuydyux = -c3o1 * omega * mfbba; - real dxuzdzux = -c3o1 * omega * mfbab; - real dyuzdzuy = -c3o1 * omega * mfabb; - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - { - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - } - - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz); - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Iso Test Part 2 - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //precollision terms 3. moments - real premxxyPyzz = mxxyPyzz; - real premxxzPyyz = mxxzPyyz; - real premxyyPxzz = mxyyPxzz; - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - //relax - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mfbbb) / (abs(mfbbb) + qudricLimit); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimit); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimit); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimit); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimit); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimit); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimit); - mxyyMxzz += wadjust * (-mxyyMxzz); - - //// linear combinations back - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - - //5. - //CUMbcc += O5 * (-CUMbcc); - //CUMcbc += O5 * (-CUMcbc); - //CUMccb += O5 * (-CUMccb); - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Iso Test Part 3 - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //precollision terms 5. moments - real preCUMbcc = CUMbcc; - real preCUMcbc = CUMcbc; - real preCUMccb = CUMccb; - //new calculation of 5. moments - CUMbcc = c2o3 * (c1o1 - c1o2 * O5) * (vvy * dxuydyux + vvz * dxuzdzux) * c0o1 + (c1o1 - O5) * CUMbcc; - CUMcbc = c2o3 * (c1o1 - c1o2 * O5) * (vvx * dxuydyux + vvz * dyuzdzuy) * c0o1 + (c1o1 - O5) * CUMcbc; - CUMccb = c2o3 * (c1o1 - c1o2 * O5) * (vvx * dxuzdzux + vvy * dyuzdzuy) * c0o1 + (c1o1 - O5) * CUMccb; - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - //6. - //CUMccc += O6 * (-CUMccc); - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //Iso Test Part 4 - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //new calculation of 6. moment - CUMccc = O6 * c1o3 * (vx2 + vy2 + vz2) * c0o1 + (c1o1 - O6) * CUMccc; - // second derivation of ux, uy, uz - real dxxux = c3o1 * (c3o2 * (CUMbcc - preCUMbcc) - c0o1 * (mxyyPxzz - premxyyPxzz)); - real dyyuy = c3o1 * (c3o2 * (CUMcbc - preCUMcbc) - c0o1 * (mxxyPyzz - premxxyPyzz)); - real dzzuz = c3o1 * (c3o2 * (CUMccb - preCUMccb) - c0o1 * (mxxzPyyz - premxxzPyyz)); - // copy local values to global arrays for paraview files - dxxUx[k] = dxxux; - dyyUy[k] = dyyuy; - dzzUz[k] = dzzuz; - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + c2o1 * mfbba * mfbab); - mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + c2o1 * mfbba * mfabb); - mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + c2o1 * mfbab * mfabb); - - mfcca = CUMcca + (mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho - c1o1)*oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho - c1o1)*oMdrho; - mfacc = CUMacc + (mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho - c1o1)*oMdrho; - - //5. - mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho; - mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho; - mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho; - - //6. - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) - - c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9*oMdrho*oMdrho - - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho*(c1o1 - c2o1* oMdrho) - c1o27* oMdrho * oMdrho*(-c2o1* oMdrho) - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) - c1o27*oMdrho; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] - (D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] - (D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] - (D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] - (D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] - (D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] - (D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] - (D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] - (D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] - (D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] - (D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] - (D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] - (D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] - (D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] - (D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] - (D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] - (D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] - (D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] - (D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] - (D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] - (D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] - (D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] - (D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] - (D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] - (D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] - (D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] - (D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] - //////////////////////////////////////////////////////////////////////////////////// - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck_Device.cuh deleted file mode 100644 index b392245582cec7a098a9d7bf2583d75a578b6993..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck_Device.cuh +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef K15IncompressibleNavierStokesIsoCheck_Device_27 -#define K15IncompressibleNavierStokesIsoCheck_Device_27 - -#include <DataTypes.h> -#include <curand.h> - -__global__ void K15IncompressibleNavierStokesIsoCheck_Device( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - real* dxxUx, - real* dyyUy, - real* dzzUz, - int size_Mat, - bool EvenOrOdd); - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField.cu b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField.cu deleted file mode 100644 index 5e5f99045cdc6bdbe365a4624e73b05dc82c2438..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField.cu +++ /dev/null @@ -1,45 +0,0 @@ -#include "K15IncompressibleNavierStokesRotatingVelocityField.h" - -#include "K15IncompressibleNavierStokesRotatingVelocityField_Device.cuh" -#include "Parameter/Parameter.h" -#include "cuda_helper/CudaGrid.h" - -std::shared_ptr<K15IncompressibleNavierStokesRotatingVelocityField> K15IncompressibleNavierStokesRotatingVelocityField::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<K15IncompressibleNavierStokesRotatingVelocityField>(new K15IncompressibleNavierStokesRotatingVelocityField(para, level)); -} - -void K15IncompressibleNavierStokesRotatingVelocityField::run() -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); - - K15IncompressibleNavierStokesRotatingVelocityField_Device <<< grid.grid, grid.threads >>>( - para->getParD(level)->omega, - para->getParD(level)->deltaPhi, - para->getAngularVelocity(), - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->coordinateX, - para->getParD(level)->coordinateY, - para->getParD(level)->coordinateZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->numberOfNodes, - para->getParD(level)->isEvenTimestep); - getLastCudaError("K15IncompressibleNavierStokesRotatingVelocityField_Device execution failed"); -} - -K15IncompressibleNavierStokesRotatingVelocityField::K15IncompressibleNavierStokesRotatingVelocityField(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitSP27); - - -} - -K15IncompressibleNavierStokesRotatingVelocityField::K15IncompressibleNavierStokesRotatingVelocityField() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField.h b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField.h deleted file mode 100644 index 94858833254f2e2b40c0ae3ef00eaa0789ded88b..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef K15IncompressibleNavierStokesRotatingVelocityField_H -#define K15IncompressibleNavierStokesRotatingVelocityField_H - -#include "Kernel/KernelImp.h" - -class K15IncompressibleNavierStokesRotatingVelocityField : public KernelImp -{ -public: - static std::shared_ptr<K15IncompressibleNavierStokesRotatingVelocityField> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - K15IncompressibleNavierStokesRotatingVelocityField(); - K15IncompressibleNavierStokesRotatingVelocityField(std::shared_ptr< Parameter> para, int level); - -}; - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField_Device.cu deleted file mode 100644 index 082a5dc3882a498838d174e0c7b24ae134dca622..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField_Device.cu +++ /dev/null @@ -1,1195 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void K15IncompressibleNavierStokesRotatingVelocityField_Device( - real omega, - real deltaPhi, - real angularVelocity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* coordX, - real* coordY, - real* coordZ, - real* DDStart, - int size_Mat, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if ((BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - - //unsigned int kzero= k; - //unsigned int ke = k; - //unsigned int kw = neighborX[k]; - //unsigned int kn = k; - //unsigned int ks = neighborY[k]; - //unsigned int kt = k; - //unsigned int kb = neighborZ[k]; - //unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - //unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - //unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - //unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke - real mfabb = (D.f[DIR_M00])[kw];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn - real mfbab = (D.f[DIR_0M0])[ks];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt - real mfbba = (D.f[DIR_00M])[kb];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse - real mfacb = (D.f[DIR_MP0])[kw];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw - real mfcbc = (D.f[DIR_P0P])[k];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe - real mfabc = (D.f[DIR_M0P])[kw];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw - real mfbcc = (D.f[DIR_0PP])[k];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn - real mfbac = (D.f[DIR_0MP])[ks];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts - real mfbbb = (D.f[DIR_000])[k];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero - real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw - real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse - real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw - real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////////// - //Ship - real coord0X = 281.125f;//7.5f; - real coord0Y = 388.125f;//7.5f; - real ux = -angularVelocity * (coordY[k] - coord0Y); - real uy = angularVelocity * (coordX[k] - coord0X); - //////////////////////////////////////////////////////////////////////////////////// - //slow - //real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + - // (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + - // ((mfabb+mfcbb) + (mfbab+mfbcb) + (mfbba+mfbbc)));//fehlt mfbbb - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - //////////////////////////////////////////////////////////////////////////////////// - real vxNeu = cosf(deltaPhi) * vvx - sinf(deltaPhi) * vvy; - real vyNeu = sinf(deltaPhi) * vvx + cosf(deltaPhi) * vvy; - - - - - //////////////////////////////////////////////////////////////////////////////////// - //fast - real oMdrho = c1o1 - (mfccc + mfaaa + mfaca + mfcac + mfacc + mfcaa + mfaac + mfcca + - mfbac + mfbca + mfbaa + mfbcc + mfabc + mfcba + mfaba + mfcbc + mfacb + mfcab + mfaab + mfccb + - mfabb + mfcbb + mfbab + mfbcb + mfbba + mfbbc + mfbbb);//fehlt mfbbb nicht mehr - //real vvx =mfccc-mfaaa + mfcac-mfaca + mfcaa-mfacc + mfcca-mfaac + - // mfcba-mfabc + mfcbc-mfaba + mfcab-mfacb + mfccb-mfaab + - // mfcbb-mfabb; - //real vvy =mfccc-mfaaa + mfaca-mfcac + mfacc-mfcaa + mfcca-mfaac + - // mfbca-mfbac + mfbcc-mfbaa + mfacb-mfcab + mfccb-mfaab + - // mfbcb-mfbab; - //real vvz =mfccc-mfaaa + mfcac-mfaca + mfacc-mfcaa + mfaac-mfcca + - // mfbac-mfbca + mfbcc-mfbaa + mfabc-mfcba + mfcbc-mfaba + - // mfbbc-mfbba; - //////////////////////////////////////////////////////////////////////////////////// - // oMdrho assembler style -------> faaaaaastaaaa - // or much sloooowaaaa ... it dep�ndssssss on sadaku - real m0, m1, m2; - //real oMdrho; - //{ - // oMdrho=mfccc+mfaaa; - // m0=mfaca+mfcac; - // m1=mfacc+mfcaa; - // m2=mfaac+mfcca; - // oMdrho+=m0; - // m1+=m2; - // oMdrho+=m1; - // m0=mfbac+mfbca; - // m1=mfbaa+mfbcc; - // m0+=m1; - // m1=mfabc+mfcba; - // m2=mfaba+mfcbc; - // m1+=m2; - // m0+=m1; - // m1=mfacb+mfcab; - // m2=mfaab+mfccb; - // m1+=m2; - // m0+=m1; - // oMdrho+=m0; - // m0=mfabb+mfcbb; - // m1=mfbab+mfbcb; - // m2=mfbba+mfbbc; - // m0+=m1+m2; - // m0+=mfbbb; //hat gefehlt - // oMdrho = one - (oMdrho + m0); - //} - //real vvx; - real vx2; - //{ - // vvx = mfccc-mfaaa; - // m0 = mfcac-mfaca; - // m1 = mfcaa-mfacc; - // m2 = mfcca-mfaac; - // vvx+= m0; - // m1 += m2; - // vvx+= m1; - // vx2 = mfcba-mfabc; - // m0 = mfcbc-mfaba; - // m1 = mfcab-mfacb; - // m2 = mfccb-mfaab; - // vx2+= m0; - // m1 += m2; - // vx2+= m1; - // vvx+= vx2; - // vx2 = mfcbb-mfabb; - // vvx+= vx2; - //} - //real vvy; - real vy2; - //{ - // vvy = mfccc-mfaaa; - // m0 = mfaca-mfcac; - // m1 = mfacc-mfcaa; - // m2 = mfcca-mfaac; - // vvy+= m0; - // m1 += m2; - // vvy+= m1; - // vy2 = mfbca-mfbac; - // m0 = mfbcc-mfbaa; - // m1 = mfacb-mfcab; - // m2 = mfccb-mfaab; - // vy2+= m0; - // m1 += m2; - // vy2+= m1; - // vvy+= vy2; - // vy2 = mfbcb-mfbab; - // vvy+= vy2; - //} - //real vvz; - real vz2; - //{ - // vvz = mfccc-mfaaa; - // m0 = mfcac-mfaca; - // m1 = mfacc-mfcaa; - // m2 = mfaac-mfcca; - // vvz+= m0; - // m1 += m2; - // vvz+= m1; - // vz2 = mfbac-mfbca; - // m0 = mfbcc-mfbaa; - // m1 = mfabc-mfcba; - // m2 = mfcbc-mfaba; - // vz2+= m0; - // m1 += m2; - // vz2+= m1; - // vvz+= vz2; - // vz2 = mfbbc-mfbba; - // vvz+= vz2; - //} - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimit = 0.01f; - //real s9 = minusomega; - //test - //s9 = 0.; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // BGK - //////////////////////////////////////////////////////////////////////////////////// - ////2. - //mfabb += omega * (-mfabb); - //mfbab += omega * (-mfbab); - //mfbba += omega * (-mfbba); - // - //mfcaa += omega * (c1o3 * mfaaa - mfcaa); - //mfaca += omega * (c1o3 * mfaaa - mfaca); - //mfaac += omega * (c1o3 * mfaaa - mfaac); - // - ////3. - //mfabc += omega * (-mfabc); - //mfbac += omega * (-mfbac); - // - //mfacb += omega * (-mfacb); - //mfbca += omega * (-mfbca); - - //mfcab += omega * (-mfcab); - //mfcba += omega * (-mfcba); - - //mfbbb += omega * (-mfbbb); - - ////4. - //mfacc += omega * (c1o9 * mfaaa - mfacc); - //mfcac += omega * (c1o9 * mfaaa - mfcac); - //mfcca += omega * (c1o9 * mfaaa - mfcca); - - //mfbbc += omega * (-mfbbc); - //mfbcb += omega * (-mfbcb); - //mfcbb += omega * (-mfcbb); - - ////5. - //mfbcc += omega * (-mfbcc); - //mfcbc += omega * (-mfcbc); - //mfccb += omega * (-mfccb); - - ////6. - //mfccc += omega * (c1o27 * mfaaa - mfccc); - //////////////////////////////////////////////////////////////////////////////////// - - - - ////////////////////////////////////////////////////////////////////////////////////////// - //////// Cumulants - ////////////////////////////////////////////////////////////////////////////////////////// - //////real OxxPyyPzz = one; - //////real OxyyPxzz = one;//two-omega;// - //////real OxyyMxzz = one;//two-omega;// - //////real O4 = one; - //////real O5 = one; - //////real O6 = one; - - ////////Cum 4. - //////real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + two* mfbba * mfbab); - //////real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + two* mfbba * mfabb); - //////real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + two* mfbab * mfabb); - - //////real CUMcca = mfcca - (mfcaa * mfaca + two* mfbba * mfbba)- c1o3 * (mfcaa + mfaca); - //////real CUMcac = mfcac - (mfcaa * mfaac + two* mfbab * mfbab)- c1o3 * (mfcaa + mfaac); - //////real CUMacc = mfacc - (mfaac * mfaca + two* mfabb * mfabb)- c1o3 * (mfaac + mfaca); - - ////////Cum 5. - //////real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + four* mfabb * mfbbb + two* (mfbab * mfacb + mfbba * mfabc)) //O(eps^5) - ////// - c1o3 * (mfbca + mfbac); //O(eps^3) - //////real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + four* mfbab * mfbbb + two* (mfabb * mfcab + mfbba * mfbac)) //O(eps^5) - ////// - c1o3 * (mfcba + mfabc); //O(eps^3) - //////real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + four* mfbba * mfbbb + two* (mfbab * mfbca + mfabb * mfcba)) //O(eps^5) - ////// - c1o3 * (mfacb + mfcab);//O(eps^3) - - ////////Cum 6. - //////real CUMccc = mfccc +(-four* mfbbb * mfbbb //O(eps^6) - ////// - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) // O(eps^4) - ////// - four* (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) // O(eps^6) - ////// - two* (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) // O(esp^6) - ////// +( four* (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) //O(eps^6) - ////// + two* (mfcaa * mfaca * mfaac) //O(eps^6) - ////// + sixteen* mfbba * mfbab * mfabb) //O(eps^6) - ////// - c1o3* (mfacc + mfcac + mfcca) //O(eps^2) - ////// + c1o9* (mfcaa + mfaca + mfaac) //O(eps^2) - ////// +( two* (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba)//O(eps^4) - ////// + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3;//O(eps^4) - - - ////////2. - //////// linear combinations - //////real mxxPyyPzz = mfcaa + mfaca + mfaac; - //////real mxxMyy = mfcaa - mfaca; - //////real mxxMzz = mfcaa - mfaac; - - //////{ - ////// real dxux = c1o2 * ((-omega) * (mxxMyy + mxxMzz) + (mfaaa - mxxPyyPzz)); - ////// real dyuy = dxux + omega * c3o2 * mxxMyy; - ////// real dzuz = dxux + omega * c3o2 * mxxMzz; - - ////// //relax - ////// mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- three* (one- c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - ////// mxxMyy += omega * (-mxxMyy) - three* (one+ c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); - ////// mxxMzz += omega * (-mxxMzz) - three* (one+ c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); - //////} - //////mfabb += omega * (-mfabb); - //////mfbab += omega * (-mfbab); - //////mfbba += omega * (-mfbba); - - //////// linear combinations back - //////mfcaa = c1o3 * ( mxxMyy + mxxMzz + mxxPyyPzz); - //////mfaca = c1o3 * (-two* mxxMyy + mxxMzz + mxxPyyPzz); - //////mfaac = c1o3 * ( mxxMyy - two* mxxMzz + mxxPyyPzz); - - ////////3. - //////// linear combinations - //////real mxxyPyzz = mfcba + mfabc; - //////real mxxyMyzz = mfcba - mfabc; - - //////real mxxzPyyz = mfcab + mfacb; - //////real mxxzMyyz = mfcab - mfacb; - - //////real mxyyPxzz = mfbca + mfbac; - //////real mxyyMxzz = mfbca - mfbac; - - ////////relax - //////wadjust = OxyyMxzz+(one-OxyyMxzz)*abs(mfbbb)/(abs(mfbbb)+qudricLimit); - //////mfbbb += wadjust * (-mfbbb); - //////wadjust = OxyyPxzz+(one-OxyyPxzz)*abs(mxxyPyzz)/(abs(mxxyPyzz)+qudricLimit); - //////mxxyPyzz += wadjust * (-mxxyPyzz); - //////wadjust = OxyyMxzz+(one-OxyyMxzz)*abs(mxxyMyzz)/(abs(mxxyMyzz)+qudricLimit); - //////mxxyMyzz += wadjust * (-mxxyMyzz); - //////wadjust = OxyyPxzz+(one-OxyyPxzz)*abs(mxxzPyyz)/(abs(mxxzPyyz)+qudricLimit); - //////mxxzPyyz += wadjust * (-mxxzPyyz); - //////wadjust = OxyyMxzz+(one-OxyyMxzz)*abs(mxxzMyyz)/(abs(mxxzMyyz)+qudricLimit); - //////mxxzMyyz += wadjust * (-mxxzMyyz); - //////wadjust = OxyyPxzz+(one-OxyyPxzz)*abs(mxyyPxzz)/(abs(mxyyPxzz)+qudricLimit); - //////mxyyPxzz += wadjust * (-mxyyPxzz); - //////wadjust = OxyyMxzz+(one-OxyyMxzz)*abs(mxyyMxzz)/(abs(mxyyMxzz)+qudricLimit); - //////mxyyMxzz += wadjust * (-mxyyMxzz); - - //////// linear combinations back - //////mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; - //////mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - //////mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; - //////mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - //////mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; - //////mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - ////////4. - //////CUMacc += O4 * (-CUMacc); - //////CUMcac += O4 * (-CUMcac); - //////CUMcca += O4 * (-CUMcca); - ////// - //////CUMbbc += O4 * (-CUMbbc); - //////CUMbcb += O4 * (-CUMbcb); - //////CUMcbb += O4 * (-CUMcbb); - ////// - ////////5. - //////CUMbcc += O5 * (-CUMbcc); - //////CUMcbc += O5 * (-CUMcbc); - //////CUMccb += O5 * (-CUMccb); - - ////////6. - //////CUMccc += O6 * (-CUMccc); - ////// - ////////back cumulants to central moments - ////////4. - //////mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + two* mfbba * mfbab); - //////mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + two* mfbba * mfabb); - //////mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + two* mfbab * mfabb); - ////// - //////mfcca = CUMcca + (mfcaa * mfaca + two* mfbba * mfbba) + c1o3 * (mfcaa + mfaca); - //////mfcac = CUMcac + (mfcaa * mfaac + two* mfbab * mfbab) + c1o3 * (mfcaa + mfaac); - //////mfacc = CUMacc + (mfaac * mfaca + two* mfabb * mfabb) + c1o3 * (mfaac + mfaca); - - ////////5. - //////mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + four* mfabb * mfbbb + two* (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac); - //////mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + four* mfbab * mfbbb + two* (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc); - //////mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + four* mfbba * mfbbb + two* (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab); - ////// - ////////6. - //////mfccc = CUMccc -((-four* mfbbb * mfbbb - ////// - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - ////// - four* (mfabb * mfcbb + mfbac * mfbca + mfbba * mfbbc) - ////// - two* (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) - ////// +( four* (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - ////// + two* (mfcaa * mfaca * mfaac) - ////// + sixteen* mfbba * mfbab * mfabb) - ////// - c1o3* (mfacc + mfcac + mfcca) - ////// + c1o9* (mfcaa + mfaca + mfaac) - ////// +( two* (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - ////// + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3); - ////////////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; - real OxyyPxzz = c1o1;//omega;//two-omega;// - real OxyyMxzz = c2o1 - omega;//one;// - real O4 = c1o1; - real O5 = c1o1; - real O6 = c1o1; - - ////Cum 4. - //real CUMcbb; real CUMbcb; real CUMbbc; - //real CUMcca; real CUMcac; real CUMacc; - ////Cum 5. - //real CUMbcc; real CUMcbc; real CUMccb; - ////Cum 6. - //real CUMccc; - - //Cum four - real CUMcbb = mfcbb - ((mfcaa + c1o3 * oMdrho) * mfabb + c2o1 * mfbba * mfbab); - real CUMbcb = mfbcb - ((mfaca + c1o3 * oMdrho) * mfbab + c2o1 * mfbba * mfabb); - real CUMbbc = mfbbc - ((mfaac + c1o3 * oMdrho) * mfbba + c2o1 * mfbab * mfabb); - - real CUMcca = mfcca - (mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho - c1o1)*oMdrho; - real CUMcac = mfcac - (mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho - c1o1)*oMdrho; - real CUMacc = mfacc - (mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho - c1o1)*oMdrho; - - //Cum 5. - //real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + four * mfabb * mfbbb + two * (mfbab * mfacb + mfbba * mfabc)) //O(eps^5) - // - c1o3 * (mfbca + mfbac); //O(eps^3) - //real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + four * mfbab * mfbbb + two * (mfabb * mfcab + mfbba * mfbac)) //O(eps^5) - // - c1o3 * (mfcba + mfabc); //O(eps^3) - //real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + four * mfbba * mfbbb + two * (mfbab * mfbca + mfabb * mfcba)) //O(eps^5) - // - c1o3 * (mfacb + mfcab);//O(eps^3) - - real CUMbcc = mfbcc - (mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) - c1o3 * (mfbca + mfbac) * oMdrho; - real CUMcbc = mfcbc - (mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) - c1o3 * (mfcba + mfabc) * oMdrho; - real CUMccb = mfccb - (mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) - c1o3 * (mfacb + mfcab) * oMdrho; - - //Cum 6. - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) - - c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9*oMdrho*oMdrho - - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho*(c1o1 - c2o1* oMdrho) - c1o27* oMdrho * oMdrho*(-c2o1* oMdrho) - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) + c1o27*oMdrho; - - - - - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - { - real dxux = c0o1;//c1o2 * (-omega) *(mxxMyy + mxxMzz) + OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = c0o1;//dxux + omega * c3o2 * mxxMyy; - real dzuz = c0o1;//dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += (OxxPyyPzz)*(mfaaa - c2o1*(ux*vvx + uy*vvy) - ux*ux - uy*uy - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += omega * (-c2o1*(ux*vvx - uy*vvy) - (ux*ux - uy*uy) - mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); - mxxMzz += omega * (-c2o1*ux*vvx - ux*ux - mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); - } - mfabb += omega * (-uy*vvz - mfabb); - mfbab += omega * (-ux*vvz - mfbab); - mfbba += omega * (-ux*vvy - uy*vvx - ux*uy - mfbba); - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mfbbb) / (abs(mfbbb) + qudricLimit); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimit); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimit); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimit); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimit); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimit); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimit); - mxyyMxzz += wadjust * (-mxyyMxzz); - - //// linear combinations back - ////generic - //mfcba = zero; - //mfabc = zero; - //mfcab = zero; - //mfacb = zero; - //mfbca = zero; - //mfbac = zero; - - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - //CUMacc = zero; - //CUMcac = zero; - //CUMcca = zero; - // - //CUMbbc = zero; - //CUMbcb = zero; - //CUMcbb = zero; - // - ////5. - //CUMbcc = zero; - //CUMcbc = zero; - //CUMccb = zero; - // - ////6. - //CUMccc = zero; - - //4. - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3 * oMdrho) * mfabb + c2o1 * mfbba * mfbab); - mfbcb = CUMbcb + ((mfaca + c1o3 * oMdrho) * mfbab + c2o1 * mfbba * mfabb); - mfbbc = CUMbbc + ((mfaac + c1o3 * oMdrho) * mfbba + c2o1 * mfbab * mfabb); - - mfcca = CUMcca + (mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca) * oMdrho + c1o9*(oMdrho - c1o1)*oMdrho; - mfcac = CUMcac + (mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac) * oMdrho + c1o9*(oMdrho - c1o1)*oMdrho; - mfacc = CUMacc + (mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca) * oMdrho + c1o9*(oMdrho - c1o1)*oMdrho; - - //5. - mfbcc = CUMbcc + (mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) * oMdrho; - mfcbc = CUMcbc + (mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) * oMdrho; - mfccb = CUMccb + (mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) * oMdrho; - - //6. - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) - - c1o3 * (mfacc + mfcac + mfcca) * oMdrho - c1o9*oMdrho*oMdrho - - c1o9 * (mfcaa + mfaca + mfaac) * oMdrho*(c1o1 - c2o1* oMdrho) - c1o27* oMdrho * oMdrho*(-c2o1* oMdrho) - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa)) * c2o3*oMdrho) - c1o27*oMdrho; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - - //turning ship: - - vvx = vxNeu; - vvy = vyNeu; - - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] - (D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] - (D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] - (D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] - (D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] - (D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] - (D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] - (D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] - (D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] - (D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] - (D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] - (D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] - (D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] - (D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] - (D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] - (D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] - (D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] - (D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] - (D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] - (D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] - (D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] - (D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] - (D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] - (D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] - (D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] - (D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] - (D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] - //////////////////////////////////////////////////////////////////////////////////// - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField_Device.cuh deleted file mode 100644 index b313fcb8f2e7aa4544249ce26f6ada3cf85c7a79..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField_Device.cuh +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef K15IncompressibleNavierStokesRotatingVelocityField_Device_H -#define K15IncompressibleNavierStokesRotatingVelocityField_Device_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void K15IncompressibleNavierStokesRotatingVelocityField_Device( - real omega, - real deltaPhi, - real angularVelocity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* coordX, - real* coordY, - real* coordZ, - real* DDStart, - int size_Mat, - bool EvenOrOdd); - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes.cu b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes.cu deleted file mode 100644 index a08eef4a381b06729da8ff26a0ab305e5cf3615c..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes.cu +++ /dev/null @@ -1,40 +0,0 @@ -#include "M02IncompressibleNavierStokes.h" - -#include "M02IncompressibleNavierStokes_Device.cuh" -#include "Parameter/Parameter.h" -#include <cuda_helper/CudaGrid.h> - -std::shared_ptr<M02IncompressibleNavierStokes> M02IncompressibleNavierStokes::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<M02IncompressibleNavierStokes>(new M02IncompressibleNavierStokes(para, level)); -} - -void M02IncompressibleNavierStokes::run() -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); - - M02IncompressibleNavierStokes_Device <<< grid.grid, grid.threads >>>( - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->numberOfNodes, - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_Kernel_MRT_Incomp_SP_27 execution failed"); -} - -M02IncompressibleNavierStokes::M02IncompressibleNavierStokes(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitSP27); - - -} - -M02IncompressibleNavierStokes::M02IncompressibleNavierStokes() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes.h b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes.h deleted file mode 100644 index dde5846114b84abb6c276f155e3f583f7de0ecd6..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef M02IncompressibleNavierStokes_H -#define M02IncompressibleNavierStokes_H - -#include "Kernel/KernelImp.h" - -class M02IncompressibleNavierStokes : public KernelImp -{ -public: - static std::shared_ptr<M02IncompressibleNavierStokes> getNewInstance(std::shared_ptr<Parameter> para, int level); - void run(); - -private: - M02IncompressibleNavierStokes(); - M02IncompressibleNavierStokes(std::shared_ptr< Parameter> para, int level); -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes_Device.cu deleted file mode 100644 index 4c94c960e0bf9521c558ede0c00076f2bfe82ce4..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes_Device.cu +++ /dev/null @@ -1,765 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void M02IncompressibleNavierStokes_Device( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - int size_Mat, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if ((BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke - real mfabb = (D.f[DIR_M00])[kw];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn - real mfbab = (D.f[DIR_0M0])[ks];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt - real mfbba = (D.f[DIR_00M])[kb];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse - real mfacb = (D.f[DIR_MP0])[kw];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw - real mfcbc = (D.f[DIR_P0P])[k];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe - real mfabc = (D.f[DIR_M0P])[kw];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw - real mfbcc = (D.f[DIR_0PP])[k];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn - real mfbac = (D.f[DIR_0MP])[ks];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts - real mfbbb = (D.f[DIR_000])[k];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero - real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw - real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse - real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw - real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////////// - //slow - //real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + - // (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + - // ((mfabb+mfcbb) + (mfbab+mfbcb) + (mfbba+mfbbc)));//fehlt mfbbb - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)); - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)); - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)); - //////////////////////////////////////////////////////////////////////////////////// - //fast - real oMdrho = c1o1 - (mfccc + mfaaa + mfaca + mfcac + mfacc + mfcaa + mfaac + mfcca + - mfbac + mfbca + mfbaa + mfbcc + mfabc + mfcba + mfaba + mfcbc + mfacb + mfcab + mfaab + mfccb + - mfabb + mfcbb + mfbab + mfbcb + mfbba + mfbbc + mfbbb);//fehlt mfbbb nicht mehr - //real vvx =mfccc-mfaaa + mfcac-mfaca + mfcaa-mfacc + mfcca-mfaac + - // mfcba-mfabc + mfcbc-mfaba + mfcab-mfacb + mfccb-mfaab + - // mfcbb-mfabb; - //real vvy =mfccc-mfaaa + mfaca-mfcac + mfacc-mfcaa + mfcca-mfaac + - // mfbca-mfbac + mfbcc-mfbaa + mfacb-mfcab + mfccb-mfaab + - // mfbcb-mfbab; - //real vvz =mfccc-mfaaa + mfcac-mfaca + mfacc-mfcaa + mfaac-mfcca + - // mfbac-mfbca + mfbcc-mfbaa + mfabc-mfcba + mfcbc-mfaba + - // mfbbc-mfbba; - //////////////////////////////////////////////////////////////////////////////////// - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - //real wadjust; - //real qudricLimit = 0.01f; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1; - mfbac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1; - mfbbc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1; - mfcac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1; - mfcbc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1; - mfbca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1; - mfcab = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1; - mfcac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // MRT - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = omega; - real OxyyPxzz = c1o1;//two-omega;//eight*(two-omega)/(eight -omega);//one;//omega;//two-omega;// - real OxyyMxzz = c1o1;//omega;//one;//eight*(two-omega)/(eight -omega);//one;//two-omega;//one;// - real O4 = c1o1; - real O5 = c1o1; - real O6 = c1o1; - - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction - { - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz - c2o1*vx2 + vy2 + vz2) + c1o2 * OxxPyyPzz * (mfaaa + vx2 + vy2 + vz2 - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * (mxxMyy - vx2 + vy2); - real dzuz = dxux + omega * c3o2 * (mxxMzz - vx2 + vz2); - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa + vx2 + vy2 + vz2 - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += omega * (vx2 - vy2 - mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (vx2 - vz2 - mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - } - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // //no correction - // mxxPyyPzz += OxxPyyPzz*(mfaaa+vx2+vy2+vz2-mxxPyyPzz); - // mxxMyy += -(-omega) * (vx2-vy2-mxxMyy); - // mxxMzz += -(-omega) * (vx2-vz2-mxxMzz); - // /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (vvy*vvz - mfabb); - mfbab += omega * (vvx*vvz - mfbab); - mfbba += omega * (vvx*vvy - mfbba); - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - mxxyMyzz += OxyyMxzz*((vx2 - vz2)*vvy - mxxyMyzz); - mxxzMyyz += OxyyMxzz*((vx2 - vy2)*vvz - mxxzMyyz); - mxyyMxzz += OxyyMxzz*((vy2 - vz2)*vvx - mxyyMxzz); - - mxxyPyzz += OxyyPxzz*((c2o3 + vx2 + vz2)*vvy - mxxyPyzz); - mxxzPyyz += OxyyPxzz*((c2o3 + vx2 + vy2)*vvz - mxxzPyyz); - mxyyPxzz += OxyyPxzz*((c2o3 + vy2 + vz2)*vvx - mxyyPxzz); - - mfbbb += OxyyMxzz * (vvx*vvy*vvz - mfbbb); - - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - mfacc += O4*((c1o3 + vy2)*(c1o3 + vz2) + c1o9*(mfaaa - c1o1) - mfacc); - mfcac += O4*((c1o3 + vx2)*(c1o3 + vz2) + c1o9*(mfaaa - c1o1) - mfcac); - mfcca += O4*((c1o3 + vx2)*(c1o3 + vy2) + c1o9*(mfaaa - c1o1) - mfcca); - - mfcbb += O4*((c1o3 + vx2)*vvy*vvz - mfcbb); - mfbcb += O4*((c1o3 + vy2)*vvx*vvz - mfbcb); - mfbbc += O4*((c1o3 + vz2)*vvx*vvy - mfbbc); - - //5. - mfbcc += O5*((c1o3 + vy2)*(c1o3 + vz2)*vvx - mfbcc); - mfcbc += O5*((c1o3 + vx2)*(c1o3 + vz2)*vvy - mfcbc); - mfccb += O5*((c1o3 + vx2)*(c1o3 + vy2)*vvz - mfccb); - - //6. - mfccc += O6*((c1o3 + vx2)*(c1o3 + vy2)*(c1o3 + vz2) + c1o27*(mfaaa - c1o1) - mfccc); - - - //bad fix - vvx = c0o1; - vvy = c0o1; - vvz = c0o1; - vx2 = c0o1; - vy2 = c0o1; - vz2 = c0o1; - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] - (D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] - (D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] - (D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] - (D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] - (D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] - (D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] - (D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] - (D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] - (D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] - (D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] - (D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] - (D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] - (D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] - (D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] - (D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] - (D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] - (D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] - (D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] - (D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] - (D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] - (D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] - (D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] - (D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] - (D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] - (D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] - (D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] - //////////////////////////////////////////////////////////////////////////////////// - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes_Device.cuh deleted file mode 100644 index c62c73b10fcab18f8e4c7b3189dc10204a60de28..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes_Device.cuh +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef M02IncompressibleNavierStokes_Device_H -#define M02IncompressibleNavierStokes_Device_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void M02IncompressibleNavierStokes_Device( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - int size_Mat, - bool EvenOrOdd); - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27.cu deleted file mode 100644 index 21ad7202a62a685bc18b8a0c44e093e487e8eb84..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27.cu +++ /dev/null @@ -1,40 +0,0 @@ -#include "ADComp27.h" - -#include "ADComp27_Device.cuh" -#include "Parameter/Parameter.h" -#include <cuda_helper/CudaGrid.h> - -std::shared_ptr<ADComp27> ADComp27::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<ADComp27>(new ADComp27(para, level)); -} - -void ADComp27::run() -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); - - LB_KERNEL_AD_COMP_27<<< grid.grid, grid.threads >>>( - para->getParD(level)->diffusivity, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->distributionsAD.f[0], - para->getParD(level)->numberOfNodes, - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_KERNEL_AD_COMP_27 execution failed"); -} - -ADComp27::ADComp27(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitCompAD27); - -} - -ADComp27::ADComp27() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27.h deleted file mode 100644 index d1b182dd535fdb4789d1c1b80cbb4bfdd46b22df..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef AD_COMP_27_H -#define AD_COMP_27_H - -#include "Kernel/ADKernel.h" - -class ADComp27 : public ADKernel -{ -public: - static std::shared_ptr<ADComp27> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - ADComp27(); - ADComp27(std::shared_ptr< Parameter> para, int level); -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27_Device.cu deleted file mode 100644 index eb6c9814efdedb822ddc3052d6b577750be83b12..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27_Device.cu +++ /dev/null @@ -1,806 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void LB_KERNEL_AD_COMP_27(real diffusivity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - real* DD27, - int size_Mat, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if ((BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; - } - - Distributions27 D27; - if (EvenOrOdd == true) - { - D27.f[DIR_P00] = &DD27[DIR_P00 * size_Mat]; - D27.f[DIR_M00] = &DD27[DIR_M00 * size_Mat]; - D27.f[DIR_0P0] = &DD27[DIR_0P0 * size_Mat]; - D27.f[DIR_0M0] = &DD27[DIR_0M0 * size_Mat]; - D27.f[DIR_00P] = &DD27[DIR_00P * size_Mat]; - D27.f[DIR_00M] = &DD27[DIR_00M * size_Mat]; - D27.f[DIR_PP0] = &DD27[DIR_PP0 * size_Mat]; - D27.f[DIR_MM0] = &DD27[DIR_MM0 * size_Mat]; - D27.f[DIR_PM0] = &DD27[DIR_PM0 * size_Mat]; - D27.f[DIR_MP0] = &DD27[DIR_MP0 * size_Mat]; - D27.f[DIR_P0P] = &DD27[DIR_P0P * size_Mat]; - D27.f[DIR_M0M] = &DD27[DIR_M0M * size_Mat]; - D27.f[DIR_P0M] = &DD27[DIR_P0M * size_Mat]; - D27.f[DIR_M0P] = &DD27[DIR_M0P * size_Mat]; - D27.f[DIR_0PP] = &DD27[DIR_0PP * size_Mat]; - D27.f[DIR_0MM] = &DD27[DIR_0MM * size_Mat]; - D27.f[DIR_0PM] = &DD27[DIR_0PM * size_Mat]; - D27.f[DIR_0MP] = &DD27[DIR_0MP * size_Mat]; - D27.f[DIR_000] = &DD27[DIR_000 * size_Mat]; - D27.f[DIR_PPP] = &DD27[DIR_PPP * size_Mat]; - D27.f[DIR_MMP] = &DD27[DIR_MMP * size_Mat]; - D27.f[DIR_PMP] = &DD27[DIR_PMP * size_Mat]; - D27.f[DIR_MPP] = &DD27[DIR_MPP * size_Mat]; - D27.f[DIR_PPM] = &DD27[DIR_PPM * size_Mat]; - D27.f[DIR_MMM] = &DD27[DIR_MMM * size_Mat]; - D27.f[DIR_PMM] = &DD27[DIR_PMM * size_Mat]; - D27.f[DIR_MPM] = &DD27[DIR_MPM * size_Mat]; - } - else - { - D27.f[DIR_M00] = &DD27[DIR_P00 * size_Mat]; - D27.f[DIR_P00] = &DD27[DIR_M00 * size_Mat]; - D27.f[DIR_0M0] = &DD27[DIR_0P0 * size_Mat]; - D27.f[DIR_0P0] = &DD27[DIR_0M0 * size_Mat]; - D27.f[DIR_00M] = &DD27[DIR_00P * size_Mat]; - D27.f[DIR_00P] = &DD27[DIR_00M * size_Mat]; - D27.f[DIR_MM0] = &DD27[DIR_PP0 * size_Mat]; - D27.f[DIR_PP0] = &DD27[DIR_MM0 * size_Mat]; - D27.f[DIR_MP0] = &DD27[DIR_PM0 * size_Mat]; - D27.f[DIR_PM0] = &DD27[DIR_MP0 * size_Mat]; - D27.f[DIR_M0M] = &DD27[DIR_P0P * size_Mat]; - D27.f[DIR_P0P] = &DD27[DIR_M0M * size_Mat]; - D27.f[DIR_M0P] = &DD27[DIR_P0M * size_Mat]; - D27.f[DIR_P0M] = &DD27[DIR_M0P * size_Mat]; - D27.f[DIR_0MM] = &DD27[DIR_0PP * size_Mat]; - D27.f[DIR_0PP] = &DD27[DIR_0MM * size_Mat]; - D27.f[DIR_0MP] = &DD27[DIR_0PM * size_Mat]; - D27.f[DIR_0PM] = &DD27[DIR_0MP * size_Mat]; - D27.f[DIR_000] = &DD27[DIR_000 * size_Mat]; - D27.f[DIR_MMM] = &DD27[DIR_PPP * size_Mat]; - D27.f[DIR_PPM] = &DD27[DIR_MMP * size_Mat]; - D27.f[DIR_MPM] = &DD27[DIR_PMP * size_Mat]; - D27.f[DIR_PMM] = &DD27[DIR_MPP * size_Mat]; - D27.f[DIR_MMP] = &DD27[DIR_PPM * size_Mat]; - D27.f[DIR_PPP] = &DD27[DIR_MMM * size_Mat]; - D27.f[DIR_MPP] = &DD27[DIR_PMM * size_Mat]; - D27.f[DIR_PMP] = &DD27[DIR_MPM * size_Mat]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int kw = neighborX[k]; - unsigned int ks = neighborY[k]; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kbw = neighborZ[kw]; - unsigned int kbs = neighborZ[ks]; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real fW = (D.f[DIR_P00])[k];//ke - real fE = (D.f[DIR_M00])[kw]; - real fS = (D.f[DIR_0P0])[k];//kn - real fN = (D.f[DIR_0M0])[ks]; - real fB = (D.f[DIR_00P])[k];//kt - real fT = (D.f[DIR_00M])[kb]; - real fSW = (D.f[DIR_PP0])[k];//kne - real fNE = (D.f[DIR_MM0])[ksw]; - real fNW = (D.f[DIR_PM0])[ks];//kse - real fSE = (D.f[DIR_MP0])[kw];//knw - real fBW = (D.f[DIR_P0P])[k];//kte - real fTE = (D.f[DIR_M0M])[kbw]; - real fTW = (D.f[DIR_P0M])[kb];//kbe - real fBE = (D.f[DIR_M0P])[kw];//ktw - real fBS = (D.f[DIR_0PP])[k];//ktn - real fTN = (D.f[DIR_0MM])[kbs]; - real fTS = (D.f[DIR_0PM])[kb];//kbn - real fBN = (D.f[DIR_0MP])[ks];//kts - real fZERO = (D.f[DIR_000])[k];//kzero - real fBSW = (D.f[DIR_PPP])[k];//ktne - real fBNE = (D.f[DIR_MMP])[ksw];//ktsw - real fBNW = (D.f[DIR_PMP])[ks];//ktse - real fBSE = (D.f[DIR_MPP])[kw];//ktnw - real fTSW = (D.f[DIR_PPM])[kb];//kbne - real fTNE = (D.f[DIR_MMM])[kbsw]; - real fTNW = (D.f[DIR_PMM])[kbs];//kbse - real fTSE = (D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D27.f[DIR_P00])[k]; - real mfabb = (D27.f[DIR_M00])[kw]; - real mfbcb = (D27.f[DIR_0P0])[k]; - real mfbab = (D27.f[DIR_0M0])[ks]; - real mfbbc = (D27.f[DIR_00P])[k]; - real mfbba = (D27.f[DIR_00M])[kb]; - real mfccb = (D27.f[DIR_PP0])[k]; - real mfaab = (D27.f[DIR_MM0])[ksw]; - real mfcab = (D27.f[DIR_PM0])[ks]; - real mfacb = (D27.f[DIR_MP0])[kw]; - real mfcbc = (D27.f[DIR_P0P])[k]; - real mfaba = (D27.f[DIR_M0M])[kbw]; - real mfcba = (D27.f[DIR_P0M])[kb]; - real mfabc = (D27.f[DIR_M0P])[kw]; - real mfbcc = (D27.f[DIR_0PP])[k]; - real mfbaa = (D27.f[DIR_0MM])[kbs]; - real mfbca = (D27.f[DIR_0PM])[kb]; - real mfbac = (D27.f[DIR_0MP])[ks]; - real mfbbb = (D27.f[DIR_000])[k]; - real mfccc = (D27.f[DIR_PPP])[k]; - real mfaac = (D27.f[DIR_MMP])[ksw]; - real mfcac = (D27.f[DIR_PMP])[ks]; - real mfacc = (D27.f[DIR_MPP])[kw]; - real mfcca = (D27.f[DIR_PPM])[kb]; - real mfaaa = (D27.f[DIR_MMM])[kbsw]; - real mfcaa = (D27.f[DIR_PMM])[kbs]; - real mfaca = (D27.f[DIR_MPM])[kbw]; - //////////////////////////////////////////////////////////////////////////////////// - //Conc - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb)) + (mfbba + mfbbc)) + mfbbb; - - //real rho = c1o1 + drho; - //////////////////////////////////////////////////////////////////////////////// - real rho0fluid = (fTNE + fBSW) + (fTSW + fBNE) + (fTSE + fBNW) + (fTNW + fBSE) + (fNE + fSW) + (fNW + fSE) + (fTE + fBW) + (fBE + fTW) + (fTN + fBS) + (fBN + fTS) + (fE + fW) + (fN + fS) + (fT + fB) + fZERO; - real rhofluid = rho0fluid + c1o1; - real OORhofluid = c1o1 / rhofluid; - real vvx = OORhofluid*((fTNE - fBSW) + (fBNE - fTSW) + (fTSE - fBNW) + (fBSE - fTNW) + (fNE - fSW) + (fSE - fNW) + (fTE - fBW) + (fBE - fTW) + (fE - fW)); - real vvy = OORhofluid*((fTNE - fBSW) + (fBNE - fTSW) + (fBNW - fTSE) + (fTNW - fBSE) + (fNE - fSW) + (fNW - fSE) + (fTN - fBS) + (fBN - fTS) + (fN - fS)); - real vvz = OORhofluid*((fTNE - fBSW) + (fTSW - fBNE) + (fTSE - fBNW) + (fTNW - fBSE) + (fTE - fBW) + (fTW - fBE) + (fTN - fBS) + (fTS - fBN) + (fT - fB)); - //////////////////////////////////////////////////////////////////////////////// - //real omegaD = zero; - real omegaD = c2o1 / (c6o1 * diffusivity + c1o1); - - real oMdrho = c0o1;//one; // comp special - real m0, m1, m2; - real vx2 = vvx*vvx; - real vy2 = vvy*vvy; - real vz2 = vvz*vvz; - - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - //if(mfaaa < zero) omegaD = one; - real limit = c9o1*omegaD*omegaD*(mfbaa*mfbaa + mfaba*mfaba + mfaab*mfaab); - //real CC=c1o2; - //if ((two*mfaaa*mfaaa<limit)) omegaD=two / (six * (diffusivity+((limit/(1.0e-10f+two*mfaaa*mfaaa)-one)*(c1o6-diffusivity))*c1o2) + one); - if ((c2o1*mfaaa*mfaaa<limit)) omegaD = c1o1; - //omegaD = two / (six * (diffusivity+CC*limit) + one); - - //mfaaa = c1o2; - //trans 3. - real Mabc = mfabc - mfaba*c1o3; - real Mbca = mfbca - mfbaa*c1o3; - real Macb = mfacb - mfaab*c1o3; - real Mcba = mfcba - mfaba*c1o3; - real Mcab = mfcab - mfaab*c1o3; - real Mbac = mfbac - mfbaa*c1o3; - //trans 5. - real Mcbc = mfcbc - mfaba*c1o9; - real Mbcc = mfbcc - mfbaa*c1o9; - real Mccb = mfccb - mfaab*c1o9; - - //1. - mfbaa *= c1o1 - omegaD; - mfaba *= c1o1 - omegaD; - mfaab *= c1o1 - omegaD; - - //3. - //mfbca *= one - omegaD; - //mfbac *= one - omegaD; - //mfcba *= one - omegaD; - //mfabc *= one - omegaD; - //mfcab *= one - omegaD; - //mfacb *= one - omegaD; - - //mfbbb *= one - omegaD; - Mabc = c0o1; - Mbca = c0o1; - Macb = c0o1; - Mcba = c0o1; - Mcab = c0o1; - Mbac = c0o1; - mfbbb = c0o1; - - //5. - //mfbcc *= one - omegaD; - //mfcbc *= one - omegaD; - //mfccb *= one - omegaD; - Mcbc = c0o1; - Mbcc = c0o1; - Mccb = c0o1; - - //2. - mfbba = c0o1; - mfbab = c0o1; - mfabb = c0o1; - - mfcaa = c1o3 * drho; - mfaca = c1o3 * drho; - mfaac = c1o3 * drho; - - //4. - mfacc = c1o9 * drho; - mfcac = c1o9 * drho; - mfcca = c1o9 * drho; - - mfcbb = c0o1; - mfbcb = c0o1; - mfbbc = c0o1; - - //6. - mfccc = c1o27 * drho; - - //3. - mfabc = Mabc + mfaba*c1o3; - mfbca = Mbca + mfbaa*c1o3; - mfacb = Macb + mfaab*c1o3; - mfcba = Mcba + mfaba*c1o3; - mfcab = Mcab + mfaab*c1o3; - mfbac = Mbac + mfbaa*c1o3; - //5. - mfcbc = Mcbc + mfaba*c1o9; - mfbcc = Mbcc + mfbaa*c1o9; - mfccb = Mccb + mfaab*c1o9; - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - (D27.f[DIR_P00])[k] = mfabb; - (D27.f[DIR_M00])[kw] = mfcbb; - (D27.f[DIR_0P0])[k] = mfbab; - (D27.f[DIR_0M0])[ks] = mfbcb; - (D27.f[DIR_00P])[k] = mfbba; - (D27.f[DIR_00M])[kb] = mfbbc; - (D27.f[DIR_PP0])[k] = mfaab; - (D27.f[DIR_MM0])[ksw] = mfccb; - (D27.f[DIR_PM0])[ks] = mfacb; - (D27.f[DIR_MP0])[kw] = mfcab; - (D27.f[DIR_P0P])[k] = mfaba; - (D27.f[DIR_M0M])[kbw] = mfcbc; - (D27.f[DIR_P0M])[kb] = mfabc; - (D27.f[DIR_M0P])[kw] = mfcba; - (D27.f[DIR_0PP])[k] = mfbaa; - (D27.f[DIR_0MM])[kbs] = mfbcc; - (D27.f[DIR_0PM])[kb] = mfbac; - (D27.f[DIR_0MP])[ks] = mfbca; - (D27.f[DIR_000])[k] = mfbbb; - (D27.f[DIR_PPP])[k] = mfaaa; - (D27.f[DIR_PMP])[ks] = mfaca; - (D27.f[DIR_PPM])[kb] = mfaac; - (D27.f[DIR_PMM])[kbs] = mfacc; - (D27.f[DIR_MPP])[kw] = mfcaa; - (D27.f[DIR_MMP])[ksw] = mfcca; - (D27.f[DIR_MPM])[kbw] = mfcac; - (D27.f[DIR_MMM])[kbsw] = mfccc; - //////////////////////////////////////////////////////////////////////////////////// - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27_Device.cuh deleted file mode 100644 index a5482a10ca15fc3f27245acbe8b47a06d9f917f0..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27_Device.cuh +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef LB_KERNEL_AD_COMP_27_H -#define LB_KERNEL_AD_COMP_27_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void LB_KERNEL_AD_COMP_27(real diffusivity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - real* DD27, - int size_Mat, - bool EvenOrOdd); - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADMod27CompStrategy.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADMod27CompStrategy.cpp deleted file mode 100644 index 61cf7d07bf1bcdad33bee81d8145cc90d7d4c05f..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADMod27CompStrategy.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include "ADMod27CompStrategy.h" - -#include "Parameter/Parameter.h" - -std::shared_ptr<ADMod27CompStrategy> ADMod27CompStrategy::getInstance() -{ - std::shared_ptr<ADMod27CompStrategy> uniqueInstance; - if(!uniqueInstance) - uniqueInstance = std::shared_ptr<ADMod27CompStrategy>(new ADMod27CompStrategy()); - return uniqueInstance; -} - -bool ADMod27CompStrategy::checkParameter(std::shared_ptr<Parameter> para) -{ - if (para->getUseWale()) - return false; - else if (!para->getCompOn()) - return false; - else if (!para->getDiffOn()) - return false; - else if (para->getDiffMod() == 7) - return false; - else - return true; -} - -ADMod27CompStrategy::ADMod27CompStrategy() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADMod27CompStrategy.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADMod27CompStrategy.h deleted file mode 100644 index 1cdf8e04383c1087b493aa2dd4bf8c68cec7db8a..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADMod27CompStrategy.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef AD_MOD27_COMP_STRATEGY_H -#define AD_MOD27_COMP_STRATEGY_H - -#include "Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h" - -class ADMod27CompStrategy : public CheckParameterStrategy -{ -public: - static std::shared_ptr<ADMod27CompStrategy> getInstance(); - - bool checkParameter(std::shared_ptr<Parameter> para); - -private: - ADMod27CompStrategy(); - -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7.cu deleted file mode 100644 index fa6d378353aa5058f1b58979a517e8490d7d3916..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7.cu +++ /dev/null @@ -1,40 +0,0 @@ -#include "ADComp7.h" - -#include "ADComp7_Device.cuh" -#include "Parameter/Parameter.h" -#include <cuda_helper/CudaGrid.h> - -std::shared_ptr<ADComp7> ADComp7::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<ADComp7>(new ADComp7(para, level)); -} - -void ADComp7::run() -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); - - LB_Kernel_AD_Comp_7<<< grid.grid, grid.threads >>>( - para->getParD(level)->diffusivity, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->distributionsAD7.f[0], - para->getParD(level)->numberOfNodes, - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_Kernel_AD_Comp_7 execution failed"); -} - -ADComp7::ADComp7(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitCompAD7); - -} - -ADComp7::ADComp7() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7.h deleted file mode 100644 index afabfd27f28ecb5be61d6e279bd0eb9d30990449..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef AD_COMP_7_H -#define AD_COMP_7_H - -#include "Kernel/ADKernel.h" - -class ADComp7 : public ADKernel -{ -public: - static std::shared_ptr<ADComp7> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - ADComp7(); - ADComp7(std::shared_ptr< Parameter> para, int level); -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7_Device.cu deleted file mode 100644 index 075063bc6c3d260376256bd46f5669fae658a7a0..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7_Device.cu +++ /dev/null @@ -1,222 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; - -#include "math.h" - -__global__ void LB_Kernel_AD_Comp_7(real diffusivity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - real* DD7, - int size_Mat, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if ((BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; - } - - Distributions7 D7; - if (EvenOrOdd == true) - { - D7.f[0] = &DD7[0 * size_Mat]; - D7.f[1] = &DD7[1 * size_Mat]; - D7.f[2] = &DD7[2 * size_Mat]; - D7.f[3] = &DD7[3 * size_Mat]; - D7.f[4] = &DD7[4 * size_Mat]; - D7.f[5] = &DD7[5 * size_Mat]; - D7.f[6] = &DD7[6 * size_Mat]; - } - else - { - D7.f[0] = &DD7[0 * size_Mat]; - D7.f[2] = &DD7[1 * size_Mat]; - D7.f[1] = &DD7[2 * size_Mat]; - D7.f[4] = &DD7[3 * size_Mat]; - D7.f[3] = &DD7[4 * size_Mat]; - D7.f[6] = &DD7[5 * size_Mat]; - D7.f[5] = &DD7[6 * size_Mat]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int kw = neighborX[k]; - unsigned int ks = neighborY[k]; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kbw = neighborZ[kw]; - unsigned int kbs = neighborZ[ks]; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real fW = (D.f[DIR_P00])[k];//ke - real fE = (D.f[DIR_M00])[kw]; - real fS = (D.f[DIR_0P0])[k];//kn - real fN = (D.f[DIR_0M0])[ks]; - real fB = (D.f[DIR_00P])[k];//kt - real fT = (D.f[DIR_00M])[kb]; - real fSW = (D.f[DIR_PP0])[k];//kne - real fNE = (D.f[DIR_MM0])[ksw]; - real fNW = (D.f[DIR_PM0])[ks];//kse - real fSE = (D.f[DIR_MP0])[kw];//knw - real fBW = (D.f[DIR_P0P])[k];//kte - real fTE = (D.f[DIR_M0M])[kbw]; - real fTW = (D.f[DIR_P0M])[kb];//kbe - real fBE = (D.f[DIR_M0P])[kw];//ktw - real fBS = (D.f[DIR_0PP])[k];//ktn - real fTN = (D.f[DIR_0MM])[kbs]; - real fTS = (D.f[DIR_0PM])[kb];//kbn - real fBN = (D.f[DIR_0MP])[ks];//kts - real fZERO = (D.f[DIR_000])[k];//kzero - real fBSW = (D.f[DIR_PPP])[k];//ktne - real fBNE = (D.f[DIR_MMP])[ksw];//ktsw - real fBNW = (D.f[DIR_PMP])[ks];//ktse - real fBSE = (D.f[DIR_MPP])[kw];//ktnw - real fTSW = (D.f[DIR_PPM])[kb];//kbne - real fTNE = (D.f[DIR_MMM])[kbsw]; - real fTNW = (D.f[DIR_PMM])[kbs];//kbse - real fTSE = (D.f[DIR_MPM])[kbw];//kbnw - //real fE = (D.f[DIR_P00])[k ];//ke - //real fW = (D.f[DIR_M00])[kw ]; - //real fN = (D.f[DIR_0P0])[k ];//kn - //real fS = (D.f[DIR_0M0])[ks ]; - //real fT = (D.f[DIR_00P])[k ];//kt - //real fB = (D.f[DIR_00M])[kb ]; - //real fNE = (D.f[DIR_PP0])[k ];//kne - //real fSW = (D.f[DIR_MM0])[ksw]; - //real fSE = (D.f[DIR_PM0])[ks ];//kse - //real fNW = (D.f[DIR_MP0])[kw ];//knw - //real fTE = (D.f[DIR_P0P])[k ];//kte - //real fBW = (D.f[DIR_M0M])[kbw]; - //real fBE = (D.f[DIR_P0M])[kb ];//kbe - //real fTW = (D.f[DIR_M0P])[kw ];//ktw - //real fTN = (D.f[DIR_0PP])[k ];//ktn - //real fBS = (D.f[DIR_0MM])[kbs]; - //real fBN = (D.f[DIR_0PM])[kb ];//kbn - //real fTS = (D.f[DIR_0MP])[ks ];//kts - //real fZERO = (D.f[DIR_000])[k ];//kzero - //real fTNE = (D.f[DIR_PPP])[k ];//ktne - //real fTSW = (D.f[DIR_MMP])[ksw];//ktsw - //real fTSE = (D.f[DIR_PMP])[ks ];//ktse - //real fTNW = (D.f[DIR_MPP])[kw ];//ktnw - //real fBNE = (D.f[DIR_PPM])[kb ];//kbne - //real fBSW = (D.f[DIR_MMM])[kbsw]; - //real fBSE = (D.f[DIR_PMM])[kbs];//kbse - //real fBNW = (D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////// - real f7ZERO = (D7.f[0])[k]; - real f7E = (D7.f[1])[k]; - real f7W = (D7.f[2])[kw]; - real f7N = (D7.f[3])[k]; - real f7S = (D7.f[4])[ks]; - real f7T = (D7.f[5])[k]; - real f7B = (D7.f[6])[kb]; - //////////////////////////////////////////////////////////////////////////////// - real rho0 = (fTNE + fBSW) + (fTSW + fBNE) + (fTSE + fBNW) + (fTNW + fBSE) + (fNE + fSW) + (fNW + fSE) + (fTE + fBW) + (fBE + fTW) + (fTN + fBS) + (fBN + fTS) + (fE + fW) + (fN + fS) + (fT + fB) + fZERO; - real rho = rho0 + c1o1; - real OORho = c1o1 / rho; - real vx = OORho*((fTNE - fBSW) + (fBNE - fTSW) + (fTSE - fBNW) + (fBSE - fTNW) + (fNE - fSW) + (fSE - fNW) + (fTE - fBW) + (fBE - fTW) + (fE - fW)); - real vy = OORho*((fTNE - fBSW) + (fBNE - fTSW) + (fBNW - fTSE) + (fTNW - fBSE) + (fNE - fSW) + (fNW - fSE) + (fTN - fBS) + (fBN - fTS) + (fN - fS)); - real vz = OORho*((fTNE - fBSW) + (fTSW - fBNE) + (fTSE - fBNW) + (fTNW - fBSE) + (fTE - fBW) + (fTW - fBE) + (fTN - fBS) + (fTS - fBN) + (fT - fB)); - //////////////////////////////////////////////////////////////////////////////// - real omegaD = -c3o1 + sqrt(c3o1); - real Lam = -(c1o2 + c1o1 / omegaD); - real nue_d = Lam / c3o1; - real ae = diffusivity / nue_d - c1o1; - real ux_sq = vx * vx; - real uy_sq = vy * vy; - real uz_sq = vz * vz; - - real ConcD = f7ZERO + f7E + f7W + f7N + f7S + f7T + f7B; - - (D7.f[0])[k] = f7ZERO*(c1o1 + omegaD) - omegaD*ConcD*(c1o3*(ae*(-c3o1)) - (ux_sq + uy_sq + uz_sq)); - (D7.f[2])[kw] = f7E *(c1o1 + omegaD) - omegaD*ConcD*(c1o6*(ae + c1o1) + c1o2*(ux_sq)+vx*c1o2); - (D7.f[1])[k] = f7W *(c1o1 + omegaD) - omegaD*ConcD*(c1o6*(ae + c1o1) + c1o2*(ux_sq)-vx*c1o2); - (D7.f[4])[ks] = f7N *(c1o1 + omegaD) - omegaD*ConcD*(c1o6*(ae + c1o1) + c1o2*(uy_sq)+vy*c1o2); - (D7.f[3])[k] = f7S *(c1o1 + omegaD) - omegaD*ConcD*(c1o6*(ae + c1o1) + c1o2*(uy_sq)-vy*c1o2); - (D7.f[6])[kb] = f7T *(c1o1 + omegaD) - omegaD*ConcD*(c1o6*(ae + c1o1) + c1o2*(uz_sq)+vz*c1o2); - (D7.f[5])[k] = f7B *(c1o1 + omegaD) - omegaD*ConcD*(c1o6*(ae + c1o1) + c1o2*(uz_sq)-vz*c1o2); - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7_Device.cuh deleted file mode 100644 index bea40443ab619fb08b4c5656105c7792c4f11bd1..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7_Device.cuh +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef LB_KERNEL_AD_COMP_7_H -#define LB_KERNEL_AD_COMP_7_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void LB_Kernel_AD_Comp_7(real diffusivity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - real* DD7, - int size_Mat, - bool EvenOrOdd); - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADMod7CompStrategy.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADMod7CompStrategy.cpp deleted file mode 100644 index fc852c02d8a705802bd0040d43091753aa3678c8..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADMod7CompStrategy.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include "ADMod7CompStrategy.h" - -#include "Parameter/Parameter.h" - -std::shared_ptr<ADMod7CompStrategy> ADMod7CompStrategy::getInstance() -{ - static std::shared_ptr<ADMod7CompStrategy> uniqueInstance; - if(!uniqueInstance) - uniqueInstance = std::shared_ptr<ADMod7CompStrategy>(new ADMod7CompStrategy()); - return uniqueInstance; -} - -bool ADMod7CompStrategy::checkParameter(std::shared_ptr<Parameter> para) -{ - if (para->getUseWale()) - return false; - else if (!para->getCompOn()) - return false; - else if (!para->getDiffOn()) - return false; - else if (para->getDiffMod() == 27) - return false; - else - return true; -} - -ADMod7CompStrategy::ADMod7CompStrategy() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADMod7CompStrategy.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADMod7CompStrategy.h deleted file mode 100644 index 4c2059b20468ea6189700d7685aaef1aaf3499fc..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADMod7CompStrategy.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef AD_MOD7_COMP_STRATEGY_H -#define AD_MOD7_COMP_STRATEGY_H - -#include "Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h" - -class ADMod7CompStrategy : public CheckParameterStrategy -{ -public: - static std::shared_ptr<ADMod7CompStrategy> getInstance(); - - bool checkParameter(std::shared_ptr<Parameter> para); - -private: - ADMod7CompStrategy(); - -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27.cu deleted file mode 100644 index 22782ddf6aebb6b860c3dc1e2b1a384223931085..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27.cu +++ /dev/null @@ -1,40 +0,0 @@ -#include "ADIncomp27.h" - -#include "ADIncomp27_Device.cuh" -#include "Parameter/Parameter.h" -#include <cuda_helper/CudaGrid.h> - -std::shared_ptr<ADIncomp27> ADIncomp27::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<ADIncomp27>(new ADIncomp27(para, level)); -} - -void ADIncomp27::run() -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); - - LB_Kernel_AD_Incomp_27<<< grid.grid, grid.threads >>>( - para->getParD(level)->diffusivity, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->distributionsAD.f[0], - para->getParD(level)->numberOfNodes, - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_Kernel_AD_Incomp_27 execution failed"); -} - -ADIncomp27::ADIncomp27(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitIncompAD27); - -} - -ADIncomp27::ADIncomp27() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27.h deleted file mode 100644 index 3993539153b2536910a68d99f9ea4c787116bcd3..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef AD_INCOMP_27_H -#define AD_INCOMP_27_H - -#include "Kernel/ADKernel.h" - - -class ADIncomp27 : public ADKernel -{ -public: - static std::shared_ptr<ADIncomp27> getNewInstance(std::shared_ptr<Parameter> para, int level); - void run(); - -private: - ADIncomp27(); - ADIncomp27(std::shared_ptr< Parameter> para, int level); -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27_Device.cu deleted file mode 100644 index 4a5cbb1168940bd6bfc9d9a48568b5964b736ae4..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27_Device.cu +++ /dev/null @@ -1,895 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void LB_Kernel_AD_Incomp_27(real diffusivity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - real* DD27, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<numberOfLBnodes) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if ((BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - - Distributions27 D27; - if (EvenOrOdd == true) - { - D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes]; - } - else - { - D27.f[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int kw = neighborX[k]; - unsigned int ks = neighborY[k]; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kbw = neighborZ[kw]; - unsigned int kbs = neighborZ[ks]; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real fW = (D.f[DIR_P00])[k];//ke - real fE = (D.f[DIR_M00])[kw]; - real fS = (D.f[DIR_0P0])[k];//kn - real fN = (D.f[DIR_0M0])[ks]; - real fB = (D.f[DIR_00P])[k];//kt - real fT = (D.f[DIR_00M])[kb]; - real fSW = (D.f[DIR_PP0])[k];//kne - real fNE = (D.f[DIR_MM0])[ksw]; - real fNW = (D.f[DIR_PM0])[ks];//kse - real fSE = (D.f[DIR_MP0])[kw];//knw - real fBW = (D.f[DIR_P0P])[k];//kte - real fTE = (D.f[DIR_M0M])[kbw]; - real fTW = (D.f[DIR_P0M])[kb];//kbe - real fBE = (D.f[DIR_M0P])[kw];//ktw - real fBS = (D.f[DIR_0PP])[k];//ktn - real fTN = (D.f[DIR_0MM])[kbs]; - real fTS = (D.f[DIR_0PM])[kb];//kbn - real fBN = (D.f[DIR_0MP])[ks];//kts - //real fZERO = (D.f[DIR_000])[k];//kzero - real fBSW = (D.f[DIR_PPP])[k];//ktne - real fBNE = (D.f[DIR_MMP])[ksw];//ktsw - real fBNW = (D.f[DIR_PMP])[ks];//ktse - real fBSE = (D.f[DIR_MPP])[kw];//ktnw - real fTSW = (D.f[DIR_PPM])[kb];//kbne - real fTNE = (D.f[DIR_MMM])[kbsw]; - real fTNW = (D.f[DIR_PMM])[kbs];//kbse - real fTSE = (D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////// - //real f27E = (D27.f[DIR_P00])[k ];//ke - //real f27W = (D27.f[DIR_M00])[kw ]; - //real f27N = (D27.f[DIR_0P0])[k ];//kn - //real f27S = (D27.f[DIR_0M0])[ks ]; - //real f27T = (D27.f[DIR_00P])[k ];//kt - //real f27B = (D27.f[DIR_00M])[kb ]; - //real f27NE = (D27.f[DIR_PP0])[k ];//kne - //real f27SW = (D27.f[DIR_MM0])[ksw]; - //real f27SE = (D27.f[DIR_PM0])[ks ];//kse - //real f27NW = (D27.f[DIR_MP0])[kw ];//knw - //real f27TE = (D27.f[DIR_P0P])[k ];//kte - //real f27BW = (D27.f[DIR_M0M])[kbw]; - //real f27BE = (D27.f[DIR_P0M])[kb ];//kbe - //real f27TW = (D27.f[DIR_M0P])[kw ];//ktw - //real f27TN = (D27.f[DIR_0PP])[k ];//ktn - //real f27BS = (D27.f[DIR_0MM])[kbs]; - //real f27BN = (D27.f[DIR_0PM])[kb ];//kbn - //real f27TS = (D27.f[DIR_0MP])[ks ];//kts - //real f27ZERO = (D27.f[DIR_000])[k ];//kzero - //real f27TNE = (D27.f[DIR_PPP])[k ];//ktne - //real f27TSW = (D27.f[DIR_MMP])[ksw];//ktsw - //real f27TSE = (D27.f[DIR_PMP])[ks ];//ktse - //real f27TNW = (D27.f[DIR_MPP])[kw ];//ktnw - //real f27BNE = (D27.f[DIR_PPM])[kb ];//kbne - //real f27BSW = (D27.f[DIR_MMM])[kbsw]; - //real f27BSE = (D27.f[DIR_PMM])[kbs];//kbse - //real f27BNW = (D27.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////// - //real vx1 = ((fTNE-fBSW)+(fBNE-fTSW)+(fTSE-fBNW)+(fBSE-fTNW) +(fNE-fSW)+(fSE-fNW)+(fTE-fBW)+(fBE-fTW)+(fE-fW)); - //real vx2 = ((fTNE-fBSW)+(fBNE-fTSW)+(fBNW-fTSE)+(fTNW-fBSE) +(fNE-fSW)+(fNW-fSE)+(fTN-fBS)+(fBN-fTS)+(fN-fS)); - //real vx3 = ((fTNE-fBSW)+(fTSW-fBNE)+(fTSE-fBNW)+(fTNW-fBSE) +(fTE-fBW)+(fTW-fBE)+(fTN-fBS)+(fTS-fBN)+(fT-fB)); - //////////////////////////////////////////////////////////////////////////////// - - - real mfcbb = (D27.f[DIR_P00])[k]; - real mfabb = (D27.f[DIR_M00])[kw]; - real mfbcb = (D27.f[DIR_0P0])[k]; - real mfbab = (D27.f[DIR_0M0])[ks]; - real mfbbc = (D27.f[DIR_00P])[k]; - real mfbba = (D27.f[DIR_00M])[kb]; - real mfccb = (D27.f[DIR_PP0])[k]; - real mfaab = (D27.f[DIR_MM0])[ksw]; - real mfcab = (D27.f[DIR_PM0])[ks]; - real mfacb = (D27.f[DIR_MP0])[kw]; - real mfcbc = (D27.f[DIR_P0P])[k]; - real mfaba = (D27.f[DIR_M0M])[kbw]; - real mfcba = (D27.f[DIR_P0M])[kb]; - real mfabc = (D27.f[DIR_M0P])[kw]; - real mfbcc = (D27.f[DIR_0PP])[k]; - real mfbaa = (D27.f[DIR_0MM])[kbs]; - real mfbca = (D27.f[DIR_0PM])[kb]; - real mfbac = (D27.f[DIR_0MP])[ks]; - real mfbbb = (D27.f[DIR_000])[k]; - real mfccc = (D27.f[DIR_PPP])[k]; - real mfaac = (D27.f[DIR_MMP])[ksw]; - real mfcac = (D27.f[DIR_PMP])[ks]; - real mfacc = (D27.f[DIR_MPP])[kw]; - real mfcca = (D27.f[DIR_PPM])[kb]; - real mfaaa = (D27.f[DIR_MMM])[kbsw]; - real mfcaa = (D27.f[DIR_PMM])[kbs]; - real mfaca = (D27.f[DIR_MPM])[kbw]; - //////////////////////////////////////////////////////////////////////////////////// - //Conc - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb)) + (mfbba + mfbbc)) + mfbbb; - //real rho = c1o1 + drho; - //////////////////////////////////////////////////////////////////////////////////// - - real vvx = ((fTNE - fBSW) + (fBNE - fTSW) + (fTSE - fBNW) + (fBSE - fTNW) + (fNE - fSW) + (fSE - fNW) + (fTE - fBW) + (fBE - fTW) + (fE - fW)); - real vvy = ((fTNE - fBSW) + (fBNE - fTSW) + (fBNW - fTSE) + (fTNW - fBSE) + (fNE - fSW) + (fNW - fSE) + (fTN - fBS) + (fBN - fTS) + (fN - fS)); - real vvz = ((fTNE - fBSW) + (fTSW - fBNE) + (fTSE - fBNW) + (fTNW - fBSE) + (fTE - fBW) + (fTW - fBE) + (fTN - fBS) + (fTS - fBN) + (fT - fB)); - //////////////////////////////////////////////////////////////////////////////// - real omegaD = c2o1 / (c6o1 * diffusivity + c1o1); - ////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 ux_sq = vx * vx; - //real uy_sq = vy * vy; - //real uz_sq = vz * vz; - - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //D3Q7 - //real ConcD = f7ZERO+f7E+f7W+f7N+f7S+f7T+f7B; - //(D7.f[0])[k ] = f7ZERO*(one+omegaD)-omegaD*ConcD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq)); - //(D7.f[2])[kw ] = f7E *(one+omegaD)-omegaD*ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)+vx*c1o2); - //(D7.f[1])[k ] = f7W *(one+omegaD)-omegaD*ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)-vx*c1o2); - //(D7.f[4])[ks ] = f7N *(one+omegaD)-omegaD*ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)+vy*c1o2); - //(D7.f[3])[k ] = f7S *(one+omegaD)-omegaD*ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)-vy*c1o2); - //(D7.f[6])[kb ] = f7T *(one+omegaD)-omegaD*ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)+vz*c1o2); - //(D7.f[5])[k ] = f7B *(one+omegaD)-omegaD*ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)-vz*c1o2); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////D3Q27 - //real ConcD = (f27TNE+f27BSW)+(f27TSW+f27BNE)+(f27TSE+f27BNW)+(f27TNW+f27BSE)+ - // (f27NE+f27SW)+(f27NW+f27SE)+(f27TE+f27BW)+(f27BE+f27TW)+(f27TN+f27BS)+(f27BN+f27TS)+ - // (f27E+f27W)+(f27N+f27S)+(f27T+f27B)+f27ZERO; - //real cusq = c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - //(D27.f[ DIR_P00 ])[k ] = f27W *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cusq); - //(D27.f[ DIR_M00 ])[kw ] = f27E *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*( vx1 )+c9over2*( vx1 )*( vx1 )-cusq); - //(D27.f[ DIR_0P0 ])[k ] = f27S *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cusq); - //(D27.f[ DIR_0M0 ])[ks ] = f27N *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*( vx2 )+c9over2*( vx2 )*( vx2 )-cusq); - //(D27.f[ DIR_00P ])[k ] = f27B *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*( -vx3)+c9over2*( -vx3)*( -vx3)-cusq); - //(D27.f[ DIR_00M ])[kb ] = f27T *(one-omegaD)+omegaD* c2over27* ConcD*(one+three*( vx3)+c9over2*( vx3)*( vx3)-cusq); - //(D27.f[ DIR_PP0 ])[k ] = f27SW *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cusq); - //(D27.f[ DIR_MM0 ])[ksw ] = f27NE *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cusq); - //(D27.f[ DIR_PM0 ])[ks ] = f27NW *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cusq); - //(D27.f[ DIR_MP0 ])[kw ] = f27SE *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cusq); - //(D27.f[ DIR_P0P ])[k ] = f27BW *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cusq); - //(D27.f[ DIR_M0M ])[kbw ] = f27TE *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cusq); - //(D27.f[ DIR_P0M ])[kb ] = f27TW *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cusq); - //(D27.f[ DIR_M0P ])[kw ] = f27BE *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cusq); - //(D27.f[ DIR_0PP ])[k ] = f27BS *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cusq); - //(D27.f[ DIR_0MM ])[kbs ] = f27TN *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cusq); - //(D27.f[ DIR_0PM ])[kb ] = f27TS *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cusq); - //(D27.f[ DIR_0MP ])[ks ] = f27BN *(one-omegaD)+omegaD* c1over54* ConcD*(one+three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cusq); - //(D27.f[ DIR_000])[k ] = f27ZERO *(one-omegaD)+omegaD* c8over27* ConcD*(one-cusq); - //(D27.f[ DIR_PPP ])[k ] = f27BSW *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq); - //(D27.f[ DIR_PMP ])[ks ] = f27BNW *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq); - //(D27.f[ DIR_PPM ])[kb ] = f27TSW *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq); - //(D27.f[ DIR_PMM ])[kbs ] = f27TNW *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq); - //(D27.f[ DIR_MPP ])[kw ] = f27BSE *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq); - //(D27.f[ DIR_MMP ])[ksw ] = f27BNE *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq); - //(D27.f[ DIR_MPM ])[kbw ] = f27TSE *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq); - //(D27.f[ DIR_MMM ])[kbsw] = f27TNE *(one-omegaD)+omegaD* c1over216*ConcD*(one+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq); - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - real oMdrho = c0o1;//one; // comp special - real m0, m1, m2; - real vx2 = vvx*vvx; - real vy2 = vvy*vvy; - real vz2 = vvz*vvz; - - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - //if(mfaaa < zero) omegaD = one; - real limit = c9o1*omegaD*omegaD*(mfbaa*mfbaa + mfaba*mfaba + mfaab*mfaab); - //real CC=c1o2; - //if ((two*mfaaa*mfaaa<limit)) omegaD=two / (six * (diffusivity+((limit/(1.0e-10f+two*mfaaa*mfaaa)-one)*(c1o6-diffusivity))*c1o2) + one); - if ((c2o1*mfaaa*mfaaa<limit)) omegaD = c1o1; - //omegaD = two / (six * (diffusivity+CC*limit) + one); - - //mfaaa = c1o2; - //trans 3. - real Mabc = mfabc - mfaba*c1o3; - real Mbca = mfbca - mfbaa*c1o3; - real Macb = mfacb - mfaab*c1o3; - real Mcba = mfcba - mfaba*c1o3; - real Mcab = mfcab - mfaab*c1o3; - real Mbac = mfbac - mfbaa*c1o3; - //trans 5. - real Mcbc = mfcbc - mfaba*c1o9; - real Mbcc = mfbcc - mfbaa*c1o9; - real Mccb = mfccb - mfaab*c1o9; - - //1. - mfbaa *= c1o1 - omegaD; - mfaba *= c1o1 - omegaD; - mfaab *= c1o1 - omegaD; - - //3. - //mfbca *= one - omegaD; - //mfbac *= one - omegaD; - //mfcba *= one - omegaD; - //mfabc *= one - omegaD; - //mfcab *= one - omegaD; - //mfacb *= one - omegaD; - - //mfbbb *= one - omegaD; - Mabc = c0o1; - Mbca = c0o1; - Macb = c0o1; - Mcba = c0o1; - Mcab = c0o1; - Mbac = c0o1; - mfbbb = c0o1; - - //5. - //mfbcc *= one - omegaD; - //mfcbc *= one - omegaD; - //mfccb *= one - omegaD; - Mcbc = c0o1; - Mbcc = c0o1; - Mccb = c0o1; - - //2. - mfbba = c0o1; - mfbab = c0o1; - mfabb = c0o1; - - mfcaa = c1o3 * drho; - mfaca = c1o3 * drho; - mfaac = c1o3 * drho; - - //4. - mfacc = c1o9 * drho; - mfcac = c1o9 * drho; - mfcca = c1o9 * drho; - - mfcbb = c0o1; - mfbcb = c0o1; - mfbbc = c0o1; - - //6. - mfccc = c1o27 * drho; - - //3. - mfabc = Mabc + mfaba*c1o3; - mfbca = Mbca + mfbaa*c1o3; - mfacb = Macb + mfaab*c1o3; - mfcba = Mcba + mfaba*c1o3; - mfcab = Mcab + mfaab*c1o3; - mfbac = Mbac + mfbaa*c1o3; - //5. - mfcbc = Mcbc + mfaba*c1o9; - mfbcc = Mbcc + mfbaa*c1o9; - mfccb = Mccb + mfaab*c1o9; - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - (D27.f[DIR_P00])[k] = mfabb; - (D27.f[DIR_M00])[kw] = mfcbb; - (D27.f[DIR_0P0])[k] = mfbab; - (D27.f[DIR_0M0])[ks] = mfbcb; - (D27.f[DIR_00P])[k] = mfbba; - (D27.f[DIR_00M])[kb] = mfbbc; - (D27.f[DIR_PP0])[k] = mfaab; - (D27.f[DIR_MM0])[ksw] = mfccb; - (D27.f[DIR_PM0])[ks] = mfacb; - (D27.f[DIR_MP0])[kw] = mfcab; - (D27.f[DIR_P0P])[k] = mfaba; - (D27.f[DIR_M0M])[kbw] = mfcbc; - (D27.f[DIR_P0M])[kb] = mfabc; - (D27.f[DIR_M0P])[kw] = mfcba; - (D27.f[DIR_0PP])[k] = mfbaa; - (D27.f[DIR_0MM])[kbs] = mfbcc; - (D27.f[DIR_0PM])[kb] = mfbac; - (D27.f[DIR_0MP])[ks] = mfbca; - (D27.f[DIR_000])[k] = mfbbb; - (D27.f[DIR_PPP])[k] = mfaaa; - (D27.f[DIR_PMP])[ks] = mfaca; - (D27.f[DIR_PPM])[kb] = mfaac; - (D27.f[DIR_PMM])[kbs] = mfacc; - (D27.f[DIR_MPP])[kw] = mfcaa; - (D27.f[DIR_MMP])[ksw] = mfcca; - (D27.f[DIR_MPM])[kbw] = mfcac; - (D27.f[DIR_MMM])[kbsw] = mfccc; - //////////////////////////////////////////////////////////////////////////////////// - - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27_Device.cuh deleted file mode 100644 index 3abee563f676910f422bba0930060c2a0b0c0e21..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27_Device.cuh +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef LB_KERNEL_AD_INCOMP_27_H -#define LB_KERNEL_AD_INCOMP_27_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void LB_Kernel_AD_Incomp_27(real diffusivity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - real* DD27, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADMod27IncompStrategy.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADMod27IncompStrategy.cpp deleted file mode 100644 index 84e8e947d498381b8b080abe2b355ee485713d33..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADMod27IncompStrategy.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include "ADMod27IncompStrategy.h" - -#include "Parameter/Parameter.h" - -std::shared_ptr<ADMod27IncompStrategy> ADMod27IncompStrategy::getInstance() -{ - static std::shared_ptr<ADMod27IncompStrategy> uniqueInstance; - if (!uniqueInstance) - uniqueInstance = std::shared_ptr<ADMod27IncompStrategy>(new ADMod27IncompStrategy()); - return uniqueInstance; -} - -bool ADMod27IncompStrategy::checkParameter(std::shared_ptr<Parameter> para) -{ - if (para->getUseWale()) - return false; - else if (para->getCompOn()) - return false; - else if (!para->getDiffOn()) - return false; - else if (para->getDiffMod() == 7) - return false; - else - return true; -} - -ADMod27IncompStrategy::ADMod27IncompStrategy() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADMod27IncompStrategy.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADMod27IncompStrategy.h deleted file mode 100644 index ed518041a58832f9c1efc0a39cb566cf9f4cf920..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADMod27IncompStrategy.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef AD_MOD27_INCOMP_STRATEGY_H -#define AD_MOD27_INCOMP_STRATEGY_H - -#include "Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h" - -class ADMod27IncompStrategy : public CheckParameterStrategy -{ -public: - static std::shared_ptr<ADMod27IncompStrategy> getInstance(); - - bool checkParameter(std::shared_ptr<Parameter> para); - -private: - ADMod27IncompStrategy(); - -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7.cu deleted file mode 100644 index 613491dcfc4e124fed2826f5439ae7a2b99544b7..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7.cu +++ /dev/null @@ -1,40 +0,0 @@ -#include "ADIncomp7.h" - -#include "ADIncomp7_Device.cuh" -#include "Parameter/Parameter.h" -#include <cuda_helper/CudaGrid.h> - -std::shared_ptr<ADIncomp7> ADIncomp7::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<ADIncomp7>(new ADIncomp7(para, level)); -} - -void ADIncomp7::run() -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); - - LB_Kernel_AD_Incomp_7<<< grid.grid, grid.threads >>>( - para->getParD(level)->diffusivity, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->distributionsAD7.f[0], - para->getParD(level)->numberOfNodes, - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_Kernel_AD_Incomp_7 execution failed"); -} - -ADIncomp7::ADIncomp7(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitIncompAD7); - -} - -ADIncomp7::ADIncomp7() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7.h deleted file mode 100644 index 825bc12ff7ea20ef17b2b41e7e60f8f026b4b6bb..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7.h +++ /dev/null @@ -1,16 +0,0 @@ -#ifndef AD_INCOMP_7_H -#define AD_INCOMP_7_H - -#include "Kernel/ADKernel.h" - -class ADIncomp7 : public ADKernel -{ -public: - static std::shared_ptr<ADIncomp7> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - ADIncomp7(); - ADIncomp7(std::shared_ptr< Parameter> para, int level); -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7_Device.cu deleted file mode 100644 index 1d393e0c4a5f80fb331c109311876673a86a9d8d..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7_Device.cu +++ /dev/null @@ -1,279 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void LB_Kernel_AD_Incomp_7(real diffusivity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - real* DD7, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<numberOfLBnodes) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if ((BC != GEO_SOLID) && (BC != GEO_VOID)) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - - Distributions7 D7; - if (EvenOrOdd == 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]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int kw = neighborX[k]; - unsigned int ks = neighborY[k]; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kbw = neighborZ[kw]; - unsigned int kbs = neighborZ[ks]; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real fW = (D.f[DIR_P00])[k];//ke - real fE = (D.f[DIR_M00])[kw]; - real fS = (D.f[DIR_0P0])[k];//kn - real fN = (D.f[DIR_0M0])[ks]; - real fB = (D.f[DIR_00P])[k];//kt - real fT = (D.f[DIR_00M])[kb]; - real fSW = (D.f[DIR_PP0])[k];//kne - real fNE = (D.f[DIR_MM0])[ksw]; - real fNW = (D.f[DIR_PM0])[ks];//kse - real fSE = (D.f[DIR_MP0])[kw];//knw - real fBW = (D.f[DIR_P0P])[k];//kte - real fTE = (D.f[DIR_M0M])[kbw]; - real fTW = (D.f[DIR_P0M])[kb];//kbe - real fBE = (D.f[DIR_M0P])[kw];//ktw - real fBS = (D.f[DIR_0PP])[k];//ktn - real fTN = (D.f[DIR_0MM])[kbs]; - real fTS = (D.f[DIR_0PM])[kb];//kbn - real fBN = (D.f[DIR_0MP])[ks];//kts - //real fZERO = (D.f[DIR_000])[k];//kzero - real fBSW = (D.f[DIR_PPP])[k];//ktne - real fBNE = (D.f[DIR_MMP])[ksw];//ktsw - real fBNW = (D.f[DIR_PMP])[ks];//ktse - real fBSE = (D.f[DIR_MPP])[kw];//ktnw - real fTSW = (D.f[DIR_PPM])[kb];//kbne - real fTNE = (D.f[DIR_MMM])[kbsw]; - real fTNW = (D.f[DIR_PMM])[kbs];//kbse - real fTSE = (D.f[DIR_MPM])[kbw];//kbnw - //real fE = (D.f[DIR_P00])[k ];//ke - //real fW = (D.f[DIR_M00])[kw ]; - //real fN = (D.f[DIR_0P0])[k ];//kn - //real fS = (D.f[DIR_0M0])[ks ]; - //real fT = (D.f[DIR_00P])[k ];//kt - //real fB = (D.f[DIR_00M])[kb ]; - //real fNE = (D.f[DIR_PP0])[k ];//kne - //real fSW = (D.f[DIR_MM0])[ksw]; - //real fSE = (D.f[DIR_PM0])[ks ];//kse - //real fNW = (D.f[DIR_MP0])[kw ];//knw - //real fTE = (D.f[DIR_P0P])[k ];//kte - //real fBW = (D.f[DIR_M0M])[kbw]; - //real fBE = (D.f[DIR_P0M])[kb ];//kbe - //real fTW = (D.f[DIR_M0P])[kw ];//ktw - //real fTN = (D.f[DIR_0PP])[k ];//ktn - //real fBS = (D.f[DIR_0MM])[kbs]; - //real fBN = (D.f[DIR_0PM])[kb ];//kbn - //real fTS = (D.f[DIR_0MP])[ks ];//kts - //real fZERO = (D.f[DIR_000])[k ];//kzero - //real fTNE = (D.f[DIR_PPP])[k ];//ktne - //real fTSW = (D.f[DIR_MMP])[ksw];//ktsw - //real fTSE = (D.f[DIR_PMP])[ks ];//ktse - //real fTNW = (D.f[DIR_MPP])[kw ];//ktnw - //real fBNE = (D.f[DIR_PPM])[kb ];//kbne - //real fBSW = (D.f[DIR_MMM])[kbsw]; - //real fBSE = (D.f[DIR_PMM])[kbs];//kbse - //real fBNW = (D.f[DIR_MPM])[kbw];//kbnw - //////////////////////////////////////////////////////////////////////////////// - real f7ZERO = (D7.f[0])[k]; - real f7E = (D7.f[1])[k]; - real f7W = (D7.f[2])[kw]; - real f7N = (D7.f[3])[k]; - real f7S = (D7.f[4])[ks]; - real f7T = (D7.f[5])[k]; - real f7B = (D7.f[6])[kb]; - //////////////////////////////////////////////////////////////////////////////// - real vx = ((fTNE - fBSW) + (fBNE - fTSW) + (fTSE - fBNW) + (fBSE - fTNW) + (fNE - fSW) + (fSE - fNW) + (fTE - fBW) + (fBE - fTW) + (fE - fW)); - real vy = ((fTNE - fBSW) + (fBNE - fTSW) + (fBNW - fTSE) + (fTNW - fBSE) + (fNE - fSW) + (fNW - fSE) + (fTN - fBS) + (fBN - fTS) + (fN - fS)); - real vz = ((fTNE - fBSW) + (fTSW - fBNE) + (fTSE - fBNW) + (fTNW - fBSE) + (fTE - fBW) + (fTW - fBE) + (fTN - fBS) + (fTS - fBN) + (fT - fB)); - ////d�rrrrrty !!!!!!!!!!!!! - // real vx = ten * ((fTNE-fBSW)+(fBNE-fTSW)+(fTSE-fBNW)+(fBSE-fTNW) +(fNE-fSW)+(fSE-fNW)+(fTE-fBW)+(fBE-fTW)+(fE-fW)); - // real vy = ten * ((fTNE-fBSW)+(fBNE-fTSW)+(fBNW-fTSE)+(fTNW-fBSE) +(fNE-fSW)+(fNW-fSE)+(fTN-fBS)+(fBN-fTS)+(fN-fS)); - // real vz = ten * ((fTNE-fBSW)+(fTSW-fBNE)+(fTSE-fBNW)+(fTNW-fBSE) +(fTE-fBW)+(fTW-fBE)+(fTN-fBS)+(fTS-fBN)+(fT-fB)); - //////////////////////////////////////////////////////////////////////////////// - //real ux_sq = vx * vx; - //real uy_sq = vy * vy; - //real uz_sq = vz * vz; - //////////////////////////////////////////////////////////////////////////////// - //BGK - //real omegaD = -three + sqrt(three); !!!!!!!!!!!!!!Achtung!!!!!!!!!!!!!!!!!! anderes Vorzeichen als in den Randbedingungen - //real Lam = -(c1o2+one/omegaD); - //real nue_d = Lam/three; - //real ae = diffusivity/nue_d - one; - - //real ConcD = f7ZERO+f7E+f7W+f7N+f7S+f7T+f7B; - - //(D7.f[0])[k ] = f7ZERO*(one+omegaD)-omegaD*ConcD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq)); - //(D7.f[2])[kw ] = f7E *(one+omegaD)-omegaD*ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)+vx*c1o2); - //(D7.f[1])[k ] = f7W *(one+omegaD)-omegaD*ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)-vx*c1o2); - //(D7.f[4])[ks ] = f7N *(one+omegaD)-omegaD*ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)+vy*c1o2); - //(D7.f[3])[k ] = f7S *(one+omegaD)-omegaD*ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)-vy*c1o2); - //(D7.f[6])[kb ] = f7T *(one+omegaD)-omegaD*ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)+vz*c1o2); - //(D7.f[5])[k ] = f7B *(one+omegaD)-omegaD*ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)-vz*c1o2); - - //////////////////////////////////////////////////////////////////////////////// - //TRT Yoshida Kernel - based on Ying - //real cs2 = c1o4; - real Lam = diffusivity*c4o1;//diffusivity/(one)/cs2; - real omegaD = -c1o1 / (Lam + c1o2); - //real ae = c0o1; - //////////////////////////////////////////////////////////////////////////////// - real ConcD = f7ZERO + f7E + f7W + f7N + f7S + f7T + f7B; - - real Mom000 = f7ZERO + f7W + f7E + f7N + f7S + f7T + f7B; //1 - real Mom100 = f7E - f7W; - real Mom010 = f7N - f7S; - real Mom001 = f7T - f7B; - real Mom222 = c6o1*f7ZERO - f7W - f7E - f7N - f7S - f7T - f7B; - real Mom200 = c2o1*f7W + c2o1*f7E - f7N - f7S - f7T - f7B; - real Mom022 = f7N + f7S - f7T - f7B; - - real Meq000 = ConcD; - real Meq100 = ConcD*vx; - real Meq010 = ConcD*vy; - real Meq001 = ConcD*vz; - real Meq222 = c3o4*ConcD; - real Meq200 = c0o1; - real Meq022 = c0o1; - - // relaxation TRT Yoshida - - // odd - Mom100 = omegaD * (Mom100 - Meq100); - Mom010 = omegaD * (Mom010 - Meq010); - Mom001 = omegaD * (Mom001 - Meq001); - - // even - Mom000 = -c1o1*(Mom000 - Meq000); - Mom222 = -c1o1*(Mom222 - Meq222); - Mom200 = -c1o1*(Mom200 - Meq200); - Mom022 = -c1o1*(Mom022 - Meq022); - - //Back transformation to distributions - f7ZERO = f7ZERO + c1o7*Mom000 + c1o7*Mom222; //1 - f7E = f7E + c1o7*Mom000 + c1o2*Mom100 - c1o6*c1o7*Mom222 + c1o6*Mom200; //2 - f7W = f7W + c1o7*Mom000 - c1o2*Mom100 - c1o6*c1o7*Mom222 + c1o6*Mom200; //3 - f7N = f7N + c1o7*Mom000 + c1o2*Mom010 - c1o6*c1o7*Mom222 - c1o12*Mom200 + c1o4 *Mom022; //4 - f7S = f7S + c1o7*Mom000 - c1o2*Mom010 - c1o6*c1o7*Mom222 - c1o12*Mom200 + c1o4 *Mom022; //5 - f7T = f7T + c1o7*Mom000 + c1o2*Mom001 - c1o6*c1o7*Mom222 - c1o12*Mom200 - c1o4 *Mom022; //6 - f7B = f7B + c1o7*Mom000 - c1o2*Mom001 - c1o6*c1o7*Mom222 - c1o12*Mom200 - c1o4 *Mom022; //7 - - (D7.f[0])[k] = f7ZERO; - (D7.f[2])[kw] = f7E; - (D7.f[1])[k] = f7W; - (D7.f[4])[ks] = f7N; - (D7.f[3])[k] = f7S; - (D7.f[6])[kb] = f7T; - (D7.f[5])[k] = f7B; - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7_Device.cuh deleted file mode 100644 index 845ecda946a4e45678082b72b5c74dc96e5810c5..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7_Device.cuh +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef LB_KERNEL_AD_INCOMP_7_H -#define LB_KERNEL_AD_INCOMP_7_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void LB_Kernel_AD_Incomp_7(real diffusivity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - real* DD7, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADMod7IncompStrategy.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADMod7IncompStrategy.cpp deleted file mode 100644 index 0bae92b80f046970bc9287bd84727bdf38a59a09..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADMod7IncompStrategy.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include "ADMod7IncompStrategy.h" - -#include "Parameter/Parameter.h" - -std::shared_ptr<ADMod7IncompStrategy> ADMod7IncompStrategy::getInstance() -{ - static std::shared_ptr<ADMod7IncompStrategy> uniqueInstance; - if(!uniqueInstance) - uniqueInstance = std::shared_ptr<ADMod7IncompStrategy>(new ADMod7IncompStrategy()); - return uniqueInstance; -} - -bool ADMod7IncompStrategy::checkParameter(std::shared_ptr<Parameter> para) -{ - if (para->getUseWale()) - return false; - else if (para->getCompOn()) - return false; - else if (!para->getDiffOn()) - return false; - else if (para->getDiffMod() == 27) - return false; - else - return true; -} - -ADMod7IncompStrategy::ADMod7IncompStrategy() -{ -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADMod7IncompStrategy.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADMod7IncompStrategy.h deleted file mode 100644 index 1d01b7b1c2a65e07b17377cfd2c4000583c2fc33..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADMod7IncompStrategy.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef AD_MOD7_INCOMP_STRATEGY_H -#define AD_MOD7_INCOMP_STRATEGY_H - -#include "Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h" - -class ADMod7IncompStrategy : public CheckParameterStrategy -{ -public: - static std::shared_ptr<ADMod7IncompStrategy> getInstance(); - - bool checkParameter(std::shared_ptr<Parameter> para); - -private: - ADMod7IncompStrategy(); - -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27.cu deleted file mode 100644 index a8c1af64ebd4641a755bf9fed7e9fafa18e9cad7..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27.cu +++ /dev/null @@ -1,65 +0,0 @@ -#include "PMCumulantOneCompSP27.h" - -#include "PMCumulantOneCompSP27_Device.cuh" -#include "Parameter/Parameter.h" -#include "Calculation/PorousMedia.h" - -std::shared_ptr<PMCumulantOneCompSP27> PMCumulantOneCompSP27::getNewInstance(std::shared_ptr<Parameter> para, std::vector<std::shared_ptr<PorousMedia>> pm, int level) -{ - return std::shared_ptr<PMCumulantOneCompSP27>(new PMCumulantOneCompSP27(para, pm, level)); -} - -void PMCumulantOneCompSP27::run() -{ - int size_Mat = (int)para->getParD(level)->numberOfNodes; - int numberOfThreads = para->getParD(level)->numberofthreads; - - int Grid = (size_Mat / numberOfThreads) + 1; - int Grid1, Grid2; - if (Grid > 512) - { - Grid1 = 512; - Grid2 = (Grid / Grid1) + 1; - } - else - { - Grid1 = 1; - Grid2 = Grid; - } - dim3 grid(Grid1, Grid2, 1); - dim3 threads(numberOfThreads, 1, 1); - - for (int i = 0; i < pm.size(); i++) { - LB_Kernel_PM_Cum_One_Comp_SP_27 <<< grid, threads >>>( - para->getParD(level)->omega, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->numberOfNodes, - level, - para->getForcesDev(), - pm[i]->getPorosity(), - pm[i]->getDarcyLBM(), - pm[i]->getForchheimerLBM(), - pm[i]->getSizePM(), - pm[i]->getHostNodeIDsPM(), - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_Kernel_PM_Cum_One_Comp_SP_27 execution failed"); - } -} - -PMCumulantOneCompSP27::PMCumulantOneCompSP27(std::shared_ptr<Parameter> para, std::vector<std::shared_ptr<PorousMedia>> pm, int level) -{ - this->para = para; - this->pm = pm; - this->level = level; - - myPreProcessorTypes.push_back(InitSP27); - - -} - -PMCumulantOneCompSP27::PMCumulantOneCompSP27() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27.h deleted file mode 100644 index d5130b88728cfdd70fad18e180d578733609487f..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef PM_CUMULANT_ONE_COMP_SP27_H -#define PM_CUMULANT_ONE_COMP_SP27_H - -#include "Kernel/KernelImp.h" - -class PorousMedia; - -class PMCumulantOneCompSP27 : public KernelImp -{ -public: - static std::shared_ptr<PMCumulantOneCompSP27> getNewInstance(std::shared_ptr< Parameter> para, std::vector<std::shared_ptr<PorousMedia>> pm, int level); - void run(); - -private: - PMCumulantOneCompSP27(); - PMCumulantOneCompSP27(std::shared_ptr< Parameter> para, std::vector<std::shared_ptr<PorousMedia>> pm, int level); - - std::vector<std::shared_ptr<PorousMedia>> pm; -}; - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27_Device.cu deleted file mode 100644 index 1ed7cf3af37251550d38affe512f841a3779b918..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27_Device.cu +++ /dev/null @@ -1,936 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void LB_Kernel_PM_Cum_One_Comp_SP_27(real omega, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - int level, - real* forces, - real porosity, - real darcy, - real forchheimer, - unsigned int sizeOfPorousMedia, - unsigned int* nodeIdsPorousMedia, - bool EvenOrOdd) -{ - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * 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 kt = nx*(ny*z + y) + x; - ////////////////////////////////////////////////////////////////////////// - - if (kt<sizeOfPorousMedia) - { - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int k = nodeIdsPorousMedia[kt]; - unsigned int kw = neighborX[k]; - unsigned int ks = neighborY[k]; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kbw = neighborZ[kw]; - unsigned int kbs = neighborZ[ks]; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k]; - real mfabb = (D.f[DIR_M00])[kw]; - real mfbcb = (D.f[DIR_0P0])[k]; - real mfbab = (D.f[DIR_0M0])[ks]; - real mfbbc = (D.f[DIR_00P])[k]; - real mfbba = (D.f[DIR_00M])[kb]; - real mfccb = (D.f[DIR_PP0])[k]; - real mfaab = (D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks]; - real mfacb = (D.f[DIR_MP0])[kw]; - real mfcbc = (D.f[DIR_P0P])[k]; - real mfaba = (D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb]; - real mfabc = (D.f[DIR_M0P])[kw]; - real mfbcc = (D.f[DIR_0PP])[k]; - real mfbaa = (D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb]; - real mfbac = (D.f[DIR_0MP])[ks]; - real mfbbb = (D.f[DIR_000])[k]; - real mfccc = (D.f[DIR_PPP])[k]; - real mfaac = (D.f[DIR_MMP])[ksw]; - real mfcac = (D.f[DIR_PMP])[ks]; - real mfacc = (D.f[DIR_MPP])[kw]; - real mfcca = (D.f[DIR_PPM])[kb]; - real mfaaa = (D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs]; - real mfaca = (D.f[DIR_MPM])[kbw]; - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb)) + (mfbba + mfbbc)) + mfbbb; - - real rho = c1o1 + drho; - //////////////////////////////////////////////////////////////////////////////////// - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) / rho; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) / rho; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) / rho; - real vx2 = vvx*vvx; - real vy2 = vvy*vvy; - real vz2 = vvz*vvz; - //////////////////////////////////////////////////////////////////////////////////// - //porous media - vvx = -(c2o1 * vvx) / (-c2o1 - darcy - forchheimer * sqrtf(vx2 + vy2 + vz2)); - vvy = -(c2o1 * vvy) / (-c2o1 - darcy - forchheimer * sqrtf(vx2 + vy2 + vz2)); - vvz = -(c2o1 * vvz) / (-c2o1 - darcy - forchheimer * sqrtf(vx2 + vy2 + vz2)); - //vvx = (two * vvx) / (two + 134.4 + 0.0068287 * sqrtf(vx2 + vy2 + vz2)); - //vvy = (two * vvy) / (two + 134.4 + 0.0068287 * sqrtf(vx2 + vy2 + vz2)); - //vvz = (two * vvz) / (two + 134.4 + 0.0068287 * sqrtf(vx2 + vy2 + vz2)); - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - real fx = forces[0] / (pow((double)c2o1, (double)level)); //zero;//0.0032653/(pow(two,level)); //0.000000005;//(two/1600000.0) / 120.0; // - real fy = forces[1] / (pow((double)c2o1, (double)level)); //zero; - real fz = forces[2] / (pow((double)c2o1, (double)level)); //zero; - vvx += fx*c1o2; - vvy += fy*c1o2; - vvz += fz*c1o2; - //////////////////////////////////////////////////////////////////////////////////// - //real omega = omega_in; - //////////////////////////////////////////////////////////////////////////////////// - real oMdrho = c1o1; // comp special - //////////////////////////////////////////////////////////////////////////////////// - real m0, m1, m2; - ////////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimitP = 0.01f;// * 0.0001f; - real qudricLimitM = 0.01f;// * 0.0001f; - real qudricLimitD = 0.01f;// * 0.001f; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; //set the bulk viscosity one is high / two is very low and zero is (too) high - - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - real OxyyPxzz = c1o1; - real OxyyMxzz = c1o1; - real Oxyz = c1o1; - //////////////////////////////////////////////////////////// - //4. - ////////////////////////////// - real O4 = c1o1; - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = c1o1; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = c1o1; - //////////////////////////////////////////////////////////// - - - //central moments to cumulants - //4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - //+ c1o27*(one -three/rho +two/(rho*rho))); - - - - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - ////////////////////////////////////////////////////////////////////////// - //real magicBulk = (CUMacc + CUMcac + CUMcca)*(c1o1 / OxxPyyPzz - c1o2)*c3o2*8.; - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 1 - //real oxxyy,oxxzz,oxy,oxz,oyz; - //real smag=0.001; - //oxxyy = omega+(one-omega)*abs(mxxMyy)/(abs(mxxMyy)+smag); - //oxxzz = omega+(one-omega)*abs(mxxMzz)/(abs(mxxMzz)+smag); - //oxy = omega+(one-omega)*abs(mfbba)/(abs(mfbba)+smag); - //oxz = omega+(one-omega)*abs(mfbab)/(abs(mfbab)+smag); - //oyz = omega+(one-omega)*abs(mfabb)/(abs(mfabb)+smag); - - //////////////////////////////////////////////////////////////////////////// - ////Teil 1b - //real constante = 1000.0; - //real nuEddi = constante * abs(mxxPyyPzz); - //real omegaLimit = one / (one / omega + three * nuEddi); - - //{ - // real dxux = c1o2 * (-omegaLimit) *(mxxMyy + mxxMzz) + OxxPyyPzz * (mfaaa - mxxPyyPzz); - // real dyuy = dxux + omegaLimit * c3o2 * mxxMyy; - // real dzuz = dxux + omegaLimit * c3o2 * mxxMzz; - - ////relax - //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - //mxxMyy += omegaLimit * (-mxxMyy) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vy2 * dyuy); - //mxxMzz += omegaLimit * (-mxxMzz) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vz2 * dzuz); - - //} - //mfabb += omegaLimit * (-mfabb); - //mfbab += omegaLimit * (-mfbab); - //mfbba += omegaLimit * (-mfbba); - //////////////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - { - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - ////relax original - //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - //mxxMyy += omega * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - //mxxMzz += omega * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - //relax porous media Mp - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz + rho * (vx2 + vy2 + vz2) * (c1o1 / porosity - c1o1)) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - //relax porous media Ms - mxxMyy += omega * (rho * (vx2 - vy2) * (c1o1 / porosity - c1o1) - mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (rho * (vx2 - vz2) * (c1o1 / porosity - c1o1) - mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 2 - //mxxMyy += oxxyy * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); - //mxxMzz += oxxzz * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); - ////////////////////////////////////////////////////////////////////////// - - } - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////original - //mfabb += omega * (-mfabb); - //mfbab += omega * (-mfbab); - //mfbba += omega * (-mfbba); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //porous media M11 - mfabb += omega * (rho * vvy * vvz * (c1o1 / porosity - c1o1) - mfabb); - mfbab += omega * (rho * vvx * vvz * (c1o1 / porosity - c1o1) - mfbab); - mfbba += omega * (rho * vvx * vvy * (c1o1 / porosity - c1o1) - mfbba); - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 3 - //mfabb += oyz * (-mfabb); - //mfbab += oxz * (-mfbab); - //mfbba += oxy * (-mfbba); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - ////////////////////////////////////////////////////////////////////////// - //das ist der limiter - wadjust = Oxyz + (c1o1 - Oxyz)*abs(mfbbb) / (abs(mfbbb) + qudricLimitD); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimitP); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimitM); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimitP); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimitM); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimitP); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimitM); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //mfbbb += OxyyMxzz * (-mfbbb); - //mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - //mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - //mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - //mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - //mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - //mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - - //// linear combinations back - - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - //mit limiter - // wadjust = O4+(one-O4)*abs(CUMacc)/(abs(CUMacc)+qudricLimit); - //CUMacc += wadjust * (-CUMacc); - // wadjust = O4+(one-O4)*abs(CUMcac)/(abs(CUMcac)+qudricLimit); - //CUMcac += wadjust * (-CUMcac); - // wadjust = O4+(one-O4)*abs(CUMcca)/(abs(CUMcca)+qudricLimit); - //CUMcca += wadjust * (-CUMcca); - - // wadjust = O4+(one-O4)*abs(CUMbbc)/(abs(CUMbbc)+qudricLimit); - //CUMbbc += wadjust * (-CUMbbc); - // wadjust = O4+(one-O4)*abs(CUMbcb)/(abs(CUMbcb)+qudricLimit); - //CUMbcb += wadjust * (-CUMbcb); - // wadjust = O4+(one-O4)*abs(CUMcbb)/(abs(CUMcbb)+qudricLimit); - //CUMcbb += wadjust * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - //+ c1o27*(one -three/rho +two/(rho*rho))); - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb; - (D.f[DIR_M00])[kw] = mfcbb; - (D.f[DIR_0P0])[k] = mfbab; - (D.f[DIR_0M0])[ks] = mfbcb; - (D.f[DIR_00P])[k] = mfbba; - (D.f[DIR_00M])[kb] = mfbbc; - (D.f[DIR_PP0])[k] = mfaab; - (D.f[DIR_MM0])[ksw] = mfccb; - (D.f[DIR_PM0])[ks] = mfacb; - (D.f[DIR_MP0])[kw] = mfcab; - (D.f[DIR_P0P])[k] = mfaba; - (D.f[DIR_M0M])[kbw] = mfcbc; - (D.f[DIR_P0M])[kb] = mfabc; - (D.f[DIR_M0P])[kw] = mfcba; - (D.f[DIR_0PP])[k] = mfbaa; - (D.f[DIR_0MM])[kbs] = mfbcc; - (D.f[DIR_0PM])[kb] = mfbac; - (D.f[DIR_0MP])[ks] = mfbca; - (D.f[DIR_000])[k] = mfbbb; - (D.f[DIR_PPP])[k] = mfaaa; - (D.f[DIR_PMP])[ks] = mfaca; - (D.f[DIR_PPM])[kb] = mfaac; - (D.f[DIR_PMM])[kbs] = mfacc; - (D.f[DIR_MPP])[kw] = mfcaa; - (D.f[DIR_MMP])[ksw] = mfcca; - (D.f[DIR_MPM])[kbw] = mfcac; - (D.f[DIR_MMM])[kbsw] = mfccc; - //////////////////////////////////////////////////////////////////////////////////// - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27_Device.cuh deleted file mode 100644 index f2cf530b5d331c71d4a13bd5882a3657a3bbddea..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27_Device.cuh +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef LB_KERNEL_PM_CUM_ONE_COMP_SP_27_H -#define LB_KERNEL_PM_CUM_ONE_COMP_SP_27_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void LB_Kernel_PM_Cum_One_Comp_SP_27(real omega, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - int level, - real* forces, - real porosity, - real darcy, - real forchheimer, - unsigned int sizeOfPorousMedia, - unsigned int* nodeIdsPorousMedia, - bool EvenOrOdd); - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/PMFluidFlowCompStrategy.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/PMFluidFlowCompStrategy.cpp deleted file mode 100644 index 553800d738bb5ed56f17a0e0bba181961b8e31bf..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/PMFluidFlowCompStrategy.cpp +++ /dev/null @@ -1,26 +0,0 @@ -#include "PMFluidFlowCompStrategy.h" - -#include "Parameter/Parameter.h" - -std::shared_ptr<PMFluidFlowCompStrategy> PMFluidFlowCompStrategy::getInstance() -{ - static std::shared_ptr<PMFluidFlowCompStrategy> uniqueInstance; - if (!uniqueInstance) - uniqueInstance = std::shared_ptr<PMFluidFlowCompStrategy>(new PMFluidFlowCompStrategy()); - return uniqueInstance; -} - -bool PMFluidFlowCompStrategy::checkParameter(std::shared_ptr<Parameter> para) -{ - if (para->getUseWale()) - return false; - else if (!para->getCompOn()) - return false; - else if (!para->getSimulatePorousMedia()) - return false; - else - return true; -} - -PMFluidFlowCompStrategy::PMFluidFlowCompStrategy(){ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/PMFluidFlowCompStrategy.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/PMFluidFlowCompStrategy.h deleted file mode 100644 index c56dda07a724a506439b159d3824533bcc8e441f..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/PMFluidFlowCompStrategy.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef PM_FLUID_FLOW_COMP_STRATEGY_H -#define PM_FLUID_FLOW_COMP_STRATEGY_H - -#include "Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h" - - -class PMFluidFlowCompStrategy : public CheckParameterStrategy -{ -public: - static std::shared_ptr<PMFluidFlowCompStrategy> getInstance(); - - bool checkParameter(std::shared_ptr<Parameter> para); - -private: - PMFluidFlowCompStrategy(); - -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp.cu deleted file mode 100644 index cfcc544aac2172cef2f4d58600931db8ccfa0189..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp.cu +++ /dev/null @@ -1,63 +0,0 @@ -#include "WaleCumulantK15Comp.h" - -#include "WaleCumulantK15Comp_Device.cuh" -#include "Parameter/Parameter.h" - -std::shared_ptr<WaleCumulantK15Comp> WaleCumulantK15Comp::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<WaleCumulantK15Comp>(new WaleCumulantK15Comp(para, level)); -} - -void WaleCumulantK15Comp::run() -{ - int size_Mat = (int)para->getParD(level)->numberOfNodes; - int numberOfThreads = para->getParD(level)->numberofthreads; - - int Grid = (size_Mat / numberOfThreads) + 1; - int Grid1, Grid2; - if (Grid > 512) - { - Grid1 = 512; - Grid2 = (Grid / Grid1) + 1; - } - else - { - Grid1 = 1; - Grid2 = Grid; - } - dim3 grid(Grid1, Grid2, 1); - dim3 threads(numberOfThreads, 1, 1); - - LB_Kernel_WaleCumulantK15Comp <<< grid, threads >>>( - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->neighborInverse, - para->getParD(level)->velocityX, - para->getParD(level)->velocityY, - para->getParD(level)->velocityZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->turbViscosity, - para->getParD(level)->numberOfNodes, - level, - para->getTimestepOfCoarseLevel(), - para->getForcesDev(), - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_Kernel_WaleCumulantK15Comp execution failed"); -} - -WaleCumulantK15Comp::WaleCumulantK15Comp(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitCompSP27); - - -} - -WaleCumulantK15Comp::WaleCumulantK15Comp() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp.h deleted file mode 100644 index b669c8d5ae7d69a2009d4d3db82196827a4e676a..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef WALE_CUMULANT_K15_COMP_H -#define WALE_CUMULANT_K15_COMP_H - -#include "Kernel/KernelImp.h" - -class WaleCumulantK15Comp : public KernelImp -{ -public: - static std::shared_ptr<WaleCumulantK15Comp> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - WaleCumulantK15Comp(); - WaleCumulantK15Comp(std::shared_ptr< Parameter> para, int level); - -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp_Device.cu deleted file mode 100644 index 62658ccbdcead27f77d3b72d2daa311ade5baa59..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp_Device.cu +++ /dev/null @@ -1,1213 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void LB_Kernel_WaleCumulantK15Comp( - real omega_in, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* neighborWSB, - real* veloX, - real* veloY, - real* veloZ, - real* DDStart, - real* turbulentViscosity, - int size_Mat, - int level, - unsigned int timestep, - real* forces, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if( BC == GEO_FLUID /*(BC != GEO_SOLID) && (BC != GEO_VOID)*/ ) - { - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k ]; - real mfabb = (D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k ]; - real mfbab = (D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k ]; - real mfbba = (D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k ]; - real mfaab = (D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks ]; - real mfacb = (D.f[DIR_MP0])[kw ]; - real mfcbc = (D.f[DIR_P0P])[k ]; - real mfaba = (D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb ]; - real mfabc = (D.f[DIR_M0P])[kw ]; - real mfbcc = (D.f[DIR_0PP])[k ]; - real mfbaa = (D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb ]; - real mfbac = (D.f[DIR_0MP])[ks ]; - real mfbbb = (D.f[DIR_000])[k ]; - real mfccc = (D.f[DIR_PPP])[k ]; - real mfaac = (D.f[DIR_MMP])[ksw]; - real mfcac = (D.f[DIR_PMP])[ks ]; - real mfacc = (D.f[DIR_MPP])[kw ]; - real mfcca = (D.f[DIR_PPM])[kb ]; - real mfaaa = (D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs]; - real mfaca = (D.f[DIR_MPM])[kbw]; - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + - (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + - ((mfabb+mfcbb) + (mfbab+mfbcb) + (mfbba+mfbbc))) + mfbbb; - - real rho = c1o1+drho; - //////////////////////////////////////////////////////////////////////////////////// - //slow - real vvx =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + - (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + - (mfcbb-mfabb)) / rho; - real vvy =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + - (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + - (mfbcb-mfbab)) / rho; - real vvz =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + - (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + - (mfbbc-mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - real nuTurb = c0o1; - { - ///////////// Wale Model /////////////// - //neighbor index - unsigned int kPx = neighborX[k]; - unsigned int kPy = neighborY[k]; - unsigned int kPz = neighborZ[k]; - unsigned int kMxyz = neighborWSB[k]; - unsigned int kMx = neighborZ[neighborY[kMxyz]]; - unsigned int kMy = neighborZ[neighborX[kMxyz]]; - unsigned int kMz = neighborY[neighborX[kMxyz]]; - //getVeloX// - real veloXNeighborPx = veloX[kPx]; - real veloXNeighborMx = veloX[kMx]; - real veloXNeighborPy = veloX[kPy]; - real veloXNeighborMy = veloX[kMy]; - real veloXNeighborPz = veloX[kPz]; - real veloXNeighborMz = veloX[kMz]; - //getVeloY// - real veloYNeighborPx = veloY[kPx]; - real veloYNeighborMx = veloY[kMx]; - real veloYNeighborPy = veloY[kPy]; - real veloYNeighborMy = veloY[kMy]; - real veloYNeighborPz = veloY[kPz]; - real veloYNeighborMz = veloY[kMz]; - //getVeloZ// - real veloZNeighborPx = veloZ[kPx]; - real veloZNeighborMx = veloZ[kMx]; - real veloZNeighborPy = veloZ[kPy]; - real veloZNeighborMy = veloZ[kMy]; - real veloZNeighborPz = veloZ[kPz]; - real veloZNeighborMz = veloZ[kMz]; - //getVeloLocal// - real veloLocalX = veloX[k]; - real veloLocalY = veloY[k]; - real veloLocalZ = veloZ[k]; - - ////////////////////////////////////////////////////////////////////////////// - real dxvx = c0o1; - real dyvx = c0o1; - real dzvx = c0o1; - real dxvy = c0o1; - real dyvy = c0o1; - real dzvy = c0o1; - real dxvz = c0o1; - real dyvz = c0o1; - real dzvz = c0o1; - real SumSd = c0o1; - real SumS = c0o1; - ////////////////////////////////////////////////////////////////////////////// - //no central differences at the boundary nodes - //Dx - if (bcMatD[kPx] != GEO_FLUID) - { - dxvx = (veloLocalX - veloXNeighborMx); - dxvy = (veloLocalY - veloYNeighborMx); - dxvz = (veloLocalZ - veloZNeighborMx); - } - else if (bcMatD[kMx] != GEO_FLUID) - { - dxvx = (veloXNeighborPx - veloLocalX); - dxvy = (veloYNeighborPx - veloLocalY); - dxvz = (veloZNeighborPx - veloLocalZ); - } - else - { - dxvx = (veloXNeighborPx - veloXNeighborMx) / c2o1; - dxvy = (veloYNeighborPx - veloYNeighborMx) / c2o1; - dxvz = (veloZNeighborPx - veloZNeighborMx) / c2o1; - } - //Dy - if (bcMatD[kPy] != GEO_FLUID) - { - dyvx = (veloLocalX - veloXNeighborMy); - dyvy = (veloLocalY - veloYNeighborMy); - dyvz = (veloLocalZ - veloZNeighborMy); - } - else if (bcMatD[kMy] != GEO_FLUID) - { - dyvx = (veloXNeighborPy - veloLocalX); - dyvy = (veloYNeighborPy - veloLocalY); - dyvz = (veloZNeighborPy - veloLocalZ); - } - else - { - dyvx = (veloXNeighborPy - veloXNeighborMy) / c2o1; - dyvy = (veloYNeighborPy - veloYNeighborMy) / c2o1; - dyvz = (veloZNeighborPy - veloZNeighborMy) / c2o1; - } - //Dz - if (bcMatD[kPz] != GEO_FLUID) - { - dzvx = (veloLocalX - veloXNeighborMz); - dzvy = (veloLocalY - veloYNeighborMz); - dzvz = (veloLocalZ - veloZNeighborMz); - } - else if (bcMatD[kMz] != GEO_FLUID) - { - dzvx = (veloXNeighborPz - veloLocalX); - dzvy = (veloYNeighborPz - veloLocalY); - dzvz = (veloZNeighborPz - veloLocalZ); - } - else - { - dzvx = (veloXNeighborPz - veloXNeighborMz) / c2o1; - dzvy = (veloYNeighborPz - veloYNeighborMz) / c2o1; - dzvz = (veloZNeighborPz - veloZNeighborMz) / c2o1; - } - ////////////////////////////////////////////////////////////////////////////// - ////partial Div vx in x, y, z// - //dxvx = (veloXNeighborPx - veloXNeighborMx) / two; //deltaX * two?? - //dyvx = (veloXNeighborPy - veloXNeighborMy) / two; //deltaX * two?? - //dzvx = (veloXNeighborPz - veloXNeighborMz) / two; //deltaX * two?? - // //partial Div vy in x, y, z// - //dxvy = (veloYNeighborPx - veloYNeighborMx) / two; //deltaX * two?? - //dyvy = (veloYNeighborPy - veloYNeighborMy) / two; //deltaX * two?? - //dzvy = (veloYNeighborPz - veloYNeighborMz) / two; //deltaX * two?? - // //partial Div vz in x, y, z// - //dxvz = (veloZNeighborPx - veloZNeighborMx) / two; //deltaX * two?? - //dyvz = (veloZNeighborPy - veloZNeighborMy) / two; //deltaX * two?? - //dzvz = (veloZNeighborPz - veloZNeighborMz) / two; //deltaX * two?? - - real g11, g12, g13, g21, g22, g23, g31, g32, g33; - real g11sq, g12sq, g13sq, g21sq, g22sq, g23sq, g31sq, g32sq, g33sq; - - g11 = dxvx; - g12 = dyvx; - g13 = dzvx; - g21 = dxvy; - g22 = dyvy; - g23 = dzvy; - g31 = dxvz; - g32 = dyvz; - g33 = dzvz; - - g11sq = g11 * g11 + g12 * g21 + g13 * g31; - g12sq = g11 * g12 + g12 * g22 + g13 * g32; - g13sq = g11 * g13 + g12 * g23 + g13 * g33; - g21sq = g21 * g11 + g22 * g21 + g23 * g31; - g22sq = g21 * g12 + g22 * g22 + g23 * g32; - g23sq = g21 * g13 + g22 * g23 + g23 * g33; - g31sq = g31 * g11 + g32 * g21 + g33 * g31; - g32sq = g31 * g12 + g32 * g22 + g33 * g32; - g33sq = g31 * g13 * g32 * g23 + g33 * g33; - - real gkk = g11sq + g22sq + g33sq; - - real Sd11 = c1o2 * (g11sq + g11sq) - c1o3 * gkk; - real Sd12 = c1o2 * (g12sq + g21sq); - real Sd13 = c1o2 * (g13sq + g31sq); - real Sd21 = c1o2 * (g21sq + g12sq); // ==Sd12 - real Sd22 = c1o2 * (g22sq + g22sq) - c1o3 * gkk; - real Sd23 = c1o2 * (g23sq + g32sq); - real Sd31 = c1o2 * (g31sq + g13sq); // ==Sd13 - real Sd32 = c1o2 * (g32sq + g23sq); // ==Sd23 - real Sd33 = c1o2 * (g33sq + g33sq) - c1o3 * gkk; - - SumSd = Sd11*Sd11 + Sd12*Sd12 + Sd13*Sd13 + Sd21*Sd21 + Sd22*Sd22 + Sd23*Sd23 + Sd31*Sd31 + Sd32*Sd32 + Sd33*Sd33; - - - - //real SumSd = - // c1o2 * powf(dzvx, four) + - // c1o2 * powf(dzvy, four) + - // c2o3 * powf(dzvz, four) + - // c2o3 * powf(dyvy, four) + - // c1o2 * powf(dyvz, four) + - // c2o3 * powf(dxvx, four) + - // c1o2 * powf(dxvy, four) + - // c1o2 * powf(dxvz, four) + - // c1o2 * powf(dyvx, four) + - // powf(dyvx, two) * powf(dxvy, two) + - // powf(dzvx, two) * powf(dxvz, two) + - // powf(dzvy, two) * powf(dyvz, two) - - // c2o3 * powf(dzvz, two) * powf(dyvy, two) - - // c2o3 * powf(dzvz, two) * powf(dxvx, two) - - // c2o3 * powf(dyvy, two) * powf(dxvx, two); //powf - //real SumSd = - // ((c1o2 * (((dzvx*dzvx)*(dzvx*dzvx)) + - // ((dzvy*dzvy)*(dzvy*dzvy)) + - // ((dyvz*dyvz)*(dyvz*dyvz)) + - // ((dyvx*dyvx)*(dyvx*dyvx)) + - // ((dxvy*dxvy)*(dxvy*dxvy)) + - // ((dxvz*dxvz)*(dxvz*dxvz)))) + - // (c2o3 * (((dxvx*dxvx)*(dxvx*dxvx)) + - // ((dyvy*dyvy)*(dyvy*dyvy)) + - // ((dzvz*dzvz)*(dzvz*dzvz)))) + - // ((dyvx * dyvx) * (dxvy * dxvy)) + - // ((dzvx * dzvx) * (dxvz * dxvz)) + - // ((dzvy * dzvy) * (dyvz * dyvz))) - - // (c2o3 * ((dzvz * dzvz) * (dyvy * dyvy)) + - // ((dzvz * dzvz) * (dxvx * dxvx)) + - // ((dyvy * dyvy) * (dxvx * dxvx))); //explicit - //real SumSd = - // c1o2 * pow(dzvx, four) + - // c1o2 * pow(dzvy, four) + - // c2o3 * pow(dzvz, four) + - // c2o3 * pow(dyvy, four) + - // c1o2 * pow(dyvz, four) + - // c2o3 * pow(dxvx, four) + - // c1o2 * pow(dxvy, four) + - // c1o2 * pow(dxvz, four) + - // c1o2 * pow(dyvx, four) + - // pow(dyvx, two) * pow(dxvy, two) + - // pow(dzvx, two) * pow(dxvz, two) + - // pow(dzvy, two) * pow(dyvz, two) - - // c2o3 * pow(dzvz, two) * pow(dyvy, two) - - // c2o3 * pow(dzvz, two) * pow(dxvx, two) - - // c2o3 * pow(dyvy, two) * pow(dxvx, two); //pow - //SumS - //real SumS = - // powf(dxvx, two) + - // powf(dyvy, two) + - // powf(dzvz, two) + - // c1o2 * powf(dyvx + dxvy, two) + - // c1o2 * powf(dzvx + dxvz, two) + - // c1o2 * powf(dyvz + dzvy, two); //powf - SumS = - ((dxvx * dxvx) + - (dyvy * dyvy) + - (dzvz * dzvz)) + - (c1o2 * (((dyvx + dxvy) * (dyvx + dxvy)) + - ((dzvx + dxvz) * (dzvx + dxvz)) + - ((dyvz + dzvy) * (dyvz + dzvy)))); //explicit - //real SumS = - // pow(dxvx, two) + - // pow(dyvy, two) + - // pow(dzvz, two) + - // c1o2 * pow(dyvx + dxvy, two) + - // c1o2 * pow(dzvx + dxvz, two) + - // c1o2 * pow(dyvz + dzvy, two); //pow - //nu turbulent - real coefficient = 0.5; //0.325; // - real delta = coefficient * c1o1; - ///////////////////////////////// - //real SumSsq = SumS * SumS; - //real SumSDsq = SumSd * SumSd; - real SumSsq = SumS; - real SumSDsq = SumSd; - //nuTurb = powf(delta, two) * powf(SumSDsq, c3o2) / (powf(SumSsq, c5o2) + powf(SumSDsq, c5o4) + smallSingle); //powf - //nuTurb = pow(delta, two) * pow(SumSDsq, c3o2) / (pow(SumSsq, c5o2) + pow(SumSDsq, c5o4) + smallSingle); //pow - //nuTurb = (delta * delta) * (real)pow((double)SumSDsq, 1.5) / ((real)pow((double)SumSsq, 2.5) + (real)pow((double)SumSDsq, 1.25) + smallSingle); //SMversion// - nuTurb = (delta * delta) * (real)pow((double)SumSDsq, 0.25) / - ((real)pow(((double)pow((double)SumSsq, 0.5) / ((real)pow((double)SumSDsq, 0.25) + c10eM10)), 5.0) + c1o1); //SMversion2// - ///////////////////////////////// - //nuTurb = rho * powf(delta, two) * powf(SumSd*SumSd, c3o2) / (powf(SumS*SumS, c5o2) + powf(SumSd*SumSd, c5o4)); - //nuTurb = powf(delta, two) * powf(SumSd*SumSd, c3o2) / (powf(SumS*SumS, c5o2) + powf(SumSd*SumSd, c5o4)); - } - //Test debug - //if (nuTurb > c1o100) nuTurb = c1o100; - //if (nuTurb < -c1o100) nuTurb = -c1o100; - //nuTurb = c1o100; - turbulentViscosity[k] = nuTurb; - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - { - real fx = forces[0] / (pow((double)c2o1, (double)level)); //zero;//0.0032653/(pow(two,level)); //0.000000005;//(two/1600000.0) / 120.0; // - real fy = forces[1] / (pow((double)c2o1, (double)level)); //zero; - real fz = forces[2] / (pow((double)c2o1, (double)level)); //zero; - vvx += fx*c1o2; - vvy += fy*c1o2; - vvz += fz*c1o2; - } - //////////////////////////////////////////////////////////////////////////////////// - real omega = omega_in; - if (timestep >= 500000) - { - real nuOld = c1o3 * (c1o1 / omega_in - c1o2); - omega = c1o1 / (c3o1 * (nuOld + nuTurb) + c1o2); - } - //////////////////////////////////////////////////////////////////////////////////// - //fast - real oMdrho = c1o1; // comp special - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2=vvx*vvx; - vy2=vvy*vvy; - vz2=vvz*vvz; - ////////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimitP = 0.01f;// * 0.0001f; - real qudricLimitM = 0.01f;// * 0.0001f; - real qudricLimitD = 0.01f;// * 0.001f; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; - - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - real OxyyPxzz = c1o1; - real OxyyMxzz = c1o1; - real Oxyz = c1o1; - //////////////////////////////////////////////////////////// - //4. - ////////////////////////////// - real O4 = c1o1; - ////////////////////////////// - //real O4 = omega;//TRT - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = c1o1; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = c1o1; - //////////////////////////////////////////////////////////// - - - //central moments to cumulants - //4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho/rho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho/rho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho/rho)); - - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) ) / rho ; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) ) / rho ; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) ) / rho ; - - //6. - - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - +( c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) /rho - - c1o9 * (mfcaa + mfaca + mfaac) /rho - +( c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho)/(rho*rho))); - //+ c1o27*(one -three/rho +two/(rho*rho))); - - - - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - ////////////////////////////////////////////////////////////////////////// -// real magicBulk=(CUMacc+CUMcac+CUMcca)*(one/OxxPyyPzz-c1o2)*c3o2*8.; - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 1 - //real oxxyy,oxxzz,oxy,oxz,oyz; - //real smag=0.001; - //oxxyy = omega+(one-omega)*abs(mxxMyy)/(abs(mxxMyy)+smag); - //oxxzz = omega+(one-omega)*abs(mxxMzz)/(abs(mxxMzz)+smag); - //oxy = omega+(one-omega)*abs(mfbba)/(abs(mfbba)+smag); - //oxz = omega+(one-omega)*abs(mfbab)/(abs(mfbab)+smag); - //oyz = omega+(one-omega)*abs(mfabb)/(abs(mfabb)+smag); - - //////////////////////////////////////////////////////////////////////////// - ////Teil 1b - //real constante = 1000.0; - //real nuEddi = constante * abs(mxxPyyPzz); - //real omegaLimit = one / (one / omega + three * nuEddi); - - //{ - // real dxux = c1o2 * (-omegaLimit) *(mxxMyy + mxxMzz) + OxxPyyPzz * (mfaaa - mxxPyyPzz); - // real dyuy = dxux + omegaLimit * c3o2 * mxxMyy; - // real dzuz = dxux + omegaLimit * c3o2 * mxxMzz; - - ////relax - //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- three * (one - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - //mxxMyy += omegaLimit * (-mxxMyy) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vy2 * dyuy); - //mxxMzz += omegaLimit * (-mxxMzz) - three * (one + c1o2 * (-omegaLimit)) * (vx2 * dxux + vz2 * dzuz); - - //} - //mfabb += omegaLimit * (-mfabb); - //mfbab += omegaLimit * (-mfbab); - //mfbba += omegaLimit * (-mfbba); - //////////////////////////////////////////////////////////////////////////// - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - { - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 2 - //mxxMyy += oxxyy * (-mxxMyy) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vy2 * dyuy); - //mxxMzz += oxxzz * (-mxxMzz) - three * (one + c1o2 * (-omega)) * (vx2 * dxux + vz2 * dzuz); - ////////////////////////////////////////////////////////////////////////// - - } - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - - ////////////////////////////////////////////////////////////////////////// - //limiter-Scheise Teil 3 - //mfabb += oyz * (-mfabb); - //mfbab += oxz * (-mfbab); - //mfbba += oxy * (-mfbba); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcaa = c1o3 * ( mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * ( mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - ////////////////////////////////////////////////////////////////////////// - //das ist der limiter - wadjust = Oxyz+(c1o1-Oxyz)*abs(mfbbb)/(abs(mfbbb)+qudricLimitD); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxxyPyzz)/(abs(mxxyPyzz)+qudricLimitP); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxxyMyzz)/(abs(mxxyMyzz)+qudricLimitM); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxxzPyyz)/(abs(mxxzPyyz)+qudricLimitP); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxxzMyyz)/(abs(mxxzMyyz)+qudricLimitM); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxyyPxzz)/(abs(mxyyPxzz)+qudricLimitP); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxyyMxzz)/(abs(mxyyMxzz)+qudricLimitM); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //mfbbb += OxyyMxzz * (-mfbbb); - //mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - //mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - //mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - //mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - //mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - //mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - //mit limiter - // wadjust = O4+(one-O4)*abs(CUMacc)/(abs(CUMacc)+qudricLimit); - //CUMacc += wadjust * (-CUMacc); - // wadjust = O4+(one-O4)*abs(CUMcac)/(abs(CUMcac)+qudricLimit); - //CUMcac += wadjust * (-CUMcac); - // wadjust = O4+(one-O4)*abs(CUMcca)/(abs(CUMcca)+qudricLimit); - //CUMcca += wadjust * (-CUMcca); - - // wadjust = O4+(one-O4)*abs(CUMbbc)/(abs(CUMbbc)+qudricLimit); - //CUMbbc += wadjust * (-CUMbbc); - // wadjust = O4+(one-O4)*abs(CUMbcb)/(abs(CUMbcb)+qudricLimit); - //CUMbcb += wadjust * (-CUMbcb); - // wadjust = O4+(one-O4)*abs(CUMcbb)/(abs(CUMcbb)+qudricLimit); - //CUMcbb += wadjust * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; //ab 15.05.2015 verwendet - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; //ab 15.05.2015 verwendet - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; //ab 15.05.2015 verwendet - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho/rho));//(one/rho-one)); - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho/rho));//(one/rho-one)); - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho/rho));//(one/rho-one)); - - //5. - mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) ) / rho ; - mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) ) / rho ; - mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) ) / rho ; - - //6. - - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - +( c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) /rho - - c1o9 * (mfcaa + mfaca + mfaac) /rho - +( c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho)/(rho*rho))); - //+ c1o27*(one -three/rho +two/(rho*rho))); - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1- vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * ( vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * ( vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1- vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * ( vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1- vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * ( vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1- vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * ( vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * ( vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1- vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * ( vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * ( vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1- vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * ( vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1- vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * ( vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1- vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * ( vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1- vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1- vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1- vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1- vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * ( vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1- vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * ( vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * ( vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1- vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * ( vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * ( vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1- vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * ( vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1- vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1- vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1- vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1- vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[ DIR_P00 ])[k ] = mfabb; - (D.f[ DIR_M00 ])[kw ] = mfcbb; - (D.f[ DIR_0P0 ])[k ] = mfbab; - (D.f[ DIR_0M0 ])[ks ] = mfbcb; - (D.f[ DIR_00P ])[k ] = mfbba; - (D.f[ DIR_00M ])[kb ] = mfbbc; - (D.f[ DIR_PP0 ])[k ] = mfaab; - (D.f[ DIR_MM0 ])[ksw ] = mfccb; - (D.f[ DIR_PM0 ])[ks ] = mfacb; - (D.f[ DIR_MP0 ])[kw ] = mfcab; - (D.f[ DIR_P0P ])[k ] = mfaba; - (D.f[ DIR_M0M ])[kbw ] = mfcbc; - (D.f[ DIR_P0M ])[kb ] = mfabc; - (D.f[ DIR_M0P ])[kw ] = mfcba; - (D.f[ DIR_0PP ])[k ] = mfbaa; - (D.f[ DIR_0MM ])[kbs ] = mfbcc; - (D.f[ DIR_0PM ])[kb ] = mfbac; - (D.f[ DIR_0MP ])[ks ] = mfbca; - (D.f[ DIR_000])[k ] = mfbbb; - (D.f[ DIR_PPP ])[k ] = mfaaa; - (D.f[ DIR_PMP ])[ks ] = mfaca; - (D.f[ DIR_PPM ])[kb ] = mfaac; - (D.f[ DIR_PMM ])[kbs ] = mfacc; - (D.f[ DIR_MPP ])[kw ] = mfcaa; - (D.f[ DIR_MMP ])[ksw ] = mfcca; - (D.f[ DIR_MPM ])[kbw ] = mfcac; - (D.f[ DIR_MMM ])[kbsw] = mfccc; - //////////////////////////////////////////////////////////////////////////////////// - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp_Device.cuh deleted file mode 100644 index fad3eb11434b9c3fd216a7698b9275d4af43245c..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp_Device.cuh +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef LB_KERNEL_WALE_CUMULANT_K15_COMP_H -#define LB_KERNEL_WALE_CUMULANT_K15_COMP_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void LB_Kernel_WaleCumulantK15Comp(real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* neighborWSB, - real* veloX, - real* veloY, - real* veloZ, - real* DDStart, - real* turbulentViscosity, - int size_Mat, - int level, - unsigned int timestep, - real* forces, - bool EvenOrOdd); - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp.cu deleted file mode 100644 index 05e257a52b38e2c31badcb1fb739de3ab0239f6e..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp.cu +++ /dev/null @@ -1,66 +0,0 @@ -#include "WaleBySoniMalavCumulantK15Comp.h" - -#include "WaleBySoniMalavCumulantK15Comp_Device.cuh" -#include "Parameter/Parameter.h" - -std::shared_ptr<WaleBySoniMalavCumulantK15Comp> WaleBySoniMalavCumulantK15Comp::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<WaleBySoniMalavCumulantK15Comp>(new WaleBySoniMalavCumulantK15Comp(para, level)); -} - -void WaleBySoniMalavCumulantK15Comp::run() -{ - int size_Mat = (int)para->getParD(level)->numberOfNodes; - int numberOfThreads = para->getParD(level)->numberofthreads; - - //int Grid = size_Array / numberOfThreads; - //dim3 grid(Grid, 1, 1); - //dim3 threads(numberOfThreads, 1, 1 ); - - int Grid = (size_Mat / numberOfThreads) + 1; - int Grid1, Grid2; - if (Grid > 512) - { - Grid1 = 512; - Grid2 = (Grid / Grid1) + 1; - } - else - { - Grid1 = 1; - Grid2 = Grid; - } - dim3 grid(Grid1, Grid2, 1); - dim3 threads(numberOfThreads, 1, 1); - - LB_Kernel_WaleBySoniMalavCumulantK15Comp <<< grid, threads >>>( - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->neighborInverse, - para->getParD(level)->velocityX, - para->getParD(level)->velocityY, - para->getParD(level)->velocityZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->turbViscosity, - para->getParD(level)->numberOfNodes, - level, - para->getForcesDev(), - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_Kernel_WaleBySoniMalavCumulantK15Comp execution failed"); -} - -WaleBySoniMalavCumulantK15Comp::WaleBySoniMalavCumulantK15Comp(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitCompSP27); - - -} - -WaleBySoniMalavCumulantK15Comp::WaleBySoniMalavCumulantK15Comp() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp.h deleted file mode 100644 index e1890f45d94df8814d03e6bb484ecbb6c312a6e6..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef WALE_CUMULANT_K15_COMP_BY_SONI_MALAV_H -#define WALE_CUMULANT_K15_COMP_BY_SONI_MALAV_H - -#include "Kernel/KernelImp.h" - -class WaleBySoniMalavCumulantK15Comp : public KernelImp -{ -public: - static std::shared_ptr<WaleBySoniMalavCumulantK15Comp> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - WaleBySoniMalavCumulantK15Comp(); - WaleBySoniMalavCumulantK15Comp(std::shared_ptr< Parameter> para, int level); - -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp_Device.cu deleted file mode 100644 index d266aac648c6163fb24764879f391304f32aba87..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp_Device.cu +++ /dev/null @@ -1,1037 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void LB_Kernel_WaleBySoniMalavCumulantK15Comp( - real omega_in, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* neighborWSB, - real* veloX, - real* veloY, - real* veloZ, - real* DDStart, - real* turbulentViscosity, - int size_Mat, - int level, - real* forces, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if( BC == GEO_FLUID /*(BC != GEO_SOLID) && (BC != GEO_VOID)*/ ) - { - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - unsigned int kw = neighborX[k]; - unsigned int ks = neighborY[k]; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kbw = neighborZ[kw]; - unsigned int kbs = neighborZ[ks]; - unsigned int kbsw = neighborZ[ksw]; - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k ]; - real mfabb = (D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k ]; - real mfbab = (D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k ]; - real mfbba = (D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k ]; - real mfaab = (D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks ]; - real mfacb = (D.f[DIR_MP0])[kw ]; - real mfcbc = (D.f[DIR_P0P])[k ]; - real mfaba = (D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb ]; - real mfabc = (D.f[DIR_M0P])[kw ]; - real mfbcc = (D.f[DIR_0PP])[k ]; - real mfbaa = (D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb ]; - real mfbac = (D.f[DIR_0MP])[ks ]; - real mfbbb = (D.f[DIR_000])[k ]; - real mfccc = (D.f[DIR_PPP])[k ]; - real mfaac = (D.f[DIR_MMP])[ksw]; - real mfcac = (D.f[DIR_PMP])[ks ]; - real mfacc = (D.f[DIR_MPP])[kw ]; - real mfcca = (D.f[DIR_PPM])[kb ]; - real mfaaa = (D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs]; - real mfaca = (D.f[DIR_MPM])[kbw]; - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + - (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + - ((mfabb+mfcbb) + (mfbab+mfbcb) + (mfbba+mfbbc))) + mfbbb; - - real rho = c1o1+drho; - //////////////////////////////////////////////////////////////////////////////////// - //slow - real vvx =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + - (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + - (mfcbb-mfabb)) / rho; - real vvy =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + - (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + - (mfbcb-mfbab)) / rho; - real vvz =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + - (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + - (mfbbc-mfbba)) / rho; - ////////////////////////////////////////////////////////////////////////////////////// - real nuOld = c1o3 * (c1o1 / omega_in - c1o2); - real nuTurb = c0o1; - unsigned int kPx = neighborX[k]; - unsigned int kPy = neighborY[k]; - unsigned int kPz = neighborZ[k]; - unsigned int kMxyz = neighborWSB[k]; - unsigned int kMx = neighborZ[neighborY[kMxyz]]; - unsigned int kMy = neighborZ[neighborX[kMxyz]]; - unsigned int kMz = neighborY[neighborX[kMxyz]]; - - real Cw = 0.55; - unsigned int DelX = 1; - - //////////////////////////////////////////////////////////////////////////////////// - ///////////////////// WALE model /////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - // float tauTotal; - float wOper; // total relaxation time and operator for the WALE model - float dxux, dyuy, dzuz, dyux, dxuy, dzux, dxuz, dzuy, dyuz; // 9 velocity gradients required for computing the strain rate tensor and vorticity tensor - - // gradients wrt X-axis - if (bcMatD[kMx] != GEO_FLUID) - { - dxux = (veloX[kPx] - veloX[k]) / c1o1; - dxuy = (veloY[kPx] - veloY[k]) / c1o1; - dxuz = (veloZ[kPx] - veloZ[k]) / c1o1; - } - else if (bcMatD[kPx] != GEO_FLUID) - { - dxux = (veloX[k] - veloX[kMx]) / c1o1; - dxuy = (veloY[k] - veloY[kMx]) / c1o1; - dxuz = (veloZ[k] - veloZ[kMx]) / c1o1; - } - else if (bcMatD[kPx] == GEO_FLUID && bcMatD[kMx] == GEO_FLUID) - { - dxux = (veloX[kPx] - veloX[kMx]) / c2o1; - dxuy = (veloY[kPx] - veloY[kMx]) / c2o1; - dxuz = (veloZ[kPx] - veloZ[kMx]) / c2o1; - } - - // gradients wrt Y-axis - if (bcMatD[kMy] != GEO_FLUID) - { - dyux = (veloX[kPy] - veloX[k]) / c1o1; - dyuy = (veloY[kPy] - veloY[k]) / c1o1; - dyuz = (veloZ[kPy] - veloZ[k]) / c1o1; - } - else if (bcMatD[kPy] != GEO_FLUID) - { - dyux = (veloX[k] - veloX[kMy]) / c1o1; - dyuy = (veloY[k] - veloY[kMy]) / c1o1; - dyuz = (veloZ[k] - veloZ[kMy]) / c1o1; - } - else if (bcMatD[kPy] == GEO_FLUID && bcMatD[kMy] == GEO_FLUID) - { - dyux = (veloX[kPy] - veloX[kMy]) / c2o1; - dyuy = (veloY[kPy] - veloY[kMy]) / c2o1; - dyuz = (veloZ[kPy] - veloZ[kMy]) / c2o1; - } - - // gradients wrt Z-axis - if (bcMatD[kMz] != GEO_FLUID) - { - dzux = (veloX[kPz] - veloX[k]) / c1o1; - dzuy = (veloY[kPz] - veloY[k]) / c1o1; - dzuz = (veloZ[kPz] - veloZ[k]) / c1o1; - } - else if (bcMatD[kPz] != GEO_FLUID) - { - dzux = (veloX[k] - veloX[kMz]) / c1o1; - dzuy = (veloY[k] - veloY[kMz]) / c1o1; - dzuz = (veloZ[k] - veloZ[kMz]) / c1o1; - } - else if (bcMatD[kPz] == GEO_FLUID && bcMatD[kMz] == GEO_FLUID) - { - dzux = (veloX[kPz] - veloX[kMz]) / c2o1; - dzuy = (veloY[kPz] - veloY[kMz]) / c2o1; - dzuz = (veloZ[kPz] - veloZ[kMz]) / c2o1; - } - //dxux = (veloX[kPx] - veloX[kMx]) / two; dyux = (veloX[kPy] - veloX[kMy]) / two; dzux = (veloX[kPz] - veloX[kMz]) / two; - //dxuy = (veloY[kPx] - veloY[kMx]) / two; dyuy = (veloY[kPy] - veloY[kMy]) / two; dzuy = (veloY[kPz] - veloY[kMz]) / two; - //dxuz = (veloZ[kPx] - veloZ[kMx]) / two; dyuz = (veloZ[kPy] - veloZ[kMy]) / two; dzuz = (veloZ[kPz] - veloZ[kMz]) / two; - - - /////////// Computing the strain rate and the vorticity tensor /////////// - /////////// i=1, j=2, k=3 will be used as indices to compute the strain tensor components as shown below - /////////// S12 is equivalent to Sij and S13 equivalent to Sik and so on. The same applies for the vorticity tensor also//////// - - real Sii, Sij, Sik, Sji, Sjj, Sjk, Ski, Skj, Skk; // Strain tensor components - - - Sii = dxux; Sij = c1o2 * (dyux + dxuy); Sik = c1o2 * (dzux + dxuz); - Sji = Sij; Sjj = dyuy; Sjk = c1o2 * (dzuy + dyuz); - Ski = Sik; Skj = Sjk; Skk = dzuz; - - real Rij, Rik, Rji, Rjk, Rki, Rkj; // Vorticity or Rotation tensor components - // the vorticity components will have zero diagonal components - - Rij = c1o2 * (dyux - dxuy); Rik = c1o2 * (dzux - dxuz); - Rji = -1.0f * Rij; Rjk = c1o2 * (dzuy - dyuz); - Rki = -1.0f * Rik; Rkj = -1.0f * Rjk; - - ///////// Computation for the terms of the traceless tensor ///////////// - ///////// Terms for the matrix multiplication of strain tensor i.e Sik*Skj ////////// - - real S1t = Sii*Sii + Sij*Sji + Sik*Ski; real S2t = Sii*Sij + Sij*Sjj + Sik*Skj; real S3t = Sii*Sik + Sij*Sjk + Sik*Skk; - real S4t = Sji*Sii + Sjj*Sji + Sjk*Ski; real S5t = Sji*Sij + Sjj*Sjj + Sjk*Skj; real S6t = Sji*Sik + Sjj*Sjk + Sjk*Skk; - real S7t = Ski*Sii + Skj*Sji + Skk*Ski; real S8t = Ski*Sij + Skj*Sjj + Skk*Skj; real S9t = Ski*Sik + Skj*Sjk + Skk*Skk; - - ///////// Terms for the matrix multiplication of Rotation tensor i.e Rik*Rkj ////////// - - real R1t = Rij*Rji + Rik*Rki; real R2t = Rik*Rkj; real R3t = Rij*Rjk; - real R4t = Rjk*Rki; real R5t = Rji*Rij + Rjk*Rkj; real R6t = Rji*Rik; - real R7t = Rkj*Rji; real R8t = Rki*Rij; real R9t = Rki*Rik + Rkj*Rjk; - - ///// Inner product between the terms of the strain (Sij*Sij) and rotation tensor (Rij*Rij) //// - - real S2 = Sii*Sii + c2o1 * Sij*Sij + c2o1 * Sik*Sik + Sjj*Sjj + c2o1 * Sjk*Sjk + Skk*Skk; - real R2 = c2o1 * Rij*Rij + c2o1 * Rik*Rik + c2o1 * Rjk*Rjk; - - //Computation for the traceless tensor - - real traceTerm = c1o3 * (S2 - R2); - - real S1d, S2d, S3d, S4d, S5d, S6d, S7d, S8d, S9d; - - S1d = S1t + R1t - traceTerm; S2d = S2t + R2t; S3d = S3t + R3t; - S4d = S4t + R4t; S5d = S5t + R5t - traceTerm; S6d = S6t + R6t; - S7d = S7t + R7t; S8d = S8t + R8t; S9d = S9t + R9t - traceTerm; - - // Contraction of the traceless tensor - - real SdSd = S1d*S1d + S2d*S2d + S3d*S3d + S4d*S4d + S5d*S5d + S6d*S6d + S7d*S7d + S8d*S8d + S9d*S9d; - /////////////// Computing turbulent viscosity /////////////////////// - - //wOper = (real)pow((double)SdSd, 1.5) / ((real)pow((double)S2, 2.5) + (real)pow((double)SdSd, 1.25) + smallSingle);// 1e-26f); - wOper = (float)pow((double)SdSd, 0.25) / ((float)pow((double)((float)pow((double)S2, 0.5) / ((float)pow((double)SdSd, 0.25) + 1e-10)), 5.0) + 1); - - nuTurb = (Cw*Cw * DelX*DelX) * wOper; - - turbulentViscosity[k] = nuTurb; - - real omega = c1o1 / (c3o1 * (nuOld + nuTurb) + c1o2); - - ///////////// Wale Model /////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - { - real fx = forces[0] / (pow((double)c2o1, (double)level)); //zero;//0.0032653/(pow(two,level)); //0.000000005;//(two/1600000.0) / 120.0; // - real fy = forces[1] / (pow((double)c2o1, (double)level)); //zero; - real fz = forces[2] / (pow((double)c2o1, (double)level)); //zero; - vvx += fx*c1o2; - vvy += fy*c1o2; - vvz += fz*c1o2; - } - //////////////////////////////////////////////////////////////////////////////////// - //real omega = omega_in + nuTurb; - //////////////////////////////////////////////////////////////////////////////////// - //fast - real oMdrho = c1o1; // comp special - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2=vvx*vvx; - vy2=vvy*vvy; - vz2=vvz*vvz; - ////////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimitP = 0.01f;// * 0.0001f; - real qudricLimitM = 0.01f;// * 0.0001f; - real qudricLimitD = 0.01f;// * 0.001f; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; - - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - real OxyyPxzz = c1o1; - real OxyyMxzz = c1o1; - real Oxyz = c1o1; - //////////////////////////////////////////////////////////// - //4. - ////////////////////////////// - real O4 = c1o1; - ////////////////////////////// - //real O4 = omega;//TRT - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = c1o1; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = c1o1; - //////////////////////////////////////////////////////////// - - - //central moments to cumulants - //4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; //ab 15.05.2015 verwendet - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; //ab 15.05.2015 verwendet - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; //ab 15.05.2015 verwendet - - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho/rho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho/rho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho/rho)); - - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) ) / rho ; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) ) / rho ; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) ) / rho ; - - //6. - - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - +( c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) /rho - - c1o9 * (mfcaa + mfaca + mfaac) /rho - +( c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho)/(rho*rho))); - //+ c1o27*(one -three/rho +two/(rho*rho))); - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction - { - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - } - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcaa = c1o3 * ( mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * ( mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - //relax - ////////////////////////////////////////////////////////////////////////// - //das ist der limiter - wadjust = Oxyz+(c1o1-Oxyz)*abs(mfbbb)/(abs(mfbbb)+qudricLimitD); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxxyPyzz)/(abs(mxxyPyzz)+qudricLimitP); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxxyMyzz)/(abs(mxxyMyzz)+qudricLimitM); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxxzPyyz)/(abs(mxxzPyyz)+qudricLimitP); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxxzMyyz)/(abs(mxxzMyyz)+qudricLimitM); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxyyPxzz)/(abs(mxyyPxzz)+qudricLimitP); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxyyMxzz)/(abs(mxyyMxzz)+qudricLimitM); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //mfbbb += OxyyMxzz * (-mfbbb); - //mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - //mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - //mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - //mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - //mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - //mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - //mit limiter - // wadjust = O4+(one-O4)*abs(CUMacc)/(abs(CUMacc)+qudricLimit); - //CUMacc += wadjust * (-CUMacc); - // wadjust = O4+(one-O4)*abs(CUMcac)/(abs(CUMcac)+qudricLimit); - //CUMcac += wadjust * (-CUMcac); - // wadjust = O4+(one-O4)*abs(CUMcca)/(abs(CUMcca)+qudricLimit); - //CUMcca += wadjust * (-CUMcca); - - // wadjust = O4+(one-O4)*abs(CUMbbc)/(abs(CUMbbc)+qudricLimit); - //CUMbbc += wadjust * (-CUMbbc); - // wadjust = O4+(one-O4)*abs(CUMbcb)/(abs(CUMbcb)+qudricLimit); - //CUMbcb += wadjust * (-CUMbcb); - // wadjust = O4+(one-O4)*abs(CUMcbb)/(abs(CUMcbb)+qudricLimit); - //CUMcbb += wadjust * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - CUMacc += O4 * (-CUMacc); - CUMcac += O4 * (-CUMcac); - CUMcca += O4 * (-CUMcca); - - CUMbbc += O4 * (-CUMbbc); - CUMbcb += O4 * (-CUMbcb); - CUMcbb += O4 * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; //ab 15.05.2015 verwendet - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; //ab 15.05.2015 verwendet - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; //ab 15.05.2015 verwendet - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho/rho));//(one/rho-one)); - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho/rho));//(one/rho-one)); - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho/rho));//(one/rho-one)); - - //5. - mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) ) / rho ; - mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) ) / rho ; - mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) ) / rho ; - - //6. - - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - +( c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) /rho - - c1o9 * (mfcaa + mfaca + mfaac) /rho - +( c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho)/(rho*rho))); - //+ c1o27*(one -three/rho +two/(rho*rho))); - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1- vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * ( vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * ( vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1- vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * ( vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1- vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * ( vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1- vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * ( vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * ( vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1- vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * ( vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * ( vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1- vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * ( vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1- vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * ( vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1- vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * ( vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1- vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1- vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1- vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1- vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * ( vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1- vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * ( vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * ( vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1- vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * ( vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * ( vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1- vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * ( vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1- vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1- vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1- vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1- vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[ DIR_P00 ])[k ] = mfabb; - (D.f[ DIR_M00 ])[kw ] = mfcbb; - (D.f[ DIR_0P0 ])[k ] = mfbab; - (D.f[ DIR_0M0 ])[ks ] = mfbcb; - (D.f[ DIR_00P ])[k ] = mfbba; - (D.f[ DIR_00M ])[kb ] = mfbbc; - (D.f[ DIR_PP0 ])[k ] = mfaab; - (D.f[ DIR_MM0 ])[ksw ] = mfccb; - (D.f[ DIR_PM0 ])[ks ] = mfacb; - (D.f[ DIR_MP0 ])[kw ] = mfcab; - (D.f[ DIR_P0P ])[k ] = mfaba; - (D.f[ DIR_M0M ])[kbw ] = mfcbc; - (D.f[ DIR_P0M ])[kb ] = mfabc; - (D.f[ DIR_M0P ])[kw ] = mfcba; - (D.f[ DIR_0PP ])[k ] = mfbaa; - (D.f[ DIR_0MM ])[kbs ] = mfbcc; - (D.f[ DIR_0PM ])[kb ] = mfbac; - (D.f[ DIR_0MP ])[ks ] = mfbca; - (D.f[ DIR_000])[k ] = mfbbb; - (D.f[ DIR_PPP ])[k ] = mfaaa; - (D.f[ DIR_PMP ])[ks ] = mfaca; - (D.f[ DIR_PPM ])[kb ] = mfaac; - (D.f[ DIR_PMM ])[kbs ] = mfacc; - (D.f[ DIR_MPP ])[kw ] = mfcaa; - (D.f[ DIR_MMP ])[ksw ] = mfcca; - (D.f[ DIR_MPM ])[kbw ] = mfcac; - (D.f[ DIR_MMM ])[kbsw] = mfccc; - //////////////////////////////////////////////////////////////////////////////////// - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp_Device.cuh deleted file mode 100644 index 4297404073aacc0acd01b84c35cbae3d1081ed5b..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp_Device.cuh +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef LB_KERNEL_WALE_BY_SONI_MALAV_CUMULANT_K15_COMP_H -#define LB_KERNEL_WALE_BY_SONI_MALAV_CUMULANT_K15_COMP_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void LB_Kernel_WaleBySoniMalavCumulantK15Comp(real omega_in, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* neighborWSB, - real* veloX, - real* veloY, - real* veloZ, - real* DDStart, - real* turbulentViscosity, - int size_Mat, - int level, - real* forces, - bool EvenOrOdd); - - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp.cu deleted file mode 100644 index b7f4038c6b67cc4d1cf521bc7a904801650d1e8d..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp.cu +++ /dev/null @@ -1,68 +0,0 @@ -#include "WaleCumulantK17Comp.h" - -#include "WaleCumulantK17Comp_Device.cuh" -#include "Parameter/Parameter.h" - -std::shared_ptr<WaleCumulantK17Comp> WaleCumulantK17Comp::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<WaleCumulantK17Comp>(new WaleCumulantK17Comp(para, level)); -} - -void WaleCumulantK17Comp::run() -{ - int size_Mat = (int)para->getParD(level)->numberOfNodes; - int numberOfThreads = para->getParD(level)->numberofthreads; - - //int Grid = size_Array / numberOfThreads; - //dim3 grid(Grid, 1, 1); - //dim3 threads(numberOfThreads, 1, 1 ); - - int Grid = (size_Mat / numberOfThreads) + 1; - int Grid1, Grid2; - if (Grid > 512) - { - Grid1 = 512; - Grid2 = (Grid / Grid1) + 1; - } - else - { - Grid1 = 1; - Grid2 = Grid; - } - dim3 grid(Grid1, Grid2, 1); - dim3 threads(numberOfThreads, 1, 1); - - LB_Kernel_WaleCumulantK17Comp <<< grid, threads >>>( - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->neighborInverse, - para->getParD(level)->velocityX, - para->getParD(level)->velocityY, - para->getParD(level)->velocityZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->turbViscosity, - para->getParD(level)->numberOfNodes, - level, - para->getTimestepOfCoarseLevel(), - para->getForcesDev(), - para->getQuadricLimitersDev(), - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_Kernel_WaleCumulantK17Comp execution failed"); -} - -WaleCumulantK17Comp::WaleCumulantK17Comp(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitCompSP27); - - -} - -WaleCumulantK17Comp::WaleCumulantK17Comp() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp.h deleted file mode 100644 index 61e431b0f7017c0d9a0c0bbcc7d963a5c05bcbe9..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef WALE_CUMULANT_AA2016_COMP_SP27_H -#define WALE_CUMULANT_AA2016_COMP_SP27_H - -#include "Kernel/KernelImp.h" - -class WaleCumulantK17Comp : public KernelImp -{ -public: - static std::shared_ptr<WaleCumulantK17Comp> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - WaleCumulantK17Comp(); - WaleCumulantK17Comp(std::shared_ptr< Parameter> para, int level); - -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp_Device.cu deleted file mode 100644 index 71d3ed0604feb43422e3e738bb2ca9bca147ab17..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp_Device.cu +++ /dev/null @@ -1,1175 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void LB_Kernel_WaleCumulantK17Comp( - real omega_in, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* neighborWSB, - real* veloX, - real* veloY, - real* veloZ, - real* DDStart, - real* turbulentViscosity, - int size_Mat, - int level, - unsigned int timestep, - real* forces, - real* quadricLimiters, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if( BC == GEO_FLUID /*(BC != GEO_SOLID) && (BC != GEO_VOID)*/ ) - { - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k ]; - real mfabb = (D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k ]; - real mfbab = (D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k ]; - real mfbba = (D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k ]; - real mfaab = (D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks ]; - real mfacb = (D.f[DIR_MP0])[kw ]; - real mfcbc = (D.f[DIR_P0P])[k ]; - real mfaba = (D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb ]; - real mfabc = (D.f[DIR_M0P])[kw ]; - real mfbcc = (D.f[DIR_0PP])[k ]; - real mfbaa = (D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb ]; - real mfbac = (D.f[DIR_0MP])[ks ]; - real mfbbb = (D.f[DIR_000])[k ]; - real mfccc = (D.f[DIR_PPP])[k ]; - real mfaac = (D.f[DIR_MMP])[ksw]; - real mfcac = (D.f[DIR_PMP])[ks ]; - real mfacc = (D.f[DIR_MPP])[kw ]; - real mfcca = (D.f[DIR_PPM])[kb ]; - real mfaaa = (D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs]; - real mfaca = (D.f[DIR_MPM])[kbw]; - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + - (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + - ((mfabb+mfcbb) + (mfbab+mfbcb) + (mfbba+mfbbc))) + mfbbb; - - real rho = c1o1+drho; - //////////////////////////////////////////////////////////////////////////////////// - //slow - real vvx =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + - (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + - (mfcbb-mfabb)) / rho; - real vvy =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + - (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + - (mfbcb-mfbab)) / rho; - real vvz =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + - (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + - (mfbbc-mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - real nuTurb = c0o1; - { - ///////////// Wale Model /////////////// - //neighbor index - unsigned int kPx = neighborX[k]; - unsigned int kPy = neighborY[k]; - unsigned int kPz = neighborZ[k]; - unsigned int kMxyz = neighborWSB[k]; - unsigned int kMx = neighborZ[neighborY[kMxyz]]; - unsigned int kMy = neighborZ[neighborX[kMxyz]]; - unsigned int kMz = neighborY[neighborX[kMxyz]]; - //getVeloX// - real veloXNeighborPx = veloX[kPx]; - real veloXNeighborMx = veloX[kMx]; - real veloXNeighborPy = veloX[kPy]; - real veloXNeighborMy = veloX[kMy]; - real veloXNeighborPz = veloX[kPz]; - real veloXNeighborMz = veloX[kMz]; - //getVeloY// - real veloYNeighborPx = veloY[kPx]; - real veloYNeighborMx = veloY[kMx]; - real veloYNeighborPy = veloY[kPy]; - real veloYNeighborMy = veloY[kMy]; - real veloYNeighborPz = veloY[kPz]; - real veloYNeighborMz = veloY[kMz]; - //getVeloZ// - real veloZNeighborPx = veloZ[kPx]; - real veloZNeighborMx = veloZ[kMx]; - real veloZNeighborPy = veloZ[kPy]; - real veloZNeighborMy = veloZ[kMy]; - real veloZNeighborPz = veloZ[kPz]; - real veloZNeighborMz = veloZ[kMz]; - //getVeloLocal// - real veloLocalX = veloX[k]; - real veloLocalY = veloY[k]; - real veloLocalZ = veloZ[k]; - - ////////////////////////////////////////////////////////////////////////////// - real dxvx = c0o1; - real dyvx = c0o1; - real dzvx = c0o1; - real dxvy = c0o1; - real dyvy = c0o1; - real dzvy = c0o1; - real dxvz = c0o1; - real dyvz = c0o1; - real dzvz = c0o1; - real SumSd = c0o1; - real SumS = c0o1; - ////////////////////////////////////////////////////////////////////////////// - //no central differences at the boundary nodes - //Dx - if (bcMatD[kPx] != GEO_FLUID) - { - dxvx = (veloLocalX - veloXNeighborMx); - dxvy = (veloLocalY - veloYNeighborMx); - dxvz = (veloLocalZ - veloZNeighborMx); - } - else if (bcMatD[kMx] != GEO_FLUID) - { - dxvx = (veloXNeighborPx - veloLocalX); - dxvy = (veloYNeighborPx - veloLocalY); - dxvz = (veloZNeighborPx - veloLocalZ); - } - else - { - dxvx = (veloXNeighborPx - veloXNeighborMx) / c2o1; - dxvy = (veloYNeighborPx - veloYNeighborMx) / c2o1; - dxvz = (veloZNeighborPx - veloZNeighborMx) / c2o1; - } - //Dy - if (bcMatD[kPy] != GEO_FLUID) - { - dyvx = (veloLocalX - veloXNeighborMy); - dyvy = (veloLocalY - veloYNeighborMy); - dyvz = (veloLocalZ - veloZNeighborMy); - } - else if (bcMatD[kMy] != GEO_FLUID) - { - dyvx = (veloXNeighborPy - veloLocalX); - dyvy = (veloYNeighborPy - veloLocalY); - dyvz = (veloZNeighborPy - veloLocalZ); - } - else - { - dyvx = (veloXNeighborPy - veloXNeighborMy) / c2o1; - dyvy = (veloYNeighborPy - veloYNeighborMy) / c2o1; - dyvz = (veloZNeighborPy - veloZNeighborMy) / c2o1; - } - //Dz - if (bcMatD[kPz] != GEO_FLUID) - { - dzvx = (veloLocalX - veloXNeighborMz); - dzvy = (veloLocalY - veloYNeighborMz); - dzvz = (veloLocalZ - veloZNeighborMz); - } - else if (bcMatD[kMz] != GEO_FLUID) - { - dzvx = (veloXNeighborPz - veloLocalX); - dzvy = (veloYNeighborPz - veloLocalY); - dzvz = (veloZNeighborPz - veloLocalZ); - } - else - { - dzvx = (veloXNeighborPz - veloXNeighborMz) / c2o1; - dzvy = (veloYNeighborPz - veloYNeighborMz) / c2o1; - dzvz = (veloZNeighborPz - veloZNeighborMz) / c2o1; - } - ////////////////////////////////////////////////////////////////////////////// - ////partial Div vx in x, y, z// - //dxvx = (veloXNeighborPx - veloXNeighborMx) / two; //deltaX * two?? - //dyvx = (veloXNeighborPy - veloXNeighborMy) / two; //deltaX * two?? - //dzvx = (veloXNeighborPz - veloXNeighborMz) / two; //deltaX * two?? - // //partial Div vy in x, y, z// - //dxvy = (veloYNeighborPx - veloYNeighborMx) / two; //deltaX * two?? - //dyvy = (veloYNeighborPy - veloYNeighborMy) / two; //deltaX * two?? - //dzvy = (veloYNeighborPz - veloYNeighborMz) / two; //deltaX * two?? - // //partial Div vz in x, y, z// - //dxvz = (veloZNeighborPx - veloZNeighborMx) / two; //deltaX * two?? - //dyvz = (veloZNeighborPy - veloZNeighborMy) / two; //deltaX * two?? - //dzvz = (veloZNeighborPz - veloZNeighborMz) / two; //deltaX * two?? - - real g11, g12, g13, g21, g22, g23, g31, g32, g33; - real g11sq, g12sq, g13sq, g21sq, g22sq, g23sq, g31sq, g32sq, g33sq; - - g11 = dxvx; - g12 = dyvx; - g13 = dzvx; - g21 = dxvy; - g22 = dyvy; - g23 = dzvy; - g31 = dxvz; - g32 = dyvz; - g33 = dzvz; - - g11sq = g11 * g11 + g12 * g21 + g13 * g31; - g12sq = g11 * g12 + g12 * g22 + g13 * g32; - g13sq = g11 * g13 + g12 * g23 + g13 * g33; - g21sq = g21 * g11 + g22 * g21 + g23 * g31; - g22sq = g21 * g12 + g22 * g22 + g23 * g32; - g23sq = g21 * g13 + g22 * g23 + g23 * g33; - g31sq = g31 * g11 + g32 * g21 + g33 * g31; - g32sq = g31 * g12 + g32 * g22 + g33 * g32; - g33sq = g31 * g13 * g32 * g23 + g33 * g33; - - real gkk = g11sq + g22sq + g33sq; - - real Sd11 = c1o2 * (g11sq + g11sq) - c1o3 * gkk; - real Sd12 = c1o2 * (g12sq + g21sq); - real Sd13 = c1o2 * (g13sq + g31sq); - real Sd21 = c1o2 * (g21sq + g12sq); // ==Sd12 - real Sd22 = c1o2 * (g22sq + g22sq) - c1o3 * gkk; - real Sd23 = c1o2 * (g23sq + g32sq); - real Sd31 = c1o2 * (g31sq + g13sq); // ==Sd13 - real Sd32 = c1o2 * (g32sq + g23sq); // ==Sd23 - real Sd33 = c1o2 * (g33sq + g33sq) - c1o3 * gkk; - - SumSd = Sd11*Sd11 + Sd12*Sd12 + Sd13*Sd13 + Sd21*Sd21 + Sd22*Sd22 + Sd23*Sd23 + Sd31*Sd31 + Sd32*Sd32 + Sd33*Sd33; - - - - //real SumSd = - // c1o2 * powf(dzvx, four) + - // c1o2 * powf(dzvy, four) + - // c2o3 * powf(dzvz, four) + - // c2o3 * powf(dyvy, four) + - // c1o2 * powf(dyvz, four) + - // c2o3 * powf(dxvx, four) + - // c1o2 * powf(dxvy, four) + - // c1o2 * powf(dxvz, four) + - // c1o2 * powf(dyvx, four) + - // powf(dyvx, two) * powf(dxvy, two) + - // powf(dzvx, two) * powf(dxvz, two) + - // powf(dzvy, two) * powf(dyvz, two) - - // c2o3 * powf(dzvz, two) * powf(dyvy, two) - - // c2o3 * powf(dzvz, two) * powf(dxvx, two) - - // c2o3 * powf(dyvy, two) * powf(dxvx, two); //powf - //real SumSd = - // ((c1o2 * (((dzvx*dzvx)*(dzvx*dzvx)) + - // ((dzvy*dzvy)*(dzvy*dzvy)) + - // ((dyvz*dyvz)*(dyvz*dyvz)) + - // ((dyvx*dyvx)*(dyvx*dyvx)) + - // ((dxvy*dxvy)*(dxvy*dxvy)) + - // ((dxvz*dxvz)*(dxvz*dxvz)))) + - // (c2o3 * (((dxvx*dxvx)*(dxvx*dxvx)) + - // ((dyvy*dyvy)*(dyvy*dyvy)) + - // ((dzvz*dzvz)*(dzvz*dzvz)))) + - // ((dyvx * dyvx) * (dxvy * dxvy)) + - // ((dzvx * dzvx) * (dxvz * dxvz)) + - // ((dzvy * dzvy) * (dyvz * dyvz))) - - // (c2o3 * ((dzvz * dzvz) * (dyvy * dyvy)) + - // ((dzvz * dzvz) * (dxvx * dxvx)) + - // ((dyvy * dyvy) * (dxvx * dxvx))); //explicit - //real SumSd = - // c1o2 * pow(dzvx, four) + - // c1o2 * pow(dzvy, four) + - // c2o3 * pow(dzvz, four) + - // c2o3 * pow(dyvy, four) + - // c1o2 * pow(dyvz, four) + - // c2o3 * pow(dxvx, four) + - // c1o2 * pow(dxvy, four) + - // c1o2 * pow(dxvz, four) + - // c1o2 * pow(dyvx, four) + - // pow(dyvx, two) * pow(dxvy, two) + - // pow(dzvx, two) * pow(dxvz, two) + - // pow(dzvy, two) * pow(dyvz, two) - - // c2o3 * pow(dzvz, two) * pow(dyvy, two) - - // c2o3 * pow(dzvz, two) * pow(dxvx, two) - - // c2o3 * pow(dyvy, two) * pow(dxvx, two); //pow - //SumS - //real SumS = - // powf(dxvx, two) + - // powf(dyvy, two) + - // powf(dzvz, two) + - // c1o2 * powf(dyvx + dxvy, two) + - // c1o2 * powf(dzvx + dxvz, two) + - // c1o2 * powf(dyvz + dzvy, two); //powf - SumS = - ((dxvx * dxvx) + - (dyvy * dyvy) + - (dzvz * dzvz)) + - (c1o2 * (((dyvx + dxvy) * (dyvx + dxvy)) + - ((dzvx + dxvz) * (dzvx + dxvz)) + - ((dyvz + dzvy) * (dyvz + dzvy)))); //explicit - //real SumS = - // pow(dxvx, two) + - // pow(dyvy, two) + - // pow(dzvz, two) + - // c1o2 * pow(dyvx + dxvy, two) + - // c1o2 * pow(dzvx + dxvz, two) + - // c1o2 * pow(dyvz + dzvy, two); //pow - //nu turbulent - real coefficient = 0.5; //0.325; // - real delta = coefficient * c1o1; - ///////////////////////////////// - //real SumSsq = SumS * SumS; - //real SumSDsq = SumSd * SumSd; - real SumSsq = SumS; - real SumSDsq = SumSd; - //nuTurb = powf(delta, two) * powf(SumSDsq, c3o2) / (powf(SumSsq, c5o2) + powf(SumSDsq, c5o4) + smallSingle); //powf - //nuTurb = pow(delta, two) * pow(SumSDsq, c3o2) / (pow(SumSsq, c5o2) + pow(SumSDsq, c5o4) + smallSingle); //pow - //nuTurb = (delta * delta) * (real)pow((double)SumSDsq, 1.5) / ((real)pow((double)SumSsq, 2.5) + (real)pow((double)SumSDsq, 1.25) + smallSingle); //SMversion// - nuTurb = (delta * delta) * (real)pow((double)SumSDsq, 0.25) / - ((real)pow(((double)pow((double)SumSsq, 0.5) / ((real)pow((double)SumSDsq, 0.25) + c10eM10)), 5.0) + c1o1); //SMversion2// - ///////////////////////////////// - //nuTurb = rho * powf(delta, two) * powf(SumSd*SumSd, c3o2) / (powf(SumS*SumS, c5o2) + powf(SumSd*SumSd, c5o4)); - //nuTurb = powf(delta, two) * powf(SumSd*SumSd, c3o2) / (powf(SumS*SumS, c5o2) + powf(SumSd*SumSd, c5o4)); - } - //Test debug - //if (nuTurb > c1o100) nuTurb = c1o100; - //if (nuTurb < -c1o100) nuTurb = -c1o100; - //nuTurb = c1o100; - turbulentViscosity[k] = nuTurb; - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - { - real fx = forces[0] / (pow((double)c2o1, (double)level)); //zero;//0.0032653/(pow(two,level)); //0.000000005;//(two/1600000.0) / 120.0; // - real fy = forces[1] / (pow((double)c2o1, (double)level)); //zero; - real fz = forces[2] / (pow((double)c2o1, (double)level)); //zero; - vvx += fx*c1o2; - vvy += fy*c1o2; - vvz += fz*c1o2; - } - //////////////////////////////////////////////////////////////////////////////////// - real omega = omega_in; - if (timestep >= 500000) - { - real nuOld = c1o3 * (c1o1 / omega_in - c1o2); - omega = c1o1 / (c3o1 * (nuOld + nuTurb) + c1o2); - } - //////////////////////////////////////////////////////////////////////////////////// - //fast - real oMdrho = c1o1; // comp special - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2=vvx*vvx; - vy2=vvy*vvy; - vz2=vvz*vvz; - ////////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimitP = 0.01f;// * 0.0001f; - real qudricLimitM = 0.01f;// * 0.0001f; - real qudricLimitD = 0.01f;// * 0.001f; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; //set the bulk viscosity one is high / two is very low and zero is (too) high ... (also called omega 2) - - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - real OxyyPxzz = c8o1*(-c2o1+omega)*(c1o1+c2o1*omega)/(-c8o1-c14o1*omega+c7o1*omega*omega);//one; - real OxyyMxzz = c8o1*(-c2o1+omega)*(-c7o1+c4o1*omega)/(c56o1-c50o1*omega+c9o1*omega*omega);//one; - real Oxyz = c24o1*(-c2o1+omega)*(-c2o1-c7o1*omega+c3o1*omega*omega)/(c48o1+c152o1*omega-c130o1*omega*omega+c29o1*omega*omega*omega);//one; - //////////////////////////////////////////////////////////// - //4. - ////////////////////////////// - real O4 = c1o1; - ////////////////////////////// - //real O4 = omega;//TRT - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = c1o1; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = c1o1; - //////////////////////////////////////////////////////////// - - - //central moments to cumulants - //4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho/rho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho/rho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho/rho)); - - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) ) / rho ; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) ) / rho ; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) ) / rho ; - - //6. - - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - +( c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) /rho - - c1o9 * (mfcaa + mfaca + mfaac) /rho - +( c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho)/(rho*rho))); - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - //////////////////////////////////////////////////////////////////////////// - real Dxy =-c3o1*omega*mfbba; - real Dxz =-c3o1*omega*mfbab; - real Dyz =-c3o1*omega*mfabb; - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz)- c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcaa = c1o3 * ( mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * ( mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - - //relax - ////////////////////////////////////////////////////////////////////////// - //das ist der limiter - wadjust = Oxyz+(c1o1-Oxyz)*abs(mfbbb)/(abs(mfbbb)+qudricLimitD); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxxyPyzz)/(abs(mxxyPyzz)+qudricLimitP); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxxyMyzz)/(abs(mxxyMyzz)+qudricLimitM); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxxzPyyz)/(abs(mxxzPyyz)+qudricLimitP); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxxzMyyz)/(abs(mxxzMyyz)+qudricLimitM); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz+(c1o1-OxyyPxzz)*abs(mxyyPxzz)/(abs(mxyyPxzz)+qudricLimitP); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz+(c1o1-OxyyMxzz)*abs(mxyyMxzz)/(abs(mxyyMxzz)+qudricLimitM); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //mfbbb += OxyyMxzz * (-mfbbb); - //mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - //mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - //mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - //mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - //mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - //mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - //mit limiter - // wadjust = O4+(one-O4)*abs(CUMacc)/(abs(CUMacc)+qudricLimit); - //CUMacc += wadjust * (-CUMacc); - // wadjust = O4+(one-O4)*abs(CUMcac)/(abs(CUMcac)+qudricLimit); - //CUMcac += wadjust * (-CUMcac); - // wadjust = O4+(one-O4)*abs(CUMcca)/(abs(CUMcca)+qudricLimit); - //CUMcca += wadjust * (-CUMcca); - - // wadjust = O4+(one-O4)*abs(CUMbbc)/(abs(CUMbbc)+qudricLimit); - //CUMbbc += wadjust * (-CUMbbc); - // wadjust = O4+(one-O4)*abs(CUMbcb)/(abs(CUMbcb)+qudricLimit); - //CUMbcb += wadjust * (-CUMbcb); - // wadjust = O4+(one-O4)*abs(CUMcbb)/(abs(CUMcbb)+qudricLimit); - //CUMcbb += wadjust * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - real factorA = (c4o1 + c2o1*omega - c3o1*omega*omega) / (c2o1 - c7o1*omega + c5o1*omega*omega); - real factorB = (c4o1 + c28o1*omega - c14o1*omega*omega) / (c6o1 - c21o1*omega + c15o1*omega*omega); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //CUMacc += O4 * (-CUMacc); - //CUMcac += O4 * (-CUMcac); - //CUMcca += O4 * (-CUMcca); - //CUMbbc += O4 * (-CUMbbc); - //CUMbcb += O4 * (-CUMbcb); - //CUMcbb += O4 * (-CUMcbb); - CUMacc = -O4*(c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMacc); - CUMcac = -O4*(c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMcac); - CUMcca = -O4*(c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * factorA + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4*(c1o1 / omega - c1o2) * Dxy * c1o3 * factorB + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4*(c1o1 / omega - c1o2) * Dxz * c1o3 * factorB + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4*(c1o1 / omega - c1o2) * Dyz * c1o3 * factorB + (c1o1 - O4) * (CUMcbb); - ////////////////////////////////////////////////////////////////////////// - - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho/rho)); - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho/rho)); - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho/rho)); - - //5. - mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac) ) / rho ; - mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc) ) / rho ; - mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab) ) / rho ; - - //6. - - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - +( c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) /rho - - c1o9 * (mfcaa + mfaca + mfaac) /rho - +( c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho)/(rho*rho))); - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1- vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * ( vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * ( vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1- vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * ( vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1- vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * ( vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1- vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * ( vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * ( vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1- vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * ( vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * ( vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1- vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * ( vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1- vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * ( vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1- vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * ( vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1- vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * ( vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1- vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1- vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1- vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * ( vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * ( vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1- vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * ( vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * ( vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1- vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * ( vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * ( vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1- vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * ( vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1- vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1- vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1- vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * ( vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1- vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1- vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * ( vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1- vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * ( vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[ DIR_P00 ])[k ] = mfabb; - (D.f[ DIR_M00 ])[kw ] = mfcbb; - (D.f[ DIR_0P0 ])[k ] = mfbab; - (D.f[ DIR_0M0 ])[ks ] = mfbcb; - (D.f[ DIR_00P ])[k ] = mfbba; - (D.f[ DIR_00M ])[kb ] = mfbbc; - (D.f[ DIR_PP0 ])[k ] = mfaab; - (D.f[ DIR_MM0 ])[ksw ] = mfccb; - (D.f[ DIR_PM0 ])[ks ] = mfacb; - (D.f[ DIR_MP0 ])[kw ] = mfcab; - (D.f[ DIR_P0P ])[k ] = mfaba; - (D.f[ DIR_M0M ])[kbw ] = mfcbc; - (D.f[ DIR_P0M ])[kb ] = mfabc; - (D.f[ DIR_M0P ])[kw ] = mfcba; - (D.f[ DIR_0PP ])[k ] = mfbaa; - (D.f[ DIR_0MM ])[kbs ] = mfbcc; - (D.f[ DIR_0PM ])[kb ] = mfbac; - (D.f[ DIR_0MP ])[ks ] = mfbca; - (D.f[ DIR_000 ])[k ] = mfbbb; - (D.f[ DIR_PPP ])[k ] = mfaaa; - (D.f[ DIR_PMP ])[ks ] = mfaca; - (D.f[ DIR_PPM ])[kb ] = mfaac; - (D.f[ DIR_PMM ])[kbs ] = mfacc; - (D.f[ DIR_MPP ])[kw ] = mfcaa; - (D.f[ DIR_MMP ])[ksw ] = mfcca; - (D.f[ DIR_MPM ])[kbw ] = mfcac; - (D.f[ DIR_MMM ])[kbsw] = mfccc; - //////////////////////////////////////////////////////////////////////////////////// - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp_Device.cuh deleted file mode 100644 index 459c833e2bd3f0bfd2a0c214a9d366bcfb3a4b49..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp_Device.cuh +++ /dev/null @@ -1,26 +0,0 @@ -#ifndef LB_KERNEL_WALE_CUMULANT_K17_COMP_H -#define LB_KERNEL_WALE_CUMULANT_K17_COMP_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void LB_Kernel_WaleCumulantK17Comp( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* neighborWSB, - real* veloX, - real* veloY, - real* veloZ, - real* DDStart, - real* turbulentViscosity, - int size_Mat, - int level, - unsigned int timestep, - real* forces, - real* quadricLimiters, - bool EvenOrOdd); - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp.cu deleted file mode 100644 index 5fe0284e675785691e51a58e7e0869ba4164ad5f..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp.cu +++ /dev/null @@ -1,78 +0,0 @@ -#include "WaleCumulantK17DebugComp.h" - -#include "WaleCumulantK17DebugComp_Device.cuh" -#include "Parameter/Parameter.h" - -std::shared_ptr<WaleCumulantK17DebugComp> WaleCumulantK17DebugComp::getNewInstance(std::shared_ptr<Parameter> para, int level) -{ - return std::shared_ptr<WaleCumulantK17DebugComp>(new WaleCumulantK17DebugComp(para, level)); -} - -void WaleCumulantK17DebugComp::run() -{ - int size_Mat = (int)para->getParD(level)->numberOfNodes; - int numberOfThreads = para->getParD(level)->numberofthreads; - - //int Grid = size_Array / numberOfThreads; - //dim3 grid(Grid, 1, 1); - //dim3 threads(numberOfThreads, 1, 1 ); - - int Grid = (size_Mat / numberOfThreads) + 1; - int Grid1, Grid2; - if (Grid > 512) - { - Grid1 = 512; - Grid2 = (Grid / Grid1) + 1; - } - else - { - Grid1 = 1; - Grid2 = Grid; - } - dim3 grid(Grid1, Grid2, 1); - dim3 threads(numberOfThreads, 1, 1); - - LB_Kernel_WaleCumulantK17DebugComp <<< grid, threads >>>( - para->getParD(level)->omega, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->neighborInverse, - para->getParD(level)->velocityX, - para->getParD(level)->velocityY, - para->getParD(level)->velocityZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->turbViscosity, - para->getParD(level)->gSij, - para->getParD(level)->gSDij, - para->getParD(level)->gDxvx, - para->getParD(level)->gDyvx, - para->getParD(level)->gDzvx, - para->getParD(level)->gDxvy, - para->getParD(level)->gDyvy, - para->getParD(level)->gDzvy, - para->getParD(level)->gDxvz, - para->getParD(level)->gDyvz, - para->getParD(level)->gDzvz, - para->getParD(level)->numberOfNodes, - level, - para->getForcesDev(), - para->getQuadricLimitersDev(), - para->getParD(level)->isEvenTimestep); - getLastCudaError("LB_Kernel_WaleCumulantK17DebugComp execution failed"); -} - -WaleCumulantK17DebugComp::WaleCumulantK17DebugComp(std::shared_ptr<Parameter> para, int level) -{ - this->para = para; - this->level = level; - - myPreProcessorTypes.push_back(InitCompSP27); - - -} - -WaleCumulantK17DebugComp::WaleCumulantK17DebugComp() -{ -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp.h deleted file mode 100644 index 042cadecd7ed142383ffed01d0ebe140a68a3e0c..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp.h +++ /dev/null @@ -1,17 +0,0 @@ -#ifndef WALE_CUMULANT_AA2016_DEBUG_COMP_SP27_H -#define WALE_CUMULANT_AA2016_DEBUG_COMP_SP27_H - -#include "Kernel/KernelImp.h" - -class WaleCumulantK17DebugComp : public KernelImp -{ -public: - static std::shared_ptr<WaleCumulantK17DebugComp> getNewInstance(std::shared_ptr< Parameter> para, int level); - void run(); - -private: - WaleCumulantK17DebugComp(); - WaleCumulantK17DebugComp(std::shared_ptr< Parameter> para, int level); - -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp_Device.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp_Device.cu deleted file mode 100644 index 0a48c68059d794ddd7aed85c266604d51809d978..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp_Device.cu +++ /dev/null @@ -1,1191 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void LB_Kernel_WaleCumulantK17DebugComp( - real omega_in, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* neighborWSB, - real* veloX, - real* veloY, - real* veloZ, - real* DDStart, - real* turbulentViscosity, - real* gSij, - real* gSDij, - real* gDxvx, - real* gDyvx, - real* gDzvx, - real* gDxvy, - real* gDyvy, - real* gDzvy, - real* gDxvz, - real* gDyvz, - real* gDzvz, - int size_Mat, - int level, - real* forces, - real* quadricLimiters, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = bcMatD[k]; - - if (BC == GEO_FLUID /*(BC != GEO_SOLID) && (BC != GEO_VOID)*/) - { - Distributions27 D; - if (EvenOrOdd == true) - { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM]= &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM]= &DDStart[DIR_MPM * size_Mat]; - } - else - { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM]= &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM]= &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; - } - - //////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - unsigned int kw = neighborX[k]; - //unsigned int kn = k; - unsigned int ks = neighborY[k]; - //unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - //unsigned int kne = k; - //unsigned int kse = ks; - //unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - //unsigned int kte = k; - //unsigned int kbe = kb; - //unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - //unsigned int ktn = k; - //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 = k; - unsigned int kbsw = neighborZ[ksw]; - - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k]; - real mfabb = (D.f[DIR_M00])[kw]; - real mfbcb = (D.f[DIR_0P0])[k]; - real mfbab = (D.f[DIR_0M0])[ks]; - real mfbbc = (D.f[DIR_00P])[k]; - real mfbba = (D.f[DIR_00M])[kb]; - real mfccb = (D.f[DIR_PP0])[k]; - real mfaab = (D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks]; - real mfacb = (D.f[DIR_MP0])[kw]; - real mfcbc = (D.f[DIR_P0P])[k]; - real mfaba = (D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb]; - real mfabc = (D.f[DIR_M0P])[kw]; - real mfbcc = (D.f[DIR_0PP])[k]; - real mfbaa = (D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb]; - real mfbac = (D.f[DIR_0MP])[ks]; - real mfbbb = (D.f[DIR_000])[k]; - real mfccc = (D.f[DIR_PPP])[k]; - real mfaac = (D.f[DIR_MMP])[ksw]; - real mfcac = (D.f[DIR_PMP])[ks]; - real mfacc = (D.f[DIR_MPP])[kw]; - real mfcca = (D.f[DIR_PPM])[kb]; - real mfaaa = (D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs]; - real mfaca = (D.f[DIR_MPM])[kbw]; - //////////////////////////////////////////////////////////////////////////////////// - real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + - (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + - ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; - - real rho = c1o1 + drho; - //////////////////////////////////////////////////////////////////////////////////// - //slow - real vvx = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfcaa - mfacc) + (mfcca - mfaac))) + - (((mfcba - mfabc) + (mfcbc - mfaba)) + ((mfcab - mfacb) + (mfccb - mfaab))) + - (mfcbb - mfabb)) / rho; - real vvy = ((((mfccc - mfaaa) + (mfaca - mfcac)) + ((mfacc - mfcaa) + (mfcca - mfaac))) + - (((mfbca - mfbac) + (mfbcc - mfbaa)) + ((mfacb - mfcab) + (mfccb - mfaab))) + - (mfbcb - mfbab)) / rho; - real vvz = ((((mfccc - mfaaa) + (mfcac - mfaca)) + ((mfacc - mfcaa) + (mfaac - mfcca))) + - (((mfbac - mfbca) + (mfbcc - mfbaa)) + ((mfabc - mfcba) + (mfcbc - mfaba))) + - (mfbbc - mfbba)) / rho; - //////////////////////////////////////////////////////////////////////////////////// - real nuTurb = c0o1; - real dxvx = c0o1; - real dyvx = c0o1; - real dzvx = c0o1; - real dxvy = c0o1; - real dyvy = c0o1; - real dzvy = c0o1; - real dxvz = c0o1; - real dyvz = c0o1; - real dzvz = c0o1; - real SumSd = c0o1; - real SumS = c0o1; - { - ///////////// Wale Model /////////////// - //neighbor index - unsigned int kPx = neighborX[k]; - unsigned int kPy = neighborY[k]; - unsigned int kPz = neighborZ[k]; - unsigned int kMxyz = neighborWSB[k]; - unsigned int kMx = neighborZ[neighborY[kMxyz]]; - unsigned int kMy = neighborZ[neighborX[kMxyz]]; - unsigned int kMz = neighborY[neighborX[kMxyz]]; - //getVeloX// - real veloXNeighborPx = veloX[kPx]; - real veloXNeighborMx = veloX[kMx]; - real veloXNeighborPy = veloX[kPy]; - real veloXNeighborMy = veloX[kMy]; - real veloXNeighborPz = veloX[kPz]; - real veloXNeighborMz = veloX[kMz]; - //getVeloY// - real veloYNeighborPx = veloY[kPx]; - real veloYNeighborMx = veloY[kMx]; - real veloYNeighborPy = veloY[kPy]; - real veloYNeighborMy = veloY[kMy]; - real veloYNeighborPz = veloY[kPz]; - real veloYNeighborMz = veloY[kMz]; - //getVeloZ// - real veloZNeighborPx = veloZ[kPx]; - real veloZNeighborMx = veloZ[kMx]; - real veloZNeighborPy = veloZ[kPy]; - real veloZNeighborMy = veloZ[kMy]; - real veloZNeighborPz = veloZ[kPz]; - real veloZNeighborMz = veloZ[kMz]; - //getVeloLocal// - real veloLocalX = veloX[k]; - real veloLocalY = veloY[k]; - real veloLocalZ = veloZ[k]; - - ////////////////////////////////////////////////////////////////////////////// - //no central differences at the boundary nodes - //Dx - if (bcMatD[kPx] != GEO_FLUID) - { - dxvx = (veloLocalX - veloXNeighborMx); - dxvy = (veloLocalY - veloYNeighborMx); - dxvz = (veloLocalZ - veloZNeighborMx); - } - else if (bcMatD[kMx] != GEO_FLUID) - { - dxvx = (veloXNeighborPx - veloLocalX); - dxvy = (veloYNeighborPx - veloLocalY); - dxvz = (veloZNeighborPx - veloLocalZ); - } - else - { - dxvx = (veloXNeighborPx - veloXNeighborMx) / c2o1; - dxvy = (veloYNeighborPx - veloYNeighborMx) / c2o1; - dxvz = (veloZNeighborPx - veloZNeighborMx) / c2o1; - } - //Dy - if (bcMatD[kPy] != GEO_FLUID) - { - dyvx = (veloLocalX - veloXNeighborMy); - dyvy = (veloLocalY - veloYNeighborMy); - dyvz = (veloLocalZ - veloZNeighborMy); - } - else if (bcMatD[kMy] != GEO_FLUID) - { - dyvx = (veloXNeighborPy - veloLocalX); - dyvy = (veloYNeighborPy - veloLocalY); - dyvz = (veloZNeighborPy - veloLocalZ); - } - else - { - dyvx = (veloXNeighborPy - veloXNeighborMy) / c2o1; - dyvy = (veloYNeighborPy - veloYNeighborMy) / c2o1; - dyvz = (veloZNeighborPy - veloZNeighborMy) / c2o1; - } - //Dz - if (bcMatD[kPz] != GEO_FLUID) - { - dzvx = (veloLocalX - veloXNeighborMz); - dzvy = (veloLocalY - veloYNeighborMz); - dzvz = (veloLocalZ - veloZNeighborMz); - } - else if (bcMatD[kMz] != GEO_FLUID) - { - dzvx = (veloXNeighborPz - veloLocalX); - dzvy = (veloYNeighborPz - veloLocalY); - dzvz = (veloZNeighborPz - veloLocalZ); - } - else - { - dzvx = (veloXNeighborPz - veloXNeighborMz) / c2o1; - dzvy = (veloYNeighborPz - veloYNeighborMz) / c2o1; - dzvz = (veloZNeighborPz - veloZNeighborMz) / c2o1; - } - ////////////////////////////////////////////////////////////////////////////// - ////partial Div vx in x, y, z// - //dxvx = (veloXNeighborPx - veloXNeighborMx) / two; //deltaX * two?? - //dyvx = (veloXNeighborPy - veloXNeighborMy) / two; //deltaX * two?? - //dzvx = (veloXNeighborPz - veloXNeighborMz) / two; //deltaX * two?? - // //partial Div vy in x, y, z// - //dxvy = (veloYNeighborPx - veloYNeighborMx) / two; //deltaX * two?? - //dyvy = (veloYNeighborPy - veloYNeighborMy) / two; //deltaX * two?? - //dzvy = (veloYNeighborPz - veloYNeighborMz) / two; //deltaX * two?? - // //partial Div vz in x, y, z// - //dxvz = (veloZNeighborPx - veloZNeighborMx) / two; //deltaX * two?? - //dyvz = (veloZNeighborPy - veloZNeighborMy) / two; //deltaX * two?? - //dzvz = (veloZNeighborPz - veloZNeighborMz) / two; //deltaX * two?? - - real g11, g12, g13, g21, g22, g23, g31, g32, g33; - real g11sq, g12sq, g13sq, g21sq, g22sq, g23sq, g31sq, g32sq, g33sq; - - g11 = dxvx; - g12 = dyvx; - g13 = dzvx; - g21 = dxvy; - g22 = dyvy; - g23 = dzvy; - g31 = dxvz; - g32 = dyvz; - g33 = dzvz; - - g11sq = g11 * g11 + g12 * g21 + g13 * g31; - g12sq = g11 * g12 + g12 * g22 + g13 * g32; - g13sq = g11 * g13 + g12 * g23 + g13 * g33; - g21sq = g21 * g11 + g22 * g21 + g23 * g31; - g22sq = g21 * g12 + g22 * g22 + g23 * g32; - g23sq = g21 * g13 + g22 * g23 + g23 * g33; - g31sq = g31 * g11 + g32 * g21 + g33 * g31; - g32sq = g31 * g12 + g32 * g22 + g33 * g32; - g33sq = g31 * g13 * g32 * g23 + g33 * g33; - - real gkk = g11sq + g22sq + g33sq; - - real Sd11 = c1o2 * (g11sq + g11sq) - c1o3 * gkk; - real Sd12 = c1o2 * (g12sq + g21sq); - real Sd13 = c1o2 * (g13sq + g31sq); - real Sd21 = c1o2 * (g21sq + g12sq); // ==Sd12 - real Sd22 = c1o2 * (g22sq + g22sq) - c1o3 * gkk; - real Sd23 = c1o2 * (g23sq + g32sq); - real Sd31 = c1o2 * (g31sq + g13sq); // ==Sd13 - real Sd32 = c1o2 * (g32sq + g23sq); // ==Sd23 - real Sd33 = c1o2 * (g33sq + g33sq) - c1o3 * gkk; - - SumSd = Sd11*Sd11 + Sd12*Sd12 + Sd13*Sd13 + Sd21*Sd21 + Sd22*Sd22 + Sd23*Sd23 + Sd31*Sd31 + Sd32*Sd32 + Sd33*Sd33; - - - - //real SumSd = - // c1o2 * powf(dzvx, four) + - // c1o2 * powf(dzvy, four) + - // c2o3 * powf(dzvz, four) + - // c2o3 * powf(dyvy, four) + - // c1o2 * powf(dyvz, four) + - // c2o3 * powf(dxvx, four) + - // c1o2 * powf(dxvy, four) + - // c1o2 * powf(dxvz, four) + - // c1o2 * powf(dyvx, four) + - // powf(dyvx, two) * powf(dxvy, two) + - // powf(dzvx, two) * powf(dxvz, two) + - // powf(dzvy, two) * powf(dyvz, two) - - // c2o3 * powf(dzvz, two) * powf(dyvy, two) - - // c2o3 * powf(dzvz, two) * powf(dxvx, two) - - // c2o3 * powf(dyvy, two) * powf(dxvx, two); //powf - //real SumSd = - // ((c1o2 * (((dzvx*dzvx)*(dzvx*dzvx)) + - // ((dzvy*dzvy)*(dzvy*dzvy)) + - // ((dyvz*dyvz)*(dyvz*dyvz)) + - // ((dyvx*dyvx)*(dyvx*dyvx)) + - // ((dxvy*dxvy)*(dxvy*dxvy)) + - // ((dxvz*dxvz)*(dxvz*dxvz)))) + - // (c2o3 * (((dxvx*dxvx)*(dxvx*dxvx)) + - // ((dyvy*dyvy)*(dyvy*dyvy)) + - // ((dzvz*dzvz)*(dzvz*dzvz)))) + - // ((dyvx * dyvx) * (dxvy * dxvy)) + - // ((dzvx * dzvx) * (dxvz * dxvz)) + - // ((dzvy * dzvy) * (dyvz * dyvz))) - - // (c2o3 * ((dzvz * dzvz) * (dyvy * dyvy)) + - // ((dzvz * dzvz) * (dxvx * dxvx)) + - // ((dyvy * dyvy) * (dxvx * dxvx))); //explicit - //real SumSd = - // c1o2 * pow(dzvx, four) + - // c1o2 * pow(dzvy, four) + - // c2o3 * pow(dzvz, four) + - // c2o3 * pow(dyvy, four) + - // c1o2 * pow(dyvz, four) + - // c2o3 * pow(dxvx, four) + - // c1o2 * pow(dxvy, four) + - // c1o2 * pow(dxvz, four) + - // c1o2 * pow(dyvx, four) + - // pow(dyvx, two) * pow(dxvy, two) + - // pow(dzvx, two) * pow(dxvz, two) + - // pow(dzvy, two) * pow(dyvz, two) - - // c2o3 * pow(dzvz, two) * pow(dyvy, two) - - // c2o3 * pow(dzvz, two) * pow(dxvx, two) - - // c2o3 * pow(dyvy, two) * pow(dxvx, two); //pow - //SumS - //real SumS = - // powf(dxvx, two) + - // powf(dyvy, two) + - // powf(dzvz, two) + - // c1o2 * powf(dyvx + dxvy, two) + - // c1o2 * powf(dzvx + dxvz, two) + - // c1o2 * powf(dyvz + dzvy, two); //powf - SumS = - ((dxvx * dxvx) + - (dyvy * dyvy) + - (dzvz * dzvz)) + - (c1o2 * (((dyvx + dxvy) * (dyvx + dxvy)) + - ((dzvx + dxvz) * (dzvx + dxvz)) + - ((dyvz + dzvy) * (dyvz + dzvy)))); //explicit - //real SumS = - // pow(dxvx, two) + - // pow(dyvy, two) + - // pow(dzvz, two) + - // c1o2 * pow(dyvx + dxvy, two) + - // c1o2 * pow(dzvx + dxvz, two) + - // c1o2 * pow(dyvz + dzvy, two); //pow - //nu turbulent - real coefficient = 0.325; //0.55; // - real delta = coefficient * c1o1; - ///////////////////////////////// - //real SumSsq = SumS * SumS; - //real SumSDsq = SumSd * SumSd; - real SumSsq = SumS; - real SumSDsq = SumSd; - //nuTurb = powf(delta, two) * powf(SumSDsq, c3o2) / (powf(SumSsq, c5o2) + powf(SumSDsq, c5o4) + smallSingle); //powf - //nuTurb = pow(delta, two) * pow(SumSDsq, c3o2) / (pow(SumSsq, c5o2) + pow(SumSDsq, c5o4) + smallSingle); //pow - nuTurb = (delta * delta) * (real)pow((double)SumSDsq, 1.5) / ((real)pow((double)SumSsq, 2.5) + (real)pow((double)SumSDsq, 1.25) + smallSingle); //SMversion// - ///////////////////////////////// - //nuTurb = rho * powf(delta, two) * powf(SumSd*SumSd, c3o2) / (powf(SumS*SumS, c5o2) + powf(SumSd*SumSd, c5o4)); - //nuTurb = powf(delta, two) * powf(SumSd*SumSd, c3o2) / (powf(SumS*SumS, c5o2) + powf(SumSd*SumSd, c5o4)); - } - //Test debug - //if (nuTurb > c1o100) nuTurb = c1o100; - //if (nuTurb < -c1o100) nuTurb = -c1o100; - //nuTurb = c1o100; - turbulentViscosity[k] = nuTurb; - //Debug - gSij[k] = SumS; - gSDij[k] = SumSd; - gDxvx[k] = dxvx; - gDyvx[k] = dyvx; - gDzvx[k] = dzvx; - gDxvy[k] = dxvy; - gDyvy[k] = dyvy; - gDzvy[k] = dyvy; - gDxvz[k] = dxvz; - gDyvz[k] = dyvz; - gDzvz[k] = dzvz; - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - { - real fx = forces[0] / (pow((double)c2o1, (double)level)); //zero;//0.0032653/(pow(two,level)); //0.000000005;//(two/1600000.0) / 120.0; // - real fy = forces[1] / (pow((double)c2o1, (double)level)); //zero; - real fz = forces[2] / (pow((double)c2o1, (double)level)); //zero; - vvx += fx*c1o2; - vvy += fy*c1o2; - vvz += fz*c1o2; - } - //////////////////////////////////////////////////////////////////////////////////// - real nuOld = c1o3 * (c1o1 / omega_in - c1o2); - real omega = c1o1 / (c3o1 * (nuOld + nuTurb) + c1o2); - //real omega = omega_in + nuTurb; - //////////////////////////////////////////////////////////////////////////////////// - //fast - real oMdrho = c1o1; // comp special - real m0, m1, m2; - real vx2; - real vy2; - real vz2; - vx2 = vvx*vvx; - vy2 = vvy*vvy; - vz2 = vvz*vvz; - ////////////////////////////////////////////////////////////////////////////////////// - real wadjust; - real qudricLimitP = 0.01f;// * 0.0001f; - real qudricLimitM = 0.01f;// * 0.0001f; - real qudricLimitD = 0.01f;// * 0.001f; - //////////////////////////////////////////////////////////////////////////////////// - //Hin - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m2 = mfaaa + mfaac; - m1 = mfaac - mfaaa; - m0 = m2 + mfaab; - mfaaa = m0; - m0 += c1o36 * oMdrho; - mfaab = m1 - m0 * vvz; - mfaac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfabc; - m1 = mfabc - mfaba; - m0 = m2 + mfabb; - mfaba = m0; - m0 += c1o9 * oMdrho; - mfabb = m1 - m0 * vvz; - mfabc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfacc; - m1 = mfacc - mfaca; - m0 = m2 + mfacb; - mfaca = m0; - m0 += c1o36 * oMdrho; - mfacb = m1 - m0 * vvz; - mfacc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbac; - m1 = mfbac - mfbaa; - m0 = m2 + mfbab; - mfbaa = m0; - m0 += c1o9 * oMdrho; - mfbab = m1 - m0 * vvz; - mfbac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbba + mfbbc; - m1 = mfbbc - mfbba; - m0 = m2 + mfbbb; - mfbba = m0; - m0 += c4o9 * oMdrho; - mfbbb = m1 - m0 * vvz; - mfbbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbca + mfbcc; - m1 = mfbcc - mfbca; - m0 = m2 + mfbcb; - mfbca = m0; - m0 += c1o9 * oMdrho; - mfbcb = m1 - m0 * vvz; - mfbcc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcac; - m1 = mfcac - mfcaa; - m0 = m2 + mfcab; - mfcaa = m0; - m0 += c1o36 * oMdrho; - mfcab = m1 - m0 * vvz; - mfcac = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcba + mfcbc; - m1 = mfcbc - mfcba; - m0 = m2 + mfcbb; - mfcba = m0; - m0 += c1o9 * oMdrho; - mfcbb = m1 - m0 * vvz; - mfcbc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcca + mfccc; - m1 = mfccc - mfcca; - m0 = m2 + mfccb; - mfcca = m0; - m0 += c1o36 * oMdrho; - mfccb = m1 - m0 * vvz; - mfccc = m2 - c2o1* m1 * vvz + vz2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1/6, 0, 1/18, 2/3, 0, 2/9, 1/6, 0, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m2 = mfaaa + mfaca; - m1 = mfaca - mfaaa; - m0 = m2 + mfaba; - mfaaa = m0; - m0 += c1o6 * oMdrho; - mfaba = m1 - m0 * vvy; - mfaca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfacb; - m1 = mfacb - mfaab; - m0 = m2 + mfabb; - mfaab = m0; - mfabb = m1 - m0 * vvy; - mfacb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfacc; - m1 = mfacc - mfaac; - m0 = m2 + mfabc; - mfaac = m0; - m0 += c1o18 * oMdrho; - mfabc = m1 - m0 * vvy; - mfacc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbaa + mfbca; - m1 = mfbca - mfbaa; - m0 = m2 + mfbba; - mfbaa = m0; - m0 += c2o3 * oMdrho; - mfbba = m1 - m0 * vvy; - mfbca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbab + mfbcb; - m1 = mfbcb - mfbab; - m0 = m2 + mfbbb; - mfbab = m0; - mfbbb = m1 - m0 * vvy; - mfbcb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfbac + mfbcc; - m1 = mfbcc - mfbac; - m0 = m2 + mfbbc; - mfbac = m0; - m0 += c2o9 * oMdrho; - mfbbc = m1 - m0 * vvy; - mfbcc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcaa + mfcca; - m1 = mfcca - mfcaa; - m0 = m2 + mfcba; - mfcaa = m0; - m0 += c1o6 * oMdrho; - mfcba = m1 - m0 * vvy; - mfcca = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcab + mfccb; - m1 = mfccb - mfcab; - m0 = m2 + mfcbb; - mfcab = m0; - mfcbb = m1 - m0 * vvy; - mfccb = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfcac + mfccc; - m1 = mfccc - mfcac; - m0 = m2 + mfcbc; - mfcac = m0; - m0 += c1o18 * oMdrho; - mfcbc = m1 - m0 * vvy; - mfccc = m2 - c2o1* m1 * vvy + vy2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - // mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m2 = mfaaa + mfcaa; - m1 = mfcaa - mfaaa; - m0 = m2 + mfbaa; - mfaaa = m0; - m0 += c1o1* oMdrho; - mfbaa = m1 - m0 * vvx; - mfcaa = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaba + mfcba; - m1 = mfcba - mfaba; - m0 = m2 + mfbba; - mfaba = m0; - mfbba = m1 - m0 * vvx; - mfcba = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaca + mfcca; - m1 = mfcca - mfaca; - m0 = m2 + mfbca; - mfaca = m0; - m0 += c1o3 * oMdrho; - mfbca = m1 - m0 * vvx; - mfcca = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaab + mfcab; - m1 = mfcab - mfaab; - m0 = m2 + mfbab; - mfaab = m0; - mfbab = m1 - m0 * vvx; - mfcab = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabb + mfcbb; - m1 = mfcbb - mfabb; - m0 = m2 + mfbbb; - mfabb = m0; - mfbbb = m1 - m0 * vvx; - mfcbb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacb + mfccb; - m1 = mfccb - mfacb; - m0 = m2 + mfbcb; - mfacb = m0; - mfbcb = m1 - m0 * vvx; - mfccb = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfaac + mfcac; - m1 = mfcac - mfaac; - m0 = m2 + mfbac; - mfaac = m0; - m0 += c1o3 * oMdrho; - mfbac = m1 - m0 * vvx; - mfcac = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfabc + mfcbc; - m1 = mfcbc - mfabc; - m0 = m2 + mfbbc; - mfabc = m0; - mfbbc = m1 - m0 * vvx; - mfcbc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - m2 = mfacc + mfccc; - m1 = mfccc - mfacc; - m0 = m2 + mfbcc; - mfacc = m0; - m0 += c1o9 * oMdrho; - mfbcc = m1 - m0 * vvx; - mfccc = m2 - c2o1* m1 * vvx + vx2 * m0; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - // Cumulants - //////////////////////////////////////////////////////////////////////////////////// - real OxxPyyPzz = c1o1; //set the bulk viscosity one is high / two is very low and zero is (too) high ... (also called omega 2) - - //////////////////////////////////////////////////////////// - //3. - ////////////////////////////// - real OxyyPxzz = c8o1*(-c2o1 + omega)*(c1o1 + c2o1*omega) / (-c8o1 - c14o1*omega + c7o1*omega*omega);//one; - real OxyyMxzz = c8o1*(-c2o1 + omega)*(-c7o1 + c4o1*omega) / (c56o1 - c50o1*omega + c9o1*omega*omega);//one; - real Oxyz = c24o1*(-c2o1 + omega)*(-c2o1 - c7o1*omega + c3o1*omega*omega) / (c48o1 + c152o1*omega - c130o1*omega*omega + c29o1*omega*omega*omega);//one; - //////////////////////////////////////////////////////////// - //4. - ////////////////////////////// - real O4 = c1o1; - ////////////////////////////// - //real O4 = omega;//TRT - //////////////////////////////////////////////////////////// - //5. - ////////////////////////////// - real O5 = c1o1; - //////////////////////////////////////////////////////////// - //6. - ////////////////////////////// - real O6 = c1o1; - //////////////////////////////////////////////////////////// - - - //central moments to cumulants - //4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - - //2. - // linear combinations - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - - //////////////////////////////////////////////////////////////////////////// - real Dxy = -c3o1*omega*mfbba; - real Dxz = -c3o1*omega*mfbab; - real Dyz = -c3o1*omega*mfabb; - - //3. - // linear combinations - - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //incl. correction (hat noch nicht so gut funktioniert...Optimierungsbedarf??) - - real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - real dyuy = dxux + omega * c3o2 * mxxMyy; - real dzuz = dxux + omega * c3o2 * mxxMzz; - - //relax - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz);//-magicBulk*OxxPyyPzz; - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - - /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa-mxxPyyPzz);//-magicBulk*OxxPyyPzz; - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - - - //relax - ////////////////////////////////////////////////////////////////////////// - //das ist der limiter - wadjust = Oxyz + (c1o1 - Oxyz)*abs(mfbbb) / (abs(mfbbb) + qudricLimitD); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxyPyzz) / (abs(mxxyPyzz) + qudricLimitP); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxyMyzz) / (abs(mxxyMyzz) + qudricLimitM); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxxzPyyz) / (abs(mxxzPyyz) + qudricLimitP); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxxzMyyz) / (abs(mxxzMyyz) + qudricLimitM); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs(mxyyPxzz) / (abs(mxyyPxzz) + qudricLimitP); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs(mxyyMxzz) / (abs(mxyyMxzz) + qudricLimitM); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //mfbbb += OxyyMxzz * (-mfbbb); - //mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - //mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - //mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - //mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - //mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - //mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - - // linear combinations back - mfcba = (mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = (mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = (mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - - //4. - ////////////////////////////////////////////////////////////////////////// - //mit limiter - // wadjust = O4+(one-O4)*abs(CUMacc)/(abs(CUMacc)+qudricLimit); - //CUMacc += wadjust * (-CUMacc); - // wadjust = O4+(one-O4)*abs(CUMcac)/(abs(CUMcac)+qudricLimit); - //CUMcac += wadjust * (-CUMcac); - // wadjust = O4+(one-O4)*abs(CUMcca)/(abs(CUMcca)+qudricLimit); - //CUMcca += wadjust * (-CUMcca); - - // wadjust = O4+(one-O4)*abs(CUMbbc)/(abs(CUMbbc)+qudricLimit); - //CUMbbc += wadjust * (-CUMbbc); - // wadjust = O4+(one-O4)*abs(CUMbcb)/(abs(CUMbcb)+qudricLimit); - //CUMbcb += wadjust * (-CUMbcb); - // wadjust = O4+(one-O4)*abs(CUMcbb)/(abs(CUMcbb)+qudricLimit); - //CUMcbb += wadjust * (-CUMcbb); - ////////////////////////////////////////////////////////////////////////// - real factorA = (c4o1 + c2o1*omega - c3o1*omega*omega) / (c2o1 - c7o1*omega + c5o1*omega*omega); - real factorB = (c4o1 + c28o1*omega - c14o1*omega*omega) / (c6o1 - c21o1*omega + c15o1*omega*omega); - ////////////////////////////////////////////////////////////////////////// - //ohne limiter - //CUMacc += O4 * (-CUMacc); - //CUMcac += O4 * (-CUMcac); - //CUMcca += O4 * (-CUMcca); - //CUMbbc += O4 * (-CUMbbc); - //CUMbcb += O4 * (-CUMbcb); - //CUMcbb += O4 * (-CUMcbb); - CUMacc = -O4*(c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMacc); - CUMcac = -O4*(c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * factorA + (c1o1 - O4) * (CUMcac); - CUMcca = -O4*(c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * factorA + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4*(c1o1 / omega - c1o2) * Dxy * c1o3 * factorB + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4*(c1o1 / omega - c1o2) * Dxz * c1o3 * factorB + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4*(c1o1 / omega - c1o2) * Dyz * c1o3 * factorB + (c1o1 - O4) * (CUMcbb); - ////////////////////////////////////////////////////////////////////////// - - - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - - //6. - CUMccc += O6 * (-CUMccc); - - - - //back cumulants to central moments - //4. - mfcbb = CUMcbb + ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) / rho; - mfbcb = CUMbcb + ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) / rho; - mfbbc = CUMbbc + ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) / rho; - - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) / rho - c1o9*(drho / rho)); - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) / rho - c1o9*(drho / rho)); - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) / rho - c1o9*(drho / rho)); - - //5. - mfbcc = CUMbcc + ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) / rho; - mfcbc = CUMcbc + ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) / rho; - mfccb = CUMccb + ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) / rho; - - //6. - - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) / rho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) / (rho * rho) - - c1o3 * (mfacc + mfcac + mfcca) / rho - - c1o9 * (mfcaa + mfaca + mfaac) / rho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) / (rho * rho) * c2o3 - + c1o27*((drho * drho - drho) / (rho*rho))); - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - //the force be with you - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////// - //back - //////////////////////////////////////////////////////////////////////////////////// - //mit 1, 0, 1/3, 0, 0, 0, 1/3, 0, 1/9 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - m0 = mfaac * c1o2 + mfaab * (vvz - c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfaac - c2o1* mfaab * vvz + mfaaa * (c1o1 - vz2) - c1o1* oMdrho * vz2; - m2 = mfaac * c1o2 + mfaab * (vvz + c1o2) + (mfaaa + c1o1* oMdrho) * (vz2 + vvz) * c1o2; - mfaaa = m0; - mfaab = m1; - mfaac = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfabc * c1o2 + mfabb * (vvz - c1o2) + mfaba * (vz2 - vvz) * c1o2; - m1 = -mfabc - c2o1* mfabb * vvz + mfaba * (c1o1 - vz2); - m2 = mfabc * c1o2 + mfabb * (vvz + c1o2) + mfaba * (vz2 + vvz) * c1o2; - mfaba = m0; - mfabb = m1; - mfabc = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfacb * (vvz - c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfacc - c2o1* mfacb * vvz + mfaca * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfacc * c1o2 + mfacb * (vvz + c1o2) + (mfaca + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfaca = m0; - mfacb = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbac * c1o2 + mfbab * (vvz - c1o2) + mfbaa * (vz2 - vvz) * c1o2; - m1 = -mfbac - c2o1* mfbab * vvz + mfbaa * (c1o1 - vz2); - m2 = mfbac * c1o2 + mfbab * (vvz + c1o2) + mfbaa * (vz2 + vvz) * c1o2; - mfbaa = m0; - mfbab = m1; - mfbac = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbbc * c1o2 + mfbbb * (vvz - c1o2) + mfbba * (vz2 - vvz) * c1o2; - m1 = -mfbbc - c2o1* mfbbb * vvz + mfbba * (c1o1 - vz2); - m2 = mfbbc * c1o2 + mfbbb * (vvz + c1o2) + mfbba * (vz2 + vvz) * c1o2; - mfbba = m0; - mfbbb = m1; - mfbbc = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbcb * (vvz - c1o2) + mfbca * (vz2 - vvz) * c1o2; - m1 = -mfbcc - c2o1* mfbcb * vvz + mfbca * (c1o1 - vz2); - m2 = mfbcc * c1o2 + mfbcb * (vvz + c1o2) + mfbca * (vz2 + vvz) * c1o2; - mfbca = m0; - mfbcb = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfcab * (vvz - c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfcac - c2o1* mfcab * vvz + mfcaa * (c1o1 - vz2) - c1o3 * oMdrho * vz2; - m2 = mfcac * c1o2 + mfcab * (vvz + c1o2) + (mfcaa + c1o3 * oMdrho) * (vz2 + vvz) * c1o2; - mfcaa = m0; - mfcab = m1; - mfcac = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfcbb * (vvz - c1o2) + mfcba * (vz2 - vvz) * c1o2; - m1 = -mfcbc - c2o1* mfcbb * vvz + mfcba * (c1o1 - vz2); - m2 = mfcbc * c1o2 + mfcbb * (vvz + c1o2) + mfcba * (vz2 + vvz) * c1o2; - mfcba = m0; - mfcbb = m1; - mfcbc = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfccb * (vvz - c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 - vvz) * c1o2; - m1 = -mfccc - c2o1* mfccb * vvz + mfcca * (c1o1 - vz2) - c1o9 * oMdrho * vz2; - m2 = mfccc * c1o2 + mfccb * (vvz + c1o2) + (mfcca + c1o9 * oMdrho) * (vz2 + vvz) * c1o2; - mfcca = m0; - mfccb = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/6, 2/3, 1/6, 0, 0, 0, 1/18, 2/9, 1/18 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - m0 = mfaca * c1o2 + mfaba * (vvy - c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfaca - c2o1* mfaba * vvy + mfaaa * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfaca * c1o2 + mfaba * (vvy + c1o2) + (mfaaa + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaaa = m0; - mfaba = m1; - mfaca = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacb * c1o2 + mfabb * (vvy - c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacb - c2o1* mfabb * vvy + mfaab * (c1o1 - vy2) - c2o3 * oMdrho * vy2; - m2 = mfacb * c1o2 + mfabb * (vvy + c1o2) + (mfaab + c2o3 * oMdrho) * (vy2 + vvy) * c1o2; - mfaab = m0; - mfabb = m1; - mfacb = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfacc * c1o2 + mfabc * (vvy - c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfacc - c2o1* mfabc * vvy + mfaac * (c1o1 - vy2) - c1o6 * oMdrho * vy2; - m2 = mfacc * c1o2 + mfabc * (vvy + c1o2) + (mfaac + c1o6 * oMdrho) * (vy2 + vvy) * c1o2; - mfaac = m0; - mfabc = m1; - mfacc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfbca * c1o2 + mfbba * (vvy - c1o2) + mfbaa * (vy2 - vvy) * c1o2; - m1 = -mfbca - c2o1* mfbba * vvy + mfbaa * (c1o1 - vy2); - m2 = mfbca * c1o2 + mfbba * (vvy + c1o2) + mfbaa * (vy2 + vvy) * c1o2; - mfbaa = m0; - mfbba = m1; - mfbca = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcb * c1o2 + mfbbb * (vvy - c1o2) + mfbab * (vy2 - vvy) * c1o2; - m1 = -mfbcb - c2o1* mfbbb * vvy + mfbab * (c1o1 - vy2); - m2 = mfbcb * c1o2 + mfbbb * (vvy + c1o2) + mfbab * (vy2 + vvy) * c1o2; - mfbab = m0; - mfbbb = m1; - mfbcb = m2; - /////////b////////////////////////////////////////////////////////////////////////// - m0 = mfbcc * c1o2 + mfbbc * (vvy - c1o2) + mfbac * (vy2 - vvy) * c1o2; - m1 = -mfbcc - c2o1* mfbbc * vvy + mfbac * (c1o1 - vy2); - m2 = mfbcc * c1o2 + mfbbc * (vvy + c1o2) + mfbac * (vy2 + vvy) * c1o2; - mfbac = m0; - mfbbc = m1; - mfbcc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfcba * (vvy - c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfcca - c2o1* mfcba * vvy + mfcaa * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfcca * c1o2 + mfcba * (vvy + c1o2) + (mfcaa + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcaa = m0; - mfcba = m1; - mfcca = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfcbb * (vvy - c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccb - c2o1* mfcbb * vvy + mfcab * (c1o1 - vy2) - c2o9 * oMdrho * vy2; - m2 = mfccb * c1o2 + mfcbb * (vvy + c1o2) + (mfcab + c2o9 * oMdrho) * (vy2 + vvy) * c1o2; - mfcab = m0; - mfcbb = m1; - mfccb = m2; - /////////c////////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfcbc * (vvy - c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 - vvy) * c1o2; - m1 = -mfccc - c2o1* mfcbc * vvy + mfcac * (c1o1 - vy2) - c1o18 * oMdrho * vy2; - m2 = mfccc * c1o2 + mfcbc * (vvy + c1o2) + (mfcac + c1o18 * oMdrho) * (vy2 + vvy) * c1o2; - mfcac = m0; - mfcbc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - //mit 1/36, 1/9, 1/36, 1/9, 4/9, 1/9, 1/36, 1/9, 1/36 Konditionieren - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - m0 = mfcaa * c1o2 + mfbaa * (vvx - c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcaa - c2o1* mfbaa * vvx + mfaaa * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcaa * c1o2 + mfbaa * (vvx + c1o2) + (mfaaa + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaaa = m0; - mfbaa = m1; - mfcaa = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcba * c1o2 + mfbba * (vvx - c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcba - c2o1* mfbba * vvx + mfaba * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcba * c1o2 + mfbba * (vvx + c1o2) + (mfaba + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaba = m0; - mfbba = m1; - mfcba = m2; - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcca * c1o2 + mfbca * (vvx - c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcca - c2o1* mfbca * vvx + mfaca * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcca * c1o2 + mfbca * (vvx + c1o2) + (mfaca + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaca = m0; - mfbca = m1; - mfcca = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcab * c1o2 + mfbab * (vvx - c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcab - c2o1* mfbab * vvx + mfaab * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcab * c1o2 + mfbab * (vvx + c1o2) + (mfaab + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfaab = m0; - mfbab = m1; - mfcab = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfcbb * c1o2 + mfbbb * (vvx - c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbb - c2o1* mfbbb * vvx + mfabb * (c1o1 - vx2) - c4o9 * oMdrho * vx2; - m2 = mfcbb * c1o2 + mfbbb * (vvx + c1o2) + (mfabb + c4o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabb = m0; - mfbbb = m1; - mfcbb = m2; - ///////////b//////////////////////////////////////////////////////////////////////// - m0 = mfccb * c1o2 + mfbcb * (vvx - c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccb - c2o1* mfbcb * vvx + mfacb * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfccb * c1o2 + mfbcb * (vvx + c1o2) + (mfacb + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfacb = m0; - mfbcb = m1; - mfccb = m2; - //////////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////////// - m0 = mfcac * c1o2 + mfbac * (vvx - c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcac - c2o1* mfbac * vvx + mfaac * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfcac * c1o2 + mfbac * (vvx + c1o2) + (mfaac + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfaac = m0; - mfbac = m1; - mfcac = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfcbc * c1o2 + mfbbc * (vvx - c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfcbc - c2o1* mfbbc * vvx + mfabc * (c1o1 - vx2) - c1o9 * oMdrho * vx2; - m2 = mfcbc * c1o2 + mfbbc * (vvx + c1o2) + (mfabc + c1o9 * oMdrho) * (vx2 + vvx) * c1o2; - mfabc = m0; - mfbbc = m1; - mfcbc = m2; - ///////////c//////////////////////////////////////////////////////////////////////// - m0 = mfccc * c1o2 + mfbcc * (vvx - c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 - vvx) * c1o2; - m1 = -mfccc - c2o1* mfbcc * vvx + mfacc * (c1o1 - vx2) - c1o36 * oMdrho * vx2; - m2 = mfccc * c1o2 + mfbcc * (vvx + c1o2) + (mfacc + c1o36 * oMdrho) * (vx2 + vvx) * c1o2; - mfacc = m0; - mfbcc = m1; - mfccc = m2; - //////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb; - (D.f[DIR_M00])[kw] = mfcbb; - (D.f[DIR_0P0])[k] = mfbab; - (D.f[DIR_0M0])[ks] = mfbcb; - (D.f[DIR_00P])[k] = mfbba; - (D.f[DIR_00M])[kb] = mfbbc; - (D.f[DIR_PP0])[k] = mfaab; - (D.f[DIR_MM0])[ksw] = mfccb; - (D.f[DIR_PM0])[ks] = mfacb; - (D.f[DIR_MP0])[kw] = mfcab; - (D.f[DIR_P0P])[k] = mfaba; - (D.f[DIR_M0M])[kbw] = mfcbc; - (D.f[DIR_P0M])[kb] = mfabc; - (D.f[DIR_M0P])[kw] = mfcba; - (D.f[DIR_0PP])[k] = mfbaa; - (D.f[DIR_0MM])[kbs] = mfbcc; - (D.f[DIR_0PM])[kb] = mfbac; - (D.f[DIR_0MP])[ks] = mfbca; - (D.f[DIR_000])[k] = mfbbb; - (D.f[DIR_PPP])[k] = mfaaa; - (D.f[DIR_PMP])[ks] = mfaca; - (D.f[DIR_PPM])[kb] = mfaac; - (D.f[DIR_PMM])[kbs] = mfacc; - (D.f[DIR_MPP])[kw] = mfcaa; - (D.f[DIR_MMP])[ksw] = mfcca; - (D.f[DIR_MPM])[kbw] = mfcac; - (D.f[DIR_MMM])[kbsw] = mfccc; - //////////////////////////////////////////////////////////////////////////////////// - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp_Device.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp_Device.cuh deleted file mode 100644 index 50da48fa702862b71dc13b8b21b34cd1e2b39250..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp_Device.cuh +++ /dev/null @@ -1,36 +0,0 @@ -#ifndef LB_KERNEL_WALE_CUMULANT_K17_DEBUG_COMP_H -#define LB_KERNEL_WALE_CUMULANT_K17_DEBUG_COMP_H - -#include <DataTypes.h> -#include <curand.h> - -__global__ void LB_Kernel_WaleCumulantK17DebugComp( - real omega_in, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* neighborWSB, - real* veloX, - real* veloY, - real* veloZ, - real* DDStart, - real* turbulentViscosity, - real* gSij, - real* gSDij, - real* gDxvx, - real* gDyvx, - real* gDzvx, - real* gDxvy, - real* gDyvy, - real* gDzvy, - real* gDxvz, - real* gDyvz, - real* gDzvz, - int size_Mat, - int level, - real* forces, - real* quadricLimiters, - bool EvenOrOdd); - -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/WaleFluidFlowCompStrategy.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/WaleFluidFlowCompStrategy.cpp deleted file mode 100644 index b2099ddb12e07f38214728871f8fda9391195555..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/WaleFluidFlowCompStrategy.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include "WaleFluidFlowCompStrategy.h" - -#include "Parameter/Parameter.h" - -std::shared_ptr<WaleFluidFlowCompStrategy> WaleFluidFlowCompStrategy::getInstance() -{ - static std::shared_ptr<WaleFluidFlowCompStrategy> uniqueInstance; - if (!uniqueInstance) - uniqueInstance = std::shared_ptr<WaleFluidFlowCompStrategy>(new WaleFluidFlowCompStrategy()); - return uniqueInstance; -} - -bool WaleFluidFlowCompStrategy::checkParameter(std::shared_ptr<Parameter> para) -{ - if (!para->getUseWale()) - return false; - else if (!para->getCompOn()) - return false; - else - return true; -} - -WaleFluidFlowCompStrategy::WaleFluidFlowCompStrategy() { -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/WaleFluidFlowCompStrategy.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/WaleFluidFlowCompStrategy.h deleted file mode 100644 index 7de7bd81754149d86a531e655a8a071ea64e31c8..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/WaleKernels/FluidFlow/Compressible/WaleFluidFlowCompStrategy.h +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef WALE_FLUID_FLOW_COMP_STRATEGY_H -#define WALE_FLUID_FLOW_COMP_STRATEGY_H - -#include "Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h" - - -class WaleFluidFlowCompStrategy : public CheckParameterStrategy -{ -public: - static std::shared_ptr<WaleFluidFlowCompStrategy> getInstance(); - - bool checkParameter(std::shared_ptr<Parameter> para); - -private: - WaleFluidFlowCompStrategy(); - -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h deleted file mode 100644 index 2fcd9a081df520af8d5517747b021a3f0353df6f..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef CHECK_PARAMETER_STRATEGY_H -#define CHECK_PARAMETER_STRATEGY_H - -#include <memory> - -class Parameter; - -class CheckParameterStrategy -{ -public: - virtual ~CheckParameterStrategy() = default; - virtual bool checkParameter(std::shared_ptr<Parameter> para) = 0; - -}; -#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/DistributionHelper.cu b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/DistributionHelper.cu deleted file mode 100644 index 3cc4b33f0b752943c97b1b770c62189a6c17d9c8..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/DistributionHelper.cu +++ /dev/null @@ -1,82 +0,0 @@ -#include "DistributionHelper.cuh" - -#include <cuda_runtime.h> - -#include "basics/constants/NumericConstants.h" -#include "lbm/constants/D3Q27.h" -using namespace vf::lbm::dir; - -namespace vf::gpu -{ - -__device__ DistributionWrapper::DistributionWrapper(real *distributions, unsigned int size_Mat, bool isEvenTimestep, - uint k, uint *neighborX, uint *neighborY, uint *neighborZ) - : distribution_references(getDistributionReferences27(distributions, size_Mat, isEvenTimestep)), k(k), kw(neighborX[k]), ks(neighborY[k]), - kb(neighborZ[k]), ksw(neighborY[kw]), kbw(neighborZ[kw]), kbs(neighborZ[ks]), kbsw(neighborZ[ksw]) -{ - read(); -} - -__device__ void DistributionWrapper::read() -{ - distribution.f[vf::lbm::dir::DIR_P00] = (distribution_references.f[DIR_P00])[k]; - distribution.f[vf::lbm::dir::DIR_M00] = (distribution_references.f[DIR_M00])[kw]; - distribution.f[vf::lbm::dir::DIR_0P0] = (distribution_references.f[DIR_0P0])[k]; - distribution.f[vf::lbm::dir::DIR_0M0] = (distribution_references.f[DIR_0M0])[ks]; - distribution.f[vf::lbm::dir::DIR_00P] = (distribution_references.f[DIR_00P])[k]; - distribution.f[vf::lbm::dir::DIR_00M] = (distribution_references.f[DIR_00M])[kb]; - distribution.f[vf::lbm::dir::DIR_PP0] = (distribution_references.f[DIR_PP0])[k]; - distribution.f[vf::lbm::dir::DIR_MM0] = (distribution_references.f[DIR_MM0])[ksw]; - distribution.f[vf::lbm::dir::DIR_PM0] = (distribution_references.f[DIR_PM0])[ks]; - distribution.f[vf::lbm::dir::DIR_MP0] = (distribution_references.f[DIR_MP0])[kw]; - distribution.f[vf::lbm::dir::DIR_P0P] = (distribution_references.f[DIR_P0P])[k]; - distribution.f[vf::lbm::dir::DIR_M0M] = (distribution_references.f[DIR_M0M])[kbw]; - distribution.f[vf::lbm::dir::DIR_P0M] = (distribution_references.f[DIR_P0M])[kb]; - distribution.f[vf::lbm::dir::DIR_M0P] = (distribution_references.f[DIR_M0P])[kw]; - distribution.f[vf::lbm::dir::DIR_0PP] = (distribution_references.f[DIR_0PP])[k]; - distribution.f[vf::lbm::dir::DIR_0MM] = (distribution_references.f[DIR_0MM])[kbs]; - distribution.f[vf::lbm::dir::DIR_0PM] = (distribution_references.f[DIR_0PM])[kb]; - distribution.f[vf::lbm::dir::DIR_0MP] = (distribution_references.f[DIR_0MP])[ks]; - distribution.f[vf::lbm::dir::DIR_PPP] = (distribution_references.f[DIR_PPP])[k]; - distribution.f[vf::lbm::dir::DIR_MPP] = (distribution_references.f[DIR_MPP])[kw]; - distribution.f[vf::lbm::dir::DIR_PMP] = (distribution_references.f[DIR_PMP])[ks]; - distribution.f[vf::lbm::dir::DIR_MMP] = (distribution_references.f[DIR_MMP])[ksw]; - distribution.f[vf::lbm::dir::DIR_PPM] = (distribution_references.f[DIR_PPM])[kb]; - distribution.f[vf::lbm::dir::DIR_MPM] = (distribution_references.f[DIR_MPM])[kbw]; - distribution.f[vf::lbm::dir::DIR_PMM] = (distribution_references.f[DIR_PMM])[kbs]; - distribution.f[vf::lbm::dir::DIR_MMM] = (distribution_references.f[DIR_MMM])[kbsw]; - distribution.f[vf::lbm::dir::DIR_000] = (distribution_references.f[DIR_000])[k]; -} - -__device__ void DistributionWrapper::write() -{ - (distribution_references.f[DIR_P00])[k] = distribution.f[vf::lbm::dir::PZZ]; - (distribution_references.f[DIR_M00])[kw] = distribution.f[vf::lbm::dir::MZZ]; - (distribution_references.f[DIR_0P0])[k] = distribution.f[vf::lbm::dir::ZPZ]; - (distribution_references.f[DIR_0M0])[ks] = distribution.f[vf::lbm::dir::ZMZ]; - (distribution_references.f[DIR_00P])[k] = distribution.f[vf::lbm::dir::ZZP]; - (distribution_references.f[DIR_00M])[kb] = distribution.f[vf::lbm::dir::ZZM]; - (distribution_references.f[DIR_PP0])[k] = distribution.f[vf::lbm::dir::PPZ]; - (distribution_references.f[DIR_MM0])[ksw] = distribution.f[vf::lbm::dir::MMZ]; - (distribution_references.f[DIR_PM0])[ks] = distribution.f[vf::lbm::dir::PMZ]; - (distribution_references.f[DIR_MP0])[kw] = distribution.f[vf::lbm::dir::MPZ]; - (distribution_references.f[DIR_P0P])[k] = distribution.f[vf::lbm::dir::PZP]; - (distribution_references.f[DIR_M0M])[kbw] = distribution.f[vf::lbm::dir::MZM]; - (distribution_references.f[DIR_P0M])[kb] = distribution.f[vf::lbm::dir::PZM]; - (distribution_references.f[DIR_M0P])[kw] = distribution.f[vf::lbm::dir::MZP]; - (distribution_references.f[DIR_0PP])[k] = distribution.f[vf::lbm::dir::ZPP]; - (distribution_references.f[DIR_0MM])[kbs] = distribution.f[vf::lbm::dir::ZMM]; - (distribution_references.f[DIR_0PM])[kb] = distribution.f[vf::lbm::dir::ZPM]; - (distribution_references.f[DIR_0MP])[ks] = distribution.f[vf::lbm::dir::ZMP]; - (distribution_references.f[DIR_PPP])[k] = distribution.f[vf::lbm::dir::PPP]; - (distribution_references.f[DIR_MPP])[kw] = distribution.f[vf::lbm::dir::MPP]; - (distribution_references.f[DIR_PMP])[ks] = distribution.f[vf::lbm::dir::PMP]; - (distribution_references.f[DIR_MMP])[ksw] = distribution.f[vf::lbm::dir::MMP]; - (distribution_references.f[DIR_PPM])[kb] = distribution.f[vf::lbm::dir::PPM]; - (distribution_references.f[DIR_MPM])[kbw] = distribution.f[vf::lbm::dir::MPM]; - (distribution_references.f[DIR_PMM])[kbs] = distribution.f[vf::lbm::dir::PMM]; - (distribution_references.f[DIR_MMM])[kbsw] = distribution.f[vf::lbm::dir::MMM]; - (distribution_references.f[DIR_000])[k] = distribution.f[vf::lbm::dir::ZZZ]; -} - -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/DistributionHelper.cuh b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/DistributionHelper.cuh deleted file mode 100644 index 599f3f46668c07da49725770177d77239f8ef9df..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/DistributionHelper.cuh +++ /dev/null @@ -1,99 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// 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/>. -// -//! \file Cumulant27chim.cu -//! \ingroup GPU -//! \author Martin Schoenherr, Soeren Peters -//======================================================================================= -#ifndef DISTRIBUTUION_HELPER_CUH -#define DISTRIBUTUION_HELPER_CUH - -#include "LBM/LB.h" - -#include "lbm/KernelParameter.h" -#include "lbm/constants/D3Q27.h" -#include "LBM/GPUHelperFunctions/KernelUtilities.h" - -using namespace vf::lbm::dir; - -namespace vf::gpu -{ - -/** -* Getting references to the 27 directions. -* @params distributions 1D real* array containing all data (number of elements = 27 * matrix_size) -* @params matrix_size number of discretizations nodes -* @params isEvenTimestep: stored data dependent on timestep is based on the esoteric twist algorithm -* @return a data struct containing the addresses to the 27 directions within the 1D distribution array -*/ -__inline__ __device__ __host__ DistributionReferences27 getDistributionReferences27(real* distributions, const unsigned long long numberOfLBnodes, const bool isEvenTimestep){ - DistributionReferences27 distribution_references; - getPointersToDistributions(distribution_references, distributions, numberOfLBnodes, isEvenTimestep); - return distribution_references; -} - - -/** -* Holds the references to all directions and the concrete distributions for a single node. -* After instantiation the distributions are read to the member "distribution" from "distribution_references". -* After computation the data can be written back to "distribution_references". -*/ -struct DistributionWrapper -{ - __device__ DistributionWrapper( - real* distributions, - unsigned int size_Mat, - bool isEvenTimestep, - uint k, - uint* neighborX, - uint* neighborY, - uint* neighborZ); - - __device__ void read(); - - __device__ void write(); - - // origin distributions to read from and write to after computation - DistributionReferences27 distribution_references; - - // distribution pass to kernel computation - vf::lbm::Distribution27 distribution; - - const uint k; - const uint kw; - const uint ks; - const uint kb; - const uint ksw; - const uint kbw; - const uint kbs; - const uint kbsw; -}; - -} - -#endif diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/DistributionHelperTests.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/DistributionHelperTests.cpp deleted file mode 100644 index 9d6529404284f786f85a7445e494487fe75d8ad7..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/DistributionHelperTests.cpp +++ /dev/null @@ -1,85 +0,0 @@ -#include <gmock/gmock.h> -#include "basics/tests/testUtilities.h" - -#include "DistributionHelper.cuh" - -#include "lbm/constants/D3Q27.h" -using namespace vf::lbm::dir; - -TEST(DistributionHelperTests, getPointerToDistribution_WhenEvenTimeStep_ShouldBeEqualToInput) -{ - real distributions_in[27]; - for (int i = 0; i < 27; i++) - distributions_in[i] = i; - const uint size_Mat = 1; - const bool isEvenTimeStep = true; - - Distributions27 distribution_out = vf::gpu::getDistributionReferences27(distributions_in, size_Mat, isEvenTimeStep); - - EXPECT_THAT(*distribution_out.f[DIR_P00], RealEq(distributions_in[DIR_P00])); - EXPECT_THAT(*distribution_out.f[DIR_M00], RealEq(distributions_in[DIR_M00])); - EXPECT_THAT(*distribution_out.f[DIR_0P0], RealEq(distributions_in[DIR_0P0])); - EXPECT_THAT(*distribution_out.f[DIR_0M0], RealEq(distributions_in[DIR_0M0])); - EXPECT_THAT(*distribution_out.f[DIR_00P], RealEq(distributions_in[DIR_00P])); - EXPECT_THAT(*distribution_out.f[DIR_00M], RealEq(distributions_in[DIR_00M])); - EXPECT_THAT(*distribution_out.f[DIR_PP0], RealEq(distributions_in[DIR_PP0])); - EXPECT_THAT(*distribution_out.f[DIR_MM0], RealEq(distributions_in[DIR_MM0])); - EXPECT_THAT(*distribution_out.f[DIR_PM0], RealEq(distributions_in[DIR_PM0])); - EXPECT_THAT(*distribution_out.f[DIR_MP0], RealEq(distributions_in[DIR_MP0])); - EXPECT_THAT(*distribution_out.f[DIR_P0P], RealEq(distributions_in[DIR_P0P])); - EXPECT_THAT(*distribution_out.f[DIR_M0M], RealEq(distributions_in[DIR_M0M])); - EXPECT_THAT(*distribution_out.f[DIR_P0M], RealEq(distributions_in[DIR_P0M])); - EXPECT_THAT(*distribution_out.f[DIR_M0P], RealEq(distributions_in[DIR_M0P])); - EXPECT_THAT(*distribution_out.f[DIR_0PP], RealEq(distributions_in[DIR_0PP])); - EXPECT_THAT(*distribution_out.f[DIR_0MM], RealEq(distributions_in[DIR_0MM])); - EXPECT_THAT(*distribution_out.f[DIR_0PM], RealEq(distributions_in[DIR_0PM])); - EXPECT_THAT(*distribution_out.f[DIR_0MP], RealEq(distributions_in[DIR_0MP])); - EXPECT_THAT(*distribution_out.f[DIR_000], RealEq(distributions_in[DIR_000])); - EXPECT_THAT(*distribution_out.f[DIR_PPP], RealEq(distributions_in[DIR_PPP])); - EXPECT_THAT(*distribution_out.f[DIR_MMP], RealEq(distributions_in[DIR_MMP])); - EXPECT_THAT(*distribution_out.f[DIR_PMP], RealEq(distributions_in[DIR_PMP])); - EXPECT_THAT(*distribution_out.f[DIR_MPP], RealEq(distributions_in[DIR_MPP])); - EXPECT_THAT(*distribution_out.f[DIR_PPM], RealEq(distributions_in[DIR_PPM])); - EXPECT_THAT(*distribution_out.f[DIR_MMM], RealEq(distributions_in[DIR_MMM])); - EXPECT_THAT(*distribution_out.f[DIR_PMM], RealEq(distributions_in[DIR_PMM])); - EXPECT_THAT(*distribution_out.f[DIR_MPM], RealEq(distributions_in[DIR_MPM])); -} - -TEST(DistributionHelperTests, getPointerToDistribution_WhenOddTimeStep_ShouldBeSwapped) -{ - real distributions_in[27]; - for (int i = 0; i < 27; i++) - distributions_in[i] = i; - const int size_Mat = 1; - const bool isEvenTimeStep = false; - - Distributions27 distribution_out = vf::gpu::getDistributionReferences27(distributions_in, size_Mat, isEvenTimeStep); - - EXPECT_THAT(*distribution_out.f[DIR_M00], RealEq(distributions_in[DIR_P00])); - EXPECT_THAT(*distribution_out.f[DIR_P00], RealEq(distributions_in[DIR_M00])); - EXPECT_THAT(*distribution_out.f[DIR_0M0], RealEq(distributions_in[DIR_0P0])); - EXPECT_THAT(*distribution_out.f[DIR_0P0], RealEq(distributions_in[DIR_0M0])); - EXPECT_THAT(*distribution_out.f[DIR_00M], RealEq(distributions_in[DIR_00P])); - EXPECT_THAT(*distribution_out.f[DIR_00P], RealEq(distributions_in[DIR_00M])); - EXPECT_THAT(*distribution_out.f[DIR_MM0], RealEq(distributions_in[DIR_PP0])); - EXPECT_THAT(*distribution_out.f[DIR_PP0], RealEq(distributions_in[DIR_MM0])); - EXPECT_THAT(*distribution_out.f[DIR_MP0], RealEq(distributions_in[DIR_PM0])); - EXPECT_THAT(*distribution_out.f[DIR_PM0], RealEq(distributions_in[DIR_MP0])); - EXPECT_THAT(*distribution_out.f[DIR_M0M], RealEq(distributions_in[DIR_P0P])); - EXPECT_THAT(*distribution_out.f[DIR_P0P], RealEq(distributions_in[DIR_M0M])); - EXPECT_THAT(*distribution_out.f[DIR_M0P], RealEq(distributions_in[DIR_P0M])); - EXPECT_THAT(*distribution_out.f[DIR_P0M], RealEq(distributions_in[DIR_M0P])); - EXPECT_THAT(*distribution_out.f[DIR_0MM], RealEq(distributions_in[DIR_0PP])); - EXPECT_THAT(*distribution_out.f[DIR_0PP], RealEq(distributions_in[DIR_0MM])); - EXPECT_THAT(*distribution_out.f[DIR_0MP], RealEq(distributions_in[DIR_0PM])); - EXPECT_THAT(*distribution_out.f[DIR_0PM], RealEq(distributions_in[DIR_0MP])); - EXPECT_THAT(*distribution_out.f[DIR_000], RealEq(distributions_in[DIR_000])); - EXPECT_THAT(*distribution_out.f[DIR_MMM], RealEq(distributions_in[DIR_PPP])); - EXPECT_THAT(*distribution_out.f[DIR_PPM], RealEq(distributions_in[DIR_MMP])); - EXPECT_THAT(*distribution_out.f[DIR_MPM], RealEq(distributions_in[DIR_PMP])); - EXPECT_THAT(*distribution_out.f[DIR_PMM], RealEq(distributions_in[DIR_MPP])); - EXPECT_THAT(*distribution_out.f[DIR_MMP], RealEq(distributions_in[DIR_PPM])); - EXPECT_THAT(*distribution_out.f[DIR_PPP], RealEq(distributions_in[DIR_MMM])); - EXPECT_THAT(*distribution_out.f[DIR_MPP], RealEq(distributions_in[DIR_PMM])); - EXPECT_THAT(*distribution_out.f[DIR_PMP], RealEq(distributions_in[DIR_MPM])); -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.cpp deleted file mode 100644 index db803b0b3acc7cbddcc3aacfbf9c9eff594a0f74..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.cpp +++ /dev/null @@ -1,246 +0,0 @@ -#include "KernelFactoryImp.h" - -#include <logger/Logger.h> - -#include "Parameter/Parameter.h" - -#include "Kernel/Utilities/KernelTypes.h" - -//LBM kernel (compressible) -#include "Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes.h" -#include "Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplusUnified.h" -#include "Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus.h" -#include "Kernel/Compressible/FluidFlow/M02/M02CompressibleNavierStokes.h" -#include "Kernel/Compressible/FluidFlow/C06/C06CompressibleNavierStokes.h" -#include "Kernel/Compressible/FluidFlow/K08/K08CompressibleNavierStokes.h" -#include "Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes.h" -#include "Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesBulkViscosity.h" -#include "Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesSponge.h" -#include "Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokesUnified.h" -#include "Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokes.h" -#include "Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesChimeraLegacy.h" -#include "Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesBulkViscosity.h" -#include "Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesUnified.h" -#include "Kernel/Compressible/FluidFlow/K17/K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants.h" -#include "Kernel/Compressible/FluidFlow/K18/K18CompressibleNavierStokes.h" -#include "Kernel/Compressible/FluidFlow/K20/K20CompressibleNavierStokes.h" - -//LBM kernel (inkompressible) -#include "Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes.h" -#include "Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus.h" -#include "Kernel/Incompressible/FluidFlow/C06/C06IncompressibleNavierStokes.h" -#include "Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesRotatingVelocityField.h" -#include "Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokesIsoCheck.h" -#include "Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes.h" -#include "Kernel/Incompressible/FluidFlow/M02/M02IncompressibleNavierStokes.h" - -//advection diffusion kernel (compressible) -#include "Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADComp27/ADComp27.h" -#include "Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADComp7/ADComp7.h" - -//advection diffusion kernel (incompressible) -#include "Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADIncomp27/ADIncomp27.h" -#include "Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADIncomp7/ADIncomp7.h" - -//porous media kernel -#include "Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/CumulantOne/PMCumulantOneCompSP27.h" - -//wale kernel -#include "Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17/WaleCumulantK17Comp.h" -#include "Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK17Debug/WaleCumulantK17DebugComp.h" -#include "Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15/WaleCumulantK15Comp.h" -#include "Kernel/Kernels/WaleKernels/FluidFlow/Compressible/CumulantK15BySoniMalav/WaleBySoniMalavCumulantK15Comp.h" - -//strategies -#include "Kernel/Compressible/FluidFlow/FluidFlowCompStrategy.h" -#include "Kernel/Incompressible/FluidFlow/FluidFlowIncompStrategy.h" -#include "Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod27/ADMod27CompStrategy.h" -#include "Kernel/Kernels/BasicKernels/AdvectionDiffusion/Compressible/Mod7/ADMod7CompStrategy.h" -#include "Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod27/ADMod27IncompStrategy.h" -#include "Kernel/Kernels/BasicKernels/AdvectionDiffusion/Incompressible/Mod7/ADMod7IncompStrategy.h" -#include "Kernel/Kernels/PorousMediaKernels/FluidFlow/Compressible/PMFluidFlowCompStrategy.h" -#include "Kernel/Kernels/WaleKernels/FluidFlow/Compressible/WaleFluidFlowCompStrategy.h" - -using namespace vf; - -std::vector<std::shared_ptr<Kernel>> KernelFactoryImp::makeKernels(std::shared_ptr<Parameter> para) -{ - std::vector< std::shared_ptr< Kernel>> kernels; - for (int level = 0; level <= para->getMaxLevel(); level++) - kernels.push_back(makeKernel(para, para->getMainKernel(), level)); - - if (para->getMaxLevel() > 0) - if (para->getMultiKernelOn()) - for (std::size_t i = 0; i < para->getMultiKernelLevel().size(); i++) - setKernelAtLevel(kernels, para, para->getMultiKernel().at(i), para->getMultiKernelLevel().at(i)); - return kernels; -} - -std::vector<std::shared_ptr<ADKernel>> KernelFactoryImp::makeAdvDifKernels(std::shared_ptr<Parameter> para) -{ - std::vector< std::shared_ptr< ADKernel>> aDKernels; - for (int level = 0; level <= para->getMaxLevel(); level++) - aDKernels.push_back(makeAdvDifKernel(para, para->getADKernel(), level)); - return aDKernels; -} - -void KernelFactoryImp::setPorousMedia(std::vector<std::shared_ptr<PorousMedia>> pm) -{ - this->pm = pm; -} - -void KernelFactoryImp::setKernelAtLevel(std::vector<std::shared_ptr<Kernel>> kernels, std::shared_ptr<Parameter> para, std::string kernel, int level) -{ - kernels.at(level) = makeKernel(para, kernel, level); -} - -std::shared_ptr<Kernel> KernelFactoryImp::makeKernel(std::shared_ptr<Parameter> para, std::string kernel, int level) -{ - VF_LOG_INFO("Instantiating Kernel: {}", kernel); - std::shared_ptr<KernelImp> newKernel; - std::shared_ptr<CheckParameterStrategy> checkStrategy; - - if (kernel == CollisionKernel::Compressible::BGK) { - newKernel = B92CompressibleNavierStokes::getNewInstance(para, level); // compressible - checkStrategy = FluidFlowCompStrategy::getInstance(); // || - } else if (kernel == CollisionKernel::Compressible::BGKUnified) { // \/ - newKernel = std::make_shared<vf::gpu::B15CompressibleNavierStokesBGKplusUnified>(para, level); - checkStrategy = FluidFlowCompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Compressible::BGKPlus) { - newKernel = B15CompressibleNavierStokesBGKplus::getNewInstance(para, level); - checkStrategy = FluidFlowCompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Compressible::MRT) { - newKernel = M02CompressibleNavierStokes::getNewInstance(para, level); - checkStrategy = FluidFlowCompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Compressible::Cascade) { - newKernel = C06CompressibleNavierStokes::getNewInstance(para, level); - checkStrategy = FluidFlowCompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Compressible::CumulantClassic) { - newKernel = K08CompressibleNavierStokes::getNewInstance(para, level); - checkStrategy = FluidFlowCompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Compressible::CumulantK15Unified) { - newKernel = std::make_shared<vf::gpu::K15CompressibleNavierStokesUnified>(para, level); - checkStrategy = FluidFlowCompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Compressible::K17CompressibleNavierStokesUnified) { - newKernel = std::make_shared<vf::gpu::K17CompressibleNavierStokesUnified>(para, level); - checkStrategy = FluidFlowCompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Compressible::K17CompressibleNavierStokesBulkViscosity) { - newKernel = K17CompressibleNavierStokesBulkViscosity::getNewInstance(para, level); - checkStrategy = FluidFlowCompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Compressible::K17CompressibleNavierStokesChimeraLegacy) { - newKernel = K17CompressibleNavierStokesChimeraLegacy::getNewInstance(para, level); - checkStrategy = FluidFlowCompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Compressible::K17CompressibleNavierStokes){ - switch(para->getTurbulenceModel()) - { - case TurbulenceModel::AMD: - newKernel = K17CompressibleNavierStokes<TurbulenceModel::AMD>::getNewInstance(para, level); - break; - case TurbulenceModel::Smagorinsky: - newKernel = K17CompressibleNavierStokes<TurbulenceModel::Smagorinsky>::getNewInstance(para, level); - break; - case TurbulenceModel::QR: - newKernel = K17CompressibleNavierStokes<TurbulenceModel::QR>::getNewInstance(para, level); - break; - case TurbulenceModel::None: - newKernel = K17CompressibleNavierStokes<TurbulenceModel::None>::getNewInstance(para, level); - break; - default: - throw std::runtime_error("Unknown turbulence model!"); - break; - } - checkStrategy = FluidFlowCompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Compressible::CumulantAll4SP27) { - newKernel = K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants::getNewInstance(para, level); - checkStrategy = FluidFlowCompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Compressible::CumulantK18) { - newKernel = K18CompressibleNavierStokes::getNewInstance(para, level); - checkStrategy = FluidFlowCompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Compressible::CumulantK20) { - newKernel = K20CompressibleNavierStokes::getNewInstance(para, level); - checkStrategy = FluidFlowCompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Compressible::K15CompressibleNavierStokes) { - newKernel = K15CompressibleNavierStokes::getNewInstance(para, level); - checkStrategy = FluidFlowCompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Compressible::K15CompressibleNavierStokesBulk) { - newKernel = K15CompressibleNavierStokesBulkViscosity::getNewInstance(para, level); - checkStrategy = FluidFlowCompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Compressible::K15CompressibleNavierStokesSponge) { // /\ // - newKernel = K15CompressibleNavierStokesSponge::getNewInstance(para, level); // || - checkStrategy = FluidFlowCompStrategy::getInstance(); // compressible - } //=============== - else if ( kernel == CollisionKernel::Incompressible::BGK) { // incompressible - newKernel = B92IncompressibleNavierStokes::getNewInstance(para, level); // || - checkStrategy = FluidFlowIncompStrategy::getInstance(); // \/ - } else if (kernel == CollisionKernel::Incompressible::BGKPlus) { - newKernel = B15IncompressibleNavierStokesBGKplus::getNewInstance(para, level); - checkStrategy = FluidFlowIncompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Incompressible::MRT) { - newKernel = M02IncompressibleNavierStokes::getNewInstance(para, level); - checkStrategy = FluidFlowIncompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Incompressible::Cascade) { - newKernel = C06IncompressibleNavierStokes::getNewInstance(para, level); - checkStrategy = FluidFlowIncompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Incompressible::Cumulant1h) { - newKernel = K15IncompressibleNavierStokesRotatingVelocityField::getNewInstance(para, level); - checkStrategy = FluidFlowIncompStrategy::getInstance(); - //} else if (kernel == CollisionKernel::Incompressible::CumulantIsometric) { - // newKernel = K15IncompressibleNavierStokesIsoTest::getNewInstance(para, level); - // checkStrategy = FluidFlowIncompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Incompressible::CumulantK15) { // /\ // - newKernel = K15IncompressibleNavierStokes::getNewInstance(para, level); // || - checkStrategy = FluidFlowIncompStrategy::getInstance(); // incompressible - } //=============== - else if (kernel == CollisionKernel::PorousMedia::CumulantOne) { // porous media - newKernel = PMCumulantOneCompSP27::getNewInstance(para, pm, level); // || - checkStrategy = PMFluidFlowCompStrategy::getInstance(); // porous media - } //=============== - else if (kernel == CollisionKernel::Wale::CumulantK17) { // wale model - newKernel = WaleCumulantK17Comp::getNewInstance(para, level); // || - checkStrategy = WaleFluidFlowCompStrategy::getInstance(); // \/ - } else if (kernel == CollisionKernel::Wale::CumulantK17Debug) { - newKernel = WaleCumulantK17DebugComp::getNewInstance(para, level); - checkStrategy = WaleFluidFlowCompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Wale::CumulantK15) { - newKernel = WaleCumulantK15Comp::getNewInstance(para, level); - checkStrategy = WaleFluidFlowCompStrategy::getInstance(); - } else if (kernel == CollisionKernel::Wale::CumulantK15SoniMalav) { // /\ // - newKernel = WaleBySoniMalavCumulantK15Comp::getNewInstance(para, level); // || - checkStrategy = WaleFluidFlowCompStrategy::getInstance(); // wale model - } //=============== - else { - throw std::runtime_error("KernelFactory does not know the KernelType."); - } - newKernel->setCheckParameterStrategy(checkStrategy); - para->setKernelNeedsFluidNodeIndicesToRun(newKernel->getKernelUsesFluidNodeIndices()); - return newKernel; -} - -std::shared_ptr<ADKernel> KernelFactoryImp::makeAdvDifKernel(std::shared_ptr<Parameter> para, std::string kernel, int level) -{ - std::shared_ptr<ADKernel> newKernel; - std::shared_ptr<CheckParameterStrategy> checkStrategy; - - if (kernel == "ADComp27") { - newKernel = ADComp27::getNewInstance(para, level); - checkStrategy = ADMod27CompStrategy::getInstance(); - } else if(kernel == "ADComp7") { - newKernel = ADComp7::getNewInstance(para, level); - checkStrategy = ADMod7CompStrategy::getInstance(); - } else if (kernel == "ADIncomp27") { - newKernel = ADIncomp27::getNewInstance(para, level); - checkStrategy = ADMod7IncompStrategy::getInstance(); - } else if (kernel == "ADIncomp7") { - newKernel = ADIncomp7::getNewInstance(para, level); - checkStrategy = ADMod7IncompStrategy::getInstance(); - } else { - throw std::runtime_error("KernelFactory does not know the KernelType."); - } - - if (newKernel) { - newKernel->setCheckParameterStrategy(checkStrategy); - return newKernel; - } - else - throw std::runtime_error("KernelFactory does not know the KernelType."); -} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h deleted file mode 100644 index fd502fbeadf6d9445a786a8567dee1677557365f..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h +++ /dev/null @@ -1,51 +0,0 @@ -#ifndef KERNEL_TYPES_H -#define KERNEL_TYPES_H - -namespace vf::CollisionKernel::Compressible { - static const std::string BGK = "BGKCompSP27"; - static const std::string BGKUnified = "BGKUnified"; - static const std::string BGKPlus = "BGKPlusCompSP27"; - static const std::string MRT = "MRTCompSP27"; - static const std::string Cascade = "CascadeCompSP27"; - - static const std::string CumulantClassic = "CumulantCompSP27"; - - static const std::string CumulantK15Unified = "CumulantK15Unified"; - static const std::string K17CompressibleNavierStokesUnified = "K17CompressibleNavierStokesUnified"; - - static const std::string K17CompressibleNavierStokes = "K17CompressibleNavierStokes"; - static const std::string K17CompressibleNavierStokesBulkViscosity = "K17CompressibleNavierStokesBulkViscosity"; - static const std::string K17CompressibleNavierStokesChimeraLegacy = "K17CompressibleNavierStokesChimeraLegacy"; - - static const std::string CumulantAll4SP27 = "CumulantAll4CompSP27"; - static const std::string CumulantK18 = "CumulantK18Comp"; - static const std::string CumulantK20 = "CumulantK20Comp"; - - static const std::string K15CompressibleNavierStokes = "K15CompressibleNavierStokes"; - static const std::string K15CompressibleNavierStokesBulk = "K15CompressibleNavierStokesBulk"; - static const std::string K15CompressibleNavierStokesSponge = "K15CompressibleNavierStokesSponge"; - } - -namespace vf::CollisionKernel::Incompressible { - static const std::string BGK = "BGKIncompSP27"; - static const std::string BGKPlus = "BGKPlusIncompSP27"; - static const std::string MRT = "MRTIncompSP27"; - static const std::string Cascade = "CascadeIncompSP27"; - - static const std::string Cumulant1h = "Cumulant1hIncompSP27"; - static const std::string CumulantIsometric = "CumulantIsoIncompSP27"; - static const std::string CumulantK15 = "CumulantK15Incomp"; -} - -namespace vf::CollisionKernel::PorousMedia { - static const std::string CumulantOne = "CumulantOneCompSP27"; -} - -namespace vf::CollisionKernel::Wale { - static const std::string CumulantK17 = "WaleCumulantK17Comp"; - static const std::string CumulantK17Debug = "WaleCumulantK17DebugComp"; - static const std::string CumulantK15 = "WaleCumulantK15Comp"; - static const std::string CumulantK15SoniMalav = "WaleBySoniMalavCumulantK15Comp"; -} - -#endif diff --git a/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/KernelUtilities.h b/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/KernelUtilities.h deleted file mode 100644 index ebd1b8ab367b31c62fc1608b39215622819d35d9..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/KernelUtilities.h +++ /dev/null @@ -1,328 +0,0 @@ -//======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ -// \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ -// -// 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/>. -// -//! \file KernelUtilities.h -//! \ingroup LBM/GPUHelperFunctions -//! \author Martin Schoenherr, Anna Wellmann, Soeren Peters -//======================================================================================= -#ifndef KERNEL_UTILITIES_H -#define KERNEL_UTILITIES_H - -#include "LBM/LB.h" - -#include <cassert> - -#include <lbm/constants/D3Q27.h> -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; - -namespace vf::gpu -{ - -__inline__ __device__ __host__ void getPointersToDistributions(Distributions27 &dist, real *distributionArray, const unsigned long long numberOfLBnodes, const bool isEvenTimestep) -{ - if (isEvenTimestep) - { - dist.f[DIR_000] = &distributionArray[DIR_000 * numberOfLBnodes]; - dist.f[DIR_P00] = &distributionArray[DIR_P00 * numberOfLBnodes]; - dist.f[DIR_M00] = &distributionArray[DIR_M00 * numberOfLBnodes]; - dist.f[DIR_0P0] = &distributionArray[DIR_0P0 * numberOfLBnodes]; - dist.f[DIR_0M0] = &distributionArray[DIR_0M0 * numberOfLBnodes]; - dist.f[DIR_00P] = &distributionArray[DIR_00P * numberOfLBnodes]; - dist.f[DIR_00M] = &distributionArray[DIR_00M * numberOfLBnodes]; - dist.f[DIR_PP0] = &distributionArray[DIR_PP0 * numberOfLBnodes]; - dist.f[DIR_MM0] = &distributionArray[DIR_MM0 * numberOfLBnodes]; - dist.f[DIR_PM0] = &distributionArray[DIR_PM0 * numberOfLBnodes]; - dist.f[DIR_MP0] = &distributionArray[DIR_MP0 * numberOfLBnodes]; - dist.f[DIR_P0P] = &distributionArray[DIR_P0P * numberOfLBnodes]; - dist.f[DIR_M0M] = &distributionArray[DIR_M0M * numberOfLBnodes]; - dist.f[DIR_P0M] = &distributionArray[DIR_P0M * numberOfLBnodes]; - dist.f[DIR_M0P] = &distributionArray[DIR_M0P * numberOfLBnodes]; - dist.f[DIR_0PP] = &distributionArray[DIR_0PP * numberOfLBnodes]; - dist.f[DIR_0MM] = &distributionArray[DIR_0MM * numberOfLBnodes]; - dist.f[DIR_0PM] = &distributionArray[DIR_0PM * numberOfLBnodes]; - dist.f[DIR_0MP] = &distributionArray[DIR_0MP * numberOfLBnodes]; - dist.f[DIR_PPP] = &distributionArray[DIR_PPP * numberOfLBnodes]; - dist.f[DIR_MMP] = &distributionArray[DIR_MMP * numberOfLBnodes]; - dist.f[DIR_PMP] = &distributionArray[DIR_PMP * numberOfLBnodes]; - dist.f[DIR_MPP] = &distributionArray[DIR_MPP * numberOfLBnodes]; - dist.f[DIR_PPM] = &distributionArray[DIR_PPM * numberOfLBnodes]; - dist.f[DIR_MMM] = &distributionArray[DIR_MMM * numberOfLBnodes]; - dist.f[DIR_PMM] = &distributionArray[DIR_PMM * numberOfLBnodes]; - dist.f[DIR_MPM] = &distributionArray[DIR_MPM * numberOfLBnodes]; - } - else - { - dist.f[DIR_M00] = &distributionArray[DIR_P00 * numberOfLBnodes]; - dist.f[DIR_P00] = &distributionArray[DIR_M00 * numberOfLBnodes]; - dist.f[DIR_0M0] = &distributionArray[DIR_0P0 * numberOfLBnodes]; - dist.f[DIR_0P0] = &distributionArray[DIR_0M0 * numberOfLBnodes]; - dist.f[DIR_00M] = &distributionArray[DIR_00P * numberOfLBnodes]; - dist.f[DIR_00P] = &distributionArray[DIR_00M * numberOfLBnodes]; - dist.f[DIR_MM0] = &distributionArray[DIR_PP0 * numberOfLBnodes]; - dist.f[DIR_PP0] = &distributionArray[DIR_MM0 * numberOfLBnodes]; - dist.f[DIR_MP0] = &distributionArray[DIR_PM0 * numberOfLBnodes]; - dist.f[DIR_PM0] = &distributionArray[DIR_MP0 * numberOfLBnodes]; - dist.f[DIR_M0M] = &distributionArray[DIR_P0P * numberOfLBnodes]; - dist.f[DIR_P0P] = &distributionArray[DIR_M0M * numberOfLBnodes]; - dist.f[DIR_M0P] = &distributionArray[DIR_P0M * numberOfLBnodes]; - dist.f[DIR_P0M] = &distributionArray[DIR_M0P * numberOfLBnodes]; - dist.f[DIR_0MM] = &distributionArray[DIR_0PP * numberOfLBnodes]; - dist.f[DIR_0PP] = &distributionArray[DIR_0MM * numberOfLBnodes]; - dist.f[DIR_0MP] = &distributionArray[DIR_0PM * numberOfLBnodes]; - dist.f[DIR_0PM] = &distributionArray[DIR_0MP * numberOfLBnodes]; - dist.f[DIR_000] = &distributionArray[DIR_000 * numberOfLBnodes]; - dist.f[DIR_PPP] = &distributionArray[DIR_MMM * numberOfLBnodes]; - dist.f[DIR_MMP] = &distributionArray[DIR_PPM * numberOfLBnodes]; - dist.f[DIR_PMP] = &distributionArray[DIR_MPM * numberOfLBnodes]; - dist.f[DIR_MPP] = &distributionArray[DIR_PMM * numberOfLBnodes]; - dist.f[DIR_PPM] = &distributionArray[DIR_MMP * numberOfLBnodes]; - dist.f[DIR_MMM] = &distributionArray[DIR_PPP * numberOfLBnodes]; - dist.f[DIR_PMM] = &distributionArray[DIR_MPP * numberOfLBnodes]; - dist.f[DIR_MPM] = &distributionArray[DIR_PMP * numberOfLBnodes]; - } -} - -__inline__ __device__ void getPointersToSubgridDistances(SubgridDistances27& subgridD, real* subgridDistances, const unsigned int numberOfSubgridIndices) -{ - subgridD.q[DIR_P00] = &subgridDistances[DIR_P00 * numberOfSubgridIndices]; - subgridD.q[DIR_M00] = &subgridDistances[DIR_M00 * numberOfSubgridIndices]; - subgridD.q[DIR_0P0] = &subgridDistances[DIR_0P0 * numberOfSubgridIndices]; - subgridD.q[DIR_0M0] = &subgridDistances[DIR_0M0 * numberOfSubgridIndices]; - subgridD.q[DIR_00P] = &subgridDistances[DIR_00P * numberOfSubgridIndices]; - subgridD.q[DIR_00M] = &subgridDistances[DIR_00M * numberOfSubgridIndices]; - subgridD.q[DIR_PP0] = &subgridDistances[DIR_PP0 * numberOfSubgridIndices]; - subgridD.q[DIR_MM0] = &subgridDistances[DIR_MM0 * numberOfSubgridIndices]; - subgridD.q[DIR_PM0] = &subgridDistances[DIR_PM0 * numberOfSubgridIndices]; - subgridD.q[DIR_MP0] = &subgridDistances[DIR_MP0 * numberOfSubgridIndices]; - subgridD.q[DIR_P0P] = &subgridDistances[DIR_P0P * numberOfSubgridIndices]; - subgridD.q[DIR_M0M] = &subgridDistances[DIR_M0M * numberOfSubgridIndices]; - subgridD.q[DIR_P0M] = &subgridDistances[DIR_P0M * numberOfSubgridIndices]; - subgridD.q[DIR_M0P] = &subgridDistances[DIR_M0P * numberOfSubgridIndices]; - subgridD.q[DIR_0PP] = &subgridDistances[DIR_0PP * numberOfSubgridIndices]; - subgridD.q[DIR_0MM] = &subgridDistances[DIR_0MM * numberOfSubgridIndices]; - subgridD.q[DIR_0PM] = &subgridDistances[DIR_0PM * numberOfSubgridIndices]; - subgridD.q[DIR_0MP] = &subgridDistances[DIR_0MP * numberOfSubgridIndices]; - subgridD.q[DIR_000] = &subgridDistances[DIR_000 * numberOfSubgridIndices]; - subgridD.q[DIR_PPP] = &subgridDistances[DIR_PPP * numberOfSubgridIndices]; - subgridD.q[DIR_MMP] = &subgridDistances[DIR_MMP * numberOfSubgridIndices]; - subgridD.q[DIR_PMP] = &subgridDistances[DIR_PMP * numberOfSubgridIndices]; - subgridD.q[DIR_MPP] = &subgridDistances[DIR_MPP * numberOfSubgridIndices]; - subgridD.q[DIR_PPM] = &subgridDistances[DIR_PPM * numberOfSubgridIndices]; - subgridD.q[DIR_MMM] = &subgridDistances[DIR_MMM * numberOfSubgridIndices]; - subgridD.q[DIR_PMM] = &subgridDistances[DIR_PMM * numberOfSubgridIndices]; - subgridD.q[DIR_MPM] = &subgridDistances[DIR_MPM * numberOfSubgridIndices]; -} - -__inline__ __device__ real getEquilibriumForBC(const real& drho, const real& velocity, const real& cu_sq, const real weight) -{ - return weight * (drho + c9o2 * velocity * velocity * (c1o1 + drho) - cu_sq); -} - -__inline__ __device__ real getInterpolatedDistributionForVeloBC(const real& q, const real& f, const real& fInverse, const real& feq, - const real& omega, const real& velocity, const real weight) -{ - - return (c1o1-q) / (c1o1+q) * (f - fInverse + (f + fInverse - c2o1 * feq * omega) / (c1o1 - omega)) * c1o2 - + (q * (f + fInverse) - c6o1 * weight * velocity) / (c1o1 + q); -} - -__inline__ __device__ real getBounceBackDistributionForVeloBC( const real& f, - const real& velocity, const real weight) -{ - - return f - (c6o1 * weight * velocity); -} - -__inline__ __device__ real getInterpolatedDistributionForNoSlipBC(const real& q, const real& f, const real& fInverse, const real& feq, - const real& omega) -{ - - return (c1o1-q) / (c1o1+q) * (f - fInverse + (f + fInverse - c2o1 * feq * omega) / (c1o1 - omega)) * c1o2 - + (q * (f + fInverse)) / (c1o1 + q); -} - -__inline__ __device__ real getInterpolatedDistributionForNoSlipWithPressureBC(const real& q, const real& f, const real& fInverse, const real& feq, - const real& omega, const real& drho, const real weight) -{ - - return (c1o1-q) / (c1o1+q) * (f - fInverse + (f + fInverse - c2o1 * feq * omega) / (c1o1 - omega)) * c1o2 - + (q * (f + fInverse)) / (c1o1 + q) - weight * drho; -} - - -__inline__ __device__ real getInterpolatedDistributionForVeloWithPressureBC(const real& q, const real& f, const real& fInverse, const real& feq, - const real& omega, const real& drho, const real& velocity, const real weight) -{ - - return (c1o1-q) / (c1o1+q) * (f - fInverse + (f + fInverse - c2o1 * feq * omega) / (c1o1 - omega)) * c1o2 - + (q * (f + fInverse) - c6o1 * weight * velocity) / (c1o1 + q) - weight * drho; -} - -__inline__ __device__ unsigned int getNodeIndex() -{ - 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; - - return nx * (ny * z + y) + x; -} - -__inline__ __device__ bool isValidFluidNode(uint nodeType) -{ - return (nodeType == GEO_FLUID || nodeType == GEO_PM_0 || nodeType == GEO_PM_1 || nodeType == GEO_PM_2); -} - - -struct ListIndices -{ - __device__ ListIndices() {} - __device__ ListIndices(unsigned int k, unsigned int* neighborX, unsigned int* neighborY, unsigned int* neighborZ) - { - k_000 = k; - k_M00 = neighborX[k_000]; - k_0M0 = neighborY[k_000]; - k_00M = neighborZ[k_000]; - k_MM0 = neighborY[k_M00]; - k_M0M = neighborZ[k_M00]; - k_0MM = neighborZ[k_0M0]; - k_MMM = neighborZ[k_MM0]; - } - - unsigned int k_000 { 0 }; - unsigned int k_M00 { 0 }; - unsigned int k_0M0 { 0 }; - unsigned int k_00M { 0 }; - unsigned int k_MM0 { 0 }; - unsigned int k_M0M { 0 }; - unsigned int k_0MM { 0 }; - unsigned int k_MMM { 0 }; -}; - - -//////////////////////////////////////////////////////////////////////////////////// -//! - Read distributions: style of reading and writing the distributions from/to -//! stored arrays dependent on timestep is based on the esoteric twist algorithm -//! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), -//! DOI:10.3390/computation5020019 ]</b></a> -__device__ __inline__ void read(real *f, const Distributions27 &dist, const ListIndices &indices) -{ - f[DIR_000] = (dist.f[DIR_000])[indices.k_000]; - f[DIR_P00] = (dist.f[DIR_P00])[indices.k_000]; - f[DIR_M00] = (dist.f[DIR_M00])[indices.k_M00]; - f[DIR_0P0] = (dist.f[DIR_0P0])[indices.k_000]; - f[DIR_0M0] = (dist.f[DIR_0M0])[indices.k_0M0]; - f[DIR_00P] = (dist.f[DIR_00P])[indices.k_000]; - f[DIR_00M] = (dist.f[DIR_00M])[indices.k_00M]; - f[DIR_PP0] = (dist.f[DIR_PP0])[indices.k_000]; - f[DIR_MM0] = (dist.f[DIR_MM0])[indices.k_MM0]; - f[DIR_PM0] = (dist.f[DIR_PM0])[indices.k_0M0]; - f[DIR_MP0] = (dist.f[DIR_MP0])[indices.k_M00]; - f[DIR_P0P] = (dist.f[DIR_P0P])[indices.k_000]; - f[DIR_M0M] = (dist.f[DIR_M0M])[indices.k_M0M]; - f[DIR_P0M] = (dist.f[DIR_P0M])[indices.k_00M]; - f[DIR_M0P] = (dist.f[DIR_M0P])[indices.k_M00]; - f[DIR_0PP] = (dist.f[DIR_0PP])[indices.k_000]; - f[DIR_0MM] = (dist.f[DIR_0MM])[indices.k_0MM]; - f[DIR_0PM] = (dist.f[DIR_0PM])[indices.k_00M]; - f[DIR_0MP] = (dist.f[DIR_0MP])[indices.k_0M0]; - f[DIR_PPP] = (dist.f[DIR_PPP])[indices.k_000]; - f[DIR_MPP] = (dist.f[DIR_MPP])[indices.k_M00]; - f[DIR_PMP] = (dist.f[DIR_PMP])[indices.k_0M0]; - f[DIR_MMP] = (dist.f[DIR_MMP])[indices.k_MM0]; - f[DIR_PPM] = (dist.f[DIR_PPM])[indices.k_00M]; - f[DIR_MPM] = (dist.f[DIR_MPM])[indices.k_M0M]; - f[DIR_PMM] = (dist.f[DIR_PMM])[indices.k_0MM]; - f[DIR_MMM] = (dist.f[DIR_MMM])[indices.k_MMM]; -} - -__device__ __inline__ void readInverse(real *f, const Distributions27 &dist, const ListIndices &indices) -{ - //TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/101 - assert((false) || !fprintf(stderr, "Not implemented yet.\n")); -} - - -//////////////////////////////////////////////////////////////////////////////////// -//! - Write distributions: style of reading and writing the distributions from/to -//! stored arrays dependent on timestep is based on the esoteric twist algorithm -//! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), -//! DOI:10.3390/computation5020019 ]</b></a> -__inline__ __device__ void write(Distributions27 &destination, const ListIndices &indices, const real* f) -{ - (destination.f[DIR_000])[indices.k_000] = f[DIR_000]; - (destination.f[DIR_P00])[indices.k_000] = f[DIR_P00]; - (destination.f[DIR_M00])[indices.k_M00] = f[DIR_M00]; - (destination.f[DIR_0P0])[indices.k_000] = f[DIR_0P0]; - (destination.f[DIR_0M0])[indices.k_0M0] = f[DIR_0M0]; - (destination.f[DIR_00P])[indices.k_000] = f[DIR_00P]; - (destination.f[DIR_00M])[indices.k_00M] = f[DIR_00M]; - (destination.f[DIR_PP0])[indices.k_000] = f[DIR_PP0]; - (destination.f[DIR_MM0])[indices.k_MM0] = f[DIR_MM0]; - (destination.f[DIR_PM0])[indices.k_0M0] = f[DIR_PM0]; - (destination.f[DIR_MP0])[indices.k_M00] = f[DIR_MP0]; - (destination.f[DIR_P0P])[indices.k_000] = f[DIR_P0P]; - (destination.f[DIR_M0M])[indices.k_M0M] = f[DIR_M0M]; - (destination.f[DIR_P0M])[indices.k_00M] = f[DIR_P0M]; - (destination.f[DIR_M0P])[indices.k_M00] = f[DIR_M0P]; - (destination.f[DIR_0PP])[indices.k_000] = f[DIR_0PP]; - (destination.f[DIR_0MM])[indices.k_0MM] = f[DIR_0MM]; - (destination.f[DIR_0PM])[indices.k_00M] = f[DIR_0PM]; - (destination.f[DIR_0MP])[indices.k_0M0] = f[DIR_0MP]; - (destination.f[DIR_PPP])[indices.k_000] = f[DIR_PPP]; - (destination.f[DIR_MPP])[indices.k_M00] = f[DIR_MPP]; - (destination.f[DIR_PMP])[indices.k_0M0] = f[DIR_PMP]; - (destination.f[DIR_MMP])[indices.k_MM0] = f[DIR_MMP]; - (destination.f[DIR_PPM])[indices.k_00M] = f[DIR_PPM]; - (destination.f[DIR_MPM])[indices.k_M0M] = f[DIR_MPM]; - (destination.f[DIR_PMM])[indices.k_0MM] = f[DIR_PMM]; - (destination.f[DIR_MMM])[indices.k_MMM] = f[DIR_MMM]; -} - -__inline__ __device__ void writeInverse(Distributions27 &destination, const ListIndices &indices, const real* f) -{ - //TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/101 - assert((false) || !fprintf(stderr, "Not implemented yet.\n")); -} - - - - -__inline__ __device__ real calculateOmega(const real omega_old, real turbulenceViscosity) -{ - return omega_old / (c1o1 + c3o1 * omega_old * turbulenceViscosity); -} - -} - -#endif diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cu b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cu deleted file mode 100644 index 8fc9de61cfc20c5111a70ad544a9a26c5b3ea7b4..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cu +++ /dev/null @@ -1,200 +0,0 @@ -#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 LB_Init_Comp_AD_27(unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* geoD, - real* Conc, - real* ux, - real* uy, - real* uz, - unsigned int size_Mat, - real* DD27, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = geoD[k]; - - if (BC != GEO_SOLID && BC != GEO_VOID) - { - Distributions27 D27; - if (EvenOrOdd == true) - { - D27.f[DIR_P00] = &DD27[DIR_P00 *size_Mat]; - D27.f[DIR_M00] = &DD27[DIR_M00 *size_Mat]; - D27.f[DIR_0P0] = &DD27[DIR_0P0 *size_Mat]; - D27.f[DIR_0M0] = &DD27[DIR_0M0 *size_Mat]; - D27.f[DIR_00P] = &DD27[DIR_00P *size_Mat]; - D27.f[DIR_00M] = &DD27[DIR_00M *size_Mat]; - D27.f[DIR_PP0] = &DD27[DIR_PP0 *size_Mat]; - D27.f[DIR_MM0] = &DD27[DIR_MM0 *size_Mat]; - D27.f[DIR_PM0] = &DD27[DIR_PM0 *size_Mat]; - D27.f[DIR_MP0] = &DD27[DIR_MP0 *size_Mat]; - D27.f[DIR_P0P] = &DD27[DIR_P0P *size_Mat]; - D27.f[DIR_M0M] = &DD27[DIR_M0M *size_Mat]; - D27.f[DIR_P0M] = &DD27[DIR_P0M *size_Mat]; - D27.f[DIR_M0P] = &DD27[DIR_M0P *size_Mat]; - D27.f[DIR_0PP] = &DD27[DIR_0PP *size_Mat]; - D27.f[DIR_0MM] = &DD27[DIR_0MM *size_Mat]; - D27.f[DIR_0PM] = &DD27[DIR_0PM *size_Mat]; - D27.f[DIR_0MP] = &DD27[DIR_0MP *size_Mat]; - D27.f[DIR_000] = &DD27[DIR_000*size_Mat]; - D27.f[DIR_PPP] = &DD27[DIR_PPP *size_Mat]; - D27.f[DIR_MMP] = &DD27[DIR_MMP *size_Mat]; - D27.f[DIR_PMP] = &DD27[DIR_PMP *size_Mat]; - D27.f[DIR_MPP] = &DD27[DIR_MPP *size_Mat]; - D27.f[DIR_PPM] = &DD27[DIR_PPM *size_Mat]; - D27.f[DIR_MMM] = &DD27[DIR_MMM *size_Mat]; - D27.f[DIR_PMM]= &DD27[DIR_PMM *size_Mat]; - D27.f[DIR_MPM]= &DD27[DIR_MPM *size_Mat]; - } - else - { - D27.f[DIR_M00] = &DD27[DIR_P00 *size_Mat]; - D27.f[DIR_P00] = &DD27[DIR_M00 *size_Mat]; - D27.f[DIR_0M0] = &DD27[DIR_0P0 *size_Mat]; - D27.f[DIR_0P0] = &DD27[DIR_0M0 *size_Mat]; - D27.f[DIR_00M] = &DD27[DIR_00P *size_Mat]; - D27.f[DIR_00P] = &DD27[DIR_00M *size_Mat]; - D27.f[DIR_MM0] = &DD27[DIR_PP0 *size_Mat]; - D27.f[DIR_PP0] = &DD27[DIR_MM0 *size_Mat]; - D27.f[DIR_MP0] = &DD27[DIR_PM0 *size_Mat]; - D27.f[DIR_PM0] = &DD27[DIR_MP0 *size_Mat]; - D27.f[DIR_M0M] = &DD27[DIR_P0P *size_Mat]; - D27.f[DIR_P0P] = &DD27[DIR_M0M *size_Mat]; - D27.f[DIR_M0P] = &DD27[DIR_P0M *size_Mat]; - D27.f[DIR_P0M] = &DD27[DIR_M0P *size_Mat]; - D27.f[DIR_0MM] = &DD27[DIR_0PP *size_Mat]; - D27.f[DIR_0PP] = &DD27[DIR_0MM *size_Mat]; - D27.f[DIR_0MP] = &DD27[DIR_0PM *size_Mat]; - D27.f[DIR_0PM] = &DD27[DIR_0MP *size_Mat]; - D27.f[DIR_000] = &DD27[DIR_000*size_Mat]; - D27.f[DIR_MMM] = &DD27[DIR_PPP *size_Mat]; - D27.f[DIR_PPM] = &DD27[DIR_MMP *size_Mat]; - D27.f[DIR_MPM]= &DD27[DIR_PMP *size_Mat]; - D27.f[DIR_PMM]= &DD27[DIR_MPP *size_Mat]; - D27.f[DIR_MMP] = &DD27[DIR_PPM *size_Mat]; - D27.f[DIR_PPP] = &DD27[DIR_MMM *size_Mat]; - D27.f[DIR_MPP] = &DD27[DIR_PMM *size_Mat]; - D27.f[DIR_PMP] = &DD27[DIR_MPM *size_Mat]; - } - ////////////////////////////////////////////////////////////////////////// - real ConcD = Conc[k]; - real vx1 = ux[k]; - real vx2 = uy[k]; - real vx3 = uz[k]; - //real lambdaD = -three + sqrt(three); - //real Diffusivity = c1o20; - //real Lam = -(c1o2+one/lambdaD); - //real nue_d = Lam/three; - //real ae = Diffusivity/nue_d - one; - //real ux_sq = vx1 * vx1; - //real uy_sq = vx2 * vx2; - //real uz_sq = vx3 * vx3; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //D3Q7 - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //index - //unsigned int kzero= k; - //unsigned int ke = k; - //unsigned int kw = neighborX[k]; - //unsigned int kn = k; - //unsigned int ks = neighborY[k]; - //unsigned int kt = k; - //unsigned int kb = neighborZ[k]; - ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //(D7.f[0])[kzero] = ConcD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq)); - //(D7.f[1])[ke ] = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)+vx1*c1o2); - //(D7.f[2])[kw ] = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)-vx1*c1o2); - //(D7.f[3])[kn ] = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)+vx2*c1o2); - //(D7.f[4])[ks ] = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)-vx2*c1o2); - //(D7.f[5])[kt ] = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)+vx3*c1o2); - //(D7.f[6])[kb ] = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)-vx3*c1o2); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //D3Q27 - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //index - unsigned int kzero = k; - unsigned int ke = k; - unsigned int kw = neighborX[k]; - unsigned int kn = k; - unsigned int ks = neighborY[k]; - unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = k; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = k; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = k; - 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 = k; - unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real cu_sq = c3o2*(vx1*vx1 + vx2*vx2 + vx3*vx3); - - (D27.f[DIR_000])[kzero] = c8o27* ConcD*(c1o1 - cu_sq); - (D27.f[DIR_P00])[ke] = c2o27* ConcD*(c1o1 + c3o1*(vx1)+c9o2*(vx1)*(vx1)-cu_sq); - (D27.f[DIR_M00])[kw] = c2o27* ConcD*(c1o1 + c3o1*(-vx1) + c9o2*(-vx1)*(-vx1) - cu_sq); - (D27.f[DIR_0P0])[kn] = c2o27* ConcD*(c1o1 + c3o1*(vx2)+c9o2*(vx2)*(vx2)-cu_sq); - (D27.f[DIR_0M0])[ks] = c2o27* ConcD*(c1o1 + c3o1*(-vx2) + c9o2*(-vx2)*(-vx2) - cu_sq); - (D27.f[DIR_00P])[kt] = c2o27* ConcD*(c1o1 + c3o1*(vx3)+c9o2*(vx3)*(vx3)-cu_sq); - (D27.f[DIR_00M])[kb] = c2o27* ConcD*(c1o1 + c3o1*(-vx3) + c9o2*(-vx3)*(-vx3) - cu_sq); - (D27.f[DIR_PP0])[kne] = c1o54* ConcD*(c1o1 + c3o1*(vx1 + vx2) + c9o2*(vx1 + vx2)*(vx1 + vx2) - cu_sq); - (D27.f[DIR_MM0])[ksw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 - vx2) + c9o2*(-vx1 - vx2)*(-vx1 - vx2) - cu_sq); - (D27.f[DIR_PM0])[kse] = c1o54* ConcD*(c1o1 + c3o1*(vx1 - vx2) + c9o2*(vx1 - vx2)*(vx1 - vx2) - cu_sq); - (D27.f[DIR_MP0])[knw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 + vx2) + c9o2*(-vx1 + vx2)*(-vx1 + vx2) - cu_sq); - (D27.f[DIR_P0P])[kte] = c1o54* ConcD*(c1o1 + c3o1*(vx1 + vx3) + c9o2*(vx1 + vx3)*(vx1 + vx3) - cu_sq); - (D27.f[DIR_M0M])[kbw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 - vx3) + c9o2*(-vx1 - vx3)*(-vx1 - vx3) - cu_sq); - (D27.f[DIR_P0M])[kbe] = c1o54* ConcD*(c1o1 + c3o1*(vx1 - vx3) + c9o2*(vx1 - vx3)*(vx1 - vx3) - cu_sq); - (D27.f[DIR_M0P])[ktw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 + vx3) + c9o2*(-vx1 + vx3)*(-vx1 + vx3) - cu_sq); - (D27.f[DIR_0PP])[ktn] = c1o54* ConcD*(c1o1 + c3o1*(vx2 + vx3) + c9o2*(vx2 + vx3)*(vx2 + vx3) - cu_sq); - (D27.f[DIR_0MM])[kbs] = c1o54* ConcD*(c1o1 + c3o1*(-vx2 - vx3) + c9o2*(-vx2 - vx3)*(-vx2 - vx3) - cu_sq); - (D27.f[DIR_0PM])[kbn] = c1o54* ConcD*(c1o1 + c3o1*(vx2 - vx3) + c9o2*(vx2 - vx3)*(vx2 - vx3) - cu_sq); - (D27.f[DIR_0MP])[kts] = c1o54* ConcD*(c1o1 + c3o1*(-vx2 + vx3) + c9o2*(-vx2 + vx3)*(-vx2 + vx3) - cu_sq); - (D27.f[DIR_PPP])[ktne] = c1o216*ConcD*(c1o1 + c3o1*(vx1 + vx2 + vx3) + c9o2*(vx1 + vx2 + vx3)*(vx1 + vx2 + vx3) - cu_sq); - (D27.f[DIR_MMM])[kbsw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 - vx2 - vx3) + c9o2*(-vx1 - vx2 - vx3)*(-vx1 - vx2 - vx3) - cu_sq); - (D27.f[DIR_PPM])[kbne] = c1o216*ConcD*(c1o1 + c3o1*(vx1 + vx2 - vx3) + c9o2*(vx1 + vx2 - vx3)*(vx1 + vx2 - vx3) - cu_sq); - (D27.f[DIR_MMP])[ktsw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 - vx2 + vx3) + c9o2*(-vx1 - vx2 + vx3)*(-vx1 - vx2 + vx3) - cu_sq); - (D27.f[DIR_PMP])[ktse] = c1o216*ConcD*(c1o1 + c3o1*(vx1 - vx2 + vx3) + c9o2*(vx1 - vx2 + vx3)*(vx1 - vx2 + vx3) - cu_sq); - (D27.f[DIR_MPM])[kbnw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 + vx2 - vx3) + c9o2*(-vx1 + vx2 - vx3)*(-vx1 + vx2 - vx3) - cu_sq); - (D27.f[DIR_PMM])[kbse] = c1o216*ConcD*(c1o1 + c3o1*(vx1 - vx2 - vx3) + c9o2*(vx1 - vx2 - vx3)*(vx1 - vx2 - vx3) - cu_sq); - (D27.f[DIR_MPP])[ktnw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 + vx2 + vx3) + c9o2*(-vx1 + vx2 + vx3)*(-vx1 + vx2 + vx3) - cu_sq); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - } - } -} diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cu b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cu deleted file mode 100644 index 109ea18edf183b65106ce6ed86fea05d6b005d90..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cu +++ /dev/null @@ -1,466 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -#include <stdio.h> - -__global__ void LB_Init_Comp_SP_27(unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* geoD, - real* rho, - real* ux, - real* uy, - real* uz, - unsigned int size_Mat, - real* DD, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = geoD[k]; - - if( BC != GEO_SOLID && BC != GEO_VOID) - { - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00 ] = &DD[DIR_P00 *size_Mat]; - D.f[DIR_M00 ] = &DD[DIR_M00 *size_Mat]; - D.f[DIR_0P0 ] = &DD[DIR_0P0 *size_Mat]; - D.f[DIR_0M0 ] = &DD[DIR_0M0 *size_Mat]; - D.f[DIR_00P ] = &DD[DIR_00P *size_Mat]; - D.f[DIR_00M ] = &DD[DIR_00M *size_Mat]; - D.f[DIR_PP0 ] = &DD[DIR_PP0 *size_Mat]; - D.f[DIR_MM0 ] = &DD[DIR_MM0 *size_Mat]; - D.f[DIR_PM0 ] = &DD[DIR_PM0 *size_Mat]; - D.f[DIR_MP0 ] = &DD[DIR_MP0 *size_Mat]; - D.f[DIR_P0P ] = &DD[DIR_P0P *size_Mat]; - D.f[DIR_M0M ] = &DD[DIR_M0M *size_Mat]; - D.f[DIR_P0M ] = &DD[DIR_P0M *size_Mat]; - D.f[DIR_M0P ] = &DD[DIR_M0P *size_Mat]; - D.f[DIR_0PP ] = &DD[DIR_0PP *size_Mat]; - D.f[DIR_0MM ] = &DD[DIR_0MM *size_Mat]; - D.f[DIR_0PM ] = &DD[DIR_0PM *size_Mat]; - D.f[DIR_0MP ] = &DD[DIR_0MP *size_Mat]; - D.f[DIR_000] = &DD[DIR_000*size_Mat]; - D.f[DIR_PPP ] = &DD[DIR_PPP *size_Mat]; - D.f[DIR_MMP ] = &DD[DIR_MMP *size_Mat]; - D.f[DIR_PMP ] = &DD[DIR_PMP *size_Mat]; - D.f[DIR_MPP ] = &DD[DIR_MPP *size_Mat]; - D.f[DIR_PPM ] = &DD[DIR_PPM *size_Mat]; - D.f[DIR_MMM ] = &DD[DIR_MMM *size_Mat]; - D.f[DIR_PMM ] = &DD[DIR_PMM *size_Mat]; - D.f[DIR_MPM ] = &DD[DIR_MPM *size_Mat]; - } - else - { - D.f[DIR_M00 ] = &DD[DIR_P00 *size_Mat]; - D.f[DIR_P00 ] = &DD[DIR_M00 *size_Mat]; - D.f[DIR_0M0 ] = &DD[DIR_0P0 *size_Mat]; - D.f[DIR_0P0 ] = &DD[DIR_0M0 *size_Mat]; - D.f[DIR_00M ] = &DD[DIR_00P *size_Mat]; - D.f[DIR_00P ] = &DD[DIR_00M *size_Mat]; - D.f[DIR_MM0 ] = &DD[DIR_PP0 *size_Mat]; - D.f[DIR_PP0 ] = &DD[DIR_MM0 *size_Mat]; - D.f[DIR_MP0 ] = &DD[DIR_PM0 *size_Mat]; - D.f[DIR_PM0 ] = &DD[DIR_MP0 *size_Mat]; - D.f[DIR_M0M ] = &DD[DIR_P0P *size_Mat]; - D.f[DIR_P0P ] = &DD[DIR_M0M *size_Mat]; - D.f[DIR_M0P ] = &DD[DIR_P0M *size_Mat]; - D.f[DIR_P0M ] = &DD[DIR_M0P *size_Mat]; - D.f[DIR_0MM ] = &DD[DIR_0PP *size_Mat]; - D.f[DIR_0PP ] = &DD[DIR_0MM *size_Mat]; - D.f[DIR_0MP ] = &DD[DIR_0PM *size_Mat]; - D.f[DIR_0PM ] = &DD[DIR_0MP *size_Mat]; - D.f[DIR_000] = &DD[DIR_000*size_Mat]; - D.f[DIR_MMM ] = &DD[DIR_PPP *size_Mat]; - D.f[DIR_PPM ] = &DD[DIR_MMP *size_Mat]; - D.f[DIR_MPM ] = &DD[DIR_PMP *size_Mat]; - D.f[DIR_PMM ] = &DD[DIR_MPP *size_Mat]; - D.f[DIR_MMP ] = &DD[DIR_PPM *size_Mat]; - D.f[DIR_PPP ] = &DD[DIR_MMM *size_Mat]; - D.f[DIR_MPP ] = &DD[DIR_PMM *size_Mat]; - D.f[DIR_PMP ] = &DD[DIR_MPM *size_Mat]; - } - ////////////////////////////////////////////////////////////////////////// - real drho = rho[k];//0.0f;// - real vx1 = ux[k]; //0.0f;// - real vx2 = uy[k]; //0.0f;// - real vx3 = uz[k]; //0.0f;// - ////////////////////////////////////////////////////////////////////////// - //index - ////////////////////////////////////////////////////////////////////////// - unsigned int kzero= k; - unsigned int ke = k; - unsigned int kw = neighborX[k]; - unsigned int kn = k; - unsigned int ks = neighborY[k]; - unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = k; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = k; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = k; - 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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////// - real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - (D.f[DIR_000])[kzero] = c8o27* (drho-cu_sq*(c1o1+drho)); - (D.f[DIR_P00 ])[ke ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq)); - (D.f[DIR_M00 ])[kw ] = c2o27* (drho+ (c1o1+drho) * (c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq)); - (D.f[DIR_0P0 ])[kn ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq)); - (D.f[DIR_0M0 ])[ks ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq)); - (D.f[DIR_00P ])[kt ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq)); - (D.f[DIR_00M ])[kb ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq)); - (D.f[DIR_PP0 ])[kne ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); - (D.f[DIR_MM0 ])[ksw ] = c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); - (D.f[DIR_PM0 ])[kse ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); - (D.f[DIR_MP0 ])[knw ] = c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); - (D.f[DIR_P0P ])[kte ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); - (D.f[DIR_M0M ])[kbw ] = c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); - (D.f[DIR_P0M ])[kbe ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); - (D.f[DIR_M0P ])[ktw ] = c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); - (D.f[DIR_0PP ])[ktn ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); - (D.f[DIR_0MM ])[kbs ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); - (D.f[DIR_0PM ])[kbn ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); - (D.f[DIR_0MP ])[kts ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); - (D.f[DIR_PPP ])[ktne ] = c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); - (D.f[DIR_MMM ])[kbsw ] = c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); - (D.f[DIR_PPM ])[kbne ] = c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); - (D.f[DIR_MMP ])[ktsw ] = c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); - (D.f[DIR_PMP ])[ktse ] = c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); - (D.f[DIR_MPM ])[kbnw ] = c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); - (D.f[DIR_PMM ])[kbse ] = c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); - (D.f[DIR_MPP ])[ktnw ] = c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); - } - } -} - - - - - - - - - - -//////////////////////////////////////////////////////////////////////////////// -__global__ void LB_Init_Comp_Neq_SP_27( unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* neighborWSB, - unsigned int* geoD, - real* rho, - real* ux, - real* uy, - real* uz, - unsigned int size_Mat, - real* DD, - real omega, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = geoD[k]; - - if( BC != GEO_SOLID && BC != GEO_VOID) - { - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00 ] = &DD[DIR_P00 *size_Mat]; - D.f[DIR_M00 ] = &DD[DIR_M00 *size_Mat]; - D.f[DIR_0P0 ] = &DD[DIR_0P0 *size_Mat]; - D.f[DIR_0M0 ] = &DD[DIR_0M0 *size_Mat]; - D.f[DIR_00P ] = &DD[DIR_00P *size_Mat]; - D.f[DIR_00M ] = &DD[DIR_00M *size_Mat]; - D.f[DIR_PP0 ] = &DD[DIR_PP0 *size_Mat]; - D.f[DIR_MM0 ] = &DD[DIR_MM0 *size_Mat]; - D.f[DIR_PM0 ] = &DD[DIR_PM0 *size_Mat]; - D.f[DIR_MP0 ] = &DD[DIR_MP0 *size_Mat]; - D.f[DIR_P0P ] = &DD[DIR_P0P *size_Mat]; - D.f[DIR_M0M ] = &DD[DIR_M0M *size_Mat]; - D.f[DIR_P0M ] = &DD[DIR_P0M *size_Mat]; - D.f[DIR_M0P ] = &DD[DIR_M0P *size_Mat]; - D.f[DIR_0PP ] = &DD[DIR_0PP *size_Mat]; - D.f[DIR_0MM ] = &DD[DIR_0MM *size_Mat]; - D.f[DIR_0PM ] = &DD[DIR_0PM *size_Mat]; - D.f[DIR_0MP ] = &DD[DIR_0MP *size_Mat]; - D.f[DIR_000] = &DD[DIR_000*size_Mat]; - D.f[DIR_PPP ] = &DD[DIR_PPP *size_Mat]; - D.f[DIR_MMP ] = &DD[DIR_MMP *size_Mat]; - D.f[DIR_PMP ] = &DD[DIR_PMP *size_Mat]; - D.f[DIR_MPP ] = &DD[DIR_MPP *size_Mat]; - D.f[DIR_PPM ] = &DD[DIR_PPM *size_Mat]; - D.f[DIR_MMM ] = &DD[DIR_MMM *size_Mat]; - D.f[DIR_PMM ] = &DD[DIR_PMM *size_Mat]; - D.f[DIR_MPM ] = &DD[DIR_MPM *size_Mat]; - } - else - { - D.f[DIR_M00 ] = &DD[DIR_P00 *size_Mat]; - D.f[DIR_P00 ] = &DD[DIR_M00 *size_Mat]; - D.f[DIR_0M0 ] = &DD[DIR_0P0 *size_Mat]; - D.f[DIR_0P0 ] = &DD[DIR_0M0 *size_Mat]; - D.f[DIR_00M ] = &DD[DIR_00P *size_Mat]; - D.f[DIR_00P ] = &DD[DIR_00M *size_Mat]; - D.f[DIR_MM0 ] = &DD[DIR_PP0 *size_Mat]; - D.f[DIR_PP0 ] = &DD[DIR_MM0 *size_Mat]; - D.f[DIR_MP0 ] = &DD[DIR_PM0 *size_Mat]; - D.f[DIR_PM0 ] = &DD[DIR_MP0 *size_Mat]; - D.f[DIR_M0M ] = &DD[DIR_P0P *size_Mat]; - D.f[DIR_P0P ] = &DD[DIR_M0M *size_Mat]; - D.f[DIR_M0P ] = &DD[DIR_P0M *size_Mat]; - D.f[DIR_P0M ] = &DD[DIR_M0P *size_Mat]; - D.f[DIR_0MM ] = &DD[DIR_0PP *size_Mat]; - D.f[DIR_0PP ] = &DD[DIR_0MM *size_Mat]; - D.f[DIR_0MP ] = &DD[DIR_0PM *size_Mat]; - D.f[DIR_0PM ] = &DD[DIR_0MP *size_Mat]; - D.f[DIR_000] = &DD[DIR_000*size_Mat]; - D.f[DIR_MMM ] = &DD[DIR_PPP *size_Mat]; - D.f[DIR_PPM ] = &DD[DIR_MMP *size_Mat]; - D.f[DIR_MPM ] = &DD[DIR_PMP *size_Mat]; - D.f[DIR_PMM ] = &DD[DIR_MPP *size_Mat]; - D.f[DIR_MMP ] = &DD[DIR_PPM *size_Mat]; - D.f[DIR_PPP ] = &DD[DIR_MMM *size_Mat]; - D.f[DIR_MPP ] = &DD[DIR_PMM *size_Mat]; - D.f[DIR_PMP ] = &DD[DIR_MPM *size_Mat]; - } - ////////////////////////////////////////////////////////////////////////// - real drho = rho[k];//0.0f;// - real vx1 = ux[k]; //0.0f;// - real vx2 = uy[k]; //0.0f;// - real vx3 = uz[k]; //0.0f;// - ////////////////////////////////////////////////////////////////////////// - //index - ////////////////////////////////////////////////////////////////////////// - unsigned int kzero= k; - unsigned int ke = k; - unsigned int kw = neighborX[k]; - unsigned int kn = k; - unsigned int ks = neighborY[k]; - unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = k; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = k; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = k; - 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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////////// - //neighbor index - uint kPx = neighborX[k]; - uint kPy = neighborY[k]; - uint kPz = neighborZ[k]; - uint kMxyz = neighborWSB[k]; - uint kMx = neighborZ[neighborY[kMxyz]]; - uint kMy = neighborZ[neighborX[kMxyz]]; - uint kMz = neighborY[neighborX[kMxyz]]; - ////////////////////////////////////////////////////////////////////////// - //getVeloX// - real vx1NeighborPx = ux[kPx]; - real vx1NeighborMx = ux[kMx]; - real vx1NeighborPy = ux[kPy]; - real vx1NeighborMy = ux[kMy]; - real vx1NeighborPz = ux[kPz]; - real vx1NeighborMz = ux[kMz]; - //getVeloY// - real vx2NeighborPx = uy[kPx]; - real vx2NeighborMx = uy[kMx]; - real vx2NeighborPy = uy[kPy]; - real vx2NeighborMy = uy[kMy]; - real vx2NeighborPz = uy[kPz]; - real vx2NeighborMz = uy[kMz]; - //getVeloZ// - real vx3NeighborPx = uz[kPx]; - real vx3NeighborMx = uz[kMx]; - real vx3NeighborPy = uz[kPy]; - real vx3NeighborMy = uz[kMy]; - real vx3NeighborPz = uz[kPz]; - real vx3NeighborMz = uz[kMz]; - ////////////////////////////////////////////////////////////////////////// - - real dvx1dx = (vx1NeighborPx - vx1NeighborMx) / c2o1; - real dvx1dy = (vx1NeighborPy - vx1NeighborMy) / c2o1; - real dvx1dz = (vx1NeighborPz - vx1NeighborMz) / c2o1; - - real dvx2dx = (vx2NeighborPx - vx2NeighborMx) / c2o1; - real dvx2dy = (vx2NeighborPy - vx2NeighborMy) / c2o1; - real dvx2dz = (vx2NeighborPz - vx2NeighborMz) / c2o1; - - real dvx3dx = (vx3NeighborPx - vx3NeighborMx) / c2o1; - real dvx3dy = (vx3NeighborPy - vx3NeighborMy) / c2o1; - real dvx3dz = (vx3NeighborPz - vx3NeighborMz) / c2o1; - - ////////////////////////////////////////////////////////////////////////// - - // the following code is copy and pasted from VirtualFluidsVisitors/InitDistributionsBlockVisitor.cpp - // i.e. Konstantins code - - real ax = dvx1dx; - real ay = dvx1dy; - real az = dvx1dz; - - real bx = dvx2dx; - real by = dvx2dy; - real bz = dvx2dz; - - real cx = dvx3dx; - real cy = dvx3dy; - real cz = dvx3dz; - - real eps_new = c1o1; - real op = c1o1; - real o = omega; - - real f_E = eps_new *((5.*ax*o + 5.*by*o + 5.*cz*o - 8.*ax*op + 4.*by*op + 4.*cz*op)/(54.*o*op)); - - real f_N = f_E + eps_new *((2.*(ax - by))/(9.*o)); - real f_T = f_E + eps_new *((2.*(ax - cz))/(9.*o)); - real f_NE = eps_new *(-(5.*cz*o + 3.*(ay + bx)*op - 2.*cz*op + ax*(5.*o + op) + by*(5.*o + op))/(54.*o*op)); - real f_SE = f_NE + eps_new *(( ay + bx )/(9.*o)); - real f_TE = eps_new *(-(5.*cz*o + by*(5.*o - 2.*op) + 3.*(az + cx)*op + cz*op + ax*(5.*o + op))/(54.*o*op)); - real f_BE = f_TE + eps_new *(( az + cx )/(9.*o)); - real f_TN = eps_new *(-(5.*ax*o + 5.*by*o + 5.*cz*o - 2.*ax*op + by*op + 3.*bz*op + 3.*cy*op + cz*op)/(54.*o*op)); - real f_BN = f_TN + eps_new *(( bz + cy )/(9.*o)); - real f_ZERO = eps_new *((5.*(ax + by + cz))/(9.*op)); - real f_TNE = eps_new *(-(ay + az + bx + bz + cx + cy)/(72.*o)); - real f_TSW = - f_TNE - eps_new *((ay + bx)/(36.*o)); - real f_TSE = - f_TNE - eps_new *((az + cx)/(36.*o)); - real f_TNW = - f_TNE - eps_new *((bz + cy)/(36.*o)); - - ////////////////////////////////////////////////////////////////////////// - real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - (D.f[DIR_000])[kzero] = c8o27* (drho-cu_sq*(c1o1+drho)); - (D.f[DIR_P00 ])[ke ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq)); - (D.f[DIR_M00 ])[kw ] = c2o27* (drho+ (c1o1+drho) * (c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq)); - (D.f[DIR_0P0 ])[kn ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq)); - (D.f[DIR_0M0 ])[ks ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq)); - (D.f[DIR_00P ])[kt ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq)); - (D.f[DIR_00M ])[kb ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq)); - (D.f[DIR_PP0 ])[kne ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); - (D.f[DIR_MM0 ])[ksw ] = c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); - (D.f[DIR_PM0 ])[kse ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); - (D.f[DIR_MP0 ])[knw ] = c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); - (D.f[DIR_P0P ])[kte ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); - (D.f[DIR_M0M ])[kbw ] = c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); - (D.f[DIR_P0M ])[kbe ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); - (D.f[DIR_M0P ])[ktw ] = c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); - (D.f[DIR_0PP ])[ktn ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); - (D.f[DIR_0MM ])[kbs ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); - (D.f[DIR_0PM ])[kbn ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); - (D.f[DIR_0MP ])[kts ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); - (D.f[DIR_PPP ])[ktne ] = c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); - (D.f[DIR_MMM ])[kbsw ] = c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); - (D.f[DIR_PPM ])[kbne ] = c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); - (D.f[DIR_MMP ])[ktsw ] = c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); - (D.f[DIR_PMP ])[ktse ] = c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); - (D.f[DIR_MPM ])[kbnw ] = c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); - (D.f[DIR_PMM ])[kbse ] = c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); - (D.f[DIR_MPP ])[ktnw ] = c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); - - ////////////////////////////////////////////////////////////////////////// - - (D.f[DIR_000])[kzero] += (c1o1+drho) * f_ZERO; - (D.f[DIR_P00 ])[ke ] += (c1o1+drho) * f_E ; - (D.f[DIR_M00 ])[kw ] += (c1o1+drho) * f_E ; - (D.f[DIR_0P0 ])[kn ] += (c1o1+drho) * f_N ; - (D.f[DIR_0M0 ])[ks ] += (c1o1+drho) * f_N ; - (D.f[DIR_00P ])[kt ] += (c1o1+drho) * f_T ; - (D.f[DIR_00M ])[kb ] += (c1o1+drho) * f_T ; - (D.f[DIR_PP0 ])[kne ] += (c1o1+drho) * f_NE ; - (D.f[DIR_MM0 ])[ksw ] += (c1o1+drho) * f_NE ; - (D.f[DIR_PM0 ])[kse ] += (c1o1+drho) * f_SE ; - (D.f[DIR_MP0 ])[knw ] += (c1o1+drho) * f_SE ; - (D.f[DIR_P0P ])[kte ] += (c1o1+drho) * f_TE ; - (D.f[DIR_M0M ])[kbw ] += (c1o1+drho) * f_TE ; - (D.f[DIR_P0M ])[kbe ] += (c1o1+drho) * f_BE ; - (D.f[DIR_M0P ])[ktw ] += (c1o1+drho) * f_BE ; - (D.f[DIR_0PP ])[ktn ] += (c1o1+drho) * f_TN ; - (D.f[DIR_0MM ])[kbs ] += (c1o1+drho) * f_TN ; - (D.f[DIR_0PM ])[kbn ] += (c1o1+drho) * f_BN ; - (D.f[DIR_0MP ])[kts ] += (c1o1+drho) * f_BN ; - (D.f[DIR_PPP ])[ktne ] += (c1o1+drho) * f_TNE ; - (D.f[DIR_MMM ])[kbsw ] += (c1o1+drho) * f_TNE ; - (D.f[DIR_PPM ])[kbne ] += (c1o1+drho) * f_TSW ; - (D.f[DIR_MMP ])[ktsw ] += (c1o1+drho) * f_TSW ; - (D.f[DIR_PMP ])[ktse ] += (c1o1+drho) * f_TSE ; - (D.f[DIR_MPM ])[kbnw ] += (c1o1+drho) * f_TSE ; - (D.f[DIR_PMM ])[kbse ] += (c1o1+drho) * f_TNW ; - (D.f[DIR_MPP ])[ktnw ] += (c1o1+drho) * f_TNW ; - - ////////////////////////////////////////////////////////////////////////// - } - else - { - ////////////////////////////////////////////////////////////////////////// - Distributions27 D; - D.f[DIR_000] = &DD[DIR_000*size_Mat]; - ////////////////////////////////////////////////////////////////////////// - (D.f[DIR_000])[k] = c96o1; - ////////////////////////////////////////////////////////////////////////// - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cu b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cu deleted file mode 100644 index 869169c525bf7f64a2c1ac9e1cf2d9678efdb28b..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cu +++ /dev/null @@ -1,173 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void LB_Init_Incomp_AD_27(unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* geoD, - real* Conc, - real* ux, - real* uy, - real* uz, - unsigned int size_Mat, - real* DD27, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = geoD[k]; - - if( BC != GEO_SOLID && BC != GEO_VOID) - { - Distributions27 D27; - if (EvenOrOdd==true) - { - D27.f[DIR_P00 ] = &DD27[DIR_P00 *size_Mat]; - D27.f[DIR_M00 ] = &DD27[DIR_M00 *size_Mat]; - D27.f[DIR_0P0 ] = &DD27[DIR_0P0 *size_Mat]; - D27.f[DIR_0M0 ] = &DD27[DIR_0M0 *size_Mat]; - D27.f[DIR_00P ] = &DD27[DIR_00P *size_Mat]; - D27.f[DIR_00M ] = &DD27[DIR_00M *size_Mat]; - D27.f[DIR_PP0 ] = &DD27[DIR_PP0 *size_Mat]; - D27.f[DIR_MM0 ] = &DD27[DIR_MM0 *size_Mat]; - D27.f[DIR_PM0 ] = &DD27[DIR_PM0 *size_Mat]; - D27.f[DIR_MP0 ] = &DD27[DIR_MP0 *size_Mat]; - D27.f[DIR_P0P ] = &DD27[DIR_P0P *size_Mat]; - D27.f[DIR_M0M ] = &DD27[DIR_M0M *size_Mat]; - D27.f[DIR_P0M ] = &DD27[DIR_P0M *size_Mat]; - D27.f[DIR_M0P ] = &DD27[DIR_M0P *size_Mat]; - D27.f[DIR_0PP ] = &DD27[DIR_0PP *size_Mat]; - D27.f[DIR_0MM ] = &DD27[DIR_0MM *size_Mat]; - D27.f[DIR_0PM ] = &DD27[DIR_0PM *size_Mat]; - D27.f[DIR_0MP ] = &DD27[DIR_0MP *size_Mat]; - D27.f[DIR_000] = &DD27[DIR_000*size_Mat]; - D27.f[DIR_PPP ] = &DD27[DIR_PPP *size_Mat]; - D27.f[DIR_MMP ] = &DD27[DIR_MMP *size_Mat]; - D27.f[DIR_PMP ] = &DD27[DIR_PMP *size_Mat]; - D27.f[DIR_MPP ] = &DD27[DIR_MPP *size_Mat]; - D27.f[DIR_PPM ] = &DD27[DIR_PPM *size_Mat]; - D27.f[DIR_MMM ] = &DD27[DIR_MMM *size_Mat]; - D27.f[DIR_PMM ] = &DD27[DIR_PMM *size_Mat]; - D27.f[DIR_MPM ] = &DD27[DIR_MPM *size_Mat]; - } - else - { - D27.f[DIR_M00 ] = &DD27[DIR_P00 *size_Mat]; - D27.f[DIR_P00 ] = &DD27[DIR_M00 *size_Mat]; - D27.f[DIR_0M0 ] = &DD27[DIR_0P0 *size_Mat]; - D27.f[DIR_0P0 ] = &DD27[DIR_0M0 *size_Mat]; - D27.f[DIR_00M ] = &DD27[DIR_00P *size_Mat]; - D27.f[DIR_00P ] = &DD27[DIR_00M *size_Mat]; - D27.f[DIR_MM0 ] = &DD27[DIR_PP0 *size_Mat]; - D27.f[DIR_PP0 ] = &DD27[DIR_MM0 *size_Mat]; - D27.f[DIR_MP0 ] = &DD27[DIR_PM0 *size_Mat]; - D27.f[DIR_PM0 ] = &DD27[DIR_MP0 *size_Mat]; - D27.f[DIR_M0M ] = &DD27[DIR_P0P *size_Mat]; - D27.f[DIR_P0P ] = &DD27[DIR_M0M *size_Mat]; - D27.f[DIR_M0P ] = &DD27[DIR_P0M *size_Mat]; - D27.f[DIR_P0M ] = &DD27[DIR_M0P *size_Mat]; - D27.f[DIR_0MM ] = &DD27[DIR_0PP *size_Mat]; - D27.f[DIR_0PP ] = &DD27[DIR_0MM *size_Mat]; - D27.f[DIR_0MP ] = &DD27[DIR_0PM *size_Mat]; - D27.f[DIR_0PM ] = &DD27[DIR_0MP *size_Mat]; - D27.f[DIR_000] = &DD27[DIR_000*size_Mat]; - D27.f[DIR_MMM ] = &DD27[DIR_PPP *size_Mat]; - D27.f[DIR_PPM ] = &DD27[DIR_MMP *size_Mat]; - D27.f[DIR_MPM ] = &DD27[DIR_PMP *size_Mat]; - D27.f[DIR_PMM ] = &DD27[DIR_MPP *size_Mat]; - D27.f[DIR_MMP ] = &DD27[DIR_PPM *size_Mat]; - D27.f[DIR_PPP ] = &DD27[DIR_MMM *size_Mat]; - D27.f[DIR_MPP ] = &DD27[DIR_PMM *size_Mat]; - D27.f[DIR_PMP ] = &DD27[DIR_MPM *size_Mat]; - } - ////////////////////////////////////////////////////////////////////////// - real ConcD = Conc[k]; - real vx1 = ux[k]; - real vx2 = uy[k]; - real vx3 = uz[k]; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //D3Q27 - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //index - unsigned int kzero= k; - unsigned int ke = k; - unsigned int kw = neighborX[k]; - unsigned int kn = k; - unsigned int ks = neighborY[k]; - unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = k; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = k; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = k; - 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 = k; - unsigned int kbsw = neighborZ[ksw]; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - (D27.f[DIR_000])[kzero] = c8o27* ConcD*(c1o1-cu_sq); - (D27.f[DIR_P00 ])[ke ] = c2o27* ConcD*(c1o1+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - (D27.f[DIR_M00 ])[kw ] = c2o27* ConcD*(c1o1+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - (D27.f[DIR_0P0 ])[kn ] = c2o27* ConcD*(c1o1+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - (D27.f[DIR_0M0 ])[ks ] = c2o27* ConcD*(c1o1+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - (D27.f[DIR_00P ])[kt ] = c2o27* ConcD*(c1o1+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - (D27.f[DIR_00M ])[kb ] = c2o27* ConcD*(c1o1+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - (D27.f[DIR_PP0 ])[kne ] = c1o54* ConcD*(c1o1+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - (D27.f[DIR_MM0 ])[ksw ] = c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - (D27.f[DIR_PM0 ])[kse ] = c1o54* ConcD*(c1o1+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - (D27.f[DIR_MP0 ])[knw ] = c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - (D27.f[DIR_P0P ])[kte ] = c1o54* ConcD*(c1o1+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - (D27.f[DIR_M0M ])[kbw ] = c1o54* ConcD*(c1o1+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - (D27.f[DIR_P0M ])[kbe ] = c1o54* ConcD*(c1o1+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - (D27.f[DIR_M0P ])[ktw ] = c1o54* ConcD*(c1o1+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - (D27.f[DIR_0PP ])[ktn ] = c1o54* ConcD*(c1o1+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - (D27.f[DIR_0MM ])[kbs ] = c1o54* ConcD*(c1o1+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - (D27.f[DIR_0PM ])[kbn ] = c1o54* ConcD*(c1o1+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - (D27.f[DIR_0MP ])[kts ] = c1o54* ConcD*(c1o1+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - (D27.f[DIR_PPP ])[ktne ] = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - (D27.f[DIR_MMM ])[kbsw ] = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - (D27.f[DIR_PPM ])[kbne ] = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - (D27.f[DIR_MMP ])[ktsw ] = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - (D27.f[DIR_PMP ])[ktse ] = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - (D27.f[DIR_MPM ])[kbnw ] = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - (D27.f[DIR_PMM ])[kbse ] = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - (D27.f[DIR_MPP ])[ktnw ] = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cu b/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cu deleted file mode 100644 index 87abb17176942594280fae7b7592f31303ba746d..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cu +++ /dev/null @@ -1,177 +0,0 @@ -#include "LBM/LB.h" -#include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> - -using namespace vf::basics::constant; -using namespace vf::lbm::dir; -#include "math.h" - -__global__ void LB_Init_SP_27(unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* geoD, - real* rho, - real* ux, - real* uy, - real* uz, - unsigned int size_Mat, - real* DD, - bool EvenOrOdd) -{ - //////////////////////////////////////////////////////////////////////////////// - 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<size_Mat) - { - //////////////////////////////////////////////////////////////////////////////// - unsigned int BC; - BC = geoD[k]; - - if( BC != GEO_SOLID && BC != GEO_VOID) - { - Distributions27 D; - if (EvenOrOdd==true) - { - D.f[DIR_P00 ] = &DD[DIR_P00 *size_Mat]; - D.f[DIR_M00 ] = &DD[DIR_M00 *size_Mat]; - D.f[DIR_0P0 ] = &DD[DIR_0P0 *size_Mat]; - D.f[DIR_0M0 ] = &DD[DIR_0M0 *size_Mat]; - D.f[DIR_00P ] = &DD[DIR_00P *size_Mat]; - D.f[DIR_00M ] = &DD[DIR_00M *size_Mat]; - D.f[DIR_PP0 ] = &DD[DIR_PP0 *size_Mat]; - D.f[DIR_MM0 ] = &DD[DIR_MM0 *size_Mat]; - D.f[DIR_PM0 ] = &DD[DIR_PM0 *size_Mat]; - D.f[DIR_MP0 ] = &DD[DIR_MP0 *size_Mat]; - D.f[DIR_P0P ] = &DD[DIR_P0P *size_Mat]; - D.f[DIR_M0M ] = &DD[DIR_M0M *size_Mat]; - D.f[DIR_P0M ] = &DD[DIR_P0M *size_Mat]; - D.f[DIR_M0P ] = &DD[DIR_M0P *size_Mat]; - D.f[DIR_0PP ] = &DD[DIR_0PP *size_Mat]; - D.f[DIR_0MM ] = &DD[DIR_0MM *size_Mat]; - D.f[DIR_0PM ] = &DD[DIR_0PM *size_Mat]; - D.f[DIR_0MP ] = &DD[DIR_0MP *size_Mat]; - D.f[DIR_000] = &DD[DIR_000*size_Mat]; - D.f[DIR_PPP ] = &DD[DIR_PPP *size_Mat]; - D.f[DIR_MMP ] = &DD[DIR_MMP *size_Mat]; - D.f[DIR_PMP ] = &DD[DIR_PMP *size_Mat]; - D.f[DIR_MPP ] = &DD[DIR_MPP *size_Mat]; - D.f[DIR_PPM ] = &DD[DIR_PPM *size_Mat]; - D.f[DIR_MMM ] = &DD[DIR_MMM *size_Mat]; - D.f[DIR_PMM ] = &DD[DIR_PMM *size_Mat]; - D.f[DIR_MPM ] = &DD[DIR_MPM *size_Mat]; - } - else - { - D.f[DIR_M00 ] = &DD[DIR_P00 *size_Mat]; - D.f[DIR_P00 ] = &DD[DIR_M00 *size_Mat]; - D.f[DIR_0M0 ] = &DD[DIR_0P0 *size_Mat]; - D.f[DIR_0P0 ] = &DD[DIR_0M0 *size_Mat]; - D.f[DIR_00M ] = &DD[DIR_00P *size_Mat]; - D.f[DIR_00P ] = &DD[DIR_00M *size_Mat]; - D.f[DIR_MM0 ] = &DD[DIR_PP0 *size_Mat]; - D.f[DIR_PP0 ] = &DD[DIR_MM0 *size_Mat]; - D.f[DIR_MP0 ] = &DD[DIR_PM0 *size_Mat]; - D.f[DIR_PM0 ] = &DD[DIR_MP0 *size_Mat]; - D.f[DIR_M0M ] = &DD[DIR_P0P *size_Mat]; - D.f[DIR_P0P ] = &DD[DIR_M0M *size_Mat]; - D.f[DIR_M0P ] = &DD[DIR_P0M *size_Mat]; - D.f[DIR_P0M ] = &DD[DIR_M0P *size_Mat]; - D.f[DIR_0MM ] = &DD[DIR_0PP *size_Mat]; - D.f[DIR_0PP ] = &DD[DIR_0MM *size_Mat]; - D.f[DIR_0MP ] = &DD[DIR_0PM *size_Mat]; - D.f[DIR_0PM ] = &DD[DIR_0MP *size_Mat]; - D.f[DIR_000] = &DD[DIR_000*size_Mat]; - D.f[DIR_MMM ] = &DD[DIR_PPP *size_Mat]; - D.f[DIR_PPM ] = &DD[DIR_MMP *size_Mat]; - D.f[DIR_MPM ] = &DD[DIR_PMP *size_Mat]; - D.f[DIR_PMM ] = &DD[DIR_MPP *size_Mat]; - D.f[DIR_MMP ] = &DD[DIR_PPM *size_Mat]; - D.f[DIR_PPP ] = &DD[DIR_MMM *size_Mat]; - D.f[DIR_MPP ] = &DD[DIR_PMM *size_Mat]; - D.f[DIR_PMP ] = &DD[DIR_MPM *size_Mat]; - } - ////////////////////////////////////////////////////////////////////////// - real drho = rho[k];//0.0f;// - real vx1 = ux[k]; //0.0f;// - real vx2 = uy[k]; //0.0f;// - real vx3 = uz[k]; //0.0f;// - ////////////////////////////////////////////////////////////////////////// - //index - ////////////////////////////////////////////////////////////////////////// - unsigned int kzero= k; - unsigned int ke = k; - unsigned int kw = neighborX[k]; - unsigned int kn = k; - unsigned int ks = neighborY[k]; - unsigned int kt = k; - unsigned int kb = neighborZ[k]; - unsigned int ksw = neighborY[kw]; - unsigned int kne = k; - unsigned int kse = ks; - unsigned int knw = kw; - unsigned int kbw = neighborZ[kw]; - unsigned int kte = k; - unsigned int kbe = kb; - unsigned int ktw = kw; - unsigned int kbs = neighborZ[ks]; - unsigned int ktn = k; - 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 = k; - unsigned int kbsw = neighborZ[ksw]; - ////////////////////////////////////////////////////////////////////////// - real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - - (D.f[DIR_000])[kzero] = c8o27* (drho-cu_sq); - (D.f[DIR_P00 ])[ke ] = c2o27* (drho+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - (D.f[DIR_M00 ])[kw ] = c2o27* (drho+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - (D.f[DIR_0P0 ])[kn ] = c2o27* (drho+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - (D.f[DIR_0M0 ])[ks ] = c2o27* (drho+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - (D.f[DIR_00P ])[kt ] = c2o27* (drho+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - (D.f[DIR_00M ])[kb ] = c2o27* (drho+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - (D.f[DIR_PP0 ])[kne ] = c1o54* (drho+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - (D.f[DIR_MM0 ])[ksw ] = c1o54* (drho+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - (D.f[DIR_PM0 ])[kse ] = c1o54* (drho+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - (D.f[DIR_MP0 ])[knw ] = c1o54* (drho+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - (D.f[DIR_P0P ])[kte ] = c1o54* (drho+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - (D.f[DIR_M0M ])[kbw ] = c1o54* (drho+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - (D.f[DIR_P0M ])[kbe ] = c1o54* (drho+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - (D.f[DIR_M0P ])[ktw ] = c1o54* (drho+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - (D.f[DIR_0PP ])[ktn ] = c1o54* (drho+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - (D.f[DIR_0MM ])[kbs ] = c1o54* (drho+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - (D.f[DIR_0PM ])[kbn ] = c1o54* (drho+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - (D.f[DIR_0MP ])[kts ] = c1o54* (drho+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - (D.f[DIR_PPP ])[ktne ] = c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - (D.f[DIR_MMM ])[kbsw ] = c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - (D.f[DIR_PPM ])[kbne ] = c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - (D.f[DIR_MMP ])[ktsw ] = c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - (D.f[DIR_PMP ])[ktse ] = c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - (D.f[DIR_MPM ])[kbnw ] = c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - (D.f[DIR_PMM ])[kbse ] = c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - (D.f[DIR_MPP ])[ktnw ] = c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - } - else - { - ////////////////////////////////////////////////////////////////////////// - Distributions27 D; - D.f[DIR_000] = &DD[DIR_000*size_Mat]; - ////////////////////////////////////////////////////////////////////////// - (D.f[DIR_000])[k] = c96o1; - ////////////////////////////////////////////////////////////////////////// - } - } -} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Utilities/FindNeighbors.h b/src/gpu/VirtualFluids_GPU/Utilities/FindNeighbors.h deleted file mode 100644 index 2ecbed5fd6c4b84b92c05953a4c96ecdc3b988de..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Utilities/FindNeighbors.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef FIND_NEIGHBORS_H -#define FIND_NEIGHBORS_H - -#include "Parameter/Parameter.h" -#include "lbm/constants/D3Q27.h" - -using namespace vf::lbm::dir; - -// Only use for fluid nodes! -inline uint getNeighborIndex(LBMSimulationParameter *parH, const uint position, const int direction) -{ - uint nodeIndex = position; - - if (mapForPointerChasing.at(direction).counterInverse != 0) { - nodeIndex = parH->neighborInverse[nodeIndex]; - } - - for (uint x = 0; x < mapForPointerChasing.at(direction).counterX; x++) { - nodeIndex = parH->neighborX[nodeIndex]; - } - - for (uint y = 0; y < mapForPointerChasing.at(direction).counterY; y++) { - nodeIndex = parH->neighborY[nodeIndex]; - } - - for (uint z = 0; z < mapForPointerChasing.at(direction).counterZ; z++) { - nodeIndex = parH->neighborZ[nodeIndex]; - } - - return nodeIndex; -} - -#endif diff --git a/src/gpu/VirtualFluids_GPU/CMakeLists.txt b/src/gpu/core/CMakeLists.txt similarity index 59% rename from src/gpu/VirtualFluids_GPU/CMakeLists.txt rename to src/gpu/core/CMakeLists.txt index 4cd0d1df5db24385c2b528294bb665d405e73937..a99217f58a89af86aa766c9ae6e19155e20b323b 100644 --- a/src/gpu/VirtualFluids_GPU/CMakeLists.txt +++ b/src/gpu/core/CMakeLists.txt @@ -1,31 +1,31 @@ -project(VirtualFluids_GPU LANGUAGES CUDA CXX) +project(gpu_core LANGUAGES CUDA CXX) -vf_add_library(PUBLIC_LINK basics lbm parallel PRIVATE_LINK GridGenerator cuda_helper) +vf_add_library(NAME gpu_core PUBLIC_LINK basics lbm parallel logger PRIVATE_LINK GridGenerator cuda_helper) #SET(TPN_WIN32 "/EHsc") #https://stackoverflow.com/questions/6832666/lnk2019-when-including-asio-headers-solution-generated-with-cmake #https://stackoverflow.com/questions/27442885/syntax-error-with-stdnumeric-limitsmax -set_target_properties(VirtualFluids_GPU PROPERTIES CUDA_SEPARABLE_COMPILATION ON POSITION_INDEPENDENT_CODE ON) +set_target_properties(gpu_core PROPERTIES CUDA_SEPARABLE_COMPILATION ON POSITION_INDEPENDENT_CODE ON) if(MSVC) - set_target_properties(VirtualFluids_GPU PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON) + set_target_properties(gpu_core PROPERTIES CUDA_RESOLVE_DEVICE_SYMBOLS ON) endif() -vf_add_tests() +vf_add_tests(NAME gpu_core) if(BUILD_VF_UNIT_TESTS) - # set_target_properties(VirtualFluids_GPUTests PROPERTIES CUDA_SEPARABLE_COMPILATION ON) - target_include_directories(VirtualFluids_GPUTests PRIVATE "${VF_THIRD_DIR}/cuda_samples/") - target_include_directories(VirtualFluids_GPUTests PRIVATE "${VF_ROOT_DIR}/src/gpu/GridGenerator/") + # set_target_properties(gpu_coreTests PROPERTIES CUDA_SEPARABLE_COMPILATION ON) + target_include_directories(gpu_coreTests PRIVATE "${VF_THIRD_DIR}/cuda_samples/") + target_include_directories(gpu_coreTests PRIVATE "${VF_ROOT_DIR}/src/gpu/GridGenerator/") set_source_files_properties(Communication/ExchangeData27Test.cpp PROPERTIES LANGUAGE CUDA) set_source_files_properties(Factories/BoundaryConditionFactoryTest.cpp PROPERTIES LANGUAGE CUDA) set_source_files_properties(DataStructureInitializer/GridReaderGenerator/GridGeneratorTest.cpp PROPERTIES LANGUAGE CUDA) set_source_files_properties(DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp PROPERTIES LANGUAGE CUDA) set_source_files_properties(Kernel/Kernels/BasicKernels/FluidFlow/Compressible/CumulantK17/CumulantK17Test.cpp PROPERTIES LANGUAGE CUDA) - set_source_files_properties(Kernel/Utilities/DistributionHelperTests.cpp PROPERTIES LANGUAGE CUDA) + set_source_files_properties(LBM/GPUHelperFunctions/KernelUtilitiesTests.cpp PROPERTIES LANGUAGE CUDA) set_source_files_properties(Parameter/ParameterTest.cpp PROPERTIES LANGUAGE CUDA) set_source_files_properties(PreCollisionInteractor/ActuatorFarmInlinesTest.cpp PROPERTIES LANGUAGE CUDA) endif() diff --git a/src/gpu/VirtualFluids_GPU/Calculation/Calc2ndMoments.cpp b/src/gpu/core/Calculation/Calc2ndMoments.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Calculation/Calc2ndMoments.cpp rename to src/gpu/core/Calculation/Calc2ndMoments.cpp diff --git a/src/gpu/VirtualFluids_GPU/Calculation/Calc2ndMoments.h b/src/gpu/core/Calculation/Calc2ndMoments.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Calculation/Calc2ndMoments.h rename to src/gpu/core/Calculation/Calc2ndMoments.h diff --git a/src/gpu/VirtualFluids_GPU/Calculation/CalcMedian.cpp b/src/gpu/core/Calculation/CalcMedian.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Calculation/CalcMedian.cpp rename to src/gpu/core/Calculation/CalcMedian.cpp diff --git a/src/gpu/VirtualFluids_GPU/Calculation/CalcMedian.h b/src/gpu/core/Calculation/CalcMedian.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Calculation/CalcMedian.h rename to src/gpu/core/Calculation/CalcMedian.h diff --git a/src/gpu/VirtualFluids_GPU/Calculation/CalcTurbulenceIntensity.cpp b/src/gpu/core/Calculation/CalcTurbulenceIntensity.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Calculation/CalcTurbulenceIntensity.cpp rename to src/gpu/core/Calculation/CalcTurbulenceIntensity.cpp diff --git a/src/gpu/VirtualFluids_GPU/Calculation/CalcTurbulenceIntensity.h b/src/gpu/core/Calculation/CalcTurbulenceIntensity.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Calculation/CalcTurbulenceIntensity.h rename to src/gpu/core/Calculation/CalcTurbulenceIntensity.h diff --git a/src/gpu/VirtualFluids_GPU/Calculation/CollisionStrategy.h b/src/gpu/core/Calculation/CollisionStrategy.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Calculation/CollisionStrategy.h rename to src/gpu/core/Calculation/CollisionStrategy.h diff --git a/src/gpu/VirtualFluids_GPU/Calculation/CollisisionStrategy.cpp b/src/gpu/core/Calculation/CollisisionStrategy.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Calculation/CollisisionStrategy.cpp rename to src/gpu/core/Calculation/CollisisionStrategy.cpp diff --git a/src/gpu/VirtualFluids_GPU/Calculation/Cp.cpp b/src/gpu/core/Calculation/Cp.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Calculation/Cp.cpp rename to src/gpu/core/Calculation/Cp.cpp diff --git a/src/gpu/VirtualFluids_GPU/Calculation/Cp.h b/src/gpu/core/Calculation/Cp.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Calculation/Cp.h rename to src/gpu/core/Calculation/Cp.h diff --git a/src/gpu/VirtualFluids_GPU/Calculation/DragLift.cpp b/src/gpu/core/Calculation/DragLift.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Calculation/DragLift.cpp rename to src/gpu/core/Calculation/DragLift.cpp diff --git a/src/gpu/VirtualFluids_GPU/Calculation/DragLift.h b/src/gpu/core/Calculation/DragLift.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Calculation/DragLift.h rename to src/gpu/core/Calculation/DragLift.h diff --git a/src/gpu/VirtualFluids_GPU/Calculation/ForceCalculations.cpp b/src/gpu/core/Calculation/ForceCalculations.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Calculation/ForceCalculations.cpp rename to src/gpu/core/Calculation/ForceCalculations.cpp diff --git a/src/gpu/VirtualFluids_GPU/Calculation/ForceCalculations.h b/src/gpu/core/Calculation/ForceCalculations.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Calculation/ForceCalculations.h rename to src/gpu/core/Calculation/ForceCalculations.h diff --git a/src/gpu/VirtualFluids_GPU/Calculation/PlaneCalculations.cpp b/src/gpu/core/Calculation/PlaneCalculations.cpp similarity index 97% rename from src/gpu/VirtualFluids_GPU/Calculation/PlaneCalculations.cpp rename to src/gpu/core/Calculation/PlaneCalculations.cpp index 6557a2a0730c14cc1b26097c5025827128d3a1ce..48896c9e1f809552092d10f538f0b184e523d3b8 100644 --- a/src/gpu/VirtualFluids_GPU/Calculation/PlaneCalculations.cpp +++ b/src/gpu/core/Calculation/PlaneCalculations.cpp @@ -23,13 +23,13 @@ void setSizeOfPlane(Parameter* para, int lev, unsigned int z) for (unsigned int i=1; i<para->getParH(lev)->gridNX + 2 * STARTOFFX - 1; i++) { mm[0]= para->getParH(lev)->nx*(para->getParH(lev)->ny*k + j) + i; - mm[1]= mm[0] -1; //DIR_M00 - mm[2]= mm[0] -para->getParH(lev)->nx-1; //DIR_MM0 - mm[3]= mm[0] -para->getParH(lev)->nx; //DIR_0M0 - mm[4]= mm[0]-(para->getParH(lev)->nx*para->getParH(lev)->ny); //DIR_00M - mm[5]= mm[0]-(para->getParH(lev)->nx*para->getParH(lev)->ny) -1; //DIR_M0M - mm[6]= mm[0]-(para->getParH(lev)->nx*para->getParH(lev)->ny)-para->getParH(lev)->nx; //DIR_0MM - mm[7]= mm[0]-(para->getParH(lev)->nx*para->getParH(lev)->ny)-para->getParH(lev)->nx-1; //DIR_MMM + mm[1]= mm[0] -1; //dM00 + mm[2]= mm[0] -para->getParH(lev)->nx-1; //dMM0 + mm[3]= mm[0] -para->getParH(lev)->nx; //d0M0 + mm[4]= mm[0]-(para->getParH(lev)->nx*para->getParH(lev)->ny); //d00M + mm[5]= mm[0]-(para->getParH(lev)->nx*para->getParH(lev)->ny) -1; //dM0M + mm[6]= mm[0]-(para->getParH(lev)->nx*para->getParH(lev)->ny)-para->getParH(lev)->nx; //d0MM + mm[7]= mm[0]-(para->getParH(lev)->nx*para->getParH(lev)->ny)-para->getParH(lev)->nx-1; //dMMM if ( para->getParH(lev)->geo[mm[0]] != GEO_VOID || para->getParH(lev)->geo[mm[1]] != GEO_VOID || diff --git a/src/gpu/VirtualFluids_GPU/Calculation/PlaneCalculations.h b/src/gpu/core/Calculation/PlaneCalculations.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Calculation/PlaneCalculations.h rename to src/gpu/core/Calculation/PlaneCalculations.h diff --git a/src/gpu/VirtualFluids_GPU/Calculation/RefinementStrategy.cpp b/src/gpu/core/Calculation/RefinementStrategy.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Calculation/RefinementStrategy.cpp rename to src/gpu/core/Calculation/RefinementStrategy.cpp diff --git a/src/gpu/VirtualFluids_GPU/Calculation/RefinementStrategy.h b/src/gpu/core/Calculation/RefinementStrategy.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Calculation/RefinementStrategy.h rename to src/gpu/core/Calculation/RefinementStrategy.h diff --git a/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp b/src/gpu/core/Calculation/UpdateGrid27.cpp similarity index 89% rename from src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp rename to src/gpu/core/Calculation/UpdateGrid27.cpp index cf1aaa3988e0809dd0995a18139ab7dcef75989f..ebf43d5bfa2fa949baf5824b257543510708fa82 100644 --- a/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp +++ b/src/gpu/core/Calculation/UpdateGrid27.cpp @@ -42,9 +42,6 @@ void UpdateGrid27::updateGrid(int level, unsigned int t) ////////////////////////////////////////////////////////////////////////// - if (para->getUseWale()) //TODO: make WALE consistent with structure of other turbulence models - calcMacroscopicQuantities(level); - calcTurbulentViscosity(level); ////////////////////////////////////////////////////////////////////////// @@ -69,11 +66,6 @@ void UpdateGrid27::collisionAllNodes(int level, unsigned int t) ////////////////////////////////////////////////////////////////////////// - if (para->getSimulatePorousMedia()) - collisionPorousMedia(level); - - ////////////////////////////////////////////////////////////////////////// - if (para->getDiffOn()) collisionAdvectionDiffusion(level); } @@ -86,41 +78,12 @@ void UpdateGrid27::collisionUsingIndices(int level, unsigned int t, uint *tagged std::cout << "In collision: fluidNodeIndices or numberOfFluidNodes not defined" << std::endl; - ////////////////////////////////////////////////////////////////////////// - //! \todo: AD collision and porousMedia should be called separately, not in collisionUsingIndices - - if (para->getSimulatePorousMedia()) - collisionPorousMedia(level); - ////////////////////////////////////////////////////////////////////////// if (para->getDiffOn()) collisionAdvectionDiffusion(level); } -void UpdateGrid27::collisionPorousMedia(int level) -{ - for( std::size_t i = 0; i < pm.size(); i++ ) - { - KernelPMCumOneCompSP27(para->getParD(level)->numberofthreads, - para->getParD(level)->omega, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->numberOfNodes, - level, - para->getForcesDev(), - pm[i]->getPorosity(), - pm[i]->getDarcyLBM(), - pm[i]->getForchheimerLBM(), - pm[i]->getSizePM(), - pm[i]->getHostNodeIDsPM(), - para->getParD(level)->isEvenTimestep); - getLastCudaError("KernelPMCumOneCompSP27 execution failed"); - } -} - void UpdateGrid27::collisionAdvectionDiffusion(int level) { this->adKernelManager->runADcollisionKernel(level); @@ -384,13 +347,15 @@ void UpdateGrid27::exchangeData(int level) } UpdateGrid27::UpdateGrid27(SPtr<Parameter> para, vf::parallel::Communicator &comm, SPtr<CudaMemoryManager> cudaMemoryManager, - std::vector<std::shared_ptr<PorousMedia>> &pm, std::vector<SPtr<Kernel>> &kernels , BoundaryConditionFactory* bcFactory, SPtr<TurbulenceModelFactory> tmFactory, GridScalingFactory* scalingFactory) - : para(para), comm(comm), cudaMemoryManager(cudaMemoryManager), pm(pm), kernels(kernels), tmFactory(tmFactory) + std::vector<SPtr<Kernel>>& kernels, + std::vector<SPtr<AdvectionDiffusionKernel>>& adkernels, BoundaryConditionFactory* bcFactory, + SPtr<TurbulenceModelFactory> tmFactory, GridScalingFactory* scalingFactory) + : para(para), comm(comm), cudaMemoryManager(cudaMemoryManager), kernels(kernels), tmFactory(tmFactory) { this->collision = getFunctionForCollisionAndExchange(para->getUseStreams(), para->getNumprocs(), para->getKernelNeedsFluidNodeIndicesToRun()); this->refinement = getFunctionForRefinementAndExchange(para->getUseStreams(), para->getNumprocs(), para->getMaxLevel(), para->useReducedCommunicationAfterFtoC); this->bcKernelManager = std::make_shared<BCKernelManager>(para, bcFactory); - this->adKernelManager = std::make_shared<ADKernelManager>(para); + this->adKernelManager = std::make_shared<ADKernelManager>(para, adkernels); this->gridScalingKernelManager = std::make_shared<GridScalingKernelManager>(para, scalingFactory); } diff --git a/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.h b/src/gpu/core/Calculation/UpdateGrid27.h similarity index 90% rename from src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.h rename to src/gpu/core/Calculation/UpdateGrid27.h index 9de7e73ec03a0f00542dd5b718ed6f210399a18a..bcc0a9e5a2edabeec8e2ebb3fb7996a506055b50 100644 --- a/src/gpu/VirtualFluids_GPU/Calculation/UpdateGrid27.h +++ b/src/gpu/core/Calculation/UpdateGrid27.h @@ -1,12 +1,14 @@ #ifndef UPDATEGRID27_H #define UPDATEGRID27_H -#include "Calculation/PorousMedia.h" +#include <vector> + #include "GPU/CudaMemoryManager.h" #include "GPU/GPU_Interface.h" #include "LBM/LB.h" #include "Parameter/CudaStreamManager.h" #include "Parameter/Parameter.h" +#include "Kernel/AdvectionDiffusionKernel.h" namespace vf::parallel { @@ -28,8 +30,9 @@ using RefinementStrategy = std::function<void (UpdateGrid27* updateGrid, Paramet class UpdateGrid27 { public: - UpdateGrid27(SPtr<Parameter> para, vf::parallel::Communicator& comm, SPtr<CudaMemoryManager> cudaMemoryManager, - std::vector<std::shared_ptr<PorousMedia>> &pm, std::vector<SPtr<Kernel>> &kernels, BoundaryConditionFactory* bcFactory, SPtr<TurbulenceModelFactory> tmFactory, GridScalingFactory* scalingFactory); + UpdateGrid27(SPtr<Parameter> para, vf::parallel::Communicator& comm, SPtr<CudaMemoryManager> cudaMemoryManager, std::vector<SPtr<Kernel>>& kernels, + std::vector<SPtr<AdvectionDiffusionKernel>>& adkernels, BoundaryConditionFactory* bcFactory, + SPtr<TurbulenceModelFactory> tmFactory, GridScalingFactory* scalingFactory); void updateGrid(int level, unsigned int t); void exchangeData(int level); @@ -40,7 +43,6 @@ private: void postCollisionBC(int level, unsigned int t); void preCollisionBC(int level, unsigned int t); - void collisionPorousMedia(int level); void fineToCoarse(int level, InterpolationCells* fineToCoarse, ICellNeigh &neighborFineToCoarse, CudaStreamIndex streamIndex); void coarseToFine(int level, InterpolationCells* coarseToFine, ICellNeigh &neighborCoarseToFine, CudaStreamIndex streamIndex); @@ -78,7 +80,6 @@ private: SPtr<Parameter> para; vf::parallel::Communicator& comm; SPtr<CudaMemoryManager> cudaMemoryManager; - std::vector<std::shared_ptr<PorousMedia>> pm; std::vector<SPtr<Kernel>> kernels; //! \property lbKernelManager is a shared pointer to an object of LBKernelManager std::shared_ptr<BCKernelManager> bcKernelManager; diff --git a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27.cpp b/src/gpu/core/Communication/ExchangeData27.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Communication/ExchangeData27.cpp rename to src/gpu/core/Communication/ExchangeData27.cpp diff --git a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27.h b/src/gpu/core/Communication/ExchangeData27.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Communication/ExchangeData27.h rename to src/gpu/core/Communication/ExchangeData27.h diff --git a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp b/src/gpu/core/Communication/ExchangeData27Test.cpp similarity index 99% rename from src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp rename to src/gpu/core/Communication/ExchangeData27Test.cpp index 473e8c1a5424cf7ddd05f6ed0a534814a3971dc6..c1d03928ec05f1b38920aa5a4b006418a3c6fe9b 100644 --- a/src/gpu/VirtualFluids_GPU/Communication/ExchangeData27Test.cpp +++ b/src/gpu/core/Communication/ExchangeData27Test.cpp @@ -3,7 +3,7 @@ #include <filesystem> #include "ExchangeData27.h" -#include "gpu/VirtualFluids_GPU/LBM/LB.h" +#include "gpu/core/LBM/LB.h" #include <basics/config/ConfigurationFile.h> diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp b/src/gpu/core/DataStructureInitializer/GridProvider.cpp similarity index 88% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp rename to src/gpu/core/DataStructureInitializer/GridProvider.cpp index e96c96ec2f38c4d27f7c51177e4a3c21f37579e8..1cd12f9ba5c48a46f05b1e41f190790dd163632f 100644 --- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.cpp +++ b/src/gpu/core/DataStructureInitializer/GridProvider.cpp @@ -72,21 +72,6 @@ void GridProvider::setInitialNodeValues(uint numberOfNodes, int level) const para->getParH(level)->rho_SP_Med[pos] = 0.0f; para->getParH(level)->press_SP_Med[pos] = 0.0f; } - if (para->getUseWale()) { - para->getParH(level)->turbViscosity[pos] = 0.0f; - //Debug - para->getParH(level)->gSij[pos] = 0.0f; - para->getParH(level)->gSDij[pos] = 0.0f; - para->getParH(level)->gDxvx[pos] = 0.0f; - para->getParH(level)->gDyvx[pos] = 0.0f; - para->getParH(level)->gDzvx[pos] = 0.0f; - para->getParH(level)->gDxvy[pos] = 0.0f; - para->getParH(level)->gDyvy[pos] = 0.0f; - para->getParH(level)->gDzvy[pos] = 0.0f; - para->getParH(level)->gDxvz[pos] = 0.0f; - para->getParH(level)->gDyvz[pos] = 0.0f; - para->getParH(level)->gDzvz[pos] = 0.0f; - } if (para->getIsBodyForce()) { para->getParH(level)->forceX_SP[pos] = 0.0f; diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h b/src/gpu/core/DataStructureInitializer/GridProvider.h similarity index 95% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h rename to src/gpu/core/DataStructureInitializer/GridProvider.h index 28d2f39e8b469f83672c6cbce162e867686d14ed..78451b14d231342a57b8881de99c3925e066ef4d 100644 --- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridProvider.h +++ b/src/gpu/core/DataStructureInitializer/GridProvider.h @@ -6,8 +6,8 @@ #include <memory> #include "LBM/LB.h" -#include "PointerDefinitions.h" -#include "VirtualFluids_GPU_export.h" +#include <basics/PointerDefinitions.h> + #include "gpu/GridGenerator/io/SimulationFileWriter/SimulationFileWriter.h" namespace vf::parallel { @@ -18,7 +18,7 @@ class Parameter; class GridBuilder; class CudaMemoryManager; -class VIRTUALFLUIDS_GPU_EXPORT GridProvider +class GridProvider { public: static std::shared_ptr<GridProvider> makeGridGenerator(std::shared_ptr<GridBuilder> builder, std::shared_ptr<Parameter> para, std::shared_ptr<CudaMemoryManager> cudaMemoryManager, vf::parallel::Communicator& communicator); diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/BoundaryQs.cpp b/src/gpu/core/DataStructureInitializer/GridReaderFiles/BoundaryQs.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/BoundaryQs.cpp rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/BoundaryQs.cpp diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/BoundaryQs.h b/src/gpu/core/DataStructureInitializer/GridReaderFiles/BoundaryQs.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/BoundaryQs.h rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/BoundaryQs.h diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/BoundaryValues.cpp b/src/gpu/core/DataStructureInitializer/GridReaderFiles/BoundaryValues.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/BoundaryValues.cpp rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/BoundaryValues.cpp diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/BoundaryValues.h b/src/gpu/core/DataStructureInitializer/GridReaderFiles/BoundaryValues.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/BoundaryValues.h rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/BoundaryValues.h diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/CoordNeighborGeoV.cpp b/src/gpu/core/DataStructureInitializer/GridReaderFiles/CoordNeighborGeoV.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/CoordNeighborGeoV.cpp rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/CoordNeighborGeoV.cpp diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/CoordNeighborGeoV.h b/src/gpu/core/DataStructureInitializer/GridReaderFiles/CoordNeighborGeoV.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/CoordNeighborGeoV.h rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/CoordNeighborGeoV.h diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.cpp b/src/gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.cpp similarity index 96% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.cpp rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.cpp index 000e97e9a14e51d140dfa30cb325d2a04cd83f50..0c306567a663be8c2dc3520c7965037c04efee24 100644 --- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.cpp +++ b/src/gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.cpp @@ -82,9 +82,6 @@ void GridReader::allocArrays_CoordNeighborGeo() //cudaMemoryManager->cudaAllocF3SP(level); cudaMemoryManager->cudaAllocNeighborWSB(level); - if (para->getUseWale()) - cudaMemoryManager->cudaAllocTurbulentViscosity(level); - coordX.initalCoords( para->getParH(level)->coordinateX, level); coordY.initalCoords( para->getParH(level)->coordinateY, level); coordZ.initalCoords( para->getParH(level)->coordinateZ, level); @@ -648,9 +645,9 @@ void GridReader::modifyQElement(std::shared_ptr<BoundaryQs> boundaryQ, unsigned { QforBoundaryConditions Q; real* QQ = para->getParH(level)->geometryBC.q27[0]; - Q.q27[vf::lbm::dir::DIR_000] = &QQ[vf::lbm::dir::DIR_000 * para->getParH(level)->geometryBC.numberOfBCnodes]; + Q.q27[vf::lbm::dir::d000] = &QQ[vf::lbm::dir::d000 * para->getParH(level)->geometryBC.numberOfBCnodes]; for (unsigned int i = 0; i < boundaryQ->getSize(level); i++) - Q.q27[vf::lbm::dir::DIR_000][i] = 0.0f; + Q.q27[vf::lbm::dir::d000][i] = 0.0f; } /*------------------------------------------------------------------------------------------------*/ @@ -721,33 +718,33 @@ void GridReader::initalGridInformations() void GridReader::setQ27Size(QforBoundaryConditions &Q, real* QQ, unsigned int sizeQ) const { - Q.q27[DIR_P00] = &QQ[DIR_P00 *sizeQ]; - Q.q27[DIR_M00] = &QQ[DIR_M00 *sizeQ]; - Q.q27[DIR_0P0] = &QQ[DIR_0P0 *sizeQ]; - Q.q27[DIR_0M0] = &QQ[DIR_0M0 *sizeQ]; - Q.q27[DIR_00P] = &QQ[DIR_00P *sizeQ]; - Q.q27[DIR_00M] = &QQ[DIR_00M *sizeQ]; - Q.q27[DIR_PP0] = &QQ[DIR_PP0 *sizeQ]; - Q.q27[DIR_MM0] = &QQ[DIR_MM0 *sizeQ]; - Q.q27[DIR_PM0] = &QQ[DIR_PM0 *sizeQ]; - Q.q27[DIR_MP0] = &QQ[DIR_MP0 *sizeQ]; - Q.q27[DIR_P0P] = &QQ[DIR_P0P *sizeQ]; - Q.q27[DIR_M0M] = &QQ[DIR_M0M *sizeQ]; - Q.q27[DIR_P0M] = &QQ[DIR_P0M *sizeQ]; - Q.q27[DIR_M0P] = &QQ[DIR_M0P *sizeQ]; - Q.q27[DIR_0PP] = &QQ[DIR_0PP *sizeQ]; - Q.q27[DIR_0MM] = &QQ[DIR_0MM *sizeQ]; - Q.q27[DIR_0PM] = &QQ[DIR_0PM *sizeQ]; - Q.q27[DIR_0MP] = &QQ[DIR_0MP *sizeQ]; - Q.q27[DIR_000] = &QQ[DIR_000*sizeQ]; - Q.q27[DIR_PPP] = &QQ[DIR_PPP *sizeQ]; - Q.q27[DIR_MMP] = &QQ[DIR_MMP *sizeQ]; - Q.q27[DIR_PMP] = &QQ[DIR_PMP *sizeQ]; - Q.q27[DIR_MPP] = &QQ[DIR_MPP *sizeQ]; - Q.q27[DIR_PPM] = &QQ[DIR_PPM *sizeQ]; - Q.q27[DIR_MMM] = &QQ[DIR_MMM *sizeQ]; - Q.q27[DIR_PMM] = &QQ[DIR_PMM *sizeQ]; - Q.q27[DIR_MPM] = &QQ[DIR_MPM *sizeQ]; + Q.q27[dP00] = &QQ[dP00 *sizeQ]; + Q.q27[dM00] = &QQ[dM00 *sizeQ]; + Q.q27[d0P0] = &QQ[d0P0 *sizeQ]; + Q.q27[d0M0] = &QQ[d0M0 *sizeQ]; + Q.q27[d00P] = &QQ[d00P *sizeQ]; + Q.q27[d00M] = &QQ[d00M *sizeQ]; + Q.q27[dPP0] = &QQ[dPP0 *sizeQ]; + Q.q27[dMM0] = &QQ[dMM0 *sizeQ]; + Q.q27[dPM0] = &QQ[dPM0 *sizeQ]; + Q.q27[dMP0] = &QQ[dMP0 *sizeQ]; + Q.q27[dP0P] = &QQ[dP0P *sizeQ]; + Q.q27[dM0M] = &QQ[dM0M *sizeQ]; + Q.q27[dP0M] = &QQ[dP0M *sizeQ]; + Q.q27[dM0P] = &QQ[dM0P *sizeQ]; + Q.q27[d0PP] = &QQ[d0PP *sizeQ]; + Q.q27[d0MM] = &QQ[d0MM *sizeQ]; + Q.q27[d0PM] = &QQ[d0PM *sizeQ]; + Q.q27[d0MP] = &QQ[d0MP *sizeQ]; + Q.q27[d000] = &QQ[d000*sizeQ]; + Q.q27[dPPP] = &QQ[dPPP *sizeQ]; + Q.q27[dMMP] = &QQ[dMMP *sizeQ]; + Q.q27[dPMP] = &QQ[dPMP *sizeQ]; + Q.q27[dMPP] = &QQ[dMPP *sizeQ]; + Q.q27[dPPM] = &QQ[dPPM *sizeQ]; + Q.q27[dMMM] = &QQ[dMMM *sizeQ]; + Q.q27[dPMM] = &QQ[dPMM *sizeQ]; + Q.q27[dMPM] = &QQ[dMPM *sizeQ]; } void GridReader::setSizeNoSlip(std::shared_ptr<BoundaryQs> boundaryQ, unsigned int level) const diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h b/src/gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h similarity index 97% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h index d244e76569fe213978086ab412725e4450da66e4..84e3ad17989bd3d0bd9ffcd9ed36d87a8a7b494b 100644 --- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/GridReader.h +++ b/src/gpu/core/DataStructureInitializer/GridReaderFiles/GridReader.h @@ -9,14 +9,14 @@ #include "LBM/LB.h" -//#include "VirtualFluids_GPU_export.h" +// class Parameter; class BoundaryValues; class BoundaryQs; class CoordNeighborGeoV; -class VIRTUALFLUIDS_GPU_EXPORT GridReader : public GridProvider +class GridReader : public GridProvider { private: bool binaer; diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/MeasuredPoints.cpp b/src/gpu/core/DataStructureInitializer/GridReaderFiles/MeasuredPoints.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/MeasuredPoints.cpp rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/MeasuredPoints.cpp diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/MeasuredPoints.h b/src/gpu/core/DataStructureInitializer/GridReaderFiles/MeasuredPoints.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/MeasuredPoints.h rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/MeasuredPoints.h diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/OffsetScale.cpp b/src/gpu/core/DataStructureInitializer/GridReaderFiles/OffsetScale.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/OffsetScale.cpp rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/OffsetScale.cpp diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/OffsetScale.h b/src/gpu/core/DataStructureInitializer/GridReaderFiles/OffsetScale.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderFiles/OffsetScale.h rename to src/gpu/core/DataStructureInitializer/GridReaderFiles/OffsetScale.h diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp similarity index 97% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp rename to src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp index db07322dd4158cb9f66aa15248f38ed4c43d383c..c9b3094aad65faa93c21394960f4162a7db1349c 100644 --- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp +++ b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp @@ -7,6 +7,7 @@ #include "Parameter/CudaStreamManager.h" #include "IndexRearrangementForStreams.h" #include "InterpolationCellGrouper.h" +#include "GridGenerator/grid/Grid.h" #include <iostream> #include <algorithm> @@ -102,6 +103,12 @@ void GridGenerator::allocArrays_CoordNeighborGeo() if(para->getIsBodyForce()) cudaMemoryManager->cudaCopyBodyForce(level); } + + for (int i = 0; i <= para->getMaxLevel(); i++) { + para->getParH(i)->gridSpacing = builder->getGrid(i)->getDelta(); + para->getParD(i)->gridSpacing = builder->getGrid(i)->getDelta(); + } + VF_LOG_INFO("Number of Nodes: {}", numberOfNodesGlobal); VF_LOG_TRACE("-----finish Coord, Neighbor, Geo------"); } @@ -1101,7 +1108,7 @@ void GridGenerator::allocArrays_BoundaryQs() ////////////////////////////////////////////////////////////////// for (int node_i = 0; node_i < numberOfGeometryNodes; node_i++) { - Q.q27[DIR_000][node_i] = 0.0f; + Q.q27[d000][node_i] = 0.0f; } //for(int test = 0; test < 3; test++) //{ @@ -1321,31 +1328,31 @@ std::string GridGenerator::checkNeighbor(int level, real x, real y, real z, int } void GridGenerator::getPointersToBoundaryConditions(QforBoundaryConditions& boundaryConditionStruct, real* subgridDistances, const unsigned int numberOfBCnodes){ - boundaryConditionStruct.q27[DIR_P00] = &subgridDistances[DIR_P00 * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_M00] = &subgridDistances[DIR_M00 * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_0P0] = &subgridDistances[DIR_0P0 * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_0M0] = &subgridDistances[DIR_0M0 * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_00P] = &subgridDistances[DIR_00P * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_00M] = &subgridDistances[DIR_00M * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_PP0] = &subgridDistances[DIR_PP0 * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_MM0] = &subgridDistances[DIR_MM0 * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_PM0] = &subgridDistances[DIR_PM0 * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_MP0] = &subgridDistances[DIR_MP0 * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_P0P] = &subgridDistances[DIR_P0P * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_M0M] = &subgridDistances[DIR_M0M * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_P0M] = &subgridDistances[DIR_P0M * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_M0P] = &subgridDistances[DIR_M0P * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_0PP] = &subgridDistances[DIR_0PP * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_0MM] = &subgridDistances[DIR_0MM * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_0PM] = &subgridDistances[DIR_0PM * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_0MP] = &subgridDistances[DIR_0MP * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_000] = &subgridDistances[DIR_000 * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_PPP] = &subgridDistances[DIR_PPP * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_MMP] = &subgridDistances[DIR_MMP * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_PMP] = &subgridDistances[DIR_PMP * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_MPP] = &subgridDistances[DIR_MPP * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_PPM] = &subgridDistances[DIR_PPM * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_MMM] = &subgridDistances[DIR_MMM * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_PMM] = &subgridDistances[DIR_PMM * numberOfBCnodes]; - boundaryConditionStruct.q27[DIR_MPM] = &subgridDistances[DIR_MPM * numberOfBCnodes]; + boundaryConditionStruct.q27[dP00] = &subgridDistances[dP00 * numberOfBCnodes]; + boundaryConditionStruct.q27[dM00] = &subgridDistances[dM00 * numberOfBCnodes]; + boundaryConditionStruct.q27[d0P0] = &subgridDistances[d0P0 * numberOfBCnodes]; + boundaryConditionStruct.q27[d0M0] = &subgridDistances[d0M0 * numberOfBCnodes]; + boundaryConditionStruct.q27[d00P] = &subgridDistances[d00P * numberOfBCnodes]; + boundaryConditionStruct.q27[d00M] = &subgridDistances[d00M * numberOfBCnodes]; + boundaryConditionStruct.q27[dPP0] = &subgridDistances[dPP0 * numberOfBCnodes]; + boundaryConditionStruct.q27[dMM0] = &subgridDistances[dMM0 * numberOfBCnodes]; + boundaryConditionStruct.q27[dPM0] = &subgridDistances[dPM0 * numberOfBCnodes]; + boundaryConditionStruct.q27[dMP0] = &subgridDistances[dMP0 * numberOfBCnodes]; + boundaryConditionStruct.q27[dP0P] = &subgridDistances[dP0P * numberOfBCnodes]; + boundaryConditionStruct.q27[dM0M] = &subgridDistances[dM0M * numberOfBCnodes]; + boundaryConditionStruct.q27[dP0M] = &subgridDistances[dP0M * numberOfBCnodes]; + boundaryConditionStruct.q27[dM0P] = &subgridDistances[dM0P * numberOfBCnodes]; + boundaryConditionStruct.q27[d0PP] = &subgridDistances[d0PP * numberOfBCnodes]; + boundaryConditionStruct.q27[d0MM] = &subgridDistances[d0MM * numberOfBCnodes]; + boundaryConditionStruct.q27[d0PM] = &subgridDistances[d0PM * numberOfBCnodes]; + boundaryConditionStruct.q27[d0MP] = &subgridDistances[d0MP * numberOfBCnodes]; + boundaryConditionStruct.q27[d000] = &subgridDistances[d000 * numberOfBCnodes]; + boundaryConditionStruct.q27[dPPP] = &subgridDistances[dPPP * numberOfBCnodes]; + boundaryConditionStruct.q27[dMMP] = &subgridDistances[dMMP * numberOfBCnodes]; + boundaryConditionStruct.q27[dPMP] = &subgridDistances[dPMP * numberOfBCnodes]; + boundaryConditionStruct.q27[dMPP] = &subgridDistances[dMPP * numberOfBCnodes]; + boundaryConditionStruct.q27[dPPM] = &subgridDistances[dPPM * numberOfBCnodes]; + boundaryConditionStruct.q27[dMMM] = &subgridDistances[dMMM * numberOfBCnodes]; + boundaryConditionStruct.q27[dPMM] = &subgridDistances[dPMM * numberOfBCnodes]; + boundaryConditionStruct.q27[dMPM] = &subgridDistances[dMPM * numberOfBCnodes]; } diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h similarity index 97% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h rename to src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h index 9c0d50a06e587c2776c63d164f1d46c4ac910eab..9b1eafb431a88029f75af68706f80d493737128d 100644 --- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.h +++ b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGenerator.h @@ -67,7 +67,7 @@ private: const uint mpiProcessID; public: - VIRTUALFLUIDS_GPU_EXPORT GridGenerator(std::shared_ptr<GridBuilder> builder, std::shared_ptr<Parameter> para, std::shared_ptr<CudaMemoryManager> cudaMemoryManager, vf::parallel::Communicator& communicator); + GridGenerator(std::shared_ptr<GridBuilder> builder, std::shared_ptr<Parameter> para, std::shared_ptr<CudaMemoryManager> cudaMemoryManager, vf::parallel::Communicator& communicator); ~GridGenerator() override; //! \brief overwrites the default IndexRearrangementForStreams void setIndexRearrangementForStreams(std::unique_ptr<IndexRearrangementForStreams>&& indexRearrangement); diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGeneratorTest.cpp b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGeneratorTest.cpp similarity index 99% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGeneratorTest.cpp rename to src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGeneratorTest.cpp index 8fc0f78d1f964339258dbeae1658445bc4547e4f..fbacf99d460fe64a83aa5aec0db4b43600d00941 100644 --- a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGeneratorTest.cpp +++ b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/GridGeneratorTest.cpp @@ -1,7 +1,7 @@ #include "GridGenerator.h" #include <gmock/gmock.h> -#include "DataTypes.h" +#include <basics/DataTypes.h> #include "GPU/CudaMemoryManager.h" #include "IndexRearrangementForStreams.h" #include "NullCommunicator.h" diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.cpp b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.cpp rename to src/gpu/core/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.cpp diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.h b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.h rename to src/gpu/core/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreams.h diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp rename to src/gpu/core/DataStructureInitializer/GridReaderGenerator/IndexRearrangementForStreamsTest.cpp diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouper.cpp b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouper.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouper.cpp rename to src/gpu/core/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouper.cpp diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouper.h b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouper.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouper.h rename to src/gpu/core/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouper.h diff --git a/src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouperTest.cpp b/src/gpu/core/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouperTest.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouperTest.cpp rename to src/gpu/core/DataStructureInitializer/GridReaderGenerator/InterpolationCellGrouperTest.cpp diff --git a/src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactory.cpp b/src/gpu/core/Factories/BoundaryConditionFactory.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactory.cpp rename to src/gpu/core/Factories/BoundaryConditionFactory.cpp diff --git a/src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactory.h b/src/gpu/core/Factories/BoundaryConditionFactory.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactory.h rename to src/gpu/core/Factories/BoundaryConditionFactory.h diff --git a/src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactoryTest.cpp b/src/gpu/core/Factories/BoundaryConditionFactoryTest.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Factories/BoundaryConditionFactoryTest.cpp rename to src/gpu/core/Factories/BoundaryConditionFactoryTest.cpp diff --git a/src/gpu/VirtualFluids_GPU/Factories/GridScalingFactory.cpp b/src/gpu/core/Factories/GridScalingFactory.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Factories/GridScalingFactory.cpp rename to src/gpu/core/Factories/GridScalingFactory.cpp diff --git a/src/gpu/VirtualFluids_GPU/Factories/GridScalingFactory.h b/src/gpu/core/Factories/GridScalingFactory.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Factories/GridScalingFactory.h rename to src/gpu/core/Factories/GridScalingFactory.h diff --git a/src/gpu/VirtualFluids_GPU/FindInterface/FindInterface.cpp b/src/gpu/core/FindInterface/FindInterface.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/FindInterface/FindInterface.cpp rename to src/gpu/core/FindInterface/FindInterface.cpp diff --git a/src/gpu/VirtualFluids_GPU/FindInterface/FindInterface.h b/src/gpu/core/FindInterface/FindInterface.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/FindInterface/FindInterface.h rename to src/gpu/core/FindInterface/FindInterface.h diff --git a/src/gpu/VirtualFluids_GPU/FindQ/DefineBCs.cpp b/src/gpu/core/FindQ/DefineBCs.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/FindQ/DefineBCs.cpp rename to src/gpu/core/FindQ/DefineBCs.cpp diff --git a/src/gpu/VirtualFluids_GPU/FindQ/DefineBCs.h b/src/gpu/core/FindQ/DefineBCs.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/FindQ/DefineBCs.h rename to src/gpu/core/FindQ/DefineBCs.h diff --git a/src/gpu/VirtualFluids_GPU/FindQ/FindQ.cpp b/src/gpu/core/FindQ/FindQ.cpp similarity index 59% rename from src/gpu/VirtualFluids_GPU/FindQ/FindQ.cpp rename to src/gpu/core/FindQ/FindQ.cpp index bc12456ceb632b3249d8757fe23c811aad6ec541..a961fdf71e2f518c8cb41c0d57fe9c87616ec7d4 100644 --- a/src/gpu/VirtualFluids_GPU/FindQ/FindQ.cpp +++ b/src/gpu/core/FindQ/FindQ.cpp @@ -14,7 +14,7 @@ void findQ(Parameter* para, int lev) VF_LOG_CRITICAL("findQ() is deprecated! - see comment above for more information"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////////////// DIR_P00 DIR_M00 DIR_0P0 DIR_0M0 DIR_00P DIR_00M DIR_PP0 DIR_MM0 DIR_PM0 DIR_MP0 DIR_P0P DIR_M0M DIR_P0M DIR_M0P DIR_0PP DIR_0MM DIR_0PM DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM //////////////////////// + ////////////// dP00 dM00 d0P0 d0M0 d00P d00M dPP0 dMM0 dPM0 dMP0 dP0P dM0M dP0M dM0P d0PP d0MM d0PM d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM //////////////////////// int ex[27]={ 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 0, 0, 0, 1, 1, 1, 1, -1, -1, -1, -1}; int ey[27]={ 0, 0, 1, -1, 0, 0, 1, -1, -1, 1, 0, 0, 0, 0, 1, -1, 1, -1, 0, 1, 1, -1, -1, 1, 1, -1, -1}; int ez[27]={ 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, -1, 1, 1, -1, -1, 1, 0, 1, -1, 1, -1, 1, -1, 1, -1}; @@ -41,33 +41,33 @@ void findQ(Parameter* para, int lev) //real radius = nny / 5.f;//2.56f; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// QforBoundaryConditions Q; - Q.q27[DIR_P00 ] = &QQ[DIR_P00 *sizeQ]; - Q.q27[DIR_M00 ] = &QQ[DIR_M00 *sizeQ]; - Q.q27[DIR_0P0 ] = &QQ[DIR_0P0 *sizeQ]; - Q.q27[DIR_0M0 ] = &QQ[DIR_0M0 *sizeQ]; - Q.q27[DIR_00P ] = &QQ[DIR_00P *sizeQ]; - Q.q27[DIR_00M ] = &QQ[DIR_00M *sizeQ]; - Q.q27[DIR_PP0 ] = &QQ[DIR_PP0 *sizeQ]; - Q.q27[DIR_MM0 ] = &QQ[DIR_MM0 *sizeQ]; - Q.q27[DIR_PM0 ] = &QQ[DIR_PM0 *sizeQ]; - Q.q27[DIR_MP0 ] = &QQ[DIR_MP0 *sizeQ]; - Q.q27[DIR_P0P ] = &QQ[DIR_P0P *sizeQ]; - Q.q27[DIR_M0M ] = &QQ[DIR_M0M *sizeQ]; - Q.q27[DIR_P0M ] = &QQ[DIR_P0M *sizeQ]; - Q.q27[DIR_M0P ] = &QQ[DIR_M0P *sizeQ]; - Q.q27[DIR_0PP ] = &QQ[DIR_0PP *sizeQ]; - Q.q27[DIR_0MM ] = &QQ[DIR_0MM *sizeQ]; - Q.q27[DIR_0PM ] = &QQ[DIR_0PM *sizeQ]; - Q.q27[DIR_0MP ] = &QQ[DIR_0MP *sizeQ]; - Q.q27[DIR_000] = &QQ[DIR_000*sizeQ]; - Q.q27[DIR_PPP ] = &QQ[DIR_PPP *sizeQ]; - Q.q27[DIR_MMP ] = &QQ[DIR_MMP *sizeQ]; - Q.q27[DIR_PMP ] = &QQ[DIR_PMP *sizeQ]; - Q.q27[DIR_MPP ] = &QQ[DIR_MPP *sizeQ]; - Q.q27[DIR_PPM ] = &QQ[DIR_PPM *sizeQ]; - Q.q27[DIR_MMM ] = &QQ[DIR_MMM *sizeQ]; - Q.q27[DIR_PMM ] = &QQ[DIR_PMM *sizeQ]; - Q.q27[DIR_MPM ] = &QQ[DIR_MPM *sizeQ]; + Q.q27[dP00 ] = &QQ[dP00 *sizeQ]; + Q.q27[dM00 ] = &QQ[dM00 *sizeQ]; + Q.q27[d0P0 ] = &QQ[d0P0 *sizeQ]; + Q.q27[d0M0 ] = &QQ[d0M0 *sizeQ]; + Q.q27[d00P ] = &QQ[d00P *sizeQ]; + Q.q27[d00M ] = &QQ[d00M *sizeQ]; + Q.q27[dPP0 ] = &QQ[dPP0 *sizeQ]; + Q.q27[dMM0 ] = &QQ[dMM0 *sizeQ]; + Q.q27[dPM0 ] = &QQ[dPM0 *sizeQ]; + Q.q27[dMP0 ] = &QQ[dMP0 *sizeQ]; + Q.q27[dP0P ] = &QQ[dP0P *sizeQ]; + Q.q27[dM0M ] = &QQ[dM0M *sizeQ]; + Q.q27[dP0M ] = &QQ[dP0M *sizeQ]; + Q.q27[dM0P ] = &QQ[dM0P *sizeQ]; + Q.q27[d0PP ] = &QQ[d0PP *sizeQ]; + Q.q27[d0MM ] = &QQ[d0MM *sizeQ]; + Q.q27[d0PM ] = &QQ[d0PM *sizeQ]; + Q.q27[d0MP ] = &QQ[d0MP *sizeQ]; + Q.q27[d000] = &QQ[d000*sizeQ]; + Q.q27[dPPP ] = &QQ[dPPP *sizeQ]; + Q.q27[dMMP ] = &QQ[dMMP *sizeQ]; + Q.q27[dPMP ] = &QQ[dPMP *sizeQ]; + Q.q27[dMPP ] = &QQ[dMPP *sizeQ]; + Q.q27[dPPM ] = &QQ[dPPM *sizeQ]; + Q.q27[dMMM ] = &QQ[dMMM *sizeQ]; + Q.q27[dPMM ] = &QQ[dPMM *sizeQ]; + Q.q27[dMPM ] = &QQ[dMPM *sizeQ]; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// for(k=STARTOFFZ + 1 ; k<=nnz+STARTOFFZ-2 ; k++){ for(j=STARTOFFY + 1 ; j<=nny+STARTOFFY-2 ; j++){ //j<=nny/2+STARTOFFY //j<=STARTOFFY+1 @@ -97,89 +97,89 @@ void findQ(Parameter* para, int lev) { QIN.k[QIN.numberOfBCnodes] = kk[m]; - //Q.q27[DIR_P00 ][QIN.numberOfBCnodes] = -1.f; - //Q.q27[DIR_M00 ][QIN.numberOfBCnodes] = -1.f; - //Q.q27[DIR_0P0 ][QIN.numberOfBCnodes] = 0.f; - //Q.q27[DIR_0M0 ][QIN.numberOfBCnodes] = -1.f; - //Q.q27[DIR_00P ][QIN.numberOfBCnodes] = -1.f; - //Q.q27[DIR_00M ][QIN.numberOfBCnodes] = -1.f; - //Q.q27[DIR_PP0 ][QIN.numberOfBCnodes] = 0.f; - //Q.q27[DIR_MM0 ][QIN.numberOfBCnodes] = -1.f; - //Q.q27[DIR_PM0 ][QIN.numberOfBCnodes] = -1.f; - //Q.q27[DIR_MP0 ][QIN.numberOfBCnodes] = 0.f; - //Q.q27[DIR_P0P ][QIN.numberOfBCnodes] = -1.f; - //Q.q27[DIR_M0M ][QIN.numberOfBCnodes] = -1.f; - //Q.q27[DIR_P0M ][QIN.numberOfBCnodes] = -1.f; - //Q.q27[DIR_M0P ][QIN.numberOfBCnodes] = -1.f; - //Q.q27[DIR_0PP ][QIN.numberOfBCnodes] = 0.f; - //Q.q27[DIR_0MM ][QIN.numberOfBCnodes] = -1.f; - //Q.q27[DIR_0PM ][QIN.numberOfBCnodes] = 0.f; - //Q.q27[DIR_0MP ][QIN.numberOfBCnodes] = -1.f; - //Q.q27[DIR_000][QIN.numberOfBCnodes] = -1.f; - //Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = 0.f; - //Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = -1.f; - //Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = -1.f; - //Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = 0.f; - //Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = 0.f; - //Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = -1.f; - //Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = -1.f; - //Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = 0.f; - - //Q.q27[DIR_P00 ][QIN.numberOfBCnodes] = ON[DIR_M00 ]; - //Q.q27[DIR_M00 ][QIN.numberOfBCnodes] = ON[DIR_P00 ]; - //Q.q27[DIR_0P0 ][QIN.numberOfBCnodes] = ON[DIR_0M0 ]; - //Q.q27[DIR_0M0 ][QIN.numberOfBCnodes] = ON[DIR_0P0 ]; - //Q.q27[DIR_00P ][QIN.numberOfBCnodes] = ON[DIR_00M ]; - //Q.q27[DIR_00M ][QIN.numberOfBCnodes] = ON[DIR_00P ]; - //Q.q27[DIR_PP0 ][QIN.numberOfBCnodes] = ON[DIR_MM0 ]; - //Q.q27[DIR_MM0 ][QIN.numberOfBCnodes] = ON[DIR_PP0 ]; - //Q.q27[DIR_PM0 ][QIN.numberOfBCnodes] = ON[DIR_MP0 ]; - //Q.q27[DIR_MP0 ][QIN.numberOfBCnodes] = ON[DIR_PM0 ]; - //Q.q27[DIR_P0P ][QIN.numberOfBCnodes] = ON[DIR_M0M ]; - //Q.q27[DIR_M0M ][QIN.numberOfBCnodes] = ON[DIR_P0P ]; - //Q.q27[DIR_P0M ][QIN.numberOfBCnodes] = ON[DIR_M0P ]; - //Q.q27[DIR_M0P ][QIN.numberOfBCnodes] = ON[DIR_P0M ]; - //Q.q27[DIR_0PP ][QIN.numberOfBCnodes] = ON[DIR_0MM ]; - //Q.q27[DIR_0MM ][QIN.numberOfBCnodes] = ON[DIR_0PP ]; - //Q.q27[DIR_0PM ][QIN.numberOfBCnodes] = ON[DIR_0MP ]; - //Q.q27[DIR_0MP ][QIN.numberOfBCnodes] = ON[DIR_0PM ]; - //Q.q27[DIR_000][QIN.numberOfBCnodes] = ON[DIR_000]; - //Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = ON[DIR_MMM ]; - //Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = ON[DIR_PPM ]; - //Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = ON[DIR_MPM ]; - //Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = ON[DIR_PMM ]; - //Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = ON[DIR_MMP ]; - //Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = ON[DIR_PPP ]; - //Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = ON[DIR_MPP ]; - //Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = ON[DIR_PMP ]; - - Q.q27[DIR_P00 ][QIN.numberOfBCnodes] = ON[DIR_P00 ]; - Q.q27[DIR_M00 ][QIN.numberOfBCnodes] = ON[DIR_M00 ]; - Q.q27[DIR_0P0 ][QIN.numberOfBCnodes] = ON[DIR_0P0 ]; - Q.q27[DIR_0M0 ][QIN.numberOfBCnodes] = ON[DIR_0M0 ]; - Q.q27[DIR_00P ][QIN.numberOfBCnodes] = ON[DIR_00P ]; - Q.q27[DIR_00M ][QIN.numberOfBCnodes] = ON[DIR_00M ]; - Q.q27[DIR_PP0 ][QIN.numberOfBCnodes] = ON[DIR_PP0 ]; - Q.q27[DIR_MM0 ][QIN.numberOfBCnodes] = ON[DIR_MM0 ]; - Q.q27[DIR_PM0 ][QIN.numberOfBCnodes] = ON[DIR_PM0 ]; - Q.q27[DIR_MP0 ][QIN.numberOfBCnodes] = ON[DIR_MP0 ]; - Q.q27[DIR_P0P ][QIN.numberOfBCnodes] = ON[DIR_P0P ]; - Q.q27[DIR_M0M ][QIN.numberOfBCnodes] = ON[DIR_M0M ]; - Q.q27[DIR_P0M ][QIN.numberOfBCnodes] = ON[DIR_P0M ]; - Q.q27[DIR_M0P ][QIN.numberOfBCnodes] = ON[DIR_M0P ]; - Q.q27[DIR_0PP ][QIN.numberOfBCnodes] = ON[DIR_0PP ]; - Q.q27[DIR_0MM ][QIN.numberOfBCnodes] = ON[DIR_0MM ]; - Q.q27[DIR_0PM ][QIN.numberOfBCnodes] = ON[DIR_0PM ]; - Q.q27[DIR_0MP ][QIN.numberOfBCnodes] = ON[DIR_0MP ]; - Q.q27[DIR_000][QIN.numberOfBCnodes] = ON[DIR_000]; - Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = ON[DIR_PPP ]; - Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = ON[DIR_MMP ]; - Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = ON[DIR_PMP ]; - Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = ON[DIR_MPP ]; - Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = ON[DIR_PPM ]; - Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = ON[DIR_MMM ]; - Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = ON[DIR_PMM ]; - Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = ON[DIR_MPM ]; + //Q.q27[dP00 ][QIN.numberOfBCnodes] = -1.f; + //Q.q27[dM00 ][QIN.numberOfBCnodes] = -1.f; + //Q.q27[d0P0 ][QIN.numberOfBCnodes] = 0.f; + //Q.q27[d0M0 ][QIN.numberOfBCnodes] = -1.f; + //Q.q27[d00P ][QIN.numberOfBCnodes] = -1.f; + //Q.q27[d00M ][QIN.numberOfBCnodes] = -1.f; + //Q.q27[dPP0 ][QIN.numberOfBCnodes] = 0.f; + //Q.q27[dMM0 ][QIN.numberOfBCnodes] = -1.f; + //Q.q27[dPM0 ][QIN.numberOfBCnodes] = -1.f; + //Q.q27[dMP0 ][QIN.numberOfBCnodes] = 0.f; + //Q.q27[dP0P ][QIN.numberOfBCnodes] = -1.f; + //Q.q27[dM0M ][QIN.numberOfBCnodes] = -1.f; + //Q.q27[dP0M ][QIN.numberOfBCnodes] = -1.f; + //Q.q27[dM0P ][QIN.numberOfBCnodes] = -1.f; + //Q.q27[d0PP ][QIN.numberOfBCnodes] = 0.f; + //Q.q27[d0MM ][QIN.numberOfBCnodes] = -1.f; + //Q.q27[d0PM ][QIN.numberOfBCnodes] = 0.f; + //Q.q27[d0MP ][QIN.numberOfBCnodes] = -1.f; + //Q.q27[d000][QIN.numberOfBCnodes] = -1.f; + //Q.q27[dPPP ][QIN.numberOfBCnodes] = 0.f; + //Q.q27[dMMP ][QIN.numberOfBCnodes] = -1.f; + //Q.q27[dPMP ][QIN.numberOfBCnodes] = -1.f; + //Q.q27[dMPP ][QIN.numberOfBCnodes] = 0.f; + //Q.q27[dPPM ][QIN.numberOfBCnodes] = 0.f; + //Q.q27[dMMM ][QIN.numberOfBCnodes] = -1.f; + //Q.q27[dPMM ][QIN.numberOfBCnodes] = -1.f; + //Q.q27[dMPM ][QIN.numberOfBCnodes] = 0.f; + + //Q.q27[dP00 ][QIN.numberOfBCnodes] = ON[dM00 ]; + //Q.q27[dM00 ][QIN.numberOfBCnodes] = ON[dP00 ]; + //Q.q27[d0P0 ][QIN.numberOfBCnodes] = ON[d0M0 ]; + //Q.q27[d0M0 ][QIN.numberOfBCnodes] = ON[d0P0 ]; + //Q.q27[d00P ][QIN.numberOfBCnodes] = ON[d00M ]; + //Q.q27[d00M ][QIN.numberOfBCnodes] = ON[d00P ]; + //Q.q27[dPP0 ][QIN.numberOfBCnodes] = ON[dMM0 ]; + //Q.q27[dMM0 ][QIN.numberOfBCnodes] = ON[dPP0 ]; + //Q.q27[dPM0 ][QIN.numberOfBCnodes] = ON[dMP0 ]; + //Q.q27[dMP0 ][QIN.numberOfBCnodes] = ON[dPM0 ]; + //Q.q27[dP0P ][QIN.numberOfBCnodes] = ON[dM0M ]; + //Q.q27[dM0M ][QIN.numberOfBCnodes] = ON[dP0P ]; + //Q.q27[dP0M ][QIN.numberOfBCnodes] = ON[dM0P ]; + //Q.q27[dM0P ][QIN.numberOfBCnodes] = ON[dP0M ]; + //Q.q27[d0PP ][QIN.numberOfBCnodes] = ON[d0MM ]; + //Q.q27[d0MM ][QIN.numberOfBCnodes] = ON[d0PP ]; + //Q.q27[d0PM ][QIN.numberOfBCnodes] = ON[d0MP ]; + //Q.q27[d0MP ][QIN.numberOfBCnodes] = ON[d0PM ]; + //Q.q27[d000][QIN.numberOfBCnodes] = ON[d000]; + //Q.q27[dPPP ][QIN.numberOfBCnodes] = ON[dMMM ]; + //Q.q27[dMMP ][QIN.numberOfBCnodes] = ON[dPPM ]; + //Q.q27[dPMP ][QIN.numberOfBCnodes] = ON[dMPM ]; + //Q.q27[dMPP ][QIN.numberOfBCnodes] = ON[dPMM ]; + //Q.q27[dPPM ][QIN.numberOfBCnodes] = ON[dMMP ]; + //Q.q27[dMMM ][QIN.numberOfBCnodes] = ON[dPPP ]; + //Q.q27[dPMM ][QIN.numberOfBCnodes] = ON[dMPP ]; + //Q.q27[dMPM ][QIN.numberOfBCnodes] = ON[dPMP ]; + + Q.q27[dP00 ][QIN.numberOfBCnodes] = ON[dP00 ]; + Q.q27[dM00 ][QIN.numberOfBCnodes] = ON[dM00 ]; + Q.q27[d0P0 ][QIN.numberOfBCnodes] = ON[d0P0 ]; + Q.q27[d0M0 ][QIN.numberOfBCnodes] = ON[d0M0 ]; + Q.q27[d00P ][QIN.numberOfBCnodes] = ON[d00P ]; + Q.q27[d00M ][QIN.numberOfBCnodes] = ON[d00M ]; + Q.q27[dPP0 ][QIN.numberOfBCnodes] = ON[dPP0 ]; + Q.q27[dMM0 ][QIN.numberOfBCnodes] = ON[dMM0 ]; + Q.q27[dPM0 ][QIN.numberOfBCnodes] = ON[dPM0 ]; + Q.q27[dMP0 ][QIN.numberOfBCnodes] = ON[dMP0 ]; + Q.q27[dP0P ][QIN.numberOfBCnodes] = ON[dP0P ]; + Q.q27[dM0M ][QIN.numberOfBCnodes] = ON[dM0M ]; + Q.q27[dP0M ][QIN.numberOfBCnodes] = ON[dP0M ]; + Q.q27[dM0P ][QIN.numberOfBCnodes] = ON[dM0P ]; + Q.q27[d0PP ][QIN.numberOfBCnodes] = ON[d0PP ]; + Q.q27[d0MM ][QIN.numberOfBCnodes] = ON[d0MM ]; + Q.q27[d0PM ][QIN.numberOfBCnodes] = ON[d0PM ]; + Q.q27[d0MP ][QIN.numberOfBCnodes] = ON[d0MP ]; + Q.q27[d000][QIN.numberOfBCnodes] = ON[d000]; + Q.q27[dPPP ][QIN.numberOfBCnodes] = ON[dPPP ]; + Q.q27[dMMP ][QIN.numberOfBCnodes] = ON[dMMP ]; + Q.q27[dPMP ][QIN.numberOfBCnodes] = ON[dPMP ]; + Q.q27[dMPP ][QIN.numberOfBCnodes] = ON[dMPP ]; + Q.q27[dPPM ][QIN.numberOfBCnodes] = ON[dPPM ]; + Q.q27[dMMM ][QIN.numberOfBCnodes] = ON[dMMM ]; + Q.q27[dPMM ][QIN.numberOfBCnodes] = ON[dPMM ]; + Q.q27[dMPM ][QIN.numberOfBCnodes] = ON[dMPM ]; QIN.numberOfBCnodes++; } @@ -199,7 +199,7 @@ void findKforQ(Parameter* para, int lev) VF_LOG_CRITICAL("findKforQ() is deprecated! - see comment above for more information"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////////////// DIR_P00 DIR_M00 DIR_0P0 DIR_0M0 DIR_00P DIR_00M DIR_PP0 DIR_MM0 DIR_PM0 DIR_MP0 DIR_P0P DIR_M0M DIR_P0M DIR_M0P DIR_0PP DIR_0MM DIR_0PM DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM //////////////////////// + ////////////// dP00 dM00 d0P0 d0M0 d00P d00M dPP0 dMM0 dPM0 dMP0 dP0P dM0M dP0M dM0P d0PP d0MM d0PM d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM //////////////////////// int ex[27]={ 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 0, 0, 0, 1, 1, 1, 1, -1, -1, -1, -1}; int ey[27]={ 0, 0, 1, -1, 0, 0, 1, -1, -1, 1, 0, 0, 0, 0, 1, -1, 1, -1, 0, 1, 1, -1, -1, 1, 1, -1, -1}; int ez[27]={ 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, -1, 1, 1, -1, -1, 1, 0, 1, -1, 1, -1, 1, -1, 1, -1}; @@ -247,33 +247,33 @@ void findKforQ(Parameter* para, int lev) void findQ_MG( int nx, int ny, unsigned int nnx, unsigned int nny, unsigned int nnz, int* geo_mat, unsigned int* kk, unsigned int sizeQ, real* QQ, QforBoundaryConditions &QIN) { QforBoundaryConditions Q; - Q.q27[DIR_P00 ] = &QQ[DIR_P00 *sizeQ]; - Q.q27[DIR_M00 ] = &QQ[DIR_M00 *sizeQ]; - Q.q27[DIR_0P0 ] = &QQ[DIR_0P0 *sizeQ]; - Q.q27[DIR_0M0 ] = &QQ[DIR_0M0 *sizeQ]; - Q.q27[DIR_00P ] = &QQ[DIR_00P *sizeQ]; - Q.q27[DIR_00M ] = &QQ[DIR_00M *sizeQ]; - Q.q27[DIR_PP0 ] = &QQ[DIR_PP0 *sizeQ]; - Q.q27[DIR_MM0 ] = &QQ[DIR_MM0 *sizeQ]; - Q.q27[DIR_PM0 ] = &QQ[DIR_PM0 *sizeQ]; - Q.q27[DIR_MP0 ] = &QQ[DIR_MP0 *sizeQ]; - Q.q27[DIR_P0P ] = &QQ[DIR_P0P *sizeQ]; - Q.q27[DIR_M0M ] = &QQ[DIR_M0M *sizeQ]; - Q.q27[DIR_P0M ] = &QQ[DIR_P0M *sizeQ]; - Q.q27[DIR_M0P ] = &QQ[DIR_M0P *sizeQ]; - Q.q27[DIR_0PP ] = &QQ[DIR_0PP *sizeQ]; - Q.q27[DIR_0MM ] = &QQ[DIR_0MM *sizeQ]; - Q.q27[DIR_0PM ] = &QQ[DIR_0PM *sizeQ]; - Q.q27[DIR_0MP ] = &QQ[DIR_0MP *sizeQ]; - Q.q27[DIR_000] = &QQ[DIR_000*sizeQ]; - Q.q27[DIR_PPP ] = &QQ[DIR_PPP *sizeQ]; - Q.q27[DIR_MMP ] = &QQ[DIR_MMP *sizeQ]; - Q.q27[DIR_PMP ] = &QQ[DIR_PMP *sizeQ]; - Q.q27[DIR_MPP ] = &QQ[DIR_MPP *sizeQ]; - Q.q27[DIR_PPM ] = &QQ[DIR_PPM *sizeQ]; - Q.q27[DIR_MMM ] = &QQ[DIR_MMM *sizeQ]; - Q.q27[DIR_PMM ] = &QQ[DIR_PMM *sizeQ]; - Q.q27[DIR_MPM ] = &QQ[DIR_MPM *sizeQ]; + Q.q27[dP00 ] = &QQ[dP00 *sizeQ]; + Q.q27[dM00 ] = &QQ[dM00 *sizeQ]; + Q.q27[d0P0 ] = &QQ[d0P0 *sizeQ]; + Q.q27[d0M0 ] = &QQ[d0M0 *sizeQ]; + Q.q27[d00P ] = &QQ[d00P *sizeQ]; + Q.q27[d00M ] = &QQ[d00M *sizeQ]; + Q.q27[dPP0 ] = &QQ[dPP0 *sizeQ]; + Q.q27[dMM0 ] = &QQ[dMM0 *sizeQ]; + Q.q27[dPM0 ] = &QQ[dPM0 *sizeQ]; + Q.q27[dMP0 ] = &QQ[dMP0 *sizeQ]; + Q.q27[dP0P ] = &QQ[dP0P *sizeQ]; + Q.q27[dM0M ] = &QQ[dM0M *sizeQ]; + Q.q27[dP0M ] = &QQ[dP0M *sizeQ]; + Q.q27[dM0P ] = &QQ[dM0P *sizeQ]; + Q.q27[d0PP ] = &QQ[d0PP *sizeQ]; + Q.q27[d0MM ] = &QQ[d0MM *sizeQ]; + Q.q27[d0PM ] = &QQ[d0PM *sizeQ]; + Q.q27[d0MP ] = &QQ[d0MP *sizeQ]; + Q.q27[d000] = &QQ[d000*sizeQ]; + Q.q27[dPPP ] = &QQ[dPPP *sizeQ]; + Q.q27[dMMP ] = &QQ[dMMP *sizeQ]; + Q.q27[dPMP ] = &QQ[dPMP *sizeQ]; + Q.q27[dMPP ] = &QQ[dMPP *sizeQ]; + Q.q27[dPPM ] = &QQ[dPPM *sizeQ]; + Q.q27[dMMM ] = &QQ[dMMM *sizeQ]; + Q.q27[dPMM ] = &QQ[dPMM *sizeQ]; + Q.q27[dMPM ] = &QQ[dMPM *sizeQ]; // ! CAUTION ! Do not use this function! // As the order of the distributions was changed in July 2022, this does not work anymore. @@ -282,7 +282,7 @@ void findQ_MG( int nx, int ny, unsigned int nnx, unsigned int nny, unsigned int VF_LOG_CRITICAL("findQ_MG() is deprecated! - see comment above for more information"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////////////// DIR_P00 DIR_M00 DIR_0P0 DIR_0M0 DIR_00P DIR_00M DIR_PP0 DIR_MM0 DIR_PM0 DIR_MP0 DIR_P0P DIR_M0M DIR_P0M DIR_M0P DIR_0PP DIR_0MM DIR_0PM DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM //////////////////////// + ////////////// dP00 dM00 d0P0 d0M0 d00P d00M dPP0 dMM0 dPM0 dMP0 dP0P dM0M dP0M dM0P d0PP d0MM d0PM d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM //////////////////////// int ex[27]={ 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 0, 0, 0, 1, 1, 1, 1, -1, -1, -1, -1}; int ey[27]={ 0, 0, 1, -1, 0, 0, 1, -1, -1, 1, 0, 0, 0, 0, 1, -1, 1, -1, 0, 1, 1, -1, -1, 1, 1, -1, -1}; int ez[27]={ 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, -1, 1, 1, -1, -1, 1, 0, 1, -1, 1, -1, 1, -1, 1, -1}; @@ -327,33 +327,33 @@ void findQ_MG( int nx, int ny, unsigned int nnx, unsigned int nny, unsigned int { QIN.k[QIN.numberOfBCnodes] = kk[m]; - Q.q27[DIR_P00 ][QIN.numberOfBCnodes] = ON[DIR_P00 ]; - Q.q27[DIR_M00 ][QIN.numberOfBCnodes] = ON[DIR_M00 ]; - Q.q27[DIR_0P0 ][QIN.numberOfBCnodes] = ON[DIR_0P0 ]; - Q.q27[DIR_0M0 ][QIN.numberOfBCnodes] = ON[DIR_0M0 ]; - Q.q27[DIR_00P ][QIN.numberOfBCnodes] = ON[DIR_00P ]; - Q.q27[DIR_00M ][QIN.numberOfBCnodes] = ON[DIR_00M ]; - Q.q27[DIR_PP0 ][QIN.numberOfBCnodes] = ON[DIR_PP0 ]; - Q.q27[DIR_MM0 ][QIN.numberOfBCnodes] = ON[DIR_MM0 ]; - Q.q27[DIR_PM0 ][QIN.numberOfBCnodes] = ON[DIR_PM0 ]; - Q.q27[DIR_MP0 ][QIN.numberOfBCnodes] = ON[DIR_MP0 ]; - Q.q27[DIR_P0P ][QIN.numberOfBCnodes] = ON[DIR_P0P ]; - Q.q27[DIR_M0M ][QIN.numberOfBCnodes] = ON[DIR_M0M ]; - Q.q27[DIR_P0M ][QIN.numberOfBCnodes] = ON[DIR_P0M ]; - Q.q27[DIR_M0P ][QIN.numberOfBCnodes] = ON[DIR_M0P ]; - Q.q27[DIR_0PP ][QIN.numberOfBCnodes] = ON[DIR_0PP ]; - Q.q27[DIR_0MM ][QIN.numberOfBCnodes] = ON[DIR_0MM ]; - Q.q27[DIR_0PM ][QIN.numberOfBCnodes] = ON[DIR_0PM ]; - Q.q27[DIR_0MP ][QIN.numberOfBCnodes] = ON[DIR_0MP ]; - Q.q27[DIR_000][QIN.numberOfBCnodes] = ON[DIR_000]; - Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = ON[DIR_PPP ]; - Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = ON[DIR_MMP ]; - Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = ON[DIR_PMP ]; - Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = ON[DIR_MPP ]; - Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = ON[DIR_PPM ]; - Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = ON[DIR_MMM ]; - Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = ON[DIR_PMM ]; - Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = ON[DIR_MPM ]; + Q.q27[dP00 ][QIN.numberOfBCnodes] = ON[dP00 ]; + Q.q27[dM00 ][QIN.numberOfBCnodes] = ON[dM00 ]; + Q.q27[d0P0 ][QIN.numberOfBCnodes] = ON[d0P0 ]; + Q.q27[d0M0 ][QIN.numberOfBCnodes] = ON[d0M0 ]; + Q.q27[d00P ][QIN.numberOfBCnodes] = ON[d00P ]; + Q.q27[d00M ][QIN.numberOfBCnodes] = ON[d00M ]; + Q.q27[dPP0 ][QIN.numberOfBCnodes] = ON[dPP0 ]; + Q.q27[dMM0 ][QIN.numberOfBCnodes] = ON[dMM0 ]; + Q.q27[dPM0 ][QIN.numberOfBCnodes] = ON[dPM0 ]; + Q.q27[dMP0 ][QIN.numberOfBCnodes] = ON[dMP0 ]; + Q.q27[dP0P ][QIN.numberOfBCnodes] = ON[dP0P ]; + Q.q27[dM0M ][QIN.numberOfBCnodes] = ON[dM0M ]; + Q.q27[dP0M ][QIN.numberOfBCnodes] = ON[dP0M ]; + Q.q27[dM0P ][QIN.numberOfBCnodes] = ON[dM0P ]; + Q.q27[d0PP ][QIN.numberOfBCnodes] = ON[d0PP ]; + Q.q27[d0MM ][QIN.numberOfBCnodes] = ON[d0MM ]; + Q.q27[d0PM ][QIN.numberOfBCnodes] = ON[d0PM ]; + Q.q27[d0MP ][QIN.numberOfBCnodes] = ON[d0MP ]; + Q.q27[d000][QIN.numberOfBCnodes] = ON[d000]; + Q.q27[dPPP ][QIN.numberOfBCnodes] = ON[dPPP ]; + Q.q27[dMMP ][QIN.numberOfBCnodes] = ON[dMMP ]; + Q.q27[dPMP ][QIN.numberOfBCnodes] = ON[dPMP ]; + Q.q27[dMPP ][QIN.numberOfBCnodes] = ON[dMPP ]; + Q.q27[dPPM ][QIN.numberOfBCnodes] = ON[dPPM ]; + Q.q27[dMMM ][QIN.numberOfBCnodes] = ON[dMMM ]; + Q.q27[dPMM ][QIN.numberOfBCnodes] = ON[dPMM ]; + Q.q27[dMPM ][QIN.numberOfBCnodes] = ON[dMPM ]; QIN.numberOfBCnodes++; } @@ -373,7 +373,7 @@ void findKforQ_MG(int nx, int ny, unsigned int nnx, unsigned int nny, unsigned i VF_LOG_CRITICAL("findKforQ_MG() is deprecated! - see comment above for more information"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////////////// DIR_P00 DIR_M00 DIR_0P0 DIR_0M0 DIR_00P DIR_00M DIR_PP0 DIR_MM0 DIR_PM0 DIR_MP0 DIR_P0P DIR_M0M DIR_P0M DIR_M0P DIR_0PP DIR_0MM DIR_0PM DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM //////////////////////// + ////////////// dP00 dM00 d0P0 d0M0 d00P d00M dPP0 dMM0 dPM0 dMP0 dP0P dM0M dP0M dM0P d0PP d0MM d0PM d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM //////////////////////// int ex[27]={ 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 0, 0, 0, 1, 1, 1, 1, -1, -1, -1, -1}; int ey[27]={ 0, 0, 1, -1, 0, 0, 1, -1, -1, 1, 0, 0, 0, 0, 1, -1, 1, -1, 0, 1, 1, -1, -1, 1, 1, -1, -1}; int ez[27]={ 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, -1, 1, 1, -1, -1, 1, 0, 1, -1, 1, -1, 1, -1, 1, -1}; @@ -448,33 +448,33 @@ void findQInflow(Parameter* para) QIN.numberOfBCnodes = 0; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// QforBoundaryConditions Q; - Q.q27[DIR_P00 ] = &QQ[DIR_P00 *sizeQ]; - Q.q27[DIR_M00 ] = &QQ[DIR_M00 *sizeQ]; - Q.q27[DIR_0P0 ] = &QQ[DIR_0P0 *sizeQ]; - Q.q27[DIR_0M0 ] = &QQ[DIR_0M0 *sizeQ]; - Q.q27[DIR_00P ] = &QQ[DIR_00P *sizeQ]; - Q.q27[DIR_00M ] = &QQ[DIR_00M *sizeQ]; - Q.q27[DIR_PP0 ] = &QQ[DIR_PP0 *sizeQ]; - Q.q27[DIR_MM0 ] = &QQ[DIR_MM0 *sizeQ]; - Q.q27[DIR_PM0 ] = &QQ[DIR_PM0 *sizeQ]; - Q.q27[DIR_MP0 ] = &QQ[DIR_MP0 *sizeQ]; - Q.q27[DIR_P0P ] = &QQ[DIR_P0P *sizeQ]; - Q.q27[DIR_M0M ] = &QQ[DIR_M0M *sizeQ]; - Q.q27[DIR_P0M ] = &QQ[DIR_P0M *sizeQ]; - Q.q27[DIR_M0P ] = &QQ[DIR_M0P *sizeQ]; - Q.q27[DIR_0PP ] = &QQ[DIR_0PP *sizeQ]; - Q.q27[DIR_0MM ] = &QQ[DIR_0MM *sizeQ]; - Q.q27[DIR_0PM ] = &QQ[DIR_0PM *sizeQ]; - Q.q27[DIR_0MP ] = &QQ[DIR_0MP *sizeQ]; - Q.q27[DIR_000] = &QQ[DIR_000*sizeQ]; - Q.q27[DIR_PPP ] = &QQ[DIR_PPP *sizeQ]; - Q.q27[DIR_MMP ] = &QQ[DIR_MMP *sizeQ]; - Q.q27[DIR_PMP ] = &QQ[DIR_PMP *sizeQ]; - Q.q27[DIR_MPP ] = &QQ[DIR_MPP *sizeQ]; - Q.q27[DIR_PPM ] = &QQ[DIR_PPM *sizeQ]; - Q.q27[DIR_MMM ] = &QQ[DIR_MMM *sizeQ]; - Q.q27[DIR_PMM ] = &QQ[DIR_PMM *sizeQ]; - Q.q27[DIR_MPM ] = &QQ[DIR_MPM *sizeQ]; + Q.q27[dP00 ] = &QQ[dP00 *sizeQ]; + Q.q27[dM00 ] = &QQ[dM00 *sizeQ]; + Q.q27[d0P0 ] = &QQ[d0P0 *sizeQ]; + Q.q27[d0M0 ] = &QQ[d0M0 *sizeQ]; + Q.q27[d00P ] = &QQ[d00P *sizeQ]; + Q.q27[d00M ] = &QQ[d00M *sizeQ]; + Q.q27[dPP0 ] = &QQ[dPP0 *sizeQ]; + Q.q27[dMM0 ] = &QQ[dMM0 *sizeQ]; + Q.q27[dPM0 ] = &QQ[dPM0 *sizeQ]; + Q.q27[dMP0 ] = &QQ[dMP0 *sizeQ]; + Q.q27[dP0P ] = &QQ[dP0P *sizeQ]; + Q.q27[dM0M ] = &QQ[dM0M *sizeQ]; + Q.q27[dP0M ] = &QQ[dP0M *sizeQ]; + Q.q27[dM0P ] = &QQ[dM0P *sizeQ]; + Q.q27[d0PP ] = &QQ[d0PP *sizeQ]; + Q.q27[d0MM ] = &QQ[d0MM *sizeQ]; + Q.q27[d0PM ] = &QQ[d0PM *sizeQ]; + Q.q27[d0MP ] = &QQ[d0MP *sizeQ]; + Q.q27[d000] = &QQ[d000*sizeQ]; + Q.q27[dPPP ] = &QQ[dPPP *sizeQ]; + Q.q27[dMMP ] = &QQ[dMMP *sizeQ]; + Q.q27[dPMP ] = &QQ[dPMP *sizeQ]; + Q.q27[dMPP ] = &QQ[dMPP *sizeQ]; + Q.q27[dPPM ] = &QQ[dPPM *sizeQ]; + Q.q27[dMMM ] = &QQ[dMMM *sizeQ]; + Q.q27[dPMM ] = &QQ[dPMM *sizeQ]; + Q.q27[dMPM ] = &QQ[dMPM *sizeQ]; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //unsigned int li = ((nnx+STARTOFFX-2)-(STARTOFFX+1)-1); //unsigned int lj = ((nny+STARTOFFY-2)-(STARTOFFY+1)-1); @@ -497,33 +497,33 @@ void findQInflow(Parameter* para) //vz[QIN.numberOfBCnodes] = (real)(16.f*(u0*2.f)*i*j*(nx-i)*(ny-j))/(nx*nx*ny*ny); deltaVz[QIN.numberOfBCnodes] = (real)0.f; ////////////////////////////////////////////////////////////////////////// - //Q.q27[DIR_P00 ][QIN.numberOfBCnodes] = (real)-1.f; - //Q.q27[DIR_M00 ][QIN.numberOfBCnodes] = (real)-1.f; - //Q.q27[DIR_0P0 ][QIN.numberOfBCnodes] = (real)-1.f; - //Q.q27[DIR_0M0 ][QIN.numberOfBCnodes] = (real)-1.f; - //Q.q27[DIR_00P ][QIN.numberOfBCnodes] = (real)-1.f; - //Q.q27[DIR_00M ][QIN.numberOfBCnodes] = (real)1.f; - //Q.q27[DIR_PP0 ][QIN.numberOfBCnodes] = (real)-1.f; - //Q.q27[DIR_MM0 ][QIN.numberOfBCnodes] = (real)-1.f; - //Q.q27[DIR_PM0 ][QIN.numberOfBCnodes] = (real)-1.f; - //Q.q27[DIR_MP0 ][QIN.numberOfBCnodes] = (real)-1.f; - //Q.q27[DIR_P0P ][QIN.numberOfBCnodes] = (real)-1.f; - //Q.q27[DIR_M0M ][QIN.numberOfBCnodes] = (real)1.f; - //Q.q27[DIR_P0M ][QIN.numberOfBCnodes] = (real)1.f; - //Q.q27[DIR_M0P ][QIN.numberOfBCnodes] = (real)-1.f; - //Q.q27[DIR_0PP ][QIN.numberOfBCnodes] = (real)-1.f; - //Q.q27[DIR_0MM ][QIN.numberOfBCnodes] = (real)1.f; - //Q.q27[DIR_0PM ][QIN.numberOfBCnodes] = (real)1.f; - //Q.q27[DIR_0MP ][QIN.numberOfBCnodes] = (real)-1.f; - //Q.q27[DIR_000][QIN.numberOfBCnodes] = (real)-1.f; - //Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = (real)-1.f; - //Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = (real)-1.f; - //Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = (real)-1.f; - //Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = (real)-1.f; - //Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = (real)1.f; - //Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = (real)1.f; - //Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = (real)1.f; - //Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = (real)1.f; + //Q.q27[dP00 ][QIN.numberOfBCnodes] = (real)-1.f; + //Q.q27[dM00 ][QIN.numberOfBCnodes] = (real)-1.f; + //Q.q27[d0P0 ][QIN.numberOfBCnodes] = (real)-1.f; + //Q.q27[d0M0 ][QIN.numberOfBCnodes] = (real)-1.f; + //Q.q27[d00P ][QIN.numberOfBCnodes] = (real)-1.f; + //Q.q27[d00M ][QIN.numberOfBCnodes] = (real)1.f; + //Q.q27[dPP0 ][QIN.numberOfBCnodes] = (real)-1.f; + //Q.q27[dMM0 ][QIN.numberOfBCnodes] = (real)-1.f; + //Q.q27[dPM0 ][QIN.numberOfBCnodes] = (real)-1.f; + //Q.q27[dMP0 ][QIN.numberOfBCnodes] = (real)-1.f; + //Q.q27[dP0P ][QIN.numberOfBCnodes] = (real)-1.f; + //Q.q27[dM0M ][QIN.numberOfBCnodes] = (real)1.f; + //Q.q27[dP0M ][QIN.numberOfBCnodes] = (real)1.f; + //Q.q27[dM0P ][QIN.numberOfBCnodes] = (real)-1.f; + //Q.q27[d0PP ][QIN.numberOfBCnodes] = (real)-1.f; + //Q.q27[d0MM ][QIN.numberOfBCnodes] = (real)1.f; + //Q.q27[d0PM ][QIN.numberOfBCnodes] = (real)1.f; + //Q.q27[d0MP ][QIN.numberOfBCnodes] = (real)-1.f; + //Q.q27[d000][QIN.numberOfBCnodes] = (real)-1.f; + //Q.q27[dPPP ][QIN.numberOfBCnodes] = (real)-1.f; + //Q.q27[dMMP ][QIN.numberOfBCnodes] = (real)-1.f; + //Q.q27[dPMP ][QIN.numberOfBCnodes] = (real)-1.f; + //Q.q27[dMPP ][QIN.numberOfBCnodes] = (real)-1.f; + //Q.q27[dPPM ][QIN.numberOfBCnodes] = (real)1.f; + //Q.q27[dMMM ][QIN.numberOfBCnodes] = (real)1.f; + //Q.q27[dPMM ][QIN.numberOfBCnodes] = (real)1.f; + //Q.q27[dMPM ][QIN.numberOfBCnodes] = (real)1.f; ////////////////////////////////////////////////////////////////////////// @@ -531,33 +531,33 @@ void findQInflow(Parameter* para) // As the order of the distributions was changed in July 2022, this does not work anymore. // https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/14 - Q.q27[DIR_P00 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_M00 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_0P0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_0M0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_00P ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_00M ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_PP0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_MM0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_PM0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_MP0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_P0P ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_M0M ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_P0M ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_M0P ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_0PP ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_0MM ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_0PM ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_0MP ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_000][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dP00 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dM00 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d0P0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d0M0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d00P ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[d00M ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dPP0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dMM0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dPM0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dMP0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dP0P ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dM0M ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dP0M ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dM0P ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[d0PP ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[d0MM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d0PM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d0MP ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[d000][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dPPP ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dMMP ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dPMP ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dMPP ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dPPM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dMMM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dPMM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dMPM ][QIN.numberOfBCnodes] = (real)-1.f; ////////////////////////////////////////////////////////////////////////// QIN.numberOfBCnodes++; } @@ -588,33 +588,33 @@ void findQInflow(Parameter* para) // vy[QIN.numberOfBCnodes] = 0.f; // vz[QIN.numberOfBCnodes] = u0; - // Q.q27[DIR_P00 ][QIN.numberOfBCnodes] = ON[DIR_P00 ]; - // Q.q27[DIR_M00 ][QIN.numberOfBCnodes] = ON[DIR_M00 ]; - // Q.q27[DIR_0P0 ][QIN.numberOfBCnodes] = ON[DIR_0P0 ]; - // Q.q27[DIR_0M0 ][QIN.numberOfBCnodes] = ON[DIR_0M0 ]; - // Q.q27[DIR_00P ][QIN.numberOfBCnodes] = ON[DIR_00P ]; - // Q.q27[DIR_00M ][QIN.numberOfBCnodes] = ON[DIR_00M ]; - // Q.q27[DIR_PP0 ][QIN.numberOfBCnodes] = ON[DIR_PP0 ]; - // Q.q27[DIR_MM0 ][QIN.numberOfBCnodes] = ON[DIR_MM0 ]; - // Q.q27[DIR_PM0 ][QIN.numberOfBCnodes] = ON[DIR_PM0 ]; - // Q.q27[DIR_MP0 ][QIN.numberOfBCnodes] = ON[DIR_MP0 ]; - // Q.q27[DIR_P0P ][QIN.numberOfBCnodes] = ON[DIR_P0P ]; - // Q.q27[DIR_M0M ][QIN.numberOfBCnodes] = ON[DIR_M0M ]; - // Q.q27[DIR_P0M ][QIN.numberOfBCnodes] = ON[DIR_P0M ]; - // Q.q27[DIR_M0P ][QIN.numberOfBCnodes] = ON[DIR_M0P ]; - // Q.q27[DIR_0PP ][QIN.numberOfBCnodes] = ON[DIR_0PP ]; - // Q.q27[DIR_0MM ][QIN.numberOfBCnodes] = ON[DIR_0MM ]; - // Q.q27[DIR_0PM ][QIN.numberOfBCnodes] = ON[DIR_0PM ]; - // Q.q27[DIR_0MP ][QIN.numberOfBCnodes] = ON[DIR_0MP ]; - // Q.q27[DIR_000][QIN.numberOfBCnodes] = ON[DIR_000]; - // Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = ON[DIR_PPP ]; - // Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = ON[DIR_MMP ]; - // Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = ON[DIR_PMP ]; - // Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = ON[DIR_MPP ]; - // Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = ON[DIR_PPM ]; - // Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = ON[DIR_MMM ]; - // Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = ON[DIR_PMM ]; - // Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = ON[DIR_MPM ]; + // Q.q27[dP00 ][QIN.numberOfBCnodes] = ON[dP00 ]; + // Q.q27[dM00 ][QIN.numberOfBCnodes] = ON[dM00 ]; + // Q.q27[d0P0 ][QIN.numberOfBCnodes] = ON[d0P0 ]; + // Q.q27[d0M0 ][QIN.numberOfBCnodes] = ON[d0M0 ]; + // Q.q27[d00P ][QIN.numberOfBCnodes] = ON[d00P ]; + // Q.q27[d00M ][QIN.numberOfBCnodes] = ON[d00M ]; + // Q.q27[dPP0 ][QIN.numberOfBCnodes] = ON[dPP0 ]; + // Q.q27[dMM0 ][QIN.numberOfBCnodes] = ON[dMM0 ]; + // Q.q27[dPM0 ][QIN.numberOfBCnodes] = ON[dPM0 ]; + // Q.q27[dMP0 ][QIN.numberOfBCnodes] = ON[dMP0 ]; + // Q.q27[dP0P ][QIN.numberOfBCnodes] = ON[dP0P ]; + // Q.q27[dM0M ][QIN.numberOfBCnodes] = ON[dM0M ]; + // Q.q27[dP0M ][QIN.numberOfBCnodes] = ON[dP0M ]; + // Q.q27[dM0P ][QIN.numberOfBCnodes] = ON[dM0P ]; + // Q.q27[d0PP ][QIN.numberOfBCnodes] = ON[d0PP ]; + // Q.q27[d0MM ][QIN.numberOfBCnodes] = ON[d0MM ]; + // Q.q27[d0PM ][QIN.numberOfBCnodes] = ON[d0PM ]; + // Q.q27[d0MP ][QIN.numberOfBCnodes] = ON[d0MP ]; + // Q.q27[d000][QIN.numberOfBCnodes] = ON[d000]; + // Q.q27[dPPP ][QIN.numberOfBCnodes] = ON[dPPP ]; + // Q.q27[dMMP ][QIN.numberOfBCnodes] = ON[dMMP ]; + // Q.q27[dPMP ][QIN.numberOfBCnodes] = ON[dPMP ]; + // Q.q27[dMPP ][QIN.numberOfBCnodes] = ON[dMPP ]; + // Q.q27[dPPM ][QIN.numberOfBCnodes] = ON[dPPM ]; + // Q.q27[dMMM ][QIN.numberOfBCnodes] = ON[dMMM ]; + // Q.q27[dPMM ][QIN.numberOfBCnodes] = ON[dPMM ]; + // Q.q27[dMPM ][QIN.numberOfBCnodes] = ON[dMPM ]; // QIN.numberOfBCnodes++; // } @@ -647,33 +647,33 @@ void findQInflow(Parameter* para) // vy[QIN.numberOfBCnodes] = 0.f; // vz[QIN.numberOfBCnodes] = 0.f;//u0; - // Q.q27[DIR_P00 ][QIN.numberOfBCnodes] = ON[DIR_P00 ]; - // Q.q27[DIR_M00 ][QIN.numberOfBCnodes] = ON[DIR_M00 ]; - // Q.q27[DIR_0P0 ][QIN.numberOfBCnodes] = ON[DIR_0P0 ]; - // Q.q27[DIR_0M0 ][QIN.numberOfBCnodes] = ON[DIR_0M0 ]; - // Q.q27[DIR_00P ][QIN.numberOfBCnodes] = ON[DIR_00P ]; - // Q.q27[DIR_00M ][QIN.numberOfBCnodes] = ON[DIR_00M ]; - // Q.q27[DIR_PP0 ][QIN.numberOfBCnodes] = ON[DIR_PP0 ]; - // Q.q27[DIR_MM0 ][QIN.numberOfBCnodes] = ON[DIR_MM0 ]; - // Q.q27[DIR_PM0 ][QIN.numberOfBCnodes] = ON[DIR_PM0 ]; - // Q.q27[DIR_MP0 ][QIN.numberOfBCnodes] = ON[DIR_MP0 ]; - // Q.q27[DIR_P0P ][QIN.numberOfBCnodes] = ON[DIR_P0P ]; - // Q.q27[DIR_M0M ][QIN.numberOfBCnodes] = ON[DIR_M0M ]; - // Q.q27[DIR_P0M ][QIN.numberOfBCnodes] = ON[DIR_P0M ]; - // Q.q27[DIR_M0P ][QIN.numberOfBCnodes] = ON[DIR_M0P ]; - // Q.q27[DIR_0PP ][QIN.numberOfBCnodes] = ON[DIR_0PP ]; - // Q.q27[DIR_0MM ][QIN.numberOfBCnodes] = ON[DIR_0MM ]; - // Q.q27[DIR_0PM ][QIN.numberOfBCnodes] = ON[DIR_0PM ]; - // Q.q27[DIR_0MP ][QIN.numberOfBCnodes] = ON[DIR_0MP ]; - // Q.q27[DIR_000][QIN.numberOfBCnodes] = ON[DIR_000]; - // Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = ON[DIR_PPP ]; - // Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = ON[DIR_MMP ]; - // Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = ON[DIR_PMP ]; - // Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = ON[DIR_MPP ]; - // Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = ON[DIR_PPM ]; - // Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = ON[DIR_MMM ]; - // Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = ON[DIR_PMM ]; - // Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = ON[DIR_MPM ]; + // Q.q27[dP00 ][QIN.numberOfBCnodes] = ON[dP00 ]; + // Q.q27[dM00 ][QIN.numberOfBCnodes] = ON[dM00 ]; + // Q.q27[d0P0 ][QIN.numberOfBCnodes] = ON[d0P0 ]; + // Q.q27[d0M0 ][QIN.numberOfBCnodes] = ON[d0M0 ]; + // Q.q27[d00P ][QIN.numberOfBCnodes] = ON[d00P ]; + // Q.q27[d00M ][QIN.numberOfBCnodes] = ON[d00M ]; + // Q.q27[dPP0 ][QIN.numberOfBCnodes] = ON[dPP0 ]; + // Q.q27[dMM0 ][QIN.numberOfBCnodes] = ON[dMM0 ]; + // Q.q27[dPM0 ][QIN.numberOfBCnodes] = ON[dPM0 ]; + // Q.q27[dMP0 ][QIN.numberOfBCnodes] = ON[dMP0 ]; + // Q.q27[dP0P ][QIN.numberOfBCnodes] = ON[dP0P ]; + // Q.q27[dM0M ][QIN.numberOfBCnodes] = ON[dM0M ]; + // Q.q27[dP0M ][QIN.numberOfBCnodes] = ON[dP0M ]; + // Q.q27[dM0P ][QIN.numberOfBCnodes] = ON[dM0P ]; + // Q.q27[d0PP ][QIN.numberOfBCnodes] = ON[d0PP ]; + // Q.q27[d0MM ][QIN.numberOfBCnodes] = ON[d0MM ]; + // Q.q27[d0PM ][QIN.numberOfBCnodes] = ON[d0PM ]; + // Q.q27[d0MP ][QIN.numberOfBCnodes] = ON[d0MP ]; + // Q.q27[d000][QIN.numberOfBCnodes] = ON[d000]; + // Q.q27[dPPP ][QIN.numberOfBCnodes] = ON[dPPP ]; + // Q.q27[dMMP ][QIN.numberOfBCnodes] = ON[dMMP ]; + // Q.q27[dPMP ][QIN.numberOfBCnodes] = ON[dPMP ]; + // Q.q27[dMPP ][QIN.numberOfBCnodes] = ON[dMPP ]; + // Q.q27[dPPM ][QIN.numberOfBCnodes] = ON[dPPM ]; + // Q.q27[dMMM ][QIN.numberOfBCnodes] = ON[dMMM ]; + // Q.q27[dPMM ][QIN.numberOfBCnodes] = ON[dPMM ]; + // Q.q27[dMPM ][QIN.numberOfBCnodes] = ON[dMPM ]; // QIN.numberOfBCnodes++; // } @@ -692,7 +692,7 @@ void findKforQInflow(Parameter* para) VF_LOG_CRITICAL("findKforQInflow() is deprecated! - see comment above for more information"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////////////// DIR_P00 DIR_M00 DIR_0P0 DIR_0M0 DIR_00P DIR_00M DIR_PP0 DIR_MM0 DIR_PM0 DIR_MP0 DIR_P0P DIR_M0M DIR_P0M DIR_M0P DIR_0PP DIR_0MM DIR_0PM DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM //////////////////////// + ////////////// dP00 dM00 d0P0 d0M0 d00P d00M dPP0 dMM0 dPM0 dMP0 dP0P dM0M dP0M dM0P d0PP d0MM d0PM d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM //////////////////////// //int ex[27]={ 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 0, 0, 0, 1, 1, 1, 1, -1, -1, -1, -1}; //int ey[27]={ 0, 0, 1, -1, 0, 0, 1, -1, -1, 1, 0, 0, 0, 0, 1, -1, 1, -1, 0, 1, 1, -1, -1, 1, 1, -1, -1}; int ez[27]={ 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, -1, 1, 1, -1, -1, 1, 0, 1, -1, 1, -1, 1, -1, 1, -1}; @@ -780,7 +780,7 @@ void findQOutflow(Parameter* para) VF_LOG_CRITICAL("findQOutflow() is deprecated! - see comment above for more information"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////////////// DIR_P00 DIR_M00 DIR_0P0 DIR_0M0 DIR_00P DIR_00M DIR_PP0 DIR_MM0 DIR_PM0 DIR_MP0 DIR_P0P DIR_M0M DIR_P0M DIR_M0P DIR_0PP DIR_0MM DIR_0PM DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM //////////////////////// + ////////////// dP00 dM00 d0P0 d0M0 d00P d00M dPP0 dMM0 dPM0 dMP0 dP0P dM0M dP0M dM0P d0PP d0MM d0PM d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM //////////////////////// //int ex[27]={ 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 0, 0, 0, 1, 1, 1, 1, -1, -1, -1, -1}; //int ey[27]={ 0, 0, 1, -1, 0, 0, 1, -1, -1, 1, 0, 0, 0, 0, 1, -1, 1, -1, 0, 1, 1, -1, -1, 1, 1, -1, -1}; //int ez[27]={ 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, -1, 1, 1, -1, -1, 1, 0, 1, -1, 1, -1, 1, -1, 1, -1}; @@ -814,33 +814,33 @@ void findQOutflow(Parameter* para) QIN.numberOfBCnodes = 0; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// QforBoundaryConditions Q; - Q.q27[DIR_P00 ] = &QQ[DIR_P00 *sizeQ]; - Q.q27[DIR_M00 ] = &QQ[DIR_M00 *sizeQ]; - Q.q27[DIR_0P0 ] = &QQ[DIR_0P0 *sizeQ]; - Q.q27[DIR_0M0 ] = &QQ[DIR_0M0 *sizeQ]; - Q.q27[DIR_00P ] = &QQ[DIR_00P *sizeQ]; - Q.q27[DIR_00M ] = &QQ[DIR_00M *sizeQ]; - Q.q27[DIR_PP0 ] = &QQ[DIR_PP0 *sizeQ]; - Q.q27[DIR_MM0 ] = &QQ[DIR_MM0 *sizeQ]; - Q.q27[DIR_PM0 ] = &QQ[DIR_PM0 *sizeQ]; - Q.q27[DIR_MP0 ] = &QQ[DIR_MP0 *sizeQ]; - Q.q27[DIR_P0P ] = &QQ[DIR_P0P *sizeQ]; - Q.q27[DIR_M0M ] = &QQ[DIR_M0M *sizeQ]; - Q.q27[DIR_P0M ] = &QQ[DIR_P0M *sizeQ]; - Q.q27[DIR_M0P ] = &QQ[DIR_M0P *sizeQ]; - Q.q27[DIR_0PP ] = &QQ[DIR_0PP *sizeQ]; - Q.q27[DIR_0MM ] = &QQ[DIR_0MM *sizeQ]; - Q.q27[DIR_0PM ] = &QQ[DIR_0PM *sizeQ]; - Q.q27[DIR_0MP ] = &QQ[DIR_0MP *sizeQ]; - Q.q27[DIR_000] = &QQ[DIR_000*sizeQ]; - Q.q27[DIR_PPP ] = &QQ[DIR_PPP *sizeQ]; - Q.q27[DIR_MMP ] = &QQ[DIR_MMP *sizeQ]; - Q.q27[DIR_PMP ] = &QQ[DIR_PMP *sizeQ]; - Q.q27[DIR_MPP ] = &QQ[DIR_MPP *sizeQ]; - Q.q27[DIR_PPM ] = &QQ[DIR_PPM *sizeQ]; - Q.q27[DIR_MMM ] = &QQ[DIR_MMM *sizeQ]; - Q.q27[DIR_PMM ] = &QQ[DIR_PMM *sizeQ]; - Q.q27[DIR_MPM ] = &QQ[DIR_MPM *sizeQ]; + Q.q27[dP00 ] = &QQ[dP00 *sizeQ]; + Q.q27[dM00 ] = &QQ[dM00 *sizeQ]; + Q.q27[d0P0 ] = &QQ[d0P0 *sizeQ]; + Q.q27[d0M0 ] = &QQ[d0M0 *sizeQ]; + Q.q27[d00P ] = &QQ[d00P *sizeQ]; + Q.q27[d00M ] = &QQ[d00M *sizeQ]; + Q.q27[dPP0 ] = &QQ[dPP0 *sizeQ]; + Q.q27[dMM0 ] = &QQ[dMM0 *sizeQ]; + Q.q27[dPM0 ] = &QQ[dPM0 *sizeQ]; + Q.q27[dMP0 ] = &QQ[dMP0 *sizeQ]; + Q.q27[dP0P ] = &QQ[dP0P *sizeQ]; + Q.q27[dM0M ] = &QQ[dM0M *sizeQ]; + Q.q27[dP0M ] = &QQ[dP0M *sizeQ]; + Q.q27[dM0P ] = &QQ[dM0P *sizeQ]; + Q.q27[d0PP ] = &QQ[d0PP *sizeQ]; + Q.q27[d0MM ] = &QQ[d0MM *sizeQ]; + Q.q27[d0PM ] = &QQ[d0PM *sizeQ]; + Q.q27[d0MP ] = &QQ[d0MP *sizeQ]; + Q.q27[d000] = &QQ[d000*sizeQ]; + Q.q27[dPPP ] = &QQ[dPPP *sizeQ]; + Q.q27[dMMP ] = &QQ[dMMP *sizeQ]; + Q.q27[dPMP ] = &QQ[dPMP *sizeQ]; + Q.q27[dMPP ] = &QQ[dMPP *sizeQ]; + Q.q27[dPPM ] = &QQ[dPPM *sizeQ]; + Q.q27[dMMM ] = &QQ[dMMM *sizeQ]; + Q.q27[dPMM ] = &QQ[dPMM *sizeQ]; + Q.q27[dMPM ] = &QQ[dMPM *sizeQ]; //unsigned int li = ((nnx+STARTOFFX-2)-(STARTOFFX+1)-1); @@ -862,33 +862,33 @@ void findQOutflow(Parameter* para) //vz[QIN.numberOfBCnodes] = (real)(16.f*(u0*2.f)*(i-(STARTOFFX+1)-0.5f)*(li-1.5f-(i-(STARTOFFX+1)))*(j-(STARTOFFY+1)-0.5f)*(lj-1.5f-(j-(STARTOFFY+1))))/(li*lj*li*lj); //vz[QIN.numberOfBCnodes] = (real)(16.f*(u0*2.f)*i*j*(nx-i)*(ny-j))/(nx*nx*ny*ny); deltaVz[QIN.numberOfBCnodes] = (real)0.f; - Q.q27[DIR_P00 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_M00 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_0P0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_0M0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_00P ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_00M ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_PP0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_MM0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_PM0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_MP0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_P0P ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_M0M ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_P0M ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_M0P ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_0PP ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_0MM ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_0PM ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_0MP ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_000][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dP00 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dM00 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d0P0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d0M0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d00P ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[d00M ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dPP0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dMM0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dPM0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dMP0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dP0P ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dM0M ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dP0M ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dM0P ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[d0PP ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[d0MM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d0PM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d0MP ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[d000][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dPPP ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dMMP ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dPMP ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dMPP ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dPPM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dMMM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dPMM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dMPM ][QIN.numberOfBCnodes] = (real)-1.f; QIN.numberOfBCnodes++; } } @@ -912,7 +912,7 @@ void findKforQOutflow(Parameter* para) VF_LOG_CRITICAL("findKforQOutflow() is deprecated! - see comment above for more information"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////////////// DIR_P00 DIR_M00 DIR_0P0 DIR_0M0 DIR_00P DIR_00M DIR_PP0 DIR_MM0 DIR_PM0 DIR_MP0 DIR_P0P DIR_M0M DIR_P0M DIR_M0P DIR_0PP DIR_0MM DIR_0PM DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM //////////////////////// + ////////////// dP00 dM00 d0P0 d0M0 d00P d00M dPP0 dMM0 dPM0 dMP0 dP0P dM0M dP0M dM0P d0PP d0MM d0PM d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM //////////////////////// //int ex[27]={ 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 0, 0, 0, 1, 1, 1, 1, -1, -1, -1, -1}; //int ey[27]={ 0, 0, 1, -1, 0, 0, 1, -1, -1, 1, 0, 0, 0, 0, 1, -1, 1, -1, 0, 1, 1, -1, -1, 1, 1, -1, -1}; int ez[27]={ 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, -1, 1, 1, -1, -1, 1, 0, 1, -1, 1, -1, 1, -1, 1, -1}; @@ -976,36 +976,36 @@ void findKforQOutflow(Parameter* para) // unsigned int sizeQW, real* vxW, real* vyW, real* vzW, real*deltaVW, real* QQW, QforBoundaryConditions &QWin) //{ // QforBoundaryConditions QN; -// QN.q27[DIR_P00 ] = &QQN[DIR_P00 *sizeQN]; -// QN.q27[DIR_M00 ] = &QQN[DIR_M00 *sizeQN]; -// QN.q27[DIR_0P0 ] = &QQN[DIR_0P0 *sizeQN]; -// QN.q27[DIR_0M0 ] = &QQN[DIR_0M0 *sizeQN]; -// QN.q27[DIR_00P ] = &QQN[DIR_00P *sizeQN]; -// QN.q27[DIR_00M ] = &QQN[DIR_00M *sizeQN]; -// QN.q27[DIR_PP0 ] = &QQN[DIR_PP0 *sizeQN]; -// QN.q27[DIR_MM0 ] = &QQN[DIR_MM0 *sizeQN]; -// QN.q27[DIR_PM0 ] = &QQN[DIR_PM0 *sizeQN]; -// QN.q27[DIR_MP0 ] = &QQN[DIR_MP0 *sizeQN]; -// QN.q27[DIR_P0P ] = &QQN[DIR_P0P *sizeQN]; -// QN.q27[DIR_M0M ] = &QQN[DIR_M0M *sizeQN]; -// QN.q27[DIR_P0M ] = &QQN[DIR_P0M *sizeQN]; -// QN.q27[DIR_M0P ] = &QQN[DIR_M0P *sizeQN]; -// QN.q27[DIR_0PP ] = &QQN[DIR_0PP *sizeQN]; -// QN.q27[DIR_0MM ] = &QQN[DIR_0MM *sizeQN]; -// QN.q27[DIR_0PM ] = &QQN[DIR_0PM *sizeQN]; -// QN.q27[DIR_0MP ] = &QQN[DIR_0MP *sizeQN]; -// QN.q27[DIR_000] = &QQN[DIR_000*sizeQN]; -// QN.q27[DIR_PPP ] = &QQN[DIR_PPP *sizeQN]; -// QN.q27[DIR_MMP ] = &QQN[DIR_MMP *sizeQN]; -// QN.q27[DIR_PMP ] = &QQN[DIR_PMP *sizeQN]; -// QN.q27[DIR_MPP ] = &QQN[DIR_MPP *sizeQN]; -// QN.q27[DIR_PPM ] = &QQN[DIR_PPM *sizeQN]; -// QN.q27[DIR_MMM ] = &QQN[DIR_MMM *sizeQN]; -// QN.q27[DIR_PMM ] = &QQN[DIR_PMM *sizeQN]; -// QN.q27[DIR_MPM ] = &QQN[DIR_MPM *sizeQN]; +// QN.q27[dP00 ] = &QQN[dP00 *sizeQN]; +// QN.q27[dM00 ] = &QQN[dM00 *sizeQN]; +// QN.q27[d0P0 ] = &QQN[d0P0 *sizeQN]; +// QN.q27[d0M0 ] = &QQN[d0M0 *sizeQN]; +// QN.q27[d00P ] = &QQN[d00P *sizeQN]; +// QN.q27[d00M ] = &QQN[d00M *sizeQN]; +// QN.q27[dPP0 ] = &QQN[dPP0 *sizeQN]; +// QN.q27[dMM0 ] = &QQN[dMM0 *sizeQN]; +// QN.q27[dPM0 ] = &QQN[dPM0 *sizeQN]; +// QN.q27[dMP0 ] = &QQN[dMP0 *sizeQN]; +// QN.q27[dP0P ] = &QQN[dP0P *sizeQN]; +// QN.q27[dM0M ] = &QQN[dM0M *sizeQN]; +// QN.q27[dP0M ] = &QQN[dP0M *sizeQN]; +// QN.q27[dM0P ] = &QQN[dM0P *sizeQN]; +// QN.q27[d0PP ] = &QQN[d0PP *sizeQN]; +// QN.q27[d0MM ] = &QQN[d0MM *sizeQN]; +// QN.q27[d0PM ] = &QQN[d0PM *sizeQN]; +// QN.q27[d0MP ] = &QQN[d0MP *sizeQN]; +// QN.q27[d000] = &QQN[d000*sizeQN]; +// QN.q27[dPPP ] = &QQN[dPPP *sizeQN]; +// QN.q27[dMMP ] = &QQN[dMMP *sizeQN]; +// QN.q27[dPMP ] = &QQN[dPMP *sizeQN]; +// QN.q27[dMPP ] = &QQN[dMPP *sizeQN]; +// QN.q27[dPPM ] = &QQN[dPPM *sizeQN]; +// QN.q27[dMMM ] = &QQN[dMMM *sizeQN]; +// QN.q27[dPMM ] = &QQN[dPMM *sizeQN]; +// QN.q27[dMPM ] = &QQN[dMPM *sizeQN]; // // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ////////////// DIR_P00 DIR_M00 DIR_0P0 DIR_0M0 DIR_00P DIR_00M DIR_PP0 DIR_MM0 DIR_PM0 DIR_MP0 DIR_P0P DIR_M0M DIR_P0M DIR_M0P DIR_0PP DIR_0MM DIR_0PM DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM //////////////////////// +// ////////////// dP00 dM00 d0P0 d0M0 d00P d00M dPP0 dMM0 dPM0 dMP0 dP0P dM0M dP0M dM0P d0PP d0MM d0PM d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM //////////////////////// // int ex[27]={ 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 0, 0, 0, 1, 1, 1, 1, -1, -1, -1, -1}; // int ey[27]={ 0, 0, 1, -1, 0, 0, 1, -1, -1, 1, 0, 0, 0, 0, 1, -1, 1, -1, 0, 1, 1, -1, -1, 1, 1, -1, -1}; // int ez[27]={ 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, -1, 1, 1, -1, -1, 1, 0, 1, -1, 1, -1, 1, -1, 1, -1}; @@ -1018,7 +1018,7 @@ void findKforQOutflow(Parameter* para) // QforBoundaryConditions &QN, QforBoundaryConditions &QS, QforBoundaryConditions &QE, QforBoundaryConditions &QW) //{ // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ////////////// DIR_P00 DIR_M00 DIR_0P0 DIR_0M0 DIR_00P DIR_00M DIR_PP0 DIR_MM0 DIR_PM0 DIR_MP0 DIR_P0P DIR_M0M DIR_P0M DIR_M0P DIR_0PP DIR_0MM DIR_0PM DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM //////////////////////// +// ////////////// dP00 dM00 d0P0 d0M0 d00P d00M dPP0 dMM0 dPM0 dMP0 dP0P dM0M dP0M dM0P d0PP d0MM d0PM d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM //////////////////////// // int ex[27]={ 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 0, 0, 0, 1, 1, 1, 1, -1, -1, -1, -1}; // int ey[27]={ 0, 0, 1, -1, 0, 0, 1, -1, -1, 1, 0, 0, 0, 0, 1, -1, 1, -1, 0, 1, 1, -1, -1, 1, 1, -1, -1}; // int ez[27]={ 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, -1, 1, 1, -1, -1, 1, 0, 1, -1, 1, -1, 1, -1, 1, -1}; @@ -1069,7 +1069,7 @@ void findQPressX0(Parameter* para, int lev) VF_LOG_CRITICAL("findKforQPressX0() is deprecated! - see comment above for more information"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////////////// DIR_P00 DIR_M00 DIR_0P0 DIR_0M0 DIR_00P DIR_00M DIR_PP0 DIR_MM0 DIR_PM0 DIR_MP0 DIR_P0P DIR_M0M DIR_P0M DIR_M0P DIR_0PP DIR_0MM DIR_0PM DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM //////////////////////// + ////////////// dP00 dM00 d0P0 d0M0 d00P d00M dPP0 dMM0 dPM0 dMP0 dP0P dM0M dP0M dM0P d0PP d0MM d0PM d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM //////////////////////// //int ex[27]={ 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 0, 0, 0, 1, 1, 1, 1, -1, -1, -1, -1}; //int ey[27]={ 0, 0, 1, -1, 0, 0, 1, -1, -1, 1, 0, 0, 0, 0, 1, -1, 1, -1, 0, 1, 1, -1, -1, 1, 1, -1, -1}; //int ez[27]={ 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, -1, 1, 1, -1, -1, 1, 0, 1, -1, 1, -1, 1, -1, 1, -1}; @@ -1096,33 +1096,33 @@ void findQPressX0(Parameter* para, int lev) QIN.numberOfBCnodes = 0; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// QforBoundaryConditions Q; - Q.q27[DIR_P00 ] = &QQ[DIR_P00 *sizeQ]; - Q.q27[DIR_M00 ] = &QQ[DIR_M00 *sizeQ]; - Q.q27[DIR_0P0 ] = &QQ[DIR_0P0 *sizeQ]; - Q.q27[DIR_0M0 ] = &QQ[DIR_0M0 *sizeQ]; - Q.q27[DIR_00P ] = &QQ[DIR_00P *sizeQ]; - Q.q27[DIR_00M ] = &QQ[DIR_00M *sizeQ]; - Q.q27[DIR_PP0 ] = &QQ[DIR_PP0 *sizeQ]; - Q.q27[DIR_MM0 ] = &QQ[DIR_MM0 *sizeQ]; - Q.q27[DIR_PM0 ] = &QQ[DIR_PM0 *sizeQ]; - Q.q27[DIR_MP0 ] = &QQ[DIR_MP0 *sizeQ]; - Q.q27[DIR_P0P ] = &QQ[DIR_P0P *sizeQ]; - Q.q27[DIR_M0M ] = &QQ[DIR_M0M *sizeQ]; - Q.q27[DIR_P0M ] = &QQ[DIR_P0M *sizeQ]; - Q.q27[DIR_M0P ] = &QQ[DIR_M0P *sizeQ]; - Q.q27[DIR_0PP ] = &QQ[DIR_0PP *sizeQ]; - Q.q27[DIR_0MM ] = &QQ[DIR_0MM *sizeQ]; - Q.q27[DIR_0PM ] = &QQ[DIR_0PM *sizeQ]; - Q.q27[DIR_0MP ] = &QQ[DIR_0MP *sizeQ]; - Q.q27[DIR_000] = &QQ[DIR_000*sizeQ]; - Q.q27[DIR_PPP ] = &QQ[DIR_PPP *sizeQ]; - Q.q27[DIR_MMP ] = &QQ[DIR_MMP *sizeQ]; - Q.q27[DIR_PMP ] = &QQ[DIR_PMP *sizeQ]; - Q.q27[DIR_MPP ] = &QQ[DIR_MPP *sizeQ]; - Q.q27[DIR_PPM ] = &QQ[DIR_PPM *sizeQ]; - Q.q27[DIR_MMM ] = &QQ[DIR_MMM *sizeQ]; - Q.q27[DIR_PMM ] = &QQ[DIR_PMM *sizeQ]; - Q.q27[DIR_MPM ] = &QQ[DIR_MPM *sizeQ]; + Q.q27[dP00 ] = &QQ[dP00 *sizeQ]; + Q.q27[dM00 ] = &QQ[dM00 *sizeQ]; + Q.q27[d0P0 ] = &QQ[d0P0 *sizeQ]; + Q.q27[d0M0 ] = &QQ[d0M0 *sizeQ]; + Q.q27[d00P ] = &QQ[d00P *sizeQ]; + Q.q27[d00M ] = &QQ[d00M *sizeQ]; + Q.q27[dPP0 ] = &QQ[dPP0 *sizeQ]; + Q.q27[dMM0 ] = &QQ[dMM0 *sizeQ]; + Q.q27[dPM0 ] = &QQ[dPM0 *sizeQ]; + Q.q27[dMP0 ] = &QQ[dMP0 *sizeQ]; + Q.q27[dP0P ] = &QQ[dP0P *sizeQ]; + Q.q27[dM0M ] = &QQ[dM0M *sizeQ]; + Q.q27[dP0M ] = &QQ[dP0M *sizeQ]; + Q.q27[dM0P ] = &QQ[dM0P *sizeQ]; + Q.q27[d0PP ] = &QQ[d0PP *sizeQ]; + Q.q27[d0MM ] = &QQ[d0MM *sizeQ]; + Q.q27[d0PM ] = &QQ[d0PM *sizeQ]; + Q.q27[d0MP ] = &QQ[d0MP *sizeQ]; + Q.q27[d000] = &QQ[d000*sizeQ]; + Q.q27[dPPP ] = &QQ[dPPP *sizeQ]; + Q.q27[dMMP ] = &QQ[dMMP *sizeQ]; + Q.q27[dPMP ] = &QQ[dPMP *sizeQ]; + Q.q27[dMPP ] = &QQ[dMPP *sizeQ]; + Q.q27[dPPM ] = &QQ[dPPM *sizeQ]; + Q.q27[dMMM ] = &QQ[dMMM *sizeQ]; + Q.q27[dPMM ] = &QQ[dPMM *sizeQ]; + Q.q27[dMPM ] = &QQ[dMPM *sizeQ]; //unsigned int li = ((nnx+STARTOFFX-2)-(STARTOFFX+1)-1); @@ -1145,33 +1145,33 @@ void findQPressX0(Parameter* para, int lev) //vz[QIN.numberOfBCnodes] = (real)(16.f*(u0*2.f)*(i-(STARTOFFX+1)-0.5f)*(li-1.5f-(i-(STARTOFFX+1)))*(j-(STARTOFFY+1)-0.5f)*(lj-1.5f-(j-(STARTOFFY+1))))/(li*lj*li*lj); //vz[QIN.numberOfBCnodes] = (real)(16.f*(u0*2.f)*i*j*(nx-i)*(ny-j))/(nx*nx*ny*ny); deltaVz[QIN.numberOfBCnodes] = (real)0.f; - Q.q27[DIR_P00 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_M00 ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_0P0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_0M0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_00P ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_00M ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_PP0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_MM0 ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_PM0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_MP0 ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_P0P ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_M0M ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_P0M ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_M0P ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_0PP ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_0MM ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_0PM ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_0MP ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_000][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dP00 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dM00 ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[d0P0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d0M0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d00P ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d00M ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dPP0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dMM0 ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dPM0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dMP0 ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dP0P ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dM0M ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dP0M ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dM0P ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[d0PP ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d0MM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d0PM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d0MP ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d000][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dPPP ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dMMP ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dPMP ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dMPP ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dPPM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dMMM ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dPMM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dMPM ][QIN.numberOfBCnodes] = (real)1.f; QIN.numberOfBCnodes++; } } @@ -1187,7 +1187,7 @@ void findKforQPressX0(Parameter* para, int lev) VF_LOG_CRITICAL("findKforQPressX0() is deprecated! - see comment above for more information"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////////////// DIR_P00 DIR_M00 DIR_0P0 DIR_0M0 DIR_00P DIR_00M DIR_PP0 DIR_MM0 DIR_PM0 DIR_MP0 DIR_P0P DIR_M0M DIR_P0M DIR_M0P DIR_0PP DIR_0MM DIR_0PM DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM //////////////////////// + ////////////// dP00 dM00 d0P0 d0M0 d00P d00M dPP0 dMM0 dPM0 dMP0 dP0P dM0M dP0M dM0P d0PP d0MM d0PM d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM //////////////////////// //int ex[27]={ 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 0, 0, 0, 1, 1, 1, 1, -1, -1, -1, -1}; //int ey[27]={ 0, 0, 1, -1, 0, 0, 1, -1, -1, 1, 0, 0, 0, 0, 1, -1, 1, -1, 0, 1, 1, -1, -1, 1, 1, -1, -1}; int ez[27]={ 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, -1, 1, 1, -1, -1, 1, 0, 1, -1, 1, -1, 1, -1, 1, -1}; @@ -1245,7 +1245,7 @@ void findQPressX1(Parameter* para, int lev) VF_LOG_CRITICAL("findQPressX1() is deprecated! - see comment above for more information"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////////////// DIR_P00 DIR_M00 DIR_0P0 DIR_0M0 DIR_00P DIR_00M DIR_PP0 DIR_MM0 DIR_PM0 DIR_MP0 DIR_P0P DIR_M0M DIR_P0M DIR_M0P DIR_0PP DIR_0MM DIR_0PM DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM //////////////////////// + ////////////// dP00 dM00 d0P0 d0M0 d00P d00M dPP0 dMM0 dPM0 dMP0 dP0P dM0M dP0M dM0P d0PP d0MM d0PM d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM //////////////////////// //int ex[27]={ 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 0, 0, 0, 1, 1, 1, 1, -1, -1, -1, -1}; //int ey[27]={ 0, 0, 1, -1, 0, 0, 1, -1, -1, 1, 0, 0, 0, 0, 1, -1, 1, -1, 0, 1, 1, -1, -1, 1, 1, -1, -1}; //int ez[27]={ 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, -1, 1, 1, -1, -1, 1, 0, 1, -1, 1, -1, 1, -1, 1, -1}; @@ -1272,33 +1272,33 @@ void findQPressX1(Parameter* para, int lev) QIN.numberOfBCnodes = 0; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// QforBoundaryConditions Q; - Q.q27[DIR_P00 ] = &QQ[DIR_P00 *sizeQ]; - Q.q27[DIR_M00 ] = &QQ[DIR_M00 *sizeQ]; - Q.q27[DIR_0P0 ] = &QQ[DIR_0P0 *sizeQ]; - Q.q27[DIR_0M0 ] = &QQ[DIR_0M0 *sizeQ]; - Q.q27[DIR_00P ] = &QQ[DIR_00P *sizeQ]; - Q.q27[DIR_00M ] = &QQ[DIR_00M *sizeQ]; - Q.q27[DIR_PP0 ] = &QQ[DIR_PP0 *sizeQ]; - Q.q27[DIR_MM0 ] = &QQ[DIR_MM0 *sizeQ]; - Q.q27[DIR_PM0 ] = &QQ[DIR_PM0 *sizeQ]; - Q.q27[DIR_MP0 ] = &QQ[DIR_MP0 *sizeQ]; - Q.q27[DIR_P0P ] = &QQ[DIR_P0P *sizeQ]; - Q.q27[DIR_M0M ] = &QQ[DIR_M0M *sizeQ]; - Q.q27[DIR_P0M ] = &QQ[DIR_P0M *sizeQ]; - Q.q27[DIR_M0P ] = &QQ[DIR_M0P *sizeQ]; - Q.q27[DIR_0PP ] = &QQ[DIR_0PP *sizeQ]; - Q.q27[DIR_0MM ] = &QQ[DIR_0MM *sizeQ]; - Q.q27[DIR_0PM ] = &QQ[DIR_0PM *sizeQ]; - Q.q27[DIR_0MP ] = &QQ[DIR_0MP *sizeQ]; - Q.q27[DIR_000] = &QQ[DIR_000*sizeQ]; - Q.q27[DIR_PPP ] = &QQ[DIR_PPP *sizeQ]; - Q.q27[DIR_MMP ] = &QQ[DIR_MMP *sizeQ]; - Q.q27[DIR_PMP ] = &QQ[DIR_PMP *sizeQ]; - Q.q27[DIR_MPP ] = &QQ[DIR_MPP *sizeQ]; - Q.q27[DIR_PPM ] = &QQ[DIR_PPM *sizeQ]; - Q.q27[DIR_MMM ] = &QQ[DIR_MMM *sizeQ]; - Q.q27[DIR_PMM ] = &QQ[DIR_PMM *sizeQ]; - Q.q27[DIR_MPM ] = &QQ[DIR_MPM *sizeQ]; + Q.q27[dP00 ] = &QQ[dP00 *sizeQ]; + Q.q27[dM00 ] = &QQ[dM00 *sizeQ]; + Q.q27[d0P0 ] = &QQ[d0P0 *sizeQ]; + Q.q27[d0M0 ] = &QQ[d0M0 *sizeQ]; + Q.q27[d00P ] = &QQ[d00P *sizeQ]; + Q.q27[d00M ] = &QQ[d00M *sizeQ]; + Q.q27[dPP0 ] = &QQ[dPP0 *sizeQ]; + Q.q27[dMM0 ] = &QQ[dMM0 *sizeQ]; + Q.q27[dPM0 ] = &QQ[dPM0 *sizeQ]; + Q.q27[dMP0 ] = &QQ[dMP0 *sizeQ]; + Q.q27[dP0P ] = &QQ[dP0P *sizeQ]; + Q.q27[dM0M ] = &QQ[dM0M *sizeQ]; + Q.q27[dP0M ] = &QQ[dP0M *sizeQ]; + Q.q27[dM0P ] = &QQ[dM0P *sizeQ]; + Q.q27[d0PP ] = &QQ[d0PP *sizeQ]; + Q.q27[d0MM ] = &QQ[d0MM *sizeQ]; + Q.q27[d0PM ] = &QQ[d0PM *sizeQ]; + Q.q27[d0MP ] = &QQ[d0MP *sizeQ]; + Q.q27[d000] = &QQ[d000*sizeQ]; + Q.q27[dPPP ] = &QQ[dPPP *sizeQ]; + Q.q27[dMMP ] = &QQ[dMMP *sizeQ]; + Q.q27[dPMP ] = &QQ[dPMP *sizeQ]; + Q.q27[dMPP ] = &QQ[dMPP *sizeQ]; + Q.q27[dPPM ] = &QQ[dPPM *sizeQ]; + Q.q27[dMMM ] = &QQ[dMMM *sizeQ]; + Q.q27[dPMM ] = &QQ[dPMM *sizeQ]; + Q.q27[dMPM ] = &QQ[dMPM *sizeQ]; //unsigned int li = ((nnx+STARTOFFX-2)-(STARTOFFX+1)-1); @@ -1321,33 +1321,33 @@ void findQPressX1(Parameter* para, int lev) //vz[QIN.numberOfBCnodes] = (real)(16.f*(u0*2.f)*(i-(STARTOFFX+1)-0.5f)*(li-1.5f-(i-(STARTOFFX+1)))*(j-(STARTOFFY+1)-0.5f)*(lj-1.5f-(j-(STARTOFFY+1))))/(li*lj*li*lj); //vz[QIN.numberOfBCnodes] = (real)(16.f*(u0*2.f)*i*j*(nx-i)*(ny-j))/(nx*nx*ny*ny); deltaVz[QIN.numberOfBCnodes] = (real)0.f; - Q.q27[DIR_P00 ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_M00 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_0P0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_0M0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_00P ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_00M ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_PP0 ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_MM0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_PM0 ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_MP0 ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_P0P ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_M0M ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_P0M ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_M0P ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_0PP ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_0MM ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_0PM ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_0MP ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_000][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_PPP ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_MMP ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_PMP ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_MPP ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_PPM ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_MMM ][QIN.numberOfBCnodes] = (real)-1.f; - Q.q27[DIR_PMM ][QIN.numberOfBCnodes] = (real)1.f; - Q.q27[DIR_MPM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dP00 ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dM00 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d0P0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d0M0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d00P ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d00M ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dPP0 ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dMM0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dPM0 ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dMP0 ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dP0P ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dM0M ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dP0M ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dM0P ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d0PP ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d0MM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d0PM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d0MP ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[d000][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dPPP ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dMMP ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dPMP ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dMPP ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dPPM ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dMMM ][QIN.numberOfBCnodes] = (real)-1.f; + Q.q27[dPMM ][QIN.numberOfBCnodes] = (real)1.f; + Q.q27[dMPM ][QIN.numberOfBCnodes] = (real)-1.f; QIN.numberOfBCnodes++; } } @@ -1363,7 +1363,7 @@ void findKforQPressX1(Parameter* para, int lev) VF_LOG_CRITICAL("findKforQPressX1() is deprecated! - see comment above for more information"); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - ////////////// DIR_P00 DIR_M00 DIR_0P0 DIR_0M0 DIR_00P DIR_00M DIR_PP0 DIR_MM0 DIR_PM0 DIR_MP0 DIR_P0P DIR_M0M DIR_P0M DIR_M0P DIR_0PP DIR_0MM DIR_0PM DIR_0MP ZERO DIR_PPP DIR_PPM DIR_PMP DIR_PMM DIR_MPP DIR_MPM DIR_MMP DIR_MMM //////////////////////// + ////////////// dP00 dM00 d0P0 d0M0 d00P d00M dPP0 dMM0 dPM0 dMP0 dP0P dM0M dP0M dM0P d0PP d0MM d0PM d0MP ZERO dPPP dPPM dPMP dPMM dMPP dMPM dMMP dMMM //////////////////////// //int ex[27]={ 1, -1, 0, 0, 0, 0, 1, -1, 1, -1, 1, -1, 1, -1, 0, 0, 0, 0, 0, 1, 1, 1, 1, -1, -1, -1, -1}; //int ey[27]={ 0, 0, 1, -1, 0, 0, 1, -1, -1, 1, 0, 0, 0, 0, 1, -1, 1, -1, 0, 1, 1, -1, -1, 1, 1, -1, -1}; int ez[27]={ 0, 0, 0, 0, 1, -1, 0, 0, 0, 0, 1, -1, -1, 1, 1, -1, -1, 1, 0, 1, -1, 1, -1, 1, -1, 1, -1}; diff --git a/src/gpu/VirtualFluids_GPU/FindQ/FindQ.h b/src/gpu/core/FindQ/FindQ.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/FindQ/FindQ.h rename to src/gpu/core/FindQ/FindQ.h diff --git a/src/gpu/core/GPU/AdvectionDiffusionBCs27.cu b/src/gpu/core/GPU/AdvectionDiffusionBCs27.cu new file mode 100644 index 0000000000000000000000000000000000000000..7d1bccaddbfd51a413c6833d0e4122e8447764c2 --- /dev/null +++ b/src/gpu/core/GPU/AdvectionDiffusionBCs27.cu @@ -0,0 +1,7147 @@ +/* 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/CP27.cu b/src/gpu/core/GPU/CP27.cu new file mode 100644 index 0000000000000000000000000000000000000000..55717462bc4fbcb75bb1d55c193e0d4ea222aac8 --- /dev/null +++ b/src/gpu/core/GPU/CP27.cu @@ -0,0 +1,146 @@ +/* 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 CalcCP27(real* DD, + int* cpIndex, + int nonCp, + double *cpPress, + 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]; + } + //////////////////////////////////////////////////////////////////////////////// + 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<nonCp) + { + //////////////////////////////////////////////////////////////////////////////// + //index + unsigned int KQK = cpIndex[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]; + //////////////////////////////////////////////////////////////////////////////// + double PressCP; + + PressCP = (D.f[dP00])[ke ]+ (D.f[dM00])[kw ]+ + (D.f[d0P0])[kn ]+ (D.f[d0M0])[ks ]+ + (D.f[d00P])[kt ]+ (D.f[d00M])[kb ]+ + (D.f[dPP0])[kne ]+ (D.f[dMM0])[ksw ]+ + (D.f[dPM0])[kse ]+ (D.f[dMP0])[knw ]+ + (D.f[dP0P])[kte ]+ (D.f[dM0M])[kbw ]+ + (D.f[dP0M])[kbe ]+ (D.f[dM0P])[ktw ]+ + (D.f[d0PP])[ktn ]+ (D.f[d0MM])[kbs ]+ + (D.f[d0PM])[kbn ]+ (D.f[d0MP])[kts ]+ + (D.f[d000])[kzero]+ + (D.f[dPPP])[ktne]+ (D.f[dMMP])[ktsw]+ + (D.f[dPMP])[ktse]+ (D.f[dMPP])[ktnw]+ + (D.f[dPPM])[kbne]+ (D.f[dMMM])[kbsw]+ + (D.f[dPMM])[kbse]+ (D.f[dMPM])[kbnw]; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + cpPress[k] = PressCP; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + } +} + diff --git a/src/gpu/VirtualFluids_GPU/GPU/Calc2ndMoments27.cu b/src/gpu/core/GPU/Calc2ndMoments27.cu similarity index 71% rename from src/gpu/VirtualFluids_GPU/GPU/Calc2ndMoments27.cu rename to src/gpu/core/GPU/Calc2ndMoments27.cu index 15b8ecefee35463895d8bf5a48cc64868763bf93..edd48091e7429bc5e3221fc1bd8b8420f67f22da 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/Calc2ndMoments27.cu +++ b/src/gpu/core/GPU/Calc2ndMoments27.cu @@ -23,63 +23,63 @@ __global__ void LBCalc2ndMomentsIncompSP27( real* kxyFromfcNEQ, Distributions27 D; if (isEvenTimestep==true) { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; + 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[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; + 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]; } //////////////////////////////////////////////////////////////////////////////// const unsigned x = threadIdx.x; // Globaler x-Index @@ -125,33 +125,33 @@ __global__ void LBCalc2ndMomentsIncompSP27( real* kxyFromfcNEQ, 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_ZERO,*/f_TNE, f_TSW, f_TSE, f_TNW, f_BNE, f_BSW, f_BSE, f_BNW; - f_E = (D.f[DIR_P00])[ke ]; - f_W = (D.f[DIR_M00])[kw ]; - f_N = (D.f[DIR_0P0])[kn ]; - f_S = (D.f[DIR_0M0])[ks ]; - f_T = (D.f[DIR_00P])[kt ]; - f_B = (D.f[DIR_00M])[kb ]; - f_NE = (D.f[DIR_PP0])[kne ]; - f_SW = (D.f[DIR_MM0])[ksw ]; - f_SE = (D.f[DIR_PM0])[kse ]; - f_NW = (D.f[DIR_MP0])[knw ]; - f_TE = (D.f[DIR_P0P])[kte ]; - f_BW = (D.f[DIR_M0M])[kbw ]; - f_BE = (D.f[DIR_P0M])[kbe ]; - f_TW = (D.f[DIR_M0P])[ktw ]; - f_TN = (D.f[DIR_0PP])[ktn ]; - f_BS = (D.f[DIR_0MM])[kbs ]; - f_BN = (D.f[DIR_0PM])[kbn ]; - f_TS = (D.f[DIR_0MP])[kts ]; - //f_ZERO = (D.f[DIR_000])[kzero]; - f_TNE = (D.f[DIR_PPP])[ktne ]; - f_TSW = (D.f[DIR_MMP])[ktsw ]; - f_TSE = (D.f[DIR_PMP])[ktse ]; - f_TNW = (D.f[DIR_MPP])[ktnw ]; - f_BNE = (D.f[DIR_PPM])[kbne ]; - f_BSW = (D.f[DIR_MMM])[kbsw ]; - f_BSE = (D.f[DIR_PMM])[kbse ]; - f_BNW = (D.f[DIR_MPM])[kbnw ]; + f_E = (D.f[dP00])[ke ]; + f_W = (D.f[dM00])[kw ]; + f_N = (D.f[d0P0])[kn ]; + f_S = (D.f[d0M0])[ks ]; + f_T = (D.f[d00P])[kt ]; + f_B = (D.f[d00M])[kb ]; + f_NE = (D.f[dPP0])[kne ]; + f_SW = (D.f[dMM0])[ksw ]; + f_SE = (D.f[dPM0])[kse ]; + f_NW = (D.f[dMP0])[knw ]; + f_TE = (D.f[dP0P])[kte ]; + f_BW = (D.f[dM0M])[kbw ]; + f_BE = (D.f[dP0M])[kbe ]; + f_TW = (D.f[dM0P])[ktw ]; + f_TN = (D.f[d0PP])[ktn ]; + f_BS = (D.f[d0MM])[kbs ]; + f_BN = (D.f[d0PM])[kbn ]; + f_TS = (D.f[d0MP])[kts ]; + //f_ZERO = (D.f[d000])[kzero]; + f_TNE = (D.f[dPPP])[ktne ]; + f_TSW = (D.f[dMMP])[ktsw ]; + f_TSE = (D.f[dPMP])[ktse ]; + f_TNW = (D.f[dMPP])[ktnw ]; + f_BNE = (D.f[dPPM])[kbne ]; + f_BSW = (D.f[dMMM])[kbsw ]; + f_BSE = (D.f[dPMM])[kbse ]; + f_BNW = (D.f[dMPM])[kbnw ]; ////////////////////////////////////////////////////////////////////////// real vx1, vx2, vx3; kxyFromfcNEQ[k] = c0o1; @@ -168,8 +168,8 @@ __global__ void LBCalc2ndMomentsIncompSP27( real* kxyFromfcNEQ, kxyFromfcNEQ[k] = -c3o1 *(f_SW+f_BSW+f_TSW-f_NW-f_BNW-f_TNW-f_SE-f_BSE-f_TSE+f_NE+f_BNE+f_TNE-(vx1*vx2)); kyzFromfcNEQ[k] = -c3o1 *(f_BS+f_BSE+f_BSW-f_TS-f_TSE-f_TSW-f_BN-f_BNE-f_BNW+f_TN+f_TNE+f_TNW-(vx2*vx3)); kxzFromfcNEQ[k] = -c3o1 *(f_BW+f_BSW+f_BNW-f_TW-f_TSW-f_TNW-f_BE-f_BSE-f_BNE+f_TE+f_TSE+f_TNE-(vx1*vx3)); - kxxMyyFromfcNEQ[k] = -c3o2 * (f_BW+f_W+f_TW-f_BS-f_S-f_TS-f_BN-f_N-f_TN+f_BE+f_E+f_TE-(vx1*vx1-vx2*vx2)); //all DIR_P00+DIR_M00 minus all DIR_0P0+DIR_0M0 (no combinations of xy left) - kxxMzzFromfcNEQ[k] = -c3o2 * (f_SW+f_W+f_NW-f_BS-f_TS-f_B-f_T-f_BN-f_TN+f_SE+f_E+f_NE-(vx1*vx1-vx3*vx3)); //all DIR_P00+DIR_M00 minus all DIR_00P+DIR_00M (no combinations of xz left) + kxxMyyFromfcNEQ[k] = -c3o2 * (f_BW+f_W+f_TW-f_BS-f_S-f_TS-f_BN-f_N-f_TN+f_BE+f_E+f_TE-(vx1*vx1-vx2*vx2)); //all dP00+dM00 minus all d0P0+d0M0 (no combinations of xy left) + kxxMzzFromfcNEQ[k] = -c3o2 * (f_SW+f_W+f_NW-f_BS-f_TS-f_B-f_T-f_BN-f_TN+f_SE+f_E+f_NE-(vx1*vx1-vx3*vx3)); //all dP00+dM00 minus all d00P+d00M (no combinations of xz left) } } } @@ -222,63 +222,63 @@ __global__ void LBCalc2ndMomentsCompSP27(real* kxyFromfcNEQ, Distributions27 D; if (isEvenTimestep==true) { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; + 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[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; + 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]; } //////////////////////////////////////////////////////////////////////////////// const unsigned x = threadIdx.x; // Globaler x-Index @@ -325,33 +325,33 @@ __global__ void LBCalc2ndMomentsCompSP27(real* kxyFromfcNEQ, ////////////////////////////////////////////////////////////////////////// real f_ZERO; 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_E = (D.f[DIR_P00])[ke ]; - f_W = (D.f[DIR_M00])[kw ]; - f_N = (D.f[DIR_0P0])[kn ]; - f_S = (D.f[DIR_0M0])[ks ]; - f_T = (D.f[DIR_00P])[kt ]; - f_B = (D.f[DIR_00M])[kb ]; - f_NE = (D.f[DIR_PP0])[kne ]; - f_SW = (D.f[DIR_MM0])[ksw ]; - f_SE = (D.f[DIR_PM0])[kse ]; - f_NW = (D.f[DIR_MP0])[knw ]; - f_TE = (D.f[DIR_P0P])[kte ]; - f_BW = (D.f[DIR_M0M])[kbw ]; - f_BE = (D.f[DIR_P0M])[kbe ]; - f_TW = (D.f[DIR_M0P])[ktw ]; - f_TN = (D.f[DIR_0PP])[ktn ]; - f_BS = (D.f[DIR_0MM])[kbs ]; - f_BN = (D.f[DIR_0PM])[kbn ]; - f_TS = (D.f[DIR_0MP])[kts ]; - f_ZERO = (D.f[DIR_000])[kzero]; - f_TNE = (D.f[DIR_PPP])[ktne ]; - f_TSW = (D.f[DIR_MMP])[ktsw ]; - f_TSE = (D.f[DIR_PMP])[ktse ]; - f_TNW = (D.f[DIR_MPP])[ktnw ]; - f_BNE = (D.f[DIR_PPM])[kbne ]; - f_BSW = (D.f[DIR_MMM])[kbsw ]; - f_BSE = (D.f[DIR_PMM])[kbse ]; - f_BNW = (D.f[DIR_MPM])[kbnw ]; + f_E = (D.f[dP00])[ke ]; + f_W = (D.f[dM00])[kw ]; + f_N = (D.f[d0P0])[kn ]; + f_S = (D.f[d0M0])[ks ]; + f_T = (D.f[d00P])[kt ]; + f_B = (D.f[d00M])[kb ]; + f_NE = (D.f[dPP0])[kne ]; + f_SW = (D.f[dMM0])[ksw ]; + f_SE = (D.f[dPM0])[kse ]; + f_NW = (D.f[dMP0])[knw ]; + f_TE = (D.f[dP0P])[kte ]; + f_BW = (D.f[dM0M])[kbw ]; + f_BE = (D.f[dP0M])[kbe ]; + f_TW = (D.f[dM0P])[ktw ]; + f_TN = (D.f[d0PP])[ktn ]; + f_BS = (D.f[d0MM])[kbs ]; + f_BN = (D.f[d0PM])[kbn ]; + f_TS = (D.f[d0MP])[kts ]; + f_ZERO = (D.f[d000])[kzero]; + f_TNE = (D.f[dPPP])[ktne ]; + f_TSW = (D.f[dMMP])[ktsw ]; + f_TSE = (D.f[dPMP])[ktse ]; + f_TNW = (D.f[dMPP])[ktnw ]; + f_BNE = (D.f[dPPM])[kbne ]; + f_BSW = (D.f[dMMM])[kbsw ]; + f_BSE = (D.f[dPMM])[kbse ]; + f_BNW = (D.f[dMPM])[kbnw ]; ////////////////////////////////////////////////////////////////////////// real drho; real vx1, vx2, vx3, rho; @@ -373,8 +373,8 @@ __global__ void LBCalc2ndMomentsCompSP27(real* kxyFromfcNEQ, kxyFromfcNEQ[k] = -c3o1 *(f_SW+f_BSW+f_TSW-f_NW-f_BNW-f_TNW-f_SE-f_BSE-f_TSE+f_NE+f_BNE+f_TNE-(vx1*vx2)); kyzFromfcNEQ[k] = -c3o1 *(f_BS+f_BSE+f_BSW-f_TS-f_TSE-f_TSW-f_BN-f_BNE-f_BNW+f_TN+f_TNE+f_TNW-(vx2*vx3)); kxzFromfcNEQ[k] = -c3o1 *(f_BW+f_BSW+f_BNW-f_TW-f_TSW-f_TNW-f_BE-f_BSE-f_BNE+f_TE+f_TSE+f_TNE-(vx1*vx3)); - kxxMyyFromfcNEQ[k] = -c3o2 * (f_BW+f_W+f_TW-f_BS-f_S-f_TS-f_BN-f_N-f_TN+f_BE+f_E+f_TE-(vx1*vx1-vx2*vx2)); //all DIR_P00+DIR_M00 minus all DIR_0P0+DIR_0M0 (no combinations of xy left) - kxxMzzFromfcNEQ[k] = -c3o2 * (f_SW+f_W+f_NW-f_BS-f_TS-f_B-f_T-f_BN-f_TN+f_SE+f_E+f_NE-(vx1*vx1-vx3*vx3)); //all DIR_P00+DIR_M00 minus all DIR_00P+DIR_00M (no combinations of xz left) + kxxMyyFromfcNEQ[k] = -c3o2 * (f_BW+f_W+f_TW-f_BS-f_S-f_TS-f_BN-f_N-f_TN+f_BE+f_E+f_TE-(vx1*vx1-vx2*vx2)); //all dP00+dM00 minus all d0P0+d0M0 (no combinations of xy left) + kxxMzzFromfcNEQ[k] = -c3o2 * (f_SW+f_W+f_NW-f_BS-f_TS-f_B-f_T-f_BN-f_TN+f_SE+f_E+f_NE-(vx1*vx1-vx3*vx3)); //all dP00+dM00 minus all d00P+d00M (no combinations of xz left) } } } @@ -448,63 +448,63 @@ __global__ void LBCalc3rdMomentsIncompSP27( real* CUMbbb, Distributions27 D; if (EvenOrOdd==true) { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; + D.f[dP00] = &DDStart[dP00 * numberOfLBnodes]; + D.f[dM00] = &DDStart[dM00 * numberOfLBnodes]; + D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes]; + D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes]; + D.f[d00P] = &DDStart[d00P * numberOfLBnodes]; + D.f[d00M] = &DDStart[d00M * numberOfLBnodes]; + D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes]; + D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes]; + D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes]; + D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes]; + D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes]; + D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes]; + D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes]; + D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes]; + D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes]; + D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes]; + D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes]; + D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes]; + D.f[d000] = &DDStart[d000 * numberOfLBnodes]; + D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes]; + D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes]; + D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes]; + D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes]; + D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes]; + D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes]; + D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes]; + D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes]; } else { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; + D.f[dM00] = &DDStart[dP00 * numberOfLBnodes]; + D.f[dP00] = &DDStart[dM00 * numberOfLBnodes]; + D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes]; + D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes]; + D.f[d00M] = &DDStart[d00P * numberOfLBnodes]; + D.f[d00P] = &DDStart[d00M * numberOfLBnodes]; + D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes]; + D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes]; + D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes]; + D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes]; + D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes]; + D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes]; + D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes]; + D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes]; + D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes]; + D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes]; + D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes]; + D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes]; + D.f[d000] = &DDStart[d000 * numberOfLBnodes]; + D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes]; + D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes]; + D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes]; + D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes]; + D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes]; + D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes]; + D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes]; + D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes]; } //////////////////////////////////////////////////////////////////////////////// @@ -517,33 +517,33 @@ __global__ void LBCalc3rdMomentsIncompSP27( real* CUMbbb, unsigned int kbs = neighborZ[ks]; unsigned int kbsw = neighborZ[ksw]; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k ]; - real mfabb = (D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k ]; - real mfbab = (D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k ]; - real mfbba = (D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k ]; - real mfaab = (D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks ]; - real mfacb = (D.f[DIR_MP0])[kw ]; - real mfcbc = (D.f[DIR_P0P])[k ]; - real mfaba = (D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb ]; - real mfabc = (D.f[DIR_M0P])[kw ]; - real mfbcc = (D.f[DIR_0PP])[k ]; - real mfbaa = (D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb ]; - real mfbac = (D.f[DIR_0MP])[ks ]; - real mfbbb = (D.f[DIR_000])[k ]; - real mfccc = (D.f[DIR_PPP])[k ]; - real mfaac = (D.f[DIR_MMP])[ksw]; - real mfcac = (D.f[DIR_PMP])[ks ]; - real mfacc = (D.f[DIR_MPP])[kw ]; - real mfcca = (D.f[DIR_PPM])[kb ]; - real mfaaa = (D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs]; - real mfaca = (D.f[DIR_MPM])[kbw]; + real mfcbb = (D.f[dP00])[k ]; + real mfabb = (D.f[dM00])[kw ]; + real mfbcb = (D.f[d0P0])[k ]; + real mfbab = (D.f[d0M0])[ks ]; + real mfbbc = (D.f[d00P])[k ]; + real mfbba = (D.f[d00M])[kb ]; + real mfccb = (D.f[dPP0])[k ]; + real mfaab = (D.f[dMM0])[ksw]; + real mfcab = (D.f[dPM0])[ks ]; + real mfacb = (D.f[dMP0])[kw ]; + real mfcbc = (D.f[dP0P])[k ]; + real mfaba = (D.f[dM0M])[kbw]; + real mfcba = (D.f[dP0M])[kb ]; + real mfabc = (D.f[dM0P])[kw ]; + real mfbcc = (D.f[d0PP])[k ]; + real mfbaa = (D.f[d0MM])[kbs]; + real mfbca = (D.f[d0PM])[kb ]; + real mfbac = (D.f[d0MP])[ks ]; + real mfbbb = (D.f[d000])[k ]; + real mfccc = (D.f[dPPP])[k ]; + real mfaac = (D.f[dMMP])[ksw]; + real mfcac = (D.f[dPMP])[ks ]; + real mfacc = (D.f[dMPP])[kw ]; + real mfcca = (D.f[dPPM])[kb ]; + real mfaaa = (D.f[dMMM])[kbsw]; + real mfcaa = (D.f[dPMM])[kbs]; + real mfaca = (D.f[dMPM])[kbw]; //////////////////////////////////////////////////////////////////////////////////// real vvx =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + @@ -882,63 +882,63 @@ __global__ void LBCalc3rdMomentsCompSP27(real* CUMbbb, Distributions27 D; if (EvenOrOdd==true) { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; + D.f[dP00] = &DDStart[dP00 * numberOfLBnodes]; + D.f[dM00] = &DDStart[dM00 * numberOfLBnodes]; + D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes]; + D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes]; + D.f[d00P] = &DDStart[d00P * numberOfLBnodes]; + D.f[d00M] = &DDStart[d00M * numberOfLBnodes]; + D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes]; + D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes]; + D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes]; + D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes]; + D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes]; + D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes]; + D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes]; + D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes]; + D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes]; + D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes]; + D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes]; + D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes]; + D.f[d000] = &DDStart[d000 * numberOfLBnodes]; + D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes]; + D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes]; + D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes]; + D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes]; + D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes]; + D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes]; + D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes]; + D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes]; } else { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; + D.f[dM00] = &DDStart[dP00 * numberOfLBnodes]; + D.f[dP00] = &DDStart[dM00 * numberOfLBnodes]; + D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes]; + D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes]; + D.f[d00M] = &DDStart[d00P * numberOfLBnodes]; + D.f[d00P] = &DDStart[d00M * numberOfLBnodes]; + D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes]; + D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes]; + D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes]; + D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes]; + D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes]; + D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes]; + D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes]; + D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes]; + D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes]; + D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes]; + D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes]; + D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes]; + D.f[d000] = &DDStart[d000 * numberOfLBnodes]; + D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes]; + D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes]; + D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes]; + D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes]; + D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes]; + D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes]; + D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes]; + D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes]; } //////////////////////////////////////////////////////////////////////////////// @@ -951,33 +951,33 @@ __global__ void LBCalc3rdMomentsCompSP27(real* CUMbbb, unsigned int kbs = neighborZ[ks]; unsigned int kbsw = neighborZ[ksw]; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k ]; - real mfabb = (D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k ]; - real mfbab = (D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k ]; - real mfbba = (D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k ]; - real mfaab = (D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks ]; - real mfacb = (D.f[DIR_MP0])[kw ]; - real mfcbc = (D.f[DIR_P0P])[k ]; - real mfaba = (D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb ]; - real mfabc = (D.f[DIR_M0P])[kw ]; - real mfbcc = (D.f[DIR_0PP])[k ]; - real mfbaa = (D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb ]; - real mfbac = (D.f[DIR_0MP])[ks ]; - real mfbbb = (D.f[DIR_000])[k ]; - real mfccc = (D.f[DIR_PPP])[k ]; - real mfaac = (D.f[DIR_MMP])[ksw]; - real mfcac = (D.f[DIR_PMP])[ks ]; - real mfacc = (D.f[DIR_MPP])[kw ]; - real mfcca = (D.f[DIR_PPM])[kb ]; - real mfaaa = (D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs]; - real mfaca = (D.f[DIR_MPM])[kbw]; + real mfcbb = (D.f[dP00])[k ]; + real mfabb = (D.f[dM00])[kw ]; + real mfbcb = (D.f[d0P0])[k ]; + real mfbab = (D.f[d0M0])[ks ]; + real mfbbc = (D.f[d00P])[k ]; + real mfbba = (D.f[d00M])[kb ]; + real mfccb = (D.f[dPP0])[k ]; + real mfaab = (D.f[dMM0])[ksw]; + real mfcab = (D.f[dPM0])[ks ]; + real mfacb = (D.f[dMP0])[kw ]; + real mfcbc = (D.f[dP0P])[k ]; + real mfaba = (D.f[dM0M])[kbw]; + real mfcba = (D.f[dP0M])[kb ]; + real mfabc = (D.f[dM0P])[kw ]; + real mfbcc = (D.f[d0PP])[k ]; + real mfbaa = (D.f[d0MM])[kbs]; + real mfbca = (D.f[d0PM])[kb ]; + real mfbac = (D.f[d0MP])[ks ]; + real mfbbb = (D.f[d000])[k ]; + real mfccc = (D.f[dPPP])[k ]; + real mfaac = (D.f[dMMP])[ksw]; + real mfcac = (D.f[dPMP])[ks ]; + real mfacc = (D.f[dMPP])[kw ]; + real mfcca = (D.f[dPPM])[kb ]; + real mfaaa = (D.f[dMMM])[kbsw]; + real mfcaa = (D.f[dPMM])[kbs]; + real mfaca = (D.f[dMPM])[kbw]; //////////////////////////////////////////////////////////////////////////////////// real drho = ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + @@ -1323,63 +1323,63 @@ __global__ void LBCalcHigherMomentsIncompSP27( real* CUMcbb, Distributions27 D; if (EvenOrOdd==true) { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; + D.f[dP00] = &DDStart[dP00 * numberOfLBnodes]; + D.f[dM00] = &DDStart[dM00 * numberOfLBnodes]; + D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes]; + D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes]; + D.f[d00P] = &DDStart[d00P * numberOfLBnodes]; + D.f[d00M] = &DDStart[d00M * numberOfLBnodes]; + D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes]; + D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes]; + D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes]; + D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes]; + D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes]; + D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes]; + D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes]; + D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes]; + D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes]; + D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes]; + D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes]; + D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes]; + D.f[d000] = &DDStart[d000 * numberOfLBnodes]; + D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes]; + D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes]; + D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes]; + D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes]; + D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes]; + D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes]; + D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes]; + D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes]; } else { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; + D.f[dM00] = &DDStart[dP00 * numberOfLBnodes]; + D.f[dP00] = &DDStart[dM00 * numberOfLBnodes]; + D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes]; + D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes]; + D.f[d00M] = &DDStart[d00P * numberOfLBnodes]; + D.f[d00P] = &DDStart[d00M * numberOfLBnodes]; + D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes]; + D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes]; + D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes]; + D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes]; + D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes]; + D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes]; + D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes]; + D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes]; + D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes]; + D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes]; + D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes]; + D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes]; + D.f[d000] = &DDStart[d000 * numberOfLBnodes]; + D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes]; + D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes]; + D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes]; + D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes]; + D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes]; + D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes]; + D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes]; + D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes]; } //////////////////////////////////////////////////////////////////////////////// @@ -1392,33 +1392,33 @@ __global__ void LBCalcHigherMomentsIncompSP27( real* CUMcbb, unsigned int kbs = neighborZ[ks]; unsigned int kbsw = neighborZ[ksw]; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k ]; - real mfabb = (D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k ]; - real mfbab = (D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k ]; - real mfbba = (D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k ]; - real mfaab = (D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks ]; - real mfacb = (D.f[DIR_MP0])[kw ]; - real mfcbc = (D.f[DIR_P0P])[k ]; - real mfaba = (D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb ]; - real mfabc = (D.f[DIR_M0P])[kw ]; - real mfbcc = (D.f[DIR_0PP])[k ]; - real mfbaa = (D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb ]; - real mfbac = (D.f[DIR_0MP])[ks ]; - real mfbbb = (D.f[DIR_000])[k ]; - real mfccc = (D.f[DIR_PPP])[k ]; - real mfaac = (D.f[DIR_MMP])[ksw]; - real mfcac = (D.f[DIR_PMP])[ks ]; - real mfacc = (D.f[DIR_MPP])[kw ]; - real mfcca = (D.f[DIR_PPM])[kb ]; - real mfaaa = (D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs]; - real mfaca = (D.f[DIR_MPM])[kbw]; + real mfcbb = (D.f[dP00])[k ]; + real mfabb = (D.f[dM00])[kw ]; + real mfbcb = (D.f[d0P0])[k ]; + real mfbab = (D.f[d0M0])[ks ]; + real mfbbc = (D.f[d00P])[k ]; + real mfbba = (D.f[d00M])[kb ]; + real mfccb = (D.f[dPP0])[k ]; + real mfaab = (D.f[dMM0])[ksw]; + real mfcab = (D.f[dPM0])[ks ]; + real mfacb = (D.f[dMP0])[kw ]; + real mfcbc = (D.f[dP0P])[k ]; + real mfaba = (D.f[dM0M])[kbw]; + real mfcba = (D.f[dP0M])[kb ]; + real mfabc = (D.f[dM0P])[kw ]; + real mfbcc = (D.f[d0PP])[k ]; + real mfbaa = (D.f[d0MM])[kbs]; + real mfbca = (D.f[d0PM])[kb ]; + real mfbac = (D.f[d0MP])[ks ]; + real mfbbb = (D.f[d000])[k ]; + real mfccc = (D.f[dPPP])[k ]; + real mfaac = (D.f[dMMP])[ksw]; + real mfcac = (D.f[dPMP])[ks ]; + real mfacc = (D.f[dMPP])[kw ]; + real mfcca = (D.f[dPPM])[kb ]; + real mfaaa = (D.f[dMMM])[kbsw]; + real mfcaa = (D.f[dPMM])[kbs]; + real mfaca = (D.f[dMPM])[kbw]; //////////////////////////////////////////////////////////////////////////////////// real vvx =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + @@ -1777,63 +1777,63 @@ __global__ void LBCalcHigherMomentsCompSP27( real* CUMcbb, Distributions27 D; if (EvenOrOdd==true) { - D.f[DIR_P00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * numberOfLBnodes]; + D.f[dP00] = &DDStart[dP00 * numberOfLBnodes]; + D.f[dM00] = &DDStart[dM00 * numberOfLBnodes]; + D.f[d0P0] = &DDStart[d0P0 * numberOfLBnodes]; + D.f[d0M0] = &DDStart[d0M0 * numberOfLBnodes]; + D.f[d00P] = &DDStart[d00P * numberOfLBnodes]; + D.f[d00M] = &DDStart[d00M * numberOfLBnodes]; + D.f[dPP0] = &DDStart[dPP0 * numberOfLBnodes]; + D.f[dMM0] = &DDStart[dMM0 * numberOfLBnodes]; + D.f[dPM0] = &DDStart[dPM0 * numberOfLBnodes]; + D.f[dMP0] = &DDStart[dMP0 * numberOfLBnodes]; + D.f[dP0P] = &DDStart[dP0P * numberOfLBnodes]; + D.f[dM0M] = &DDStart[dM0M * numberOfLBnodes]; + D.f[dP0M] = &DDStart[dP0M * numberOfLBnodes]; + D.f[dM0P] = &DDStart[dM0P * numberOfLBnodes]; + D.f[d0PP] = &DDStart[d0PP * numberOfLBnodes]; + D.f[d0MM] = &DDStart[d0MM * numberOfLBnodes]; + D.f[d0PM] = &DDStart[d0PM * numberOfLBnodes]; + D.f[d0MP] = &DDStart[d0MP * numberOfLBnodes]; + D.f[d000] = &DDStart[d000 * numberOfLBnodes]; + D.f[dPPP] = &DDStart[dPPP * numberOfLBnodes]; + D.f[dMMP] = &DDStart[dMMP * numberOfLBnodes]; + D.f[dPMP] = &DDStart[dPMP * numberOfLBnodes]; + D.f[dMPP] = &DDStart[dMPP * numberOfLBnodes]; + D.f[dPPM] = &DDStart[dPPM * numberOfLBnodes]; + D.f[dMMM] = &DDStart[dMMM * numberOfLBnodes]; + D.f[dPMM] = &DDStart[dPMM * numberOfLBnodes]; + D.f[dMPM] = &DDStart[dMPM * numberOfLBnodes]; } else { - D.f[DIR_M00] = &DDStart[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DDStart[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DDStart[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DDStart[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DDStart[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * numberOfLBnodes]; + D.f[dM00] = &DDStart[dP00 * numberOfLBnodes]; + D.f[dP00] = &DDStart[dM00 * numberOfLBnodes]; + D.f[d0M0] = &DDStart[d0P0 * numberOfLBnodes]; + D.f[d0P0] = &DDStart[d0M0 * numberOfLBnodes]; + D.f[d00M] = &DDStart[d00P * numberOfLBnodes]; + D.f[d00P] = &DDStart[d00M * numberOfLBnodes]; + D.f[dMM0] = &DDStart[dPP0 * numberOfLBnodes]; + D.f[dPP0] = &DDStart[dMM0 * numberOfLBnodes]; + D.f[dMP0] = &DDStart[dPM0 * numberOfLBnodes]; + D.f[dPM0] = &DDStart[dMP0 * numberOfLBnodes]; + D.f[dM0M] = &DDStart[dP0P * numberOfLBnodes]; + D.f[dP0P] = &DDStart[dM0M * numberOfLBnodes]; + D.f[dM0P] = &DDStart[dP0M * numberOfLBnodes]; + D.f[dP0M] = &DDStart[dM0P * numberOfLBnodes]; + D.f[d0MM] = &DDStart[d0PP * numberOfLBnodes]; + D.f[d0PP] = &DDStart[d0MM * numberOfLBnodes]; + D.f[d0MP] = &DDStart[d0PM * numberOfLBnodes]; + D.f[d0PM] = &DDStart[d0MP * numberOfLBnodes]; + D.f[d000] = &DDStart[d000 * numberOfLBnodes]; + D.f[dMMM] = &DDStart[dPPP * numberOfLBnodes]; + D.f[dPPM] = &DDStart[dMMP * numberOfLBnodes]; + D.f[dMPM] = &DDStart[dPMP * numberOfLBnodes]; + D.f[dPMM] = &DDStart[dMPP * numberOfLBnodes]; + D.f[dMMP] = &DDStart[dPPM * numberOfLBnodes]; + D.f[dPPP] = &DDStart[dMMM * numberOfLBnodes]; + D.f[dMPP] = &DDStart[dPMM * numberOfLBnodes]; + D.f[dPMP] = &DDStart[dMPM * numberOfLBnodes]; } //////////////////////////////////////////////////////////////////////////////// @@ -1846,33 +1846,33 @@ __global__ void LBCalcHigherMomentsCompSP27( real* CUMcbb, unsigned int kbs = neighborZ[ks]; unsigned int kbsw = neighborZ[ksw]; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k ]; - real mfabb = (D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k ]; - real mfbab = (D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k ]; - real mfbba = (D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k ]; - real mfaab = (D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks ]; - real mfacb = (D.f[DIR_MP0])[kw ]; - real mfcbc = (D.f[DIR_P0P])[k ]; - real mfaba = (D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb ]; - real mfabc = (D.f[DIR_M0P])[kw ]; - real mfbcc = (D.f[DIR_0PP])[k ]; - real mfbaa = (D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb ]; - real mfbac = (D.f[DIR_0MP])[ks ]; - real mfbbb = (D.f[DIR_000])[k ]; - real mfccc = (D.f[DIR_PPP])[k ]; - real mfaac = (D.f[DIR_MMP])[ksw]; - real mfcac = (D.f[DIR_PMP])[ks ]; - real mfacc = (D.f[DIR_MPP])[kw ]; - real mfcca = (D.f[DIR_PPM])[kb ]; - real mfaaa = (D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs]; - real mfaca = (D.f[DIR_MPM])[kbw]; + real mfcbb = (D.f[dP00])[k ]; + real mfabb = (D.f[dM00])[kw ]; + real mfbcb = (D.f[d0P0])[k ]; + real mfbab = (D.f[d0M0])[ks ]; + real mfbbc = (D.f[d00P])[k ]; + real mfbba = (D.f[d00M])[kb ]; + real mfccb = (D.f[dPP0])[k ]; + real mfaab = (D.f[dMM0])[ksw]; + real mfcab = (D.f[dPM0])[ks ]; + real mfacb = (D.f[dMP0])[kw ]; + real mfcbc = (D.f[dP0P])[k ]; + real mfaba = (D.f[dM0M])[kbw]; + real mfcba = (D.f[dP0M])[kb ]; + real mfabc = (D.f[dM0P])[kw ]; + real mfbcc = (D.f[d0PP])[k ]; + real mfbaa = (D.f[d0MM])[kbs]; + real mfbca = (D.f[d0PM])[kb ]; + real mfbac = (D.f[d0MP])[ks ]; + real mfbbb = (D.f[d000])[k ]; + real mfccc = (D.f[dPPP])[k ]; + real mfaac = (D.f[dMMP])[ksw]; + real mfcac = (D.f[dPMP])[ks ]; + real mfacc = (D.f[dMPP])[kw ]; + real mfcca = (D.f[dPPM])[kb ]; + real mfaaa = (D.f[dMMM])[kbsw]; + real mfcaa = (D.f[dPMM])[kbs]; + real mfaca = (D.f[dMPM])[kbw]; //////////////////////////////////////////////////////////////////////////////////// real drho = ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + @@ -2131,12 +2131,12 @@ __global__ void LBCalcHigherMomentsCompSP27( real* CUMcbb, real OxxPyyPzz = c1o1; real omega = c1o1 / (c3o1*0.001 + c1o2); - real DIR_00M = (c4o1 * omega * OxxPyyPzz * (c9o1 * omega - c16o1) - c4o1 * omega * omega - c2o1 * OxxPyyPzz * OxxPyyPzz * (c2o1 + c9o1 * omega * (omega - c2o1))) / + real d00M = (c4o1 * omega * OxxPyyPzz * (c9o1 * omega - c16o1) - c4o1 * omega * omega - c2o1 * OxxPyyPzz * OxxPyyPzz * (c2o1 + c9o1 * omega * (omega - c2o1))) / (c3o1 * (omega - OxxPyyPzz) * (OxxPyyPzz * (c2o1 + c3o1 * omega) - c8o1 * omega)); - CUMbcc[k] = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)*(c1o1 + rho*c6o1*DIR_00M / (c2o1 + c3o1 * DIR_00M))) / rho; - CUMcbc[k] = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)*(c1o1 + rho*c6o1*DIR_00M / (c2o1 + c3o1 * DIR_00M))) / rho; - CUMccb[k] = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)*(c1o1 + rho*c6o1*DIR_00M / (c2o1 + c3o1 * DIR_00M))) / rho; + CUMbcc[k] = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)*(c1o1 + rho*c6o1*d00M / (c2o1 + c3o1 * d00M))) / rho; + CUMcbc[k] = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)*(c1o1 + rho*c6o1*d00M / (c2o1 + c3o1 * d00M))) / rho; + CUMccb[k] = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)*(c1o1 + rho*c6o1*d00M / (c2o1 + c3o1 * d00M))) / rho; //////////////////////////////////////////////////////////////////////////////////// // Cumulants diff --git a/src/gpu/VirtualFluids_GPU/GPU/CalcConc27.cu b/src/gpu/core/GPU/CalcConc27.cu similarity index 53% rename from src/gpu/VirtualFluids_GPU/GPU/CalcConc27.cu rename to src/gpu/core/GPU/CalcConc27.cu index 0986a42b07351456f684ae5141d38245e5e17c57..724db55d580b69fba96c813fe843e05f3e575593 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/CalcConc27.cu +++ b/src/gpu/core/GPU/CalcConc27.cu @@ -76,63 +76,63 @@ __global__ void CalcConc27( Distributions27 distAD; if (isEvenTimestep) { - distAD.f[DIR_P00] = &distributionsAD[DIR_P00 * numberOfLBnodes]; - distAD.f[DIR_M00] = &distributionsAD[DIR_M00 * numberOfLBnodes]; - distAD.f[DIR_0P0] = &distributionsAD[DIR_0P0 * numberOfLBnodes]; - distAD.f[DIR_0M0] = &distributionsAD[DIR_0M0 * numberOfLBnodes]; - distAD.f[DIR_00P] = &distributionsAD[DIR_00P * numberOfLBnodes]; - distAD.f[DIR_00M] = &distributionsAD[DIR_00M * numberOfLBnodes]; - distAD.f[DIR_PP0] = &distributionsAD[DIR_PP0 * numberOfLBnodes]; - distAD.f[DIR_MM0] = &distributionsAD[DIR_MM0 * numberOfLBnodes]; - distAD.f[DIR_PM0] = &distributionsAD[DIR_PM0 * numberOfLBnodes]; - distAD.f[DIR_MP0] = &distributionsAD[DIR_MP0 * numberOfLBnodes]; - distAD.f[DIR_P0P] = &distributionsAD[DIR_P0P * numberOfLBnodes]; - distAD.f[DIR_M0M] = &distributionsAD[DIR_M0M * numberOfLBnodes]; - distAD.f[DIR_P0M] = &distributionsAD[DIR_P0M * numberOfLBnodes]; - distAD.f[DIR_M0P] = &distributionsAD[DIR_M0P * numberOfLBnodes]; - distAD.f[DIR_0PP] = &distributionsAD[DIR_0PP * numberOfLBnodes]; - distAD.f[DIR_0MM] = &distributionsAD[DIR_0MM * numberOfLBnodes]; - distAD.f[DIR_0PM] = &distributionsAD[DIR_0PM * numberOfLBnodes]; - distAD.f[DIR_0MP] = &distributionsAD[DIR_0MP * numberOfLBnodes]; - distAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes]; - distAD.f[DIR_PPP] = &distributionsAD[DIR_PPP * numberOfLBnodes]; - distAD.f[DIR_MMP] = &distributionsAD[DIR_MMP * numberOfLBnodes]; - distAD.f[DIR_PMP] = &distributionsAD[DIR_PMP * numberOfLBnodes]; - distAD.f[DIR_MPP] = &distributionsAD[DIR_MPP * numberOfLBnodes]; - distAD.f[DIR_PPM] = &distributionsAD[DIR_PPM * numberOfLBnodes]; - distAD.f[DIR_MMM] = &distributionsAD[DIR_MMM * numberOfLBnodes]; - distAD.f[DIR_PMM] = &distributionsAD[DIR_PMM * numberOfLBnodes]; - distAD.f[DIR_MPM] = &distributionsAD[DIR_MPM * numberOfLBnodes]; + distAD.f[dP00] = &distributionsAD[dP00 * numberOfLBnodes]; + distAD.f[dM00] = &distributionsAD[dM00 * numberOfLBnodes]; + distAD.f[d0P0] = &distributionsAD[d0P0 * numberOfLBnodes]; + distAD.f[d0M0] = &distributionsAD[d0M0 * numberOfLBnodes]; + distAD.f[d00P] = &distributionsAD[d00P * numberOfLBnodes]; + distAD.f[d00M] = &distributionsAD[d00M * numberOfLBnodes]; + distAD.f[dPP0] = &distributionsAD[dPP0 * numberOfLBnodes]; + distAD.f[dMM0] = &distributionsAD[dMM0 * numberOfLBnodes]; + distAD.f[dPM0] = &distributionsAD[dPM0 * numberOfLBnodes]; + distAD.f[dMP0] = &distributionsAD[dMP0 * numberOfLBnodes]; + distAD.f[dP0P] = &distributionsAD[dP0P * numberOfLBnodes]; + distAD.f[dM0M] = &distributionsAD[dM0M * numberOfLBnodes]; + distAD.f[dP0M] = &distributionsAD[dP0M * numberOfLBnodes]; + distAD.f[dM0P] = &distributionsAD[dM0P * numberOfLBnodes]; + distAD.f[d0PP] = &distributionsAD[d0PP * numberOfLBnodes]; + distAD.f[d0MM] = &distributionsAD[d0MM * numberOfLBnodes]; + distAD.f[d0PM] = &distributionsAD[d0PM * numberOfLBnodes]; + distAD.f[d0MP] = &distributionsAD[d0MP * numberOfLBnodes]; + distAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes]; + distAD.f[dPPP] = &distributionsAD[dPPP * numberOfLBnodes]; + distAD.f[dMMP] = &distributionsAD[dMMP * numberOfLBnodes]; + distAD.f[dPMP] = &distributionsAD[dPMP * numberOfLBnodes]; + distAD.f[dMPP] = &distributionsAD[dMPP * numberOfLBnodes]; + distAD.f[dPPM] = &distributionsAD[dPPM * numberOfLBnodes]; + distAD.f[dMMM] = &distributionsAD[dMMM * numberOfLBnodes]; + distAD.f[dPMM] = &distributionsAD[dPMM * numberOfLBnodes]; + distAD.f[dMPM] = &distributionsAD[dMPM * numberOfLBnodes]; } else { - distAD.f[DIR_M00] = &distributionsAD[DIR_P00 * numberOfLBnodes]; - distAD.f[DIR_P00] = &distributionsAD[DIR_M00 * numberOfLBnodes]; - distAD.f[DIR_0M0] = &distributionsAD[DIR_0P0 * numberOfLBnodes]; - distAD.f[DIR_0P0] = &distributionsAD[DIR_0M0 * numberOfLBnodes]; - distAD.f[DIR_00M] = &distributionsAD[DIR_00P * numberOfLBnodes]; - distAD.f[DIR_00P] = &distributionsAD[DIR_00M * numberOfLBnodes]; - distAD.f[DIR_MM0] = &distributionsAD[DIR_PP0 * numberOfLBnodes]; - distAD.f[DIR_PP0] = &distributionsAD[DIR_MM0 * numberOfLBnodes]; - distAD.f[DIR_MP0] = &distributionsAD[DIR_PM0 * numberOfLBnodes]; - distAD.f[DIR_PM0] = &distributionsAD[DIR_MP0 * numberOfLBnodes]; - distAD.f[DIR_M0M] = &distributionsAD[DIR_P0P * numberOfLBnodes]; - distAD.f[DIR_P0P] = &distributionsAD[DIR_M0M * numberOfLBnodes]; - distAD.f[DIR_M0P] = &distributionsAD[DIR_P0M * numberOfLBnodes]; - distAD.f[DIR_P0M] = &distributionsAD[DIR_M0P * numberOfLBnodes]; - distAD.f[DIR_0MM] = &distributionsAD[DIR_0PP * numberOfLBnodes]; - distAD.f[DIR_0PP] = &distributionsAD[DIR_0MM * numberOfLBnodes]; - distAD.f[DIR_0MP] = &distributionsAD[DIR_0PM * numberOfLBnodes]; - distAD.f[DIR_0PM] = &distributionsAD[DIR_0MP * numberOfLBnodes]; - distAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes]; - distAD.f[DIR_PPP] = &distributionsAD[DIR_MMM * numberOfLBnodes]; - distAD.f[DIR_MMP] = &distributionsAD[DIR_PPM * numberOfLBnodes]; - distAD.f[DIR_PMP] = &distributionsAD[DIR_MPM * numberOfLBnodes]; - distAD.f[DIR_MPP] = &distributionsAD[DIR_PMM * numberOfLBnodes]; - distAD.f[DIR_PPM] = &distributionsAD[DIR_MMP * numberOfLBnodes]; - distAD.f[DIR_MMM] = &distributionsAD[DIR_PPP * numberOfLBnodes]; - distAD.f[DIR_PMM] = &distributionsAD[DIR_MPP * numberOfLBnodes]; - distAD.f[DIR_MPM] = &distributionsAD[DIR_PMP * numberOfLBnodes]; + distAD.f[dM00] = &distributionsAD[dP00 * numberOfLBnodes]; + distAD.f[dP00] = &distributionsAD[dM00 * numberOfLBnodes]; + distAD.f[d0M0] = &distributionsAD[d0P0 * numberOfLBnodes]; + distAD.f[d0P0] = &distributionsAD[d0M0 * numberOfLBnodes]; + distAD.f[d00M] = &distributionsAD[d00P * numberOfLBnodes]; + distAD.f[d00P] = &distributionsAD[d00M * numberOfLBnodes]; + distAD.f[dMM0] = &distributionsAD[dPP0 * numberOfLBnodes]; + distAD.f[dPP0] = &distributionsAD[dMM0 * numberOfLBnodes]; + distAD.f[dMP0] = &distributionsAD[dPM0 * numberOfLBnodes]; + distAD.f[dPM0] = &distributionsAD[dMP0 * numberOfLBnodes]; + distAD.f[dM0M] = &distributionsAD[dP0P * numberOfLBnodes]; + distAD.f[dP0P] = &distributionsAD[dM0M * numberOfLBnodes]; + distAD.f[dM0P] = &distributionsAD[dP0M * numberOfLBnodes]; + distAD.f[dP0M] = &distributionsAD[dM0P * numberOfLBnodes]; + distAD.f[d0MM] = &distributionsAD[d0PP * numberOfLBnodes]; + distAD.f[d0PP] = &distributionsAD[d0MM * numberOfLBnodes]; + distAD.f[d0MP] = &distributionsAD[d0PM * numberOfLBnodes]; + distAD.f[d0PM] = &distributionsAD[d0MP * numberOfLBnodes]; + distAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes]; + distAD.f[dPPP] = &distributionsAD[dMMM * numberOfLBnodes]; + distAD.f[dMMP] = &distributionsAD[dPPM * numberOfLBnodes]; + distAD.f[dPMP] = &distributionsAD[dMPM * numberOfLBnodes]; + distAD.f[dMPP] = &distributionsAD[dPMM * numberOfLBnodes]; + distAD.f[dPPM] = &distributionsAD[dMMP * numberOfLBnodes]; + distAD.f[dMMM] = &distributionsAD[dPPP * numberOfLBnodes]; + distAD.f[dPMM] = &distributionsAD[dMPP * numberOfLBnodes]; + distAD.f[dMPM] = &distributionsAD[dPMP * numberOfLBnodes]; } //////////////////////////////////////////////////////////////////////////////// //! - Set neighbor indices (necessary for indirect addressing) @@ -166,33 +166,33 @@ __global__ void CalcConc27( //////////////////////////////////////////////////////////////////////////////// //! - Set local distributions //! - real mfcbb = (distAD.f[DIR_P00])[ke ]; - real mfabb = (distAD.f[DIR_M00])[kw ]; - real mfbcb = (distAD.f[DIR_0P0])[kn ]; - real mfbab = (distAD.f[DIR_0M0])[ks ]; - real mfbbc = (distAD.f[DIR_00P])[kt ]; - real mfbba = (distAD.f[DIR_00M])[kb ]; - real mfccb = (distAD.f[DIR_PP0])[kne ]; - real mfaab = (distAD.f[DIR_MM0])[ksw ]; - real mfcab = (distAD.f[DIR_PM0])[kse ]; - real mfacb = (distAD.f[DIR_MP0])[knw ]; - real mfcbc = (distAD.f[DIR_P0P])[kte ]; - real mfaba = (distAD.f[DIR_M0M])[kbw ]; - real mfcba = (distAD.f[DIR_P0M])[kbe ]; - real mfabc = (distAD.f[DIR_M0P])[ktw ]; - real mfbcc = (distAD.f[DIR_0PP])[ktn ]; - real mfbaa = (distAD.f[DIR_0MM])[kbs ]; - real mfbca = (distAD.f[DIR_0PM])[kbn ]; - real mfbac = (distAD.f[DIR_0MP])[kts ]; - real mfbbb = (distAD.f[DIR_000])[k ]; - real mfccc = (distAD.f[DIR_PPP])[ktne]; - real mfaac = (distAD.f[DIR_MMP])[ktsw]; - real mfcac = (distAD.f[DIR_PMP])[ktse]; - real mfacc = (distAD.f[DIR_MPP])[ktnw]; - real mfcca = (distAD.f[DIR_PPM])[kbne]; - real mfaaa = (distAD.f[DIR_MMM])[kbsw]; - real mfcaa = (distAD.f[DIR_PMM])[kbse]; - real mfaca = (distAD.f[DIR_MPM])[kbnw]; + real mfcbb = (distAD.f[dP00])[ke ]; + real mfabb = (distAD.f[dM00])[kw ]; + real mfbcb = (distAD.f[d0P0])[kn ]; + real mfbab = (distAD.f[d0M0])[ks ]; + real mfbbc = (distAD.f[d00P])[kt ]; + real mfbba = (distAD.f[d00M])[kb ]; + real mfccb = (distAD.f[dPP0])[kne ]; + real mfaab = (distAD.f[dMM0])[ksw ]; + real mfcab = (distAD.f[dPM0])[kse ]; + real mfacb = (distAD.f[dMP0])[knw ]; + real mfcbc = (distAD.f[dP0P])[kte ]; + real mfaba = (distAD.f[dM0M])[kbw ]; + real mfcba = (distAD.f[dP0M])[kbe ]; + real mfabc = (distAD.f[dM0P])[ktw ]; + real mfbcc = (distAD.f[d0PP])[ktn ]; + real mfbaa = (distAD.f[d0MM])[kbs ]; + real mfbca = (distAD.f[d0PM])[kbn ]; + real mfbac = (distAD.f[d0MP])[kts ]; + real mfbbb = (distAD.f[d000])[k ]; + real mfccc = (distAD.f[dPPP])[ktne]; + real mfaac = (distAD.f[dMMP])[ktsw]; + real mfcac = (distAD.f[dPMP])[ktse]; + real mfacc = (distAD.f[dMPP])[ktnw]; + real mfcca = (distAD.f[dPPM])[kbne]; + real mfaaa = (distAD.f[dMMM])[kbsw]; + real mfcaa = (distAD.f[dPMM])[kbse]; + real mfaca = (distAD.f[dMPM])[kbnw]; ////////////////////////////////////////////////////////////////////////// //! - Calculate concentration using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> @@ -327,63 +327,63 @@ __global__ void CalcConc7( real* Conc, // Distributions27 D27; // if (isEvenTimestep==true) // { -// D27.f[DIR_P00] = &DD27[DIR_P00 * size_Mat]; -// D27.f[DIR_M00] = &DD27[DIR_M00 * size_Mat]; -// D27.f[DIR_0P0] = &DD27[DIR_0P0 * size_Mat]; -// D27.f[DIR_0M0] = &DD27[DIR_0M0 * size_Mat]; -// D27.f[DIR_00P] = &DD27[DIR_00P * size_Mat]; -// D27.f[DIR_00M] = &DD27[DIR_00M * size_Mat]; -// D27.f[DIR_PP0] = &DD27[DIR_PP0 * size_Mat]; -// D27.f[DIR_MM0] = &DD27[DIR_MM0 * size_Mat]; -// D27.f[DIR_PM0] = &DD27[DIR_PM0 * size_Mat]; -// D27.f[DIR_MP0] = &DD27[DIR_MP0 * size_Mat]; -// D27.f[DIR_P0P] = &DD27[DIR_P0P * size_Mat]; -// D27.f[DIR_M0M] = &DD27[DIR_M0M * size_Mat]; -// D27.f[DIR_P0M] = &DD27[DIR_P0M * size_Mat]; -// D27.f[DIR_M0P] = &DD27[DIR_M0P * size_Mat]; -// D27.f[DIR_0PP] = &DD27[DIR_0PP * size_Mat]; -// D27.f[DIR_0MM] = &DD27[DIR_0MM * size_Mat]; -// D27.f[DIR_0PM] = &DD27[DIR_0PM * size_Mat]; -// D27.f[DIR_0MP] = &DD27[DIR_0MP * size_Mat]; -// D27.f[DIR_000] = &DD27[DIR_000 * size_Mat]; -// D27.f[DIR_PPP] = &DD27[DIR_PPP * size_Mat]; -// D27.f[DIR_MMP] = &DD27[DIR_MMP * size_Mat]; -// D27.f[DIR_PMP] = &DD27[DIR_PMP * size_Mat]; -// D27.f[DIR_MPP] = &DD27[DIR_MPP * size_Mat]; -// D27.f[DIR_PPM] = &DD27[DIR_PPM * size_Mat]; -// D27.f[DIR_MMM] = &DD27[DIR_MMM * size_Mat]; -// D27.f[DIR_PMM] = &DD27[DIR_PMM * size_Mat]; -// D27.f[DIR_MPM] = &DD27[DIR_MPM * size_Mat]; +// D27.f[dP00] = &DD27[dP00 * size_Mat]; +// D27.f[dM00] = &DD27[dM00 * size_Mat]; +// D27.f[d0P0] = &DD27[d0P0 * size_Mat]; +// D27.f[d0M0] = &DD27[d0M0 * size_Mat]; +// D27.f[d00P] = &DD27[d00P * size_Mat]; +// D27.f[d00M] = &DD27[d00M * size_Mat]; +// D27.f[dPP0] = &DD27[dPP0 * size_Mat]; +// D27.f[dMM0] = &DD27[dMM0 * size_Mat]; +// D27.f[dPM0] = &DD27[dPM0 * size_Mat]; +// D27.f[dMP0] = &DD27[dMP0 * size_Mat]; +// D27.f[dP0P] = &DD27[dP0P * size_Mat]; +// D27.f[dM0M] = &DD27[dM0M * size_Mat]; +// D27.f[dP0M] = &DD27[dP0M * size_Mat]; +// D27.f[dM0P] = &DD27[dM0P * size_Mat]; +// D27.f[d0PP] = &DD27[d0PP * size_Mat]; +// D27.f[d0MM] = &DD27[d0MM * size_Mat]; +// D27.f[d0PM] = &DD27[d0PM * size_Mat]; +// D27.f[d0MP] = &DD27[d0MP * size_Mat]; +// D27.f[d000] = &DD27[d000 * size_Mat]; +// D27.f[dPPP] = &DD27[dPPP * size_Mat]; +// D27.f[dMMP] = &DD27[dMMP * size_Mat]; +// D27.f[dPMP] = &DD27[dPMP * size_Mat]; +// D27.f[dMPP] = &DD27[dMPP * size_Mat]; +// D27.f[dPPM] = &DD27[dPPM * size_Mat]; +// D27.f[dMMM] = &DD27[dMMM * size_Mat]; +// D27.f[dPMM] = &DD27[dPMM * size_Mat]; +// D27.f[dMPM] = &DD27[dMPM * size_Mat]; // } // else // { -// D27.f[DIR_M00] = &DD27[DIR_P00 * size_Mat]; -// D27.f[DIR_P00] = &DD27[DIR_M00 * size_Mat]; -// D27.f[DIR_0M0] = &DD27[DIR_0P0 * size_Mat]; -// D27.f[DIR_0P0] = &DD27[DIR_0M0 * size_Mat]; -// D27.f[DIR_00M] = &DD27[DIR_00P * size_Mat]; -// D27.f[DIR_00P] = &DD27[DIR_00M * size_Mat]; -// D27.f[DIR_MM0] = &DD27[DIR_PP0 * size_Mat]; -// D27.f[DIR_PP0] = &DD27[DIR_MM0 * size_Mat]; -// D27.f[DIR_MP0] = &DD27[DIR_PM0 * size_Mat]; -// D27.f[DIR_PM0] = &DD27[DIR_MP0 * size_Mat]; -// D27.f[DIR_M0M] = &DD27[DIR_P0P * size_Mat]; -// D27.f[DIR_P0P] = &DD27[DIR_M0M * size_Mat]; -// D27.f[DIR_M0P] = &DD27[DIR_P0M * size_Mat]; -// D27.f[DIR_P0M] = &DD27[DIR_M0P * size_Mat]; -// D27.f[DIR_0MM] = &DD27[DIR_0PP * size_Mat]; -// D27.f[DIR_0PP] = &DD27[DIR_0MM * size_Mat]; -// D27.f[DIR_0MP] = &DD27[DIR_0PM * size_Mat]; -// D27.f[DIR_0PM] = &DD27[DIR_0MP * size_Mat]; -// D27.f[DIR_000] = &DD27[DIR_000 * size_Mat]; -// D27.f[DIR_MMM] = &DD27[DIR_PPP * size_Mat]; -// D27.f[DIR_PPM] = &DD27[DIR_MMP * size_Mat]; -// D27.f[DIR_MPM] = &DD27[DIR_PMP * size_Mat]; -// D27.f[DIR_PMM] = &DD27[DIR_MPP * size_Mat]; -// D27.f[DIR_MMP] = &DD27[DIR_PPM * size_Mat]; -// D27.f[DIR_PPP] = &DD27[DIR_MMM * size_Mat]; -// D27.f[DIR_MPP] = &DD27[DIR_PMM * size_Mat]; -// D27.f[DIR_PMP] = &DD27[DIR_MPM * size_Mat]; +// D27.f[dM00] = &DD27[dP00 * size_Mat]; +// D27.f[dP00] = &DD27[dM00 * size_Mat]; +// D27.f[d0M0] = &DD27[d0P0 * size_Mat]; +// D27.f[d0P0] = &DD27[d0M0 * size_Mat]; +// D27.f[d00M] = &DD27[d00P * size_Mat]; +// D27.f[d00P] = &DD27[d00M * size_Mat]; +// D27.f[dMM0] = &DD27[dPP0 * size_Mat]; +// D27.f[dPP0] = &DD27[dMM0 * size_Mat]; +// D27.f[dMP0] = &DD27[dPM0 * size_Mat]; +// D27.f[dPM0] = &DD27[dMP0 * size_Mat]; +// D27.f[dM0M] = &DD27[dP0P * size_Mat]; +// D27.f[dP0P] = &DD27[dM0M * size_Mat]; +// D27.f[dM0P] = &DD27[dP0M * size_Mat]; +// D27.f[dP0M] = &DD27[dM0P * size_Mat]; +// D27.f[d0MM] = &DD27[d0PP * size_Mat]; +// D27.f[d0PP] = &DD27[d0MM * size_Mat]; +// D27.f[d0MP] = &DD27[d0PM * size_Mat]; +// D27.f[d0PM] = &DD27[d0MP * size_Mat]; +// D27.f[d000] = &DD27[d000 * size_Mat]; +// D27.f[dMMM] = &DD27[dPPP * size_Mat]; +// D27.f[dPPM] = &DD27[dMMP * size_Mat]; +// D27.f[dMPM] = &DD27[dPMP * size_Mat]; +// D27.f[dPMM] = &DD27[dMPP * size_Mat]; +// D27.f[dMMP] = &DD27[dPPM * size_Mat]; +// D27.f[dPPP] = &DD27[dMMM * size_Mat]; +// D27.f[dMPP] = &DD27[dPMM * size_Mat]; +// D27.f[dPMP] = &DD27[dMPM * size_Mat]; // } // //////////////////////////////////////////////////////////////////////////////// // const unsigned x = threadIdx.x; // Globaler x-Index @@ -432,20 +432,20 @@ __global__ void CalcConc7( real* Conc, // if(geoD[k] == GEO_FLUID) // { -// Conc[k] = (D27.f[DIR_P00])[ke ]+ (D27.f[DIR_M00])[kw ]+ -// (D27.f[DIR_0P0])[kn ]+ (D27.f[DIR_0M0])[ks ]+ -// (D27.f[DIR_00P])[kt ]+ (D27.f[DIR_00M])[kb ]+ -// (D27.f[DIR_PP0])[kne ]+ (D27.f[DIR_MM0])[ksw ]+ -// (D27.f[DIR_PM0])[kse ]+ (D27.f[DIR_MP0])[knw ]+ -// (D27.f[DIR_P0P])[kte ]+ (D27.f[DIR_M0M])[kbw ]+ -// (D27.f[DIR_P0M])[kbe ]+ (D27.f[DIR_M0P])[ktw ]+ -// (D27.f[DIR_0PP])[ktn ]+ (D27.f[DIR_0MM])[kbs ]+ -// (D27.f[DIR_0PM])[kbn ]+ (D27.f[DIR_0MP])[kts ]+ -// (D27.f[DIR_000])[kzero]+ -// (D27.f[DIR_PPP])[ktne]+ (D27.f[DIR_MMP])[ktsw]+ -// (D27.f[DIR_PMP])[ktse]+ (D27.f[DIR_MPP])[ktnw]+ -// (D27.f[DIR_PPM])[kbne]+ (D27.f[DIR_MMM])[kbsw]+ -// (D27.f[DIR_PMM])[kbse]+ (D27.f[DIR_MPM])[kbnw]; +// Conc[k] = (D27.f[dP00])[ke ]+ (D27.f[dM00])[kw ]+ +// (D27.f[d0P0])[kn ]+ (D27.f[d0M0])[ks ]+ +// (D27.f[d00P])[kt ]+ (D27.f[d00M])[kb ]+ +// (D27.f[dPP0])[kne ]+ (D27.f[dMM0])[ksw ]+ +// (D27.f[dPM0])[kse ]+ (D27.f[dMP0])[knw ]+ +// (D27.f[dP0P])[kte ]+ (D27.f[dM0M])[kbw ]+ +// (D27.f[dP0M])[kbe ]+ (D27.f[dM0P])[ktw ]+ +// (D27.f[d0PP])[ktn ]+ (D27.f[d0MM])[kbs ]+ +// (D27.f[d0PM])[kbn ]+ (D27.f[d0MP])[kts ]+ +// (D27.f[d000])[kzero]+ +// (D27.f[dPPP])[ktne]+ (D27.f[dMMP])[ktsw]+ +// (D27.f[dPMP])[ktse]+ (D27.f[dMPP])[ktnw]+ +// (D27.f[dPPM])[kbne]+ (D27.f[dMMM])[kbsw]+ +// (D27.f[dPMM])[kbse]+ (D27.f[dMPM])[kbnw]; // } // } // } @@ -588,63 +588,63 @@ __global__ void GetPlaneConc27(real* Conc, Distributions27 D27; if (isEvenTimestep==true) { - D27.f[DIR_P00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_M00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_PMP * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_MPM * numberOfLBnodes]; + 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[DIR_M00] = &DD27[DIR_P00 * numberOfLBnodes]; - D27.f[DIR_P00] = &DD27[DIR_M00 * numberOfLBnodes]; - D27.f[DIR_0M0] = &DD27[DIR_0P0 * numberOfLBnodes]; - D27.f[DIR_0P0] = &DD27[DIR_0M0 * numberOfLBnodes]; - D27.f[DIR_00M] = &DD27[DIR_00P * numberOfLBnodes]; - D27.f[DIR_00P] = &DD27[DIR_00M * numberOfLBnodes]; - D27.f[DIR_MM0] = &DD27[DIR_PP0 * numberOfLBnodes]; - D27.f[DIR_PP0] = &DD27[DIR_MM0 * numberOfLBnodes]; - D27.f[DIR_MP0] = &DD27[DIR_PM0 * numberOfLBnodes]; - D27.f[DIR_PM0] = &DD27[DIR_MP0 * numberOfLBnodes]; - D27.f[DIR_M0M] = &DD27[DIR_P0P * numberOfLBnodes]; - D27.f[DIR_P0P] = &DD27[DIR_M0M * numberOfLBnodes]; - D27.f[DIR_M0P] = &DD27[DIR_P0M * numberOfLBnodes]; - D27.f[DIR_P0M] = &DD27[DIR_M0P * numberOfLBnodes]; - D27.f[DIR_0MM] = &DD27[DIR_0PP * numberOfLBnodes]; - D27.f[DIR_0PP] = &DD27[DIR_0MM * numberOfLBnodes]; - D27.f[DIR_0MP] = &DD27[DIR_0PM * numberOfLBnodes]; - D27.f[DIR_0PM] = &DD27[DIR_0MP * numberOfLBnodes]; - D27.f[DIR_000] = &DD27[DIR_000 * numberOfLBnodes]; - D27.f[DIR_MMM] = &DD27[DIR_PPP * numberOfLBnodes]; - D27.f[DIR_PPM] = &DD27[DIR_MMP * numberOfLBnodes]; - D27.f[DIR_MPM] = &DD27[DIR_PMP * numberOfLBnodes]; - D27.f[DIR_PMM] = &DD27[DIR_MPP * numberOfLBnodes]; - D27.f[DIR_MMP] = &DD27[DIR_PPM * numberOfLBnodes]; - D27.f[DIR_PPP] = &DD27[DIR_MMM * numberOfLBnodes]; - D27.f[DIR_MPP] = &DD27[DIR_PMM * numberOfLBnodes]; - D27.f[DIR_PMP] = &DD27[DIR_MPM * numberOfLBnodes]; + 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[dMMM] = &DD27[dPPP * numberOfLBnodes]; + D27.f[dPPM] = &DD27[dMMP * numberOfLBnodes]; + D27.f[dMPM] = &DD27[dPMP * numberOfLBnodes]; + D27.f[dPMM] = &DD27[dMPP * numberOfLBnodes]; + D27.f[dMMP] = &DD27[dPPM * numberOfLBnodes]; + D27.f[dPPP] = &DD27[dMMM * numberOfLBnodes]; + D27.f[dMPP] = &DD27[dPMM * numberOfLBnodes]; + D27.f[dPMP] = &DD27[dMPM * numberOfLBnodes]; } //////////////////////////////////////////////////////////////////////////////// const unsigned x = threadIdx.x; // Globaler x-Index @@ -693,20 +693,20 @@ __global__ void GetPlaneConc27(real* Conc, if(geoD[k] == GEO_FLUID) { - Conc[k] = (D27.f[DIR_P00])[ke ]+ (D27.f[DIR_M00])[kw ]+ - (D27.f[DIR_0P0])[kn ]+ (D27.f[DIR_0M0])[ks ]+ - (D27.f[DIR_00P])[kt ]+ (D27.f[DIR_00M])[kb ]+ - (D27.f[DIR_PP0])[kne ]+ (D27.f[DIR_MM0])[ksw ]+ - (D27.f[DIR_PM0])[kse ]+ (D27.f[DIR_MP0])[knw ]+ - (D27.f[DIR_P0P])[kte ]+ (D27.f[DIR_M0M])[kbw ]+ - (D27.f[DIR_P0M])[kbe ]+ (D27.f[DIR_M0P])[ktw ]+ - (D27.f[DIR_0PP])[ktn ]+ (D27.f[DIR_0MM])[kbs ]+ - (D27.f[DIR_0PM])[kbn ]+ (D27.f[DIR_0MP])[kts ]+ - (D27.f[DIR_000])[kzero]+ - (D27.f[DIR_PPP])[ktne]+ (D27.f[DIR_MMP])[ktsw]+ - (D27.f[DIR_PMP])[ktse]+ (D27.f[DIR_MPP])[ktnw]+ - (D27.f[DIR_PPM])[kbne]+ (D27.f[DIR_MMM])[kbsw]+ - (D27.f[DIR_PMM])[kbse]+ (D27.f[DIR_MPM])[kbnw]; + Conc[k] = (D27.f[dP00])[ke ]+ (D27.f[dM00])[kw ]+ + (D27.f[d0P0])[kn ]+ (D27.f[d0M0])[ks ]+ + (D27.f[d00P])[kt ]+ (D27.f[d00M])[kb ]+ + (D27.f[dPP0])[kne ]+ (D27.f[dMM0])[ksw ]+ + (D27.f[dPM0])[kse ]+ (D27.f[dMP0])[knw ]+ + (D27.f[dP0P])[kte ]+ (D27.f[dM0M])[kbw ]+ + (D27.f[dP0M])[kbe ]+ (D27.f[dM0P])[ktw ]+ + (D27.f[d0PP])[ktn ]+ (D27.f[d0MM])[kbs ]+ + (D27.f[d0PM])[kbn ]+ (D27.f[d0MP])[kts ]+ + (D27.f[d000])[kzero]+ + (D27.f[dPPP])[ktne]+ (D27.f[dMMP])[ktsw]+ + (D27.f[dPMP])[ktse]+ (D27.f[dMPP])[ktnw]+ + (D27.f[dPPM])[kbne]+ (D27.f[dMMM])[kbsw]+ + (D27.f[dPMM])[kbse]+ (D27.f[dMPM])[kbnw]; } } } \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/GPU/CalcMac27.cu b/src/gpu/core/GPU/CalcMac27.cu similarity index 62% rename from src/gpu/VirtualFluids_GPU/GPU/CalcMac27.cu rename to src/gpu/core/GPU/CalcMac27.cu index 8907e846757c8923c3aed46f9c90d6c67f465eee..02886b4420bf23c8136f4356b438ed62dacd1448 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/CalcMac27.cu +++ b/src/gpu/core/GPU/CalcMac27.cu @@ -30,12 +30,14 @@ //! \ingroup GPU //! \author Martin Schoenherr, Soeren Peters //====================================================================================== -#include "LBM/LB.h" +#include "LBM/LB.h" + +#include "LBM/GPUHelperFunctions/KernelUtilities.h" + #include "lbm/constants/D3Q27.h" #include "basics/constants/NumericConstants.h" #include "lbm/MacroscopicQuantities.h" -#include "Kernel/Utilities/DistributionHelper.cuh" using namespace vf::basics::constant; using namespace vf::lbm::dir; @@ -79,13 +81,17 @@ __global__ void LBCalcMac27( vyD[k] = c0o1; vzD[k] = c0o1; - DistributionWrapper distr_wrapper(distributions, numberOfLBnodes, isEvenTimestep, k, neighborX, neighborY, neighborZ); - const auto& distribution = distr_wrapper.distribution; + Distributions27 dist; + vf::gpu::getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); + vf::gpu::ListIndices listIndices(k, neighborX, neighborY, neighborZ); + + real distribution[27]; + vf::gpu::getPreCollisionDistribution(distribution, dist, listIndices); - rhoD[k] = vf::lbm::getDensity(distribution.f); - vxD[k] = vf::lbm::getIncompressibleVelocityX1(distribution.f); - vyD[k] = vf::lbm::getIncompressibleVelocityX2(distribution.f); - vzD[k] = vf::lbm::getIncompressibleVelocityX3(distribution.f); + rhoD[k] = vf::lbm::getDensity(distribution); + vxD[k] = vf::lbm::getIncompressibleVelocityX1(distribution); + vyD[k] = vf::lbm::getIncompressibleVelocityX2(distribution); + vzD[k] = vf::lbm::getIncompressibleVelocityX3(distribution); } @@ -163,70 +169,70 @@ __global__ void LBCalcMacSP27( if(geoD[nodeIndex] == GEO_FLUID) { rhoD[nodeIndex] = - (dist.f[DIR_P00])[ke ]+ (dist.f[DIR_M00])[kw ]+ - (dist.f[DIR_0P0])[kn ]+ (dist.f[DIR_0M0])[ks ]+ - (dist.f[DIR_00P])[kt ]+ (dist.f[DIR_00M])[kb ]+ - (dist.f[DIR_PP0])[kne ]+ (dist.f[DIR_MM0])[ksw ]+ - (dist.f[DIR_PM0])[kse ]+ (dist.f[DIR_MP0])[knw ]+ - (dist.f[DIR_P0P])[kte ]+ (dist.f[DIR_M0M])[kbw ]+ - (dist.f[DIR_P0M])[kbe ]+ (dist.f[DIR_M0P])[ktw ]+ - (dist.f[DIR_0PP])[ktn ]+ (dist.f[DIR_0MM])[kbs ]+ - (dist.f[DIR_0PM])[kbn ]+ (dist.f[DIR_0MP])[kts ]+ - (dist.f[DIR_000])[kzero]+ - (dist.f[DIR_PPP])[ktne]+ (dist.f[DIR_MMP])[ktsw]+ - (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]+ - (dist.f[DIR_PPM])[kbne]+ (dist.f[DIR_MMM])[kbsw]+ - (dist.f[DIR_PMM])[kbse]+ (dist.f[DIR_MPM])[kbnw]; + (dist.f[dP00])[ke ]+ (dist.f[dM00])[kw ]+ + (dist.f[d0P0])[kn ]+ (dist.f[d0M0])[ks ]+ + (dist.f[d00P])[kt ]+ (dist.f[d00M])[kb ]+ + (dist.f[dPP0])[kne ]+ (dist.f[dMM0])[ksw ]+ + (dist.f[dPM0])[kse ]+ (dist.f[dMP0])[knw ]+ + (dist.f[dP0P])[kte ]+ (dist.f[dM0M])[kbw ]+ + (dist.f[dP0M])[kbe ]+ (dist.f[dM0P])[ktw ]+ + (dist.f[d0PP])[ktn ]+ (dist.f[d0MM])[kbs ]+ + (dist.f[d0PM])[kbn ]+ (dist.f[d0MP])[kts ]+ + (dist.f[d000])[kzero]+ + (dist.f[dPPP])[ktne]+ (dist.f[dMMP])[ktsw]+ + (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]+ + (dist.f[dPPM])[kbne]+ (dist.f[dMMM])[kbsw]+ + (dist.f[dPMM])[kbse]+ (dist.f[dMPM])[kbnw]; vxD[nodeIndex] = - (dist.f[DIR_P00])[ke ]- (dist.f[DIR_M00])[kw ]+ - (dist.f[DIR_PP0])[kne ]- (dist.f[DIR_MM0])[ksw ]+ - (dist.f[DIR_PM0])[kse ]- (dist.f[DIR_MP0])[knw ]+ - (dist.f[DIR_P0P])[kte ]- (dist.f[DIR_M0M])[kbw ]+ - (dist.f[DIR_P0M])[kbe ]- (dist.f[DIR_M0P])[ktw ]+ - (dist.f[DIR_PPP])[ktne]- (dist.f[DIR_MMP])[ktsw]+ - (dist.f[DIR_PMP])[ktse]- (dist.f[DIR_MPP])[ktnw]+ - (dist.f[DIR_PPM])[kbne]- (dist.f[DIR_MMM])[kbsw]+ - (dist.f[DIR_PMM])[kbse]- (dist.f[DIR_MPM])[kbnw]; + (dist.f[dP00])[ke ]- (dist.f[dM00])[kw ]+ + (dist.f[dPP0])[kne ]- (dist.f[dMM0])[ksw ]+ + (dist.f[dPM0])[kse ]- (dist.f[dMP0])[knw ]+ + (dist.f[dP0P])[kte ]- (dist.f[dM0M])[kbw ]+ + (dist.f[dP0M])[kbe ]- (dist.f[dM0P])[ktw ]+ + (dist.f[dPPP])[ktne]- (dist.f[dMMP])[ktsw]+ + (dist.f[dPMP])[ktse]- (dist.f[dMPP])[ktnw]+ + (dist.f[dPPM])[kbne]- (dist.f[dMMM])[kbsw]+ + (dist.f[dPMM])[kbse]- (dist.f[dMPM])[kbnw]; vyD[nodeIndex] = - (dist.f[DIR_0P0])[kn ]- (dist.f[DIR_0M0])[ks ]+ - (dist.f[DIR_PP0])[kne ]- (dist.f[DIR_MM0])[ksw ]- - (dist.f[DIR_PM0])[kse ]+ (dist.f[DIR_MP0])[knw ]+ - (dist.f[DIR_0PP])[ktn ]- (dist.f[DIR_0MM])[kbs ]+ - (dist.f[DIR_0PM])[kbn ]- (dist.f[DIR_0MP])[kts ]+ - (dist.f[DIR_PPP])[ktne]- (dist.f[DIR_MMP])[ktsw]- - (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]+ - (dist.f[DIR_PPM])[kbne]- (dist.f[DIR_MMM])[kbsw]- - (dist.f[DIR_PMM])[kbse]+ (dist.f[DIR_MPM])[kbnw]; + (dist.f[d0P0])[kn ]- (dist.f[d0M0])[ks ]+ + (dist.f[dPP0])[kne ]- (dist.f[dMM0])[ksw ]- + (dist.f[dPM0])[kse ]+ (dist.f[dMP0])[knw ]+ + (dist.f[d0PP])[ktn ]- (dist.f[d0MM])[kbs ]+ + (dist.f[d0PM])[kbn ]- (dist.f[d0MP])[kts ]+ + (dist.f[dPPP])[ktne]- (dist.f[dMMP])[ktsw]- + (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]+ + (dist.f[dPPM])[kbne]- (dist.f[dMMM])[kbsw]- + (dist.f[dPMM])[kbse]+ (dist.f[dMPM])[kbnw]; vzD[nodeIndex] = - (dist.f[DIR_00P])[kt ]- (dist.f[DIR_00M])[kb ]+ - (dist.f[DIR_P0P])[kte ]- (dist.f[DIR_M0M])[kbw ]- - (dist.f[DIR_P0M])[kbe ]+ (dist.f[DIR_M0P])[ktw ]+ - (dist.f[DIR_0PP])[ktn ]- (dist.f[DIR_0MM])[kbs ]- - (dist.f[DIR_0PM])[kbn ]+ (dist.f[DIR_0MP])[kts ]+ - (dist.f[DIR_PPP])[ktne]+ (dist.f[DIR_MMP])[ktsw]+ - (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]- - (dist.f[DIR_PPM])[kbne]- (dist.f[DIR_MMM])[kbsw]- - (dist.f[DIR_PMM])[kbse]- (dist.f[DIR_MPM])[kbnw]; + (dist.f[d00P])[kt ]- (dist.f[d00M])[kb ]+ + (dist.f[dP0P])[kte ]- (dist.f[dM0M])[kbw ]- + (dist.f[dP0M])[kbe ]+ (dist.f[dM0P])[ktw ]+ + (dist.f[d0PP])[ktn ]- (dist.f[d0MM])[kbs ]- + (dist.f[d0PM])[kbn ]+ (dist.f[d0MP])[kts ]+ + (dist.f[dPPP])[ktne]+ (dist.f[dMMP])[ktsw]+ + (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]- + (dist.f[dPPM])[kbne]- (dist.f[dMMM])[kbsw]- + (dist.f[dPMM])[kbse]- (dist.f[dMPM])[kbnw]; pressD[nodeIndex] = - ((dist.f[DIR_P00])[ke ]+ (dist.f[DIR_M00])[kw ]+ - (dist.f[DIR_0P0])[kn ]+ (dist.f[DIR_0M0])[ks ]+ - (dist.f[DIR_00P])[kt ]+ (dist.f[DIR_00M])[kb ]+ + ((dist.f[dP00])[ke ]+ (dist.f[dM00])[kw ]+ + (dist.f[d0P0])[kn ]+ (dist.f[d0M0])[ks ]+ + (dist.f[d00P])[kt ]+ (dist.f[d00M])[kb ]+ 2.f*( - (dist.f[DIR_PP0])[kne ]+ (dist.f[DIR_MM0])[ksw ]+ - (dist.f[DIR_PM0])[kse ]+ (dist.f[DIR_MP0])[knw ]+ - (dist.f[DIR_P0P])[kte ]+ (dist.f[DIR_M0M])[kbw ]+ - (dist.f[DIR_P0M])[kbe ]+ (dist.f[DIR_M0P])[ktw ]+ - (dist.f[DIR_0PP])[ktn ]+ (dist.f[DIR_0MM])[kbs ]+ - (dist.f[DIR_0PM])[kbn ]+ (dist.f[DIR_0MP])[kts ])+ + (dist.f[dPP0])[kne ]+ (dist.f[dMM0])[ksw ]+ + (dist.f[dPM0])[kse ]+ (dist.f[dMP0])[knw ]+ + (dist.f[dP0P])[kte ]+ (dist.f[dM0M])[kbw ]+ + (dist.f[dP0M])[kbe ]+ (dist.f[dM0P])[ktw ]+ + (dist.f[d0PP])[ktn ]+ (dist.f[d0MM])[kbs ]+ + (dist.f[d0PM])[kbn ]+ (dist.f[d0MP])[kts ])+ 3.f*( - (dist.f[DIR_PPP])[ktne]+ (dist.f[DIR_MMP])[ktsw]+ - (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]+ - (dist.f[DIR_PPM])[kbne]+ (dist.f[DIR_MMM])[kbsw]+ - (dist.f[DIR_PMM])[kbse]+ (dist.f[DIR_MPM])[kbnw])- + (dist.f[dPPP])[ktne]+ (dist.f[dMMP])[ktsw]+ + (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]+ + (dist.f[dPPM])[kbne]+ (dist.f[dMMM])[kbsw]+ + (dist.f[dPMM])[kbse]+ (dist.f[dMPM])[kbnw])- rhoD[nodeIndex]-(vxD[nodeIndex] * vxD[nodeIndex] + vyD[nodeIndex] * vyD[nodeIndex] + vzD[nodeIndex] * vzD[nodeIndex]) * (c1o1+c0o1*rhoD[nodeIndex])) * c1o2+rhoD[nodeIndex]; // times zero for incompressible case //achtung op hart gesetzt Annahme op = 1 ; ^^^^(1.0/op-0.5)=0.5 } @@ -297,14 +303,18 @@ __global__ void LBCalcMacCompSP27( if (!isValidFluidNode(geoD[nodeIndex])) return; - DistributionWrapper distr_wrapper(distributions, numberOfLBnodes, isEvenTimestep, nodeIndex, neighborX, neighborY, neighborZ); - const auto &distribution = distr_wrapper.distribution; + Distributions27 dist; + vf::gpu::getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); + vf::gpu::ListIndices listIndices(nodeIndex, neighborX, neighborY, neighborZ); + + real distribution[27]; + vf::gpu::getPreCollisionDistribution(distribution, dist, listIndices); - rhoD[nodeIndex] = vf::lbm::getDensity(distribution.f); - vxD[nodeIndex] = vf::lbm::getCompressibleVelocityX1(distribution.f, rhoD[nodeIndex]); - vyD[nodeIndex] = vf::lbm::getCompressibleVelocityX2(distribution.f, rhoD[nodeIndex]); - vzD[nodeIndex] = vf::lbm::getCompressibleVelocityX3(distribution.f, rhoD[nodeIndex]); - pressD[nodeIndex] = vf::lbm::getPressure(distribution.f, rhoD[nodeIndex], vxD[nodeIndex], vyD[nodeIndex], vzD[nodeIndex]); + rhoD[nodeIndex] = vf::lbm::getDensity(distribution); + vxD[nodeIndex] = vf::lbm::getCompressibleVelocityX1(distribution, rhoD[nodeIndex]); + vyD[nodeIndex] = vf::lbm::getCompressibleVelocityX2(distribution, rhoD[nodeIndex]); + vzD[nodeIndex] = vf::lbm::getCompressibleVelocityX3(distribution, rhoD[nodeIndex]); + pressD[nodeIndex] = vf::lbm::getPressure(distribution, rhoD[nodeIndex], vxD[nodeIndex], vyD[nodeIndex], vzD[nodeIndex]); } @@ -419,74 +429,74 @@ __global__ void LBCalcMedSP27( if(geoD[nodeIndex] == GEO_FLUID) { rhoD[nodeIndex] = - (dist.f[DIR_P00])[ke ]+ (dist.f[DIR_M00])[kw ]+ - (dist.f[DIR_0P0])[kn ]+ (dist.f[DIR_0M0])[ks ]+ - (dist.f[DIR_00P])[kt ]+ (dist.f[DIR_00M])[kb ]+ - (dist.f[DIR_PP0])[kne ]+ (dist.f[DIR_MM0])[ksw ]+ - (dist.f[DIR_PM0])[kse ]+ (dist.f[DIR_MP0])[knw ]+ - (dist.f[DIR_P0P])[kte ]+ (dist.f[DIR_M0M])[kbw ]+ - (dist.f[DIR_P0M])[kbe ]+ (dist.f[DIR_M0P])[ktw ]+ - (dist.f[DIR_0PP])[ktn ]+ (dist.f[DIR_0MM])[kbs ]+ - (dist.f[DIR_0PM])[kbn ]+ (dist.f[DIR_0MP])[kts ]+ - (dist.f[DIR_000])[kzero]+ - (dist.f[DIR_PPP])[ktne]+ (dist.f[DIR_MMP])[ktsw]+ - (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]+ - (dist.f[DIR_PPM])[kbne]+ (dist.f[DIR_MMM])[kbsw]+ - (dist.f[DIR_PMM])[kbse]+ (dist.f[DIR_MPM])[kbnw]+ + (dist.f[dP00])[ke ]+ (dist.f[dM00])[kw ]+ + (dist.f[d0P0])[kn ]+ (dist.f[d0M0])[ks ]+ + (dist.f[d00P])[kt ]+ (dist.f[d00M])[kb ]+ + (dist.f[dPP0])[kne ]+ (dist.f[dMM0])[ksw ]+ + (dist.f[dPM0])[kse ]+ (dist.f[dMP0])[knw ]+ + (dist.f[dP0P])[kte ]+ (dist.f[dM0M])[kbw ]+ + (dist.f[dP0M])[kbe ]+ (dist.f[dM0P])[ktw ]+ + (dist.f[d0PP])[ktn ]+ (dist.f[d0MM])[kbs ]+ + (dist.f[d0PM])[kbn ]+ (dist.f[d0MP])[kts ]+ + (dist.f[d000])[kzero]+ + (dist.f[dPPP])[ktne]+ (dist.f[dMMP])[ktsw]+ + (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]+ + (dist.f[dPPM])[kbne]+ (dist.f[dMMM])[kbsw]+ + (dist.f[dPMM])[kbse]+ (dist.f[dMPM])[kbnw]+ RHO; vxD[nodeIndex] = - (dist.f[DIR_P00])[ke ]- (dist.f[DIR_M00])[kw ]+ - (dist.f[DIR_PP0])[kne ]- (dist.f[DIR_MM0])[ksw ]+ - (dist.f[DIR_PM0])[kse ]- (dist.f[DIR_MP0])[knw ]+ - (dist.f[DIR_P0P])[kte ]- (dist.f[DIR_M0M])[kbw ]+ - (dist.f[DIR_P0M])[kbe ]- (dist.f[DIR_M0P])[ktw ]+ - (dist.f[DIR_PPP])[ktne]- (dist.f[DIR_MMP])[ktsw]+ - (dist.f[DIR_PMP])[ktse]- (dist.f[DIR_MPP])[ktnw]+ - (dist.f[DIR_PPM])[kbne]- (dist.f[DIR_MMM])[kbsw]+ - (dist.f[DIR_PMM])[kbse]- (dist.f[DIR_MPM])[kbnw]+ + (dist.f[dP00])[ke ]- (dist.f[dM00])[kw ]+ + (dist.f[dPP0])[kne ]- (dist.f[dMM0])[ksw ]+ + (dist.f[dPM0])[kse ]- (dist.f[dMP0])[knw ]+ + (dist.f[dP0P])[kte ]- (dist.f[dM0M])[kbw ]+ + (dist.f[dP0M])[kbe ]- (dist.f[dM0P])[ktw ]+ + (dist.f[dPPP])[ktne]- (dist.f[dMMP])[ktsw]+ + (dist.f[dPMP])[ktse]- (dist.f[dMPP])[ktnw]+ + (dist.f[dPPM])[kbne]- (dist.f[dMMM])[kbsw]+ + (dist.f[dPMM])[kbse]- (dist.f[dMPM])[kbnw]+ VX; vyD[nodeIndex] = - (dist.f[DIR_0P0])[kn ]- (dist.f[DIR_0M0])[ks ]+ - (dist.f[DIR_PP0])[kne ]- (dist.f[DIR_MM0])[ksw ]- - (dist.f[DIR_PM0])[kse ]+ (dist.f[DIR_MP0])[knw ]+ - (dist.f[DIR_0PP])[ktn ]- (dist.f[DIR_0MM])[kbs ]+ - (dist.f[DIR_0PM])[kbn ]- (dist.f[DIR_0MP])[kts ]+ - (dist.f[DIR_PPP])[ktne]- (dist.f[DIR_MMP])[ktsw]- - (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]+ - (dist.f[DIR_PPM])[kbne]- (dist.f[DIR_MMM])[kbsw]- - (dist.f[DIR_PMM])[kbse]+ (dist.f[DIR_MPM])[kbnw]+ + (dist.f[d0P0])[kn ]- (dist.f[d0M0])[ks ]+ + (dist.f[dPP0])[kne ]- (dist.f[dMM0])[ksw ]- + (dist.f[dPM0])[kse ]+ (dist.f[dMP0])[knw ]+ + (dist.f[d0PP])[ktn ]- (dist.f[d0MM])[kbs ]+ + (dist.f[d0PM])[kbn ]- (dist.f[d0MP])[kts ]+ + (dist.f[dPPP])[ktne]- (dist.f[dMMP])[ktsw]- + (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]+ + (dist.f[dPPM])[kbne]- (dist.f[dMMM])[kbsw]- + (dist.f[dPMM])[kbse]+ (dist.f[dMPM])[kbnw]+ VY; vzD[nodeIndex] = - (dist.f[DIR_00P])[kt ]- (dist.f[DIR_00M])[kb ]+ - (dist.f[DIR_P0P])[kte ]- (dist.f[DIR_M0M])[kbw ]- - (dist.f[DIR_P0M])[kbe ]+ (dist.f[DIR_M0P])[ktw ]+ - (dist.f[DIR_0PP])[ktn ]- (dist.f[DIR_0MM])[kbs ]- - (dist.f[DIR_0PM])[kbn ]+ (dist.f[DIR_0MP])[kts ]+ - (dist.f[DIR_PPP])[ktne]+ (dist.f[DIR_MMP])[ktsw]+ - (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]- - (dist.f[DIR_PPM])[kbne]- (dist.f[DIR_MMM])[kbsw]- - (dist.f[DIR_PMM])[kbse]- (dist.f[DIR_MPM])[kbnw]+ + (dist.f[d00P])[kt ]- (dist.f[d00M])[kb ]+ + (dist.f[dP0P])[kte ]- (dist.f[dM0M])[kbw ]- + (dist.f[dP0M])[kbe ]+ (dist.f[dM0P])[ktw ]+ + (dist.f[d0PP])[ktn ]- (dist.f[d0MM])[kbs ]- + (dist.f[d0PM])[kbn ]+ (dist.f[d0MP])[kts ]+ + (dist.f[dPPP])[ktne]+ (dist.f[dMMP])[ktsw]+ + (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]- + (dist.f[dPPM])[kbne]- (dist.f[dMMM])[kbsw]- + (dist.f[dPMM])[kbse]- (dist.f[dMPM])[kbnw]+ VZ; pressD[nodeIndex] = - ((dist.f[DIR_P00])[ke ]+ (dist.f[DIR_M00])[kw ]+ - (dist.f[DIR_0P0])[kn ]+ (dist.f[DIR_0M0])[ks ]+ - (dist.f[DIR_00P])[kt ]+ (dist.f[DIR_00M])[kb ]+ + ((dist.f[dP00])[ke ]+ (dist.f[dM00])[kw ]+ + (dist.f[d0P0])[kn ]+ (dist.f[d0M0])[ks ]+ + (dist.f[d00P])[kt ]+ (dist.f[d00M])[kb ]+ c2o1*( - (dist.f[DIR_PP0])[kne ]+ (dist.f[DIR_MM0])[ksw ]+ - (dist.f[DIR_PM0])[kse ]+ (dist.f[DIR_MP0])[knw ]+ - (dist.f[DIR_P0P])[kte ]+ (dist.f[DIR_M0M])[kbw ]+ - (dist.f[DIR_P0M])[kbe ]+ (dist.f[DIR_M0P])[ktw ]+ - (dist.f[DIR_0PP])[ktn ]+ (dist.f[DIR_0MM])[kbs ]+ - (dist.f[DIR_0PM])[kbn ]+ (dist.f[DIR_0MP])[kts ])+ + (dist.f[dPP0])[kne ]+ (dist.f[dMM0])[ksw ]+ + (dist.f[dPM0])[kse ]+ (dist.f[dMP0])[knw ]+ + (dist.f[dP0P])[kte ]+ (dist.f[dM0M])[kbw ]+ + (dist.f[dP0M])[kbe ]+ (dist.f[dM0P])[ktw ]+ + (dist.f[d0PP])[ktn ]+ (dist.f[d0MM])[kbs ]+ + (dist.f[d0PM])[kbn ]+ (dist.f[d0MP])[kts ])+ c3o1*( - (dist.f[DIR_PPP])[ktne]+ (dist.f[DIR_MMP])[ktsw]+ - (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]+ - (dist.f[DIR_PPM])[kbne]+ (dist.f[DIR_MMM])[kbsw]+ - (dist.f[DIR_PMM])[kbse]+ (dist.f[DIR_MPM])[kbnw])- + (dist.f[dPPP])[ktne]+ (dist.f[dMMP])[ktsw]+ + (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]+ + (dist.f[dPPM])[kbne]+ (dist.f[dMMM])[kbsw]+ + (dist.f[dPMM])[kbse]+ (dist.f[dMPM])[kbnw])- rhoD[nodeIndex]-(vxD[nodeIndex] * vxD[nodeIndex] + vyD[nodeIndex] * vyD[nodeIndex] + vzD[nodeIndex] * vzD[nodeIndex]) * (c1o1+rhoD[nodeIndex])) * c1o2+rhoD[nodeIndex]+ PRESS; //achtung op hart gesetzt Annahme op = 1 ; ^^^^(1.0/op-0.5)=0.5 @@ -591,33 +601,33 @@ __global__ void LBCalcMedCompSP27( if(geoD[nodeIndex] == GEO_FLUID) { - real mfcbb = (dist.f[DIR_P00])[nodeIndex];//[ke ]; - real mfabb = (dist.f[DIR_M00])[kw];//[kw ]; - real mfbcb = (dist.f[DIR_0P0])[nodeIndex];//[kn ]; - real mfbab = (dist.f[DIR_0M0])[ks];//[ks ]; - real mfbbc = (dist.f[DIR_00P])[nodeIndex];//[kt ]; - real mfbba = (dist.f[DIR_00M])[kb];//[kb ]; - real mfccb = (dist.f[DIR_PP0])[nodeIndex];//[kne ]; - real mfaab = (dist.f[DIR_MM0])[ksw];//[ksw ]; - real mfcab = (dist.f[DIR_PM0])[ks];//[kse ]; - real mfacb = (dist.f[DIR_MP0])[kw];//[knw ]; - real mfcbc = (dist.f[DIR_P0P])[nodeIndex];//[kte ]; - real mfaba = (dist.f[DIR_M0M])[kbw];//[kbw ]; - real mfcba = (dist.f[DIR_P0M])[kb];//[kbe ]; - real mfabc = (dist.f[DIR_M0P])[kw];//[ktw ]; - real mfbcc = (dist.f[DIR_0PP])[nodeIndex];//[ktn ]; - real mfbaa = (dist.f[DIR_0MM])[kbs];//[kbs ]; - real mfbca = (dist.f[DIR_0PM])[kb];//[kbn ]; - real mfbac = (dist.f[DIR_0MP])[ks];//[kts ]; - real mfbbb = (dist.f[DIR_000])[nodeIndex];//[kzero]; - real mfccc = (dist.f[DIR_PPP])[nodeIndex];//[ktne ]; - real mfaac = (dist.f[DIR_MMP])[ksw];//[ktsw ]; - real mfcac = (dist.f[DIR_PMP])[ks];//[ktse ]; - real mfacc = (dist.f[DIR_MPP])[kw];//[ktnw ]; - real mfcca = (dist.f[DIR_PPM])[kb];//[kbne ]; - real mfaaa = (dist.f[DIR_MMM])[kbsw];//[kbsw ]; - real mfcaa = (dist.f[DIR_PMM])[kbs];//[kbse ]; - real mfaca = (dist.f[DIR_MPM])[kbw];//[kbnw ]; + real mfcbb = (dist.f[dP00])[nodeIndex];//[ke ]; + real mfabb = (dist.f[dM00])[kw];//[kw ]; + real mfbcb = (dist.f[d0P0])[nodeIndex];//[kn ]; + real mfbab = (dist.f[d0M0])[ks];//[ks ]; + real mfbbc = (dist.f[d00P])[nodeIndex];//[kt ]; + real mfbba = (dist.f[d00M])[kb];//[kb ]; + real mfccb = (dist.f[dPP0])[nodeIndex];//[kne ]; + real mfaab = (dist.f[dMM0])[ksw];//[ksw ]; + real mfcab = (dist.f[dPM0])[ks];//[kse ]; + real mfacb = (dist.f[dMP0])[kw];//[knw ]; + real mfcbc = (dist.f[dP0P])[nodeIndex];//[kte ]; + real mfaba = (dist.f[dM0M])[kbw];//[kbw ]; + real mfcba = (dist.f[dP0M])[kb];//[kbe ]; + real mfabc = (dist.f[dM0P])[kw];//[ktw ]; + real mfbcc = (dist.f[d0PP])[nodeIndex];//[ktn ]; + real mfbaa = (dist.f[d0MM])[kbs];//[kbs ]; + real mfbca = (dist.f[d0PM])[kb];//[kbn ]; + real mfbac = (dist.f[d0MP])[ks];//[kts ]; + real mfbbb = (dist.f[d000])[nodeIndex];//[kzero]; + real mfccc = (dist.f[dPPP])[nodeIndex];//[ktne ]; + real mfaac = (dist.f[dMMP])[ksw];//[ktsw ]; + real mfcac = (dist.f[dPMP])[ks];//[ktse ]; + real mfacc = (dist.f[dMPP])[kw];//[ktnw ]; + real mfcca = (dist.f[dPPM])[kb];//[kbne ]; + real mfaaa = (dist.f[dMMM])[kbsw];//[kbsw ]; + real mfcaa = (dist.f[dPMM])[kbs];//[kbse ]; + real mfaca = (dist.f[dMPM])[kbw];//[kbnw ]; //////////////////////////////////////////////////////////////////////////////////// real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + @@ -642,21 +652,21 @@ __global__ void LBCalcMedCompSP27( (mfbbc - mfbba)) / rho) + VZ; pressD[nodeIndex] = - ((dist.f[DIR_P00])[ke ]+ (dist.f[DIR_M00])[kw ]+ - (dist.f[DIR_0P0])[kn ]+ (dist.f[DIR_0M0])[ks ]+ - (dist.f[DIR_00P])[kt ]+ (dist.f[DIR_00M])[kb ]+ + ((dist.f[dP00])[ke ]+ (dist.f[dM00])[kw ]+ + (dist.f[d0P0])[kn ]+ (dist.f[d0M0])[ks ]+ + (dist.f[d00P])[kt ]+ (dist.f[d00M])[kb ]+ c2o1*( - (dist.f[DIR_PP0])[kne ]+ (dist.f[DIR_MM0])[ksw ]+ - (dist.f[DIR_PM0])[kse ]+ (dist.f[DIR_MP0])[knw ]+ - (dist.f[DIR_P0P])[kte ]+ (dist.f[DIR_M0M])[kbw ]+ - (dist.f[DIR_P0M])[kbe ]+ (dist.f[DIR_M0P])[ktw ]+ - (dist.f[DIR_0PP])[ktn ]+ (dist.f[DIR_0MM])[kbs ]+ - (dist.f[DIR_0PM])[kbn ]+ (dist.f[DIR_0MP])[kts ])+ + (dist.f[dPP0])[kne ]+ (dist.f[dMM0])[ksw ]+ + (dist.f[dPM0])[kse ]+ (dist.f[dMP0])[knw ]+ + (dist.f[dP0P])[kte ]+ (dist.f[dM0M])[kbw ]+ + (dist.f[dP0M])[kbe ]+ (dist.f[dM0P])[ktw ]+ + (dist.f[d0PP])[ktn ]+ (dist.f[d0MM])[kbs ]+ + (dist.f[d0PM])[kbn ]+ (dist.f[d0MP])[kts ])+ c3o1*( - (dist.f[DIR_PPP])[ktne]+ (dist.f[DIR_MMP])[ktsw]+ - (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]+ - (dist.f[DIR_PPM])[kbne]+ (dist.f[DIR_MMM])[kbsw]+ - (dist.f[DIR_PMM])[kbse]+ (dist.f[DIR_MPM])[kbnw])- + (dist.f[dPPP])[ktne]+ (dist.f[dMMP])[ktsw]+ + (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]+ + (dist.f[dPPM])[kbne]+ (dist.f[dMMM])[kbsw]+ + (dist.f[dPMM])[kbse]+ (dist.f[dMPM])[kbnw])- rhoD[nodeIndex]-(vxD[nodeIndex] * vxD[nodeIndex] + vyD[nodeIndex] * vyD[nodeIndex] + vzD[nodeIndex] * vzD[nodeIndex]) * (c1o1+rhoD[nodeIndex])) * c1o2+rhoD[nodeIndex]+ PRESS; //achtung op hart gesetzt Annahme op = 1 ; ^^^^(1.0/op-0.5)=0.5 @@ -766,33 +776,33 @@ __global__ void LBCalcMedCompAD27( if (geoD[nodeIndex] == GEO_FLUID) { - real mfcbb = (dist.f[DIR_P00])[nodeIndex];//[ke ]; - real mfabb = (dist.f[DIR_M00])[kw];//[kw ]; - real mfbcb = (dist.f[DIR_0P0])[nodeIndex];//[kn ]; - real mfbab = (dist.f[DIR_0M0])[ks];//[ks ]; - real mfbbc = (dist.f[DIR_00P])[nodeIndex];//[kt ]; - real mfbba = (dist.f[DIR_00M])[kb];//[kb ]; - real mfccb = (dist.f[DIR_PP0])[nodeIndex];//[kne ]; - real mfaab = (dist.f[DIR_MM0])[ksw];//[ksw ]; - real mfcab = (dist.f[DIR_PM0])[ks];//[kse ]; - real mfacb = (dist.f[DIR_MP0])[kw];//[knw ]; - real mfcbc = (dist.f[DIR_P0P])[nodeIndex];//[kte ]; - real mfaba = (dist.f[DIR_M0M])[kbw];//[kbw ]; - real mfcba = (dist.f[DIR_P0M])[kb];//[kbe ]; - real mfabc = (dist.f[DIR_M0P])[kw];//[ktw ]; - real mfbcc = (dist.f[DIR_0PP])[nodeIndex];//[ktn ]; - real mfbaa = (dist.f[DIR_0MM])[kbs];//[kbs ]; - real mfbca = (dist.f[DIR_0PM])[kb];//[kbn ]; - real mfbac = (dist.f[DIR_0MP])[ks];//[kts ]; - real mfbbb = (dist.f[DIR_000])[nodeIndex];//[kzero]; - real mfccc = (dist.f[DIR_PPP])[nodeIndex];//[ktne ]; - real mfaac = (dist.f[DIR_MMP])[ksw];//[ktsw ]; - real mfcac = (dist.f[DIR_PMP])[ks];//[ktse ]; - real mfacc = (dist.f[DIR_MPP])[kw];//[ktnw ]; - real mfcca = (dist.f[DIR_PPM])[kb];//[kbne ]; - real mfaaa = (dist.f[DIR_MMM])[kbsw];//[kbsw ]; - real mfcaa = (dist.f[DIR_PMM])[kbs];//[kbse ]; - real mfaca = (dist.f[DIR_MPM])[kbw];//[kbnw ]; + real mfcbb = (dist.f[dP00])[nodeIndex];//[ke ]; + real mfabb = (dist.f[dM00])[kw];//[kw ]; + real mfbcb = (dist.f[d0P0])[nodeIndex];//[kn ]; + real mfbab = (dist.f[d0M0])[ks];//[ks ]; + real mfbbc = (dist.f[d00P])[nodeIndex];//[kt ]; + real mfbba = (dist.f[d00M])[kb];//[kb ]; + real mfccb = (dist.f[dPP0])[nodeIndex];//[kne ]; + real mfaab = (dist.f[dMM0])[ksw];//[ksw ]; + real mfcab = (dist.f[dPM0])[ks];//[kse ]; + real mfacb = (dist.f[dMP0])[kw];//[knw ]; + real mfcbc = (dist.f[dP0P])[nodeIndex];//[kte ]; + real mfaba = (dist.f[dM0M])[kbw];//[kbw ]; + real mfcba = (dist.f[dP0M])[kb];//[kbe ]; + real mfabc = (dist.f[dM0P])[kw];//[ktw ]; + real mfbcc = (dist.f[d0PP])[nodeIndex];//[ktn ]; + real mfbaa = (dist.f[d0MM])[kbs];//[kbs ]; + real mfbca = (dist.f[d0PM])[kb];//[kbn ]; + real mfbac = (dist.f[d0MP])[ks];//[kts ]; + real mfbbb = (dist.f[d000])[nodeIndex];//[kzero]; + real mfccc = (dist.f[dPPP])[nodeIndex];//[ktne ]; + real mfaac = (dist.f[dMMP])[ksw];//[ktsw ]; + real mfcac = (dist.f[dPMP])[ks];//[ktse ]; + real mfacc = (dist.f[dMPP])[kw];//[ktnw ]; + real mfcca = (dist.f[dPPM])[kb];//[kbne ]; + real mfaaa = (dist.f[dMMM])[kbsw];//[kbsw ]; + real mfcaa = (dist.f[dPMM])[kbs];//[kbse ]; + real mfaca = (dist.f[dMPM])[kbw];//[kbnw ]; //////////////////////////////////////////////////////////////////////////////////// real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + @@ -819,52 +829,52 @@ __global__ void LBCalcMedCompAD27( (mfbbc - mfbba)) / rho) + VZ; pressD[nodeIndex] = - ((dist.f[DIR_P00])[ke] + (dist.f[DIR_M00])[kw] + - (dist.f[DIR_0P0])[kn] + (dist.f[DIR_0M0])[ks] + - (dist.f[DIR_00P])[kt] + (dist.f[DIR_00M])[kb] + + ((dist.f[dP00])[ke] + (dist.f[dM00])[kw] + + (dist.f[d0P0])[kn] + (dist.f[d0M0])[ks] + + (dist.f[d00P])[kt] + (dist.f[d00M])[kb] + c2o1*( - (dist.f[DIR_PP0])[kne] + (dist.f[DIR_MM0])[ksw] + - (dist.f[DIR_PM0])[kse] + (dist.f[DIR_MP0])[knw] + - (dist.f[DIR_P0P])[kte] + (dist.f[DIR_M0M])[kbw] + - (dist.f[DIR_P0M])[kbe] + (dist.f[DIR_M0P])[ktw] + - (dist.f[DIR_0PP])[ktn] + (dist.f[DIR_0MM])[kbs] + - (dist.f[DIR_0PM])[kbn] + (dist.f[DIR_0MP])[kts]) + + (dist.f[dPP0])[kne] + (dist.f[dMM0])[ksw] + + (dist.f[dPM0])[kse] + (dist.f[dMP0])[knw] + + (dist.f[dP0P])[kte] + (dist.f[dM0M])[kbw] + + (dist.f[dP0M])[kbe] + (dist.f[dM0P])[ktw] + + (dist.f[d0PP])[ktn] + (dist.f[d0MM])[kbs] + + (dist.f[d0PM])[kbn] + (dist.f[d0MP])[kts]) + c3o1*( - (dist.f[DIR_PPP])[ktne] + (dist.f[DIR_MMP])[ktsw] + - (dist.f[DIR_PMP])[ktse] + (dist.f[DIR_MPP])[ktnw] + - (dist.f[DIR_PPM])[kbne] + (dist.f[DIR_MMM])[kbsw] + - (dist.f[DIR_PMM])[kbse] + (dist.f[DIR_MPM])[kbnw]) - + (dist.f[dPPP])[ktne] + (dist.f[dMMP])[ktsw] + + (dist.f[dPMP])[ktse] + (dist.f[dMPP])[ktnw] + + (dist.f[dPPM])[kbne] + (dist.f[dMMM])[kbsw] + + (dist.f[dPMM])[kbse] + (dist.f[dMPM])[kbnw]) - rhoD[nodeIndex] - (vxD[nodeIndex] * vxD[nodeIndex] + vyD[nodeIndex] * vyD[nodeIndex] + vzD[nodeIndex] * vzD[nodeIndex]) * (c1o1 + rhoD[nodeIndex])) * c1o2 + rhoD[nodeIndex] + PRESS; //achtung op hart gesetzt Annahme op = 1 ; ^^^^(1.0/op-0.5)=0.5 ////////////////////////////////////////////////////////////////////////// - mfcbb = (distAD.f[DIR_P00])[nodeIndex ]; - mfabb = (distAD.f[DIR_M00])[kw ]; - mfbcb = (distAD.f[DIR_0P0])[nodeIndex ]; - mfbab = (distAD.f[DIR_0M0])[ks ]; - mfbbc = (distAD.f[DIR_00P])[nodeIndex ]; - mfbba = (distAD.f[DIR_00M])[kb ]; - mfccb = (distAD.f[DIR_PP0])[nodeIndex ]; - mfaab = (distAD.f[DIR_MM0])[ksw ]; - mfcab = (distAD.f[DIR_PM0])[ks ]; - mfacb = (distAD.f[DIR_MP0])[kw ]; - mfcbc = (distAD.f[DIR_P0P])[nodeIndex ]; - mfaba = (distAD.f[DIR_M0M])[kbw ]; - mfcba = (distAD.f[DIR_P0M])[kb ]; - mfabc = (distAD.f[DIR_M0P])[kw ]; - mfbcc = (distAD.f[DIR_0PP])[nodeIndex ]; - mfbaa = (distAD.f[DIR_0MM])[kbs ]; - mfbca = (distAD.f[DIR_0PM])[kb ]; - mfbac = (distAD.f[DIR_0MP])[ks ]; - mfbbb = (distAD.f[DIR_000])[nodeIndex ]; - mfccc = (distAD.f[DIR_PPP])[nodeIndex ]; - mfaac = (distAD.f[DIR_MMP])[ksw ]; - mfcac = (distAD.f[DIR_PMP])[ks ]; - mfacc = (distAD.f[DIR_MPP])[kw ]; - mfcca = (distAD.f[DIR_PPM])[kb ]; - mfaaa = (distAD.f[DIR_MMM])[kbsw]; - mfcaa = (distAD.f[DIR_PMM])[kbs ]; - mfaca = (distAD.f[DIR_MPM])[kbw ]; + mfcbb = (distAD.f[dP00])[nodeIndex ]; + mfabb = (distAD.f[dM00])[kw ]; + mfbcb = (distAD.f[d0P0])[nodeIndex ]; + mfbab = (distAD.f[d0M0])[ks ]; + mfbbc = (distAD.f[d00P])[nodeIndex ]; + mfbba = (distAD.f[d00M])[kb ]; + mfccb = (distAD.f[dPP0])[nodeIndex ]; + mfaab = (distAD.f[dMM0])[ksw ]; + mfcab = (distAD.f[dPM0])[ks ]; + mfacb = (distAD.f[dMP0])[kw ]; + mfcbc = (distAD.f[dP0P])[nodeIndex ]; + mfaba = (distAD.f[dM0M])[kbw ]; + mfcba = (distAD.f[dP0M])[kb ]; + mfabc = (distAD.f[dM0P])[kw ]; + mfbcc = (distAD.f[d0PP])[nodeIndex ]; + mfbaa = (distAD.f[d0MM])[kbs ]; + mfbca = (distAD.f[d0PM])[kb ]; + mfbac = (distAD.f[d0MP])[ks ]; + mfbbb = (distAD.f[d000])[nodeIndex ]; + mfccc = (distAD.f[dPPP])[nodeIndex ]; + mfaac = (distAD.f[dMMP])[ksw ]; + mfcac = (distAD.f[dPMP])[ks ]; + mfacc = (distAD.f[dMPP])[kw ]; + mfcca = (distAD.f[dPPM])[kb ]; + mfaaa = (distAD.f[dMMM])[kbsw]; + mfcaa = (distAD.f[dPMM])[kbs ]; + mfaca = (distAD.f[dMPM])[kbw ]; ////////////////////////////////////////////////////////////////////////// concD[nodeIndex] = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + @@ -1130,50 +1140,50 @@ __global__ void LBCalcMeasurePoints( if(geoD[kzero] == GEO_FLUID) { - rhoMP[kMac]= (dist.f[DIR_P00])[ke ]+ (dist.f[DIR_M00])[kw ]+ - (dist.f[DIR_0P0])[kn ]+ (dist.f[DIR_0M0])[ks ]+ - (dist.f[DIR_00P])[kt ]+ (dist.f[DIR_00M])[kb ]+ - (dist.f[DIR_PP0])[kne ]+ (dist.f[DIR_MM0])[ksw ]+ - (dist.f[DIR_PM0])[kse ]+ (dist.f[DIR_MP0])[knw ]+ - (dist.f[DIR_P0P])[kte ]+ (dist.f[DIR_M0M])[kbw ]+ - (dist.f[DIR_P0M])[kbe ]+ (dist.f[DIR_M0P])[ktw ]+ - (dist.f[DIR_0PP])[ktn ]+ (dist.f[DIR_0MM])[kbs ]+ - (dist.f[DIR_0PM])[kbn ]+ (dist.f[DIR_0MP])[kts ]+ - (dist.f[DIR_000])[kzero]+ - (dist.f[DIR_PPP])[ktne]+ (dist.f[DIR_MMP])[ktsw]+ - (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]+ - (dist.f[DIR_PPM])[kbne]+ (dist.f[DIR_MMM])[kbsw]+ - (dist.f[DIR_PMM])[kbse]+ (dist.f[DIR_MPM])[kbnw]; + rhoMP[kMac]= (dist.f[dP00])[ke ]+ (dist.f[dM00])[kw ]+ + (dist.f[d0P0])[kn ]+ (dist.f[d0M0])[ks ]+ + (dist.f[d00P])[kt ]+ (dist.f[d00M])[kb ]+ + (dist.f[dPP0])[kne ]+ (dist.f[dMM0])[ksw ]+ + (dist.f[dPM0])[kse ]+ (dist.f[dMP0])[knw ]+ + (dist.f[dP0P])[kte ]+ (dist.f[dM0M])[kbw ]+ + (dist.f[dP0M])[kbe ]+ (dist.f[dM0P])[ktw ]+ + (dist.f[d0PP])[ktn ]+ (dist.f[d0MM])[kbs ]+ + (dist.f[d0PM])[kbn ]+ (dist.f[d0MP])[kts ]+ + (dist.f[d000])[kzero]+ + (dist.f[dPPP])[ktne]+ (dist.f[dMMP])[ktsw]+ + (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]+ + (dist.f[dPPM])[kbne]+ (dist.f[dMMM])[kbsw]+ + (dist.f[dPMM])[kbse]+ (dist.f[dMPM])[kbnw]; - vxMP[kMac] = (dist.f[DIR_P00])[ke ]- (dist.f[DIR_M00])[kw ]+ - (dist.f[DIR_PP0])[kne ]- (dist.f[DIR_MM0])[ksw ]+ - (dist.f[DIR_PM0])[kse ]- (dist.f[DIR_MP0])[knw ]+ - (dist.f[DIR_P0P])[kte ]- (dist.f[DIR_M0M])[kbw ]+ - (dist.f[DIR_P0M])[kbe ]- (dist.f[DIR_M0P])[ktw ]+ - (dist.f[DIR_PPP])[ktne]- (dist.f[DIR_MMP])[ktsw]+ - (dist.f[DIR_PMP])[ktse]- (dist.f[DIR_MPP])[ktnw]+ - (dist.f[DIR_PPM])[kbne]- (dist.f[DIR_MMM])[kbsw]+ - (dist.f[DIR_PMM])[kbse]- (dist.f[DIR_MPM])[kbnw]; + vxMP[kMac] = (dist.f[dP00])[ke ]- (dist.f[dM00])[kw ]+ + (dist.f[dPP0])[kne ]- (dist.f[dMM0])[ksw ]+ + (dist.f[dPM0])[kse ]- (dist.f[dMP0])[knw ]+ + (dist.f[dP0P])[kte ]- (dist.f[dM0M])[kbw ]+ + (dist.f[dP0M])[kbe ]- (dist.f[dM0P])[ktw ]+ + (dist.f[dPPP])[ktne]- (dist.f[dMMP])[ktsw]+ + (dist.f[dPMP])[ktse]- (dist.f[dMPP])[ktnw]+ + (dist.f[dPPM])[kbne]- (dist.f[dMMM])[kbsw]+ + (dist.f[dPMM])[kbse]- (dist.f[dMPM])[kbnw]; - vyMP[kMac] = (dist.f[DIR_0P0])[kn ]- (dist.f[DIR_0M0])[ks ]+ - (dist.f[DIR_PP0])[kne ]- (dist.f[DIR_MM0])[ksw ]- - (dist.f[DIR_PM0])[kse ]+ (dist.f[DIR_MP0])[knw ]+ - (dist.f[DIR_0PP])[ktn ]- (dist.f[DIR_0MM])[kbs ]+ - (dist.f[DIR_0PM])[kbn ]- (dist.f[DIR_0MP])[kts ]+ - (dist.f[DIR_PPP])[ktne]- (dist.f[DIR_MMP])[ktsw]- - (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]+ - (dist.f[DIR_PPM])[kbne]- (dist.f[DIR_MMM])[kbsw]- - (dist.f[DIR_PMM])[kbse]+ (dist.f[DIR_MPM])[kbnw]; + vyMP[kMac] = (dist.f[d0P0])[kn ]- (dist.f[d0M0])[ks ]+ + (dist.f[dPP0])[kne ]- (dist.f[dMM0])[ksw ]- + (dist.f[dPM0])[kse ]+ (dist.f[dMP0])[knw ]+ + (dist.f[d0PP])[ktn ]- (dist.f[d0MM])[kbs ]+ + (dist.f[d0PM])[kbn ]- (dist.f[d0MP])[kts ]+ + (dist.f[dPPP])[ktne]- (dist.f[dMMP])[ktsw]- + (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]+ + (dist.f[dPPM])[kbne]- (dist.f[dMMM])[kbsw]- + (dist.f[dPMM])[kbse]+ (dist.f[dMPM])[kbnw]; - vzMP[kMac] = (dist.f[DIR_00P])[kt ]- (dist.f[DIR_00M])[kb ]+ - (dist.f[DIR_P0P])[kte ]- (dist.f[DIR_M0M])[kbw ]- - (dist.f[DIR_P0M])[kbe ]+ (dist.f[DIR_M0P])[ktw ]+ - (dist.f[DIR_0PP])[ktn ]- (dist.f[DIR_0MM])[kbs ]- - (dist.f[DIR_0PM])[kbn ]+ (dist.f[DIR_0MP])[kts ]+ - (dist.f[DIR_PPP])[ktne]+ (dist.f[DIR_MMP])[ktsw]+ - (dist.f[DIR_PMP])[ktse]+ (dist.f[DIR_MPP])[ktnw]- - (dist.f[DIR_PPM])[kbne]- (dist.f[DIR_MMM])[kbsw]- - (dist.f[DIR_PMM])[kbse]- (dist.f[DIR_MPM])[kbnw]; + vzMP[kMac] = (dist.f[d00P])[kt ]- (dist.f[d00M])[kb ]+ + (dist.f[dP0P])[kte ]- (dist.f[dM0M])[kbw ]- + (dist.f[dP0M])[kbe ]+ (dist.f[dM0P])[ktw ]+ + (dist.f[d0PP])[ktn ]- (dist.f[d0MM])[kbs ]- + (dist.f[d0PM])[kbn ]+ (dist.f[d0MP])[kts ]+ + (dist.f[dPPP])[ktne]+ (dist.f[dMMP])[ktsw]+ + (dist.f[dPMP])[ktse]+ (dist.f[dMPP])[ktnw]- + (dist.f[dPPM])[kbne]- (dist.f[dMMM])[kbsw]- + (dist.f[dPMM])[kbse]- (dist.f[dMPM])[kbnw]; } } } diff --git a/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.cpp b/src/gpu/core/GPU/CudaMemoryManager.cpp similarity index 94% rename from src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.cpp rename to src/gpu/core/GPU/CudaMemoryManager.cpp index 64943d19ff54bfaa174d0728a96c517f6605d565..986fc9f02174bc89659525cb1686c4bc86a248c8 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.cpp +++ b/src/gpu/core/GPU/CudaMemoryManager.cpp @@ -11,8 +11,6 @@ #include "PreCollisionInteractor/Probes/Probe.h" #include <PreCollisionInteractor/PrecursorWriter.h> -#include "Calculation/PorousMedia.h" - #include "basics/constants/NumericConstants.h" @@ -900,35 +898,11 @@ void CudaMemoryManager::cudaAllocTurbulentViscosity(int lev) { //Host checkCudaErrors(cudaMallocHost((void**) &(parameter->getParH(lev)->turbViscosity), parameter->getParH(lev)->memSizeRealLBnodes)); - //Debug - // checkCudaErrors(cudaMallocHost((void**) &(parameter->getParH(lev)->gSij ), parameter->getParH(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMallocHost((void**) &(parameter->getParH(lev)->gSDij), parameter->getParH(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMallocHost((void**) &(parameter->getParH(lev)->gDxvx), parameter->getParH(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMallocHost((void**) &(parameter->getParH(lev)->gDyvx), parameter->getParH(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMallocHost((void**) &(parameter->getParH(lev)->gDzvx), parameter->getParH(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMallocHost((void**) &(parameter->getParH(lev)->gDxvy), parameter->getParH(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMallocHost((void**) &(parameter->getParH(lev)->gDyvy), parameter->getParH(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMallocHost((void**) &(parameter->getParH(lev)->gDzvy), parameter->getParH(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMallocHost((void**) &(parameter->getParH(lev)->gDxvz), parameter->getParH(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMallocHost((void**) &(parameter->getParH(lev)->gDyvz), parameter->getParH(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMallocHost((void**) &(parameter->getParH(lev)->gDzvz), parameter->getParH(lev)->mem_size_real_SP)); //Device checkCudaErrors(cudaMalloc((void**) &(parameter->getParD(lev)->turbViscosity), parameter->getParD(lev)->memSizeRealLBnodes)); - //Debug - // checkCudaErrors(cudaMalloc((void**) &(parameter->getParD(lev)->gSij ), parameter->getParD(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMalloc((void**) &(parameter->getParD(lev)->gSDij), parameter->getParD(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMalloc((void**) &(parameter->getParD(lev)->gDxvx), parameter->getParD(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMalloc((void**) &(parameter->getParD(lev)->gDyvx), parameter->getParD(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMalloc((void**) &(parameter->getParD(lev)->gDzvx), parameter->getParD(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMalloc((void**) &(parameter->getParD(lev)->gDxvy), parameter->getParD(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMalloc((void**) &(parameter->getParD(lev)->gDyvy), parameter->getParD(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMalloc((void**) &(parameter->getParD(lev)->gDzvy), parameter->getParD(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMalloc((void**) &(parameter->getParD(lev)->gDxvz), parameter->getParD(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMalloc((void**) &(parameter->getParD(lev)->gDyvz), parameter->getParD(lev)->mem_size_real_SP)); - // checkCudaErrors(cudaMalloc((void**) &(parameter->getParD(lev)->gDzvz), parameter->getParD(lev)->mem_size_real_SP)); - // ////////////////////////////////////////////////////////////////////////// - // double tmp = (double)parameter->getParH(lev)->mem_size_real_SP * 12.0; + + ////////////////////////////////////////////////////////////////////////// double tmp = (double)parameter->getParH(lev)->memSizeRealLBnodes; setMemsizeGPU(tmp, false); } @@ -936,51 +910,15 @@ void CudaMemoryManager::cudaCopyTurbulentViscosityHD(int lev) { //copy host to device checkCudaErrors(cudaMemcpy(parameter->getParD(lev)->turbViscosity, parameter->getParH(lev)->turbViscosity, parameter->getParH(lev)->memSizeRealLBnodes, cudaMemcpyHostToDevice)); - //Debug - // checkCudaErrors(cudaMemcpy(parameter->getParD(lev)->gSij , parameter->getParH(lev)->gSij , parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyHostToDevice)); - // checkCudaErrors(cudaMemcpy(parameter->getParD(lev)->gSDij, parameter->getParH(lev)->gSDij, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyHostToDevice)); - // checkCudaErrors(cudaMemcpy(parameter->getParD(lev)->gDxvx, parameter->getParH(lev)->gDxvx, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyHostToDevice)); - // checkCudaErrors(cudaMemcpy(parameter->getParD(lev)->gDyvx, parameter->getParH(lev)->gDyvx, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyHostToDevice)); - // checkCudaErrors(cudaMemcpy(parameter->getParD(lev)->gDzvx, parameter->getParH(lev)->gDzvx, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyHostToDevice)); - // checkCudaErrors(cudaMemcpy(parameter->getParD(lev)->gDxvy, parameter->getParH(lev)->gDxvy, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyHostToDevice)); - // checkCudaErrors(cudaMemcpy(parameter->getParD(lev)->gDyvy, parameter->getParH(lev)->gDyvy, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyHostToDevice)); - // checkCudaErrors(cudaMemcpy(parameter->getParD(lev)->gDzvy, parameter->getParH(lev)->gDzvy, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyHostToDevice)); - // checkCudaErrors(cudaMemcpy(parameter->getParD(lev)->gDxvz, parameter->getParH(lev)->gDxvz, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyHostToDevice)); - // checkCudaErrors(cudaMemcpy(parameter->getParD(lev)->gDyvz, parameter->getParH(lev)->gDyvz, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyHostToDevice)); - // checkCudaErrors(cudaMemcpy(parameter->getParD(lev)->gDzvz, parameter->getParH(lev)->gDzvz, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyHostToDevice)); } void CudaMemoryManager::cudaCopyTurbulentViscosityDH(int lev) { //copy device to host checkCudaErrors(cudaMemcpy(parameter->getParH(lev)->turbViscosity, parameter->getParD(lev)->turbViscosity, parameter->getParH(lev)->memSizeRealLBnodes, cudaMemcpyDeviceToHost)); - //Debug - // checkCudaErrors(cudaMemcpy(parameter->getParH(lev)->gSij , parameter->getParD(lev)->gSij , parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyDeviceToHost)); - // checkCudaErrors(cudaMemcpy(parameter->getParH(lev)->gSDij, parameter->getParD(lev)->gSDij, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyDeviceToHost)); - // checkCudaErrors(cudaMemcpy(parameter->getParH(lev)->gDxvx, parameter->getParD(lev)->gDxvx, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyDeviceToHost)); - // checkCudaErrors(cudaMemcpy(parameter->getParH(lev)->gDyvx, parameter->getParD(lev)->gDyvx, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyDeviceToHost)); - // checkCudaErrors(cudaMemcpy(parameter->getParH(lev)->gDzvx, parameter->getParD(lev)->gDzvx, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyDeviceToHost)); - // checkCudaErrors(cudaMemcpy(parameter->getParH(lev)->gDxvy, parameter->getParD(lev)->gDxvy, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyDeviceToHost)); - // checkCudaErrors(cudaMemcpy(parameter->getParH(lev)->gDyvy, parameter->getParD(lev)->gDyvy, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyDeviceToHost)); - // checkCudaErrors(cudaMemcpy(parameter->getParH(lev)->gDzvy, parameter->getParD(lev)->gDzvy, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyDeviceToHost)); - // checkCudaErrors(cudaMemcpy(parameter->getParH(lev)->gDxvz, parameter->getParD(lev)->gDxvz, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyDeviceToHost)); - // checkCudaErrors(cudaMemcpy(parameter->getParH(lev)->gDyvz, parameter->getParD(lev)->gDyvz, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyDeviceToHost)); - // checkCudaErrors(cudaMemcpy(parameter->getParH(lev)->gDzvz, parameter->getParD(lev)->gDzvz, parameter->getParH(lev)->mem_size_real_SP, cudaMemcpyDeviceToHost)); } void CudaMemoryManager::cudaFreeTurbulentViscosity(int lev) { checkCudaErrors(cudaFreeHost(parameter->getParH(lev)->turbViscosity)); - //Debug - // checkCudaErrors(cudaFreeHost(parameter->getParH(lev)->gSij )); - // checkCudaErrors(cudaFreeHost(parameter->getParH(lev)->gSDij)); - // checkCudaErrors(cudaFreeHost(parameter->getParH(lev)->gDxvx)); - // checkCudaErrors(cudaFreeHost(parameter->getParH(lev)->gDyvx)); - // checkCudaErrors(cudaFreeHost(parameter->getParH(lev)->gDzvx)); - // checkCudaErrors(cudaFreeHost(parameter->getParH(lev)->gDxvy)); - // checkCudaErrors(cudaFreeHost(parameter->getParH(lev)->gDyvy)); - // checkCudaErrors(cudaFreeHost(parameter->getParH(lev)->gDzvy)); - // checkCudaErrors(cudaFreeHost(parameter->getParH(lev)->gDxvz)); - // checkCudaErrors(cudaFreeHost(parameter->getParH(lev)->gDyvz)); - // checkCudaErrors(cudaFreeHost(parameter->getParH(lev)->gDzvz)); } //turbulence intensity void CudaMemoryManager::cudaAllocTurbulenceIntensity(int lev, uint size) @@ -2494,42 +2432,6 @@ void CudaMemoryManager::cudaAllocRandomValues() setMemsizeGPU(tmp, false); } ////////////////////////////////////////////////////////////////////////// -//porous media -void CudaMemoryManager::cudaAllocPorousMedia(PorousMedia* pm, int lev) -{ - unsigned int mem_size_IDsPM = sizeof(unsigned int)*pm->getSizePM(); - unsigned int *tmpIDHost, *tmpIDDevice; - //std::cout << "cudaMallocHost" << endl; - //Host - checkCudaErrors(cudaMallocHost((void**) &(tmpIDHost), mem_size_IDsPM)); - - //std::cout << "cudaMalloc" << endl; - //Device - checkCudaErrors(cudaMalloc((void**) &(tmpIDDevice), mem_size_IDsPM)); - - //std::cout << "set Host and Device arrays PM" << endl; - ////////////////////////////////////////////////////////////////////////// - pm->setHostNodeIDsPM(tmpIDHost); - pm->setDeviceNodeIDsPM(tmpIDDevice); - ////////////////////////////////////////////////////////////////////////// - double tmp = (double)mem_size_IDsPM; - setMemsizeGPU(tmp, false); -} -void CudaMemoryManager::cudaCopyPorousMedia(PorousMedia* pm, int lev) -{ - unsigned int mem_size_IDsPM = sizeof(unsigned int)*pm->getSizePM(); - unsigned int *tmpIDHost = pm->getHostNodeIDsPM(); - unsigned int *tmpIDDevice = pm->getDeviceNodeIDsPM(); - ////////////////////////////////////////////////////////////////////////// - checkCudaErrors(cudaMemcpy(tmpIDDevice, tmpIDHost, mem_size_IDsPM, cudaMemcpyHostToDevice)); - ////////////////////////////////////////////////////////////////////////// - pm->setDeviceNodeIDsPM(tmpIDDevice); -} -void CudaMemoryManager::cudaFreePorousMedia(PorousMedia* pm, int lev) -{ - checkCudaErrors(cudaFreeHost(pm->getHostNodeIDsPM())); -} -////////////////////////////////////////////////////////////////////////// //advection diffusion void CudaMemoryManager::cudaAllocConcentration(int lev) { @@ -2557,16 +2459,9 @@ void CudaMemoryManager::cudaFreeConcentration(int lev) void CudaMemoryManager::cudaAllocTempFs(int lev) { //Device - if (parameter->getDiffMod() == 7) - { - checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->distributionsAD7.f[0]), parameter->getDiffMod()*parameter->getParH(lev)->memSizeRealLBnodes)); - } - else if (parameter->getDiffMod() == 27) - { - checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->distributionsAD.f[0]), parameter->getDiffMod()*parameter->getParH(lev)->memSizeRealLBnodes)); - } + checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->distributionsAD.f[0]), 27*parameter->getParH(lev)->memSizeRealLBnodes)); ////////////////////////////////////////////////////////////////////////// - double tmp = (double)(parameter->getDiffMod() * parameter->getParH(lev)->memSizeRealLBnodes); + double tmp = (double)(27 * parameter->getParH(lev)->memSizeRealLBnodes); setMemsizeGPU(tmp, false); } ////////////////////////////////////////////////////////////////////////// @@ -2846,23 +2741,23 @@ void CudaMemoryManager::cudaFreeProcessNeighbor(int lev, unsigned int processNei void CudaMemoryManager::cudaAllocProcessNeighborADX(int lev, unsigned int processNeighbor) { //Host - checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborADX[processNeighbor].index ), parameter->getParH(lev)->sendProcessNeighborADX[processNeighbor].memsizeIndex )); - checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborADX[processNeighbor].f[0] ), parameter->getDiffMod() * parameter->getParH(lev)->sendProcessNeighborADX[processNeighbor].memsizeFs )); - checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborADX[processNeighbor].index ), parameter->getParH(lev)->recvProcessNeighborADX[processNeighbor].memsizeIndex )); - checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborADX[processNeighbor].f[0] ), parameter->getDiffMod() * parameter->getParH(lev)->recvProcessNeighborADX[processNeighbor].memsizeFs )); + checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborADX[processNeighbor].index ), parameter->getParH(lev)->sendProcessNeighborADX[processNeighbor].memsizeIndex )); + checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborADX[processNeighbor].f[0] ), 27 * parameter->getParH(lev)->sendProcessNeighborADX[processNeighbor].memsizeFs )); + checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborADX[processNeighbor].index ), parameter->getParH(lev)->recvProcessNeighborADX[processNeighbor].memsizeIndex )); + checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborADX[processNeighbor].f[0] ), 27 * parameter->getParH(lev)->recvProcessNeighborADX[processNeighbor].memsizeFs )); //Device - checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborADX[processNeighbor].index ), parameter->getParD(lev)->sendProcessNeighborADX[processNeighbor].memsizeIndex )); - checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborADX[processNeighbor].f[0] ), parameter->getDiffMod() * parameter->getParD(lev)->sendProcessNeighborADX[processNeighbor].memsizeFs )); - checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborADX[processNeighbor].index ), parameter->getParD(lev)->recvProcessNeighborADX[processNeighbor].memsizeIndex )); - checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborADX[processNeighbor].f[0] ), parameter->getDiffMod() * parameter->getParD(lev)->recvProcessNeighborADX[processNeighbor].memsizeFs )); + checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborADX[processNeighbor].index ), parameter->getParD(lev)->sendProcessNeighborADX[processNeighbor].memsizeIndex )); + checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborADX[processNeighbor].f[0] ), 27 * parameter->getParD(lev)->sendProcessNeighborADX[processNeighbor].memsizeFs )); + checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborADX[processNeighbor].index ), parameter->getParD(lev)->recvProcessNeighborADX[processNeighbor].memsizeIndex )); + checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborADX[processNeighbor].f[0] ), 27 * parameter->getParD(lev)->recvProcessNeighborADX[processNeighbor].memsizeFs )); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// double tmp = (double)parameter->getParH(lev)->sendProcessNeighborADX[processNeighbor].memsizeIndex + - (double)parameter->getDiffMod()*(double)parameter->getParH(lev)->sendProcessNeighborADX[processNeighbor].memsizeFs + + (double)27.0*(double)parameter->getParH(lev)->sendProcessNeighborADX[processNeighbor].memsizeFs + (double)parameter->getParH(lev)->recvProcessNeighborADX[processNeighbor].memsizeIndex + - (double)parameter->getDiffMod()*(double)parameter->getParH(lev)->recvProcessNeighborADX[processNeighbor].memsizeFs; + (double)27.0*(double)parameter->getParH(lev)->recvProcessNeighborADX[processNeighbor].memsizeFs; setMemsizeGPU(tmp, false); //printf("memsize GPU for neighbors %f \n",tmp/1000000.0); } @@ -2883,14 +2778,14 @@ void CudaMemoryManager::cudaCopyProcessNeighborADXFsHD(int lev, unsigned int pro { checkCudaErrors( cudaMemcpy(parameter->getParD(lev)->recvProcessNeighborADX[processNeighbor].f[0], parameter->getParH(lev)->recvProcessNeighborADX[processNeighbor].f[0], - parameter->getDiffMod() * parameter->getParD(lev)->recvProcessNeighborADX[processNeighbor].memsizeFs, + 27 * parameter->getParD(lev)->recvProcessNeighborADX[processNeighbor].memsizeFs, cudaMemcpyHostToDevice)); } void CudaMemoryManager::cudaCopyProcessNeighborADXFsDH(int lev, unsigned int processNeighbor) { checkCudaErrors( cudaMemcpy(parameter->getParH(lev)->sendProcessNeighborADX[processNeighbor].f[0], parameter->getParD(lev)->sendProcessNeighborADX[processNeighbor].f[0], - parameter->getDiffMod() * parameter->getParD(lev)->sendProcessNeighborADX[processNeighbor].memsizeFs, + 27 * parameter->getParD(lev)->sendProcessNeighborADX[processNeighbor].memsizeFs, cudaMemcpyDeviceToHost)); } void CudaMemoryManager::cudaFreeProcessNeighborADX(int lev, unsigned int processNeighbor) @@ -2904,23 +2799,23 @@ void CudaMemoryManager::cudaFreeProcessNeighborADX(int lev, unsigned int process void CudaMemoryManager::cudaAllocProcessNeighborADY(int lev, unsigned int processNeighbor) { //Host - checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].index ), parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].memsizeIndex )); - checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].f[0] ), parameter->getDiffMod() * parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].memsizeFs )); - checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].index ), parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].memsizeIndex )); - checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].f[0] ), parameter->getDiffMod() * parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].memsizeFs )); + checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].index ), parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].memsizeIndex )); + checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].f[0] ), 27 * parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].memsizeFs )); + checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].index ), parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].memsizeIndex )); + checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].f[0] ), 27 * parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].memsizeFs )); //Device - checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborADY[processNeighbor].index ), parameter->getParD(lev)->sendProcessNeighborADY[processNeighbor].memsizeIndex )); - checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborADY[processNeighbor].f[0] ), parameter->getDiffMod() * parameter->getParD(lev)->sendProcessNeighborADY[processNeighbor].memsizeFs )); - checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborADY[processNeighbor].index ), parameter->getParD(lev)->recvProcessNeighborADY[processNeighbor].memsizeIndex )); - checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborADY[processNeighbor].f[0] ), parameter->getDiffMod() * parameter->getParD(lev)->recvProcessNeighborADY[processNeighbor].memsizeFs )); + checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborADY[processNeighbor].index ), parameter->getParD(lev)->sendProcessNeighborADY[processNeighbor].memsizeIndex )); + checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborADY[processNeighbor].f[0] ), 27 * parameter->getParD(lev)->sendProcessNeighborADY[processNeighbor].memsizeFs )); + checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborADY[processNeighbor].index ), parameter->getParD(lev)->recvProcessNeighborADY[processNeighbor].memsizeIndex )); + checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborADY[processNeighbor].f[0] ), 27 * parameter->getParD(lev)->recvProcessNeighborADY[processNeighbor].memsizeFs )); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// double tmp = (double)parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].memsizeIndex + - (double)parameter->getDiffMod()*(double)parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].memsizeFs + + (double)27.0*(double)parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].memsizeFs + (double)parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].memsizeIndex + - (double)parameter->getDiffMod()*(double)parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].memsizeFs; + (double)27.0*(double)parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].memsizeFs; setMemsizeGPU(tmp, false); //printf("memsize GPU for neighbors %f \n",tmp/1000000.0); } @@ -2941,14 +2836,14 @@ void CudaMemoryManager::cudaCopyProcessNeighborADYFsHD(int lev, unsigned int pro { checkCudaErrors( cudaMemcpy(parameter->getParD(lev)->recvProcessNeighborADY[processNeighbor].f[0], parameter->getParH(lev)->recvProcessNeighborADY[processNeighbor].f[0], - parameter->getDiffMod() * parameter->getParD(lev)->recvProcessNeighborADY[processNeighbor].memsizeFs, + 27 * parameter->getParD(lev)->recvProcessNeighborADY[processNeighbor].memsizeFs, cudaMemcpyHostToDevice)); } void CudaMemoryManager::cudaCopyProcessNeighborADYFsDH(int lev, unsigned int processNeighbor) { checkCudaErrors( cudaMemcpy(parameter->getParH(lev)->sendProcessNeighborADY[processNeighbor].f[0], parameter->getParD(lev)->sendProcessNeighborADY[processNeighbor].f[0], - parameter->getDiffMod() * parameter->getParD(lev)->sendProcessNeighborADY[processNeighbor].memsizeFs, + 27 * parameter->getParD(lev)->sendProcessNeighborADY[processNeighbor].memsizeFs, cudaMemcpyDeviceToHost)); } void CudaMemoryManager::cudaFreeProcessNeighborADY(int lev, unsigned int processNeighbor) @@ -2962,23 +2857,23 @@ void CudaMemoryManager::cudaFreeProcessNeighborADY(int lev, unsigned int process void CudaMemoryManager::cudaAllocProcessNeighborADZ(int lev, unsigned int processNeighbor) { //Host - checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].index ), parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].memsizeIndex )); - checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].f[0] ), parameter->getDiffMod() * parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].memsizeFs )); - checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].index ), parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].memsizeIndex )); - checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].f[0] ), parameter->getDiffMod() * parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].memsizeFs )); + checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].index ), parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].memsizeIndex )); + checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].f[0] ), 27 * parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].memsizeFs )); + checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].index ), parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].memsizeIndex )); + checkCudaErrors( cudaMallocHost((void**) &(parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].f[0] ), 27 * parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].memsizeFs )); //Device - checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborADZ[processNeighbor].index ), parameter->getParD(lev)->sendProcessNeighborADZ[processNeighbor].memsizeIndex )); - checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborADZ[processNeighbor].f[0] ), parameter->getDiffMod() * parameter->getParD(lev)->sendProcessNeighborADZ[processNeighbor].memsizeFs )); - checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborADZ[processNeighbor].index ), parameter->getParD(lev)->recvProcessNeighborADZ[processNeighbor].memsizeIndex )); - checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborADZ[processNeighbor].f[0] ), parameter->getDiffMod() * parameter->getParD(lev)->recvProcessNeighborADZ[processNeighbor].memsizeFs )); + checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborADZ[processNeighbor].index ), parameter->getParD(lev)->sendProcessNeighborADZ[processNeighbor].memsizeIndex )); + checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->sendProcessNeighborADZ[processNeighbor].f[0] ), 27 * parameter->getParD(lev)->sendProcessNeighborADZ[processNeighbor].memsizeFs )); + checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborADZ[processNeighbor].index ), parameter->getParD(lev)->recvProcessNeighborADZ[processNeighbor].memsizeIndex )); + checkCudaErrors( cudaMalloc((void**) &(parameter->getParD(lev)->recvProcessNeighborADZ[processNeighbor].f[0] ), 27 * parameter->getParD(lev)->recvProcessNeighborADZ[processNeighbor].memsizeFs )); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// double tmp = (double)parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].memsizeIndex + - (double)parameter->getDiffMod()*(double)parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].memsizeFs + + (double)27.0*(double)parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].memsizeFs + (double)parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].memsizeIndex + - (double)parameter->getDiffMod()*(double)parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].memsizeFs; + (double)27.0*(double)parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].memsizeFs; setMemsizeGPU(tmp, false); //printf("memsize GPU for neighbors %f \n",tmp/1000000.0); } @@ -2999,14 +2894,14 @@ void CudaMemoryManager::cudaCopyProcessNeighborADZFsHD(int lev, unsigned int pro { checkCudaErrors( cudaMemcpy(parameter->getParD(lev)->recvProcessNeighborADZ[processNeighbor].f[0], parameter->getParH(lev)->recvProcessNeighborADZ[processNeighbor].f[0], - parameter->getDiffMod() * parameter->getParD(lev)->recvProcessNeighborADZ[processNeighbor].memsizeFs, + 27 * parameter->getParD(lev)->recvProcessNeighborADZ[processNeighbor].memsizeFs, cudaMemcpyHostToDevice)); } void CudaMemoryManager::cudaCopyProcessNeighborADZFsDH(int lev, unsigned int processNeighbor) { checkCudaErrors( cudaMemcpy(parameter->getParH(lev)->sendProcessNeighborADZ[processNeighbor].f[0], parameter->getParD(lev)->sendProcessNeighborADZ[processNeighbor].f[0], - parameter->getDiffMod() * parameter->getParD(lev)->sendProcessNeighborADZ[processNeighbor].memsizeFs, + 27 * parameter->getParD(lev)->sendProcessNeighborADZ[processNeighbor].memsizeFs, cudaMemcpyDeviceToHost)); } void CudaMemoryManager::cudaFreeProcessNeighborADZ(int lev, unsigned int processNeighbor) diff --git a/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h b/src/gpu/core/GPU/CudaMemoryManager.h similarity index 98% rename from src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h rename to src/gpu/core/GPU/CudaMemoryManager.h index 1d01c227e780ec564b9eb1506f1a0183769d64b9..77de5b8a82e4c461d66eb261cd2e2f6b8fcc8ec5 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/CudaMemoryManager.h +++ b/src/gpu/core/GPU/CudaMemoryManager.h @@ -4,8 +4,7 @@ #include <vector> #include <string> #include <memory> -#include "PointerDefinitions.h" -#include "VirtualFluids_GPU_export.h" +#include <basics/PointerDefinitions.h> #include "LBM/LB.h" #include "lbm/constants/D3Q27.h" @@ -25,13 +24,12 @@ #endif class Parameter; -class PorousMedia; class ActuatorFarm; class Probe; class VelocitySetter; class PrecursorWriter; -class VIRTUALFLUIDS_GPU_EXPORT CudaMemoryManager +class CudaMemoryManager { public: CudaMemoryManager(std::shared_ptr<Parameter> parameter); @@ -303,10 +301,6 @@ public: void cudaAllocRandomValues(); - void cudaAllocPorousMedia(PorousMedia* pm, int lev); - void cudaCopyPorousMedia(PorousMedia* pm, int lev); - void cudaFreePorousMedia(PorousMedia* pm, int lev); - void cudaAllocConcentration(int lev); void cudaCopyConcentrationDeviceToHost(int lev); void cudaCopyConcentrationHostToDevice(int lev); diff --git a/src/gpu/VirtualFluids_GPU/GPU/DragLift27.cu b/src/gpu/core/GPU/DragLift27.cu similarity index 58% rename from src/gpu/VirtualFluids_GPU/GPU/DragLift27.cu rename to src/gpu/core/GPU/DragLift27.cu index d1fc15a6b7a8f73083b41b926ce58916bdf61b59..e4dbb955489113b33804dcf1dfe64ade72b7826b 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/DragLift27.cu +++ b/src/gpu/core/GPU/DragLift27.cu @@ -23,63 +23,63 @@ __global__ void DragLiftPost27( real* DD, Distributions27 D; if (isEvenTimestep==true) { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; + 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[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; + 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]; } //////////////////////////////////////////////////////////////////////////////// const unsigned x = threadIdx.x; // Globaler x-Index @@ -100,32 +100,32 @@ __global__ void DragLiftPost27( real* DD, *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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes]; + 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]; @@ -160,32 +160,32 @@ __global__ void DragLiftPost27( real* DD, 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[DIR_P00])[ke ]; - f_E = (D.f[DIR_M00])[kw ]; - f_S = (D.f[DIR_0P0])[kn ]; - f_N = (D.f[DIR_0M0])[ks ]; - f_B = (D.f[DIR_00P])[kt ]; - f_T = (D.f[DIR_00M])[kb ]; - f_SW = (D.f[DIR_PP0])[kne ]; - f_NE = (D.f[DIR_MM0])[ksw ]; - f_NW = (D.f[DIR_PM0])[kse ]; - f_SE = (D.f[DIR_MP0])[knw ]; - f_BW = (D.f[DIR_P0P])[kte ]; - f_TE = (D.f[DIR_M0M])[kbw ]; - f_TW = (D.f[DIR_P0M])[kbe ]; - f_BE = (D.f[DIR_M0P])[ktw ]; - f_BS = (D.f[DIR_0PP])[ktn ]; - f_TN = (D.f[DIR_0MM])[kbs ]; - f_TS = (D.f[DIR_0PM])[kbn ]; - f_BN = (D.f[DIR_0MP])[kts ]; - f_BSW = (D.f[DIR_PPP])[ktne ]; - f_BNE = (D.f[DIR_MMP])[ktsw ]; - f_BNW = (D.f[DIR_PMP])[ktse ]; - f_BSE = (D.f[DIR_MPP])[ktnw ]; - f_TSW = (D.f[DIR_PPM])[kbne ]; - f_TNE = (D.f[DIR_MMM])[kbsw ]; - f_TNW = (D.f[DIR_PMM])[kbse ]; - f_TSE = (D.f[DIR_MPM])[kbnw ]; + 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 ]; //////////////////////////////////////////////////////////////////////////////// double OnE = c0o1, OnW = c0o1, OnN = c0o1, OnS = c0o1, OnT = c0o1, OnB = c0o1, OnNE = c0o1, OnSW = c0o1, OnSE = c0o1, OnNW = c0o1, @@ -288,63 +288,63 @@ __global__ void DragLiftPre27( real* DD, Distributions27 D; if (isEvenTimestep==true) { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; + 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[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; + 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]; } //////////////////////////////////////////////////////////////////////////////// const unsigned x = threadIdx.x; // Globaler x-Index @@ -365,32 +365,32 @@ __global__ void DragLiftPre27( real* DD, *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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes]; + 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]; @@ -425,32 +425,32 @@ __global__ void DragLiftPre27( real* DD, 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_E = (D.f[DIR_P00])[ke ]; - f_W = (D.f[DIR_M00])[kw ]; - f_N = (D.f[DIR_0P0])[kn ]; - f_S = (D.f[DIR_0M0])[ks ]; - f_T = (D.f[DIR_00P])[kt ]; - f_B = (D.f[DIR_00M])[kb ]; - f_NE = (D.f[DIR_PP0])[kne ]; - f_SW = (D.f[DIR_MM0])[ksw ]; - f_SE = (D.f[DIR_PM0])[kse ]; - f_NW = (D.f[DIR_MP0])[knw ]; - f_TE = (D.f[DIR_P0P])[kte ]; - f_BW = (D.f[DIR_M0M])[kbw ]; - f_BE = (D.f[DIR_P0M])[kbe ]; - f_TW = (D.f[DIR_M0P])[ktw ]; - f_TN = (D.f[DIR_0PP])[ktn ]; - f_BS = (D.f[DIR_0MM])[kbs ]; - f_BN = (D.f[DIR_0PM])[kbn ]; - f_TS = (D.f[DIR_0MP])[kts ]; - f_TNE = (D.f[DIR_PPP])[ktne ]; - f_TSW = (D.f[DIR_MMP])[ktsw ]; - f_TSE = (D.f[DIR_PMP])[ktse ]; - f_TNW = (D.f[DIR_MPP])[ktnw ]; - f_BNE = (D.f[DIR_PPM])[kbne ]; - f_BSW = (D.f[DIR_MMM])[kbsw ]; - f_BSE = (D.f[DIR_PMM])[kbse ]; - f_BNW = (D.f[DIR_MPM])[kbnw ]; + f_E = (D.f[dP00])[ke ]; + f_W = (D.f[dM00])[kw ]; + f_N = (D.f[d0P0])[kn ]; + f_S = (D.f[d0M0])[ks ]; + f_T = (D.f[d00P])[kt ]; + f_B = (D.f[d00M])[kb ]; + f_NE = (D.f[dPP0])[kne ]; + f_SW = (D.f[dMM0])[ksw ]; + f_SE = (D.f[dPM0])[kse ]; + f_NW = (D.f[dMP0])[knw ]; + f_TE = (D.f[dP0P])[kte ]; + f_BW = (D.f[dM0M])[kbw ]; + f_BE = (D.f[dP0M])[kbe ]; + f_TW = (D.f[dM0P])[ktw ]; + f_TN = (D.f[d0PP])[ktn ]; + f_BS = (D.f[d0MM])[kbs ]; + f_BN = (D.f[d0PM])[kbn ]; + f_TS = (D.f[d0MP])[kts ]; + f_TNE = (D.f[dPPP])[ktne ]; + f_TSW = (D.f[dMMP])[ktsw ]; + f_TSE = (D.f[dPMP])[ktse ]; + f_TNW = (D.f[dMPP])[ktnw ]; + f_BNE = (D.f[dPPM])[kbne ]; + f_BSW = (D.f[dMMM])[kbsw ]; + f_BSE = (D.f[dPMM])[kbse ]; + f_BNW = (D.f[dMPM])[kbnw ]; //////////////////////////////////////////////////////////////////////////////// double OnE = c0o1, OnW = c0o1, OnN = c0o1, OnS = c0o1, OnT = c0o1, OnB = c0o1, OnNE = c0o1, OnSW = c0o1, OnSE = c0o1, OnNW = c0o1, diff --git a/src/gpu/VirtualFluids_GPU/GPU/EnstrophyAnalyzer.cu b/src/gpu/core/GPU/EnstrophyAnalyzer.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/GPU/EnstrophyAnalyzer.cu rename to src/gpu/core/GPU/EnstrophyAnalyzer.cu diff --git a/src/gpu/VirtualFluids_GPU/GPU/EnstrophyAnalyzer.h b/src/gpu/core/GPU/EnstrophyAnalyzer.h similarity index 72% rename from src/gpu/VirtualFluids_GPU/GPU/EnstrophyAnalyzer.h rename to src/gpu/core/GPU/EnstrophyAnalyzer.h index ab5c52e77cd4c028e044bfd6ec4b25b974f80ee2..dd633a5375a75dc66ff19d933fc9af81bf0b1a5a 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/EnstrophyAnalyzer.h +++ b/src/gpu/core/GPU/EnstrophyAnalyzer.h @@ -6,13 +6,13 @@ -#include "PointerDefinitions.h" -#include "DataTypes.h" -#include "VirtualFluids_GPU_export.h" +#include <basics/PointerDefinitions.h> +#include <basics/DataTypes.h> + class Parameter; -class VIRTUALFLUIDS_GPU_EXPORT EnstrophyAnalyzer +class EnstrophyAnalyzer { private: diff --git a/src/gpu/core/GPU/ExchangeData27.cu b/src/gpu/core/GPU/ExchangeData27.cu new file mode 100644 index 0000000000000000000000000000000000000000..e0d13773b8c38d276cec5ffdd6f6dc0fb19465eb --- /dev/null +++ b/src/gpu/core/GPU/ExchangeData27.cu @@ -0,0 +1,1072 @@ +/* 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 getSendFsPost27(real* DD, + real* bufferFs, + int* sendIndex, + int buffmax, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //////////////////////////////////////////////////////////////////////////////// + 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<buffmax) + { + //////////////////////////////////////////////////////////////////////////////// + //set index + unsigned int kIndex = sendIndex[k]; + unsigned int kzero = kIndex; + unsigned int ke = kIndex; + unsigned int kw = neighborX[kIndex]; + unsigned int kn = kIndex; + unsigned int ks = neighborY[kIndex]; + unsigned int kt = kIndex; + unsigned int kb = neighborZ[kIndex]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = kIndex; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = kIndex; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = kIndex; + 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 = kIndex; + unsigned int kbsw = neighborZ[ksw]; + //////////////////////////////////////////////////////////////////////////////// + //set Pointer for Fs + 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]; + } + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //set Pointer for Buffer Fs + Distributions27 Dbuff; + Dbuff.f[dP00] = &bufferFs[dP00 * buffmax]; + Dbuff.f[dM00] = &bufferFs[dM00 * buffmax]; + Dbuff.f[d0P0] = &bufferFs[d0P0 * buffmax]; + Dbuff.f[d0M0] = &bufferFs[d0M0 * buffmax]; + Dbuff.f[d00P] = &bufferFs[d00P * buffmax]; + Dbuff.f[d00M] = &bufferFs[d00M * buffmax]; + Dbuff.f[dPP0] = &bufferFs[dPP0 * buffmax]; + Dbuff.f[dMM0] = &bufferFs[dMM0 * buffmax]; + Dbuff.f[dPM0] = &bufferFs[dPM0 * buffmax]; + Dbuff.f[dMP0] = &bufferFs[dMP0 * buffmax]; + Dbuff.f[dP0P] = &bufferFs[dP0P * buffmax]; + Dbuff.f[dM0M] = &bufferFs[dM0M * buffmax]; + Dbuff.f[dP0M] = &bufferFs[dP0M * buffmax]; + Dbuff.f[dM0P] = &bufferFs[dM0P * buffmax]; + Dbuff.f[d0PP] = &bufferFs[d0PP * buffmax]; + Dbuff.f[d0MM] = &bufferFs[d0MM * buffmax]; + Dbuff.f[d0PM] = &bufferFs[d0PM * buffmax]; + Dbuff.f[d0MP] = &bufferFs[d0MP * buffmax]; + Dbuff.f[d000] = &bufferFs[d000 * buffmax]; + Dbuff.f[dPPP] = &bufferFs[dPPP * buffmax]; + Dbuff.f[dMMP] = &bufferFs[dMMP * buffmax]; + Dbuff.f[dPMP] = &bufferFs[dPMP * buffmax]; + Dbuff.f[dMPP] = &bufferFs[dMPP * buffmax]; + Dbuff.f[dPPM] = &bufferFs[dPPM * buffmax]; + Dbuff.f[dMMM] = &bufferFs[dMMM * buffmax]; + Dbuff.f[dPMM] = &bufferFs[dPMM * buffmax]; + Dbuff.f[dMPM] = &bufferFs[dMPM * buffmax]; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //copy to buffer + //(Dbuff.f[dP00])[k] = (D.f[dP00])[ke ]; + //(Dbuff.f[dM00])[k] = (D.f[dM00])[kw ]; + //(Dbuff.f[d0P0])[k] = (D.f[d0P0])[kn ]; + //(Dbuff.f[d0M0])[k] = (D.f[d0M0])[ks ]; + //(Dbuff.f[d00P])[k] = (D.f[d00P])[kt ]; + //(Dbuff.f[d00M])[k] = (D.f[d00M])[kb ]; + //(Dbuff.f[dPP0])[k] = (D.f[dPP0])[kne ]; + //(Dbuff.f[dMM0])[k] = (D.f[dMM0])[ksw ]; + //(Dbuff.f[dPM0])[k] = (D.f[dPM0])[kse ]; + //(Dbuff.f[dMP0])[k] = (D.f[dMP0])[knw ]; + //(Dbuff.f[dP0P])[k] = (D.f[dP0P])[kte ]; + //(Dbuff.f[dM0M])[k] = (D.f[dM0M])[kbw ]; + //(Dbuff.f[dP0M])[k] = (D.f[dP0M])[kbe ]; + //(Dbuff.f[dM0P])[k] = (D.f[dM0P])[ktw ]; + //(Dbuff.f[d0PP])[k] = (D.f[d0PP])[ktn ]; + //(Dbuff.f[d0MM])[k] = (D.f[d0MM])[kbs ]; + //(Dbuff.f[d0PM])[k] = (D.f[d0PM])[kbn ]; + //(Dbuff.f[d0MP])[k] = (D.f[d0MP])[kts ]; + //(Dbuff.f[d000])[k] = (D.f[d000])[kzero]; + //(Dbuff.f[dPPP])[k] = (D.f[dPPP])[ktne ]; + //(Dbuff.f[dMMP])[k] = (D.f[dMMP])[ktsw ]; + //(Dbuff.f[dPMP])[k] = (D.f[dPMP])[ktse ]; + //(Dbuff.f[dMPP])[k] = (D.f[dMPP])[ktnw ]; + //(Dbuff.f[dPPM])[k] = (D.f[dPPM])[kbne ]; + //(Dbuff.f[dMMM])[k] = (D.f[dMMM])[kbsw ]; + //(Dbuff.f[dPMM])[k] = (D.f[dPMM])[kbse ]; + //(Dbuff.f[dMPM])[k] = (D.f[dMPM])[kbnw ]; + (Dbuff.f[dP00])[k] = (D.f[dM00])[kw ]; + (Dbuff.f[dM00])[k] = (D.f[dP00])[ke ]; + (Dbuff.f[d0P0])[k] = (D.f[d0M0])[ks ]; + (Dbuff.f[d0M0])[k] = (D.f[d0P0])[kn ]; + (Dbuff.f[d00P])[k] = (D.f[d00M])[kb ]; + (Dbuff.f[d00M])[k] = (D.f[d00P])[kt ]; + (Dbuff.f[dPP0])[k] = (D.f[dMM0])[ksw ]; + (Dbuff.f[dMM0])[k] = (D.f[dPP0])[kne ]; + (Dbuff.f[dPM0])[k] = (D.f[dMP0])[knw ]; + (Dbuff.f[dMP0])[k] = (D.f[dPM0])[kse ]; + (Dbuff.f[dP0P])[k] = (D.f[dM0M])[kbw ]; + (Dbuff.f[dM0M])[k] = (D.f[dP0P])[kte ]; + (Dbuff.f[dP0M])[k] = (D.f[dM0P])[ktw ]; + (Dbuff.f[dM0P])[k] = (D.f[dP0M])[kbe ]; + (Dbuff.f[d0PP])[k] = (D.f[d0MM])[kbs ]; + (Dbuff.f[d0MM])[k] = (D.f[d0PP])[ktn ]; + (Dbuff.f[d0PM])[k] = (D.f[d0MP])[kts ]; + (Dbuff.f[d0MP])[k] = (D.f[d0PM])[kbn ]; + (Dbuff.f[d000])[k] = (D.f[d000])[kzero]; + (Dbuff.f[dPPP])[k] = (D.f[dMMM])[kbsw ]; + (Dbuff.f[dMMP])[k] = (D.f[dPPM])[kbne ]; + (Dbuff.f[dPMP])[k] = (D.f[dMPM])[kbnw ]; + (Dbuff.f[dMPP])[k] = (D.f[dPMM])[kbse ]; + (Dbuff.f[dPPM])[k] = (D.f[dMMP])[ktsw ]; + (Dbuff.f[dMMM])[k] = (D.f[dPPP])[ktne ]; + (Dbuff.f[dPMM])[k] = (D.f[dMPP])[ktnw ]; + (Dbuff.f[dMPM])[k] = (D.f[dPMP])[ktse ]; + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +__global__ void setRecvFsPost27(real* DD, + real* bufferFs, + int* recvIndex, + int buffmax, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //////////////////////////////////////////////////////////////////////////////// + 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<buffmax) + { + //////////////////////////////////////////////////////////////////////////////// + //set index + unsigned int kIndex = recvIndex[k]; + unsigned int kzero = kIndex; + unsigned int ke = kIndex; + unsigned int kw = neighborX[kIndex]; + unsigned int kn = kIndex; + unsigned int ks = neighborY[kIndex]; + unsigned int kt = kIndex; + unsigned int kb = neighborZ[kIndex]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = kIndex; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = kIndex; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = kIndex; + 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 = kIndex; + unsigned int kbsw = neighborZ[ksw]; + //////////////////////////////////////////////////////////////////////////////// + //set Pointer for Fs + 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]; + } + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //set Pointer for Buffer Fs + Distributions27 Dbuff; + Dbuff.f[dP00] = &bufferFs[dP00 * buffmax]; + Dbuff.f[dM00] = &bufferFs[dM00 * buffmax]; + Dbuff.f[d0P0] = &bufferFs[d0P0 * buffmax]; + Dbuff.f[d0M0] = &bufferFs[d0M0 * buffmax]; + Dbuff.f[d00P] = &bufferFs[d00P * buffmax]; + Dbuff.f[d00M] = &bufferFs[d00M * buffmax]; + Dbuff.f[dPP0] = &bufferFs[dPP0 * buffmax]; + Dbuff.f[dMM0] = &bufferFs[dMM0 * buffmax]; + Dbuff.f[dPM0] = &bufferFs[dPM0 * buffmax]; + Dbuff.f[dMP0] = &bufferFs[dMP0 * buffmax]; + Dbuff.f[dP0P] = &bufferFs[dP0P * buffmax]; + Dbuff.f[dM0M] = &bufferFs[dM0M * buffmax]; + Dbuff.f[dP0M] = &bufferFs[dP0M * buffmax]; + Dbuff.f[dM0P] = &bufferFs[dM0P * buffmax]; + Dbuff.f[d0PP] = &bufferFs[d0PP * buffmax]; + Dbuff.f[d0MM] = &bufferFs[d0MM * buffmax]; + Dbuff.f[d0PM] = &bufferFs[d0PM * buffmax]; + Dbuff.f[d0MP] = &bufferFs[d0MP * buffmax]; + Dbuff.f[d000] = &bufferFs[d000 * buffmax]; + Dbuff.f[dPPP] = &bufferFs[dPPP * buffmax]; + Dbuff.f[dMMP] = &bufferFs[dMMP * buffmax]; + Dbuff.f[dPMP] = &bufferFs[dPMP * buffmax]; + Dbuff.f[dMPP] = &bufferFs[dMPP * buffmax]; + Dbuff.f[dPPM] = &bufferFs[dPPM * buffmax]; + Dbuff.f[dMMM] = &bufferFs[dMMM * buffmax]; + Dbuff.f[dPMM] = &bufferFs[dPMM * buffmax]; + Dbuff.f[dMPM] = &bufferFs[dMPM * buffmax]; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //copy from buffer + //(D.f[dP00])[ke ] = (Dbuff.f[dP00])[k]; + //(D.f[dM00])[kw ] = (Dbuff.f[dM00])[k]; + //(D.f[d0P0])[kn ] = (Dbuff.f[d0P0])[k]; + //(D.f[d0M0])[ks ] = (Dbuff.f[d0M0])[k]; + //(D.f[d00P])[kt ] = (Dbuff.f[d00P])[k]; + //(D.f[d00M])[kb ] = (Dbuff.f[d00M])[k]; + //(D.f[dPP0])[kne ] = (Dbuff.f[dPP0])[k]; + //(D.f[dMM0])[ksw ] = (Dbuff.f[dMM0])[k]; + //(D.f[dPM0])[kse ] = (Dbuff.f[dPM0])[k]; + //(D.f[dMP0])[knw ] = (Dbuff.f[dMP0])[k]; + //(D.f[dP0P])[kte ] = (Dbuff.f[dP0P])[k]; + //(D.f[dM0M])[kbw ] = (Dbuff.f[dM0M])[k]; + //(D.f[dP0M])[kbe ] = (Dbuff.f[dP0M])[k]; + //(D.f[dM0P])[ktw ] = (Dbuff.f[dM0P])[k]; + //(D.f[d0PP])[ktn ] = (Dbuff.f[d0PP])[k]; + //(D.f[d0MM])[kbs ] = (Dbuff.f[d0MM])[k]; + //(D.f[d0PM])[kbn ] = (Dbuff.f[d0PM])[k]; + //(D.f[d0MP])[kts ] = (Dbuff.f[d0MP])[k]; + //(D.f[d000])[kzero] = (Dbuff.f[d000])[k]; + //(D.f[dPPP])[ktne ] = (Dbuff.f[dPPP])[k]; + //(D.f[dMMP])[ktsw ] = (Dbuff.f[dMMP])[k]; + //(D.f[dPMP])[ktse ] = (Dbuff.f[dPMP])[k]; + //(D.f[dMPP])[ktnw ] = (Dbuff.f[dMPP])[k]; + //(D.f[dPPM])[kbne ] = (Dbuff.f[dPPM])[k]; + //(D.f[dMMM])[kbsw ] = (Dbuff.f[dMMM])[k]; + //(D.f[dPMM])[kbse ] = (Dbuff.f[dPMM])[k]; + //(D.f[dMPM])[kbnw ] = (Dbuff.f[dMPM])[k]; + (D.f[dM00])[kw ] = (Dbuff.f[dP00])[k]; + (D.f[dP00])[ke ] = (Dbuff.f[dM00])[k]; + (D.f[d0M0])[ks ] = (Dbuff.f[d0P0])[k]; + (D.f[d0P0])[kn ] = (Dbuff.f[d0M0])[k]; + (D.f[d00M])[kb ] = (Dbuff.f[d00P])[k]; + (D.f[d00P])[kt ] = (Dbuff.f[d00M])[k]; + (D.f[dMM0])[ksw ] = (Dbuff.f[dPP0])[k]; + (D.f[dPP0])[kne ] = (Dbuff.f[dMM0])[k]; + (D.f[dMP0])[knw ] = (Dbuff.f[dPM0])[k]; + (D.f[dPM0])[kse ] = (Dbuff.f[dMP0])[k]; + (D.f[dM0M])[kbw ] = (Dbuff.f[dP0P])[k]; + (D.f[dP0P])[kte ] = (Dbuff.f[dM0M])[k]; + (D.f[dM0P])[ktw ] = (Dbuff.f[dP0M])[k]; + (D.f[dP0M])[kbe ] = (Dbuff.f[dM0P])[k]; + (D.f[d0MM])[kbs ] = (Dbuff.f[d0PP])[k]; + (D.f[d0PP])[ktn ] = (Dbuff.f[d0MM])[k]; + (D.f[d0MP])[kts ] = (Dbuff.f[d0PM])[k]; + (D.f[d0PM])[kbn ] = (Dbuff.f[d0MP])[k]; + (D.f[d000])[kzero] = (Dbuff.f[d000])[k]; + (D.f[dMMM])[kbsw ] = (Dbuff.f[dPPP])[k]; + (D.f[dPPM])[kbne ] = (Dbuff.f[dMMP])[k]; + (D.f[dMPM])[kbnw ] = (Dbuff.f[dPMP])[k]; + (D.f[dPMM])[kbse ] = (Dbuff.f[dMPP])[k]; + (D.f[dMMP])[ktsw ] = (Dbuff.f[dPPM])[k]; + (D.f[dPPP])[ktne ] = (Dbuff.f[dMMM])[k]; + (D.f[dMPP])[ktnw ] = (Dbuff.f[dPMM])[k]; + (D.f[dPMP])[ktse ] = (Dbuff.f[dMPM])[k]; + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +__global__ void getSendFsPre27(real* DD, + real* bufferFs, + int* sendIndex, + int buffmax, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //////////////////////////////////////////////////////////////////////////////// + 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<buffmax) + { + //////////////////////////////////////////////////////////////////////////////// + //set index + unsigned int kIndex = sendIndex[k]; + unsigned int kzero = kIndex; + unsigned int ke = kIndex; + unsigned int kw = neighborX[kIndex]; + unsigned int kn = kIndex; + unsigned int ks = neighborY[kIndex]; + unsigned int kt = kIndex; + unsigned int kb = neighborZ[kIndex]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = kIndex; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = kIndex; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = kIndex; + 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 = kIndex; + unsigned int kbsw = neighborZ[ksw]; + //////////////////////////////////////////////////////////////////////////////// + //set Pointer for Fs + 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]; + } + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //set Pointer for Buffer Fs + Distributions27 Dbuff; + Dbuff.f[dP00] = &bufferFs[dP00 * buffmax]; + Dbuff.f[dM00] = &bufferFs[dM00 * buffmax]; + Dbuff.f[d0P0] = &bufferFs[d0P0 * buffmax]; + Dbuff.f[d0M0] = &bufferFs[d0M0 * buffmax]; + Dbuff.f[d00P] = &bufferFs[d00P * buffmax]; + Dbuff.f[d00M] = &bufferFs[d00M * buffmax]; + Dbuff.f[dPP0] = &bufferFs[dPP0 * buffmax]; + Dbuff.f[dMM0] = &bufferFs[dMM0 * buffmax]; + Dbuff.f[dPM0] = &bufferFs[dPM0 * buffmax]; + Dbuff.f[dMP0] = &bufferFs[dMP0 * buffmax]; + Dbuff.f[dP0P] = &bufferFs[dP0P * buffmax]; + Dbuff.f[dM0M] = &bufferFs[dM0M * buffmax]; + Dbuff.f[dP0M] = &bufferFs[dP0M * buffmax]; + Dbuff.f[dM0P] = &bufferFs[dM0P * buffmax]; + Dbuff.f[d0PP] = &bufferFs[d0PP * buffmax]; + Dbuff.f[d0MM] = &bufferFs[d0MM * buffmax]; + Dbuff.f[d0PM] = &bufferFs[d0PM * buffmax]; + Dbuff.f[d0MP] = &bufferFs[d0MP * buffmax]; + Dbuff.f[d000] = &bufferFs[d000 * buffmax]; + Dbuff.f[dPPP] = &bufferFs[dPPP * buffmax]; + Dbuff.f[dMMP] = &bufferFs[dMMP * buffmax]; + Dbuff.f[dPMP] = &bufferFs[dPMP * buffmax]; + Dbuff.f[dMPP] = &bufferFs[dMPP * buffmax]; + Dbuff.f[dPPM] = &bufferFs[dPPM * buffmax]; + Dbuff.f[dMMM] = &bufferFs[dMMM * buffmax]; + Dbuff.f[dPMM] = &bufferFs[dPMM * buffmax]; + Dbuff.f[dMPM] = &bufferFs[dMPM * buffmax]; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //copy to buffer + (Dbuff.f[dP00])[k] = (D.f[dP00])[ke ]; + (Dbuff.f[dM00])[k] = (D.f[dM00])[kw ]; + (Dbuff.f[d0P0])[k] = (D.f[d0P0])[kn ]; + (Dbuff.f[d0M0])[k] = (D.f[d0M0])[ks ]; + (Dbuff.f[d00P])[k] = (D.f[d00P])[kt ]; + (Dbuff.f[d00M])[k] = (D.f[d00M])[kb ]; + (Dbuff.f[dPP0])[k] = (D.f[dPP0])[kne ]; + (Dbuff.f[dMM0])[k] = (D.f[dMM0])[ksw ]; + (Dbuff.f[dPM0])[k] = (D.f[dPM0])[kse ]; + (Dbuff.f[dMP0])[k] = (D.f[dMP0])[knw ]; + (Dbuff.f[dP0P])[k] = (D.f[dP0P])[kte ]; + (Dbuff.f[dM0M])[k] = (D.f[dM0M])[kbw ]; + (Dbuff.f[dP0M])[k] = (D.f[dP0M])[kbe ]; + (Dbuff.f[dM0P])[k] = (D.f[dM0P])[ktw ]; + (Dbuff.f[d0PP])[k] = (D.f[d0PP])[ktn ]; + (Dbuff.f[d0MM])[k] = (D.f[d0MM])[kbs ]; + (Dbuff.f[d0PM])[k] = (D.f[d0PM])[kbn ]; + (Dbuff.f[d0MP])[k] = (D.f[d0MP])[kts ]; + (Dbuff.f[d000])[k] = (D.f[d000])[kzero]; + (Dbuff.f[dPPP])[k] = (D.f[dPPP])[ktne ]; + (Dbuff.f[dMMP])[k] = (D.f[dMMP])[ktsw ]; + (Dbuff.f[dPMP])[k] = (D.f[dPMP])[ktse ]; + (Dbuff.f[dMPP])[k] = (D.f[dMPP])[ktnw ]; + (Dbuff.f[dPPM])[k] = (D.f[dPPM])[kbne ]; + (Dbuff.f[dMMM])[k] = (D.f[dMMM])[kbsw ]; + (Dbuff.f[dPMM])[k] = (D.f[dPMM])[kbse ]; + (Dbuff.f[dMPM])[k] = (D.f[dMPM])[kbnw ]; + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +__global__ void setRecvFsPre27(real* DD, + real* bufferFs, + int* recvIndex, + int buffmax, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //////////////////////////////////////////////////////////////////////////////// + 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<buffmax) + { + //////////////////////////////////////////////////////////////////////////////// + //set index + unsigned int kIndex = recvIndex[k]; + unsigned int kzero = kIndex; + unsigned int ke = kIndex; + unsigned int kw = neighborX[kIndex]; + unsigned int kn = kIndex; + unsigned int ks = neighborY[kIndex]; + unsigned int kt = kIndex; + unsigned int kb = neighborZ[kIndex]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = kIndex; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = kIndex; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = kIndex; + 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 = kIndex; + unsigned int kbsw = neighborZ[ksw]; + //////////////////////////////////////////////////////////////////////////////// + //set Pointer for Fs + 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]; + } + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //set Pointer for Buffer Fs + Distributions27 Dbuff; + Dbuff.f[dP00] = &bufferFs[dP00 * buffmax]; + Dbuff.f[dM00] = &bufferFs[dM00 * buffmax]; + Dbuff.f[d0P0] = &bufferFs[d0P0 * buffmax]; + Dbuff.f[d0M0] = &bufferFs[d0M0 * buffmax]; + Dbuff.f[d00P] = &bufferFs[d00P * buffmax]; + Dbuff.f[d00M] = &bufferFs[d00M * buffmax]; + Dbuff.f[dPP0] = &bufferFs[dPP0 * buffmax]; + Dbuff.f[dMM0] = &bufferFs[dMM0 * buffmax]; + Dbuff.f[dPM0] = &bufferFs[dPM0 * buffmax]; + Dbuff.f[dMP0] = &bufferFs[dMP0 * buffmax]; + Dbuff.f[dP0P] = &bufferFs[dP0P * buffmax]; + Dbuff.f[dM0M] = &bufferFs[dM0M * buffmax]; + Dbuff.f[dP0M] = &bufferFs[dP0M * buffmax]; + Dbuff.f[dM0P] = &bufferFs[dM0P * buffmax]; + Dbuff.f[d0PP] = &bufferFs[d0PP * buffmax]; + Dbuff.f[d0MM] = &bufferFs[d0MM * buffmax]; + Dbuff.f[d0PM] = &bufferFs[d0PM * buffmax]; + Dbuff.f[d0MP] = &bufferFs[d0MP * buffmax]; + Dbuff.f[d000] = &bufferFs[d000 * buffmax]; + Dbuff.f[dPPP] = &bufferFs[dPPP * buffmax]; + Dbuff.f[dMMP] = &bufferFs[dMMP * buffmax]; + Dbuff.f[dPMP] = &bufferFs[dPMP * buffmax]; + Dbuff.f[dMPP] = &bufferFs[dMPP * buffmax]; + Dbuff.f[dPPM] = &bufferFs[dPPM * buffmax]; + Dbuff.f[dMMM] = &bufferFs[dMMM * buffmax]; + Dbuff.f[dPMM] = &bufferFs[dPMM * buffmax]; + Dbuff.f[dMPM] = &bufferFs[dMPM * buffmax]; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //copy from buffer + (D.f[dP00])[ke ] = (Dbuff.f[dP00])[k]; + (D.f[dM00])[kw ] = (Dbuff.f[dM00])[k]; + (D.f[d0P0])[kn ] = (Dbuff.f[d0P0])[k]; + (D.f[d0M0])[ks ] = (Dbuff.f[d0M0])[k]; + (D.f[d00P])[kt ] = (Dbuff.f[d00P])[k]; + (D.f[d00M])[kb ] = (Dbuff.f[d00M])[k]; + (D.f[dPP0])[kne ] = (Dbuff.f[dPP0])[k]; + (D.f[dMM0])[ksw ] = (Dbuff.f[dMM0])[k]; + (D.f[dPM0])[kse ] = (Dbuff.f[dPM0])[k]; + (D.f[dMP0])[knw ] = (Dbuff.f[dMP0])[k]; + (D.f[dP0P])[kte ] = (Dbuff.f[dP0P])[k]; + (D.f[dM0M])[kbw ] = (Dbuff.f[dM0M])[k]; + (D.f[dP0M])[kbe ] = (Dbuff.f[dP0M])[k]; + (D.f[dM0P])[ktw ] = (Dbuff.f[dM0P])[k]; + (D.f[d0PP])[ktn ] = (Dbuff.f[d0PP])[k]; + (D.f[d0MM])[kbs ] = (Dbuff.f[d0MM])[k]; + (D.f[d0PM])[kbn ] = (Dbuff.f[d0PM])[k]; + (D.f[d0MP])[kts ] = (Dbuff.f[d0MP])[k]; + (D.f[d000])[kzero] = (Dbuff.f[d000])[k]; + (D.f[dPPP])[ktne ] = (Dbuff.f[dPPP])[k]; + (D.f[dMMP])[ktsw ] = (Dbuff.f[dMMP])[k]; + (D.f[dPMP])[ktse ] = (Dbuff.f[dPMP])[k]; + (D.f[dMPP])[ktnw ] = (Dbuff.f[dMPP])[k]; + (D.f[dPPM])[kbne ] = (Dbuff.f[dPPM])[k]; + (D.f[dMMM])[kbsw ] = (Dbuff.f[dMMM])[k]; + (D.f[dPMM])[kbse ] = (Dbuff.f[dPMM])[k]; + (D.f[dMPM])[kbnw ] = (Dbuff.f[dMPM])[k]; + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +__global__ void getSendGsF3( + real* G6, + real* bufferGs, + int* sendIndex, + int buffmax, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //////////////////////////////////////////////////////////////////////////////// + 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 < buffmax) + { + //////////////////////////////////////////////////////////////////////////////// + //set index + unsigned int kIndex = sendIndex[k]; + unsigned int kr = kIndex; + unsigned int kw = neighborX[kIndex]; + unsigned int ks = neighborY[kIndex]; + unsigned int kb = neighborZ[kIndex]; + //////////////////////////////////////////////////////////////////////////////// + //set Pointer for Gs + Distributions6 G; + if (isEvenTimestep) + { + G.g[dP00] = &G6[dP00 * numberOfLBnodes]; + G.g[dM00] = &G6[dM00 * numberOfLBnodes]; + G.g[d0P0] = &G6[d0P0 * numberOfLBnodes]; + G.g[d0M0] = &G6[d0M0 * numberOfLBnodes]; + G.g[d00P] = &G6[d00P * numberOfLBnodes]; + G.g[d00M] = &G6[d00M * numberOfLBnodes]; + } + else + { + G.g[dM00] = &G6[dP00 * numberOfLBnodes]; + G.g[dP00] = &G6[dM00 * numberOfLBnodes]; + G.g[d0M0] = &G6[d0P0 * numberOfLBnodes]; + G.g[d0P0] = &G6[d0M0 * numberOfLBnodes]; + G.g[d00M] = &G6[d00P * numberOfLBnodes]; + G.g[d00P] = &G6[d00M * numberOfLBnodes]; + } + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //set Pointer for Buffer Gs + Distributions6 Dbuff; + Dbuff.g[dP00] = &bufferGs[dP00 * buffmax]; + Dbuff.g[dM00] = &bufferGs[dM00 * buffmax]; + Dbuff.g[d0P0] = &bufferGs[d0P0 * buffmax]; + Dbuff.g[d0M0] = &bufferGs[d0M0 * buffmax]; + Dbuff.g[d00P] = &bufferGs[d00P * buffmax]; + Dbuff.g[d00M] = &bufferGs[d00M * buffmax]; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //write Gs to buffer + (Dbuff.g[dP00])[k] = (G.g[dM00])[kw]; + (Dbuff.g[dM00])[k] = (G.g[dP00])[kr]; + (Dbuff.g[d0P0])[k] = (G.g[d0M0])[ks]; + (Dbuff.g[d0M0])[k] = (G.g[d0P0])[kr]; + (Dbuff.g[d00P])[k] = (G.g[d00M])[kb]; + (Dbuff.g[d00M])[k] = (G.g[d00P])[kr]; + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +__global__ void setRecvGsF3( + real* G6, + real* bufferGs, + int* recvIndex, + int buffmax, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //////////////////////////////////////////////////////////////////////////////// + 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 < buffmax) + { + //////////////////////////////////////////////////////////////////////////////// + //set index + unsigned int kIndex = recvIndex[k]; + unsigned int kr = kIndex; + unsigned int kw = neighborX[kIndex]; + unsigned int ks = neighborY[kIndex]; + unsigned int kb = neighborZ[kIndex]; + //////////////////////////////////////////////////////////////////////////////// + //set Pointer for Gs + Distributions6 G; + if (isEvenTimestep) + { + G.g[dP00] = &G6[dP00 * numberOfLBnodes]; + G.g[dM00] = &G6[dM00 * numberOfLBnodes]; + G.g[d0P0] = &G6[d0P0 * numberOfLBnodes]; + G.g[d0M0] = &G6[d0M0 * numberOfLBnodes]; + G.g[d00P] = &G6[d00P * numberOfLBnodes]; + G.g[d00M] = &G6[d00M * numberOfLBnodes]; + } + else + { + G.g[dM00] = &G6[dP00 * numberOfLBnodes]; + G.g[dP00] = &G6[dM00 * numberOfLBnodes]; + G.g[d0M0] = &G6[d0P0 * numberOfLBnodes]; + G.g[d0P0] = &G6[d0M0 * numberOfLBnodes]; + G.g[d00M] = &G6[d00P * numberOfLBnodes]; + G.g[d00P] = &G6[d00M * numberOfLBnodes]; + } + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //set Pointer for Buffer Gs + Distributions6 Dbuff; + Dbuff.g[dP00] = &bufferGs[dP00 * buffmax]; + Dbuff.g[dM00] = &bufferGs[dM00 * buffmax]; + Dbuff.g[d0P0] = &bufferGs[d0P0 * buffmax]; + Dbuff.g[d0M0] = &bufferGs[d0M0 * buffmax]; + Dbuff.g[d00P] = &bufferGs[d00P * buffmax]; + Dbuff.g[d00M] = &bufferGs[d00M * buffmax]; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //write buffer to Gs + (G.g[dM00])[kw] = (Dbuff.g[dP00])[k]; + (G.g[dP00])[kr] = (Dbuff.g[dM00])[k]; + (G.g[d0M0])[ks] = (Dbuff.g[d0P0])[k]; + (G.g[d0P0])[kr] = (Dbuff.g[d0M0])[k]; + (G.g[d00M])[kb] = (Dbuff.g[d00P])[k]; + (G.g[d00P])[kr] = (Dbuff.g[d00M])[k]; + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/gpu/VirtualFluids_GPU/GPU/GPU_Interface.h b/src/gpu/core/GPU/GPU_Interface.h similarity index 89% rename from src/gpu/VirtualFluids_GPU/GPU/GPU_Interface.h rename to src/gpu/core/GPU/GPU_Interface.h index b449bcca404b54469b52f7b383f0615632c4d06d..ad2461f08292eaf33c45b770d23f8e0c0fcdc315 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/GPU_Interface.h +++ b/src/gpu/core/GPU/GPU_Interface.h @@ -30,245 +30,6 @@ class Parameter; ////////////////////////////////////////////////////////////////////////// //Kernel ////////////////////////////////////////////////////////////////////////// -void KernelCas27(unsigned int grid_nx, - unsigned int grid_ny, - unsigned int grid_nz, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -void KernelCasSP27(unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -void KernelCasSPMS27(unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -void KernelCasSPMSOHM27( unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -void KernelKumCompSRTSP27( - unsigned int numberOfThreads, - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd); - -void KernelCumulantD3Q27All4(unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd); - -void KernelKumAA2016CompBulkSP27(unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - int size_Array, - int level, - real* forces, - bool EvenOrOdd); - -void KernelKum1hSP27( unsigned int numberOfThreads, - real omega, - real deltaPhi, - real angularVelocity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* coordX, - real* coordY, - real* coordZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -void KernelCascadeSP27(unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -void KernelKumNewSP27( unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - - -void CumulantOnePreconditionedErrorDiffusionChimCompSP27( - unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - int size_Array, - int level, - real* forces, - bool EvenOrOdd); - -void CumulantOnePreconditionedChimCompSP27( - unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - int size_Array, - int level, - real* forces, - bool EvenOrOdd); - -void CumulantOneChimCompSP27( - unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - int size_Array, - int level, - real* forces, - bool EvenOrOdd); - - -void KernelKumIsoTestSP27(unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - real* dxxUx, - real* dyyUy, - real* dzzUz, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -void KernelKumCompSP27( unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -void KernelWaleBySoniMalavCumAA2016CompSP27( - unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* neighborWSB, - real* veloX, - real* veloY, - real* veloZ, - real* DD, - real* turbulentViscosity, - unsigned long long numberOfLBnodes, - int size_Array, - int level, - real* forces, - bool EvenOrOdd); - -void KernelPMCumOneCompSP27(unsigned int numberOfThreads, - real omega, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - int level, - real* forces, - real porosity, - real darcy, - real forchheimer, - unsigned int sizeOfPorousMedia, - unsigned int* nodeIdsPorousMedia, - bool EvenOrOdd); - -void KernelADincomp7( unsigned int numberOfThreads, - real diffusivity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - real* DD7, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -void KernelADincomp27( unsigned int numberOfThreads, - real diffusivity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - real* DD7, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - void Init27(int myid, int numprocs, real u0, @@ -301,19 +62,6 @@ void InitNonEqPartSP27(unsigned int numberOfThreads, bool EvenOrOdd); -void InitThS7( unsigned int numberOfThreads, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* geoD, - real* Conc, - real* ux, - real* uy, - real* uz, - unsigned long long numberOfLBnodes, - real* DD7, - bool EvenOrOdd); - void InitADDev27( unsigned int numberOfThreads, unsigned int* neighborX, unsigned int* neighborY, @@ -327,24 +75,6 @@ void InitADDev27( unsigned int numberOfThreads, real* DD27, bool EvenOrOdd); -void PostProcessorF3_2018Fehlberg( - unsigned int numberOfThreads, - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* rhoOut, - real* vxOut, - real* vyOut, - real* vzOut, - real* DDStart, - real* G6, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd); - void CalcMac27( real* vxD, real* vyD, real* vzD, @@ -1027,21 +757,6 @@ void QADDev7(unsigned int numberOfThreads, unsigned long long numberOfLBnodes, bool isEvenTimestep); -////////////////////////////////////////////////////////////////////////// -//! \brief Advection Diffusion kernel -void FactorizedCentralMomentsAdvectionDiffusionDeviceKernel( - uint numberOfThreads, - real omegaDiffusivity, - uint* typeOfGridNode, - uint* neighborX, - uint* neighborY, - uint* neighborZ, - real* distributions, - real* distributionsAD, - unsigned long long numberOfLBnodes, - real* forces, - bool isEvenTimestep); - ////////////////////////////////////////////////////////////////////////// //! \brief defines the behavior of a slip-AD boundary condition void ADSlipVelDevComp( diff --git a/src/gpu/VirtualFluids_GPU/GPU/GPU_Kernels.cuh b/src/gpu/core/GPU/GPU_Kernels.cuh similarity index 91% rename from src/gpu/VirtualFluids_GPU/GPU/GPU_Kernels.cuh rename to src/gpu/core/GPU/GPU_Kernels.cuh index 74ebf3bea73c221207d3dda7a6a2f29de083ffde..adcb99b96f78e9e53f6f2ec592ad03a5dc10ba45 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/GPU_Kernels.cuh +++ b/src/gpu/core/GPU/GPU_Kernels.cuh @@ -16,231 +16,6 @@ #include "LBM/LB.h" -__global__ void LB_Kernel_Casc27(real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -__global__ void LB_Kernel_Casc_SP_27( real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -__global__ void LB_Kernel_Casc_SP_MS_27( real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -__global__ void LB_Kernel_Casc_SP_MS_OHM_27( real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -__global__ void LB_Kernel_Kum_New_Comp_SRT_SP_27( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd); - -__global__ void K17CompressibleNavierStokesSecondDerivatesFrom5thCumulants_Device( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd); - - -__global__ void LB_Kernel_Kum_AA2016_Comp_Bulk_SP_27(real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd); - - - -__global__ void LB_Kernel_Kum_1h_SP_27( real omega, - real deltaPhi, - real angularVelocity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* coordX, - real* coordY, - real* coordZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -__global__ void LB_Kernel_Cascade_SP_27( real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -__global__ void LB_Kernel_Kum_New_SP_27( real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -__global__ void LB_Kernel_Kum_IsoTest_SP_27( real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - real* dxxUx, - real* dyyUy, - real* dzzUz, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -__global__ void LB_Kernel_Kum_Comp_SP_27(real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -__global__ void Cumulant_One_preconditioned_errorDiffusion_chim_Comp_SP_27( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd); - -__global__ void Cumulant_One_preconditioned_chim_Comp_SP_27( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd); - -__global__ void Cumulant_One_chim_Comp_SP_27( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd); - -inline __device__ void forwardChimeraWithK(real &mfa, real &mfb, real &mfc, real vv, real v2, real K); - -inline __device__ void forwardChimera(real &mfa, real &mfb, real &mfc, real vv, real v2); - -inline __device__ void backwardChimera(real &mfa, real &mfb, real &mfc, real vv, real v2); - -inline __device__ void backwardChimeraWithK(real &mfa, real &mfb, real &mfc, real vv, real v2, real K); - - - -__global__ void LB_Kernel_WaleBySoniMalav_Cum_AA2016_Comp_SP_27( - real omega_in, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* neighborWSB, - real* veloX, - real* veloY, - real* veloZ, - real* DDStart, - real* turbulentViscosity, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd); - - -__global__ void LB_Kernel_PM_Cum_One_Comp_SP_27( real omega, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - int level, - real* forces, - real porosity, - real darcy, - real forchheimer, - unsigned int sizeOfPorousMedia, - unsigned int* nodeIdsPorousMedia, - bool EvenOrOdd); - -__global__ void LB_Kernel_AD_Incomp_7( real diffusivity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - real* DD7, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); - -__global__ void LB_Kernel_AD_Incomp_27( real diffusivity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - real* DD27, - unsigned long long numberOfLBnodes, - bool EvenOrOdd); __global__ void LBInit27( int myid, int numprocs, @@ -272,18 +47,6 @@ __global__ void LBInitNonEqPartSP27(unsigned int* neighborX, real omega, bool EvenOrOdd); -__global__ void InitAD7( unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* geoD, - real* Conc, - real* ux, - real* uy, - real* uz, - unsigned long long numberOfLBnodes, - real* DD7, - bool EvenOrOdd); - __global__ void InitAD27(unsigned int* neighborX, unsigned int* neighborY, unsigned int* neighborZ, @@ -296,23 +59,6 @@ __global__ void InitAD27(unsigned int* neighborX, real* DD27, bool EvenOrOdd); -__global__ void LB_PostProcessor_F3_2018_Fehlberg( - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* rhoOut, - real* vxOut, - real* vyOut, - real* vzOut, - real* DDStart, - real* G6, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd); - __global__ void LBCalcMac27( real* vxD, real* vyD, real* vzD, @@ -1353,20 +1099,6 @@ __global__ void QAD7( real* DD, unsigned long long numberOfLBnodes, bool isEvenTimestep); -////////////////////////////////////////////////////////////////////////// -//! \brief \ref Advection_Diffusion_Device_Kernel : Factorized central moments for Advection Diffusion Equation -__global__ void Factorized_Central_Moments_Advection_Diffusion_Device_Kernel( - real omegaDiffusivity, - uint* typeOfGridNode, - uint* neighborX, - uint* neighborY, - uint* neighborZ, - real* distributions, - real* distributionsAD, - unsigned long long numberOfLBnodes, - real* forces, - bool isEvenTimestep); - ////////////////////////////////////////////////////////////////////////// //! \brief \ref AD_SlipVelDeviceComp : device function for the slip-AD boundary condition __global__ void AD_SlipVelDeviceComp( diff --git a/src/gpu/VirtualFluids_GPU/GPU/GeometryUtils.h b/src/gpu/core/GPU/GeometryUtils.h similarity index 99% rename from src/gpu/VirtualFluids_GPU/GPU/GeometryUtils.h rename to src/gpu/core/GPU/GeometryUtils.h index d312c826036c1b5d856da0f0ab52832ba89c2f57..37fe00b6b67e1376e79500f4430db47736f18c46 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/GeometryUtils.h +++ b/src/gpu/core/GPU/GeometryUtils.h @@ -1,9 +1,9 @@ #ifndef _GEOMETRYUTILS_H #define _GEOMETRYUTILS_H -#include "DataTypes.h" +#include <basics/DataTypes.h> -__inline__ __host__ __device__ void getNeighborIndicesOfBSW( uint k, //index of DIR_MMM node +__inline__ __host__ __device__ void getNeighborIndicesOfBSW( uint k, //index of dMMM node uint &ke, uint &kn, uint &kt, uint &kne, uint &kte,uint &ktn, uint &ktne, uint* neighborX, uint* neighborY, uint* neighborZ) { diff --git a/src/gpu/VirtualFluids_GPU/GPU/GeometryUtilsTest.cu b/src/gpu/core/GPU/GeometryUtilsTest.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/GPU/GeometryUtilsTest.cu rename to src/gpu/core/GPU/GeometryUtilsTest.cu diff --git a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleCF27.cu b/src/gpu/core/GPU/GridScaling/ScaleCF27.cu similarity index 96% rename from src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleCF27.cu rename to src/gpu/core/GPU/GridScaling/ScaleCF27.cu index 4c586faa2fa60fe2894d86f97c680c5f0f11087b..222e29ae624facc3727ca4249cd4723b9dea7c85 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleCF27.cu +++ b/src/gpu/core/GPU/GridScaling/ScaleCF27.cu @@ -43,33 +43,33 @@ __global__ void scaleCF_0817_comp_27( real* DC, *f000dest, *fMMMdest, *fMMPdest, *fMPPdest, *fMPMdest, *fPPMdest, *fPPPdest, *fPMPdest, *fPMMdest; - fP00dest = &DF[DIR_P00 * numberOfLBnodesFine]; - fM00dest = &DF[DIR_M00 * numberOfLBnodesFine]; - f0P0dest = &DF[DIR_0P0 * numberOfLBnodesFine]; - f0M0dest = &DF[DIR_0M0 * numberOfLBnodesFine]; - f00Pdest = &DF[DIR_00P * numberOfLBnodesFine]; - f00Mdest = &DF[DIR_00M * numberOfLBnodesFine]; - fPP0dest = &DF[DIR_PP0 * numberOfLBnodesFine]; - fMM0dest = &DF[DIR_MM0 * numberOfLBnodesFine]; - fPM0dest = &DF[DIR_PM0 * numberOfLBnodesFine]; - fMP0dest = &DF[DIR_MP0 * numberOfLBnodesFine]; - fP0Pdest = &DF[DIR_P0P * numberOfLBnodesFine]; - fM0Mdest = &DF[DIR_M0M * numberOfLBnodesFine]; - fP0Mdest = &DF[DIR_P0M * numberOfLBnodesFine]; - fM0Pdest = &DF[DIR_M0P * numberOfLBnodesFine]; - f0PPdest = &DF[DIR_0PP * numberOfLBnodesFine]; - f0MMdest = &DF[DIR_0MM * numberOfLBnodesFine]; - f0PMdest = &DF[DIR_0PM * numberOfLBnodesFine]; - f0MPdest = &DF[DIR_0MP * numberOfLBnodesFine]; - f000dest = &DF[DIR_000 * numberOfLBnodesFine]; - fMMMdest = &DF[DIR_MMM * numberOfLBnodesFine]; - fMMPdest = &DF[DIR_MMP * numberOfLBnodesFine]; - fMPPdest = &DF[DIR_MPP * numberOfLBnodesFine]; - fMPMdest = &DF[DIR_MPM * numberOfLBnodesFine]; - fPPMdest = &DF[DIR_PPM * numberOfLBnodesFine]; - fPPPdest = &DF[DIR_PPP * numberOfLBnodesFine]; - fPMPdest = &DF[DIR_PMP * numberOfLBnodesFine]; - fPMMdest = &DF[DIR_PMM * numberOfLBnodesFine]; + fP00dest = &DF[dP00 * numberOfLBnodesFine]; + fM00dest = &DF[dM00 * numberOfLBnodesFine]; + f0P0dest = &DF[d0P0 * numberOfLBnodesFine]; + f0M0dest = &DF[d0M0 * numberOfLBnodesFine]; + f00Pdest = &DF[d00P * numberOfLBnodesFine]; + f00Mdest = &DF[d00M * numberOfLBnodesFine]; + fPP0dest = &DF[dPP0 * numberOfLBnodesFine]; + fMM0dest = &DF[dMM0 * numberOfLBnodesFine]; + fPM0dest = &DF[dPM0 * numberOfLBnodesFine]; + fMP0dest = &DF[dMP0 * numberOfLBnodesFine]; + fP0Pdest = &DF[dP0P * numberOfLBnodesFine]; + fM0Mdest = &DF[dM0M * numberOfLBnodesFine]; + fP0Mdest = &DF[dP0M * numberOfLBnodesFine]; + fM0Pdest = &DF[dM0P * numberOfLBnodesFine]; + f0PPdest = &DF[d0PP * numberOfLBnodesFine]; + f0MMdest = &DF[d0MM * numberOfLBnodesFine]; + f0PMdest = &DF[d0PM * numberOfLBnodesFine]; + f0MPdest = &DF[d0MP * numberOfLBnodesFine]; + f000dest = &DF[d000 * numberOfLBnodesFine]; + fMMMdest = &DF[dMMM * numberOfLBnodesFine]; + fMMPdest = &DF[dMMP * numberOfLBnodesFine]; + fMPPdest = &DF[dMPP * numberOfLBnodesFine]; + fMPMdest = &DF[dMPM * numberOfLBnodesFine]; + fPPMdest = &DF[dPPM * numberOfLBnodesFine]; + fPPPdest = &DF[dPPP * numberOfLBnodesFine]; + fPMPdest = &DF[dPMP * numberOfLBnodesFine]; + fPMMdest = &DF[dPMM * numberOfLBnodesFine]; real *fP00source, *fM00source, *f0P0source, *f0M0source, *f00Psource, *f00Msource, *fPP0source, *fMM0source, *fPM0source, @@ -78,63 +78,63 @@ __global__ void scaleCF_0817_comp_27( real* DC, if (isEvenTimestep == true) { - fP00source = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fM00source = &DC[DIR_M00 * numberOfLBnodesCoarse]; - f0P0source = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - f0M0source = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - f00Psource = &DC[DIR_00P * numberOfLBnodesCoarse]; - f00Msource = &DC[DIR_00M * numberOfLBnodesCoarse]; - fPP0source = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fMM0source = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fPM0source = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fMP0source = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fP0Psource = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fM0Msource = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fP0Msource = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fM0Psource = &DC[DIR_M0P * numberOfLBnodesCoarse]; - f0PPsource = &DC[DIR_0PP * numberOfLBnodesCoarse]; - f0MMsource = &DC[DIR_0MM * numberOfLBnodesCoarse]; - f0PMsource = &DC[DIR_0PM * numberOfLBnodesCoarse]; - f0MPsource = &DC[DIR_0MP * numberOfLBnodesCoarse]; - f000source = &DC[DIR_000 * numberOfLBnodesCoarse]; - fMMMsource = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fMMPsource = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fMPPsource = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fMPMsource = &DC[DIR_MPM * numberOfLBnodesCoarse]; - fPPMsource = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fPPPsource = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fPMPsource = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fPMMsource = &DC[DIR_PMM * numberOfLBnodesCoarse]; + fP00source = &DC[dP00 * numberOfLBnodesCoarse]; + fM00source = &DC[dM00 * numberOfLBnodesCoarse]; + f0P0source = &DC[d0P0 * numberOfLBnodesCoarse]; + f0M0source = &DC[d0M0 * numberOfLBnodesCoarse]; + f00Psource = &DC[d00P * numberOfLBnodesCoarse]; + f00Msource = &DC[d00M * numberOfLBnodesCoarse]; + fPP0source = &DC[dPP0 * numberOfLBnodesCoarse]; + fMM0source = &DC[dMM0 * numberOfLBnodesCoarse]; + fPM0source = &DC[dPM0 * numberOfLBnodesCoarse]; + fMP0source = &DC[dMP0 * numberOfLBnodesCoarse]; + fP0Psource = &DC[dP0P * numberOfLBnodesCoarse]; + fM0Msource = &DC[dM0M * numberOfLBnodesCoarse]; + fP0Msource = &DC[dP0M * numberOfLBnodesCoarse]; + fM0Psource = &DC[dM0P * numberOfLBnodesCoarse]; + f0PPsource = &DC[d0PP * numberOfLBnodesCoarse]; + f0MMsource = &DC[d0MM * numberOfLBnodesCoarse]; + f0PMsource = &DC[d0PM * numberOfLBnodesCoarse]; + f0MPsource = &DC[d0MP * numberOfLBnodesCoarse]; + f000source = &DC[d000 * numberOfLBnodesCoarse]; + fMMMsource = &DC[dMMM * numberOfLBnodesCoarse]; + fMMPsource = &DC[dMMP * numberOfLBnodesCoarse]; + fMPPsource = &DC[dMPP * numberOfLBnodesCoarse]; + fMPMsource = &DC[dMPM * numberOfLBnodesCoarse]; + fPPMsource = &DC[dPPM * numberOfLBnodesCoarse]; + fPPPsource = &DC[dPPP * numberOfLBnodesCoarse]; + fPMPsource = &DC[dPMP * numberOfLBnodesCoarse]; + fPMMsource = &DC[dPMM * numberOfLBnodesCoarse]; } else { - fP00source = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fM00source = &DC[DIR_P00 * numberOfLBnodesCoarse]; - f0P0source = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - f0M0source = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - f00Psource = &DC[DIR_00M * numberOfLBnodesCoarse]; - f00Msource = &DC[DIR_00P * numberOfLBnodesCoarse]; - fPP0source = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fMM0source = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fPM0source = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fMP0source = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fP0Psource = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fM0Msource = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fP0Msource = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fM0Psource = &DC[DIR_P0M * numberOfLBnodesCoarse]; - f0PPsource = &DC[DIR_0MM * numberOfLBnodesCoarse]; - f0MMsource = &DC[DIR_0PP * numberOfLBnodesCoarse]; - f0PMsource = &DC[DIR_0MP * numberOfLBnodesCoarse]; - f0MPsource = &DC[DIR_0PM * numberOfLBnodesCoarse]; - f000source = &DC[DIR_000 * numberOfLBnodesCoarse]; - fMMMsource = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fMMPsource = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fMPPsource = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fMPMsource = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fPPMsource = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fPPPsource = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fPMPsource = &DC[DIR_MPM * numberOfLBnodesCoarse]; - fPMMsource = &DC[DIR_MPP * numberOfLBnodesCoarse]; + fP00source = &DC[dM00 * numberOfLBnodesCoarse]; + fM00source = &DC[dP00 * numberOfLBnodesCoarse]; + f0P0source = &DC[d0M0 * numberOfLBnodesCoarse]; + f0M0source = &DC[d0P0 * numberOfLBnodesCoarse]; + f00Psource = &DC[d00M * numberOfLBnodesCoarse]; + f00Msource = &DC[d00P * numberOfLBnodesCoarse]; + fPP0source = &DC[dMM0 * numberOfLBnodesCoarse]; + fMM0source = &DC[dPP0 * numberOfLBnodesCoarse]; + fPM0source = &DC[dMP0 * numberOfLBnodesCoarse]; + fMP0source = &DC[dPM0 * numberOfLBnodesCoarse]; + fP0Psource = &DC[dM0M * numberOfLBnodesCoarse]; + fM0Msource = &DC[dP0P * numberOfLBnodesCoarse]; + fP0Msource = &DC[dM0P * numberOfLBnodesCoarse]; + fM0Psource = &DC[dP0M * numberOfLBnodesCoarse]; + f0PPsource = &DC[d0MM * numberOfLBnodesCoarse]; + f0MMsource = &DC[d0PP * numberOfLBnodesCoarse]; + f0PMsource = &DC[d0MP * numberOfLBnodesCoarse]; + f0MPsource = &DC[d0PM * numberOfLBnodesCoarse]; + f000source = &DC[d000 * numberOfLBnodesCoarse]; + fMMMsource = &DC[dPPP * numberOfLBnodesCoarse]; + fMMPsource = &DC[dPPM * numberOfLBnodesCoarse]; + fMPPsource = &DC[dPMM * numberOfLBnodesCoarse]; + fMPMsource = &DC[dPMP * numberOfLBnodesCoarse]; + fPPMsource = &DC[dMMP * numberOfLBnodesCoarse]; + fPPPsource = &DC[dMMM * numberOfLBnodesCoarse]; + fPMPsource = &DC[dMPM * numberOfLBnodesCoarse]; + fPMMsource = &DC[dMPP * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// const unsigned ix = threadIdx.x; // Globaler x-Index @@ -4109,96 +4109,96 @@ __global__ void scaleCF_AA2016_comp_27(real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// @@ -10992,96 +10992,96 @@ __global__ void scaleCF_RhoSq_3rdMom_comp_27(real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// @@ -17867,96 +17867,96 @@ __global__ void scaleCF_RhoSq_comp_27(real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// @@ -22151,96 +22151,96 @@ __global__ void scaleCF_staggered_time_comp_27( real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// @@ -26387,96 +26387,96 @@ __global__ void scaleCF_Fix_comp_27( real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// @@ -31154,96 +31154,96 @@ __global__ void scaleCF_NSPress_27( real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// @@ -35098,96 +35098,96 @@ __global__ void scaleCF_Fix_27( real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// @@ -39356,96 +39356,96 @@ __global__ void scaleCFpress27( real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// @@ -41030,96 +41030,96 @@ __global__ void scaleCFLast27( real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// @@ -43261,96 +43261,96 @@ __global__ void scaleCFThSMG7( real* DC, { real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, /**fzeroF,*/ *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - //fzeroF = &DF[DIR_000 * size_MatF]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + //fzeroF = &DF[d000 * size_MatF]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, //*fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - //fzeroC = &DC[DIR_000 * size_MatC]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + //fzeroC = &DC[d000 * size_MatC]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - //fzeroC = &DC[DIR_000 * size_MatC]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + //fzeroC = &DC[d000 * size_MatC]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } @@ -44487,96 +44487,96 @@ __global__ void scaleCFThS7( real* DC, { real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, /**fzeroF,*/ *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - //fzeroF = &DF[DIR_000 * size_MatF]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + //fzeroF = &DF[d000 * size_MatF]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, //*fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - //fzeroC = &DC[DIR_000 * size_MatC]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + //fzeroC = &DC[d000 * size_MatC]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - //fzeroC = &DC[DIR_000 * size_MatC]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + //fzeroC = &DC[d000 * size_MatC]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } @@ -45611,188 +45611,188 @@ __global__ void scaleCFThS27( real* DC, { real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, /**fzeroF,*/ *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - //fzeroF = &DF[DIR_000 * size_MatF]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + //fzeroF = &DF[d000 * size_MatF]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, //*fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - //fzeroC = &DC[DIR_000 * size_MatC]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + //fzeroC = &DC[d000 * size_MatC]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - //fzeroC = &DC[DIR_000 * size_MatC]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + //fzeroC = &DC[d000 * size_MatC]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } Distributions27 D27F; - D27F.f[DIR_P00] = &DD27F[DIR_P00 * numberOfLBnodesFine]; - D27F.f[DIR_M00] = &DD27F[DIR_M00 * numberOfLBnodesFine]; - D27F.f[DIR_0P0] = &DD27F[DIR_0P0 * numberOfLBnodesFine]; - D27F.f[DIR_0M0] = &DD27F[DIR_0M0 * numberOfLBnodesFine]; - D27F.f[DIR_00P] = &DD27F[DIR_00P * numberOfLBnodesFine]; - D27F.f[DIR_00M] = &DD27F[DIR_00M * numberOfLBnodesFine]; - D27F.f[DIR_PP0] = &DD27F[DIR_PP0 * numberOfLBnodesFine]; - D27F.f[DIR_MM0] = &DD27F[DIR_MM0 * numberOfLBnodesFine]; - D27F.f[DIR_PM0] = &DD27F[DIR_PM0 * numberOfLBnodesFine]; - D27F.f[DIR_MP0] = &DD27F[DIR_MP0 * numberOfLBnodesFine]; - D27F.f[DIR_P0P] = &DD27F[DIR_P0P * numberOfLBnodesFine]; - D27F.f[DIR_M0M] = &DD27F[DIR_M0M * numberOfLBnodesFine]; - D27F.f[DIR_P0M] = &DD27F[DIR_P0M * numberOfLBnodesFine]; - D27F.f[DIR_M0P] = &DD27F[DIR_M0P * numberOfLBnodesFine]; - D27F.f[DIR_0PP] = &DD27F[DIR_0PP * numberOfLBnodesFine]; - D27F.f[DIR_0MM] = &DD27F[DIR_0MM * numberOfLBnodesFine]; - D27F.f[DIR_0PM] = &DD27F[DIR_0PM * numberOfLBnodesFine]; - D27F.f[DIR_0MP] = &DD27F[DIR_0MP * numberOfLBnodesFine]; - D27F.f[DIR_000] = &DD27F[DIR_000 * numberOfLBnodesFine]; - D27F.f[DIR_PPP] = &DD27F[DIR_PPP * numberOfLBnodesFine]; - D27F.f[DIR_MMP] = &DD27F[DIR_MMP * numberOfLBnodesFine]; - D27F.f[DIR_PMP] = &DD27F[DIR_PMP * numberOfLBnodesFine]; - D27F.f[DIR_MPP] = &DD27F[DIR_MPP * numberOfLBnodesFine]; - D27F.f[DIR_PPM] = &DD27F[DIR_PPM * numberOfLBnodesFine]; - D27F.f[DIR_MMM] = &DD27F[DIR_MMM * numberOfLBnodesFine]; - D27F.f[DIR_PMM] = &DD27F[DIR_PMM * numberOfLBnodesFine]; - D27F.f[DIR_MPM] = &DD27F[DIR_MPM * numberOfLBnodesFine]; + D27F.f[dP00] = &DD27F[dP00 * numberOfLBnodesFine]; + D27F.f[dM00] = &DD27F[dM00 * numberOfLBnodesFine]; + D27F.f[d0P0] = &DD27F[d0P0 * numberOfLBnodesFine]; + D27F.f[d0M0] = &DD27F[d0M0 * numberOfLBnodesFine]; + D27F.f[d00P] = &DD27F[d00P * numberOfLBnodesFine]; + D27F.f[d00M] = &DD27F[d00M * numberOfLBnodesFine]; + D27F.f[dPP0] = &DD27F[dPP0 * numberOfLBnodesFine]; + D27F.f[dMM0] = &DD27F[dMM0 * numberOfLBnodesFine]; + D27F.f[dPM0] = &DD27F[dPM0 * numberOfLBnodesFine]; + D27F.f[dMP0] = &DD27F[dMP0 * numberOfLBnodesFine]; + D27F.f[dP0P] = &DD27F[dP0P * numberOfLBnodesFine]; + D27F.f[dM0M] = &DD27F[dM0M * numberOfLBnodesFine]; + D27F.f[dP0M] = &DD27F[dP0M * numberOfLBnodesFine]; + D27F.f[dM0P] = &DD27F[dM0P * numberOfLBnodesFine]; + D27F.f[d0PP] = &DD27F[d0PP * numberOfLBnodesFine]; + D27F.f[d0MM] = &DD27F[d0MM * numberOfLBnodesFine]; + D27F.f[d0PM] = &DD27F[d0PM * numberOfLBnodesFine]; + D27F.f[d0MP] = &DD27F[d0MP * numberOfLBnodesFine]; + D27F.f[d000] = &DD27F[d000 * numberOfLBnodesFine]; + D27F.f[dPPP] = &DD27F[dPPP * numberOfLBnodesFine]; + D27F.f[dMMP] = &DD27F[dMMP * numberOfLBnodesFine]; + D27F.f[dPMP] = &DD27F[dPMP * numberOfLBnodesFine]; + D27F.f[dMPP] = &DD27F[dMPP * numberOfLBnodesFine]; + D27F.f[dPPM] = &DD27F[dPPM * numberOfLBnodesFine]; + D27F.f[dMMM] = &DD27F[dMMM * numberOfLBnodesFine]; + D27F.f[dPMM] = &DD27F[dPMM * numberOfLBnodesFine]; + D27F.f[dMPM] = &DD27F[dMPM * numberOfLBnodesFine]; Distributions27 D27C; if (isEvenTimestep==true) { - D27C.f[DIR_P00] = &DD27C[DIR_P00 * numberOfLBnodesCoarse]; - D27C.f[DIR_M00] = &DD27C[DIR_M00 * numberOfLBnodesCoarse]; - D27C.f[DIR_0P0] = &DD27C[DIR_0P0 * numberOfLBnodesCoarse]; - D27C.f[DIR_0M0] = &DD27C[DIR_0M0 * numberOfLBnodesCoarse]; - D27C.f[DIR_00P] = &DD27C[DIR_00P * numberOfLBnodesCoarse]; - D27C.f[DIR_00M] = &DD27C[DIR_00M * numberOfLBnodesCoarse]; - D27C.f[DIR_PP0] = &DD27C[DIR_PP0 * numberOfLBnodesCoarse]; - D27C.f[DIR_MM0] = &DD27C[DIR_MM0 * numberOfLBnodesCoarse]; - D27C.f[DIR_PM0] = &DD27C[DIR_PM0 * numberOfLBnodesCoarse]; - D27C.f[DIR_MP0] = &DD27C[DIR_MP0 * numberOfLBnodesCoarse]; - D27C.f[DIR_P0P] = &DD27C[DIR_P0P * numberOfLBnodesCoarse]; - D27C.f[DIR_M0M] = &DD27C[DIR_M0M * numberOfLBnodesCoarse]; - D27C.f[DIR_P0M] = &DD27C[DIR_P0M * numberOfLBnodesCoarse]; - D27C.f[DIR_M0P] = &DD27C[DIR_M0P * numberOfLBnodesCoarse]; - D27C.f[DIR_0PP] = &DD27C[DIR_0PP * numberOfLBnodesCoarse]; - D27C.f[DIR_0MM] = &DD27C[DIR_0MM * numberOfLBnodesCoarse]; - D27C.f[DIR_0PM] = &DD27C[DIR_0PM * numberOfLBnodesCoarse]; - D27C.f[DIR_0MP] = &DD27C[DIR_0MP * numberOfLBnodesCoarse]; - D27C.f[DIR_000] = &DD27C[DIR_000 * numberOfLBnodesCoarse]; - D27C.f[DIR_PPP] = &DD27C[DIR_PPP * numberOfLBnodesCoarse]; - D27C.f[DIR_MMP] = &DD27C[DIR_MMP * numberOfLBnodesCoarse]; - D27C.f[DIR_PMP] = &DD27C[DIR_PMP * numberOfLBnodesCoarse]; - D27C.f[DIR_MPP] = &DD27C[DIR_MPP * numberOfLBnodesCoarse]; - D27C.f[DIR_PPM] = &DD27C[DIR_PPM * numberOfLBnodesCoarse]; - D27C.f[DIR_MMM] = &DD27C[DIR_MMM * numberOfLBnodesCoarse]; - D27C.f[DIR_PMM] = &DD27C[DIR_PMM * numberOfLBnodesCoarse]; - D27C.f[DIR_MPM] = &DD27C[DIR_MPM * numberOfLBnodesCoarse]; + D27C.f[dP00] = &DD27C[dP00 * numberOfLBnodesCoarse]; + D27C.f[dM00] = &DD27C[dM00 * numberOfLBnodesCoarse]; + D27C.f[d0P0] = &DD27C[d0P0 * numberOfLBnodesCoarse]; + D27C.f[d0M0] = &DD27C[d0M0 * numberOfLBnodesCoarse]; + D27C.f[d00P] = &DD27C[d00P * numberOfLBnodesCoarse]; + D27C.f[d00M] = &DD27C[d00M * numberOfLBnodesCoarse]; + D27C.f[dPP0] = &DD27C[dPP0 * numberOfLBnodesCoarse]; + D27C.f[dMM0] = &DD27C[dMM0 * numberOfLBnodesCoarse]; + D27C.f[dPM0] = &DD27C[dPM0 * numberOfLBnodesCoarse]; + D27C.f[dMP0] = &DD27C[dMP0 * numberOfLBnodesCoarse]; + D27C.f[dP0P] = &DD27C[dP0P * numberOfLBnodesCoarse]; + D27C.f[dM0M] = &DD27C[dM0M * numberOfLBnodesCoarse]; + D27C.f[dP0M] = &DD27C[dP0M * numberOfLBnodesCoarse]; + D27C.f[dM0P] = &DD27C[dM0P * numberOfLBnodesCoarse]; + D27C.f[d0PP] = &DD27C[d0PP * numberOfLBnodesCoarse]; + D27C.f[d0MM] = &DD27C[d0MM * numberOfLBnodesCoarse]; + D27C.f[d0PM] = &DD27C[d0PM * numberOfLBnodesCoarse]; + D27C.f[d0MP] = &DD27C[d0MP * numberOfLBnodesCoarse]; + D27C.f[d000] = &DD27C[d000 * numberOfLBnodesCoarse]; + D27C.f[dPPP] = &DD27C[dPPP * numberOfLBnodesCoarse]; + D27C.f[dMMP] = &DD27C[dMMP * numberOfLBnodesCoarse]; + D27C.f[dPMP] = &DD27C[dPMP * numberOfLBnodesCoarse]; + D27C.f[dMPP] = &DD27C[dMPP * numberOfLBnodesCoarse]; + D27C.f[dPPM] = &DD27C[dPPM * numberOfLBnodesCoarse]; + D27C.f[dMMM] = &DD27C[dMMM * numberOfLBnodesCoarse]; + D27C.f[dPMM] = &DD27C[dPMM * numberOfLBnodesCoarse]; + D27C.f[dMPM] = &DD27C[dMPM * numberOfLBnodesCoarse]; } else { - D27C.f[DIR_M00] = &DD27C[DIR_P00 * numberOfLBnodesCoarse]; - D27C.f[DIR_P00] = &DD27C[DIR_M00 * numberOfLBnodesCoarse]; - D27C.f[DIR_0M0] = &DD27C[DIR_0P0 * numberOfLBnodesCoarse]; - D27C.f[DIR_0P0] = &DD27C[DIR_0M0 * numberOfLBnodesCoarse]; - D27C.f[DIR_00M] = &DD27C[DIR_00P * numberOfLBnodesCoarse]; - D27C.f[DIR_00P] = &DD27C[DIR_00M * numberOfLBnodesCoarse]; - D27C.f[DIR_MM0] = &DD27C[DIR_PP0 * numberOfLBnodesCoarse]; - D27C.f[DIR_PP0] = &DD27C[DIR_MM0 * numberOfLBnodesCoarse]; - D27C.f[DIR_MP0] = &DD27C[DIR_PM0 * numberOfLBnodesCoarse]; - D27C.f[DIR_PM0] = &DD27C[DIR_MP0 * numberOfLBnodesCoarse]; - D27C.f[DIR_M0M] = &DD27C[DIR_P0P * numberOfLBnodesCoarse]; - D27C.f[DIR_P0P] = &DD27C[DIR_M0M * numberOfLBnodesCoarse]; - D27C.f[DIR_M0P] = &DD27C[DIR_P0M * numberOfLBnodesCoarse]; - D27C.f[DIR_P0M] = &DD27C[DIR_M0P * numberOfLBnodesCoarse]; - D27C.f[DIR_0MM] = &DD27C[DIR_0PP * numberOfLBnodesCoarse]; - D27C.f[DIR_0PP] = &DD27C[DIR_0MM * numberOfLBnodesCoarse]; - D27C.f[DIR_0MP] = &DD27C[DIR_0PM * numberOfLBnodesCoarse]; - D27C.f[DIR_0PM] = &DD27C[DIR_0MP * numberOfLBnodesCoarse]; - D27C.f[DIR_000] = &DD27C[DIR_000 * numberOfLBnodesCoarse]; - D27C.f[DIR_MMM] = &DD27C[DIR_PPP * numberOfLBnodesCoarse]; - D27C.f[DIR_PPM] = &DD27C[DIR_MMP * numberOfLBnodesCoarse]; - D27C.f[DIR_MPM] = &DD27C[DIR_PMP * numberOfLBnodesCoarse]; - D27C.f[DIR_PMM] = &DD27C[DIR_MPP * numberOfLBnodesCoarse]; - D27C.f[DIR_MMP] = &DD27C[DIR_PPM * numberOfLBnodesCoarse]; - D27C.f[DIR_PPP] = &DD27C[DIR_MMM * numberOfLBnodesCoarse]; - D27C.f[DIR_MPP] = &DD27C[DIR_PMM * numberOfLBnodesCoarse]; - D27C.f[DIR_PMP] = &DD27C[DIR_MPM * numberOfLBnodesCoarse]; + D27C.f[dM00] = &DD27C[dP00 * numberOfLBnodesCoarse]; + D27C.f[dP00] = &DD27C[dM00 * numberOfLBnodesCoarse]; + D27C.f[d0M0] = &DD27C[d0P0 * numberOfLBnodesCoarse]; + D27C.f[d0P0] = &DD27C[d0M0 * numberOfLBnodesCoarse]; + D27C.f[d00M] = &DD27C[d00P * numberOfLBnodesCoarse]; + D27C.f[d00P] = &DD27C[d00M * numberOfLBnodesCoarse]; + D27C.f[dMM0] = &DD27C[dPP0 * numberOfLBnodesCoarse]; + D27C.f[dPP0] = &DD27C[dMM0 * numberOfLBnodesCoarse]; + D27C.f[dMP0] = &DD27C[dPM0 * numberOfLBnodesCoarse]; + D27C.f[dPM0] = &DD27C[dMP0 * numberOfLBnodesCoarse]; + D27C.f[dM0M] = &DD27C[dP0P * numberOfLBnodesCoarse]; + D27C.f[dP0P] = &DD27C[dM0M * numberOfLBnodesCoarse]; + D27C.f[dM0P] = &DD27C[dP0M * numberOfLBnodesCoarse]; + D27C.f[dP0M] = &DD27C[dM0P * numberOfLBnodesCoarse]; + D27C.f[d0MM] = &DD27C[d0PP * numberOfLBnodesCoarse]; + D27C.f[d0PP] = &DD27C[d0MM * numberOfLBnodesCoarse]; + D27C.f[d0MP] = &DD27C[d0PM * numberOfLBnodesCoarse]; + D27C.f[d0PM] = &DD27C[d0MP * numberOfLBnodesCoarse]; + D27C.f[d000] = &DD27C[d000 * numberOfLBnodesCoarse]; + D27C.f[dMMM] = &DD27C[dPPP * numberOfLBnodesCoarse]; + D27C.f[dPPM] = &DD27C[dMMP * numberOfLBnodesCoarse]; + D27C.f[dMPM] = &DD27C[dPMP * numberOfLBnodesCoarse]; + D27C.f[dPMM] = &DD27C[dMPP * numberOfLBnodesCoarse]; + D27C.f[dMMP] = &DD27C[dPPM * numberOfLBnodesCoarse]; + D27C.f[dPPP] = &DD27C[dMMM * numberOfLBnodesCoarse]; + D27C.f[dMPP] = &DD27C[dPMM * numberOfLBnodesCoarse]; + D27C.f[dPMP] = &DD27C[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// @@ -45892,33 +45892,33 @@ __global__ void scaleCFThS27( real* DC, f_BSE = fbseC[kbs]; f_BNW = fbnwC[kbw]; ////////////////////////////////////////////////////////////////////////////////// - f27E = (D27C.f[DIR_P00])[kzero];//ke - f27W = (D27C.f[DIR_M00])[kw ]; - f27N = (D27C.f[DIR_0P0])[kzero];//kn - f27S = (D27C.f[DIR_0M0])[ks ]; - f27T = (D27C.f[DIR_00P])[kzero];//kt - f27B = (D27C.f[DIR_00M])[kb ]; - f27NE = (D27C.f[DIR_PP0])[kzero];//kne - f27SW = (D27C.f[DIR_MM0])[ksw ]; - f27SE = (D27C.f[DIR_PM0])[ks ];//kse - f27NW = (D27C.f[DIR_MP0])[kw ];//knw - f27TE = (D27C.f[DIR_P0P])[kzero];//kte - f27BW = (D27C.f[DIR_M0M])[kbw ]; - f27BE = (D27C.f[DIR_P0M])[kb ];//kbe - f27TW = (D27C.f[DIR_M0P])[kw ];//ktw - f27TN = (D27C.f[DIR_0PP])[kzero];//ktn - f27BS = (D27C.f[DIR_0MM])[kbs ]; - f27BN = (D27C.f[DIR_0PM])[kb ];//kbn - f27TS = (D27C.f[DIR_0MP])[ks ];//kts - f27ZERO = (D27C.f[DIR_000])[kzero];//kzero - f27TNE = (D27C.f[DIR_PPP])[kzero];//ktne - f27TSW = (D27C.f[DIR_MMP])[ksw ];//ktsw - f27TSE = (D27C.f[DIR_PMP])[ks ];//ktse - f27TNW = (D27C.f[DIR_MPP])[kw ];//ktnw - f27BNE = (D27C.f[DIR_PPM])[kb ];//kbne - f27BSW = (D27C.f[DIR_MMM])[kbsw ]; - f27BSE = (D27C.f[DIR_PMM])[kbs ];//kbse - f27BNW = (D27C.f[DIR_MPM])[kbw ];//kbnw + f27E = (D27C.f[dP00])[kzero];//ke + f27W = (D27C.f[dM00])[kw ]; + f27N = (D27C.f[d0P0])[kzero];//kn + f27S = (D27C.f[d0M0])[ks ]; + f27T = (D27C.f[d00P])[kzero];//kt + f27B = (D27C.f[d00M])[kb ]; + f27NE = (D27C.f[dPP0])[kzero];//kne + f27SW = (D27C.f[dMM0])[ksw ]; + f27SE = (D27C.f[dPM0])[ks ];//kse + f27NW = (D27C.f[dMP0])[kw ];//knw + f27TE = (D27C.f[dP0P])[kzero];//kte + f27BW = (D27C.f[dM0M])[kbw ]; + f27BE = (D27C.f[dP0M])[kb ];//kbe + f27TW = (D27C.f[dM0P])[kw ];//ktw + f27TN = (D27C.f[d0PP])[kzero];//ktn + f27BS = (D27C.f[d0MM])[kbs ]; + f27BN = (D27C.f[d0PM])[kb ];//kbn + f27TS = (D27C.f[d0MP])[ks ];//kts + f27ZERO = (D27C.f[d000])[kzero];//kzero + f27TNE = (D27C.f[dPPP])[kzero];//ktne + f27TSW = (D27C.f[dMMP])[ksw ];//ktsw + f27TSE = (D27C.f[dPMP])[ks ];//ktse + f27TNW = (D27C.f[dMPP])[kw ];//ktnw + f27BNE = (D27C.f[dPPM])[kb ];//kbne + f27BSW = (D27C.f[dMMM])[kbsw ]; + f27BSE = (D27C.f[dPMM])[kbs ];//kbse + f27BNW = (D27C.f[dMPM])[kbw ];//kbnw Conc_C_SWB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + @@ -45979,33 +45979,33 @@ __global__ void scaleCFThS27( real* DC, f_BSE = fbseC[kbs]; f_BNW = fbnwC[kbw]; ////////////////////////////////////////////////////////////////////////////////// - f27E = (D27C.f[DIR_P00])[kzero];//ke - f27W = (D27C.f[DIR_M00])[kw ]; - f27N = (D27C.f[DIR_0P0])[kzero];//kn - f27S = (D27C.f[DIR_0M0])[ks ]; - f27T = (D27C.f[DIR_00P])[kzero];//kt - f27B = (D27C.f[DIR_00M])[kb ]; - f27NE = (D27C.f[DIR_PP0])[kzero];//kne - f27SW = (D27C.f[DIR_MM0])[ksw ]; - f27SE = (D27C.f[DIR_PM0])[ks ];//kse - f27NW = (D27C.f[DIR_MP0])[kw ];//knw - f27TE = (D27C.f[DIR_P0P])[kzero];//kte - f27BW = (D27C.f[DIR_M0M])[kbw ]; - f27BE = (D27C.f[DIR_P0M])[kb ];//kbe - f27TW = (D27C.f[DIR_M0P])[kw ];//ktw - f27TN = (D27C.f[DIR_0PP])[kzero];//ktn - f27BS = (D27C.f[DIR_0MM])[kbs ]; - f27BN = (D27C.f[DIR_0PM])[kb ];//kbn - f27TS = (D27C.f[DIR_0MP])[ks ];//kts - f27ZERO = (D27C.f[DIR_000])[kzero];//kzero - f27TNE = (D27C.f[DIR_PPP])[kzero];//ktne - f27TSW = (D27C.f[DIR_MMP])[ksw ];//ktsw - f27TSE = (D27C.f[DIR_PMP])[ks ];//ktse - f27TNW = (D27C.f[DIR_MPP])[kw ];//ktnw - f27BNE = (D27C.f[DIR_PPM])[kb ];//kbne - f27BSW = (D27C.f[DIR_MMM])[kbsw ]; - f27BSE = (D27C.f[DIR_PMM])[kbs ];//kbse - f27BNW = (D27C.f[DIR_MPM])[kbw ];//kbnw + f27E = (D27C.f[dP00])[kzero];//ke + f27W = (D27C.f[dM00])[kw ]; + f27N = (D27C.f[d0P0])[kzero];//kn + f27S = (D27C.f[d0M0])[ks ]; + f27T = (D27C.f[d00P])[kzero];//kt + f27B = (D27C.f[d00M])[kb ]; + f27NE = (D27C.f[dPP0])[kzero];//kne + f27SW = (D27C.f[dMM0])[ksw ]; + f27SE = (D27C.f[dPM0])[ks ];//kse + f27NW = (D27C.f[dMP0])[kw ];//knw + f27TE = (D27C.f[dP0P])[kzero];//kte + f27BW = (D27C.f[dM0M])[kbw ]; + f27BE = (D27C.f[dP0M])[kb ];//kbe + f27TW = (D27C.f[dM0P])[kw ];//ktw + f27TN = (D27C.f[d0PP])[kzero];//ktn + f27BS = (D27C.f[d0MM])[kbs ]; + f27BN = (D27C.f[d0PM])[kb ];//kbn + f27TS = (D27C.f[d0MP])[ks ];//kts + f27ZERO = (D27C.f[d000])[kzero];//kzero + f27TNE = (D27C.f[dPPP])[kzero];//ktne + f27TSW = (D27C.f[dMMP])[ksw ];//ktsw + f27TSE = (D27C.f[dPMP])[ks ];//ktse + f27TNW = (D27C.f[dMPP])[kw ];//ktnw + f27BNE = (D27C.f[dPPM])[kb ];//kbne + f27BSW = (D27C.f[dMMM])[kbsw ]; + f27BSE = (D27C.f[dPMM])[kbs ];//kbse + f27BNW = (D27C.f[dMPM])[kbw ];//kbnw Conc_C_SWT = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + @@ -46066,33 +46066,33 @@ __global__ void scaleCFThS27( real* DC, f_BSE = fbseC[kbs]; f_BNW = fbnwC[kbw]; ////////////////////////////////////////////////////////////////////////////////// - f27E = (D27C.f[DIR_P00])[kzero];//ke - f27W = (D27C.f[DIR_M00])[kw ]; - f27N = (D27C.f[DIR_0P0])[kzero];//kn - f27S = (D27C.f[DIR_0M0])[ks ]; - f27T = (D27C.f[DIR_00P])[kzero];//kt - f27B = (D27C.f[DIR_00M])[kb ]; - f27NE = (D27C.f[DIR_PP0])[kzero];//kne - f27SW = (D27C.f[DIR_MM0])[ksw ]; - f27SE = (D27C.f[DIR_PM0])[ks ];//kse - f27NW = (D27C.f[DIR_MP0])[kw ];//knw - f27TE = (D27C.f[DIR_P0P])[kzero];//kte - f27BW = (D27C.f[DIR_M0M])[kbw ]; - f27BE = (D27C.f[DIR_P0M])[kb ];//kbe - f27TW = (D27C.f[DIR_M0P])[kw ];//ktw - f27TN = (D27C.f[DIR_0PP])[kzero];//ktn - f27BS = (D27C.f[DIR_0MM])[kbs ]; - f27BN = (D27C.f[DIR_0PM])[kb ];//kbn - f27TS = (D27C.f[DIR_0MP])[ks ];//kts - f27ZERO = (D27C.f[DIR_000])[kzero];//kzero - f27TNE = (D27C.f[DIR_PPP])[kzero];//ktne - f27TSW = (D27C.f[DIR_MMP])[ksw ];//ktsw - f27TSE = (D27C.f[DIR_PMP])[ks ];//ktse - f27TNW = (D27C.f[DIR_MPP])[kw ];//ktnw - f27BNE = (D27C.f[DIR_PPM])[kb ];//kbne - f27BSW = (D27C.f[DIR_MMM])[kbsw ]; - f27BSE = (D27C.f[DIR_PMM])[kbs ];//kbse - f27BNW = (D27C.f[DIR_MPM])[kbw ];//kbnw + f27E = (D27C.f[dP00])[kzero];//ke + f27W = (D27C.f[dM00])[kw ]; + f27N = (D27C.f[d0P0])[kzero];//kn + f27S = (D27C.f[d0M0])[ks ]; + f27T = (D27C.f[d00P])[kzero];//kt + f27B = (D27C.f[d00M])[kb ]; + f27NE = (D27C.f[dPP0])[kzero];//kne + f27SW = (D27C.f[dMM0])[ksw ]; + f27SE = (D27C.f[dPM0])[ks ];//kse + f27NW = (D27C.f[dMP0])[kw ];//knw + f27TE = (D27C.f[dP0P])[kzero];//kte + f27BW = (D27C.f[dM0M])[kbw ]; + f27BE = (D27C.f[dP0M])[kb ];//kbe + f27TW = (D27C.f[dM0P])[kw ];//ktw + f27TN = (D27C.f[d0PP])[kzero];//ktn + f27BS = (D27C.f[d0MM])[kbs ]; + f27BN = (D27C.f[d0PM])[kb ];//kbn + f27TS = (D27C.f[d0MP])[ks ];//kts + f27ZERO = (D27C.f[d000])[kzero];//kzero + f27TNE = (D27C.f[dPPP])[kzero];//ktne + f27TSW = (D27C.f[dMMP])[ksw ];//ktsw + f27TSE = (D27C.f[dPMP])[ks ];//ktse + f27TNW = (D27C.f[dMPP])[kw ];//ktnw + f27BNE = (D27C.f[dPPM])[kb ];//kbne + f27BSW = (D27C.f[dMMM])[kbsw ]; + f27BSE = (D27C.f[dPMM])[kbs ];//kbse + f27BNW = (D27C.f[dMPM])[kbw ];//kbnw Conc_C_SET = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + @@ -46153,33 +46153,33 @@ __global__ void scaleCFThS27( real* DC, f_BSE = fbseC[kbs]; f_BNW = fbnwC[kbw]; ////////////////////////////////////////////////////////////////////////////////// - f27E = (D27C.f[DIR_P00])[kzero];//ke - f27W = (D27C.f[DIR_M00])[kw ]; - f27N = (D27C.f[DIR_0P0])[kzero];//kn - f27S = (D27C.f[DIR_0M0])[ks ]; - f27T = (D27C.f[DIR_00P])[kzero];//kt - f27B = (D27C.f[DIR_00M])[kb ]; - f27NE = (D27C.f[DIR_PP0])[kzero];//kne - f27SW = (D27C.f[DIR_MM0])[ksw ]; - f27SE = (D27C.f[DIR_PM0])[ks ];//kse - f27NW = (D27C.f[DIR_MP0])[kw ];//knw - f27TE = (D27C.f[DIR_P0P])[kzero];//kte - f27BW = (D27C.f[DIR_M0M])[kbw ]; - f27BE = (D27C.f[DIR_P0M])[kb ];//kbe - f27TW = (D27C.f[DIR_M0P])[kw ];//ktw - f27TN = (D27C.f[DIR_0PP])[kzero];//ktn - f27BS = (D27C.f[DIR_0MM])[kbs ]; - f27BN = (D27C.f[DIR_0PM])[kb ];//kbn - f27TS = (D27C.f[DIR_0MP])[ks ];//kts - f27ZERO = (D27C.f[DIR_000])[kzero];//kzero - f27TNE = (D27C.f[DIR_PPP])[kzero];//ktne - f27TSW = (D27C.f[DIR_MMP])[ksw ];//ktsw - f27TSE = (D27C.f[DIR_PMP])[ks ];//ktse - f27TNW = (D27C.f[DIR_MPP])[kw ];//ktnw - f27BNE = (D27C.f[DIR_PPM])[kb ];//kbne - f27BSW = (D27C.f[DIR_MMM])[kbsw ]; - f27BSE = (D27C.f[DIR_PMM])[kbs ];//kbse - f27BNW = (D27C.f[DIR_MPM])[kbw ];//kbnw + f27E = (D27C.f[dP00])[kzero];//ke + f27W = (D27C.f[dM00])[kw ]; + f27N = (D27C.f[d0P0])[kzero];//kn + f27S = (D27C.f[d0M0])[ks ]; + f27T = (D27C.f[d00P])[kzero];//kt + f27B = (D27C.f[d00M])[kb ]; + f27NE = (D27C.f[dPP0])[kzero];//kne + f27SW = (D27C.f[dMM0])[ksw ]; + f27SE = (D27C.f[dPM0])[ks ];//kse + f27NW = (D27C.f[dMP0])[kw ];//knw + f27TE = (D27C.f[dP0P])[kzero];//kte + f27BW = (D27C.f[dM0M])[kbw ]; + f27BE = (D27C.f[dP0M])[kb ];//kbe + f27TW = (D27C.f[dM0P])[kw ];//ktw + f27TN = (D27C.f[d0PP])[kzero];//ktn + f27BS = (D27C.f[d0MM])[kbs ]; + f27BN = (D27C.f[d0PM])[kb ];//kbn + f27TS = (D27C.f[d0MP])[ks ];//kts + f27ZERO = (D27C.f[d000])[kzero];//kzero + f27TNE = (D27C.f[dPPP])[kzero];//ktne + f27TSW = (D27C.f[dMMP])[ksw ];//ktsw + f27TSE = (D27C.f[dPMP])[ks ];//ktse + f27TNW = (D27C.f[dMPP])[kw ];//ktnw + f27BNE = (D27C.f[dPPM])[kb ];//kbne + f27BSW = (D27C.f[dMMM])[kbsw ]; + f27BSE = (D27C.f[dPMM])[kbs ];//kbse + f27BNW = (D27C.f[dMPM])[kbw ];//kbnw Conc_C_SEB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + @@ -46250,33 +46250,33 @@ __global__ void scaleCFThS27( real* DC, f_BSE = fbseC[kbs]; f_BNW = fbnwC[kbw]; ////////////////////////////////////////////////////////////////////////////////// - f27E = (D27C.f[DIR_P00])[kzero];//ke - f27W = (D27C.f[DIR_M00])[kw ]; - f27N = (D27C.f[DIR_0P0])[kzero];//kn - f27S = (D27C.f[DIR_0M0])[ks ]; - f27T = (D27C.f[DIR_00P])[kzero];//kt - f27B = (D27C.f[DIR_00M])[kb ]; - f27NE = (D27C.f[DIR_PP0])[kzero];//kne - f27SW = (D27C.f[DIR_MM0])[ksw ]; - f27SE = (D27C.f[DIR_PM0])[ks ];//kse - f27NW = (D27C.f[DIR_MP0])[kw ];//knw - f27TE = (D27C.f[DIR_P0P])[kzero];//kte - f27BW = (D27C.f[DIR_M0M])[kbw ]; - f27BE = (D27C.f[DIR_P0M])[kb ];//kbe - f27TW = (D27C.f[DIR_M0P])[kw ];//ktw - f27TN = (D27C.f[DIR_0PP])[kzero];//ktn - f27BS = (D27C.f[DIR_0MM])[kbs ]; - f27BN = (D27C.f[DIR_0PM])[kb ];//kbn - f27TS = (D27C.f[DIR_0MP])[ks ];//kts - f27ZERO = (D27C.f[DIR_000])[kzero];//kzero - f27TNE = (D27C.f[DIR_PPP])[kzero];//ktne - f27TSW = (D27C.f[DIR_MMP])[ksw ];//ktsw - f27TSE = (D27C.f[DIR_PMP])[ks ];//ktse - f27TNW = (D27C.f[DIR_MPP])[kw ];//ktnw - f27BNE = (D27C.f[DIR_PPM])[kb ];//kbne - f27BSW = (D27C.f[DIR_MMM])[kbsw ]; - f27BSE = (D27C.f[DIR_PMM])[kbs ];//kbse - f27BNW = (D27C.f[DIR_MPM])[kbw ];//kbnw + f27E = (D27C.f[dP00])[kzero];//ke + f27W = (D27C.f[dM00])[kw ]; + f27N = (D27C.f[d0P0])[kzero];//kn + f27S = (D27C.f[d0M0])[ks ]; + f27T = (D27C.f[d00P])[kzero];//kt + f27B = (D27C.f[d00M])[kb ]; + f27NE = (D27C.f[dPP0])[kzero];//kne + f27SW = (D27C.f[dMM0])[ksw ]; + f27SE = (D27C.f[dPM0])[ks ];//kse + f27NW = (D27C.f[dMP0])[kw ];//knw + f27TE = (D27C.f[dP0P])[kzero];//kte + f27BW = (D27C.f[dM0M])[kbw ]; + f27BE = (D27C.f[dP0M])[kb ];//kbe + f27TW = (D27C.f[dM0P])[kw ];//ktw + f27TN = (D27C.f[d0PP])[kzero];//ktn + f27BS = (D27C.f[d0MM])[kbs ]; + f27BN = (D27C.f[d0PM])[kb ];//kbn + f27TS = (D27C.f[d0MP])[ks ];//kts + f27ZERO = (D27C.f[d000])[kzero];//kzero + f27TNE = (D27C.f[dPPP])[kzero];//ktne + f27TSW = (D27C.f[dMMP])[ksw ];//ktsw + f27TSE = (D27C.f[dPMP])[ks ];//ktse + f27TNW = (D27C.f[dMPP])[kw ];//ktnw + f27BNE = (D27C.f[dPPM])[kb ];//kbne + f27BSW = (D27C.f[dMMM])[kbsw ]; + f27BSE = (D27C.f[dPMM])[kbs ];//kbse + f27BNW = (D27C.f[dMPM])[kbw ];//kbnw Conc_C_NWB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + @@ -46337,33 +46337,33 @@ __global__ void scaleCFThS27( real* DC, f_BSE = fbseC[kbs]; f_BNW = fbnwC[kbw]; ////////////////////////////////////////////////////////////////////////////////// - f27E = (D27C.f[DIR_P00])[kzero];//ke - f27W = (D27C.f[DIR_M00])[kw ]; - f27N = (D27C.f[DIR_0P0])[kzero];//kn - f27S = (D27C.f[DIR_0M0])[ks ]; - f27T = (D27C.f[DIR_00P])[kzero];//kt - f27B = (D27C.f[DIR_00M])[kb ]; - f27NE = (D27C.f[DIR_PP0])[kzero];//kne - f27SW = (D27C.f[DIR_MM0])[ksw ]; - f27SE = (D27C.f[DIR_PM0])[ks ];//kse - f27NW = (D27C.f[DIR_MP0])[kw ];//knw - f27TE = (D27C.f[DIR_P0P])[kzero];//kte - f27BW = (D27C.f[DIR_M0M])[kbw ]; - f27BE = (D27C.f[DIR_P0M])[kb ];//kbe - f27TW = (D27C.f[DIR_M0P])[kw ];//ktw - f27TN = (D27C.f[DIR_0PP])[kzero];//ktn - f27BS = (D27C.f[DIR_0MM])[kbs ]; - f27BN = (D27C.f[DIR_0PM])[kb ];//kbn - f27TS = (D27C.f[DIR_0MP])[ks ];//kts - f27ZERO = (D27C.f[DIR_000])[kzero];//kzero - f27TNE = (D27C.f[DIR_PPP])[kzero];//ktne - f27TSW = (D27C.f[DIR_MMP])[ksw ];//ktsw - f27TSE = (D27C.f[DIR_PMP])[ks ];//ktse - f27TNW = (D27C.f[DIR_MPP])[kw ];//ktnw - f27BNE = (D27C.f[DIR_PPM])[kb ];//kbne - f27BSW = (D27C.f[DIR_MMM])[kbsw ]; - f27BSE = (D27C.f[DIR_PMM])[kbs ];//kbse - f27BNW = (D27C.f[DIR_MPM])[kbw ];//kbnw + f27E = (D27C.f[dP00])[kzero];//ke + f27W = (D27C.f[dM00])[kw ]; + f27N = (D27C.f[d0P0])[kzero];//kn + f27S = (D27C.f[d0M0])[ks ]; + f27T = (D27C.f[d00P])[kzero];//kt + f27B = (D27C.f[d00M])[kb ]; + f27NE = (D27C.f[dPP0])[kzero];//kne + f27SW = (D27C.f[dMM0])[ksw ]; + f27SE = (D27C.f[dPM0])[ks ];//kse + f27NW = (D27C.f[dMP0])[kw ];//knw + f27TE = (D27C.f[dP0P])[kzero];//kte + f27BW = (D27C.f[dM0M])[kbw ]; + f27BE = (D27C.f[dP0M])[kb ];//kbe + f27TW = (D27C.f[dM0P])[kw ];//ktw + f27TN = (D27C.f[d0PP])[kzero];//ktn + f27BS = (D27C.f[d0MM])[kbs ]; + f27BN = (D27C.f[d0PM])[kb ];//kbn + f27TS = (D27C.f[d0MP])[ks ];//kts + f27ZERO = (D27C.f[d000])[kzero];//kzero + f27TNE = (D27C.f[dPPP])[kzero];//ktne + f27TSW = (D27C.f[dMMP])[ksw ];//ktsw + f27TSE = (D27C.f[dPMP])[ks ];//ktse + f27TNW = (D27C.f[dMPP])[kw ];//ktnw + f27BNE = (D27C.f[dPPM])[kb ];//kbne + f27BSW = (D27C.f[dMMM])[kbsw ]; + f27BSE = (D27C.f[dPMM])[kbs ];//kbse + f27BNW = (D27C.f[dMPM])[kbw ];//kbnw Conc_C_NWT = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + @@ -46424,33 +46424,33 @@ __global__ void scaleCFThS27( real* DC, f_BSE = fbseC[kbs]; f_BNW = fbnwC[kbw]; ////////////////////////////////////////////////////////////////////////////////// - f27E = (D27C.f[DIR_P00])[kzero];//ke - f27W = (D27C.f[DIR_M00])[kw ]; - f27N = (D27C.f[DIR_0P0])[kzero];//kn - f27S = (D27C.f[DIR_0M0])[ks ]; - f27T = (D27C.f[DIR_00P])[kzero];//kt - f27B = (D27C.f[DIR_00M])[kb ]; - f27NE = (D27C.f[DIR_PP0])[kzero];//kne - f27SW = (D27C.f[DIR_MM0])[ksw ]; - f27SE = (D27C.f[DIR_PM0])[ks ];//kse - f27NW = (D27C.f[DIR_MP0])[kw ];//knw - f27TE = (D27C.f[DIR_P0P])[kzero];//kte - f27BW = (D27C.f[DIR_M0M])[kbw ]; - f27BE = (D27C.f[DIR_P0M])[kb ];//kbe - f27TW = (D27C.f[DIR_M0P])[kw ];//ktw - f27TN = (D27C.f[DIR_0PP])[kzero];//ktn - f27BS = (D27C.f[DIR_0MM])[kbs ]; - f27BN = (D27C.f[DIR_0PM])[kb ];//kbn - f27TS = (D27C.f[DIR_0MP])[ks ];//kts - f27ZERO = (D27C.f[DIR_000])[kzero];//kzero - f27TNE = (D27C.f[DIR_PPP])[kzero];//ktne - f27TSW = (D27C.f[DIR_MMP])[ksw ];//ktsw - f27TSE = (D27C.f[DIR_PMP])[ks ];//ktse - f27TNW = (D27C.f[DIR_MPP])[kw ];//ktnw - f27BNE = (D27C.f[DIR_PPM])[kb ];//kbne - f27BSW = (D27C.f[DIR_MMM])[kbsw ]; - f27BSE = (D27C.f[DIR_PMM])[kbs ];//kbse - f27BNW = (D27C.f[DIR_MPM])[kbw ];//kbnw + f27E = (D27C.f[dP00])[kzero];//ke + f27W = (D27C.f[dM00])[kw ]; + f27N = (D27C.f[d0P0])[kzero];//kn + f27S = (D27C.f[d0M0])[ks ]; + f27T = (D27C.f[d00P])[kzero];//kt + f27B = (D27C.f[d00M])[kb ]; + f27NE = (D27C.f[dPP0])[kzero];//kne + f27SW = (D27C.f[dMM0])[ksw ]; + f27SE = (D27C.f[dPM0])[ks ];//kse + f27NW = (D27C.f[dMP0])[kw ];//knw + f27TE = (D27C.f[dP0P])[kzero];//kte + f27BW = (D27C.f[dM0M])[kbw ]; + f27BE = (D27C.f[dP0M])[kb ];//kbe + f27TW = (D27C.f[dM0P])[kw ];//ktw + f27TN = (D27C.f[d0PP])[kzero];//ktn + f27BS = (D27C.f[d0MM])[kbs ]; + f27BN = (D27C.f[d0PM])[kb ];//kbn + f27TS = (D27C.f[d0MP])[ks ];//kts + f27ZERO = (D27C.f[d000])[kzero];//kzero + f27TNE = (D27C.f[dPPP])[kzero];//ktne + f27TSW = (D27C.f[dMMP])[ksw ];//ktsw + f27TSE = (D27C.f[dPMP])[ks ];//ktse + f27TNW = (D27C.f[dMPP])[kw ];//ktnw + f27BNE = (D27C.f[dPPM])[kb ];//kbne + f27BSW = (D27C.f[dMMM])[kbsw ]; + f27BSE = (D27C.f[dPMM])[kbs ];//kbse + f27BNW = (D27C.f[dMPM])[kbw ];//kbnw Conc_C_NET = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + @@ -46511,33 +46511,33 @@ __global__ void scaleCFThS27( real* DC, f_BSE = fbseC[kbs]; f_BNW = fbnwC[kbw]; //////////////////////////////////////////////////////////////////////////////// - f27E = (D27C.f[DIR_P00])[kzero];//ke - f27W = (D27C.f[DIR_M00])[kw ]; - f27N = (D27C.f[DIR_0P0])[kzero];//kn - f27S = (D27C.f[DIR_0M0])[ks ]; - f27T = (D27C.f[DIR_00P])[kzero];//kt - f27B = (D27C.f[DIR_00M])[kb ]; - f27NE = (D27C.f[DIR_PP0])[kzero];//kne - f27SW = (D27C.f[DIR_MM0])[ksw ]; - f27SE = (D27C.f[DIR_PM0])[ks ];//kse - f27NW = (D27C.f[DIR_MP0])[kw ];//knw - f27TE = (D27C.f[DIR_P0P])[kzero];//kte - f27BW = (D27C.f[DIR_M0M])[kbw ]; - f27BE = (D27C.f[DIR_P0M])[kb ];//kbe - f27TW = (D27C.f[DIR_M0P])[kw ];//ktw - f27TN = (D27C.f[DIR_0PP])[kzero];//ktn - f27BS = (D27C.f[DIR_0MM])[kbs ]; - f27BN = (D27C.f[DIR_0PM])[kb ];//kbn - f27TS = (D27C.f[DIR_0MP])[ks ];//kts - f27ZERO = (D27C.f[DIR_000])[kzero];//kzero - f27TNE = (D27C.f[DIR_PPP])[kzero];//ktne - f27TSW = (D27C.f[DIR_MMP])[ksw ];//ktsw - f27TSE = (D27C.f[DIR_PMP])[ks ];//ktse - f27TNW = (D27C.f[DIR_MPP])[kw ];//ktnw - f27BNE = (D27C.f[DIR_PPM])[kb ];//kbne - f27BSW = (D27C.f[DIR_MMM])[kbsw ]; - f27BSE = (D27C.f[DIR_PMM])[kbs ];//kbse - f27BNW = (D27C.f[DIR_MPM])[kbw ];//kbnw + f27E = (D27C.f[dP00])[kzero];//ke + f27W = (D27C.f[dM00])[kw ]; + f27N = (D27C.f[d0P0])[kzero];//kn + f27S = (D27C.f[d0M0])[ks ]; + f27T = (D27C.f[d00P])[kzero];//kt + f27B = (D27C.f[d00M])[kb ]; + f27NE = (D27C.f[dPP0])[kzero];//kne + f27SW = (D27C.f[dMM0])[ksw ]; + f27SE = (D27C.f[dPM0])[ks ];//kse + f27NW = (D27C.f[dMP0])[kw ];//knw + f27TE = (D27C.f[dP0P])[kzero];//kte + f27BW = (D27C.f[dM0M])[kbw ]; + f27BE = (D27C.f[dP0M])[kb ];//kbe + f27TW = (D27C.f[dM0P])[kw ];//ktw + f27TN = (D27C.f[d0PP])[kzero];//ktn + f27BS = (D27C.f[d0MM])[kbs ]; + f27BN = (D27C.f[d0PM])[kb ];//kbn + f27TS = (D27C.f[d0MP])[ks ];//kts + f27ZERO = (D27C.f[d000])[kzero];//kzero + f27TNE = (D27C.f[dPPP])[kzero];//ktne + f27TSW = (D27C.f[dMMP])[ksw ];//ktsw + f27TSE = (D27C.f[dPMP])[ks ];//ktse + f27TNW = (D27C.f[dMPP])[kw ];//ktnw + f27BNE = (D27C.f[dPPM])[kb ];//kbne + f27BSW = (D27C.f[dMMM])[kbsw ]; + f27BSE = (D27C.f[dPMM])[kbs ];//kbse + f27BNW = (D27C.f[dMPM])[kbw ];//kbnw Conc_C_NEB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + @@ -46655,33 +46655,33 @@ __global__ void scaleCFThS27( real* DC, cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - (D27F.f[DIR_000])[kzero] = c8o27* Conc_F*(c1o1-cu_sq); - (D27F.f[DIR_P00])[kzero] = c2o27* (c3o1*( Mx )+Conc_F*(c1o1+c9o2*( vx1 )*( vx1 )-cu_sq)); - (D27F.f[DIR_M00])[kw ] = c2o27* (c3o1*(-Mx )+Conc_F*(c1o1+c9o2*(-vx1 )*(-vx1 )-cu_sq)); - (D27F.f[DIR_0P0])[kzero] = c2o27* (c3o1*( My )+Conc_F*(c1o1+c9o2*( vx2 )*( vx2 )-cu_sq)); - (D27F.f[DIR_0M0])[ks ] = c2o27* (c3o1*( -My )+Conc_F*(c1o1+c9o2*( -vx2 )*( -vx2 )-cu_sq)); - (D27F.f[DIR_00P])[kzero] = c2o27* (c3o1*( Mz)+Conc_F*(c1o1+c9o2*( vx3)*( vx3)-cu_sq)); - (D27F.f[DIR_00M])[kb ] = c2o27* (c3o1*( -Mz)+Conc_F*(c1o1+c9o2*( -vx3)*( -vx3)-cu_sq)); - (D27F.f[DIR_PP0])[kzero] = c1o54* (c3o1*( Mx +My )+Conc_F*(c1o1+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); - (D27F.f[DIR_MM0])[ksw ] = c1o54* (c3o1*(-Mx -My )+Conc_F*(c1o1+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); - (D27F.f[DIR_PM0])[ks ] = c1o54* (c3o1*( Mx -My )+Conc_F*(c1o1+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); - (D27F.f[DIR_MP0])[kw ] = c1o54* (c3o1*(-Mx +My )+Conc_F*(c1o1+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); - (D27F.f[DIR_P0P])[kzero] = c1o54* (c3o1*( Mx +Mz)+Conc_F*(c1o1+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); - (D27F.f[DIR_M0M])[kbw ] = c1o54* (c3o1*(-Mx -Mz)+Conc_F*(c1o1+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); - (D27F.f[DIR_P0M])[kb ] = c1o54* (c3o1*( Mx -Mz)+Conc_F*(c1o1+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); - (D27F.f[DIR_M0P])[kw ] = c1o54* (c3o1*(-Mx +Mz)+Conc_F*(c1o1+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); - (D27F.f[DIR_0PP])[kzero] = c1o54* (c3o1*( My +Mz)+Conc_F*(c1o1+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); - (D27F.f[DIR_0MM])[kbs ] = c1o54* (c3o1*( -My -Mz)+Conc_F*(c1o1+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); - (D27F.f[DIR_0PM])[kb ] = c1o54* (c3o1*( My -Mz)+Conc_F*(c1o1+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); - (D27F.f[DIR_0MP])[ks ] = c1o54* (c3o1*( -My +Mz)+Conc_F*(c1o1+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); - (D27F.f[DIR_PPP])[kzero] = c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); - (D27F.f[DIR_MMM])[kbsw ] = c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); - (D27F.f[DIR_PPM])[kb ] = c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); - (D27F.f[DIR_MMP])[ksw ] = c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); - (D27F.f[DIR_PMP])[ks ] = c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); - (D27F.f[DIR_MPM])[kbw ] = c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); - (D27F.f[DIR_PMM])[kbs ] = c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); - (D27F.f[DIR_MPP])[kw ] = c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); + (D27F.f[d000])[kzero] = c8o27* Conc_F*(c1o1-cu_sq); + (D27F.f[dP00])[kzero] = c2o27* (c3o1*( Mx )+Conc_F*(c1o1+c9o2*( vx1 )*( vx1 )-cu_sq)); + (D27F.f[dM00])[kw ] = c2o27* (c3o1*(-Mx )+Conc_F*(c1o1+c9o2*(-vx1 )*(-vx1 )-cu_sq)); + (D27F.f[d0P0])[kzero] = c2o27* (c3o1*( My )+Conc_F*(c1o1+c9o2*( vx2 )*( vx2 )-cu_sq)); + (D27F.f[d0M0])[ks ] = c2o27* (c3o1*( -My )+Conc_F*(c1o1+c9o2*( -vx2 )*( -vx2 )-cu_sq)); + (D27F.f[d00P])[kzero] = c2o27* (c3o1*( Mz)+Conc_F*(c1o1+c9o2*( vx3)*( vx3)-cu_sq)); + (D27F.f[d00M])[kb ] = c2o27* (c3o1*( -Mz)+Conc_F*(c1o1+c9o2*( -vx3)*( -vx3)-cu_sq)); + (D27F.f[dPP0])[kzero] = c1o54* (c3o1*( Mx +My )+Conc_F*(c1o1+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); + (D27F.f[dMM0])[ksw ] = c1o54* (c3o1*(-Mx -My )+Conc_F*(c1o1+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); + (D27F.f[dPM0])[ks ] = c1o54* (c3o1*( Mx -My )+Conc_F*(c1o1+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); + (D27F.f[dMP0])[kw ] = c1o54* (c3o1*(-Mx +My )+Conc_F*(c1o1+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); + (D27F.f[dP0P])[kzero] = c1o54* (c3o1*( Mx +Mz)+Conc_F*(c1o1+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); + (D27F.f[dM0M])[kbw ] = c1o54* (c3o1*(-Mx -Mz)+Conc_F*(c1o1+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); + (D27F.f[dP0M])[kb ] = c1o54* (c3o1*( Mx -Mz)+Conc_F*(c1o1+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); + (D27F.f[dM0P])[kw ] = c1o54* (c3o1*(-Mx +Mz)+Conc_F*(c1o1+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); + (D27F.f[d0PP])[kzero] = c1o54* (c3o1*( My +Mz)+Conc_F*(c1o1+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); + (D27F.f[d0MM])[kbs ] = c1o54* (c3o1*( -My -Mz)+Conc_F*(c1o1+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); + (D27F.f[d0PM])[kb ] = c1o54* (c3o1*( My -Mz)+Conc_F*(c1o1+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); + (D27F.f[d0MP])[ks ] = c1o54* (c3o1*( -My +Mz)+Conc_F*(c1o1+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); + (D27F.f[dPPP])[kzero] = c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); + (D27F.f[dMMM])[kbsw ] = c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); + (D27F.f[dPPM])[kb ] = c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); + (D27F.f[dMMP])[ksw ] = c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); + (D27F.f[dPMP])[ks ] = c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); + (D27F.f[dMPM])[kbw ] = c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); + (D27F.f[dPMM])[kbs ] = c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); + (D27F.f[dMPP])[kw ] = c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); @@ -46733,33 +46733,33 @@ __global__ void scaleCFThS27( real* DC, cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - (D27F.f[DIR_000])[kzero] = c8o27* Conc_F*(c1o1-cu_sq); - (D27F.f[DIR_P00])[kzero] = c2o27* (c3o1*( Mx )+Conc_F*(c1o1+c9o2*( vx1 )*( vx1 )-cu_sq)); - (D27F.f[DIR_M00])[kw ] = c2o27* (c3o1*(-Mx )+Conc_F*(c1o1+c9o2*(-vx1 )*(-vx1 )-cu_sq)); - (D27F.f[DIR_0P0])[kzero] = c2o27* (c3o1*( My )+Conc_F*(c1o1+c9o2*( vx2 )*( vx2 )-cu_sq)); - (D27F.f[DIR_0M0])[ks ] = c2o27* (c3o1*( -My )+Conc_F*(c1o1+c9o2*( -vx2 )*( -vx2 )-cu_sq)); - (D27F.f[DIR_00P])[kzero] = c2o27* (c3o1*( Mz)+Conc_F*(c1o1+c9o2*( vx3)*( vx3)-cu_sq)); - (D27F.f[DIR_00M])[kb ] = c2o27* (c3o1*( -Mz)+Conc_F*(c1o1+c9o2*( -vx3)*( -vx3)-cu_sq)); - (D27F.f[DIR_PP0])[kzero] = c1o54* (c3o1*( Mx +My )+Conc_F*(c1o1+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); - (D27F.f[DIR_MM0])[ksw ] = c1o54* (c3o1*(-Mx -My )+Conc_F*(c1o1+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); - (D27F.f[DIR_PM0])[ks ] = c1o54* (c3o1*( Mx -My )+Conc_F*(c1o1+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); - (D27F.f[DIR_MP0])[kw ] = c1o54* (c3o1*(-Mx +My )+Conc_F*(c1o1+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); - (D27F.f[DIR_P0P])[kzero] = c1o54* (c3o1*( Mx +Mz)+Conc_F*(c1o1+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); - (D27F.f[DIR_M0M])[kbw ] = c1o54* (c3o1*(-Mx -Mz)+Conc_F*(c1o1+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); - (D27F.f[DIR_P0M])[kb ] = c1o54* (c3o1*( Mx -Mz)+Conc_F*(c1o1+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); - (D27F.f[DIR_M0P])[kw ] = c1o54* (c3o1*(-Mx +Mz)+Conc_F*(c1o1+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); - (D27F.f[DIR_0PP])[kzero] = c1o54* (c3o1*( My +Mz)+Conc_F*(c1o1+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); - (D27F.f[DIR_0MM])[kbs ] = c1o54* (c3o1*( -My -Mz)+Conc_F*(c1o1+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); - (D27F.f[DIR_0PM])[kb ] = c1o54* (c3o1*( My -Mz)+Conc_F*(c1o1+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); - (D27F.f[DIR_0MP])[ks ] = c1o54* (c3o1*( -My +Mz)+Conc_F*(c1o1+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); - (D27F.f[DIR_PPP])[kzero] = c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); - (D27F.f[DIR_MMM])[kbsw ] = c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); - (D27F.f[DIR_PPM])[kb ] = c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); - (D27F.f[DIR_MMP])[ksw ] = c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); - (D27F.f[DIR_PMP])[ks ] = c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); - (D27F.f[DIR_MPM])[kbw ] = c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); - (D27F.f[DIR_PMM])[kbs ] = c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); - (D27F.f[DIR_MPP])[kw ] = c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); + (D27F.f[d000])[kzero] = c8o27* Conc_F*(c1o1-cu_sq); + (D27F.f[dP00])[kzero] = c2o27* (c3o1*( Mx )+Conc_F*(c1o1+c9o2*( vx1 )*( vx1 )-cu_sq)); + (D27F.f[dM00])[kw ] = c2o27* (c3o1*(-Mx )+Conc_F*(c1o1+c9o2*(-vx1 )*(-vx1 )-cu_sq)); + (D27F.f[d0P0])[kzero] = c2o27* (c3o1*( My )+Conc_F*(c1o1+c9o2*( vx2 )*( vx2 )-cu_sq)); + (D27F.f[d0M0])[ks ] = c2o27* (c3o1*( -My )+Conc_F*(c1o1+c9o2*( -vx2 )*( -vx2 )-cu_sq)); + (D27F.f[d00P])[kzero] = c2o27* (c3o1*( Mz)+Conc_F*(c1o1+c9o2*( vx3)*( vx3)-cu_sq)); + (D27F.f[d00M])[kb ] = c2o27* (c3o1*( -Mz)+Conc_F*(c1o1+c9o2*( -vx3)*( -vx3)-cu_sq)); + (D27F.f[dPP0])[kzero] = c1o54* (c3o1*( Mx +My )+Conc_F*(c1o1+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); + (D27F.f[dMM0])[ksw ] = c1o54* (c3o1*(-Mx -My )+Conc_F*(c1o1+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); + (D27F.f[dPM0])[ks ] = c1o54* (c3o1*( Mx -My )+Conc_F*(c1o1+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); + (D27F.f[dMP0])[kw ] = c1o54* (c3o1*(-Mx +My )+Conc_F*(c1o1+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); + (D27F.f[dP0P])[kzero] = c1o54* (c3o1*( Mx +Mz)+Conc_F*(c1o1+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); + (D27F.f[dM0M])[kbw ] = c1o54* (c3o1*(-Mx -Mz)+Conc_F*(c1o1+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); + (D27F.f[dP0M])[kb ] = c1o54* (c3o1*( Mx -Mz)+Conc_F*(c1o1+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); + (D27F.f[dM0P])[kw ] = c1o54* (c3o1*(-Mx +Mz)+Conc_F*(c1o1+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); + (D27F.f[d0PP])[kzero] = c1o54* (c3o1*( My +Mz)+Conc_F*(c1o1+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); + (D27F.f[d0MM])[kbs ] = c1o54* (c3o1*( -My -Mz)+Conc_F*(c1o1+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); + (D27F.f[d0PM])[kb ] = c1o54* (c3o1*( My -Mz)+Conc_F*(c1o1+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); + (D27F.f[d0MP])[ks ] = c1o54* (c3o1*( -My +Mz)+Conc_F*(c1o1+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); + (D27F.f[dPPP])[kzero] = c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); + (D27F.f[dMMM])[kbsw ] = c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); + (D27F.f[dPPM])[kb ] = c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); + (D27F.f[dMMP])[ksw ] = c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); + (D27F.f[dPMP])[ks ] = c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); + (D27F.f[dMPM])[kbw ] = c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); + (D27F.f[dPMM])[kbs ] = c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); + (D27F.f[dMPP])[kw ] = c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); @@ -46811,33 +46811,33 @@ __global__ void scaleCFThS27( real* DC, cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - (D27F.f[DIR_000])[kzero] = c8o27* Conc_F*(c1o1-cu_sq); - (D27F.f[DIR_P00])[kzero] = c2o27* (c3o1*( Mx )+Conc_F*(c1o1+c9o2*( vx1 )*( vx1 )-cu_sq)); - (D27F.f[DIR_M00])[kw ] = c2o27* (c3o1*(-Mx )+Conc_F*(c1o1+c9o2*(-vx1 )*(-vx1 )-cu_sq)); - (D27F.f[DIR_0P0])[kzero] = c2o27* (c3o1*( My )+Conc_F*(c1o1+c9o2*( vx2 )*( vx2 )-cu_sq)); - (D27F.f[DIR_0M0])[ks ] = c2o27* (c3o1*( -My )+Conc_F*(c1o1+c9o2*( -vx2 )*( -vx2 )-cu_sq)); - (D27F.f[DIR_00P])[kzero] = c2o27* (c3o1*( Mz)+Conc_F*(c1o1+c9o2*( vx3)*( vx3)-cu_sq)); - (D27F.f[DIR_00M])[kb ] = c2o27* (c3o1*( -Mz)+Conc_F*(c1o1+c9o2*( -vx3)*( -vx3)-cu_sq)); - (D27F.f[DIR_PP0])[kzero] = c1o54* (c3o1*( Mx +My )+Conc_F*(c1o1+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); - (D27F.f[DIR_MM0])[ksw ] = c1o54* (c3o1*(-Mx -My )+Conc_F*(c1o1+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); - (D27F.f[DIR_PM0])[ks ] = c1o54* (c3o1*( Mx -My )+Conc_F*(c1o1+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); - (D27F.f[DIR_MP0])[kw ] = c1o54* (c3o1*(-Mx +My )+Conc_F*(c1o1+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); - (D27F.f[DIR_P0P])[kzero] = c1o54* (c3o1*( Mx +Mz)+Conc_F*(c1o1+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); - (D27F.f[DIR_M0M])[kbw ] = c1o54* (c3o1*(-Mx -Mz)+Conc_F*(c1o1+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); - (D27F.f[DIR_P0M])[kb ] = c1o54* (c3o1*( Mx -Mz)+Conc_F*(c1o1+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); - (D27F.f[DIR_M0P])[kw ] = c1o54* (c3o1*(-Mx +Mz)+Conc_F*(c1o1+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); - (D27F.f[DIR_0PP])[kzero] = c1o54* (c3o1*( My +Mz)+Conc_F*(c1o1+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); - (D27F.f[DIR_0MM])[kbs ] = c1o54* (c3o1*( -My -Mz)+Conc_F*(c1o1+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); - (D27F.f[DIR_0PM])[kb ] = c1o54* (c3o1*( My -Mz)+Conc_F*(c1o1+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); - (D27F.f[DIR_0MP])[ks ] = c1o54* (c3o1*( -My +Mz)+Conc_F*(c1o1+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); - (D27F.f[DIR_PPP])[kzero] = c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); - (D27F.f[DIR_MMM])[kbsw ] = c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); - (D27F.f[DIR_PPM])[kb ] = c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); - (D27F.f[DIR_MMP])[ksw ] = c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); - (D27F.f[DIR_PMP])[ks ] = c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); - (D27F.f[DIR_MPM])[kbw ] = c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); - (D27F.f[DIR_PMM])[kbs ] = c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); - (D27F.f[DIR_MPP])[kw ] = c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); + (D27F.f[d000])[kzero] = c8o27* Conc_F*(c1o1-cu_sq); + (D27F.f[dP00])[kzero] = c2o27* (c3o1*( Mx )+Conc_F*(c1o1+c9o2*( vx1 )*( vx1 )-cu_sq)); + (D27F.f[dM00])[kw ] = c2o27* (c3o1*(-Mx )+Conc_F*(c1o1+c9o2*(-vx1 )*(-vx1 )-cu_sq)); + (D27F.f[d0P0])[kzero] = c2o27* (c3o1*( My )+Conc_F*(c1o1+c9o2*( vx2 )*( vx2 )-cu_sq)); + (D27F.f[d0M0])[ks ] = c2o27* (c3o1*( -My )+Conc_F*(c1o1+c9o2*( -vx2 )*( -vx2 )-cu_sq)); + (D27F.f[d00P])[kzero] = c2o27* (c3o1*( Mz)+Conc_F*(c1o1+c9o2*( vx3)*( vx3)-cu_sq)); + (D27F.f[d00M])[kb ] = c2o27* (c3o1*( -Mz)+Conc_F*(c1o1+c9o2*( -vx3)*( -vx3)-cu_sq)); + (D27F.f[dPP0])[kzero] = c1o54* (c3o1*( Mx +My )+Conc_F*(c1o1+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); + (D27F.f[dMM0])[ksw ] = c1o54* (c3o1*(-Mx -My )+Conc_F*(c1o1+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); + (D27F.f[dPM0])[ks ] = c1o54* (c3o1*( Mx -My )+Conc_F*(c1o1+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); + (D27F.f[dMP0])[kw ] = c1o54* (c3o1*(-Mx +My )+Conc_F*(c1o1+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); + (D27F.f[dP0P])[kzero] = c1o54* (c3o1*( Mx +Mz)+Conc_F*(c1o1+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); + (D27F.f[dM0M])[kbw ] = c1o54* (c3o1*(-Mx -Mz)+Conc_F*(c1o1+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); + (D27F.f[dP0M])[kb ] = c1o54* (c3o1*( Mx -Mz)+Conc_F*(c1o1+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); + (D27F.f[dM0P])[kw ] = c1o54* (c3o1*(-Mx +Mz)+Conc_F*(c1o1+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); + (D27F.f[d0PP])[kzero] = c1o54* (c3o1*( My +Mz)+Conc_F*(c1o1+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); + (D27F.f[d0MM])[kbs ] = c1o54* (c3o1*( -My -Mz)+Conc_F*(c1o1+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); + (D27F.f[d0PM])[kb ] = c1o54* (c3o1*( My -Mz)+Conc_F*(c1o1+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); + (D27F.f[d0MP])[ks ] = c1o54* (c3o1*( -My +Mz)+Conc_F*(c1o1+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); + (D27F.f[dPPP])[kzero] = c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); + (D27F.f[dMMM])[kbsw ] = c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); + (D27F.f[dPPM])[kb ] = c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); + (D27F.f[dMMP])[ksw ] = c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); + (D27F.f[dPMP])[ks ] = c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); + (D27F.f[dMPM])[kbw ] = c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); + (D27F.f[dPMM])[kbs ] = c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); + (D27F.f[dMPP])[kw ] = c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); @@ -46889,33 +46889,33 @@ __global__ void scaleCFThS27( real* DC, cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - (D27F.f[DIR_000])[kzero] = c8o27* Conc_F*(c1o1-cu_sq); - (D27F.f[DIR_P00])[kzero] = c2o27* (c3o1*( Mx )+Conc_F*(c1o1+c9o2*( vx1 )*( vx1 )-cu_sq)); - (D27F.f[DIR_M00])[kw ] = c2o27* (c3o1*(-Mx )+Conc_F*(c1o1+c9o2*(-vx1 )*(-vx1 )-cu_sq)); - (D27F.f[DIR_0P0])[kzero] = c2o27* (c3o1*( My )+Conc_F*(c1o1+c9o2*( vx2 )*( vx2 )-cu_sq)); - (D27F.f[DIR_0M0])[ks ] = c2o27* (c3o1*( -My )+Conc_F*(c1o1+c9o2*( -vx2 )*( -vx2 )-cu_sq)); - (D27F.f[DIR_00P])[kzero] = c2o27* (c3o1*( Mz)+Conc_F*(c1o1+c9o2*( vx3)*( vx3)-cu_sq)); - (D27F.f[DIR_00M])[kb ] = c2o27* (c3o1*( -Mz)+Conc_F*(c1o1+c9o2*( -vx3)*( -vx3)-cu_sq)); - (D27F.f[DIR_PP0])[kzero] = c1o54* (c3o1*( Mx +My )+Conc_F*(c1o1+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); - (D27F.f[DIR_MM0])[ksw ] = c1o54* (c3o1*(-Mx -My )+Conc_F*(c1o1+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); - (D27F.f[DIR_PM0])[ks ] = c1o54* (c3o1*( Mx -My )+Conc_F*(c1o1+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); - (D27F.f[DIR_MP0])[kw ] = c1o54* (c3o1*(-Mx +My )+Conc_F*(c1o1+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); - (D27F.f[DIR_P0P])[kzero] = c1o54* (c3o1*( Mx +Mz)+Conc_F*(c1o1+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); - (D27F.f[DIR_M0M])[kbw ] = c1o54* (c3o1*(-Mx -Mz)+Conc_F*(c1o1+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); - (D27F.f[DIR_P0M])[kb ] = c1o54* (c3o1*( Mx -Mz)+Conc_F*(c1o1+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); - (D27F.f[DIR_M0P])[kw ] = c1o54* (c3o1*(-Mx +Mz)+Conc_F*(c1o1+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); - (D27F.f[DIR_0PP])[kzero] = c1o54* (c3o1*( My +Mz)+Conc_F*(c1o1+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); - (D27F.f[DIR_0MM])[kbs ] = c1o54* (c3o1*( -My -Mz)+Conc_F*(c1o1+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); - (D27F.f[DIR_0PM])[kb ] = c1o54* (c3o1*( My -Mz)+Conc_F*(c1o1+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); - (D27F.f[DIR_0MP])[ks ] = c1o54* (c3o1*( -My +Mz)+Conc_F*(c1o1+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); - (D27F.f[DIR_PPP])[kzero] = c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); - (D27F.f[DIR_MMM])[kbsw ] = c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); - (D27F.f[DIR_PPM])[kb ] = c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); - (D27F.f[DIR_MMP])[ksw ] = c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); - (D27F.f[DIR_PMP])[ks ] = c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); - (D27F.f[DIR_MPM])[kbw ] = c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); - (D27F.f[DIR_PMM])[kbs ] = c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); - (D27F.f[DIR_MPP])[kw ] = c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); + (D27F.f[d000])[kzero] = c8o27* Conc_F*(c1o1-cu_sq); + (D27F.f[dP00])[kzero] = c2o27* (c3o1*( Mx )+Conc_F*(c1o1+c9o2*( vx1 )*( vx1 )-cu_sq)); + (D27F.f[dM00])[kw ] = c2o27* (c3o1*(-Mx )+Conc_F*(c1o1+c9o2*(-vx1 )*(-vx1 )-cu_sq)); + (D27F.f[d0P0])[kzero] = c2o27* (c3o1*( My )+Conc_F*(c1o1+c9o2*( vx2 )*( vx2 )-cu_sq)); + (D27F.f[d0M0])[ks ] = c2o27* (c3o1*( -My )+Conc_F*(c1o1+c9o2*( -vx2 )*( -vx2 )-cu_sq)); + (D27F.f[d00P])[kzero] = c2o27* (c3o1*( Mz)+Conc_F*(c1o1+c9o2*( vx3)*( vx3)-cu_sq)); + (D27F.f[d00M])[kb ] = c2o27* (c3o1*( -Mz)+Conc_F*(c1o1+c9o2*( -vx3)*( -vx3)-cu_sq)); + (D27F.f[dPP0])[kzero] = c1o54* (c3o1*( Mx +My )+Conc_F*(c1o1+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); + (D27F.f[dMM0])[ksw ] = c1o54* (c3o1*(-Mx -My )+Conc_F*(c1o1+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); + (D27F.f[dPM0])[ks ] = c1o54* (c3o1*( Mx -My )+Conc_F*(c1o1+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); + (D27F.f[dMP0])[kw ] = c1o54* (c3o1*(-Mx +My )+Conc_F*(c1o1+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); + (D27F.f[dP0P])[kzero] = c1o54* (c3o1*( Mx +Mz)+Conc_F*(c1o1+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); + (D27F.f[dM0M])[kbw ] = c1o54* (c3o1*(-Mx -Mz)+Conc_F*(c1o1+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); + (D27F.f[dP0M])[kb ] = c1o54* (c3o1*( Mx -Mz)+Conc_F*(c1o1+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); + (D27F.f[dM0P])[kw ] = c1o54* (c3o1*(-Mx +Mz)+Conc_F*(c1o1+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); + (D27F.f[d0PP])[kzero] = c1o54* (c3o1*( My +Mz)+Conc_F*(c1o1+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); + (D27F.f[d0MM])[kbs ] = c1o54* (c3o1*( -My -Mz)+Conc_F*(c1o1+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); + (D27F.f[d0PM])[kb ] = c1o54* (c3o1*( My -Mz)+Conc_F*(c1o1+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); + (D27F.f[d0MP])[ks ] = c1o54* (c3o1*( -My +Mz)+Conc_F*(c1o1+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); + (D27F.f[dPPP])[kzero] = c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); + (D27F.f[dMMM])[kbsw ] = c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); + (D27F.f[dPPM])[kb ] = c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); + (D27F.f[dMMP])[ksw ] = c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); + (D27F.f[dPMP])[ks ] = c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); + (D27F.f[dMPM])[kbw ] = c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); + (D27F.f[dPMM])[kbs ] = c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); + (D27F.f[dMPP])[kw ] = c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); @@ -46977,33 +46977,33 @@ __global__ void scaleCFThS27( real* DC, cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - (D27F.f[DIR_000])[kzero] = c8o27* Conc_F*(c1o1-cu_sq); - (D27F.f[DIR_P00])[kzero] = c2o27* (c3o1*( Mx )+Conc_F*(c1o1+c9o2*( vx1 )*( vx1 )-cu_sq)); - (D27F.f[DIR_M00])[kw ] = c2o27* (c3o1*(-Mx )+Conc_F*(c1o1+c9o2*(-vx1 )*(-vx1 )-cu_sq)); - (D27F.f[DIR_0P0])[kzero] = c2o27* (c3o1*( My )+Conc_F*(c1o1+c9o2*( vx2 )*( vx2 )-cu_sq)); - (D27F.f[DIR_0M0])[ks ] = c2o27* (c3o1*( -My )+Conc_F*(c1o1+c9o2*( -vx2 )*( -vx2 )-cu_sq)); - (D27F.f[DIR_00P])[kzero] = c2o27* (c3o1*( Mz)+Conc_F*(c1o1+c9o2*( vx3)*( vx3)-cu_sq)); - (D27F.f[DIR_00M])[kb ] = c2o27* (c3o1*( -Mz)+Conc_F*(c1o1+c9o2*( -vx3)*( -vx3)-cu_sq)); - (D27F.f[DIR_PP0])[kzero] = c1o54* (c3o1*( Mx +My )+Conc_F*(c1o1+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); - (D27F.f[DIR_MM0])[ksw ] = c1o54* (c3o1*(-Mx -My )+Conc_F*(c1o1+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); - (D27F.f[DIR_PM0])[ks ] = c1o54* (c3o1*( Mx -My )+Conc_F*(c1o1+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); - (D27F.f[DIR_MP0])[kw ] = c1o54* (c3o1*(-Mx +My )+Conc_F*(c1o1+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); - (D27F.f[DIR_P0P])[kzero] = c1o54* (c3o1*( Mx +Mz)+Conc_F*(c1o1+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); - (D27F.f[DIR_M0M])[kbw ] = c1o54* (c3o1*(-Mx -Mz)+Conc_F*(c1o1+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); - (D27F.f[DIR_P0M])[kb ] = c1o54* (c3o1*( Mx -Mz)+Conc_F*(c1o1+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); - (D27F.f[DIR_M0P])[kw ] = c1o54* (c3o1*(-Mx +Mz)+Conc_F*(c1o1+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); - (D27F.f[DIR_0PP])[kzero] = c1o54* (c3o1*( My +Mz)+Conc_F*(c1o1+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); - (D27F.f[DIR_0MM])[kbs ] = c1o54* (c3o1*( -My -Mz)+Conc_F*(c1o1+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); - (D27F.f[DIR_0PM])[kb ] = c1o54* (c3o1*( My -Mz)+Conc_F*(c1o1+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); - (D27F.f[DIR_0MP])[ks ] = c1o54* (c3o1*( -My +Mz)+Conc_F*(c1o1+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); - (D27F.f[DIR_PPP])[kzero] = c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); - (D27F.f[DIR_MMM])[kbsw ] = c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); - (D27F.f[DIR_PPM])[kb ] = c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); - (D27F.f[DIR_MMP])[ksw ] = c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); - (D27F.f[DIR_PMP])[ks ] = c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); - (D27F.f[DIR_MPM])[kbw ] = c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); - (D27F.f[DIR_PMM])[kbs ] = c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); - (D27F.f[DIR_MPP])[kw ] = c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); + (D27F.f[d000])[kzero] = c8o27* Conc_F*(c1o1-cu_sq); + (D27F.f[dP00])[kzero] = c2o27* (c3o1*( Mx )+Conc_F*(c1o1+c9o2*( vx1 )*( vx1 )-cu_sq)); + (D27F.f[dM00])[kw ] = c2o27* (c3o1*(-Mx )+Conc_F*(c1o1+c9o2*(-vx1 )*(-vx1 )-cu_sq)); + (D27F.f[d0P0])[kzero] = c2o27* (c3o1*( My )+Conc_F*(c1o1+c9o2*( vx2 )*( vx2 )-cu_sq)); + (D27F.f[d0M0])[ks ] = c2o27* (c3o1*( -My )+Conc_F*(c1o1+c9o2*( -vx2 )*( -vx2 )-cu_sq)); + (D27F.f[d00P])[kzero] = c2o27* (c3o1*( Mz)+Conc_F*(c1o1+c9o2*( vx3)*( vx3)-cu_sq)); + (D27F.f[d00M])[kb ] = c2o27* (c3o1*( -Mz)+Conc_F*(c1o1+c9o2*( -vx3)*( -vx3)-cu_sq)); + (D27F.f[dPP0])[kzero] = c1o54* (c3o1*( Mx +My )+Conc_F*(c1o1+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); + (D27F.f[dMM0])[ksw ] = c1o54* (c3o1*(-Mx -My )+Conc_F*(c1o1+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); + (D27F.f[dPM0])[ks ] = c1o54* (c3o1*( Mx -My )+Conc_F*(c1o1+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); + (D27F.f[dMP0])[kw ] = c1o54* (c3o1*(-Mx +My )+Conc_F*(c1o1+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); + (D27F.f[dP0P])[kzero] = c1o54* (c3o1*( Mx +Mz)+Conc_F*(c1o1+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); + (D27F.f[dM0M])[kbw ] = c1o54* (c3o1*(-Mx -Mz)+Conc_F*(c1o1+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); + (D27F.f[dP0M])[kb ] = c1o54* (c3o1*( Mx -Mz)+Conc_F*(c1o1+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); + (D27F.f[dM0P])[kw ] = c1o54* (c3o1*(-Mx +Mz)+Conc_F*(c1o1+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); + (D27F.f[d0PP])[kzero] = c1o54* (c3o1*( My +Mz)+Conc_F*(c1o1+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); + (D27F.f[d0MM])[kbs ] = c1o54* (c3o1*( -My -Mz)+Conc_F*(c1o1+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); + (D27F.f[d0PM])[kb ] = c1o54* (c3o1*( My -Mz)+Conc_F*(c1o1+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); + (D27F.f[d0MP])[ks ] = c1o54* (c3o1*( -My +Mz)+Conc_F*(c1o1+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); + (D27F.f[dPPP])[kzero] = c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); + (D27F.f[dMMM])[kbsw ] = c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); + (D27F.f[dPPM])[kb ] = c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); + (D27F.f[dMMP])[ksw ] = c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); + (D27F.f[dPMP])[ks ] = c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); + (D27F.f[dMPM])[kbw ] = c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); + (D27F.f[dPMM])[kbs ] = c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); + (D27F.f[dMPP])[kw ] = c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); @@ -47055,33 +47055,33 @@ __global__ void scaleCFThS27( real* DC, cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - (D27F.f[DIR_000])[kzero] = c8o27* Conc_F*(c1o1-cu_sq); - (D27F.f[DIR_P00])[kzero] = c2o27* (c3o1*( Mx )+Conc_F*(c1o1+c9o2*( vx1 )*( vx1 )-cu_sq)); - (D27F.f[DIR_M00])[kw ] = c2o27* (c3o1*(-Mx )+Conc_F*(c1o1+c9o2*(-vx1 )*(-vx1 )-cu_sq)); - (D27F.f[DIR_0P0])[kzero] = c2o27* (c3o1*( My )+Conc_F*(c1o1+c9o2*( vx2 )*( vx2 )-cu_sq)); - (D27F.f[DIR_0M0])[ks ] = c2o27* (c3o1*( -My )+Conc_F*(c1o1+c9o2*( -vx2 )*( -vx2 )-cu_sq)); - (D27F.f[DIR_00P])[kzero] = c2o27* (c3o1*( Mz)+Conc_F*(c1o1+c9o2*( vx3)*( vx3)-cu_sq)); - (D27F.f[DIR_00M])[kb ] = c2o27* (c3o1*( -Mz)+Conc_F*(c1o1+c9o2*( -vx3)*( -vx3)-cu_sq)); - (D27F.f[DIR_PP0])[kzero] = c1o54* (c3o1*( Mx +My )+Conc_F*(c1o1+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); - (D27F.f[DIR_MM0])[ksw ] = c1o54* (c3o1*(-Mx -My )+Conc_F*(c1o1+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); - (D27F.f[DIR_PM0])[ks ] = c1o54* (c3o1*( Mx -My )+Conc_F*(c1o1+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); - (D27F.f[DIR_MP0])[kw ] = c1o54* (c3o1*(-Mx +My )+Conc_F*(c1o1+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); - (D27F.f[DIR_P0P])[kzero] = c1o54* (c3o1*( Mx +Mz)+Conc_F*(c1o1+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); - (D27F.f[DIR_M0M])[kbw ] = c1o54* (c3o1*(-Mx -Mz)+Conc_F*(c1o1+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); - (D27F.f[DIR_P0M])[kb ] = c1o54* (c3o1*( Mx -Mz)+Conc_F*(c1o1+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); - (D27F.f[DIR_M0P])[kw ] = c1o54* (c3o1*(-Mx +Mz)+Conc_F*(c1o1+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); - (D27F.f[DIR_0PP])[kzero] = c1o54* (c3o1*( My +Mz)+Conc_F*(c1o1+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); - (D27F.f[DIR_0MM])[kbs ] = c1o54* (c3o1*( -My -Mz)+Conc_F*(c1o1+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); - (D27F.f[DIR_0PM])[kb ] = c1o54* (c3o1*( My -Mz)+Conc_F*(c1o1+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); - (D27F.f[DIR_0MP])[ks ] = c1o54* (c3o1*( -My +Mz)+Conc_F*(c1o1+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); - (D27F.f[DIR_PPP])[kzero] = c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); - (D27F.f[DIR_MMM])[kbsw ] = c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); - (D27F.f[DIR_PPM])[kb ] = c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); - (D27F.f[DIR_MMP])[ksw ] = c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); - (D27F.f[DIR_PMP])[ks ] = c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); - (D27F.f[DIR_MPM])[kbw ] = c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); - (D27F.f[DIR_PMM])[kbs ] = c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); - (D27F.f[DIR_MPP])[kw ] = c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); + (D27F.f[d000])[kzero] = c8o27* Conc_F*(c1o1-cu_sq); + (D27F.f[dP00])[kzero] = c2o27* (c3o1*( Mx )+Conc_F*(c1o1+c9o2*( vx1 )*( vx1 )-cu_sq)); + (D27F.f[dM00])[kw ] = c2o27* (c3o1*(-Mx )+Conc_F*(c1o1+c9o2*(-vx1 )*(-vx1 )-cu_sq)); + (D27F.f[d0P0])[kzero] = c2o27* (c3o1*( My )+Conc_F*(c1o1+c9o2*( vx2 )*( vx2 )-cu_sq)); + (D27F.f[d0M0])[ks ] = c2o27* (c3o1*( -My )+Conc_F*(c1o1+c9o2*( -vx2 )*( -vx2 )-cu_sq)); + (D27F.f[d00P])[kzero] = c2o27* (c3o1*( Mz)+Conc_F*(c1o1+c9o2*( vx3)*( vx3)-cu_sq)); + (D27F.f[d00M])[kb ] = c2o27* (c3o1*( -Mz)+Conc_F*(c1o1+c9o2*( -vx3)*( -vx3)-cu_sq)); + (D27F.f[dPP0])[kzero] = c1o54* (c3o1*( Mx +My )+Conc_F*(c1o1+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); + (D27F.f[dMM0])[ksw ] = c1o54* (c3o1*(-Mx -My )+Conc_F*(c1o1+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); + (D27F.f[dPM0])[ks ] = c1o54* (c3o1*( Mx -My )+Conc_F*(c1o1+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); + (D27F.f[dMP0])[kw ] = c1o54* (c3o1*(-Mx +My )+Conc_F*(c1o1+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); + (D27F.f[dP0P])[kzero] = c1o54* (c3o1*( Mx +Mz)+Conc_F*(c1o1+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); + (D27F.f[dM0M])[kbw ] = c1o54* (c3o1*(-Mx -Mz)+Conc_F*(c1o1+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); + (D27F.f[dP0M])[kb ] = c1o54* (c3o1*( Mx -Mz)+Conc_F*(c1o1+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); + (D27F.f[dM0P])[kw ] = c1o54* (c3o1*(-Mx +Mz)+Conc_F*(c1o1+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); + (D27F.f[d0PP])[kzero] = c1o54* (c3o1*( My +Mz)+Conc_F*(c1o1+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); + (D27F.f[d0MM])[kbs ] = c1o54* (c3o1*( -My -Mz)+Conc_F*(c1o1+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); + (D27F.f[d0PM])[kb ] = c1o54* (c3o1*( My -Mz)+Conc_F*(c1o1+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); + (D27F.f[d0MP])[ks ] = c1o54* (c3o1*( -My +Mz)+Conc_F*(c1o1+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); + (D27F.f[dPPP])[kzero] = c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); + (D27F.f[dMMM])[kbsw ] = c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); + (D27F.f[dPPM])[kb ] = c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); + (D27F.f[dMMP])[ksw ] = c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); + (D27F.f[dPMP])[ks ] = c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); + (D27F.f[dMPM])[kbw ] = c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); + (D27F.f[dPMM])[kbs ] = c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); + (D27F.f[dMPP])[kw ] = c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); @@ -47133,33 +47133,33 @@ __global__ void scaleCFThS27( real* DC, cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - (D27F.f[DIR_000])[kzero] = c8o27* Conc_F*(c1o1-cu_sq); - (D27F.f[DIR_P00])[kzero] = c2o27* (c3o1*( Mx )+Conc_F*(c1o1+c9o2*( vx1 )*( vx1 )-cu_sq)); - (D27F.f[DIR_M00])[kw ] = c2o27* (c3o1*(-Mx )+Conc_F*(c1o1+c9o2*(-vx1 )*(-vx1 )-cu_sq)); - (D27F.f[DIR_0P0])[kzero] = c2o27* (c3o1*( My )+Conc_F*(c1o1+c9o2*( vx2 )*( vx2 )-cu_sq)); - (D27F.f[DIR_0M0])[ks ] = c2o27* (c3o1*( -My )+Conc_F*(c1o1+c9o2*( -vx2 )*( -vx2 )-cu_sq)); - (D27F.f[DIR_00P])[kzero] = c2o27* (c3o1*( Mz)+Conc_F*(c1o1+c9o2*( vx3)*( vx3)-cu_sq)); - (D27F.f[DIR_00M])[kb ] = c2o27* (c3o1*( -Mz)+Conc_F*(c1o1+c9o2*( -vx3)*( -vx3)-cu_sq)); - (D27F.f[DIR_PP0])[kzero] = c1o54* (c3o1*( Mx +My )+Conc_F*(c1o1+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); - (D27F.f[DIR_MM0])[ksw ] = c1o54* (c3o1*(-Mx -My )+Conc_F*(c1o1+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); - (D27F.f[DIR_PM0])[ks ] = c1o54* (c3o1*( Mx -My )+Conc_F*(c1o1+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); - (D27F.f[DIR_MP0])[kw ] = c1o54* (c3o1*(-Mx +My )+Conc_F*(c1o1+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); - (D27F.f[DIR_P0P])[kzero] = c1o54* (c3o1*( Mx +Mz)+Conc_F*(c1o1+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); - (D27F.f[DIR_M0M])[kbw ] = c1o54* (c3o1*(-Mx -Mz)+Conc_F*(c1o1+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); - (D27F.f[DIR_P0M])[kb ] = c1o54* (c3o1*( Mx -Mz)+Conc_F*(c1o1+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); - (D27F.f[DIR_M0P])[kw ] = c1o54* (c3o1*(-Mx +Mz)+Conc_F*(c1o1+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); - (D27F.f[DIR_0PP])[kzero] = c1o54* (c3o1*( My +Mz)+Conc_F*(c1o1+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); - (D27F.f[DIR_0MM])[kbs ] = c1o54* (c3o1*( -My -Mz)+Conc_F*(c1o1+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); - (D27F.f[DIR_0PM])[kb ] = c1o54* (c3o1*( My -Mz)+Conc_F*(c1o1+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); - (D27F.f[DIR_0MP])[ks ] = c1o54* (c3o1*( -My +Mz)+Conc_F*(c1o1+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); - (D27F.f[DIR_PPP])[kzero] = c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); - (D27F.f[DIR_MMM])[kbsw ] = c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); - (D27F.f[DIR_PPM])[kb ] = c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); - (D27F.f[DIR_MMP])[ksw ] = c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); - (D27F.f[DIR_PMP])[ks ] = c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); - (D27F.f[DIR_MPM])[kbw ] = c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); - (D27F.f[DIR_PMM])[kbs ] = c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); - (D27F.f[DIR_MPP])[kw ] = c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); + (D27F.f[d000])[kzero] = c8o27* Conc_F*(c1o1-cu_sq); + (D27F.f[dP00])[kzero] = c2o27* (c3o1*( Mx )+Conc_F*(c1o1+c9o2*( vx1 )*( vx1 )-cu_sq)); + (D27F.f[dM00])[kw ] = c2o27* (c3o1*(-Mx )+Conc_F*(c1o1+c9o2*(-vx1 )*(-vx1 )-cu_sq)); + (D27F.f[d0P0])[kzero] = c2o27* (c3o1*( My )+Conc_F*(c1o1+c9o2*( vx2 )*( vx2 )-cu_sq)); + (D27F.f[d0M0])[ks ] = c2o27* (c3o1*( -My )+Conc_F*(c1o1+c9o2*( -vx2 )*( -vx2 )-cu_sq)); + (D27F.f[d00P])[kzero] = c2o27* (c3o1*( Mz)+Conc_F*(c1o1+c9o2*( vx3)*( vx3)-cu_sq)); + (D27F.f[d00M])[kb ] = c2o27* (c3o1*( -Mz)+Conc_F*(c1o1+c9o2*( -vx3)*( -vx3)-cu_sq)); + (D27F.f[dPP0])[kzero] = c1o54* (c3o1*( Mx +My )+Conc_F*(c1o1+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); + (D27F.f[dMM0])[ksw ] = c1o54* (c3o1*(-Mx -My )+Conc_F*(c1o1+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); + (D27F.f[dPM0])[ks ] = c1o54* (c3o1*( Mx -My )+Conc_F*(c1o1+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); + (D27F.f[dMP0])[kw ] = c1o54* (c3o1*(-Mx +My )+Conc_F*(c1o1+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); + (D27F.f[dP0P])[kzero] = c1o54* (c3o1*( Mx +Mz)+Conc_F*(c1o1+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); + (D27F.f[dM0M])[kbw ] = c1o54* (c3o1*(-Mx -Mz)+Conc_F*(c1o1+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); + (D27F.f[dP0M])[kb ] = c1o54* (c3o1*( Mx -Mz)+Conc_F*(c1o1+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); + (D27F.f[dM0P])[kw ] = c1o54* (c3o1*(-Mx +Mz)+Conc_F*(c1o1+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); + (D27F.f[d0PP])[kzero] = c1o54* (c3o1*( My +Mz)+Conc_F*(c1o1+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); + (D27F.f[d0MM])[kbs ] = c1o54* (c3o1*( -My -Mz)+Conc_F*(c1o1+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); + (D27F.f[d0PM])[kb ] = c1o54* (c3o1*( My -Mz)+Conc_F*(c1o1+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); + (D27F.f[d0MP])[ks ] = c1o54* (c3o1*( -My +Mz)+Conc_F*(c1o1+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); + (D27F.f[dPPP])[kzero] = c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); + (D27F.f[dMMM])[kbsw ] = c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); + (D27F.f[dPPM])[kb ] = c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); + (D27F.f[dMMP])[ksw ] = c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); + (D27F.f[dPMP])[ks ] = c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); + (D27F.f[dMPM])[kbw ] = c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); + (D27F.f[dPMM])[kbs ] = c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); + (D27F.f[dMPP])[kw ] = c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); @@ -47211,33 +47211,33 @@ __global__ void scaleCFThS27( real* DC, cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - (D27F.f[DIR_000])[kzero] = c8o27* Conc_F*(c1o1-cu_sq); - (D27F.f[DIR_P00])[kzero] = c2o27* (c3o1*( Mx )+Conc_F*(c1o1+c9o2*( vx1 )*( vx1 )-cu_sq)); - (D27F.f[DIR_M00])[kw ] = c2o27* (c3o1*(-Mx )+Conc_F*(c1o1+c9o2*(-vx1 )*(-vx1 )-cu_sq)); - (D27F.f[DIR_0P0])[kzero] = c2o27* (c3o1*( My )+Conc_F*(c1o1+c9o2*( vx2 )*( vx2 )-cu_sq)); - (D27F.f[DIR_0M0])[ks ] = c2o27* (c3o1*( -My )+Conc_F*(c1o1+c9o2*( -vx2 )*( -vx2 )-cu_sq)); - (D27F.f[DIR_00P])[kzero] = c2o27* (c3o1*( Mz)+Conc_F*(c1o1+c9o2*( vx3)*( vx3)-cu_sq)); - (D27F.f[DIR_00M])[kb ] = c2o27* (c3o1*( -Mz)+Conc_F*(c1o1+c9o2*( -vx3)*( -vx3)-cu_sq)); - (D27F.f[DIR_PP0])[kzero] = c1o54* (c3o1*( Mx +My )+Conc_F*(c1o1+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); - (D27F.f[DIR_MM0])[ksw ] = c1o54* (c3o1*(-Mx -My )+Conc_F*(c1o1+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); - (D27F.f[DIR_PM0])[ks ] = c1o54* (c3o1*( Mx -My )+Conc_F*(c1o1+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); - (D27F.f[DIR_MP0])[kw ] = c1o54* (c3o1*(-Mx +My )+Conc_F*(c1o1+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); - (D27F.f[DIR_P0P])[kzero] = c1o54* (c3o1*( Mx +Mz)+Conc_F*(c1o1+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); - (D27F.f[DIR_M0M])[kbw ] = c1o54* (c3o1*(-Mx -Mz)+Conc_F*(c1o1+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); - (D27F.f[DIR_P0M])[kb ] = c1o54* (c3o1*( Mx -Mz)+Conc_F*(c1o1+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); - (D27F.f[DIR_M0P])[kw ] = c1o54* (c3o1*(-Mx +Mz)+Conc_F*(c1o1+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); - (D27F.f[DIR_0PP])[kzero] = c1o54* (c3o1*( My +Mz)+Conc_F*(c1o1+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); - (D27F.f[DIR_0MM])[kbs ] = c1o54* (c3o1*( -My -Mz)+Conc_F*(c1o1+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); - (D27F.f[DIR_0PM])[kb ] = c1o54* (c3o1*( My -Mz)+Conc_F*(c1o1+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); - (D27F.f[DIR_0MP])[ks ] = c1o54* (c3o1*( -My +Mz)+Conc_F*(c1o1+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); - (D27F.f[DIR_PPP])[kzero] = c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); - (D27F.f[DIR_MMM])[kbsw ] = c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); - (D27F.f[DIR_PPM])[kb ] = c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); - (D27F.f[DIR_MMP])[ksw ] = c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); - (D27F.f[DIR_PMP])[ks ] = c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); - (D27F.f[DIR_MPM])[kbw ] = c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); - (D27F.f[DIR_PMM])[kbs ] = c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); - (D27F.f[DIR_MPP])[kw ] = c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); + (D27F.f[d000])[kzero] = c8o27* Conc_F*(c1o1-cu_sq); + (D27F.f[dP00])[kzero] = c2o27* (c3o1*( Mx )+Conc_F*(c1o1+c9o2*( vx1 )*( vx1 )-cu_sq)); + (D27F.f[dM00])[kw ] = c2o27* (c3o1*(-Mx )+Conc_F*(c1o1+c9o2*(-vx1 )*(-vx1 )-cu_sq)); + (D27F.f[d0P0])[kzero] = c2o27* (c3o1*( My )+Conc_F*(c1o1+c9o2*( vx2 )*( vx2 )-cu_sq)); + (D27F.f[d0M0])[ks ] = c2o27* (c3o1*( -My )+Conc_F*(c1o1+c9o2*( -vx2 )*( -vx2 )-cu_sq)); + (D27F.f[d00P])[kzero] = c2o27* (c3o1*( Mz)+Conc_F*(c1o1+c9o2*( vx3)*( vx3)-cu_sq)); + (D27F.f[d00M])[kb ] = c2o27* (c3o1*( -Mz)+Conc_F*(c1o1+c9o2*( -vx3)*( -vx3)-cu_sq)); + (D27F.f[dPP0])[kzero] = c1o54* (c3o1*( Mx +My )+Conc_F*(c1o1+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); + (D27F.f[dMM0])[ksw ] = c1o54* (c3o1*(-Mx -My )+Conc_F*(c1o1+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); + (D27F.f[dPM0])[ks ] = c1o54* (c3o1*( Mx -My )+Conc_F*(c1o1+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); + (D27F.f[dMP0])[kw ] = c1o54* (c3o1*(-Mx +My )+Conc_F*(c1o1+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); + (D27F.f[dP0P])[kzero] = c1o54* (c3o1*( Mx +Mz)+Conc_F*(c1o1+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); + (D27F.f[dM0M])[kbw ] = c1o54* (c3o1*(-Mx -Mz)+Conc_F*(c1o1+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); + (D27F.f[dP0M])[kb ] = c1o54* (c3o1*( Mx -Mz)+Conc_F*(c1o1+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); + (D27F.f[dM0P])[kw ] = c1o54* (c3o1*(-Mx +Mz)+Conc_F*(c1o1+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); + (D27F.f[d0PP])[kzero] = c1o54* (c3o1*( My +Mz)+Conc_F*(c1o1+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); + (D27F.f[d0MM])[kbs ] = c1o54* (c3o1*( -My -Mz)+Conc_F*(c1o1+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); + (D27F.f[d0PM])[kb ] = c1o54* (c3o1*( My -Mz)+Conc_F*(c1o1+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); + (D27F.f[d0MP])[ks ] = c1o54* (c3o1*( -My +Mz)+Conc_F*(c1o1+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); + (D27F.f[dPPP])[kzero] = c1o216*(c3o1*( Mx +My +Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); + (D27F.f[dMMM])[kbsw ] = c1o216*(c3o1*(-Mx -My -Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); + (D27F.f[dPPM])[kb ] = c1o216*(c3o1*( Mx +My -Mz)+Conc_F*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); + (D27F.f[dMMP])[ksw ] = c1o216*(c3o1*(-Mx -My +Mz)+Conc_F*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); + (D27F.f[dPMP])[ks ] = c1o216*(c3o1*( Mx -My +Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); + (D27F.f[dMPM])[kbw ] = c1o216*(c3o1*(-Mx +My -Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); + (D27F.f[dPMM])[kbs ] = c1o216*(c3o1*( Mx -My -Mz)+Conc_F*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); + (D27F.f[dMPP])[kw ] = c1o216*(c3o1*(-Mx +My +Mz)+Conc_F*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -47305,96 +47305,96 @@ __global__ void scaleCFEff27(real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// @@ -49014,96 +49014,96 @@ __global__ void scaleCF27(real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// diff --git a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleCF_F3_27.cu b/src/gpu/core/GPU/GridScaling/ScaleCF_F3_27.cu similarity index 97% rename from src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleCF_F3_27.cu rename to src/gpu/core/GPU/GridScaling/ScaleCF_F3_27.cu index a3044503b2e08b8bc713c7431c43a98395ec3298..5301e3c212c35f92c7fc23697f9b6badbbef4a69 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleCF_F3_27.cu +++ b/src/gpu/core/GPU/GridScaling/ScaleCF_F3_27.cu @@ -44,33 +44,33 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC, *f000dest, *fMMMdest, *fMMPdest, *fMPPdest, *fMPMdest, *fPPMdest, *fPPPdest, *fPMPdest, *fPMMdest; - fP00dest = &DF[DIR_P00 * numberOfLBnodesFine]; - fM00dest = &DF[DIR_M00 * numberOfLBnodesFine]; - f0P0dest = &DF[DIR_0P0 * numberOfLBnodesFine]; - f0M0dest = &DF[DIR_0M0 * numberOfLBnodesFine]; - f00Pdest = &DF[DIR_00P * numberOfLBnodesFine]; - f00Mdest = &DF[DIR_00M * numberOfLBnodesFine]; - fPP0dest = &DF[DIR_PP0 * numberOfLBnodesFine]; - fMM0dest = &DF[DIR_MM0 * numberOfLBnodesFine]; - fPM0dest = &DF[DIR_PM0 * numberOfLBnodesFine]; - fMP0dest = &DF[DIR_MP0 * numberOfLBnodesFine]; - fP0Pdest = &DF[DIR_P0P * numberOfLBnodesFine]; - fM0Mdest = &DF[DIR_M0M * numberOfLBnodesFine]; - fP0Mdest = &DF[DIR_P0M * numberOfLBnodesFine]; - fM0Pdest = &DF[DIR_M0P * numberOfLBnodesFine]; - f0PPdest = &DF[DIR_0PP * numberOfLBnodesFine]; - f0MMdest = &DF[DIR_0MM * numberOfLBnodesFine]; - f0PMdest = &DF[DIR_0PM * numberOfLBnodesFine]; - f0MPdest = &DF[DIR_0MP * numberOfLBnodesFine]; - f000dest = &DF[DIR_000 * numberOfLBnodesFine]; - fMMMdest = &DF[DIR_MMM * numberOfLBnodesFine]; - fMMPdest = &DF[DIR_MMP * numberOfLBnodesFine]; - fMPPdest = &DF[DIR_MPP * numberOfLBnodesFine]; - fMPMdest = &DF[DIR_MPM * numberOfLBnodesFine]; - fPPMdest = &DF[DIR_PPM * numberOfLBnodesFine]; - fPPPdest = &DF[DIR_PPP * numberOfLBnodesFine]; - fPMPdest = &DF[DIR_PMP * numberOfLBnodesFine]; - fPMMdest = &DF[DIR_PMM * numberOfLBnodesFine]; + fP00dest = &DF[dP00 * numberOfLBnodesFine]; + fM00dest = &DF[dM00 * numberOfLBnodesFine]; + f0P0dest = &DF[d0P0 * numberOfLBnodesFine]; + f0M0dest = &DF[d0M0 * numberOfLBnodesFine]; + f00Pdest = &DF[d00P * numberOfLBnodesFine]; + f00Mdest = &DF[d00M * numberOfLBnodesFine]; + fPP0dest = &DF[dPP0 * numberOfLBnodesFine]; + fMM0dest = &DF[dMM0 * numberOfLBnodesFine]; + fPM0dest = &DF[dPM0 * numberOfLBnodesFine]; + fMP0dest = &DF[dMP0 * numberOfLBnodesFine]; + fP0Pdest = &DF[dP0P * numberOfLBnodesFine]; + fM0Mdest = &DF[dM0M * numberOfLBnodesFine]; + fP0Mdest = &DF[dP0M * numberOfLBnodesFine]; + fM0Pdest = &DF[dM0P * numberOfLBnodesFine]; + f0PPdest = &DF[d0PP * numberOfLBnodesFine]; + f0MMdest = &DF[d0MM * numberOfLBnodesFine]; + f0PMdest = &DF[d0PM * numberOfLBnodesFine]; + f0MPdest = &DF[d0MP * numberOfLBnodesFine]; + f000dest = &DF[d000 * numberOfLBnodesFine]; + fMMMdest = &DF[dMMM * numberOfLBnodesFine]; + fMMPdest = &DF[dMMP * numberOfLBnodesFine]; + fMPPdest = &DF[dMPP * numberOfLBnodesFine]; + fMPMdest = &DF[dMPM * numberOfLBnodesFine]; + fPPMdest = &DF[dPPM * numberOfLBnodesFine]; + fPPPdest = &DF[dPPP * numberOfLBnodesFine]; + fPMPdest = &DF[dPMP * numberOfLBnodesFine]; + fPMMdest = &DF[dPMM * numberOfLBnodesFine]; real *fP00source, *fM00source, *f0P0source, *f0M0source, *f00Psource, *f00Msource, *fPP0source, *fMM0source, *fPM0source, @@ -79,72 +79,72 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC, if (isEvenTimestep == true) { - fP00source = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fM00source = &DC[DIR_M00 * numberOfLBnodesCoarse]; - f0P0source = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - f0M0source = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - f00Psource = &DC[DIR_00P * numberOfLBnodesCoarse]; - f00Msource = &DC[DIR_00M * numberOfLBnodesCoarse]; - fPP0source = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fMM0source = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fPM0source = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fMP0source = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fP0Psource = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fM0Msource = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fP0Msource = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fM0Psource = &DC[DIR_M0P * numberOfLBnodesCoarse]; - f0PPsource = &DC[DIR_0PP * numberOfLBnodesCoarse]; - f0MMsource = &DC[DIR_0MM * numberOfLBnodesCoarse]; - f0PMsource = &DC[DIR_0PM * numberOfLBnodesCoarse]; - f0MPsource = &DC[DIR_0MP * numberOfLBnodesCoarse]; - f000source = &DC[DIR_000 * numberOfLBnodesCoarse]; - fMMMsource = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fMMPsource = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fMPPsource = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fMPMsource = &DC[DIR_MPM * numberOfLBnodesCoarse]; - fPPMsource = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fPPPsource = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fPMPsource = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fPMMsource = &DC[DIR_PMM * numberOfLBnodesCoarse]; + fP00source = &DC[dP00 * numberOfLBnodesCoarse]; + fM00source = &DC[dM00 * numberOfLBnodesCoarse]; + f0P0source = &DC[d0P0 * numberOfLBnodesCoarse]; + f0M0source = &DC[d0M0 * numberOfLBnodesCoarse]; + f00Psource = &DC[d00P * numberOfLBnodesCoarse]; + f00Msource = &DC[d00M * numberOfLBnodesCoarse]; + fPP0source = &DC[dPP0 * numberOfLBnodesCoarse]; + fMM0source = &DC[dMM0 * numberOfLBnodesCoarse]; + fPM0source = &DC[dPM0 * numberOfLBnodesCoarse]; + fMP0source = &DC[dMP0 * numberOfLBnodesCoarse]; + fP0Psource = &DC[dP0P * numberOfLBnodesCoarse]; + fM0Msource = &DC[dM0M * numberOfLBnodesCoarse]; + fP0Msource = &DC[dP0M * numberOfLBnodesCoarse]; + fM0Psource = &DC[dM0P * numberOfLBnodesCoarse]; + f0PPsource = &DC[d0PP * numberOfLBnodesCoarse]; + f0MMsource = &DC[d0MM * numberOfLBnodesCoarse]; + f0PMsource = &DC[d0PM * numberOfLBnodesCoarse]; + f0MPsource = &DC[d0MP * numberOfLBnodesCoarse]; + f000source = &DC[d000 * numberOfLBnodesCoarse]; + fMMMsource = &DC[dMMM * numberOfLBnodesCoarse]; + fMMPsource = &DC[dMMP * numberOfLBnodesCoarse]; + fMPPsource = &DC[dMPP * numberOfLBnodesCoarse]; + fMPMsource = &DC[dMPM * numberOfLBnodesCoarse]; + fPPMsource = &DC[dPPM * numberOfLBnodesCoarse]; + fPPPsource = &DC[dPPP * numberOfLBnodesCoarse]; + fPMPsource = &DC[dPMP * numberOfLBnodesCoarse]; + fPMMsource = &DC[dPMM * numberOfLBnodesCoarse]; } else { - fP00source = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fM00source = &DC[DIR_P00 * numberOfLBnodesCoarse]; - f0P0source = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - f0M0source = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - f00Psource = &DC[DIR_00M * numberOfLBnodesCoarse]; - f00Msource = &DC[DIR_00P * numberOfLBnodesCoarse]; - fPP0source = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fMM0source = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fPM0source = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fMP0source = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fP0Psource = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fM0Msource = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fP0Msource = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fM0Psource = &DC[DIR_P0M * numberOfLBnodesCoarse]; - f0PPsource = &DC[DIR_0MM * numberOfLBnodesCoarse]; - f0MMsource = &DC[DIR_0PP * numberOfLBnodesCoarse]; - f0PMsource = &DC[DIR_0MP * numberOfLBnodesCoarse]; - f0MPsource = &DC[DIR_0PM * numberOfLBnodesCoarse]; - f000source = &DC[DIR_000 * numberOfLBnodesCoarse]; - fMMMsource = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fMMPsource = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fMPPsource = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fMPMsource = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fPPMsource = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fPPPsource = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fPMPsource = &DC[DIR_MPM * numberOfLBnodesCoarse]; - fPMMsource = &DC[DIR_MPP * numberOfLBnodesCoarse]; + fP00source = &DC[dM00 * numberOfLBnodesCoarse]; + fM00source = &DC[dP00 * numberOfLBnodesCoarse]; + f0P0source = &DC[d0M0 * numberOfLBnodesCoarse]; + f0M0source = &DC[d0P0 * numberOfLBnodesCoarse]; + f00Psource = &DC[d00M * numberOfLBnodesCoarse]; + f00Msource = &DC[d00P * numberOfLBnodesCoarse]; + fPP0source = &DC[dMM0 * numberOfLBnodesCoarse]; + fMM0source = &DC[dPP0 * numberOfLBnodesCoarse]; + fPM0source = &DC[dMP0 * numberOfLBnodesCoarse]; + fMP0source = &DC[dPM0 * numberOfLBnodesCoarse]; + fP0Psource = &DC[dM0M * numberOfLBnodesCoarse]; + fM0Msource = &DC[dP0P * numberOfLBnodesCoarse]; + fP0Msource = &DC[dM0P * numberOfLBnodesCoarse]; + fM0Psource = &DC[dP0M * numberOfLBnodesCoarse]; + f0PPsource = &DC[d0MM * numberOfLBnodesCoarse]; + f0MMsource = &DC[d0PP * numberOfLBnodesCoarse]; + f0PMsource = &DC[d0MP * numberOfLBnodesCoarse]; + f0MPsource = &DC[d0PM * numberOfLBnodesCoarse]; + f000source = &DC[d000 * numberOfLBnodesCoarse]; + fMMMsource = &DC[dPPP * numberOfLBnodesCoarse]; + fMMPsource = &DC[dPPM * numberOfLBnodesCoarse]; + fMPPsource = &DC[dPMM * numberOfLBnodesCoarse]; + fMPMsource = &DC[dPMP * numberOfLBnodesCoarse]; + fPPMsource = &DC[dMMP * numberOfLBnodesCoarse]; + fPPPsource = &DC[dMMM * numberOfLBnodesCoarse]; + fPMPsource = &DC[dMPM * numberOfLBnodesCoarse]; + fPMMsource = &DC[dMPP * numberOfLBnodesCoarse]; } Distributions6 G; - G.g[DIR_P00] = &G6[DIR_P00 * numberOfLBnodesFine]; - G.g[DIR_M00] = &G6[DIR_M00 * numberOfLBnodesFine]; - G.g[DIR_0P0] = &G6[DIR_0P0 * numberOfLBnodesFine]; - G.g[DIR_0M0] = &G6[DIR_0M0 * numberOfLBnodesFine]; - G.g[DIR_00P] = &G6[DIR_00P * numberOfLBnodesFine]; - G.g[DIR_00M] = &G6[DIR_00M * numberOfLBnodesFine]; + G.g[dP00] = &G6[dP00 * numberOfLBnodesFine]; + G.g[dM00] = &G6[dM00 * numberOfLBnodesFine]; + G.g[d0P0] = &G6[d0P0 * numberOfLBnodesFine]; + G.g[d0M0] = &G6[d0M0 * numberOfLBnodesFine]; + G.g[d00P] = &G6[d00P * numberOfLBnodesFine]; + G.g[d00M] = &G6[d00M * numberOfLBnodesFine]; //////////////////////////////////////////////////////////////////////////////// const unsigned ix = threadIdx.x; // Globaler x-Index @@ -1187,12 +1187,12 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC, //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// - (G.g[DIR_P00])[k000] = mgcbb; - (G.g[DIR_M00])[kM00] = mgabb; - (G.g[DIR_0P0])[k000] = mgbcb; - (G.g[DIR_0M0])[k0M0] = mgbab; - (G.g[DIR_00P])[k000] = mgbbc; - (G.g[DIR_00M])[k00M] = mgbba; + (G.g[dP00])[k000] = mgcbb; + (G.g[dM00])[kM00] = mgabb; + (G.g[d0P0])[k000] = mgbcb; + (G.g[d0M0])[k0M0] = mgbab; + (G.g[d00P])[k000] = mgbbc; + (G.g[d00M])[k00M] = mgbba; //////////////////////////////////////////////////////////////////////////////////// fP00dest[k000] = mfcbb; fM00dest[kM00] = mfabb; @@ -1623,12 +1623,12 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC, //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// - (G.g[DIR_P00])[k000] = mgcbb; - (G.g[DIR_M00])[kM00] = mgabb; - (G.g[DIR_0P0])[k000] = mgbcb; - (G.g[DIR_0M0])[k0M0] = mgbab; - (G.g[DIR_00P])[k000] = mgbbc; - (G.g[DIR_00M])[k00M] = mgbba; + (G.g[dP00])[k000] = mgcbb; + (G.g[dM00])[kM00] = mgabb; + (G.g[d0P0])[k000] = mgbcb; + (G.g[d0M0])[k0M0] = mgbab; + (G.g[d00P])[k000] = mgbbc; + (G.g[d00M])[k00M] = mgbba; //////////////////////////////////////////////////////////////////////////////////// fP00dest[k000] = mfcbb; fM00dest[kM00] = mfabb; @@ -2062,12 +2062,12 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC, //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// - (G.g[DIR_P00])[k000] = mgcbb; - (G.g[DIR_M00])[kM00] = mgabb; - (G.g[DIR_0P0])[k000] = mgbcb; - (G.g[DIR_0M0])[k0M0] = mgbab; - (G.g[DIR_00P])[k000] = mgbbc; - (G.g[DIR_00M])[k00M] = mgbba; + (G.g[dP00])[k000] = mgcbb; + (G.g[dM00])[kM00] = mgabb; + (G.g[d0P0])[k000] = mgbcb; + (G.g[d0M0])[k0M0] = mgbab; + (G.g[d00P])[k000] = mgbbc; + (G.g[d00M])[k00M] = mgbba; //////////////////////////////////////////////////////////////////////////////////// fP00dest[k000] = mfcbb; fM00dest[kM00] = mfabb; @@ -2501,12 +2501,12 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC, //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// - (G.g[DIR_P00])[k000] = mgcbb; - (G.g[DIR_M00])[kM00] = mgabb; - (G.g[DIR_0P0])[k000] = mgbcb; - (G.g[DIR_0M0])[k0M0] = mgbab; - (G.g[DIR_00P])[k000] = mgbbc; - (G.g[DIR_00M])[k00M] = mgbba; + (G.g[dP00])[k000] = mgcbb; + (G.g[dM00])[kM00] = mgabb; + (G.g[d0P0])[k000] = mgbcb; + (G.g[d0M0])[k0M0] = mgbab; + (G.g[d00P])[k000] = mgbbc; + (G.g[d00M])[k00M] = mgbba; //////////////////////////////////////////////////////////////////////////////////// fP00dest[k000] = mfcbb; fM00dest[kM00] = mfabb; @@ -2950,12 +2950,12 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC, //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// - (G.g[DIR_P00])[k000] = mgcbb; - (G.g[DIR_M00])[kM00] = mgabb; - (G.g[DIR_0P0])[k000] = mgbcb; - (G.g[DIR_0M0])[k0M0] = mgbab; - (G.g[DIR_00P])[k000] = mgbbc; - (G.g[DIR_00M])[k00M] = mgbba; + (G.g[dP00])[k000] = mgcbb; + (G.g[dM00])[kM00] = mgabb; + (G.g[d0P0])[k000] = mgbcb; + (G.g[d0M0])[k0M0] = mgbab; + (G.g[d00P])[k000] = mgbbc; + (G.g[d00M])[k00M] = mgbba; //////////////////////////////////////////////////////////////////////////////////// fP00dest[k000] = mfcbb; fM00dest[kM00] = mfabb; @@ -3389,12 +3389,12 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC, //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// - (G.g[DIR_P00])[k000] = mgcbb; - (G.g[DIR_M00])[kM00] = mgabb; - (G.g[DIR_0P0])[k000] = mgbcb; - (G.g[DIR_0M0])[k0M0] = mgbab; - (G.g[DIR_00P])[k000] = mgbbc; - (G.g[DIR_00M])[k00M] = mgbba; + (G.g[dP00])[k000] = mgcbb; + (G.g[dM00])[kM00] = mgabb; + (G.g[d0P0])[k000] = mgbcb; + (G.g[d0M0])[k0M0] = mgbab; + (G.g[d00P])[k000] = mgbbc; + (G.g[d00M])[k00M] = mgbba; //////////////////////////////////////////////////////////////////////////////////// fP00dest[k000] = mfcbb; fM00dest[kM00] = mfabb; @@ -3828,12 +3828,12 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC, //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// - (G.g[DIR_P00])[k000] = mgcbb; - (G.g[DIR_M00])[kM00] = mgabb; - (G.g[DIR_0P0])[k000] = mgbcb; - (G.g[DIR_0M0])[k0M0] = mgbab; - (G.g[DIR_00P])[k000] = mgbbc; - (G.g[DIR_00M])[k00M] = mgbba; + (G.g[dP00])[k000] = mgcbb; + (G.g[dM00])[kM00] = mgabb; + (G.g[d0P0])[k000] = mgbcb; + (G.g[d0M0])[k0M0] = mgbab; + (G.g[d00P])[k000] = mgbbc; + (G.g[d00M])[k00M] = mgbba; //////////////////////////////////////////////////////////////////////////////////// fP00dest[k000] = mfcbb; fM00dest[kM00] = mfabb; @@ -4267,12 +4267,12 @@ __global__ void scaleCF_comp_D3Q27F3_2018(real* DC, //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// - (G.g[DIR_P00])[k000] = mgcbb; - (G.g[DIR_M00])[kM00] = mgabb; - (G.g[DIR_0P0])[k000] = mgbcb; - (G.g[DIR_0M0])[k0M0] = mgbab; - (G.g[DIR_00P])[k000] = mgbbc; - (G.g[DIR_00M])[k00M] = mgbba; + (G.g[dP00])[k000] = mgcbb; + (G.g[dM00])[kM00] = mgabb; + (G.g[d0P0])[k000] = mgbcb; + (G.g[d0M0])[k0M0] = mgbab; + (G.g[d00P])[k000] = mgbbc; + (G.g[d00M])[k00M] = mgbba; //////////////////////////////////////////////////////////////////////////////////// fP00dest[k000] = mfcbb; fM00dest[kM00] = mfabb; @@ -4391,33 +4391,33 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC, *f000dest, *fMMMdest, *fMMPdest, *fMPPdest, *fMPMdest, *fPPMdest, *fPPPdest, *fPMPdest, *fPMMdest; - fP00dest = &DF[DIR_P00 * numberOfLBnodesFine]; - fM00dest = &DF[DIR_M00 * numberOfLBnodesFine]; - f0P0dest = &DF[DIR_0P0 * numberOfLBnodesFine]; - f0M0dest = &DF[DIR_0M0 * numberOfLBnodesFine]; - f00Pdest = &DF[DIR_00P * numberOfLBnodesFine]; - f00Mdest = &DF[DIR_00M * numberOfLBnodesFine]; - fPP0dest = &DF[DIR_PP0 * numberOfLBnodesFine]; - fMM0dest = &DF[DIR_MM0 * numberOfLBnodesFine]; - fPM0dest = &DF[DIR_PM0 * numberOfLBnodesFine]; - fMP0dest = &DF[DIR_MP0 * numberOfLBnodesFine]; - fP0Pdest = &DF[DIR_P0P * numberOfLBnodesFine]; - fM0Mdest = &DF[DIR_M0M * numberOfLBnodesFine]; - fP0Mdest = &DF[DIR_P0M * numberOfLBnodesFine]; - fM0Pdest = &DF[DIR_M0P * numberOfLBnodesFine]; - f0PPdest = &DF[DIR_0PP * numberOfLBnodesFine]; - f0MMdest = &DF[DIR_0MM * numberOfLBnodesFine]; - f0PMdest = &DF[DIR_0PM * numberOfLBnodesFine]; - f0MPdest = &DF[DIR_0MP * numberOfLBnodesFine]; - f000dest = &DF[DIR_000 * numberOfLBnodesFine]; - fMMMdest = &DF[DIR_MMM * numberOfLBnodesFine]; - fMMPdest = &DF[DIR_MMP * numberOfLBnodesFine]; - fMPPdest = &DF[DIR_MPP * numberOfLBnodesFine]; - fMPMdest = &DF[DIR_MPM * numberOfLBnodesFine]; - fPPMdest = &DF[DIR_PPM * numberOfLBnodesFine]; - fPPPdest = &DF[DIR_PPP * numberOfLBnodesFine]; - fPMPdest = &DF[DIR_PMP * numberOfLBnodesFine]; - fPMMdest = &DF[DIR_PMM * numberOfLBnodesFine]; + fP00dest = &DF[dP00 * numberOfLBnodesFine]; + fM00dest = &DF[dM00 * numberOfLBnodesFine]; + f0P0dest = &DF[d0P0 * numberOfLBnodesFine]; + f0M0dest = &DF[d0M0 * numberOfLBnodesFine]; + f00Pdest = &DF[d00P * numberOfLBnodesFine]; + f00Mdest = &DF[d00M * numberOfLBnodesFine]; + fPP0dest = &DF[dPP0 * numberOfLBnodesFine]; + fMM0dest = &DF[dMM0 * numberOfLBnodesFine]; + fPM0dest = &DF[dPM0 * numberOfLBnodesFine]; + fMP0dest = &DF[dMP0 * numberOfLBnodesFine]; + fP0Pdest = &DF[dP0P * numberOfLBnodesFine]; + fM0Mdest = &DF[dM0M * numberOfLBnodesFine]; + fP0Mdest = &DF[dP0M * numberOfLBnodesFine]; + fM0Pdest = &DF[dM0P * numberOfLBnodesFine]; + f0PPdest = &DF[d0PP * numberOfLBnodesFine]; + f0MMdest = &DF[d0MM * numberOfLBnodesFine]; + f0PMdest = &DF[d0PM * numberOfLBnodesFine]; + f0MPdest = &DF[d0MP * numberOfLBnodesFine]; + f000dest = &DF[d000 * numberOfLBnodesFine]; + fMMMdest = &DF[dMMM * numberOfLBnodesFine]; + fMMPdest = &DF[dMMP * numberOfLBnodesFine]; + fMPPdest = &DF[dMPP * numberOfLBnodesFine]; + fMPMdest = &DF[dMPM * numberOfLBnodesFine]; + fPPMdest = &DF[dPPM * numberOfLBnodesFine]; + fPPPdest = &DF[dPPP * numberOfLBnodesFine]; + fPMPdest = &DF[dPMP * numberOfLBnodesFine]; + fPMMdest = &DF[dPMM * numberOfLBnodesFine]; real *fP00source, *fM00source, *f0P0source, *f0M0source, *f00Psource, *f00Msource, *fPP0source, *fMM0source, *fPM0source, @@ -4426,72 +4426,72 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC, if (isEvenTimestep == true) { - fP00source = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fM00source = &DC[DIR_M00 * numberOfLBnodesCoarse]; - f0P0source = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - f0M0source = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - f00Psource = &DC[DIR_00P * numberOfLBnodesCoarse]; - f00Msource = &DC[DIR_00M * numberOfLBnodesCoarse]; - fPP0source = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fMM0source = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fPM0source = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fMP0source = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fP0Psource = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fM0Msource = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fP0Msource = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fM0Psource = &DC[DIR_M0P * numberOfLBnodesCoarse]; - f0PPsource = &DC[DIR_0PP * numberOfLBnodesCoarse]; - f0MMsource = &DC[DIR_0MM * numberOfLBnodesCoarse]; - f0PMsource = &DC[DIR_0PM * numberOfLBnodesCoarse]; - f0MPsource = &DC[DIR_0MP * numberOfLBnodesCoarse]; - f000source = &DC[DIR_000 * numberOfLBnodesCoarse]; - fMMMsource = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fMMPsource = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fMPPsource = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fMPMsource = &DC[DIR_MPM * numberOfLBnodesCoarse]; - fPPMsource = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fPPPsource = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fPMPsource = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fPMMsource = &DC[DIR_PMM * numberOfLBnodesCoarse]; + fP00source = &DC[dP00 * numberOfLBnodesCoarse]; + fM00source = &DC[dM00 * numberOfLBnodesCoarse]; + f0P0source = &DC[d0P0 * numberOfLBnodesCoarse]; + f0M0source = &DC[d0M0 * numberOfLBnodesCoarse]; + f00Psource = &DC[d00P * numberOfLBnodesCoarse]; + f00Msource = &DC[d00M * numberOfLBnodesCoarse]; + fPP0source = &DC[dPP0 * numberOfLBnodesCoarse]; + fMM0source = &DC[dMM0 * numberOfLBnodesCoarse]; + fPM0source = &DC[dPM0 * numberOfLBnodesCoarse]; + fMP0source = &DC[dMP0 * numberOfLBnodesCoarse]; + fP0Psource = &DC[dP0P * numberOfLBnodesCoarse]; + fM0Msource = &DC[dM0M * numberOfLBnodesCoarse]; + fP0Msource = &DC[dP0M * numberOfLBnodesCoarse]; + fM0Psource = &DC[dM0P * numberOfLBnodesCoarse]; + f0PPsource = &DC[d0PP * numberOfLBnodesCoarse]; + f0MMsource = &DC[d0MM * numberOfLBnodesCoarse]; + f0PMsource = &DC[d0PM * numberOfLBnodesCoarse]; + f0MPsource = &DC[d0MP * numberOfLBnodesCoarse]; + f000source = &DC[d000 * numberOfLBnodesCoarse]; + fMMMsource = &DC[dMMM * numberOfLBnodesCoarse]; + fMMPsource = &DC[dMMP * numberOfLBnodesCoarse]; + fMPPsource = &DC[dMPP * numberOfLBnodesCoarse]; + fMPMsource = &DC[dMPM * numberOfLBnodesCoarse]; + fPPMsource = &DC[dPPM * numberOfLBnodesCoarse]; + fPPPsource = &DC[dPPP * numberOfLBnodesCoarse]; + fPMPsource = &DC[dPMP * numberOfLBnodesCoarse]; + fPMMsource = &DC[dPMM * numberOfLBnodesCoarse]; } else { - fP00source = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fM00source = &DC[DIR_P00 * numberOfLBnodesCoarse]; - f0P0source = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - f0M0source = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - f00Psource = &DC[DIR_00M * numberOfLBnodesCoarse]; - f00Msource = &DC[DIR_00P * numberOfLBnodesCoarse]; - fPP0source = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fMM0source = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fPM0source = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fMP0source = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fP0Psource = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fM0Msource = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fP0Msource = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fM0Psource = &DC[DIR_P0M * numberOfLBnodesCoarse]; - f0PPsource = &DC[DIR_0MM * numberOfLBnodesCoarse]; - f0MMsource = &DC[DIR_0PP * numberOfLBnodesCoarse]; - f0PMsource = &DC[DIR_0MP * numberOfLBnodesCoarse]; - f0MPsource = &DC[DIR_0PM * numberOfLBnodesCoarse]; - f000source = &DC[DIR_000 * numberOfLBnodesCoarse]; - fMMMsource = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fMMPsource = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fMPPsource = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fMPMsource = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fPPMsource = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fPPPsource = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fPMPsource = &DC[DIR_MPM * numberOfLBnodesCoarse]; - fPMMsource = &DC[DIR_MPP * numberOfLBnodesCoarse]; + fP00source = &DC[dM00 * numberOfLBnodesCoarse]; + fM00source = &DC[dP00 * numberOfLBnodesCoarse]; + f0P0source = &DC[d0M0 * numberOfLBnodesCoarse]; + f0M0source = &DC[d0P0 * numberOfLBnodesCoarse]; + f00Psource = &DC[d00M * numberOfLBnodesCoarse]; + f00Msource = &DC[d00P * numberOfLBnodesCoarse]; + fPP0source = &DC[dMM0 * numberOfLBnodesCoarse]; + fMM0source = &DC[dPP0 * numberOfLBnodesCoarse]; + fPM0source = &DC[dMP0 * numberOfLBnodesCoarse]; + fMP0source = &DC[dPM0 * numberOfLBnodesCoarse]; + fP0Psource = &DC[dM0M * numberOfLBnodesCoarse]; + fM0Msource = &DC[dP0P * numberOfLBnodesCoarse]; + fP0Msource = &DC[dM0P * numberOfLBnodesCoarse]; + fM0Psource = &DC[dP0M * numberOfLBnodesCoarse]; + f0PPsource = &DC[d0MM * numberOfLBnodesCoarse]; + f0MMsource = &DC[d0PP * numberOfLBnodesCoarse]; + f0PMsource = &DC[d0MP * numberOfLBnodesCoarse]; + f0MPsource = &DC[d0PM * numberOfLBnodesCoarse]; + f000source = &DC[d000 * numberOfLBnodesCoarse]; + fMMMsource = &DC[dPPP * numberOfLBnodesCoarse]; + fMMPsource = &DC[dPPM * numberOfLBnodesCoarse]; + fMPPsource = &DC[dPMM * numberOfLBnodesCoarse]; + fMPMsource = &DC[dPMP * numberOfLBnodesCoarse]; + fPPMsource = &DC[dMMP * numberOfLBnodesCoarse]; + fPPPsource = &DC[dMMM * numberOfLBnodesCoarse]; + fPMPsource = &DC[dMPM * numberOfLBnodesCoarse]; + fPMMsource = &DC[dMPP * numberOfLBnodesCoarse]; } Distributions6 G; - G.g[DIR_P00] = &G6[DIR_P00 * numberOfLBnodesFine]; - G.g[DIR_M00] = &G6[DIR_M00 * numberOfLBnodesFine]; - G.g[DIR_0P0] = &G6[DIR_0P0 * numberOfLBnodesFine]; - G.g[DIR_0M0] = &G6[DIR_0M0 * numberOfLBnodesFine]; - G.g[DIR_00P] = &G6[DIR_00P * numberOfLBnodesFine]; - G.g[DIR_00M] = &G6[DIR_00M * numberOfLBnodesFine]; + G.g[dP00] = &G6[dP00 * numberOfLBnodesFine]; + G.g[dM00] = &G6[dM00 * numberOfLBnodesFine]; + G.g[d0P0] = &G6[d0P0 * numberOfLBnodesFine]; + G.g[d0M0] = &G6[d0M0 * numberOfLBnodesFine]; + G.g[d00P] = &G6[d00P * numberOfLBnodesFine]; + G.g[d00M] = &G6[d00M * numberOfLBnodesFine]; //////////////////////////////////////////////////////////////////////////////// const unsigned ix = threadIdx.x; // Globaler x-Index @@ -5522,12 +5522,12 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC, //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// - (G.g[DIR_P00])[k000] = mgcbb; - (G.g[DIR_M00])[kM00] = mgabb; - (G.g[DIR_0P0])[k000] = mgbcb; - (G.g[DIR_0M0])[k0M0] = mgbab; - (G.g[DIR_00P])[k000] = mgbbc; - (G.g[DIR_00M])[k00M] = mgbba; + (G.g[dP00])[k000] = mgcbb; + (G.g[dM00])[kM00] = mgabb; + (G.g[d0P0])[k000] = mgbcb; + (G.g[d0M0])[k0M0] = mgbab; + (G.g[d00P])[k000] = mgbbc; + (G.g[d00M])[k00M] = mgbba; //////////////////////////////////////////////////////////////////////////////////// fP00dest[k000] = mfcbb; fM00dest[kM00] = mfabb; @@ -5949,12 +5949,12 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC, //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// - (G.g[DIR_P00])[k000] = mgcbb; - (G.g[DIR_M00])[kM00] = mgabb; - (G.g[DIR_0P0])[k000] = mgbcb; - (G.g[DIR_0M0])[k0M0] = mgbab; - (G.g[DIR_00P])[k000] = mgbbc; - (G.g[DIR_00M])[k00M] = mgbba; + (G.g[dP00])[k000] = mgcbb; + (G.g[dM00])[kM00] = mgabb; + (G.g[d0P0])[k000] = mgbcb; + (G.g[d0M0])[k0M0] = mgbab; + (G.g[d00P])[k000] = mgbbc; + (G.g[d00M])[k00M] = mgbba; //////////////////////////////////////////////////////////////////////////////////// fP00dest[k000] = mfcbb; fM00dest[kM00] = mfabb; @@ -6379,12 +6379,12 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC, //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// - (G.g[DIR_P00])[k000] = mgcbb; - (G.g[DIR_M00])[kM00] = mgabb; - (G.g[DIR_0P0])[k000] = mgbcb; - (G.g[DIR_0M0])[k0M0] = mgbab; - (G.g[DIR_00P])[k000] = mgbbc; - (G.g[DIR_00M])[k00M] = mgbba; + (G.g[dP00])[k000] = mgcbb; + (G.g[dM00])[kM00] = mgabb; + (G.g[d0P0])[k000] = mgbcb; + (G.g[d0M0])[k0M0] = mgbab; + (G.g[d00P])[k000] = mgbbc; + (G.g[d00M])[k00M] = mgbba; //////////////////////////////////////////////////////////////////////////////////// fP00dest[k000] = mfcbb; fM00dest[kM00] = mfabb; @@ -6809,12 +6809,12 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC, //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// - (G.g[DIR_P00])[k000] = mgcbb; - (G.g[DIR_M00])[kM00] = mgabb; - (G.g[DIR_0P0])[k000] = mgbcb; - (G.g[DIR_0M0])[k0M0] = mgbab; - (G.g[DIR_00P])[k000] = mgbbc; - (G.g[DIR_00M])[k00M] = mgbba; + (G.g[dP00])[k000] = mgcbb; + (G.g[dM00])[kM00] = mgabb; + (G.g[d0P0])[k000] = mgbcb; + (G.g[d0M0])[k0M0] = mgbab; + (G.g[d00P])[k000] = mgbbc; + (G.g[d00M])[k00M] = mgbba; //////////////////////////////////////////////////////////////////////////////////// fP00dest[k000] = mfcbb; fM00dest[kM00] = mfabb; @@ -7249,12 +7249,12 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC, //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// - (G.g[DIR_P00])[k000] = mgcbb; - (G.g[DIR_M00])[kM00] = mgabb; - (G.g[DIR_0P0])[k000] = mgbcb; - (G.g[DIR_0M0])[k0M0] = mgbab; - (G.g[DIR_00P])[k000] = mgbbc; - (G.g[DIR_00M])[k00M] = mgbba; + (G.g[dP00])[k000] = mgcbb; + (G.g[dM00])[kM00] = mgabb; + (G.g[d0P0])[k000] = mgbcb; + (G.g[d0M0])[k0M0] = mgbab; + (G.g[d00P])[k000] = mgbbc; + (G.g[d00M])[k00M] = mgbba; //////////////////////////////////////////////////////////////////////////////////// fP00dest[k000] = mfcbb; fM00dest[kM00] = mfabb; @@ -7679,12 +7679,12 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC, //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// - (G.g[DIR_P00])[k000] = mgcbb; - (G.g[DIR_M00])[kM00] = mgabb; - (G.g[DIR_0P0])[k000] = mgbcb; - (G.g[DIR_0M0])[k0M0] = mgbab; - (G.g[DIR_00P])[k000] = mgbbc; - (G.g[DIR_00M])[k00M] = mgbba; + (G.g[dP00])[k000] = mgcbb; + (G.g[dM00])[kM00] = mgabb; + (G.g[d0P0])[k000] = mgbcb; + (G.g[d0M0])[k0M0] = mgbab; + (G.g[d00P])[k000] = mgbbc; + (G.g[d00M])[k00M] = mgbba; //////////////////////////////////////////////////////////////////////////////////// fP00dest[k000] = mfcbb; fM00dest[kM00] = mfabb; @@ -8109,12 +8109,12 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC, //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// - (G.g[DIR_P00])[k000] = mgcbb; - (G.g[DIR_M00])[kM00] = mgabb; - (G.g[DIR_0P0])[k000] = mgbcb; - (G.g[DIR_0M0])[k0M0] = mgbab; - (G.g[DIR_00P])[k000] = mgbbc; - (G.g[DIR_00M])[k00M] = mgbba; + (G.g[dP00])[k000] = mgcbb; + (G.g[dM00])[kM00] = mgabb; + (G.g[d0P0])[k000] = mgbcb; + (G.g[d0M0])[k0M0] = mgbab; + (G.g[d00P])[k000] = mgbbc; + (G.g[d00M])[k00M] = mgbba; //////////////////////////////////////////////////////////////////////////////////// fP00dest[k000] = mfcbb; fM00dest[kM00] = mfabb; @@ -8539,12 +8539,12 @@ __global__ void scaleCF_comp_D3Q27F3( real* DC, //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// - (G.g[DIR_P00])[k000] = mgcbb; - (G.g[DIR_M00])[kM00] = mgabb; - (G.g[DIR_0P0])[k000] = mgbcb; - (G.g[DIR_0M0])[k0M0] = mgbab; - (G.g[DIR_00P])[k000] = mgbbc; - (G.g[DIR_00M])[k00M] = mgbba; + (G.g[dP00])[k000] = mgcbb; + (G.g[dM00])[kM00] = mgabb; + (G.g[d0P0])[k000] = mgbcb; + (G.g[d0M0])[k0M0] = mgbab; + (G.g[d00P])[k000] = mgbbc; + (G.g[d00M])[k00M] = mgbba; //////////////////////////////////////////////////////////////////////////////////// fP00dest[k000] = mfcbb; fM00dest[kM00] = mfabb; diff --git a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleFC27.cu b/src/gpu/core/GPU/GridScaling/ScaleFC27.cu similarity index 93% rename from src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleFC27.cu rename to src/gpu/core/GPU/GridScaling/ScaleFC27.cu index 08c47230faa5ffeed0b996e2b1125d3c45e6bce1..803cf0bc4197d4e31b28899254f3d85a830efeff 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleFC27.cu +++ b/src/gpu/core/GPU/GridScaling/ScaleFC27.cu @@ -43,33 +43,33 @@ __global__ void scaleFC_0817_comp_27( real* DC, *f000source, *fMMMsource, *fMMPsource, *fMPPsource, *fMPMsource, *fPPMsource, *fPPPsource, *fPMPsource, *fPMMsource; - fP00source = &DF[DIR_P00 * numberOfLBnodesFine]; - fM00source = &DF[DIR_M00 * numberOfLBnodesFine]; - f0P0source = &DF[DIR_0P0 * numberOfLBnodesFine]; - f0M0source = &DF[DIR_0M0 * numberOfLBnodesFine]; - f00Psource = &DF[DIR_00P * numberOfLBnodesFine]; - f00Msource = &DF[DIR_00M * numberOfLBnodesFine]; - fPP0source = &DF[DIR_PP0 * numberOfLBnodesFine]; - fMM0source = &DF[DIR_MM0 * numberOfLBnodesFine]; - fPM0source = &DF[DIR_PM0 * numberOfLBnodesFine]; - fMP0source = &DF[DIR_MP0 * numberOfLBnodesFine]; - fP0Psource = &DF[DIR_P0P * numberOfLBnodesFine]; - fM0Msource = &DF[DIR_M0M * numberOfLBnodesFine]; - fP0Msource = &DF[DIR_P0M * numberOfLBnodesFine]; - fM0Psource = &DF[DIR_M0P * numberOfLBnodesFine]; - f0PPsource = &DF[DIR_0PP * numberOfLBnodesFine]; - f0MMsource = &DF[DIR_0MM * numberOfLBnodesFine]; - f0PMsource = &DF[DIR_0PM * numberOfLBnodesFine]; - f0MPsource = &DF[DIR_0MP * numberOfLBnodesFine]; - f000source = &DF[DIR_000 * numberOfLBnodesFine]; - fMMMsource = &DF[DIR_MMM * numberOfLBnodesFine]; - fMMPsource = &DF[DIR_MMP * numberOfLBnodesFine]; - fMPPsource = &DF[DIR_MPP * numberOfLBnodesFine]; - fMPMsource = &DF[DIR_MPM * numberOfLBnodesFine]; - fPPMsource = &DF[DIR_PPM * numberOfLBnodesFine]; - fPPPsource = &DF[DIR_PPP * numberOfLBnodesFine]; - fPMPsource = &DF[DIR_PMP * numberOfLBnodesFine]; - fPMMsource = &DF[DIR_PMM * numberOfLBnodesFine]; + fP00source = &DF[dP00 * numberOfLBnodesFine]; + fM00source = &DF[dM00 * numberOfLBnodesFine]; + f0P0source = &DF[d0P0 * numberOfLBnodesFine]; + f0M0source = &DF[d0M0 * numberOfLBnodesFine]; + f00Psource = &DF[d00P * numberOfLBnodesFine]; + f00Msource = &DF[d00M * numberOfLBnodesFine]; + fPP0source = &DF[dPP0 * numberOfLBnodesFine]; + fMM0source = &DF[dMM0 * numberOfLBnodesFine]; + fPM0source = &DF[dPM0 * numberOfLBnodesFine]; + fMP0source = &DF[dMP0 * numberOfLBnodesFine]; + fP0Psource = &DF[dP0P * numberOfLBnodesFine]; + fM0Msource = &DF[dM0M * numberOfLBnodesFine]; + fP0Msource = &DF[dP0M * numberOfLBnodesFine]; + fM0Psource = &DF[dM0P * numberOfLBnodesFine]; + f0PPsource = &DF[d0PP * numberOfLBnodesFine]; + f0MMsource = &DF[d0MM * numberOfLBnodesFine]; + f0PMsource = &DF[d0PM * numberOfLBnodesFine]; + f0MPsource = &DF[d0MP * numberOfLBnodesFine]; + f000source = &DF[d000 * numberOfLBnodesFine]; + fMMMsource = &DF[dMMM * numberOfLBnodesFine]; + fMMPsource = &DF[dMMP * numberOfLBnodesFine]; + fMPPsource = &DF[dMPP * numberOfLBnodesFine]; + fMPMsource = &DF[dMPM * numberOfLBnodesFine]; + fPPMsource = &DF[dPPM * numberOfLBnodesFine]; + fPPPsource = &DF[dPPP * numberOfLBnodesFine]; + fPMPsource = &DF[dPMP * numberOfLBnodesFine]; + fPMMsource = &DF[dPMM * numberOfLBnodesFine]; real *fP00dest, *fM00dest, *f0P0dest, *f0M0dest, *f00Pdest, *f00Mdest, *fPP0dest, *fMM0dest, *fPM0dest, @@ -78,63 +78,63 @@ __global__ void scaleFC_0817_comp_27( real* DC, if (isEvenTimestep==true) { - fP00dest = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fM00dest = &DC[DIR_M00 * numberOfLBnodesCoarse]; - f0P0dest = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - f0M0dest = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - f00Pdest = &DC[DIR_00P * numberOfLBnodesCoarse]; - f00Mdest = &DC[DIR_00M * numberOfLBnodesCoarse]; - fPP0dest = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fMM0dest = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fPM0dest = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fMP0dest = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fP0Pdest = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fM0Mdest = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fP0Mdest = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fM0Pdest = &DC[DIR_M0P * numberOfLBnodesCoarse]; - f0PPdest = &DC[DIR_0PP * numberOfLBnodesCoarse]; - f0MMdest = &DC[DIR_0MM * numberOfLBnodesCoarse]; - f0PMdest = &DC[DIR_0PM * numberOfLBnodesCoarse]; - f0MPdest = &DC[DIR_0MP * numberOfLBnodesCoarse]; - f000dest = &DC[DIR_000 * numberOfLBnodesCoarse]; - fMMMdest = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fMMPdest = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fMPPdest = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fMPMdest = &DC[DIR_MPM * numberOfLBnodesCoarse]; - fPPMdest = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fPPPdest = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fPMPdest = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fPMMdest = &DC[DIR_PMM * numberOfLBnodesCoarse]; + fP00dest = &DC[dP00 * numberOfLBnodesCoarse]; + fM00dest = &DC[dM00 * numberOfLBnodesCoarse]; + f0P0dest = &DC[d0P0 * numberOfLBnodesCoarse]; + f0M0dest = &DC[d0M0 * numberOfLBnodesCoarse]; + f00Pdest = &DC[d00P * numberOfLBnodesCoarse]; + f00Mdest = &DC[d00M * numberOfLBnodesCoarse]; + fPP0dest = &DC[dPP0 * numberOfLBnodesCoarse]; + fMM0dest = &DC[dMM0 * numberOfLBnodesCoarse]; + fPM0dest = &DC[dPM0 * numberOfLBnodesCoarse]; + fMP0dest = &DC[dMP0 * numberOfLBnodesCoarse]; + fP0Pdest = &DC[dP0P * numberOfLBnodesCoarse]; + fM0Mdest = &DC[dM0M * numberOfLBnodesCoarse]; + fP0Mdest = &DC[dP0M * numberOfLBnodesCoarse]; + fM0Pdest = &DC[dM0P * numberOfLBnodesCoarse]; + f0PPdest = &DC[d0PP * numberOfLBnodesCoarse]; + f0MMdest = &DC[d0MM * numberOfLBnodesCoarse]; + f0PMdest = &DC[d0PM * numberOfLBnodesCoarse]; + f0MPdest = &DC[d0MP * numberOfLBnodesCoarse]; + f000dest = &DC[d000 * numberOfLBnodesCoarse]; + fMMMdest = &DC[dMMM * numberOfLBnodesCoarse]; + fMMPdest = &DC[dMMP * numberOfLBnodesCoarse]; + fMPPdest = &DC[dMPP * numberOfLBnodesCoarse]; + fMPMdest = &DC[dMPM * numberOfLBnodesCoarse]; + fPPMdest = &DC[dPPM * numberOfLBnodesCoarse]; + fPPPdest = &DC[dPPP * numberOfLBnodesCoarse]; + fPMPdest = &DC[dPMP * numberOfLBnodesCoarse]; + fPMMdest = &DC[dPMM * numberOfLBnodesCoarse]; } else { - fP00dest = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fM00dest = &DC[DIR_P00 * numberOfLBnodesCoarse]; - f0P0dest = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - f0M0dest = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - f00Pdest = &DC[DIR_00M * numberOfLBnodesCoarse]; - f00Mdest = &DC[DIR_00P * numberOfLBnodesCoarse]; - fPP0dest = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fMM0dest = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fPM0dest = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fMP0dest = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fP0Pdest = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fM0Mdest = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fP0Mdest = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fM0Pdest = &DC[DIR_P0M * numberOfLBnodesCoarse]; - f0PPdest = &DC[DIR_0MM * numberOfLBnodesCoarse]; - f0MMdest = &DC[DIR_0PP * numberOfLBnodesCoarse]; - f0PMdest = &DC[DIR_0MP * numberOfLBnodesCoarse]; - f0MPdest = &DC[DIR_0PM * numberOfLBnodesCoarse]; - f000dest = &DC[DIR_000 * numberOfLBnodesCoarse]; - fMMMdest = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fMMPdest = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fMPPdest = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fMPMdest = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fPPMdest = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fPPPdest = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fPMPdest = &DC[DIR_MPM * numberOfLBnodesCoarse]; - fPMMdest = &DC[DIR_MPP * numberOfLBnodesCoarse]; + fP00dest = &DC[dM00 * numberOfLBnodesCoarse]; + fM00dest = &DC[dP00 * numberOfLBnodesCoarse]; + f0P0dest = &DC[d0M0 * numberOfLBnodesCoarse]; + f0M0dest = &DC[d0P0 * numberOfLBnodesCoarse]; + f00Pdest = &DC[d00M * numberOfLBnodesCoarse]; + f00Mdest = &DC[d00P * numberOfLBnodesCoarse]; + fPP0dest = &DC[dMM0 * numberOfLBnodesCoarse]; + fMM0dest = &DC[dPP0 * numberOfLBnodesCoarse]; + fPM0dest = &DC[dMP0 * numberOfLBnodesCoarse]; + fMP0dest = &DC[dPM0 * numberOfLBnodesCoarse]; + fP0Pdest = &DC[dM0M * numberOfLBnodesCoarse]; + fM0Mdest = &DC[dP0P * numberOfLBnodesCoarse]; + fP0Mdest = &DC[dM0P * numberOfLBnodesCoarse]; + fM0Pdest = &DC[dP0M * numberOfLBnodesCoarse]; + f0PPdest = &DC[d0MM * numberOfLBnodesCoarse]; + f0MMdest = &DC[d0PP * numberOfLBnodesCoarse]; + f0PMdest = &DC[d0MP * numberOfLBnodesCoarse]; + f0MPdest = &DC[d0PM * numberOfLBnodesCoarse]; + f000dest = &DC[d000 * numberOfLBnodesCoarse]; + fMMMdest = &DC[dPPP * numberOfLBnodesCoarse]; + fMMPdest = &DC[dPPM * numberOfLBnodesCoarse]; + fMPPdest = &DC[dPMM * numberOfLBnodesCoarse]; + fMPMdest = &DC[dPMP * numberOfLBnodesCoarse]; + fPPMdest = &DC[dMMP * numberOfLBnodesCoarse]; + fPPPdest = &DC[dMMM * numberOfLBnodesCoarse]; + fPMPdest = &DC[dMPM * numberOfLBnodesCoarse]; + fPMMdest = &DC[dMPP * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// const unsigned ix = threadIdx.x; // Globaler x-Index @@ -1236,96 +1236,96 @@ __global__ void scaleFC_AA2016_comp_27(real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// const unsigned ix = threadIdx.x; // Globaler x-Index @@ -5425,96 +5425,96 @@ __global__ void scaleFC_RhoSq_3rdMom_comp_27(real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// const unsigned ix = threadIdx.x; // Globaler x-Index @@ -9614,93 +9614,93 @@ __device__ void scaleFC_RhoSq_comp_27_Calculation( real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep == true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// @@ -11192,96 +11192,96 @@ __global__ void scaleFC_staggered_time_comp_27( real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// const unsigned ix = threadIdx.x; // Globaler x-Index @@ -12492,96 +12492,96 @@ __global__ void scaleFC_Fix_comp_27( real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// const unsigned ix = threadIdx.x; // Globaler x-Index @@ -14352,96 +14352,96 @@ __global__ void scaleFC_NSPress_27( real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// const unsigned ix = threadIdx.x; // Globaler x-Index @@ -15558,96 +15558,96 @@ __global__ void scaleFC_Fix_27( real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// const unsigned ix = threadIdx.x; // Globaler x-Index @@ -16918,96 +16918,96 @@ __global__ void scaleFCpress27(real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// const unsigned ix = threadIdx.x; // Globaler x-Index @@ -17843,96 +17843,96 @@ __global__ void scaleFCLast27( real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// const unsigned ix = threadIdx.x; // Globaler x-Index @@ -19236,93 +19236,93 @@ __global__ void scaleFCThSMG7( real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, //*fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, //*fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } Distributions7 D7F; @@ -20105,93 +20105,93 @@ __global__ void scaleFCThS7( real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, //*fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, //*fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } Distributions7 D7F; @@ -20894,184 +20894,184 @@ __global__ void scaleFCThS27( real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, //*fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, //*fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } Distributions27 D27F; - D27F.f[DIR_P00] = &DD27F[DIR_P00 * numberOfLBnodesFine]; - D27F.f[DIR_M00] = &DD27F[DIR_M00 * numberOfLBnodesFine]; - D27F.f[DIR_0P0] = &DD27F[DIR_0P0 * numberOfLBnodesFine]; - D27F.f[DIR_0M0] = &DD27F[DIR_0M0 * numberOfLBnodesFine]; - D27F.f[DIR_00P] = &DD27F[DIR_00P * numberOfLBnodesFine]; - D27F.f[DIR_00M] = &DD27F[DIR_00M * numberOfLBnodesFine]; - D27F.f[DIR_PP0] = &DD27F[DIR_PP0 * numberOfLBnodesFine]; - D27F.f[DIR_MM0] = &DD27F[DIR_MM0 * numberOfLBnodesFine]; - D27F.f[DIR_PM0] = &DD27F[DIR_PM0 * numberOfLBnodesFine]; - D27F.f[DIR_MP0] = &DD27F[DIR_MP0 * numberOfLBnodesFine]; - D27F.f[DIR_P0P] = &DD27F[DIR_P0P * numberOfLBnodesFine]; - D27F.f[DIR_M0M] = &DD27F[DIR_M0M * numberOfLBnodesFine]; - D27F.f[DIR_P0M] = &DD27F[DIR_P0M * numberOfLBnodesFine]; - D27F.f[DIR_M0P] = &DD27F[DIR_M0P * numberOfLBnodesFine]; - D27F.f[DIR_0PP] = &DD27F[DIR_0PP * numberOfLBnodesFine]; - D27F.f[DIR_0MM] = &DD27F[DIR_0MM * numberOfLBnodesFine]; - D27F.f[DIR_0PM] = &DD27F[DIR_0PM * numberOfLBnodesFine]; - D27F.f[DIR_0MP] = &DD27F[DIR_0MP * numberOfLBnodesFine]; - D27F.f[DIR_000] = &DD27F[DIR_000 * numberOfLBnodesFine]; - D27F.f[DIR_PPP] = &DD27F[DIR_PPP * numberOfLBnodesFine]; - D27F.f[DIR_MMP] = &DD27F[DIR_MMP * numberOfLBnodesFine]; - D27F.f[DIR_PMP] = &DD27F[DIR_PMP * numberOfLBnodesFine]; - D27F.f[DIR_MPP] = &DD27F[DIR_MPP * numberOfLBnodesFine]; - D27F.f[DIR_PPM] = &DD27F[DIR_PPM * numberOfLBnodesFine]; - D27F.f[DIR_MMM] = &DD27F[DIR_MMM * numberOfLBnodesFine]; - D27F.f[DIR_PMM] = &DD27F[DIR_PMM * numberOfLBnodesFine]; - D27F.f[DIR_MPM] = &DD27F[DIR_MPM * numberOfLBnodesFine]; + D27F.f[dP00] = &DD27F[dP00 * numberOfLBnodesFine]; + D27F.f[dM00] = &DD27F[dM00 * numberOfLBnodesFine]; + D27F.f[d0P0] = &DD27F[d0P0 * numberOfLBnodesFine]; + D27F.f[d0M0] = &DD27F[d0M0 * numberOfLBnodesFine]; + D27F.f[d00P] = &DD27F[d00P * numberOfLBnodesFine]; + D27F.f[d00M] = &DD27F[d00M * numberOfLBnodesFine]; + D27F.f[dPP0] = &DD27F[dPP0 * numberOfLBnodesFine]; + D27F.f[dMM0] = &DD27F[dMM0 * numberOfLBnodesFine]; + D27F.f[dPM0] = &DD27F[dPM0 * numberOfLBnodesFine]; + D27F.f[dMP0] = &DD27F[dMP0 * numberOfLBnodesFine]; + D27F.f[dP0P] = &DD27F[dP0P * numberOfLBnodesFine]; + D27F.f[dM0M] = &DD27F[dM0M * numberOfLBnodesFine]; + D27F.f[dP0M] = &DD27F[dP0M * numberOfLBnodesFine]; + D27F.f[dM0P] = &DD27F[dM0P * numberOfLBnodesFine]; + D27F.f[d0PP] = &DD27F[d0PP * numberOfLBnodesFine]; + D27F.f[d0MM] = &DD27F[d0MM * numberOfLBnodesFine]; + D27F.f[d0PM] = &DD27F[d0PM * numberOfLBnodesFine]; + D27F.f[d0MP] = &DD27F[d0MP * numberOfLBnodesFine]; + D27F.f[d000] = &DD27F[d000 * numberOfLBnodesFine]; + D27F.f[dPPP] = &DD27F[dPPP * numberOfLBnodesFine]; + D27F.f[dMMP] = &DD27F[dMMP * numberOfLBnodesFine]; + D27F.f[dPMP] = &DD27F[dPMP * numberOfLBnodesFine]; + D27F.f[dMPP] = &DD27F[dMPP * numberOfLBnodesFine]; + D27F.f[dPPM] = &DD27F[dPPM * numberOfLBnodesFine]; + D27F.f[dMMM] = &DD27F[dMMM * numberOfLBnodesFine]; + D27F.f[dPMM] = &DD27F[dPMM * numberOfLBnodesFine]; + D27F.f[dMPM] = &DD27F[dMPM * numberOfLBnodesFine]; Distributions27 D27C; if (isEvenTimestep==true) { - D27C.f[DIR_P00] = &DD27C[DIR_P00 * numberOfLBnodesCoarse]; - D27C.f[DIR_M00] = &DD27C[DIR_M00 * numberOfLBnodesCoarse]; - D27C.f[DIR_0P0] = &DD27C[DIR_0P0 * numberOfLBnodesCoarse]; - D27C.f[DIR_0M0] = &DD27C[DIR_0M0 * numberOfLBnodesCoarse]; - D27C.f[DIR_00P] = &DD27C[DIR_00P * numberOfLBnodesCoarse]; - D27C.f[DIR_00M] = &DD27C[DIR_00M * numberOfLBnodesCoarse]; - D27C.f[DIR_PP0] = &DD27C[DIR_PP0 * numberOfLBnodesCoarse]; - D27C.f[DIR_MM0] = &DD27C[DIR_MM0 * numberOfLBnodesCoarse]; - D27C.f[DIR_PM0] = &DD27C[DIR_PM0 * numberOfLBnodesCoarse]; - D27C.f[DIR_MP0] = &DD27C[DIR_MP0 * numberOfLBnodesCoarse]; - D27C.f[DIR_P0P] = &DD27C[DIR_P0P * numberOfLBnodesCoarse]; - D27C.f[DIR_M0M] = &DD27C[DIR_M0M * numberOfLBnodesCoarse]; - D27C.f[DIR_P0M] = &DD27C[DIR_P0M * numberOfLBnodesCoarse]; - D27C.f[DIR_M0P] = &DD27C[DIR_M0P * numberOfLBnodesCoarse]; - D27C.f[DIR_0PP] = &DD27C[DIR_0PP * numberOfLBnodesCoarse]; - D27C.f[DIR_0MM] = &DD27C[DIR_0MM * numberOfLBnodesCoarse]; - D27C.f[DIR_0PM] = &DD27C[DIR_0PM * numberOfLBnodesCoarse]; - D27C.f[DIR_0MP] = &DD27C[DIR_0MP * numberOfLBnodesCoarse]; - D27C.f[DIR_000] = &DD27C[DIR_000 * numberOfLBnodesCoarse]; - D27C.f[DIR_PPP] = &DD27C[DIR_PPP * numberOfLBnodesCoarse]; - D27C.f[DIR_MMP] = &DD27C[DIR_MMP * numberOfLBnodesCoarse]; - D27C.f[DIR_PMP] = &DD27C[DIR_PMP * numberOfLBnodesCoarse]; - D27C.f[DIR_MPP] = &DD27C[DIR_MPP * numberOfLBnodesCoarse]; - D27C.f[DIR_PPM] = &DD27C[DIR_PPM * numberOfLBnodesCoarse]; - D27C.f[DIR_MMM] = &DD27C[DIR_MMM * numberOfLBnodesCoarse]; - D27C.f[DIR_PMM] = &DD27C[DIR_PMM * numberOfLBnodesCoarse]; - D27C.f[DIR_MPM] = &DD27C[DIR_MPM * numberOfLBnodesCoarse]; + D27C.f[dP00] = &DD27C[dP00 * numberOfLBnodesCoarse]; + D27C.f[dM00] = &DD27C[dM00 * numberOfLBnodesCoarse]; + D27C.f[d0P0] = &DD27C[d0P0 * numberOfLBnodesCoarse]; + D27C.f[d0M0] = &DD27C[d0M0 * numberOfLBnodesCoarse]; + D27C.f[d00P] = &DD27C[d00P * numberOfLBnodesCoarse]; + D27C.f[d00M] = &DD27C[d00M * numberOfLBnodesCoarse]; + D27C.f[dPP0] = &DD27C[dPP0 * numberOfLBnodesCoarse]; + D27C.f[dMM0] = &DD27C[dMM0 * numberOfLBnodesCoarse]; + D27C.f[dPM0] = &DD27C[dPM0 * numberOfLBnodesCoarse]; + D27C.f[dMP0] = &DD27C[dMP0 * numberOfLBnodesCoarse]; + D27C.f[dP0P] = &DD27C[dP0P * numberOfLBnodesCoarse]; + D27C.f[dM0M] = &DD27C[dM0M * numberOfLBnodesCoarse]; + D27C.f[dP0M] = &DD27C[dP0M * numberOfLBnodesCoarse]; + D27C.f[dM0P] = &DD27C[dM0P * numberOfLBnodesCoarse]; + D27C.f[d0PP] = &DD27C[d0PP * numberOfLBnodesCoarse]; + D27C.f[d0MM] = &DD27C[d0MM * numberOfLBnodesCoarse]; + D27C.f[d0PM] = &DD27C[d0PM * numberOfLBnodesCoarse]; + D27C.f[d0MP] = &DD27C[d0MP * numberOfLBnodesCoarse]; + D27C.f[d000] = &DD27C[d000 * numberOfLBnodesCoarse]; + D27C.f[dPPP] = &DD27C[dPPP * numberOfLBnodesCoarse]; + D27C.f[dMMP] = &DD27C[dMMP * numberOfLBnodesCoarse]; + D27C.f[dPMP] = &DD27C[dPMP * numberOfLBnodesCoarse]; + D27C.f[dMPP] = &DD27C[dMPP * numberOfLBnodesCoarse]; + D27C.f[dPPM] = &DD27C[dPPM * numberOfLBnodesCoarse]; + D27C.f[dMMM] = &DD27C[dMMM * numberOfLBnodesCoarse]; + D27C.f[dPMM] = &DD27C[dPMM * numberOfLBnodesCoarse]; + D27C.f[dMPM] = &DD27C[dMPM * numberOfLBnodesCoarse]; } else { - D27C.f[DIR_M00] = &DD27C[DIR_P00 * numberOfLBnodesCoarse]; - D27C.f[DIR_P00] = &DD27C[DIR_M00 * numberOfLBnodesCoarse]; - D27C.f[DIR_0M0] = &DD27C[DIR_0P0 * numberOfLBnodesCoarse]; - D27C.f[DIR_0P0] = &DD27C[DIR_0M0 * numberOfLBnodesCoarse]; - D27C.f[DIR_00M] = &DD27C[DIR_00P * numberOfLBnodesCoarse]; - D27C.f[DIR_00P] = &DD27C[DIR_00M * numberOfLBnodesCoarse]; - D27C.f[DIR_MM0] = &DD27C[DIR_PP0 * numberOfLBnodesCoarse]; - D27C.f[DIR_PP0] = &DD27C[DIR_MM0 * numberOfLBnodesCoarse]; - D27C.f[DIR_MP0] = &DD27C[DIR_PM0 * numberOfLBnodesCoarse]; - D27C.f[DIR_PM0] = &DD27C[DIR_MP0 * numberOfLBnodesCoarse]; - D27C.f[DIR_M0M] = &DD27C[DIR_P0P * numberOfLBnodesCoarse]; - D27C.f[DIR_P0P] = &DD27C[DIR_M0M * numberOfLBnodesCoarse]; - D27C.f[DIR_M0P] = &DD27C[DIR_P0M * numberOfLBnodesCoarse]; - D27C.f[DIR_P0M] = &DD27C[DIR_M0P * numberOfLBnodesCoarse]; - D27C.f[DIR_0MM] = &DD27C[DIR_0PP * numberOfLBnodesCoarse]; - D27C.f[DIR_0PP] = &DD27C[DIR_0MM * numberOfLBnodesCoarse]; - D27C.f[DIR_0MP] = &DD27C[DIR_0PM * numberOfLBnodesCoarse]; - D27C.f[DIR_0PM] = &DD27C[DIR_0MP * numberOfLBnodesCoarse]; - D27C.f[DIR_000] = &DD27C[DIR_000 * numberOfLBnodesCoarse]; - D27C.f[DIR_MMM] = &DD27C[DIR_PPP * numberOfLBnodesCoarse]; - D27C.f[DIR_PPM] = &DD27C[DIR_MMP * numberOfLBnodesCoarse]; - D27C.f[DIR_MPM] = &DD27C[DIR_PMP * numberOfLBnodesCoarse]; - D27C.f[DIR_PMM] = &DD27C[DIR_MPP * numberOfLBnodesCoarse]; - D27C.f[DIR_MMP] = &DD27C[DIR_PPM * numberOfLBnodesCoarse]; - D27C.f[DIR_PPP] = &DD27C[DIR_MMM * numberOfLBnodesCoarse]; - D27C.f[DIR_MPP] = &DD27C[DIR_PMM * numberOfLBnodesCoarse]; - D27C.f[DIR_PMP] = &DD27C[DIR_MPM * numberOfLBnodesCoarse]; + D27C.f[dM00] = &DD27C[dP00 * numberOfLBnodesCoarse]; + D27C.f[dP00] = &DD27C[dM00 * numberOfLBnodesCoarse]; + D27C.f[d0M0] = &DD27C[d0P0 * numberOfLBnodesCoarse]; + D27C.f[d0P0] = &DD27C[d0M0 * numberOfLBnodesCoarse]; + D27C.f[d00M] = &DD27C[d00P * numberOfLBnodesCoarse]; + D27C.f[d00P] = &DD27C[d00M * numberOfLBnodesCoarse]; + D27C.f[dMM0] = &DD27C[dPP0 * numberOfLBnodesCoarse]; + D27C.f[dPP0] = &DD27C[dMM0 * numberOfLBnodesCoarse]; + D27C.f[dMP0] = &DD27C[dPM0 * numberOfLBnodesCoarse]; + D27C.f[dPM0] = &DD27C[dMP0 * numberOfLBnodesCoarse]; + D27C.f[dM0M] = &DD27C[dP0P * numberOfLBnodesCoarse]; + D27C.f[dP0P] = &DD27C[dM0M * numberOfLBnodesCoarse]; + D27C.f[dM0P] = &DD27C[dP0M * numberOfLBnodesCoarse]; + D27C.f[dP0M] = &DD27C[dM0P * numberOfLBnodesCoarse]; + D27C.f[d0MM] = &DD27C[d0PP * numberOfLBnodesCoarse]; + D27C.f[d0PP] = &DD27C[d0MM * numberOfLBnodesCoarse]; + D27C.f[d0MP] = &DD27C[d0PM * numberOfLBnodesCoarse]; + D27C.f[d0PM] = &DD27C[d0MP * numberOfLBnodesCoarse]; + D27C.f[d000] = &DD27C[d000 * numberOfLBnodesCoarse]; + D27C.f[dMMM] = &DD27C[dPPP * numberOfLBnodesCoarse]; + D27C.f[dPPM] = &DD27C[dMMP * numberOfLBnodesCoarse]; + D27C.f[dMPM] = &DD27C[dPMP * numberOfLBnodesCoarse]; + D27C.f[dPMM] = &DD27C[dMPP * numberOfLBnodesCoarse]; + D27C.f[dMMP] = &DD27C[dPPM * numberOfLBnodesCoarse]; + D27C.f[dPPP] = &DD27C[dMMM * numberOfLBnodesCoarse]; + D27C.f[dMPP] = &DD27C[dPMM * numberOfLBnodesCoarse]; + D27C.f[dPMP] = &DD27C[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// @@ -21167,33 +21167,33 @@ __global__ void scaleFCThS27( real* DC, f_BSE = fbseF[kbs]; f_BNW = fbnwF[kbw]; ////////////////////////////////////////////////////////////////////////////////// - f27E = (D27F.f[DIR_P00])[kzero];//ke - f27W = (D27F.f[DIR_M00])[kw ]; - f27N = (D27F.f[DIR_0P0])[kzero];//kn - f27S = (D27F.f[DIR_0M0])[ks ]; - f27T = (D27F.f[DIR_00P])[kzero];//kt - f27B = (D27F.f[DIR_00M])[kb ]; - f27NE = (D27F.f[DIR_PP0])[kzero];//kne - f27SW = (D27F.f[DIR_MM0])[ksw ]; - f27SE = (D27F.f[DIR_PM0])[ks ];//kse - f27NW = (D27F.f[DIR_MP0])[kw ];//knw - f27TE = (D27F.f[DIR_P0P])[kzero];//kte - f27BW = (D27F.f[DIR_M0M])[kbw ]; - f27BE = (D27F.f[DIR_P0M])[kb ];//kbe - f27TW = (D27F.f[DIR_M0P])[kw ];//ktw - f27TN = (D27F.f[DIR_0PP])[kzero];//ktn - f27BS = (D27F.f[DIR_0MM])[kbs ]; - f27BN = (D27F.f[DIR_0PM])[kb ];//kbn - f27TS = (D27F.f[DIR_0MP])[ks ];//kts - f27ZERO = (D27F.f[DIR_000])[kzero];//kzero - f27TNE = (D27F.f[DIR_PPP])[kzero];//ktne - f27TSW = (D27F.f[DIR_MMP])[ksw ];//ktsw - f27TSE = (D27F.f[DIR_PMP])[ks ];//ktse - f27TNW = (D27F.f[DIR_MPP])[kw ];//ktnw - f27BNE = (D27F.f[DIR_PPM])[kb ];//kbne - f27BSW = (D27F.f[DIR_MMM])[kbsw ]; - f27BSE = (D27F.f[DIR_PMM])[kbs ];//kbse - f27BNW = (D27F.f[DIR_MPM])[kbw ];//kbnw + f27E = (D27F.f[dP00])[kzero];//ke + f27W = (D27F.f[dM00])[kw ]; + f27N = (D27F.f[d0P0])[kzero];//kn + f27S = (D27F.f[d0M0])[ks ]; + f27T = (D27F.f[d00P])[kzero];//kt + f27B = (D27F.f[d00M])[kb ]; + f27NE = (D27F.f[dPP0])[kzero];//kne + f27SW = (D27F.f[dMM0])[ksw ]; + f27SE = (D27F.f[dPM0])[ks ];//kse + f27NW = (D27F.f[dMP0])[kw ];//knw + f27TE = (D27F.f[dP0P])[kzero];//kte + f27BW = (D27F.f[dM0M])[kbw ]; + f27BE = (D27F.f[dP0M])[kb ];//kbe + f27TW = (D27F.f[dM0P])[kw ];//ktw + f27TN = (D27F.f[d0PP])[kzero];//ktn + f27BS = (D27F.f[d0MM])[kbs ]; + f27BN = (D27F.f[d0PM])[kb ];//kbn + f27TS = (D27F.f[d0MP])[ks ];//kts + f27ZERO = (D27F.f[d000])[kzero];//kzero + f27TNE = (D27F.f[dPPP])[kzero];//ktne + f27TSW = (D27F.f[dMMP])[ksw ];//ktsw + f27TSE = (D27F.f[dPMP])[ks ];//ktse + f27TNW = (D27F.f[dMPP])[kw ];//ktnw + f27BNE = (D27F.f[dPPM])[kb ];//kbne + f27BSW = (D27F.f[dMMM])[kbsw ]; + f27BSE = (D27F.f[dPMM])[kbs ];//kbse + f27BNW = (D27F.f[dMPM])[kbw ];//kbnw Conc_F_SWB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + @@ -21254,33 +21254,33 @@ __global__ void scaleFCThS27( real* DC, f_BSE = fbseF[kbs]; f_BNW = fbnwF[kbw]; ////////////////////////////////////////////////////////////////////////////////// - f27E = (D27F.f[DIR_P00])[kzero];//ke - f27W = (D27F.f[DIR_M00])[kw ]; - f27N = (D27F.f[DIR_0P0])[kzero];//kn - f27S = (D27F.f[DIR_0M0])[ks ]; - f27T = (D27F.f[DIR_00P])[kzero];//kt - f27B = (D27F.f[DIR_00M])[kb ]; - f27NE = (D27F.f[DIR_PP0])[kzero];//kne - f27SW = (D27F.f[DIR_MM0])[ksw ]; - f27SE = (D27F.f[DIR_PM0])[ks ];//kse - f27NW = (D27F.f[DIR_MP0])[kw ];//knw - f27TE = (D27F.f[DIR_P0P])[kzero];//kte - f27BW = (D27F.f[DIR_M0M])[kbw ]; - f27BE = (D27F.f[DIR_P0M])[kb ];//kbe - f27TW = (D27F.f[DIR_M0P])[kw ];//ktw - f27TN = (D27F.f[DIR_0PP])[kzero];//ktn - f27BS = (D27F.f[DIR_0MM])[kbs ]; - f27BN = (D27F.f[DIR_0PM])[kb ];//kbn - f27TS = (D27F.f[DIR_0MP])[ks ];//kts - f27ZERO = (D27F.f[DIR_000])[kzero];//kzero - f27TNE = (D27F.f[DIR_PPP])[kzero];//ktne - f27TSW = (D27F.f[DIR_MMP])[ksw ];//ktsw - f27TSE = (D27F.f[DIR_PMP])[ks ];//ktse - f27TNW = (D27F.f[DIR_MPP])[kw ];//ktnw - f27BNE = (D27F.f[DIR_PPM])[kb ];//kbne - f27BSW = (D27F.f[DIR_MMM])[kbsw ]; - f27BSE = (D27F.f[DIR_PMM])[kbs ];//kbse - f27BNW = (D27F.f[DIR_MPM])[kbw ];//kbnw + f27E = (D27F.f[dP00])[kzero];//ke + f27W = (D27F.f[dM00])[kw ]; + f27N = (D27F.f[d0P0])[kzero];//kn + f27S = (D27F.f[d0M0])[ks ]; + f27T = (D27F.f[d00P])[kzero];//kt + f27B = (D27F.f[d00M])[kb ]; + f27NE = (D27F.f[dPP0])[kzero];//kne + f27SW = (D27F.f[dMM0])[ksw ]; + f27SE = (D27F.f[dPM0])[ks ];//kse + f27NW = (D27F.f[dMP0])[kw ];//knw + f27TE = (D27F.f[dP0P])[kzero];//kte + f27BW = (D27F.f[dM0M])[kbw ]; + f27BE = (D27F.f[dP0M])[kb ];//kbe + f27TW = (D27F.f[dM0P])[kw ];//ktw + f27TN = (D27F.f[d0PP])[kzero];//ktn + f27BS = (D27F.f[d0MM])[kbs ]; + f27BN = (D27F.f[d0PM])[kb ];//kbn + f27TS = (D27F.f[d0MP])[ks ];//kts + f27ZERO = (D27F.f[d000])[kzero];//kzero + f27TNE = (D27F.f[dPPP])[kzero];//ktne + f27TSW = (D27F.f[dMMP])[ksw ];//ktsw + f27TSE = (D27F.f[dPMP])[ks ];//ktse + f27TNW = (D27F.f[dMPP])[kw ];//ktnw + f27BNE = (D27F.f[dPPM])[kb ];//kbne + f27BSW = (D27F.f[dMMM])[kbsw ]; + f27BSE = (D27F.f[dPMM])[kbs ];//kbse + f27BNW = (D27F.f[dMPM])[kbw ];//kbnw Conc_F_SWT = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + @@ -21341,33 +21341,33 @@ __global__ void scaleFCThS27( real* DC, f_BSE = fbseF[kbs]; f_BNW = fbnwF[kbw]; ////////////////////////////////////////////////////////////////////////////////// - f27E = (D27F.f[DIR_P00])[kzero];//ke - f27W = (D27F.f[DIR_M00])[kw ]; - f27N = (D27F.f[DIR_0P0])[kzero];//kn - f27S = (D27F.f[DIR_0M0])[ks ]; - f27T = (D27F.f[DIR_00P])[kzero];//kt - f27B = (D27F.f[DIR_00M])[kb ]; - f27NE = (D27F.f[DIR_PP0])[kzero];//kne - f27SW = (D27F.f[DIR_MM0])[ksw ]; - f27SE = (D27F.f[DIR_PM0])[ks ];//kse - f27NW = (D27F.f[DIR_MP0])[kw ];//knw - f27TE = (D27F.f[DIR_P0P])[kzero];//kte - f27BW = (D27F.f[DIR_M0M])[kbw ]; - f27BE = (D27F.f[DIR_P0M])[kb ];//kbe - f27TW = (D27F.f[DIR_M0P])[kw ];//ktw - f27TN = (D27F.f[DIR_0PP])[kzero];//ktn - f27BS = (D27F.f[DIR_0MM])[kbs ]; - f27BN = (D27F.f[DIR_0PM])[kb ];//kbn - f27TS = (D27F.f[DIR_0MP])[ks ];//kts - f27ZERO = (D27F.f[DIR_000])[kzero];//kzero - f27TNE = (D27F.f[DIR_PPP])[kzero];//ktne - f27TSW = (D27F.f[DIR_MMP])[ksw ];//ktsw - f27TSE = (D27F.f[DIR_PMP])[ks ];//ktse - f27TNW = (D27F.f[DIR_MPP])[kw ];//ktnw - f27BNE = (D27F.f[DIR_PPM])[kb ];//kbne - f27BSW = (D27F.f[DIR_MMM])[kbsw ]; - f27BSE = (D27F.f[DIR_PMM])[kbs ];//kbse - f27BNW = (D27F.f[DIR_MPM])[kbw ];//kbnw + f27E = (D27F.f[dP00])[kzero];//ke + f27W = (D27F.f[dM00])[kw ]; + f27N = (D27F.f[d0P0])[kzero];//kn + f27S = (D27F.f[d0M0])[ks ]; + f27T = (D27F.f[d00P])[kzero];//kt + f27B = (D27F.f[d00M])[kb ]; + f27NE = (D27F.f[dPP0])[kzero];//kne + f27SW = (D27F.f[dMM0])[ksw ]; + f27SE = (D27F.f[dPM0])[ks ];//kse + f27NW = (D27F.f[dMP0])[kw ];//knw + f27TE = (D27F.f[dP0P])[kzero];//kte + f27BW = (D27F.f[dM0M])[kbw ]; + f27BE = (D27F.f[dP0M])[kb ];//kbe + f27TW = (D27F.f[dM0P])[kw ];//ktw + f27TN = (D27F.f[d0PP])[kzero];//ktn + f27BS = (D27F.f[d0MM])[kbs ]; + f27BN = (D27F.f[d0PM])[kb ];//kbn + f27TS = (D27F.f[d0MP])[ks ];//kts + f27ZERO = (D27F.f[d000])[kzero];//kzero + f27TNE = (D27F.f[dPPP])[kzero];//ktne + f27TSW = (D27F.f[dMMP])[ksw ];//ktsw + f27TSE = (D27F.f[dPMP])[ks ];//ktse + f27TNW = (D27F.f[dMPP])[kw ];//ktnw + f27BNE = (D27F.f[dPPM])[kb ];//kbne + f27BSW = (D27F.f[dMMM])[kbsw ]; + f27BSE = (D27F.f[dPMM])[kbs ];//kbse + f27BNW = (D27F.f[dMPM])[kbw ];//kbnw Conc_F_SET = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + @@ -21428,33 +21428,33 @@ __global__ void scaleFCThS27( real* DC, f_BSE = fbseF[kbs]; f_BNW = fbnwF[kbw]; ////////////////////////////////////////////////////////////////////////////////// - f27E = (D27F.f[DIR_P00])[kzero];//ke - f27W = (D27F.f[DIR_M00])[kw ]; - f27N = (D27F.f[DIR_0P0])[kzero];//kn - f27S = (D27F.f[DIR_0M0])[ks ]; - f27T = (D27F.f[DIR_00P])[kzero];//kt - f27B = (D27F.f[DIR_00M])[kb ]; - f27NE = (D27F.f[DIR_PP0])[kzero];//kne - f27SW = (D27F.f[DIR_MM0])[ksw ]; - f27SE = (D27F.f[DIR_PM0])[ks ];//kse - f27NW = (D27F.f[DIR_MP0])[kw ];//knw - f27TE = (D27F.f[DIR_P0P])[kzero];//kte - f27BW = (D27F.f[DIR_M0M])[kbw ]; - f27BE = (D27F.f[DIR_P0M])[kb ];//kbe - f27TW = (D27F.f[DIR_M0P])[kw ];//ktw - f27TN = (D27F.f[DIR_0PP])[kzero];//ktn - f27BS = (D27F.f[DIR_0MM])[kbs ]; - f27BN = (D27F.f[DIR_0PM])[kb ];//kbn - f27TS = (D27F.f[DIR_0MP])[ks ];//kts - f27ZERO = (D27F.f[DIR_000])[kzero];//kzero - f27TNE = (D27F.f[DIR_PPP])[kzero];//ktne - f27TSW = (D27F.f[DIR_MMP])[ksw ];//ktsw - f27TSE = (D27F.f[DIR_PMP])[ks ];//ktse - f27TNW = (D27F.f[DIR_MPP])[kw ];//ktnw - f27BNE = (D27F.f[DIR_PPM])[kb ];//kbne - f27BSW = (D27F.f[DIR_MMM])[kbsw ]; - f27BSE = (D27F.f[DIR_PMM])[kbs ];//kbse - f27BNW = (D27F.f[DIR_MPM])[kbw ];//kbnw + f27E = (D27F.f[dP00])[kzero];//ke + f27W = (D27F.f[dM00])[kw ]; + f27N = (D27F.f[d0P0])[kzero];//kn + f27S = (D27F.f[d0M0])[ks ]; + f27T = (D27F.f[d00P])[kzero];//kt + f27B = (D27F.f[d00M])[kb ]; + f27NE = (D27F.f[dPP0])[kzero];//kne + f27SW = (D27F.f[dMM0])[ksw ]; + f27SE = (D27F.f[dPM0])[ks ];//kse + f27NW = (D27F.f[dMP0])[kw ];//knw + f27TE = (D27F.f[dP0P])[kzero];//kte + f27BW = (D27F.f[dM0M])[kbw ]; + f27BE = (D27F.f[dP0M])[kb ];//kbe + f27TW = (D27F.f[dM0P])[kw ];//ktw + f27TN = (D27F.f[d0PP])[kzero];//ktn + f27BS = (D27F.f[d0MM])[kbs ]; + f27BN = (D27F.f[d0PM])[kb ];//kbn + f27TS = (D27F.f[d0MP])[ks ];//kts + f27ZERO = (D27F.f[d000])[kzero];//kzero + f27TNE = (D27F.f[dPPP])[kzero];//ktne + f27TSW = (D27F.f[dMMP])[ksw ];//ktsw + f27TSE = (D27F.f[dPMP])[ks ];//ktse + f27TNW = (D27F.f[dMPP])[kw ];//ktnw + f27BNE = (D27F.f[dPPM])[kb ];//kbne + f27BSW = (D27F.f[dMMM])[kbsw ]; + f27BSE = (D27F.f[dPMM])[kbs ];//kbse + f27BNW = (D27F.f[dMPM])[kbw ];//kbnw Conc_F_SEB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + @@ -21525,33 +21525,33 @@ __global__ void scaleFCThS27( real* DC, f_BSE = fbseF[kbs]; f_BNW = fbnwF[kbw]; ////////////////////////////////////////////////////////////////////////////////// - f27E = (D27F.f[DIR_P00])[kzero];//ke - f27W = (D27F.f[DIR_M00])[kw ]; - f27N = (D27F.f[DIR_0P0])[kzero];//kn - f27S = (D27F.f[DIR_0M0])[ks ]; - f27T = (D27F.f[DIR_00P])[kzero];//kt - f27B = (D27F.f[DIR_00M])[kb ]; - f27NE = (D27F.f[DIR_PP0])[kzero];//kne - f27SW = (D27F.f[DIR_MM0])[ksw ]; - f27SE = (D27F.f[DIR_PM0])[ks ];//kse - f27NW = (D27F.f[DIR_MP0])[kw ];//knw - f27TE = (D27F.f[DIR_P0P])[kzero];//kte - f27BW = (D27F.f[DIR_M0M])[kbw ]; - f27BE = (D27F.f[DIR_P0M])[kb ];//kbe - f27TW = (D27F.f[DIR_M0P])[kw ];//ktw - f27TN = (D27F.f[DIR_0PP])[kzero];//ktn - f27BS = (D27F.f[DIR_0MM])[kbs ]; - f27BN = (D27F.f[DIR_0PM])[kb ];//kbn - f27TS = (D27F.f[DIR_0MP])[ks ];//kts - f27ZERO = (D27F.f[DIR_000])[kzero];//kzero - f27TNE = (D27F.f[DIR_PPP])[kzero];//ktne - f27TSW = (D27F.f[DIR_MMP])[ksw ];//ktsw - f27TSE = (D27F.f[DIR_PMP])[ks ];//ktse - f27TNW = (D27F.f[DIR_MPP])[kw ];//ktnw - f27BNE = (D27F.f[DIR_PPM])[kb ];//kbne - f27BSW = (D27F.f[DIR_MMM])[kbsw ]; - f27BSE = (D27F.f[DIR_PMM])[kbs ];//kbse - f27BNW = (D27F.f[DIR_MPM])[kbw ];//kbnw + f27E = (D27F.f[dP00])[kzero];//ke + f27W = (D27F.f[dM00])[kw ]; + f27N = (D27F.f[d0P0])[kzero];//kn + f27S = (D27F.f[d0M0])[ks ]; + f27T = (D27F.f[d00P])[kzero];//kt + f27B = (D27F.f[d00M])[kb ]; + f27NE = (D27F.f[dPP0])[kzero];//kne + f27SW = (D27F.f[dMM0])[ksw ]; + f27SE = (D27F.f[dPM0])[ks ];//kse + f27NW = (D27F.f[dMP0])[kw ];//knw + f27TE = (D27F.f[dP0P])[kzero];//kte + f27BW = (D27F.f[dM0M])[kbw ]; + f27BE = (D27F.f[dP0M])[kb ];//kbe + f27TW = (D27F.f[dM0P])[kw ];//ktw + f27TN = (D27F.f[d0PP])[kzero];//ktn + f27BS = (D27F.f[d0MM])[kbs ]; + f27BN = (D27F.f[d0PM])[kb ];//kbn + f27TS = (D27F.f[d0MP])[ks ];//kts + f27ZERO = (D27F.f[d000])[kzero];//kzero + f27TNE = (D27F.f[dPPP])[kzero];//ktne + f27TSW = (D27F.f[dMMP])[ksw ];//ktsw + f27TSE = (D27F.f[dPMP])[ks ];//ktse + f27TNW = (D27F.f[dMPP])[kw ];//ktnw + f27BNE = (D27F.f[dPPM])[kb ];//kbne + f27BSW = (D27F.f[dMMM])[kbsw ]; + f27BSE = (D27F.f[dPMM])[kbs ];//kbse + f27BNW = (D27F.f[dMPM])[kbw ];//kbnw Conc_F_NWB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + @@ -21612,33 +21612,33 @@ __global__ void scaleFCThS27( real* DC, f_BSE = fbseF[kbs]; f_BNW = fbnwF[kbw]; ////////////////////////////////////////////////////////////////////////////////// - f27E = (D27F.f[DIR_P00])[kzero];//ke - f27W = (D27F.f[DIR_M00])[kw ]; - f27N = (D27F.f[DIR_0P0])[kzero];//kn - f27S = (D27F.f[DIR_0M0])[ks ]; - f27T = (D27F.f[DIR_00P])[kzero];//kt - f27B = (D27F.f[DIR_00M])[kb ]; - f27NE = (D27F.f[DIR_PP0])[kzero];//kne - f27SW = (D27F.f[DIR_MM0])[ksw ]; - f27SE = (D27F.f[DIR_PM0])[ks ];//kse - f27NW = (D27F.f[DIR_MP0])[kw ];//knw - f27TE = (D27F.f[DIR_P0P])[kzero];//kte - f27BW = (D27F.f[DIR_M0M])[kbw ]; - f27BE = (D27F.f[DIR_P0M])[kb ];//kbe - f27TW = (D27F.f[DIR_M0P])[kw ];//ktw - f27TN = (D27F.f[DIR_0PP])[kzero];//ktn - f27BS = (D27F.f[DIR_0MM])[kbs ]; - f27BN = (D27F.f[DIR_0PM])[kb ];//kbn - f27TS = (D27F.f[DIR_0MP])[ks ];//kts - f27ZERO = (D27F.f[DIR_000])[kzero];//kzero - f27TNE = (D27F.f[DIR_PPP])[kzero];//ktne - f27TSW = (D27F.f[DIR_MMP])[ksw ];//ktsw - f27TSE = (D27F.f[DIR_PMP])[ks ];//ktse - f27TNW = (D27F.f[DIR_MPP])[kw ];//ktnw - f27BNE = (D27F.f[DIR_PPM])[kb ];//kbne - f27BSW = (D27F.f[DIR_MMM])[kbsw ]; - f27BSE = (D27F.f[DIR_PMM])[kbs ];//kbse - f27BNW = (D27F.f[DIR_MPM])[kbw ];//kbnw + f27E = (D27F.f[dP00])[kzero];//ke + f27W = (D27F.f[dM00])[kw ]; + f27N = (D27F.f[d0P0])[kzero];//kn + f27S = (D27F.f[d0M0])[ks ]; + f27T = (D27F.f[d00P])[kzero];//kt + f27B = (D27F.f[d00M])[kb ]; + f27NE = (D27F.f[dPP0])[kzero];//kne + f27SW = (D27F.f[dMM0])[ksw ]; + f27SE = (D27F.f[dPM0])[ks ];//kse + f27NW = (D27F.f[dMP0])[kw ];//knw + f27TE = (D27F.f[dP0P])[kzero];//kte + f27BW = (D27F.f[dM0M])[kbw ]; + f27BE = (D27F.f[dP0M])[kb ];//kbe + f27TW = (D27F.f[dM0P])[kw ];//ktw + f27TN = (D27F.f[d0PP])[kzero];//ktn + f27BS = (D27F.f[d0MM])[kbs ]; + f27BN = (D27F.f[d0PM])[kb ];//kbn + f27TS = (D27F.f[d0MP])[ks ];//kts + f27ZERO = (D27F.f[d000])[kzero];//kzero + f27TNE = (D27F.f[dPPP])[kzero];//ktne + f27TSW = (D27F.f[dMMP])[ksw ];//ktsw + f27TSE = (D27F.f[dPMP])[ks ];//ktse + f27TNW = (D27F.f[dMPP])[kw ];//ktnw + f27BNE = (D27F.f[dPPM])[kb ];//kbne + f27BSW = (D27F.f[dMMM])[kbsw ]; + f27BSE = (D27F.f[dPMM])[kbs ];//kbse + f27BNW = (D27F.f[dMPM])[kbw ];//kbnw Conc_F_NWT = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + @@ -21699,33 +21699,33 @@ __global__ void scaleFCThS27( real* DC, f_BSE = fbseF[kbs]; f_BNW = fbnwF[kbw]; ////////////////////////////////////////////////////////////////////////////////// - f27E = (D27F.f[DIR_P00])[kzero];//ke - f27W = (D27F.f[DIR_M00])[kw ]; - f27N = (D27F.f[DIR_0P0])[kzero];//kn - f27S = (D27F.f[DIR_0M0])[ks ]; - f27T = (D27F.f[DIR_00P])[kzero];//kt - f27B = (D27F.f[DIR_00M])[kb ]; - f27NE = (D27F.f[DIR_PP0])[kzero];//kne - f27SW = (D27F.f[DIR_MM0])[ksw ]; - f27SE = (D27F.f[DIR_PM0])[ks ];//kse - f27NW = (D27F.f[DIR_MP0])[kw ];//knw - f27TE = (D27F.f[DIR_P0P])[kzero];//kte - f27BW = (D27F.f[DIR_M0M])[kbw ]; - f27BE = (D27F.f[DIR_P0M])[kb ];//kbe - f27TW = (D27F.f[DIR_M0P])[kw ];//ktw - f27TN = (D27F.f[DIR_0PP])[kzero];//ktn - f27BS = (D27F.f[DIR_0MM])[kbs ]; - f27BN = (D27F.f[DIR_0PM])[kb ];//kbn - f27TS = (D27F.f[DIR_0MP])[ks ];//kts - f27ZERO = (D27F.f[DIR_000])[kzero];//kzero - f27TNE = (D27F.f[DIR_PPP])[kzero];//ktne - f27TSW = (D27F.f[DIR_MMP])[ksw ];//ktsw - f27TSE = (D27F.f[DIR_PMP])[ks ];//ktse - f27TNW = (D27F.f[DIR_MPP])[kw ];//ktnw - f27BNE = (D27F.f[DIR_PPM])[kb ];//kbne - f27BSW = (D27F.f[DIR_MMM])[kbsw ]; - f27BSE = (D27F.f[DIR_PMM])[kbs ];//kbse - f27BNW = (D27F.f[DIR_MPM])[kbw ];//kbnw + f27E = (D27F.f[dP00])[kzero];//ke + f27W = (D27F.f[dM00])[kw ]; + f27N = (D27F.f[d0P0])[kzero];//kn + f27S = (D27F.f[d0M0])[ks ]; + f27T = (D27F.f[d00P])[kzero];//kt + f27B = (D27F.f[d00M])[kb ]; + f27NE = (D27F.f[dPP0])[kzero];//kne + f27SW = (D27F.f[dMM0])[ksw ]; + f27SE = (D27F.f[dPM0])[ks ];//kse + f27NW = (D27F.f[dMP0])[kw ];//knw + f27TE = (D27F.f[dP0P])[kzero];//kte + f27BW = (D27F.f[dM0M])[kbw ]; + f27BE = (D27F.f[dP0M])[kb ];//kbe + f27TW = (D27F.f[dM0P])[kw ];//ktw + f27TN = (D27F.f[d0PP])[kzero];//ktn + f27BS = (D27F.f[d0MM])[kbs ]; + f27BN = (D27F.f[d0PM])[kb ];//kbn + f27TS = (D27F.f[d0MP])[ks ];//kts + f27ZERO = (D27F.f[d000])[kzero];//kzero + f27TNE = (D27F.f[dPPP])[kzero];//ktne + f27TSW = (D27F.f[dMMP])[ksw ];//ktsw + f27TSE = (D27F.f[dPMP])[ks ];//ktse + f27TNW = (D27F.f[dMPP])[kw ];//ktnw + f27BNE = (D27F.f[dPPM])[kb ];//kbne + f27BSW = (D27F.f[dMMM])[kbsw ]; + f27BSE = (D27F.f[dPMM])[kbs ];//kbse + f27BNW = (D27F.f[dMPM])[kbw ];//kbnw Conc_F_NET = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + @@ -21786,33 +21786,33 @@ __global__ void scaleFCThS27( real* DC, f_BSE = fbseF[kbs]; f_BNW = fbnwF[kbw]; ////////////////////////////////////////////////////////////////////////////////// - f27E = (D27F.f[DIR_P00])[kzero];//ke - f27W = (D27F.f[DIR_M00])[kw ]; - f27N = (D27F.f[DIR_0P0])[kzero];//kn - f27S = (D27F.f[DIR_0M0])[ks ]; - f27T = (D27F.f[DIR_00P])[kzero];//kt - f27B = (D27F.f[DIR_00M])[kb ]; - f27NE = (D27F.f[DIR_PP0])[kzero];//kne - f27SW = (D27F.f[DIR_MM0])[ksw ]; - f27SE = (D27F.f[DIR_PM0])[ks ];//kse - f27NW = (D27F.f[DIR_MP0])[kw ];//knw - f27TE = (D27F.f[DIR_P0P])[kzero];//kte - f27BW = (D27F.f[DIR_M0M])[kbw ]; - f27BE = (D27F.f[DIR_P0M])[kb ];//kbe - f27TW = (D27F.f[DIR_M0P])[kw ];//ktw - f27TN = (D27F.f[DIR_0PP])[kzero];//ktn - f27BS = (D27F.f[DIR_0MM])[kbs ]; - f27BN = (D27F.f[DIR_0PM])[kb ];//kbn - f27TS = (D27F.f[DIR_0MP])[ks ];//kts - f27ZERO = (D27F.f[DIR_000])[kzero];//kzero - f27TNE = (D27F.f[DIR_PPP])[kzero];//ktne - f27TSW = (D27F.f[DIR_MMP])[ksw ];//ktsw - f27TSE = (D27F.f[DIR_PMP])[ks ];//ktse - f27TNW = (D27F.f[DIR_MPP])[kw ];//ktnw - f27BNE = (D27F.f[DIR_PPM])[kb ];//kbne - f27BSW = (D27F.f[DIR_MMM])[kbsw ]; - f27BSE = (D27F.f[DIR_PMM])[kbs ];//kbse - f27BNW = (D27F.f[DIR_MPM])[kbw ];//kbnw + f27E = (D27F.f[dP00])[kzero];//ke + f27W = (D27F.f[dM00])[kw ]; + f27N = (D27F.f[d0P0])[kzero];//kn + f27S = (D27F.f[d0M0])[ks ]; + f27T = (D27F.f[d00P])[kzero];//kt + f27B = (D27F.f[d00M])[kb ]; + f27NE = (D27F.f[dPP0])[kzero];//kne + f27SW = (D27F.f[dMM0])[ksw ]; + f27SE = (D27F.f[dPM0])[ks ];//kse + f27NW = (D27F.f[dMP0])[kw ];//knw + f27TE = (D27F.f[dP0P])[kzero];//kte + f27BW = (D27F.f[dM0M])[kbw ]; + f27BE = (D27F.f[dP0M])[kb ];//kbe + f27TW = (D27F.f[dM0P])[kw ];//ktw + f27TN = (D27F.f[d0PP])[kzero];//ktn + f27BS = (D27F.f[d0MM])[kbs ]; + f27BN = (D27F.f[d0PM])[kb ];//kbn + f27TS = (D27F.f[d0MP])[ks ];//kts + f27ZERO = (D27F.f[d000])[kzero];//kzero + f27TNE = (D27F.f[dPPP])[kzero];//ktne + f27TSW = (D27F.f[dMMP])[ksw ];//ktsw + f27TSE = (D27F.f[dPMP])[ks ];//ktse + f27TNW = (D27F.f[dMPP])[kw ];//ktnw + f27BNE = (D27F.f[dPPM])[kb ];//kbne + f27BSW = (D27F.f[dMMM])[kbsw ]; + f27BSE = (D27F.f[dPMM])[kbs ];//kbse + f27BNW = (D27F.f[dMPM])[kbw ];//kbnw Conc_F_NEB = f27E + f27W + f27N + f27S + f27T + f27B + f27NE + f27SW + f27SE + f27NW + f27TE + f27BW + f27BE + f27TW + f27TN + f27BS + f27BN + f27TS + f27ZERO + @@ -21925,33 +21925,33 @@ __global__ void scaleFCThS27( real* DC, cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - (D27C.f[DIR_000])[kzero] = c8o27* Conc_C*(c1o1-cu_sq); - (D27C.f[DIR_P00])[kzero] = c2o27* (c3o1*( Mx )+Conc_C*(c1o1+c9o2*( vx1 )*( vx1 )-cu_sq)); - (D27C.f[DIR_M00])[kw ] = c2o27* (c3o1*(-Mx )+Conc_C*(c1o1+c9o2*(-vx1 )*(-vx1 )-cu_sq)); - (D27C.f[DIR_0P0])[kzero] = c2o27* (c3o1*( My )+Conc_C*(c1o1+c9o2*( vx2 )*( vx2 )-cu_sq)); - (D27C.f[DIR_0M0])[ks ] = c2o27* (c3o1*( -My )+Conc_C*(c1o1+c9o2*( -vx2 )*( -vx2 )-cu_sq)); - (D27C.f[DIR_00P])[kzero] = c2o27* (c3o1*( Mz)+Conc_C*(c1o1+c9o2*( vx3)*( vx3)-cu_sq)); - (D27C.f[DIR_00M])[kb ] = c2o27* (c3o1*( -Mz)+Conc_C*(c1o1+c9o2*( -vx3)*( -vx3)-cu_sq)); - (D27C.f[DIR_PP0])[kzero] = c1o54* (c3o1*( Mx +My )+Conc_C*(c1o1+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); - (D27C.f[DIR_MM0])[ksw ] = c1o54* (c3o1*(-Mx -My )+Conc_C*(c1o1+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); - (D27C.f[DIR_PM0])[ks ] = c1o54* (c3o1*( Mx -My )+Conc_C*(c1o1+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); - (D27C.f[DIR_MP0])[kw ] = c1o54* (c3o1*(-Mx +My )+Conc_C*(c1o1+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); - (D27C.f[DIR_P0P])[kzero] = c1o54* (c3o1*( Mx +Mz)+Conc_C*(c1o1+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); - (D27C.f[DIR_M0M])[kbw ] = c1o54* (c3o1*(-Mx -Mz)+Conc_C*(c1o1+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); - (D27C.f[DIR_P0M])[kb ] = c1o54* (c3o1*( Mx -Mz)+Conc_C*(c1o1+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); - (D27C.f[DIR_M0P])[kw ] = c1o54* (c3o1*(-Mx +Mz)+Conc_C*(c1o1+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); - (D27C.f[DIR_0PP])[kzero] = c1o54* (c3o1*( My +Mz)+Conc_C*(c1o1+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); - (D27C.f[DIR_0MM])[kbs ] = c1o54* (c3o1*( -My -Mz)+Conc_C*(c1o1+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); - (D27C.f[DIR_0PM])[kb ] = c1o54* (c3o1*( My -Mz)+Conc_C*(c1o1+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); - (D27C.f[DIR_0MP])[ks ] = c1o54* (c3o1*( -My +Mz)+Conc_C*(c1o1+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); - (D27C.f[DIR_PPP])[kzero] = c1o216*(c3o1*( Mx +My +Mz)+Conc_C*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); - (D27C.f[DIR_MMM])[kbsw ] = c1o216*(c3o1*(-Mx -My -Mz)+Conc_C*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); - (D27C.f[DIR_PPM])[kb ] = c1o216*(c3o1*( Mx +My -Mz)+Conc_C*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); - (D27C.f[DIR_MMP])[ksw ] = c1o216*(c3o1*(-Mx -My +Mz)+Conc_C*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); - (D27C.f[DIR_PMP])[ks ] = c1o216*(c3o1*( Mx -My +Mz)+Conc_C*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); - (D27C.f[DIR_MPM])[kbw ] = c1o216*(c3o1*(-Mx +My -Mz)+Conc_C*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); - (D27C.f[DIR_PMM])[kbs ] = c1o216*(c3o1*( Mx -My -Mz)+Conc_C*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); - (D27C.f[DIR_MPP])[kw ] = c1o216*(c3o1*(-Mx +My +Mz)+Conc_C*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); + (D27C.f[d000])[kzero] = c8o27* Conc_C*(c1o1-cu_sq); + (D27C.f[dP00])[kzero] = c2o27* (c3o1*( Mx )+Conc_C*(c1o1+c9o2*( vx1 )*( vx1 )-cu_sq)); + (D27C.f[dM00])[kw ] = c2o27* (c3o1*(-Mx )+Conc_C*(c1o1+c9o2*(-vx1 )*(-vx1 )-cu_sq)); + (D27C.f[d0P0])[kzero] = c2o27* (c3o1*( My )+Conc_C*(c1o1+c9o2*( vx2 )*( vx2 )-cu_sq)); + (D27C.f[d0M0])[ks ] = c2o27* (c3o1*( -My )+Conc_C*(c1o1+c9o2*( -vx2 )*( -vx2 )-cu_sq)); + (D27C.f[d00P])[kzero] = c2o27* (c3o1*( Mz)+Conc_C*(c1o1+c9o2*( vx3)*( vx3)-cu_sq)); + (D27C.f[d00M])[kb ] = c2o27* (c3o1*( -Mz)+Conc_C*(c1o1+c9o2*( -vx3)*( -vx3)-cu_sq)); + (D27C.f[dPP0])[kzero] = c1o54* (c3o1*( Mx +My )+Conc_C*(c1o1+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); + (D27C.f[dMM0])[ksw ] = c1o54* (c3o1*(-Mx -My )+Conc_C*(c1o1+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); + (D27C.f[dPM0])[ks ] = c1o54* (c3o1*( Mx -My )+Conc_C*(c1o1+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); + (D27C.f[dMP0])[kw ] = c1o54* (c3o1*(-Mx +My )+Conc_C*(c1o1+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); + (D27C.f[dP0P])[kzero] = c1o54* (c3o1*( Mx +Mz)+Conc_C*(c1o1+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); + (D27C.f[dM0M])[kbw ] = c1o54* (c3o1*(-Mx -Mz)+Conc_C*(c1o1+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); + (D27C.f[dP0M])[kb ] = c1o54* (c3o1*( Mx -Mz)+Conc_C*(c1o1+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); + (D27C.f[dM0P])[kw ] = c1o54* (c3o1*(-Mx +Mz)+Conc_C*(c1o1+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); + (D27C.f[d0PP])[kzero] = c1o54* (c3o1*( My +Mz)+Conc_C*(c1o1+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); + (D27C.f[d0MM])[kbs ] = c1o54* (c3o1*( -My -Mz)+Conc_C*(c1o1+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); + (D27C.f[d0PM])[kb ] = c1o54* (c3o1*( My -Mz)+Conc_C*(c1o1+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); + (D27C.f[d0MP])[ks ] = c1o54* (c3o1*( -My +Mz)+Conc_C*(c1o1+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); + (D27C.f[dPPP])[kzero] = c1o216*(c3o1*( Mx +My +Mz)+Conc_C*(c1o1+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); + (D27C.f[dMMM])[kbsw ] = c1o216*(c3o1*(-Mx -My -Mz)+Conc_C*(c1o1+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); + (D27C.f[dPPM])[kb ] = c1o216*(c3o1*( Mx +My -Mz)+Conc_C*(c1o1+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); + (D27C.f[dMMP])[ksw ] = c1o216*(c3o1*(-Mx -My +Mz)+Conc_C*(c1o1+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); + (D27C.f[dPMP])[ks ] = c1o216*(c3o1*( Mx -My +Mz)+Conc_C*(c1o1+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); + (D27C.f[dMPM])[kbw ] = c1o216*(c3o1*(-Mx +My -Mz)+Conc_C*(c1o1+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); + (D27C.f[dPMM])[kbs ] = c1o216*(c3o1*( Mx -My -Mz)+Conc_C*(c1o1+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); + (D27C.f[dMPP])[kw ] = c1o216*(c3o1*(-Mx +My +Mz)+Conc_C*(c1o1+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); } } @@ -22017,96 +22017,96 @@ __global__ void scaleFCEff27(real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// const unsigned ix = threadIdx.x; // Globaler x-Index @@ -22995,96 +22995,96 @@ __global__ void scaleFC27(real* DC, real *feF, *fwF, *fnF, *fsF, *ftF, *fbF, *fneF, *fswF, *fseF, *fnwF, *fteF, *fbwF, *fbeF, *ftwF, *ftnF, *fbsF, *fbnF, *ftsF, *fzeroF, *ftneF, *ftswF, *ftseF, *ftnwF, *fbneF, *fbswF, *fbseF, *fbnwF; - feF = &DF[DIR_P00 * numberOfLBnodesFine]; - fwF = &DF[DIR_M00 * numberOfLBnodesFine]; - fnF = &DF[DIR_0P0 * numberOfLBnodesFine]; - fsF = &DF[DIR_0M0 * numberOfLBnodesFine]; - ftF = &DF[DIR_00P * numberOfLBnodesFine]; - fbF = &DF[DIR_00M * numberOfLBnodesFine]; - fneF = &DF[DIR_PP0 * numberOfLBnodesFine]; - fswF = &DF[DIR_MM0 * numberOfLBnodesFine]; - fseF = &DF[DIR_PM0 * numberOfLBnodesFine]; - fnwF = &DF[DIR_MP0 * numberOfLBnodesFine]; - fteF = &DF[DIR_P0P * numberOfLBnodesFine]; - fbwF = &DF[DIR_M0M * numberOfLBnodesFine]; - fbeF = &DF[DIR_P0M * numberOfLBnodesFine]; - ftwF = &DF[DIR_M0P * numberOfLBnodesFine]; - ftnF = &DF[DIR_0PP * numberOfLBnodesFine]; - fbsF = &DF[DIR_0MM * numberOfLBnodesFine]; - fbnF = &DF[DIR_0PM * numberOfLBnodesFine]; - ftsF = &DF[DIR_0MP * numberOfLBnodesFine]; - fzeroF = &DF[DIR_000 * numberOfLBnodesFine]; - ftneF = &DF[DIR_PPP * numberOfLBnodesFine]; - ftswF = &DF[DIR_MMP * numberOfLBnodesFine]; - ftseF = &DF[DIR_PMP * numberOfLBnodesFine]; - ftnwF = &DF[DIR_MPP * numberOfLBnodesFine]; - fbneF = &DF[DIR_PPM * numberOfLBnodesFine]; - fbswF = &DF[DIR_MMM * numberOfLBnodesFine]; - fbseF = &DF[DIR_PMM * numberOfLBnodesFine]; - fbnwF = &DF[DIR_MPM * numberOfLBnodesFine]; + feF = &DF[dP00 * numberOfLBnodesFine]; + fwF = &DF[dM00 * numberOfLBnodesFine]; + fnF = &DF[d0P0 * numberOfLBnodesFine]; + fsF = &DF[d0M0 * numberOfLBnodesFine]; + ftF = &DF[d00P * numberOfLBnodesFine]; + fbF = &DF[d00M * numberOfLBnodesFine]; + fneF = &DF[dPP0 * numberOfLBnodesFine]; + fswF = &DF[dMM0 * numberOfLBnodesFine]; + fseF = &DF[dPM0 * numberOfLBnodesFine]; + fnwF = &DF[dMP0 * numberOfLBnodesFine]; + fteF = &DF[dP0P * numberOfLBnodesFine]; + fbwF = &DF[dM0M * numberOfLBnodesFine]; + fbeF = &DF[dP0M * numberOfLBnodesFine]; + ftwF = &DF[dM0P * numberOfLBnodesFine]; + ftnF = &DF[d0PP * numberOfLBnodesFine]; + fbsF = &DF[d0MM * numberOfLBnodesFine]; + fbnF = &DF[d0PM * numberOfLBnodesFine]; + ftsF = &DF[d0MP * numberOfLBnodesFine]; + fzeroF = &DF[d000 * numberOfLBnodesFine]; + ftneF = &DF[dPPP * numberOfLBnodesFine]; + ftswF = &DF[dMMP * numberOfLBnodesFine]; + ftseF = &DF[dPMP * numberOfLBnodesFine]; + ftnwF = &DF[dMPP * numberOfLBnodesFine]; + fbneF = &DF[dPPM * numberOfLBnodesFine]; + fbswF = &DF[dMMM * numberOfLBnodesFine]; + fbseF = &DF[dPMM * numberOfLBnodesFine]; + fbnwF = &DF[dMPM * numberOfLBnodesFine]; real *feC, *fwC, *fnC, *fsC, *ftC, *fbC, *fneC, *fswC, *fseC, *fnwC, *fteC, *fbwC, *fbeC, *ftwC, *ftnC, *fbsC, *fbnC, *ftsC, *fzeroC, *ftneC, *ftswC, *ftseC, *ftnwC, *fbneC, *fbswC, *fbseC, *fbnwC; if (isEvenTimestep==true) { - feC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fwC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00P * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fneC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fswC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fteC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + feC = &DC[dP00 * numberOfLBnodesCoarse]; + fwC = &DC[dM00 * numberOfLBnodesCoarse]; + fnC = &DC[d0P0 * numberOfLBnodesCoarse]; + fsC = &DC[d0M0 * numberOfLBnodesCoarse]; + ftC = &DC[d00P * numberOfLBnodesCoarse]; + fbC = &DC[d00M * numberOfLBnodesCoarse]; + fneC = &DC[dPP0 * numberOfLBnodesCoarse]; + fswC = &DC[dMM0 * numberOfLBnodesCoarse]; + fseC = &DC[dPM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dMP0 * numberOfLBnodesCoarse]; + fteC = &DC[dP0P * numberOfLBnodesCoarse]; + fbwC = &DC[dM0M * numberOfLBnodesCoarse]; + fbeC = &DC[dP0M * numberOfLBnodesCoarse]; + ftwC = &DC[dM0P * numberOfLBnodesCoarse]; + ftnC = &DC[d0PP * numberOfLBnodesCoarse]; + fbsC = &DC[d0MM * numberOfLBnodesCoarse]; + fbnC = &DC[d0PM * numberOfLBnodesCoarse]; + ftsC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + ftneC = &DC[dPPP * numberOfLBnodesCoarse]; + ftswC = &DC[dMMP * numberOfLBnodesCoarse]; + ftseC = &DC[dPMP * numberOfLBnodesCoarse]; + ftnwC = &DC[dMPP * numberOfLBnodesCoarse]; + fbneC = &DC[dPPM * numberOfLBnodesCoarse]; + fbswC = &DC[dMMM * numberOfLBnodesCoarse]; + fbseC = &DC[dPMM * numberOfLBnodesCoarse]; + fbnwC = &DC[dMPM * numberOfLBnodesCoarse]; } else { - fwC = &DC[DIR_P00 * numberOfLBnodesCoarse]; - feC = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fsC = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - fnC = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - fbC = &DC[DIR_00P * numberOfLBnodesCoarse]; - ftC = &DC[DIR_00M * numberOfLBnodesCoarse]; - fswC = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fneC = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fnwC = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fseC = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fbwC = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fteC = &DC[DIR_M0M * numberOfLBnodesCoarse]; - ftwC = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fbeC = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fbsC = &DC[DIR_0PP * numberOfLBnodesCoarse]; - ftnC = &DC[DIR_0MM * numberOfLBnodesCoarse]; - ftsC = &DC[DIR_0PM * numberOfLBnodesCoarse]; - fbnC = &DC[DIR_0MP * numberOfLBnodesCoarse]; - fzeroC = &DC[DIR_000 * numberOfLBnodesCoarse]; - fbswC = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fbneC = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fbnwC = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fbseC = &DC[DIR_MPP * numberOfLBnodesCoarse]; - ftswC = &DC[DIR_PPM * numberOfLBnodesCoarse]; - ftneC = &DC[DIR_MMM * numberOfLBnodesCoarse]; - ftnwC = &DC[DIR_PMM * numberOfLBnodesCoarse]; - ftseC = &DC[DIR_MPM * numberOfLBnodesCoarse]; + fwC = &DC[dP00 * numberOfLBnodesCoarse]; + feC = &DC[dM00 * numberOfLBnodesCoarse]; + fsC = &DC[d0P0 * numberOfLBnodesCoarse]; + fnC = &DC[d0M0 * numberOfLBnodesCoarse]; + fbC = &DC[d00P * numberOfLBnodesCoarse]; + ftC = &DC[d00M * numberOfLBnodesCoarse]; + fswC = &DC[dPP0 * numberOfLBnodesCoarse]; + fneC = &DC[dMM0 * numberOfLBnodesCoarse]; + fnwC = &DC[dPM0 * numberOfLBnodesCoarse]; + fseC = &DC[dMP0 * numberOfLBnodesCoarse]; + fbwC = &DC[dP0P * numberOfLBnodesCoarse]; + fteC = &DC[dM0M * numberOfLBnodesCoarse]; + ftwC = &DC[dP0M * numberOfLBnodesCoarse]; + fbeC = &DC[dM0P * numberOfLBnodesCoarse]; + fbsC = &DC[d0PP * numberOfLBnodesCoarse]; + ftnC = &DC[d0MM * numberOfLBnodesCoarse]; + ftsC = &DC[d0PM * numberOfLBnodesCoarse]; + fbnC = &DC[d0MP * numberOfLBnodesCoarse]; + fzeroC = &DC[d000 * numberOfLBnodesCoarse]; + fbswC = &DC[dPPP * numberOfLBnodesCoarse]; + fbneC = &DC[dMMP * numberOfLBnodesCoarse]; + fbnwC = &DC[dPMP * numberOfLBnodesCoarse]; + fbseC = &DC[dMPP * numberOfLBnodesCoarse]; + ftswC = &DC[dPPM * numberOfLBnodesCoarse]; + ftneC = &DC[dMMM * numberOfLBnodesCoarse]; + ftnwC = &DC[dPMM * numberOfLBnodesCoarse]; + ftseC = &DC[dMPM * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// const unsigned ix = threadIdx.x; // Globaler x-Index diff --git a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleFC_F3_27.cu b/src/gpu/core/GPU/GridScaling/ScaleFC_F3_27.cu similarity index 92% rename from src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleFC_F3_27.cu rename to src/gpu/core/GPU/GridScaling/ScaleFC_F3_27.cu index 7de51b3b0aec87e3e8773c08435c3ada445e9a41..296c80c5c1a876a4453e6c53228af066b3ec6e22 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/ScaleFC_F3_27.cu +++ b/src/gpu/core/GPU/GridScaling/ScaleFC_F3_27.cu @@ -44,33 +44,33 @@ __global__ void scaleFC_comp_D3Q27F3_2018(real* DC, *f000source, *fMMMsource, *fMMPsource, *fMPPsource, *fMPMsource, *fPPMsource, *fPPPsource, *fPMPsource, *fPMMsource; - fP00source = &DF[DIR_P00 * numberOfLBnodesFine]; - fM00source = &DF[DIR_M00 * numberOfLBnodesFine]; - f0P0source = &DF[DIR_0P0 * numberOfLBnodesFine]; - f0M0source = &DF[DIR_0M0 * numberOfLBnodesFine]; - f00Psource = &DF[DIR_00P * numberOfLBnodesFine]; - f00Msource = &DF[DIR_00M * numberOfLBnodesFine]; - fPP0source = &DF[DIR_PP0 * numberOfLBnodesFine]; - fMM0source = &DF[DIR_MM0 * numberOfLBnodesFine]; - fPM0source = &DF[DIR_PM0 * numberOfLBnodesFine]; - fMP0source = &DF[DIR_MP0 * numberOfLBnodesFine]; - fP0Psource = &DF[DIR_P0P * numberOfLBnodesFine]; - fM0Msource = &DF[DIR_M0M * numberOfLBnodesFine]; - fP0Msource = &DF[DIR_P0M * numberOfLBnodesFine]; - fM0Psource = &DF[DIR_M0P * numberOfLBnodesFine]; - f0PPsource = &DF[DIR_0PP * numberOfLBnodesFine]; - f0MMsource = &DF[DIR_0MM * numberOfLBnodesFine]; - f0PMsource = &DF[DIR_0PM * numberOfLBnodesFine]; - f0MPsource = &DF[DIR_0MP * numberOfLBnodesFine]; - f000source = &DF[DIR_000 * numberOfLBnodesFine]; - fMMMsource = &DF[DIR_MMM * numberOfLBnodesFine]; - fMMPsource = &DF[DIR_MMP * numberOfLBnodesFine]; - fMPPsource = &DF[DIR_MPP * numberOfLBnodesFine]; - fMPMsource = &DF[DIR_MPM * numberOfLBnodesFine]; - fPPMsource = &DF[DIR_PPM * numberOfLBnodesFine]; - fPPPsource = &DF[DIR_PPP * numberOfLBnodesFine]; - fPMPsource = &DF[DIR_PMP * numberOfLBnodesFine]; - fPMMsource = &DF[DIR_PMM * numberOfLBnodesFine]; + fP00source = &DF[dP00 * numberOfLBnodesFine]; + fM00source = &DF[dM00 * numberOfLBnodesFine]; + f0P0source = &DF[d0P0 * numberOfLBnodesFine]; + f0M0source = &DF[d0M0 * numberOfLBnodesFine]; + f00Psource = &DF[d00P * numberOfLBnodesFine]; + f00Msource = &DF[d00M * numberOfLBnodesFine]; + fPP0source = &DF[dPP0 * numberOfLBnodesFine]; + fMM0source = &DF[dMM0 * numberOfLBnodesFine]; + fPM0source = &DF[dPM0 * numberOfLBnodesFine]; + fMP0source = &DF[dMP0 * numberOfLBnodesFine]; + fP0Psource = &DF[dP0P * numberOfLBnodesFine]; + fM0Msource = &DF[dM0M * numberOfLBnodesFine]; + fP0Msource = &DF[dP0M * numberOfLBnodesFine]; + fM0Psource = &DF[dM0P * numberOfLBnodesFine]; + f0PPsource = &DF[d0PP * numberOfLBnodesFine]; + f0MMsource = &DF[d0MM * numberOfLBnodesFine]; + f0PMsource = &DF[d0PM * numberOfLBnodesFine]; + f0MPsource = &DF[d0MP * numberOfLBnodesFine]; + f000source = &DF[d000 * numberOfLBnodesFine]; + fMMMsource = &DF[dMMM * numberOfLBnodesFine]; + fMMPsource = &DF[dMMP * numberOfLBnodesFine]; + fMPPsource = &DF[dMPP * numberOfLBnodesFine]; + fMPMsource = &DF[dMPM * numberOfLBnodesFine]; + fPPMsource = &DF[dPPM * numberOfLBnodesFine]; + fPPPsource = &DF[dPPP * numberOfLBnodesFine]; + fPMPsource = &DF[dPMP * numberOfLBnodesFine]; + fPMMsource = &DF[dPMM * numberOfLBnodesFine]; real *fP00dest, *fM00dest, *f0P0dest, *f0M0dest, *f00Pdest, *f00Mdest, *fPP0dest, *fMM0dest, *fPM0dest, @@ -79,83 +79,83 @@ __global__ void scaleFC_comp_D3Q27F3_2018(real* DC, if (isEvenTimestep==true) { - fP00dest = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fM00dest = &DC[DIR_M00 * numberOfLBnodesCoarse]; - f0P0dest = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - f0M0dest = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - f00Pdest = &DC[DIR_00P * numberOfLBnodesCoarse]; - f00Mdest = &DC[DIR_00M * numberOfLBnodesCoarse]; - fPP0dest = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fMM0dest = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fPM0dest = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fMP0dest = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fP0Pdest = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fM0Mdest = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fP0Mdest = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fM0Pdest = &DC[DIR_M0P * numberOfLBnodesCoarse]; - f0PPdest = &DC[DIR_0PP * numberOfLBnodesCoarse]; - f0MMdest = &DC[DIR_0MM * numberOfLBnodesCoarse]; - f0PMdest = &DC[DIR_0PM * numberOfLBnodesCoarse]; - f0MPdest = &DC[DIR_0MP * numberOfLBnodesCoarse]; - f000dest = &DC[DIR_000 * numberOfLBnodesCoarse]; - fMMMdest = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fMMPdest = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fMPPdest = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fMPMdest = &DC[DIR_MPM * numberOfLBnodesCoarse]; - fPPMdest = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fPPPdest = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fPMPdest = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fPMMdest = &DC[DIR_PMM * numberOfLBnodesCoarse]; + fP00dest = &DC[dP00 * numberOfLBnodesCoarse]; + fM00dest = &DC[dM00 * numberOfLBnodesCoarse]; + f0P0dest = &DC[d0P0 * numberOfLBnodesCoarse]; + f0M0dest = &DC[d0M0 * numberOfLBnodesCoarse]; + f00Pdest = &DC[d00P * numberOfLBnodesCoarse]; + f00Mdest = &DC[d00M * numberOfLBnodesCoarse]; + fPP0dest = &DC[dPP0 * numberOfLBnodesCoarse]; + fMM0dest = &DC[dMM0 * numberOfLBnodesCoarse]; + fPM0dest = &DC[dPM0 * numberOfLBnodesCoarse]; + fMP0dest = &DC[dMP0 * numberOfLBnodesCoarse]; + fP0Pdest = &DC[dP0P * numberOfLBnodesCoarse]; + fM0Mdest = &DC[dM0M * numberOfLBnodesCoarse]; + fP0Mdest = &DC[dP0M * numberOfLBnodesCoarse]; + fM0Pdest = &DC[dM0P * numberOfLBnodesCoarse]; + f0PPdest = &DC[d0PP * numberOfLBnodesCoarse]; + f0MMdest = &DC[d0MM * numberOfLBnodesCoarse]; + f0PMdest = &DC[d0PM * numberOfLBnodesCoarse]; + f0MPdest = &DC[d0MP * numberOfLBnodesCoarse]; + f000dest = &DC[d000 * numberOfLBnodesCoarse]; + fMMMdest = &DC[dMMM * numberOfLBnodesCoarse]; + fMMPdest = &DC[dMMP * numberOfLBnodesCoarse]; + fMPPdest = &DC[dMPP * numberOfLBnodesCoarse]; + fMPMdest = &DC[dMPM * numberOfLBnodesCoarse]; + fPPMdest = &DC[dPPM * numberOfLBnodesCoarse]; + fPPPdest = &DC[dPPP * numberOfLBnodesCoarse]; + fPMPdest = &DC[dPMP * numberOfLBnodesCoarse]; + fPMMdest = &DC[dPMM * numberOfLBnodesCoarse]; } else { - fP00dest = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fM00dest = &DC[DIR_P00 * numberOfLBnodesCoarse]; - f0P0dest = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - f0M0dest = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - f00Pdest = &DC[DIR_00M * numberOfLBnodesCoarse]; - f00Mdest = &DC[DIR_00P * numberOfLBnodesCoarse]; - fPP0dest = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fMM0dest = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fPM0dest = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fMP0dest = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fP0Pdest = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fM0Mdest = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fP0Mdest = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fM0Pdest = &DC[DIR_P0M * numberOfLBnodesCoarse]; - f0PPdest = &DC[DIR_0MM * numberOfLBnodesCoarse]; - f0MMdest = &DC[DIR_0PP * numberOfLBnodesCoarse]; - f0PMdest = &DC[DIR_0MP * numberOfLBnodesCoarse]; - f0MPdest = &DC[DIR_0PM * numberOfLBnodesCoarse]; - f000dest = &DC[DIR_000 * numberOfLBnodesCoarse]; - fMMMdest = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fMMPdest = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fMPPdest = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fMPMdest = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fPPMdest = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fPPPdest = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fPMPdest = &DC[DIR_MPM * numberOfLBnodesCoarse]; - fPMMdest = &DC[DIR_MPP * numberOfLBnodesCoarse]; + fP00dest = &DC[dM00 * numberOfLBnodesCoarse]; + fM00dest = &DC[dP00 * numberOfLBnodesCoarse]; + f0P0dest = &DC[d0M0 * numberOfLBnodesCoarse]; + f0M0dest = &DC[d0P0 * numberOfLBnodesCoarse]; + f00Pdest = &DC[d00M * numberOfLBnodesCoarse]; + f00Mdest = &DC[d00P * numberOfLBnodesCoarse]; + fPP0dest = &DC[dMM0 * numberOfLBnodesCoarse]; + fMM0dest = &DC[dPP0 * numberOfLBnodesCoarse]; + fPM0dest = &DC[dMP0 * numberOfLBnodesCoarse]; + fMP0dest = &DC[dPM0 * numberOfLBnodesCoarse]; + fP0Pdest = &DC[dM0M * numberOfLBnodesCoarse]; + fM0Mdest = &DC[dP0P * numberOfLBnodesCoarse]; + fP0Mdest = &DC[dM0P * numberOfLBnodesCoarse]; + fM0Pdest = &DC[dP0M * numberOfLBnodesCoarse]; + f0PPdest = &DC[d0MM * numberOfLBnodesCoarse]; + f0MMdest = &DC[d0PP * numberOfLBnodesCoarse]; + f0PMdest = &DC[d0MP * numberOfLBnodesCoarse]; + f0MPdest = &DC[d0PM * numberOfLBnodesCoarse]; + f000dest = &DC[d000 * numberOfLBnodesCoarse]; + fMMMdest = &DC[dPPP * numberOfLBnodesCoarse]; + fMMPdest = &DC[dPPM * numberOfLBnodesCoarse]; + fMPPdest = &DC[dPMM * numberOfLBnodesCoarse]; + fMPMdest = &DC[dPMP * numberOfLBnodesCoarse]; + fPPMdest = &DC[dMMP * numberOfLBnodesCoarse]; + fPPPdest = &DC[dMMM * numberOfLBnodesCoarse]; + fPMPdest = &DC[dMPM * numberOfLBnodesCoarse]; + fPMMdest = &DC[dMPP * numberOfLBnodesCoarse]; } Distributions6 G; if (isEvenTimestep == true) { - G.g[DIR_P00] = &G6[DIR_P00 * numberOfLBnodesCoarse]; - G.g[DIR_M00] = &G6[DIR_M00 * numberOfLBnodesCoarse]; - G.g[DIR_0P0] = &G6[DIR_0P0 * numberOfLBnodesCoarse]; - G.g[DIR_0M0] = &G6[DIR_0M0 * numberOfLBnodesCoarse]; - G.g[DIR_00P] = &G6[DIR_00P * numberOfLBnodesCoarse]; - G.g[DIR_00M] = &G6[DIR_00M * numberOfLBnodesCoarse]; + G.g[dP00] = &G6[dP00 * numberOfLBnodesCoarse]; + G.g[dM00] = &G6[dM00 * numberOfLBnodesCoarse]; + G.g[d0P0] = &G6[d0P0 * numberOfLBnodesCoarse]; + G.g[d0M0] = &G6[d0M0 * numberOfLBnodesCoarse]; + G.g[d00P] = &G6[d00P * numberOfLBnodesCoarse]; + G.g[d00M] = &G6[d00M * numberOfLBnodesCoarse]; } else { - G.g[DIR_M00] = &G6[DIR_P00 * numberOfLBnodesCoarse]; - G.g[DIR_P00] = &G6[DIR_M00 * numberOfLBnodesCoarse]; - G.g[DIR_0M0] = &G6[DIR_0P0 * numberOfLBnodesCoarse]; - G.g[DIR_0P0] = &G6[DIR_0M0 * numberOfLBnodesCoarse]; - G.g[DIR_00M] = &G6[DIR_00P * numberOfLBnodesCoarse]; - G.g[DIR_00P] = &G6[DIR_00M * numberOfLBnodesCoarse]; + G.g[dM00] = &G6[dP00 * numberOfLBnodesCoarse]; + G.g[dP00] = &G6[dM00 * numberOfLBnodesCoarse]; + G.g[d0M0] = &G6[d0P0 * numberOfLBnodesCoarse]; + G.g[d0P0] = &G6[d0M0 * numberOfLBnodesCoarse]; + G.g[d00M] = &G6[d00P * numberOfLBnodesCoarse]; + G.g[d00P] = &G6[d00M * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// @@ -1168,12 +1168,12 @@ __global__ void scaleFC_comp_D3Q27F3_2018(real* DC, //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// - (G.g[DIR_P00])[k000] = mgcbb; - (G.g[DIR_M00])[kM00] = mgabb; - (G.g[DIR_0P0])[k000] = mgbcb; - (G.g[DIR_0M0])[k0M0] = mgbab; - (G.g[DIR_00P])[k000] = mgbbc; - (G.g[DIR_00M])[k00M] = mgbba; + (G.g[dP00])[k000] = mgcbb; + (G.g[dM00])[kM00] = mgabb; + (G.g[d0P0])[k000] = mgbcb; + (G.g[d0M0])[k0M0] = mgbab; + (G.g[d00P])[k000] = mgbbc; + (G.g[d00M])[k00M] = mgbba; //////////////////////////////////////////////////////////////////////////////////// fP00dest[k000] = mfcbb; fM00dest[kM00] = mfabb; @@ -1291,33 +1291,33 @@ __global__ void scaleFC_comp_D3Q27F3( real* DC, *f000source, *fMMMsource, *fMMPsource, *fMPPsource, *fMPMsource, *fPPMsource, *fPPPsource, *fPMPsource, *fPMMsource; - fP00source = &DF[DIR_P00 * numberOfLBnodesFine]; - fM00source = &DF[DIR_M00 * numberOfLBnodesFine]; - f0P0source = &DF[DIR_0P0 * numberOfLBnodesFine]; - f0M0source = &DF[DIR_0M0 * numberOfLBnodesFine]; - f00Psource = &DF[DIR_00P * numberOfLBnodesFine]; - f00Msource = &DF[DIR_00M * numberOfLBnodesFine]; - fPP0source = &DF[DIR_PP0 * numberOfLBnodesFine]; - fMM0source = &DF[DIR_MM0 * numberOfLBnodesFine]; - fPM0source = &DF[DIR_PM0 * numberOfLBnodesFine]; - fMP0source = &DF[DIR_MP0 * numberOfLBnodesFine]; - fP0Psource = &DF[DIR_P0P * numberOfLBnodesFine]; - fM0Msource = &DF[DIR_M0M * numberOfLBnodesFine]; - fP0Msource = &DF[DIR_P0M * numberOfLBnodesFine]; - fM0Psource = &DF[DIR_M0P * numberOfLBnodesFine]; - f0PPsource = &DF[DIR_0PP * numberOfLBnodesFine]; - f0MMsource = &DF[DIR_0MM * numberOfLBnodesFine]; - f0PMsource = &DF[DIR_0PM * numberOfLBnodesFine]; - f0MPsource = &DF[DIR_0MP * numberOfLBnodesFine]; - f000source = &DF[DIR_000 * numberOfLBnodesFine]; - fMMMsource = &DF[DIR_MMM * numberOfLBnodesFine]; - fMMPsource = &DF[DIR_MMP * numberOfLBnodesFine]; - fMPPsource = &DF[DIR_MPP * numberOfLBnodesFine]; - fMPMsource = &DF[DIR_MPM * numberOfLBnodesFine]; - fPPMsource = &DF[DIR_PPM * numberOfLBnodesFine]; - fPPPsource = &DF[DIR_PPP * numberOfLBnodesFine]; - fPMPsource = &DF[DIR_PMP * numberOfLBnodesFine]; - fPMMsource = &DF[DIR_PMM * numberOfLBnodesFine]; + fP00source = &DF[dP00 * numberOfLBnodesFine]; + fM00source = &DF[dM00 * numberOfLBnodesFine]; + f0P0source = &DF[d0P0 * numberOfLBnodesFine]; + f0M0source = &DF[d0M0 * numberOfLBnodesFine]; + f00Psource = &DF[d00P * numberOfLBnodesFine]; + f00Msource = &DF[d00M * numberOfLBnodesFine]; + fPP0source = &DF[dPP0 * numberOfLBnodesFine]; + fMM0source = &DF[dMM0 * numberOfLBnodesFine]; + fPM0source = &DF[dPM0 * numberOfLBnodesFine]; + fMP0source = &DF[dMP0 * numberOfLBnodesFine]; + fP0Psource = &DF[dP0P * numberOfLBnodesFine]; + fM0Msource = &DF[dM0M * numberOfLBnodesFine]; + fP0Msource = &DF[dP0M * numberOfLBnodesFine]; + fM0Psource = &DF[dM0P * numberOfLBnodesFine]; + f0PPsource = &DF[d0PP * numberOfLBnodesFine]; + f0MMsource = &DF[d0MM * numberOfLBnodesFine]; + f0PMsource = &DF[d0PM * numberOfLBnodesFine]; + f0MPsource = &DF[d0MP * numberOfLBnodesFine]; + f000source = &DF[d000 * numberOfLBnodesFine]; + fMMMsource = &DF[dMMM * numberOfLBnodesFine]; + fMMPsource = &DF[dMMP * numberOfLBnodesFine]; + fMPPsource = &DF[dMPP * numberOfLBnodesFine]; + fMPMsource = &DF[dMPM * numberOfLBnodesFine]; + fPPMsource = &DF[dPPM * numberOfLBnodesFine]; + fPPPsource = &DF[dPPP * numberOfLBnodesFine]; + fPMPsource = &DF[dPMP * numberOfLBnodesFine]; + fPMMsource = &DF[dPMM * numberOfLBnodesFine]; real *fP00dest, *fM00dest, *f0P0dest, *f0M0dest, *f00Pdest, *f00Mdest, *fPP0dest, *fMM0dest, *fPM0dest, @@ -1326,83 +1326,83 @@ __global__ void scaleFC_comp_D3Q27F3( real* DC, if (isEvenTimestep==true) { - fP00dest = &DC[DIR_P00 * numberOfLBnodesCoarse]; - fM00dest = &DC[DIR_M00 * numberOfLBnodesCoarse]; - f0P0dest = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - f0M0dest = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - f00Pdest = &DC[DIR_00P * numberOfLBnodesCoarse]; - f00Mdest = &DC[DIR_00M * numberOfLBnodesCoarse]; - fPP0dest = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fMM0dest = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fPM0dest = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fMP0dest = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fP0Pdest = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fM0Mdest = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fP0Mdest = &DC[DIR_P0M * numberOfLBnodesCoarse]; - fM0Pdest = &DC[DIR_M0P * numberOfLBnodesCoarse]; - f0PPdest = &DC[DIR_0PP * numberOfLBnodesCoarse]; - f0MMdest = &DC[DIR_0MM * numberOfLBnodesCoarse]; - f0PMdest = &DC[DIR_0PM * numberOfLBnodesCoarse]; - f0MPdest = &DC[DIR_0MP * numberOfLBnodesCoarse]; - f000dest = &DC[DIR_000 * numberOfLBnodesCoarse]; - fMMMdest = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fMMPdest = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fMPPdest = &DC[DIR_MPP * numberOfLBnodesCoarse]; - fMPMdest = &DC[DIR_MPM * numberOfLBnodesCoarse]; - fPPMdest = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fPPPdest = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fPMPdest = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fPMMdest = &DC[DIR_PMM * numberOfLBnodesCoarse]; + fP00dest = &DC[dP00 * numberOfLBnodesCoarse]; + fM00dest = &DC[dM00 * numberOfLBnodesCoarse]; + f0P0dest = &DC[d0P0 * numberOfLBnodesCoarse]; + f0M0dest = &DC[d0M0 * numberOfLBnodesCoarse]; + f00Pdest = &DC[d00P * numberOfLBnodesCoarse]; + f00Mdest = &DC[d00M * numberOfLBnodesCoarse]; + fPP0dest = &DC[dPP0 * numberOfLBnodesCoarse]; + fMM0dest = &DC[dMM0 * numberOfLBnodesCoarse]; + fPM0dest = &DC[dPM0 * numberOfLBnodesCoarse]; + fMP0dest = &DC[dMP0 * numberOfLBnodesCoarse]; + fP0Pdest = &DC[dP0P * numberOfLBnodesCoarse]; + fM0Mdest = &DC[dM0M * numberOfLBnodesCoarse]; + fP0Mdest = &DC[dP0M * numberOfLBnodesCoarse]; + fM0Pdest = &DC[dM0P * numberOfLBnodesCoarse]; + f0PPdest = &DC[d0PP * numberOfLBnodesCoarse]; + f0MMdest = &DC[d0MM * numberOfLBnodesCoarse]; + f0PMdest = &DC[d0PM * numberOfLBnodesCoarse]; + f0MPdest = &DC[d0MP * numberOfLBnodesCoarse]; + f000dest = &DC[d000 * numberOfLBnodesCoarse]; + fMMMdest = &DC[dMMM * numberOfLBnodesCoarse]; + fMMPdest = &DC[dMMP * numberOfLBnodesCoarse]; + fMPPdest = &DC[dMPP * numberOfLBnodesCoarse]; + fMPMdest = &DC[dMPM * numberOfLBnodesCoarse]; + fPPMdest = &DC[dPPM * numberOfLBnodesCoarse]; + fPPPdest = &DC[dPPP * numberOfLBnodesCoarse]; + fPMPdest = &DC[dPMP * numberOfLBnodesCoarse]; + fPMMdest = &DC[dPMM * numberOfLBnodesCoarse]; } else { - fP00dest = &DC[DIR_M00 * numberOfLBnodesCoarse]; - fM00dest = &DC[DIR_P00 * numberOfLBnodesCoarse]; - f0P0dest = &DC[DIR_0M0 * numberOfLBnodesCoarse]; - f0M0dest = &DC[DIR_0P0 * numberOfLBnodesCoarse]; - f00Pdest = &DC[DIR_00M * numberOfLBnodesCoarse]; - f00Mdest = &DC[DIR_00P * numberOfLBnodesCoarse]; - fPP0dest = &DC[DIR_MM0 * numberOfLBnodesCoarse]; - fMM0dest = &DC[DIR_PP0 * numberOfLBnodesCoarse]; - fPM0dest = &DC[DIR_MP0 * numberOfLBnodesCoarse]; - fMP0dest = &DC[DIR_PM0 * numberOfLBnodesCoarse]; - fP0Pdest = &DC[DIR_M0M * numberOfLBnodesCoarse]; - fM0Mdest = &DC[DIR_P0P * numberOfLBnodesCoarse]; - fP0Mdest = &DC[DIR_M0P * numberOfLBnodesCoarse]; - fM0Pdest = &DC[DIR_P0M * numberOfLBnodesCoarse]; - f0PPdest = &DC[DIR_0MM * numberOfLBnodesCoarse]; - f0MMdest = &DC[DIR_0PP * numberOfLBnodesCoarse]; - f0PMdest = &DC[DIR_0MP * numberOfLBnodesCoarse]; - f0MPdest = &DC[DIR_0PM * numberOfLBnodesCoarse]; - f000dest = &DC[DIR_000 * numberOfLBnodesCoarse]; - fMMMdest = &DC[DIR_PPP * numberOfLBnodesCoarse]; - fMMPdest = &DC[DIR_PPM * numberOfLBnodesCoarse]; - fMPPdest = &DC[DIR_PMM * numberOfLBnodesCoarse]; - fMPMdest = &DC[DIR_PMP * numberOfLBnodesCoarse]; - fPPMdest = &DC[DIR_MMP * numberOfLBnodesCoarse]; - fPPPdest = &DC[DIR_MMM * numberOfLBnodesCoarse]; - fPMPdest = &DC[DIR_MPM * numberOfLBnodesCoarse]; - fPMMdest = &DC[DIR_MPP * numberOfLBnodesCoarse]; + fP00dest = &DC[dM00 * numberOfLBnodesCoarse]; + fM00dest = &DC[dP00 * numberOfLBnodesCoarse]; + f0P0dest = &DC[d0M0 * numberOfLBnodesCoarse]; + f0M0dest = &DC[d0P0 * numberOfLBnodesCoarse]; + f00Pdest = &DC[d00M * numberOfLBnodesCoarse]; + f00Mdest = &DC[d00P * numberOfLBnodesCoarse]; + fPP0dest = &DC[dMM0 * numberOfLBnodesCoarse]; + fMM0dest = &DC[dPP0 * numberOfLBnodesCoarse]; + fPM0dest = &DC[dMP0 * numberOfLBnodesCoarse]; + fMP0dest = &DC[dPM0 * numberOfLBnodesCoarse]; + fP0Pdest = &DC[dM0M * numberOfLBnodesCoarse]; + fM0Mdest = &DC[dP0P * numberOfLBnodesCoarse]; + fP0Mdest = &DC[dM0P * numberOfLBnodesCoarse]; + fM0Pdest = &DC[dP0M * numberOfLBnodesCoarse]; + f0PPdest = &DC[d0MM * numberOfLBnodesCoarse]; + f0MMdest = &DC[d0PP * numberOfLBnodesCoarse]; + f0PMdest = &DC[d0MP * numberOfLBnodesCoarse]; + f0MPdest = &DC[d0PM * numberOfLBnodesCoarse]; + f000dest = &DC[d000 * numberOfLBnodesCoarse]; + fMMMdest = &DC[dPPP * numberOfLBnodesCoarse]; + fMMPdest = &DC[dPPM * numberOfLBnodesCoarse]; + fMPPdest = &DC[dPMM * numberOfLBnodesCoarse]; + fMPMdest = &DC[dPMP * numberOfLBnodesCoarse]; + fPPMdest = &DC[dMMP * numberOfLBnodesCoarse]; + fPPPdest = &DC[dMMM * numberOfLBnodesCoarse]; + fPMPdest = &DC[dMPM * numberOfLBnodesCoarse]; + fPMMdest = &DC[dMPP * numberOfLBnodesCoarse]; } Distributions6 G; if (isEvenTimestep == true) { - G.g[DIR_P00] = &G6[DIR_P00 * numberOfLBnodesCoarse]; - G.g[DIR_M00] = &G6[DIR_M00 * numberOfLBnodesCoarse]; - G.g[DIR_0P0] = &G6[DIR_0P0 * numberOfLBnodesCoarse]; - G.g[DIR_0M0] = &G6[DIR_0M0 * numberOfLBnodesCoarse]; - G.g[DIR_00P] = &G6[DIR_00P * numberOfLBnodesCoarse]; - G.g[DIR_00M] = &G6[DIR_00M * numberOfLBnodesCoarse]; + G.g[dP00] = &G6[dP00 * numberOfLBnodesCoarse]; + G.g[dM00] = &G6[dM00 * numberOfLBnodesCoarse]; + G.g[d0P0] = &G6[d0P0 * numberOfLBnodesCoarse]; + G.g[d0M0] = &G6[d0M0 * numberOfLBnodesCoarse]; + G.g[d00P] = &G6[d00P * numberOfLBnodesCoarse]; + G.g[d00M] = &G6[d00M * numberOfLBnodesCoarse]; } else { - G.g[DIR_M00] = &G6[DIR_P00 * numberOfLBnodesCoarse]; - G.g[DIR_P00] = &G6[DIR_M00 * numberOfLBnodesCoarse]; - G.g[DIR_0M0] = &G6[DIR_0P0 * numberOfLBnodesCoarse]; - G.g[DIR_0P0] = &G6[DIR_0M0 * numberOfLBnodesCoarse]; - G.g[DIR_00M] = &G6[DIR_00P * numberOfLBnodesCoarse]; - G.g[DIR_00P] = &G6[DIR_00M * numberOfLBnodesCoarse]; + G.g[dM00] = &G6[dP00 * numberOfLBnodesCoarse]; + G.g[dP00] = &G6[dM00 * numberOfLBnodesCoarse]; + G.g[d0M0] = &G6[d0P0 * numberOfLBnodesCoarse]; + G.g[d0P0] = &G6[d0M0 * numberOfLBnodesCoarse]; + G.g[d00M] = &G6[d00P * numberOfLBnodesCoarse]; + G.g[d00P] = &G6[d00M * numberOfLBnodesCoarse]; } //////////////////////////////////////////////////////////////////////////////// @@ -2409,12 +2409,12 @@ __global__ void scaleFC_comp_D3Q27F3( real* DC, //////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////// - (G.g[DIR_P00])[k000] = mgcbb; - (G.g[DIR_M00])[kM00] = mgabb; - (G.g[DIR_0P0])[k000] = mgbcb; - (G.g[DIR_0M0])[k0M0] = mgbab; - (G.g[DIR_00P])[k000] = mgbbc; - (G.g[DIR_00M])[k00M] = mgbba; + (G.g[dP00])[k000] = mgcbb; + (G.g[dM00])[kM00] = mgabb; + (G.g[d0P0])[k000] = mgbcb; + (G.g[d0M0])[k0M0] = mgbab; + (G.g[d00P])[k000] = mgbbc; + (G.g[d00M])[k00M] = mgbba; //////////////////////////////////////////////////////////////////////////////////// fP00dest[k000] = mfcbb; fM00dest[kM00] = mfabb; diff --git a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/scaleCF_compressible.cu b/src/gpu/core/GPU/GridScaling/scaleCF_compressible.cu similarity index 85% rename from src/gpu/VirtualFluids_GPU/GPU/GridScaling/scaleCF_compressible.cu rename to src/gpu/core/GPU/GridScaling/scaleCF_compressible.cu index 528bbfc7a9584b2c5dedb17098324cbeab9ee1f6..c14def2e9d0749ade216482556cc2a47b04d4b5b 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/scaleCF_compressible.cu +++ b/src/gpu/core/GPU/GridScaling/scaleCF_compressible.cu @@ -31,18 +31,19 @@ //! \author Martin Schoenherr, Anna Wellmann //======================================================================================= -#include "DataTypes.h" +#include <basics/DataTypes.h> #include "LBM/GPUHelperFunctions/KernelUtilities.h" #include "LBM/GPUHelperFunctions/ChimeraTransformation.h" #include "LBM/GPUHelperFunctions/ScalingUtilities.h" #include <lbm/refinement/InterpolationCF.h> -#include <lbm/refinement/Coefficients.h> +#include <lbm/interpolation/InterpolationCoefficients.h> +#include <lbm/collision/TurbulentViscosity.h> template <bool hasTurbulentViscosity> __device__ void interpolate( - vf::lbm::Coefficients& coefficients, + vf::lbm::InterpolationCoefficients& coefficients, const unsigned int nodeIndex, real* distributionsFine, unsigned int* neighborXfine, @@ -89,13 +90,13 @@ template <bool hasTurbulentViscosity> __device__ void interpolate( //! - Set moments (zeroth to sixth order) on destination node //! real omegaF = omegaFine; - omegaF = hasTurbulentViscosity ? vf::gpu::calculateOmega(omegaFine, turbulentViscosityFine[indices.k_000]) : omegaFine; + omegaF = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaFine, turbulentViscosityFine[indices.k_000]) : omegaFine; const real epsilon_new = c1o2; // ratio of grid resolutions real f[27]; vf::lbm::interpolateCF(f, omegaF, epsilon_new, coefficients, x, y, z); - write(distFine, indices, f); + setPreCollisionDistribution(distFine, indices, f); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -120,11 +121,11 @@ template <bool hasTurbulentViscosity> __device__ void interpolate( //////////////////////////////////////////////////////////////////////////////// // Set moments (zeroth to sixth orders) on destination node - omegaF = hasTurbulentViscosity ? vf::gpu::calculateOmega(omegaFine, turbulentViscosityFine[indices.k_000]) : omegaFine; + omegaF = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaFine, turbulentViscosityFine[indices.k_000]) : omegaFine; vf::lbm::interpolateCF(f, omegaF, epsilon_new, coefficients, x, y, z); - write(distFine, indices, f); + setPreCollisionDistribution(distFine, indices, f); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // @@ -148,11 +149,11 @@ template <bool hasTurbulentViscosity> __device__ void interpolate( //////////////////////////////////////////////////////////////////////////////// // Set moments (zeroth to sixth orders) on destination node - omegaF = hasTurbulentViscosity ? vf::gpu::calculateOmega(omegaFine, turbulentViscosityFine[indices.k_000]) : omegaFine; + omegaF = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaFine, turbulentViscosityFine[indices.k_000]) : omegaFine; vf::lbm::interpolateCF(f, omegaF, epsilon_new, coefficients, x, y, z); - write(distFine, indices, f); + setPreCollisionDistribution(distFine, indices, f); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // @@ -176,11 +177,11 @@ template <bool hasTurbulentViscosity> __device__ void interpolate( //////////////////////////////////////////////////////////////////////////////// // Set moments (zeroth to sixth orders) on destination node - omegaF = hasTurbulentViscosity ? vf::gpu::calculateOmega(omegaFine, turbulentViscosityFine[indices.k_000]) : omegaFine; + omegaF = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaFine, turbulentViscosityFine[indices.k_000]) : omegaFine; vf::lbm::interpolateCF(f, omegaF, epsilon_new, coefficients, x, y, z); - write(distFine, indices, f); + setPreCollisionDistribution(distFine, indices, f); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // Position BNW = MPM: -0.25, 0.25, -0.25 @@ -215,11 +216,11 @@ template <bool hasTurbulentViscosity> __device__ void interpolate( //////////////////////////////////////////////////////////////////////////////// // Set moments (zeroth to sixth orders) on destination node - omegaF = hasTurbulentViscosity ? vf::gpu::calculateOmega(omegaFine, turbulentViscosityFine[indices.k_000]) : omegaFine; + omegaF = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaFine, turbulentViscosityFine[indices.k_000]) : omegaFine; vf::lbm::interpolateCF(f, omegaF, epsilon_new, coefficients, x, y, z); - write(distFine, indices, f); + setPreCollisionDistribution(distFine, indices, f); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // Position TNW = MPP: -0.25, 0.25, 0.25 @@ -239,11 +240,11 @@ template <bool hasTurbulentViscosity> __device__ void interpolate( indices.k_0MM = neighborZfine[indices.k_0MM]; indices.k_MMM = neighborZfine[indices.k_MMM]; - omegaF = hasTurbulentViscosity ? vf::gpu::calculateOmega(omegaFine, turbulentViscosityFine[indices.k_000]) : omegaFine; + omegaF = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaFine, turbulentViscosityFine[indices.k_000]) : omegaFine; vf::lbm::interpolateCF(f, omegaF, epsilon_new, coefficients, x, y, z); - write(distFine, indices, f); + setPreCollisionDistribution(distFine, indices, f); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // // Position TNE = PPP: 0.25, 0.25, 0.25 @@ -263,11 +264,11 @@ template <bool hasTurbulentViscosity> __device__ void interpolate( indices.k_0MM = indices.k_MMM; indices.k_MMM = neighborXfine[indices.k_MMM]; - omegaF = hasTurbulentViscosity ? vf::gpu::calculateOmega(omegaFine, turbulentViscosityFine[indices.k_000]) : omegaFine; + omegaF = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaFine, turbulentViscosityFine[indices.k_000]) : omegaFine; vf::lbm::interpolateCF(f, omegaF, epsilon_new, coefficients, x, y, z); - write(distFine, indices, f); + setPreCollisionDistribution(distFine, indices, f); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // //Position BNE = PPM: 0.25, 0.25, -0.25 @@ -287,11 +288,11 @@ template <bool hasTurbulentViscosity> __device__ void interpolate( indices.k_0M0 = k_base_MM0; indices.k_MM0 = neighborXfine[k_base_MM0]; - omegaF = hasTurbulentViscosity ? vf::gpu::calculateOmega(omegaFine, turbulentViscosityFine[indices.k_000]) : omegaFine; + omegaF = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaFine, turbulentViscosityFine[indices.k_000]) : omegaFine; vf::lbm::interpolateCF(f, omegaF, epsilon_new, coefficients, x, y, z); - write(distFine, indices, f); + setPreCollisionDistribution(distFine, indices, f); } ////////////////////////////////////////////////////////////////////////// @@ -365,11 +366,11 @@ template<bool hasTurbulentViscosity> __global__ void scaleCF_compressible( indices.k_0MM = k_base_0MM; indices.k_MMM = k_base_MMM; - omegaC = hasTurbulentViscosity ? vf::gpu::calculateOmega(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse; + omegaC = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse; real f_coarse[27]; - read(f_coarse, distCoarse, indices); + getPreCollisionDistribution(f_coarse, distCoarse, indices); momentsSet.calculateMMM(f_coarse, omegaC); ////////////////////////////////////////////////////////////////////////// @@ -385,9 +386,9 @@ template<bool hasTurbulentViscosity> __global__ void scaleCF_compressible( indices.k_0MM = neighborZcoarse[indices.k_0MM]; indices.k_MMM = neighborZcoarse[indices.k_MMM]; - omegaC = hasTurbulentViscosity ? vf::gpu::calculateOmega(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse; + omegaC = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse; - read(f_coarse, distCoarse, indices); + getPreCollisionDistribution(f_coarse, distCoarse, indices); momentsSet.calculateMMP(f_coarse, omegaC); ////////////////////////////////////////////////////////////////////////// @@ -403,9 +404,9 @@ template<bool hasTurbulentViscosity> __global__ void scaleCF_compressible( indices.k_0MM = indices.k_MMM; indices.k_MMM = neighborXcoarse[indices.k_MMM]; - omegaC = hasTurbulentViscosity ? vf::gpu::calculateOmega(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse; + omegaC = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse; - read(f_coarse, distCoarse, indices); + getPreCollisionDistribution(f_coarse, distCoarse, indices); momentsSet.calculatePMP(f_coarse, omegaC); ////////////////////////////////////////////////////////////////////////// @@ -421,9 +422,9 @@ template<bool hasTurbulentViscosity> __global__ void scaleCF_compressible( indices.k_0M0 = k_base_MM0; indices.k_MM0 = neighborXcoarse[k_base_MM0]; - omegaC = hasTurbulentViscosity ? vf::gpu::calculateOmega(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse; + omegaC = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse; - read(f_coarse, distCoarse, indices); + getPreCollisionDistribution(f_coarse, distCoarse, indices); momentsSet.calculatePMM(f_coarse, omegaC); ////////////////////////////////////////////////////////////////////////// @@ -449,9 +450,9 @@ template<bool hasTurbulentViscosity> __global__ void scaleCF_compressible( indices.k_0MM = k_base_0MM; indices.k_MMM = k_base_MMM; - omegaC = hasTurbulentViscosity ? vf::gpu::calculateOmega(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse; + omegaC = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse; - read(f_coarse, distCoarse, indices); + getPreCollisionDistribution(f_coarse, distCoarse, indices); momentsSet.calculateMPM(f_coarse, omegaC); ////////////////////////////////////////////////////////////////////////// @@ -467,9 +468,9 @@ template<bool hasTurbulentViscosity> __global__ void scaleCF_compressible( indices.k_0MM = neighborZcoarse[indices.k_0MM]; indices.k_MMM = neighborZcoarse[indices.k_MMM]; - omegaC = hasTurbulentViscosity ? vf::gpu::calculateOmega(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse; + omegaC = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse; - read(f_coarse, distCoarse, indices); + getPreCollisionDistribution(f_coarse, distCoarse, indices); momentsSet.calculateMPP(f_coarse, omegaC); ////////////////////////////////////////////////////////////////////////// // source node TNE = PPP @@ -484,9 +485,9 @@ template<bool hasTurbulentViscosity> __global__ void scaleCF_compressible( indices.k_0MM = indices.k_MMM; indices.k_MMM = neighborXcoarse[indices.k_MMM]; - omegaC = hasTurbulentViscosity ? vf::gpu::calculateOmega(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse; + omegaC = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse; - read(f_coarse, distCoarse, indices); + getPreCollisionDistribution(f_coarse, distCoarse, indices); momentsSet.calculatePPP(f_coarse, omegaC); ////////////////////////////////////////////////////////////////////////// // source node BNE = PPM @@ -501,15 +502,15 @@ template<bool hasTurbulentViscosity> __global__ void scaleCF_compressible( indices.k_0M0 = k_base_MM0; indices.k_MM0 = neighborXcoarse[k_base_MM0]; - omegaC = hasTurbulentViscosity ? vf::gpu::calculateOmega(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse; + omegaC = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse; - read(f_coarse, distCoarse, indices); + getPreCollisionDistribution(f_coarse, distCoarse, indices); momentsSet.calculatePPM(f_coarse, omegaC); // should be extractel until this line // - ################################################################### // 2.calculate coefficients - vf::lbm::Coefficients coefficients; + vf::lbm::InterpolationCoefficients coefficients; momentsSet.calculateCoefficients(coefficients, neighborCoarseToFine.x[nodeIndex], neighborCoarseToFine.y[nodeIndex], neighborCoarseToFine.z[nodeIndex]); // 3. interpolate coarse to fine diff --git a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/scaleFC_compressible.cu b/src/gpu/core/GPU/GridScaling/scaleFC_compressible.cu similarity index 94% rename from src/gpu/VirtualFluids_GPU/GPU/GridScaling/scaleFC_compressible.cu rename to src/gpu/core/GPU/GridScaling/scaleFC_compressible.cu index 3276db0595329b4c948779d0b27857170d125f78..c6f22270852ec1709e3986b276990f502efa90db 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/GridScaling/scaleFC_compressible.cu +++ b/src/gpu/core/GPU/GridScaling/scaleFC_compressible.cu @@ -35,13 +35,12 @@ #include "LBM/GPUHelperFunctions/KernelUtilities.h" #include "LBM/GPUHelperFunctions/ScalingUtilities.h" -#include <lbm/KernelParameter.h> #include <lbm/refinement/InterpolationFC.h> -#include <lbm/refinement/Coefficients.h> +#include <lbm/interpolation/InterpolationCoefficients.h> template <bool hasTurbulentViscosity> __device__ void interpolate( - vf::lbm::Coefficients& coefficients, + vf::lbm::InterpolationCoefficients& coefficients, const unsigned int nodeIndex, real* distributionsCoarse, unsigned int* neighborXcoarse, @@ -61,11 +60,11 @@ template <bool hasTurbulentViscosity> __device__ void interpolate( vf::gpu::ListIndices indices(indicesCoarse000[nodeIndex], neighborXcoarse, neighborYcoarse, neighborZcoarse); const real epsilonNew = c2o1; // ratio of grid resolutions - const real omegaCoarseNew = hasTurbulentViscosity ? vf::gpu::calculateOmega(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse; + const real omegaCoarseNew = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omegaCoarse, turbulentViscosityCoarse[indices.k_000]) : omegaCoarse; real fCoarse[27]; vf::lbm::interpolateFC(fCoarse, epsilonNew, omegaCoarseNew, coefficients); - vf::gpu::write(distCoarse, indices, fCoarse); + vf::gpu::setPreCollisionDistribution(distCoarse, indices, fCoarse); } @@ -106,7 +105,7 @@ template<bool hasTurbulentViscosity> __global__ void scaleFC_compressible( momentsSet, nodeIndex, distributionsFine, neighborXfine, neighborYfine, neighborZfine, indicesFineMMM, turbulentViscosityFine, numberOfLBnodesFine, omegaFine, true); // 2.calculate coefficients - vf::lbm::Coefficients coefficients; + vf::lbm::InterpolationCoefficients coefficients; momentsSet.calculateCoefficients(coefficients, neighborFineToCoarse.x[nodeIndex], neighborFineToCoarse.y[nodeIndex], neighborFineToCoarse.z[nodeIndex]); // 3. interpolate fine to coarse diff --git a/src/gpu/VirtualFluids_GPU/GPU/Init27.cu b/src/gpu/core/GPU/Init27.cu similarity index 50% rename from src/gpu/VirtualFluids_GPU/GPU/Init27.cu rename to src/gpu/core/GPU/Init27.cu index ff844cfecd9e4cad02e41879ddd68246d0fe9ab2..a2197f6024114e885fca458ebcd082b43ab53cdb 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/Init27.cu +++ b/src/gpu/core/GPU/Init27.cu @@ -24,33 +24,33 @@ __global__ void LBInit27( int myid, int maxlev) { Distributions27 D; - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; + 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]; //////////////////////////////////////////////////////////////////////////////// unsigned int k; // Zugriff auf arrays im device // @@ -141,33 +141,33 @@ __global__ void LBInit27( int myid, real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - (D.f[DIR_000])[kzero] = c8o27* (drho-cu_sq); - (D.f[DIR_P00])[ke ] = c2o27* (drho+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - (D.f[DIR_M00])[kw ] = c2o27* (drho+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - (D.f[DIR_0P0])[kn ] = c2o27* (drho+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - (D.f[DIR_0M0])[ks ] = c2o27* (drho+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - (D.f[DIR_00P])[kt ] = c2o27* (drho+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - (D.f[DIR_00M])[kb ] = c2o27* (drho+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - (D.f[DIR_PP0])[kne ] = c1o54* (drho+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - (D.f[DIR_MM0])[ksw ] = c1o54* (drho+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - (D.f[DIR_PM0])[kse ] = c1o54* (drho+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - (D.f[DIR_MP0])[knw ] = c1o54* (drho+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - (D.f[DIR_P0P])[kte ] = c1o54* (drho+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - (D.f[DIR_M0M])[kbw ] = c1o54* (drho+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - (D.f[DIR_P0M])[kbe ] = c1o54* (drho+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - (D.f[DIR_M0P])[ktw ] = c1o54* (drho+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - (D.f[DIR_0PP])[ktn ] = c1o54* (drho+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - (D.f[DIR_0MM])[kbs ] = c1o54* (drho+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - (D.f[DIR_0PM])[kbn ] = c1o54* (drho+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - (D.f[DIR_0MP])[kts ] = c1o54* (drho+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - (D.f[DIR_PPP])[ktne ] = c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - (D.f[DIR_MMM])[kbsw ] = c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - (D.f[DIR_PPM])[kbne ] = c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - (D.f[DIR_MMP])[ktsw ] = c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - (D.f[DIR_PMP])[ktse ] = c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - (D.f[DIR_MPM])[kbnw ] = c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - (D.f[DIR_PMM])[kbse ] = c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - (D.f[DIR_MPP])[ktnw ] = c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); + (D.f[d000])[kzero] = c8o27* (drho-cu_sq); + (D.f[dP00])[ke ] = c2o27* (drho+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); + (D.f[dM00])[kw ] = c2o27* (drho+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); + (D.f[d0P0])[kn ] = c2o27* (drho+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); + (D.f[d0M0])[ks ] = c2o27* (drho+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); + (D.f[d00P])[kt ] = c2o27* (drho+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); + (D.f[d00M])[kb ] = c2o27* (drho+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); + (D.f[dPP0])[kne ] = c1o54* (drho+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); + (D.f[dMM0])[ksw ] = c1o54* (drho+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); + (D.f[dPM0])[kse ] = c1o54* (drho+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); + (D.f[dMP0])[knw ] = c1o54* (drho+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); + (D.f[dP0P])[kte ] = c1o54* (drho+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); + (D.f[dM0M])[kbw ] = c1o54* (drho+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); + (D.f[dP0M])[kbe ] = c1o54* (drho+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); + (D.f[dM0P])[ktw ] = c1o54* (drho+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); + (D.f[d0PP])[ktn ] = c1o54* (drho+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); + (D.f[d0MM])[kbs ] = c1o54* (drho+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); + (D.f[d0PM])[kbn ] = c1o54* (drho+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); + (D.f[d0MP])[kts ] = c1o54* (drho+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); + (D.f[dPPP])[ktne ] = c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); + (D.f[dMMM])[kbsw ] = c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); + (D.f[dPPM])[kbne ] = c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); + (D.f[dMMP])[ktsw ] = c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); + (D.f[dPMP])[ktse ] = c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); + (D.f[dMPM])[kbnw ] = c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); + (D.f[dPMM])[kbse ] = c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); + (D.f[dMPP])[ktnw ] = c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); } //////////////////////////////////////////////////////////////////////////////// @@ -218,63 +218,63 @@ __global__ void LBInitNonEqPartSP27( unsigned int* neighborX, Distributions27 D; if (EvenOrOdd==true) { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; + 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[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; + 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[dMMM] = &DD[dPPP * numberOfLBnodes]; + D.f[dPPM] = &DD[dMMP * numberOfLBnodes]; + D.f[dMPM] = &DD[dPMP * numberOfLBnodes]; + D.f[dPMM] = &DD[dMPP * numberOfLBnodes]; + D.f[dMMP] = &DD[dPPM * numberOfLBnodes]; + D.f[dPPP] = &DD[dMMM * numberOfLBnodes]; + D.f[dMPP] = &DD[dPMM * numberOfLBnodes]; + D.f[dPMP] = &DD[dMPM * numberOfLBnodes]; } ////////////////////////////////////////////////////////////////////////// real drho = rho[k];//0.0f;// @@ -396,63 +396,63 @@ __global__ void LBInitNonEqPartSP27( unsigned int* neighborX, ////////////////////////////////////////////////////////////////////////// real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); - (D.f[DIR_000])[kzero] = c8o27* (drho-cu_sq); - (D.f[DIR_P00])[ke ] = c2o27* (drho+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - (D.f[DIR_M00])[kw ] = c2o27* (drho+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - (D.f[DIR_0P0])[kn ] = c2o27* (drho+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - (D.f[DIR_0M0])[ks ] = c2o27* (drho+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - (D.f[DIR_00P])[kt ] = c2o27* (drho+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - (D.f[DIR_00M])[kb ] = c2o27* (drho+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - (D.f[DIR_PP0])[kne ] = c1o54* (drho+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - (D.f[DIR_MM0])[ksw ] = c1o54* (drho+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - (D.f[DIR_PM0])[kse ] = c1o54* (drho+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - (D.f[DIR_MP0])[knw ] = c1o54* (drho+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - (D.f[DIR_P0P])[kte ] = c1o54* (drho+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - (D.f[DIR_M0M])[kbw ] = c1o54* (drho+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - (D.f[DIR_P0M])[kbe ] = c1o54* (drho+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - (D.f[DIR_M0P])[ktw ] = c1o54* (drho+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - (D.f[DIR_0PP])[ktn ] = c1o54* (drho+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - (D.f[DIR_0MM])[kbs ] = c1o54* (drho+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - (D.f[DIR_0PM])[kbn ] = c1o54* (drho+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - (D.f[DIR_0MP])[kts ] = c1o54* (drho+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - (D.f[DIR_PPP])[ktne ] = c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - (D.f[DIR_MMM])[kbsw ] = c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - (D.f[DIR_PPM])[kbne ] = c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - (D.f[DIR_MMP])[ktsw ] = c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - (D.f[DIR_PMP])[ktse ] = c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - (D.f[DIR_MPM])[kbnw ] = c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - (D.f[DIR_PMM])[kbse ] = c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - (D.f[DIR_MPP])[ktnw ] = c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); + (D.f[d000])[kzero] = c8o27* (drho-cu_sq); + (D.f[dP00])[ke ] = c2o27* (drho+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); + (D.f[dM00])[kw ] = c2o27* (drho+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); + (D.f[d0P0])[kn ] = c2o27* (drho+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); + (D.f[d0M0])[ks ] = c2o27* (drho+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); + (D.f[d00P])[kt ] = c2o27* (drho+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); + (D.f[d00M])[kb ] = c2o27* (drho+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); + (D.f[dPP0])[kne ] = c1o54* (drho+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); + (D.f[dMM0])[ksw ] = c1o54* (drho+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); + (D.f[dPM0])[kse ] = c1o54* (drho+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); + (D.f[dMP0])[knw ] = c1o54* (drho+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); + (D.f[dP0P])[kte ] = c1o54* (drho+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); + (D.f[dM0M])[kbw ] = c1o54* (drho+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); + (D.f[dP0M])[kbe ] = c1o54* (drho+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); + (D.f[dM0P])[ktw ] = c1o54* (drho+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); + (D.f[d0PP])[ktn ] = c1o54* (drho+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); + (D.f[d0MM])[kbs ] = c1o54* (drho+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); + (D.f[d0PM])[kbn ] = c1o54* (drho+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); + (D.f[d0MP])[kts ] = c1o54* (drho+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); + (D.f[dPPP])[ktne ] = c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); + (D.f[dMMM])[kbsw ] = c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); + (D.f[dPPM])[kbne ] = c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); + (D.f[dMMP])[ktsw ] = c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); + (D.f[dPMP])[ktse ] = c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); + (D.f[dMPM])[kbnw ] = c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); + (D.f[dPMM])[kbse ] = c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); + (D.f[dMPP])[ktnw ] = c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); ////////////////////////////////////////////////////////////////////////// - (D.f[DIR_000])[kzero] += f_ZERO; - (D.f[DIR_P00])[ke ] += f_E ; - (D.f[DIR_M00])[kw ] += f_E ; - (D.f[DIR_0P0])[kn ] += f_N ; - (D.f[DIR_0M0])[ks ] += f_N ; - (D.f[DIR_00P])[kt ] += f_T ; - (D.f[DIR_00M])[kb ] += f_T ; - (D.f[DIR_PP0])[kne ] += f_NE ; - (D.f[DIR_MM0])[ksw ] += f_NE ; - (D.f[DIR_PM0])[kse ] += f_SE ; - (D.f[DIR_MP0])[knw ] += f_SE ; - (D.f[DIR_P0P])[kte ] += f_TE ; - (D.f[DIR_M0M])[kbw ] += f_TE ; - (D.f[DIR_P0M])[kbe ] += f_BE ; - (D.f[DIR_M0P])[ktw ] += f_BE ; - (D.f[DIR_0PP])[ktn ] += f_TN ; - (D.f[DIR_0MM])[kbs ] += f_TN ; - (D.f[DIR_0PM])[kbn ] += f_BN ; - (D.f[DIR_0MP])[kts ] += f_BN ; - (D.f[DIR_PPP])[ktne ] += f_TNE ; - (D.f[DIR_MMM])[kbsw ] += f_TNE ; - (D.f[DIR_PPM])[kbne ] += f_TSW ; - (D.f[DIR_MMP])[ktsw ] += f_TSW ; - (D.f[DIR_PMP])[ktse ] += f_TSE ; - (D.f[DIR_MPM])[kbnw ] += f_TSE ; - (D.f[DIR_PMM])[kbse ] += f_TNW ; - (D.f[DIR_MPP])[ktnw ] += f_TNW ; + (D.f[d000])[kzero] += f_ZERO; + (D.f[dP00])[ke ] += f_E ; + (D.f[dM00])[kw ] += f_E ; + (D.f[d0P0])[kn ] += f_N ; + (D.f[d0M0])[ks ] += f_N ; + (D.f[d00P])[kt ] += f_T ; + (D.f[d00M])[kb ] += f_T ; + (D.f[dPP0])[kne ] += f_NE ; + (D.f[dMM0])[ksw ] += f_NE ; + (D.f[dPM0])[kse ] += f_SE ; + (D.f[dMP0])[knw ] += f_SE ; + (D.f[dP0P])[kte ] += f_TE ; + (D.f[dM0M])[kbw ] += f_TE ; + (D.f[dP0M])[kbe ] += f_BE ; + (D.f[dM0P])[ktw ] += f_BE ; + (D.f[d0PP])[ktn ] += f_TN ; + (D.f[d0MM])[kbs ] += f_TN ; + (D.f[d0PM])[kbn ] += f_BN ; + (D.f[d0MP])[kts ] += f_BN ; + (D.f[dPPP])[ktne ] += f_TNE ; + (D.f[dMMM])[kbsw ] += f_TNE ; + (D.f[dPPM])[kbne ] += f_TSW ; + (D.f[dMMP])[ktsw ] += f_TSW ; + (D.f[dPMP])[ktse ] += f_TSE ; + (D.f[dMPM])[kbnw ] += f_TSE ; + (D.f[dPMM])[kbse ] += f_TNW ; + (D.f[dMPP])[ktnw ] += f_TNW ; ////////////////////////////////////////////////////////////////////////// } @@ -460,9 +460,9 @@ __global__ void LBInitNonEqPartSP27( unsigned int* neighborX, { ////////////////////////////////////////////////////////////////////////// Distributions27 D; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; + D.f[d000] = &DD[d000 * numberOfLBnodes]; ////////////////////////////////////////////////////////////////////////// - (D.f[DIR_000])[k] = c96o1; + (D.f[d000])[k] = c96o1; ////////////////////////////////////////////////////////////////////////// } } diff --git a/src/gpu/VirtualFluids_GPU/GPU/InitAdvectionDiffusion27.cu b/src/gpu/core/GPU/InitAdvectionDiffusion27.cu similarity index 50% rename from src/gpu/VirtualFluids_GPU/GPU/InitAdvectionDiffusion27.cu rename to src/gpu/core/GPU/InitAdvectionDiffusion27.cu index a4172403158adbd712e255676baa2616081e83b4..c58e4fd5a710562ad26d6bb74b3f0bb26749cb9b 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/InitAdvectionDiffusion27.cu +++ b/src/gpu/core/GPU/InitAdvectionDiffusion27.cu @@ -77,63 +77,63 @@ __global__ void InitAD27( Distributions27 distAD; if (isEvenTimestep) { - distAD.f[DIR_P00] = &distributionsAD[DIR_P00 * numberOfLBnodes]; - distAD.f[DIR_M00] = &distributionsAD[DIR_M00 * numberOfLBnodes]; - distAD.f[DIR_0P0] = &distributionsAD[DIR_0P0 * numberOfLBnodes]; - distAD.f[DIR_0M0] = &distributionsAD[DIR_0M0 * numberOfLBnodes]; - distAD.f[DIR_00P] = &distributionsAD[DIR_00P * numberOfLBnodes]; - distAD.f[DIR_00M] = &distributionsAD[DIR_00M * numberOfLBnodes]; - distAD.f[DIR_PP0] = &distributionsAD[DIR_PP0 * numberOfLBnodes]; - distAD.f[DIR_MM0] = &distributionsAD[DIR_MM0 * numberOfLBnodes]; - distAD.f[DIR_PM0] = &distributionsAD[DIR_PM0 * numberOfLBnodes]; - distAD.f[DIR_MP0] = &distributionsAD[DIR_MP0 * numberOfLBnodes]; - distAD.f[DIR_P0P] = &distributionsAD[DIR_P0P * numberOfLBnodes]; - distAD.f[DIR_M0M] = &distributionsAD[DIR_M0M * numberOfLBnodes]; - distAD.f[DIR_P0M] = &distributionsAD[DIR_P0M * numberOfLBnodes]; - distAD.f[DIR_M0P] = &distributionsAD[DIR_M0P * numberOfLBnodes]; - distAD.f[DIR_0PP] = &distributionsAD[DIR_0PP * numberOfLBnodes]; - distAD.f[DIR_0MM] = &distributionsAD[DIR_0MM * numberOfLBnodes]; - distAD.f[DIR_0PM] = &distributionsAD[DIR_0PM * numberOfLBnodes]; - distAD.f[DIR_0MP] = &distributionsAD[DIR_0MP * numberOfLBnodes]; - distAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes]; - distAD.f[DIR_PPP] = &distributionsAD[DIR_PPP * numberOfLBnodes]; - distAD.f[DIR_MMP] = &distributionsAD[DIR_MMP * numberOfLBnodes]; - distAD.f[DIR_PMP] = &distributionsAD[DIR_PMP * numberOfLBnodes]; - distAD.f[DIR_MPP] = &distributionsAD[DIR_MPP * numberOfLBnodes]; - distAD.f[DIR_PPM] = &distributionsAD[DIR_PPM * numberOfLBnodes]; - distAD.f[DIR_MMM] = &distributionsAD[DIR_MMM * numberOfLBnodes]; - distAD.f[DIR_PMM] = &distributionsAD[DIR_PMM * numberOfLBnodes]; - distAD.f[DIR_MPM] = &distributionsAD[DIR_MPM * numberOfLBnodes]; + distAD.f[dP00] = &distributionsAD[dP00 * numberOfLBnodes]; + distAD.f[dM00] = &distributionsAD[dM00 * numberOfLBnodes]; + distAD.f[d0P0] = &distributionsAD[d0P0 * numberOfLBnodes]; + distAD.f[d0M0] = &distributionsAD[d0M0 * numberOfLBnodes]; + distAD.f[d00P] = &distributionsAD[d00P * numberOfLBnodes]; + distAD.f[d00M] = &distributionsAD[d00M * numberOfLBnodes]; + distAD.f[dPP0] = &distributionsAD[dPP0 * numberOfLBnodes]; + distAD.f[dMM0] = &distributionsAD[dMM0 * numberOfLBnodes]; + distAD.f[dPM0] = &distributionsAD[dPM0 * numberOfLBnodes]; + distAD.f[dMP0] = &distributionsAD[dMP0 * numberOfLBnodes]; + distAD.f[dP0P] = &distributionsAD[dP0P * numberOfLBnodes]; + distAD.f[dM0M] = &distributionsAD[dM0M * numberOfLBnodes]; + distAD.f[dP0M] = &distributionsAD[dP0M * numberOfLBnodes]; + distAD.f[dM0P] = &distributionsAD[dM0P * numberOfLBnodes]; + distAD.f[d0PP] = &distributionsAD[d0PP * numberOfLBnodes]; + distAD.f[d0MM] = &distributionsAD[d0MM * numberOfLBnodes]; + distAD.f[d0PM] = &distributionsAD[d0PM * numberOfLBnodes]; + distAD.f[d0MP] = &distributionsAD[d0MP * numberOfLBnodes]; + distAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes]; + distAD.f[dPPP] = &distributionsAD[dPPP * numberOfLBnodes]; + distAD.f[dMMP] = &distributionsAD[dMMP * numberOfLBnodes]; + distAD.f[dPMP] = &distributionsAD[dPMP * numberOfLBnodes]; + distAD.f[dMPP] = &distributionsAD[dMPP * numberOfLBnodes]; + distAD.f[dPPM] = &distributionsAD[dPPM * numberOfLBnodes]; + distAD.f[dMMM] = &distributionsAD[dMMM * numberOfLBnodes]; + distAD.f[dPMM] = &distributionsAD[dPMM * numberOfLBnodes]; + distAD.f[dMPM] = &distributionsAD[dMPM * numberOfLBnodes]; } else { - distAD.f[DIR_M00] = &distributionsAD[DIR_P00 * numberOfLBnodes]; - distAD.f[DIR_P00] = &distributionsAD[DIR_M00 * numberOfLBnodes]; - distAD.f[DIR_0M0] = &distributionsAD[DIR_0P0 * numberOfLBnodes]; - distAD.f[DIR_0P0] = &distributionsAD[DIR_0M0 * numberOfLBnodes]; - distAD.f[DIR_00M] = &distributionsAD[DIR_00P * numberOfLBnodes]; - distAD.f[DIR_00P] = &distributionsAD[DIR_00M * numberOfLBnodes]; - distAD.f[DIR_MM0] = &distributionsAD[DIR_PP0 * numberOfLBnodes]; - distAD.f[DIR_PP0] = &distributionsAD[DIR_MM0 * numberOfLBnodes]; - distAD.f[DIR_MP0] = &distributionsAD[DIR_PM0 * numberOfLBnodes]; - distAD.f[DIR_PM0] = &distributionsAD[DIR_MP0 * numberOfLBnodes]; - distAD.f[DIR_M0M] = &distributionsAD[DIR_P0P * numberOfLBnodes]; - distAD.f[DIR_P0P] = &distributionsAD[DIR_M0M * numberOfLBnodes]; - distAD.f[DIR_M0P] = &distributionsAD[DIR_P0M * numberOfLBnodes]; - distAD.f[DIR_P0M] = &distributionsAD[DIR_M0P * numberOfLBnodes]; - distAD.f[DIR_0MM] = &distributionsAD[DIR_0PP * numberOfLBnodes]; - distAD.f[DIR_0PP] = &distributionsAD[DIR_0MM * numberOfLBnodes]; - distAD.f[DIR_0MP] = &distributionsAD[DIR_0PM * numberOfLBnodes]; - distAD.f[DIR_0PM] = &distributionsAD[DIR_0MP * numberOfLBnodes]; - distAD.f[DIR_000] = &distributionsAD[DIR_000 * numberOfLBnodes]; - distAD.f[DIR_MMM] = &distributionsAD[DIR_PPP * numberOfLBnodes]; - distAD.f[DIR_PPM] = &distributionsAD[DIR_MMP * numberOfLBnodes]; - distAD.f[DIR_MPM] = &distributionsAD[DIR_PMP * numberOfLBnodes]; - distAD.f[DIR_PMM] = &distributionsAD[DIR_MPP * numberOfLBnodes]; - distAD.f[DIR_MMP] = &distributionsAD[DIR_PPM * numberOfLBnodes]; - distAD.f[DIR_PPP] = &distributionsAD[DIR_MMM * numberOfLBnodes]; - distAD.f[DIR_MPP] = &distributionsAD[DIR_PMM * numberOfLBnodes]; - distAD.f[DIR_PMP] = &distributionsAD[DIR_MPM * numberOfLBnodes]; + distAD.f[dM00] = &distributionsAD[dP00 * numberOfLBnodes]; + distAD.f[dP00] = &distributionsAD[dM00 * numberOfLBnodes]; + distAD.f[d0M0] = &distributionsAD[d0P0 * numberOfLBnodes]; + distAD.f[d0P0] = &distributionsAD[d0M0 * numberOfLBnodes]; + distAD.f[d00M] = &distributionsAD[d00P * numberOfLBnodes]; + distAD.f[d00P] = &distributionsAD[d00M * numberOfLBnodes]; + distAD.f[dMM0] = &distributionsAD[dPP0 * numberOfLBnodes]; + distAD.f[dPP0] = &distributionsAD[dMM0 * numberOfLBnodes]; + distAD.f[dMP0] = &distributionsAD[dPM0 * numberOfLBnodes]; + distAD.f[dPM0] = &distributionsAD[dMP0 * numberOfLBnodes]; + distAD.f[dM0M] = &distributionsAD[dP0P * numberOfLBnodes]; + distAD.f[dP0P] = &distributionsAD[dM0M * numberOfLBnodes]; + distAD.f[dM0P] = &distributionsAD[dP0M * numberOfLBnodes]; + distAD.f[dP0M] = &distributionsAD[dM0P * numberOfLBnodes]; + distAD.f[d0MM] = &distributionsAD[d0PP * numberOfLBnodes]; + distAD.f[d0PP] = &distributionsAD[d0MM * numberOfLBnodes]; + distAD.f[d0MP] = &distributionsAD[d0PM * numberOfLBnodes]; + distAD.f[d0PM] = &distributionsAD[d0MP * numberOfLBnodes]; + distAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes]; + distAD.f[dMMM] = &distributionsAD[dPPP * numberOfLBnodes]; + distAD.f[dPPM] = &distributionsAD[dMMP * numberOfLBnodes]; + distAD.f[dMPM] = &distributionsAD[dPMP * numberOfLBnodes]; + distAD.f[dPMM] = &distributionsAD[dMPP * numberOfLBnodes]; + distAD.f[dMMP] = &distributionsAD[dPPM * numberOfLBnodes]; + distAD.f[dPPP] = &distributionsAD[dMMM * numberOfLBnodes]; + distAD.f[dMPP] = &distributionsAD[dPMM * numberOfLBnodes]; + distAD.f[dPMP] = &distributionsAD[dMPM * numberOfLBnodes]; } ////////////////////////////////////////////////////////////////////////// //! - Set local velocities and concetration @@ -177,33 +177,33 @@ __global__ void InitAD27( //! real cu_sq = c3o2*(vx1*vx1 + vx2*vx2 + vx3*vx3); - (distAD.f[DIR_000])[kzero] = c8o27 * conc * (c1o1 - cu_sq); - (distAD.f[DIR_P00])[ke ] = c2o27 * conc * (c1o1 + c3o1 * ( vx1 ) + c9o2 * ( vx1 ) * ( vx1 ) - cu_sq); - (distAD.f[DIR_M00])[kw ] = c2o27 * conc * (c1o1 + c3o1 * (-vx1 ) + c9o2 * (-vx1 ) * (-vx1 ) - cu_sq); - (distAD.f[DIR_0P0])[kn ] = c2o27 * conc * (c1o1 + c3o1 * ( vx2 ) + c9o2 * ( vx2 ) * ( vx2 ) - cu_sq); - (distAD.f[DIR_0M0])[ks ] = c2o27 * conc * (c1o1 + c3o1 * ( - vx2 ) + c9o2 * ( - vx2 ) * ( - vx2 ) - cu_sq); - (distAD.f[DIR_00P])[kt ] = c2o27 * conc * (c1o1 + c3o1 * ( vx3) + c9o2 * ( vx3) * ( vx3) - cu_sq); - (distAD.f[DIR_00M])[kb ] = c2o27 * conc * (c1o1 + c3o1 * ( - vx3) + c9o2 * ( - vx3) * ( - vx3) - cu_sq); - (distAD.f[DIR_PP0])[kne ] = c1o54 * conc * (c1o1 + c3o1 * ( vx1 + vx2 ) + c9o2 * ( vx1 + vx2 ) * ( vx1 + vx2 ) - cu_sq); - (distAD.f[DIR_MM0])[ksw ] = c1o54 * conc * (c1o1 + c3o1 * (-vx1 - vx2 ) + c9o2 * (-vx1 - vx2 ) * (-vx1 - vx2 ) - cu_sq); - (distAD.f[DIR_PM0])[kse ] = c1o54 * conc * (c1o1 + c3o1 * ( vx1 - vx2 ) + c9o2 * ( vx1 - vx2 ) * ( vx1 - vx2 ) - cu_sq); - (distAD.f[DIR_MP0])[knw ] = c1o54 * conc * (c1o1 + c3o1 * (-vx1 + vx2 ) + c9o2 * (-vx1 + vx2 ) * (-vx1 + vx2 ) - cu_sq); - (distAD.f[DIR_P0P])[kte ] = c1o54 * conc * (c1o1 + c3o1 * ( vx1 + vx3) + c9o2 * ( vx1 + vx3) * ( vx1 + vx3) - cu_sq); - (distAD.f[DIR_M0M])[kbw ] = c1o54 * conc * (c1o1 + c3o1 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq); - (distAD.f[DIR_P0M])[kbe ] = c1o54 * conc * (c1o1 + c3o1 * ( vx1 - vx3) + c9o2 * ( vx1 - vx3) * ( vx1 - vx3) - cu_sq); - (distAD.f[DIR_M0P])[ktw ] = c1o54 * conc * (c1o1 + c3o1 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq); - (distAD.f[DIR_0PP])[ktn ] = c1o54 * conc * (c1o1 + c3o1 * ( vx2 + vx3) + c9o2 * ( vx2 + vx3) * ( vx2 + vx3) - cu_sq); - (distAD.f[DIR_0MM])[kbs ] = c1o54 * conc * (c1o1 + c3o1 * ( - vx2 - vx3) + c9o2 * ( - vx2 - vx3) * ( - vx2 - vx3) - cu_sq); - (distAD.f[DIR_0PM])[kbn ] = c1o54 * conc * (c1o1 + c3o1 * ( vx2 - vx3) + c9o2 * ( vx2 - vx3) * ( vx2 - vx3) - cu_sq); - (distAD.f[DIR_0MP])[kts ] = c1o54 * conc * (c1o1 + c3o1 * ( - vx2 + vx3) + c9o2 * ( - vx2 + vx3) * ( - vx2 + vx3) - cu_sq); - (distAD.f[DIR_PPP])[ktne ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 + vx2 + vx3) + c9o2 * ( vx1 + vx2 + vx3) * ( vx1 + vx2 + vx3) - cu_sq); - (distAD.f[DIR_MMM])[kbsw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq); - (distAD.f[DIR_PPM])[kbne ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 + vx2 - vx3) + c9o2 * ( vx1 + vx2 - vx3) * ( vx1 + vx2 - vx3) - cu_sq); - (distAD.f[DIR_MMP])[ktsw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq); - (distAD.f[DIR_PMP])[ktse ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 - vx2 + vx3) + c9o2 * ( vx1 - vx2 + vx3) * ( vx1 - vx2 + vx3) - cu_sq); - (distAD.f[DIR_MPM])[kbnw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq); - (distAD.f[DIR_PMM])[kbse ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 - vx2 - vx3) + c9o2 * ( vx1 - vx2 - vx3) * ( vx1 - vx2 - vx3) - cu_sq); - (distAD.f[DIR_MPP])[ktnw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq); + (distAD.f[d000])[kzero] = c8o27 * conc * (c1o1 - cu_sq); + (distAD.f[dP00])[ke ] = c2o27 * conc * (c1o1 + c3o1 * ( vx1 ) + c9o2 * ( vx1 ) * ( vx1 ) - cu_sq); + (distAD.f[dM00])[kw ] = c2o27 * conc * (c1o1 + c3o1 * (-vx1 ) + c9o2 * (-vx1 ) * (-vx1 ) - cu_sq); + (distAD.f[d0P0])[kn ] = c2o27 * conc * (c1o1 + c3o1 * ( vx2 ) + c9o2 * ( vx2 ) * ( vx2 ) - cu_sq); + (distAD.f[d0M0])[ks ] = c2o27 * conc * (c1o1 + c3o1 * ( - vx2 ) + c9o2 * ( - vx2 ) * ( - vx2 ) - cu_sq); + (distAD.f[d00P])[kt ] = c2o27 * conc * (c1o1 + c3o1 * ( vx3) + c9o2 * ( vx3) * ( vx3) - cu_sq); + (distAD.f[d00M])[kb ] = c2o27 * conc * (c1o1 + c3o1 * ( - vx3) + c9o2 * ( - vx3) * ( - vx3) - cu_sq); + (distAD.f[dPP0])[kne ] = c1o54 * conc * (c1o1 + c3o1 * ( vx1 + vx2 ) + c9o2 * ( vx1 + vx2 ) * ( vx1 + vx2 ) - cu_sq); + (distAD.f[dMM0])[ksw ] = c1o54 * conc * (c1o1 + c3o1 * (-vx1 - vx2 ) + c9o2 * (-vx1 - vx2 ) * (-vx1 - vx2 ) - cu_sq); + (distAD.f[dPM0])[kse ] = c1o54 * conc * (c1o1 + c3o1 * ( vx1 - vx2 ) + c9o2 * ( vx1 - vx2 ) * ( vx1 - vx2 ) - cu_sq); + (distAD.f[dMP0])[knw ] = c1o54 * conc * (c1o1 + c3o1 * (-vx1 + vx2 ) + c9o2 * (-vx1 + vx2 ) * (-vx1 + vx2 ) - cu_sq); + (distAD.f[dP0P])[kte ] = c1o54 * conc * (c1o1 + c3o1 * ( vx1 + vx3) + c9o2 * ( vx1 + vx3) * ( vx1 + vx3) - cu_sq); + (distAD.f[dM0M])[kbw ] = c1o54 * conc * (c1o1 + c3o1 * (-vx1 - vx3) + c9o2 * (-vx1 - vx3) * (-vx1 - vx3) - cu_sq); + (distAD.f[dP0M])[kbe ] = c1o54 * conc * (c1o1 + c3o1 * ( vx1 - vx3) + c9o2 * ( vx1 - vx3) * ( vx1 - vx3) - cu_sq); + (distAD.f[dM0P])[ktw ] = c1o54 * conc * (c1o1 + c3o1 * (-vx1 + vx3) + c9o2 * (-vx1 + vx3) * (-vx1 + vx3) - cu_sq); + (distAD.f[d0PP])[ktn ] = c1o54 * conc * (c1o1 + c3o1 * ( vx2 + vx3) + c9o2 * ( vx2 + vx3) * ( vx2 + vx3) - cu_sq); + (distAD.f[d0MM])[kbs ] = c1o54 * conc * (c1o1 + c3o1 * ( - vx2 - vx3) + c9o2 * ( - vx2 - vx3) * ( - vx2 - vx3) - cu_sq); + (distAD.f[d0PM])[kbn ] = c1o54 * conc * (c1o1 + c3o1 * ( vx2 - vx3) + c9o2 * ( vx2 - vx3) * ( vx2 - vx3) - cu_sq); + (distAD.f[d0MP])[kts ] = c1o54 * conc * (c1o1 + c3o1 * ( - vx2 + vx3) + c9o2 * ( - vx2 + vx3) * ( - vx2 + vx3) - cu_sq); + (distAD.f[dPPP])[ktne ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 + vx2 + vx3) + c9o2 * ( vx1 + vx2 + vx3) * ( vx1 + vx2 + vx3) - cu_sq); + (distAD.f[dMMM])[kbsw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 - vx2 - vx3) + c9o2 * (-vx1 - vx2 - vx3) * (-vx1 - vx2 - vx3) - cu_sq); + (distAD.f[dPPM])[kbne ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 + vx2 - vx3) + c9o2 * ( vx1 + vx2 - vx3) * ( vx1 + vx2 - vx3) - cu_sq); + (distAD.f[dMMP])[ktsw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 - vx2 + vx3) + c9o2 * (-vx1 - vx2 + vx3) * (-vx1 - vx2 + vx3) - cu_sq); + (distAD.f[dPMP])[ktse ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 - vx2 + vx3) + c9o2 * ( vx1 - vx2 + vx3) * ( vx1 - vx2 + vx3) - cu_sq); + (distAD.f[dMPM])[kbnw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 + vx2 - vx3) + c9o2 * (-vx1 + vx2 - vx3) * (-vx1 + vx2 - vx3) - cu_sq); + (distAD.f[dPMM])[kbse ] = c1o216 * conc * (c1o1 + c3o1 * ( vx1 - vx2 - vx3) + c9o2 * ( vx1 - vx2 - vx3) * ( vx1 - vx2 - vx3) - cu_sq); + (distAD.f[dMPP])[ktnw ] = c1o216 * conc * (c1o1 + c3o1 * (-vx1 + vx2 + vx3) + c9o2 * (-vx1 + vx2 + vx3) * (-vx1 + vx2 + vx3) - cu_sq); } } @@ -263,63 +263,63 @@ __global__ void InitAD27( // Distributions27 D27; // if (EvenOrOdd==true) // { -// D27.f[DIR_P00] = &DD27[DIR_P00 * size_Mat]; -// D27.f[DIR_M00] = &DD27[DIR_M00 * size_Mat]; -// D27.f[DIR_0P0] = &DD27[DIR_0P0 * size_Mat]; -// D27.f[DIR_0M0] = &DD27[DIR_0M0 * size_Mat]; -// D27.f[DIR_00P] = &DD27[DIR_00P * size_Mat]; -// D27.f[DIR_00M] = &DD27[DIR_00M * size_Mat]; -// D27.f[DIR_PP0] = &DD27[DIR_PP0 * size_Mat]; -// D27.f[DIR_MM0] = &DD27[DIR_MM0 * size_Mat]; -// D27.f[DIR_PM0] = &DD27[DIR_PM0 * size_Mat]; -// D27.f[DIR_MP0] = &DD27[DIR_MP0 * size_Mat]; -// D27.f[DIR_P0P] = &DD27[DIR_P0P * size_Mat]; -// D27.f[DIR_M0M] = &DD27[DIR_M0M * size_Mat]; -// D27.f[DIR_P0M] = &DD27[DIR_P0M * size_Mat]; -// D27.f[DIR_M0P] = &DD27[DIR_M0P * size_Mat]; -// D27.f[DIR_0PP] = &DD27[DIR_0PP * size_Mat]; -// D27.f[DIR_0MM] = &DD27[DIR_0MM * size_Mat]; -// D27.f[DIR_0PM] = &DD27[DIR_0PM * size_Mat]; -// D27.f[DIR_0MP] = &DD27[DIR_0MP * size_Mat]; -// D27.f[DIR_000] = &DD27[DIR_000 * size_Mat]; -// D27.f[DIR_PPP] = &DD27[DIR_PPP * size_Mat]; -// D27.f[DIR_MMP] = &DD27[DIR_MMP * size_Mat]; -// D27.f[DIR_PMP] = &DD27[DIR_PMP * size_Mat]; -// D27.f[DIR_MPP] = &DD27[DIR_MPP * size_Mat]; -// D27.f[DIR_PPM] = &DD27[DIR_PPM * size_Mat]; -// D27.f[DIR_MMM] = &DD27[DIR_MMM * size_Mat]; -// D27.f[DIR_PMM] = &DD27[DIR_PMM * size_Mat]; -// D27.f[DIR_MPM] = &DD27[DIR_MPM * size_Mat]; +// D27.f[dP00] = &DD27[dP00 * size_Mat]; +// D27.f[dM00] = &DD27[dM00 * size_Mat]; +// D27.f[d0P0] = &DD27[d0P0 * size_Mat]; +// D27.f[d0M0] = &DD27[d0M0 * size_Mat]; +// D27.f[d00P] = &DD27[d00P * size_Mat]; +// D27.f[d00M] = &DD27[d00M * size_Mat]; +// D27.f[dPP0] = &DD27[dPP0 * size_Mat]; +// D27.f[dMM0] = &DD27[dMM0 * size_Mat]; +// D27.f[dPM0] = &DD27[dPM0 * size_Mat]; +// D27.f[dMP0] = &DD27[dMP0 * size_Mat]; +// D27.f[dP0P] = &DD27[dP0P * size_Mat]; +// D27.f[dM0M] = &DD27[dM0M * size_Mat]; +// D27.f[dP0M] = &DD27[dP0M * size_Mat]; +// D27.f[dM0P] = &DD27[dM0P * size_Mat]; +// D27.f[d0PP] = &DD27[d0PP * size_Mat]; +// D27.f[d0MM] = &DD27[d0MM * size_Mat]; +// D27.f[d0PM] = &DD27[d0PM * size_Mat]; +// D27.f[d0MP] = &DD27[d0MP * size_Mat]; +// D27.f[d000] = &DD27[d000 * size_Mat]; +// D27.f[dPPP] = &DD27[dPPP * size_Mat]; +// D27.f[dMMP] = &DD27[dMMP * size_Mat]; +// D27.f[dPMP] = &DD27[dPMP * size_Mat]; +// D27.f[dMPP] = &DD27[dMPP * size_Mat]; +// D27.f[dPPM] = &DD27[dPPM * size_Mat]; +// D27.f[dMMM] = &DD27[dMMM * size_Mat]; +// D27.f[dPMM] = &DD27[dPMM * size_Mat]; +// D27.f[dMPM] = &DD27[dMPM * size_Mat]; // } // else // { -// D27.f[DIR_M00] = &DD27[DIR_P00 * size_Mat]; -// D27.f[DIR_P00] = &DD27[DIR_M00 * size_Mat]; -// D27.f[DIR_0M0] = &DD27[DIR_0P0 * size_Mat]; -// D27.f[DIR_0P0] = &DD27[DIR_0M0 * size_Mat]; -// D27.f[DIR_00M] = &DD27[DIR_00P * size_Mat]; -// D27.f[DIR_00P] = &DD27[DIR_00M * size_Mat]; -// D27.f[DIR_MM0] = &DD27[DIR_PP0 * size_Mat]; -// D27.f[DIR_PP0] = &DD27[DIR_MM0 * size_Mat]; -// D27.f[DIR_MP0] = &DD27[DIR_PM0 * size_Mat]; -// D27.f[DIR_PM0] = &DD27[DIR_MP0 * size_Mat]; -// D27.f[DIR_M0M] = &DD27[DIR_P0P * size_Mat]; -// D27.f[DIR_P0P] = &DD27[DIR_M0M * size_Mat]; -// D27.f[DIR_M0P] = &DD27[DIR_P0M * size_Mat]; -// D27.f[DIR_P0M] = &DD27[DIR_M0P * size_Mat]; -// D27.f[DIR_0MM] = &DD27[DIR_0PP * size_Mat]; -// D27.f[DIR_0PP] = &DD27[DIR_0MM * size_Mat]; -// D27.f[DIR_0MP] = &DD27[DIR_0PM * size_Mat]; -// D27.f[DIR_0PM] = &DD27[DIR_0MP * size_Mat]; -// D27.f[DIR_000] = &DD27[DIR_000 * size_Mat]; -// D27.f[DIR_MMM] = &DD27[DIR_PPP * size_Mat]; -// D27.f[DIR_PPM] = &DD27[DIR_MMP * size_Mat]; -// D27.f[DIR_MPM] = &DD27[DIR_PMP * size_Mat]; -// D27.f[DIR_PMM] = &DD27[DIR_MPP * size_Mat]; -// D27.f[DIR_MMP] = &DD27[DIR_PPM * size_Mat]; -// D27.f[DIR_PPP] = &DD27[DIR_MMM * size_Mat]; -// D27.f[DIR_MPP] = &DD27[DIR_PMM * size_Mat]; -// D27.f[DIR_PMP] = &DD27[DIR_MPM * size_Mat]; +// D27.f[dM00] = &DD27[dP00 * size_Mat]; +// D27.f[dP00] = &DD27[dM00 * size_Mat]; +// D27.f[d0M0] = &DD27[d0P0 * size_Mat]; +// D27.f[d0P0] = &DD27[d0M0 * size_Mat]; +// D27.f[d00M] = &DD27[d00P * size_Mat]; +// D27.f[d00P] = &DD27[d00M * size_Mat]; +// D27.f[dMM0] = &DD27[dPP0 * size_Mat]; +// D27.f[dPP0] = &DD27[dMM0 * size_Mat]; +// D27.f[dMP0] = &DD27[dPM0 * size_Mat]; +// D27.f[dPM0] = &DD27[dMP0 * size_Mat]; +// D27.f[dM0M] = &DD27[dP0P * size_Mat]; +// D27.f[dP0P] = &DD27[dM0M * size_Mat]; +// D27.f[dM0P] = &DD27[dP0M * size_Mat]; +// D27.f[dP0M] = &DD27[dM0P * size_Mat]; +// D27.f[d0MM] = &DD27[d0PP * size_Mat]; +// D27.f[d0PP] = &DD27[d0MM * size_Mat]; +// D27.f[d0MP] = &DD27[d0PM * size_Mat]; +// D27.f[d0PM] = &DD27[d0MP * size_Mat]; +// D27.f[d000] = &DD27[d000 * size_Mat]; +// D27.f[dMMM] = &DD27[dPPP * size_Mat]; +// D27.f[dPPM] = &DD27[dMMP * size_Mat]; +// D27.f[dMPM] = &DD27[dPMP * size_Mat]; +// D27.f[dPMM] = &DD27[dMPP * size_Mat]; +// D27.f[dMMP] = &DD27[dPPM * size_Mat]; +// D27.f[dPPP] = &DD27[dMMM * size_Mat]; +// D27.f[dMPP] = &DD27[dPMM * size_Mat]; +// D27.f[dPMP] = &DD27[dMPM * size_Mat]; // } // ////////////////////////////////////////////////////////////////////////// // real ConcD = Conc[k]; @@ -390,33 +390,33 @@ __global__ void InitAD27( // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); -// (D27.f[DIR_000])[kzero] = c8o27* ConcD*(c1o1-cu_sq); -// (D27.f[DIR_P00])[ke ] = c2o27* ConcD*(c1o1+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); -// (D27.f[DIR_M00])[kw ] = c2o27* ConcD*(c1o1+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); -// (D27.f[DIR_0P0])[kn ] = c2o27* ConcD*(c1o1+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); -// (D27.f[DIR_0M0])[ks ] = c2o27* ConcD*(c1o1+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); -// (D27.f[DIR_00P])[kt ] = c2o27* ConcD*(c1o1+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); -// (D27.f[DIR_00M])[kb ] = c2o27* ConcD*(c1o1+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); -// (D27.f[DIR_PP0])[kne ] = c1o54* ConcD*(c1o1+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); -// (D27.f[DIR_MM0])[ksw ] = c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); -// (D27.f[DIR_PM0])[kse ] = c1o54* ConcD*(c1o1+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); -// (D27.f[DIR_MP0])[knw ] = c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); -// (D27.f[DIR_P0P])[kte ] = c1o54* ConcD*(c1o1+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); -// (D27.f[DIR_M0M])[kbw ] = c1o54* ConcD*(c1o1+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); -// (D27.f[DIR_P0M])[kbe ] = c1o54* ConcD*(c1o1+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); -// (D27.f[DIR_M0P])[ktw ] = c1o54* ConcD*(c1o1+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); -// (D27.f[DIR_0PP])[ktn ] = c1o54* ConcD*(c1o1+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); -// (D27.f[DIR_0MM])[kbs ] = c1o54* ConcD*(c1o1+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); -// (D27.f[DIR_0PM])[kbn ] = c1o54* ConcD*(c1o1+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); -// (D27.f[DIR_0MP])[kts ] = c1o54* ConcD*(c1o1+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); -// (D27.f[DIR_PPP])[ktne ] = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); -// (D27.f[DIR_MMM])[kbsw ] = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); -// (D27.f[DIR_PPM])[kbne ] = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); -// (D27.f[DIR_MMP])[ktsw ] = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); -// (D27.f[DIR_PMP])[ktse ] = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); -// (D27.f[DIR_MPM])[kbnw ] = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); -// (D27.f[DIR_PMM])[kbse ] = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); -// (D27.f[DIR_MPP])[ktnw ] = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); +// (D27.f[d000])[kzero] = c8o27* ConcD*(c1o1-cu_sq); +// (D27.f[dP00])[ke ] = c2o27* ConcD*(c1o1+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); +// (D27.f[dM00])[kw ] = c2o27* ConcD*(c1o1+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); +// (D27.f[d0P0])[kn ] = c2o27* ConcD*(c1o1+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); +// (D27.f[d0M0])[ks ] = c2o27* ConcD*(c1o1+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); +// (D27.f[d00P])[kt ] = c2o27* ConcD*(c1o1+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); +// (D27.f[d00M])[kb ] = c2o27* ConcD*(c1o1+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); +// (D27.f[dPP0])[kne ] = c1o54* ConcD*(c1o1+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); +// (D27.f[dMM0])[ksw ] = c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); +// (D27.f[dPM0])[kse ] = c1o54* ConcD*(c1o1+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); +// (D27.f[dMP0])[knw ] = c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); +// (D27.f[dP0P])[kte ] = c1o54* ConcD*(c1o1+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); +// (D27.f[dM0M])[kbw ] = c1o54* ConcD*(c1o1+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); +// (D27.f[dP0M])[kbe ] = c1o54* ConcD*(c1o1+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); +// (D27.f[dM0P])[ktw ] = c1o54* ConcD*(c1o1+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); +// (D27.f[d0PP])[ktn ] = c1o54* ConcD*(c1o1+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); +// (D27.f[d0MM])[kbs ] = c1o54* ConcD*(c1o1+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); +// (D27.f[d0PM])[kbn ] = c1o54* ConcD*(c1o1+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); +// (D27.f[d0MP])[kts ] = c1o54* ConcD*(c1o1+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); +// (D27.f[dPPP])[ktne ] = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); +// (D27.f[dMMM])[kbsw ] = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); +// (D27.f[dPPM])[kbne ] = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); +// (D27.f[dMMP])[ktsw ] = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); +// (D27.f[dPMP])[ktse ] = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); +// (D27.f[dMPM])[kbnw ] = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); +// (D27.f[dPMM])[kbse ] = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); +// (D27.f[dMPP])[ktnw ] = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // } // } diff --git a/src/gpu/VirtualFluids_GPU/GPU/KineticEnergyAnalyzer.cu b/src/gpu/core/GPU/KineticEnergyAnalyzer.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/GPU/KineticEnergyAnalyzer.cu rename to src/gpu/core/GPU/KineticEnergyAnalyzer.cu diff --git a/src/gpu/VirtualFluids_GPU/GPU/KineticEnergyAnalyzer.h b/src/gpu/core/GPU/KineticEnergyAnalyzer.h similarity index 73% rename from src/gpu/VirtualFluids_GPU/GPU/KineticEnergyAnalyzer.h rename to src/gpu/core/GPU/KineticEnergyAnalyzer.h index 11759c24460a1541d9aa66e325e6b04c15c1d488..0ca95bc1bfd51cce48b9aa8ce248e99b49419523 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/KineticEnergyAnalyzer.h +++ b/src/gpu/core/GPU/KineticEnergyAnalyzer.h @@ -6,13 +6,13 @@ -#include "PointerDefinitions.h" -#include "DataTypes.h" -#include "VirtualFluids_GPU_export.h" +#include <basics/PointerDefinitions.h> +#include <basics/DataTypes.h> + class Parameter; -class VIRTUALFLUIDS_GPU_EXPORT KineticEnergyAnalyzer +class KineticEnergyAnalyzer { private: diff --git a/src/gpu/VirtualFluids_GPU/GPU/LBMKernel.cu b/src/gpu/core/GPU/LBMKernel.cu similarity index 89% rename from src/gpu/VirtualFluids_GPU/GPU/LBMKernel.cu rename to src/gpu/core/GPU/LBMKernel.cu index e9bd3ea551e93cb82baa85bf759d93b7a7d4dde0..67aa3aead41b0d14c8dacec833f3b1f94fd472ca 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/LBMKernel.cu +++ b/src/gpu/core/GPU/LBMKernel.cu @@ -18,532 +18,6 @@ #include "Parameter/Parameter.h" ////////////////////////////////////////////////////////////////////////// -void KernelCas27( - unsigned int grid_nx, - unsigned int grid_ny, - unsigned int grid_nz, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - dim3 threads ( grid_nx, 1, 1 ); - dim3 grid ( grid_ny, grid_nz ); // Gitter fuer Kollision und Propagation - - LB_Kernel_Casc27<<< grid, threads >>>( - s9, - bcMatD, - neighborX, - neighborY, - neighborZ, - DD, - numberOfLBnodes, - EvenOrOdd); - getLastCudaError("LB_Kernel_Casc27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void KernelCasSP27( - unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes); - - LB_Kernel_Casc_SP_27<<< grid.grid, grid.threads >>>( - s9, - bcMatD, - neighborX, - neighborY, - neighborZ, - DD, - numberOfLBnodes, - EvenOrOdd); - getLastCudaError("LB_Kernel_Casc_SP_27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void KernelCasSPMS27( - unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes); - - LB_Kernel_Casc_SP_MS_27<<< grid.grid, grid.threads >>>( - s9, - bcMatD, - neighborX, - neighborY, - neighborZ, - DD, - numberOfLBnodes, - EvenOrOdd); - getLastCudaError("LB_Kernel_Casc_SP_MS_27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void KernelCasSPMSOHM27( - unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes); - - LB_Kernel_Casc_SP_MS_OHM_27<<< grid.grid, grid.threads >>>( - s9, - bcMatD, - neighborX, - neighborY, - neighborZ, - DD, - numberOfLBnodes, - EvenOrOdd); - getLastCudaError("LB_Kernel_Casc_SP_MS_OHM_27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void KernelKumCompSRTSP27( - unsigned int numberOfThreads, - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DDStart, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes); - - LB_Kernel_Kum_New_Comp_SRT_SP_27 <<< grid.grid, grid.threads >>>( - omega, - bcMatD, - neighborX, - neighborY, - neighborZ, - DDStart, - numberOfLBnodes, - level, - forces, - EvenOrOdd); - getLastCudaError("LB_Kernel_Kum_New_Comp_SRT_SP_27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void KernelKum1hSP27( - unsigned int numberOfThreads, - real omega, - real deltaPhi, - real angularVelocity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* coordX, - real* coordY, - real* coordZ, - real* DDStart, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes); - - LB_Kernel_Kum_1h_SP_27<<< grid.grid, grid.threads >>>( - omega, - deltaPhi, - angularVelocity, - bcMatD, - neighborX, - neighborY, - neighborZ, - coordX, - coordY, - coordZ, - DDStart, - numberOfLBnodes, - EvenOrOdd); - getLastCudaError("LB_Kernel_Kum_1h_SP_27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void KernelCascadeSP27( - unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes); - - LB_Kernel_Cascade_SP_27<<< grid.grid, grid.threads >>>( - s9, - bcMatD, - neighborX, - neighborY, - neighborZ, - DD, - numberOfLBnodes, - EvenOrOdd); - getLastCudaError("LB_Kernel_Cascade_SP_27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void KernelKumNewSP27( - unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes); - - - LB_Kernel_Kum_New_SP_27<<< grid.grid, grid.threads >>>( - s9, - bcMatD, - neighborX, - neighborY, - neighborZ, - DD, - numberOfLBnodes, - EvenOrOdd); - getLastCudaError("LB_Kernel_Kum_New_SP_27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void KernelKumNewCompSP27( - unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - int size_Array, - int level, - real* forces, - bool EvenOrOdd) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes); - - //LB_Kernel_Kum_New_Comp_SP_27<<< grid.grid, grid.threads >>>( s9, - // bcMatD, - // neighborX, - // neighborY, - // neighborZ, - // DD, - // numberOfLBnodes, - // level, - // forces, - // EvenOrOdd); - //getLastCudaError("LB_Kernel_Kum_New_Comp_SP_27 execution failed"); -} - -////////////////////////////////////////////////////////////////////////// -void CumulantOnePreconditionedErrorDiffusionChimCompSP27( - unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - int size_Array, - int level, - real* forces, - bool EvenOrOdd) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes); - - Cumulant_One_preconditioned_errorDiffusion_chim_Comp_SP_27 <<< grid.grid, grid.threads >>>( - s9, - bcMatD, - neighborX, - neighborY, - neighborZ, - DD, - numberOfLBnodes, - level, - forces, - EvenOrOdd); - getLastCudaError("Cumulant_One_preconditioned_chim_Comp_SP_27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void CumulantOnePreconditionedChimCompSP27( - unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - int size_Array, - int level, - real* forces, - bool EvenOrOdd) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes); - - Cumulant_One_preconditioned_chim_Comp_SP_27 <<< grid.grid, grid.threads >>>( - s9, - bcMatD, - neighborX, - neighborY, - neighborZ, - DD, - numberOfLBnodes, - level, - forces, - EvenOrOdd); - getLastCudaError("Cumulant_One_preconditioned_chim_Comp_SP_27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void CumulantOneChimCompSP27( - unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - int size_Array, - int level, - real* forces, - bool EvenOrOdd) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes); - - Cumulant_One_chim_Comp_SP_27 <<< grid.grid, grid.threads >>>( - s9, - bcMatD, - neighborX, - neighborY, - neighborZ, - DD, - numberOfLBnodes, - level, - forces, - EvenOrOdd); - getLastCudaError("Cumulant_One_chim_Comp_SP_27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void KernelKumIsoTestSP27( - unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - real* dxxUx, - real* dyyUy, - real* dzzUz, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes); - - LB_Kernel_Kum_IsoTest_SP_27<<< grid.grid, grid.threads >>>( - s9, - bcMatD, - neighborX, - neighborY, - neighborZ, - DD, - dxxUx, - dyyUy, - dzzUz, - numberOfLBnodes, - EvenOrOdd); - getLastCudaError("LB_Kernel_Kum_IsoTest_SP_27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void KernelKumCompSP27( - unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes); - - - LB_Kernel_Kum_Comp_SP_27<<< grid.grid, grid.threads >>>( - s9, - bcMatD, - neighborX, - neighborY, - neighborZ, - DD, - numberOfLBnodes, - EvenOrOdd); - getLastCudaError("LB_Kernel_Kum_Comp_SP_27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void KernelPMCumOneCompSP27( - unsigned int numberOfThreads, - real omega, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - unsigned long long numberOfLBnodes, - int level, - real* forces, - real porosity, - real darcy, - real forchheimer, - unsigned int sizeOfPorousMedia, - unsigned int* nodeIdsPorousMedia, - bool EvenOrOdd) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes); - - LB_Kernel_PM_Cum_One_Comp_SP_27 <<< grid.grid, grid.threads >>>( - omega, - neighborX, - neighborY, - neighborZ, - DD, - numberOfLBnodes, - level, - forces, - porosity, - darcy, - forchheimer, - sizeOfPorousMedia, - nodeIdsPorousMedia, - EvenOrOdd); - getLastCudaError("LB_Kernel_PM_Cum_One_Comp_SP_27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void KernelWaleBySoniMalavCumAA2016CompSP27( - unsigned int numberOfThreads, - real s9, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* neighborWSB, - real* veloX, - real* veloY, - real* veloZ, - real* DD, - real* turbulentViscosity, - unsigned long long numberOfLBnodes, - int size_Array, - int level, - real* forces, - bool EvenOrOdd) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes); - - LB_Kernel_WaleBySoniMalav_Cum_AA2016_Comp_SP_27 <<< grid.grid, grid.threads >>>( - s9, - bcMatD, - neighborX, - neighborY, - neighborZ, - neighborWSB, - veloX, - veloY, - veloZ, - DD, - turbulentViscosity, - numberOfLBnodes, - level, - forces, - EvenOrOdd); - getLastCudaError("LB_Kernel_WaleBySoniMalav_Cum_AA2016_Comp_SP_27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void KernelADincomp7( - unsigned int numberOfThreads, - real diffusivity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - real* DD7, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes); - - LB_Kernel_AD_Incomp_7<<< grid.grid, grid.threads >>>( - diffusivity, - bcMatD, - neighborX, - neighborY, - neighborZ, - DD, - DD7, - numberOfLBnodes, - EvenOrOdd); - getLastCudaError("LB_Kernel_AD_Incomp_7 execution failed"); -} -////////////////////////////////////////////////////////////////////////// -void KernelADincomp27( - unsigned int numberOfThreads, - real diffusivity, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* DD, - real* DD27, - unsigned long long numberOfLBnodes, - bool EvenOrOdd) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes); - - LB_Kernel_AD_Incomp_27<<< grid.grid, grid.threads >>>( - diffusivity, - bcMatD, - neighborX, - neighborY, - neighborZ, - DD, - DD27, - numberOfLBnodes, - EvenOrOdd); - getLastCudaError("LB_Kernel_AD_Incomp_27 execution failed"); -} -////////////////////////////////////////////////////////////////////////// void Init27( int myid, int numprocs, @@ -618,37 +92,6 @@ void InitNonEqPartSP27( getLastCudaError("LBInitNonEqPartSP27 execution failed"); } ////////////////////////////////////////////////////////////////////////// -void InitThS7( - unsigned int numberOfThreads, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - unsigned int* geoD, - real* Conc, - real* ux, - real* uy, - real* uz, - unsigned long long numberOfLBnodes, - real* DD7, - bool EvenOrOdd) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes); - - InitAD7<<< grid.grid, grid.threads >>>( - neighborX, - neighborY, - neighborZ, - geoD, - Conc, - ux, - uy, - uz, - numberOfLBnodes, - DD7, - EvenOrOdd); - getLastCudaError("InitAD7 execution failed"); -} -////////////////////////////////////////////////////////////////////////// void InitADDev27( unsigned int numberOfThreads, unsigned int* neighborX, @@ -680,45 +123,6 @@ void InitADDev27( getLastCudaError("InitAD27 execution failed"); } ////////////////////////////////////////////////////////////////////////// -void PostProcessorF3_2018Fehlberg( - unsigned int numberOfThreads, - real omega, - unsigned int* bcMatD, - unsigned int* neighborX, - unsigned int* neighborY, - unsigned int* neighborZ, - real* rhoOut, - real* vxOut, - real* vyOut, - real* vzOut, - real* DDStart, - real* G6, - unsigned long long numberOfLBnodes, - int level, - real* forces, - bool EvenOrOdd) -{ - vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(numberOfThreads, numberOfLBnodes); - - LB_PostProcessor_F3_2018_Fehlberg <<< grid.grid, grid.threads >>> ( - omega, - bcMatD, - neighborX, - neighborY, - neighborZ, - rhoOut, - vxOut, - vyOut, - vzOut, - DDStart, - G6, - numberOfLBnodes, - level, - forces, - EvenOrOdd); - getLastCudaError("LB_PostProcessor_F3_2018_Fehlberg execution failed"); -} -////////////////////////////////////////////////////////////////////////// void CalcMac27( real* vxD, real* vyD, @@ -1660,38 +1064,6 @@ void QADDev7( ////////////////////////////////////////////////////////////////////////// -// Other advection diffusion kernels are in kernel factory :( -void FactorizedCentralMomentsAdvectionDiffusionDeviceKernel( - uint numberOfThreads, - real omegaDiffusivity, - uint* typeOfGridNode, - uint* neighborX, - uint* neighborY, - uint* neighborZ, - real* distributions, - real* distributionsAD, - unsigned long long numberOfLBnodes, - real* forces, - bool isEvenTimestep) -{ - int Grid = (numberOfLBnodes / numberOfThreads) + 1; - dim3 grid(Grid, 1, 1); - dim3 threads(numberOfThreads, 1, 1); - - Factorized_Central_Moments_Advection_Diffusion_Device_Kernel <<< grid, threads >>> ( - omegaDiffusivity, - typeOfGridNode, - neighborX, - neighborY, - neighborZ, - distributions, - distributionsAD, - numberOfLBnodes, - forces, - isEvenTimestep); - getLastCudaError("Factorized_Central_Moments_Advection_Diffusion_Device_Kernel execution failed"); -} - ////////////////////////////////////////////////////////////////////////// void ADSlipVelDevComp( uint numberOfThreads, @@ -2958,7 +2330,7 @@ void QPressNoRhoDev27(LBMSimulationParameter* parameterDevice, QforBoundaryCondi parameterDevice->neighborZ, parameterDevice->numberOfNodes, parameterDevice->isEvenTimestep, - vf::lbm::dir::DIR_P00); + vf::lbm::dir::dP00); getLastCudaError("QPressNoRhoDevice27 execution failed"); } ////////////////////////////////////////////////////////////////////////// @@ -2979,7 +2351,7 @@ void QPressZeroRhoOutflowDev27(LBMSimulationParameter* parameterDevice, QforBoun parameterDevice->neighborZ, parameterDevice->numberOfNodes, parameterDevice->isEvenTimestep, - vf::lbm::dir::DIR_P00, + vf::lbm::dir::dP00, parameterDevice->outflowPressureCorrectionFactor); getLastCudaError("QPressZeroRhoOutflowDevice27 execution failed"); } diff --git a/src/gpu/core/GPU/NoSlipBCs27.cu b/src/gpu/core/GPU/NoSlipBCs27.cu new file mode 100644 index 0000000000000000000000000000000000000000..ff98f16ef79fd86c15f57a6a90e32daaa3e07440 --- /dev/null +++ b/src/gpu/core/GPU/NoSlipBCs27.cu @@ -0,0 +1,2548 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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/>. +// +//! \file NoSlipBCs27.cu +//! \ingroup GPU +//! \author Martin Schoenherr, Anna Wellmann +//====================================================================================== +#include "LBM/LB.h" +#include "lbm/constants/D3Q27.h" +#include <basics/constants/NumericConstants.h> +#include "LBM/GPUHelperFunctions/KernelUtilities.h" + +using namespace vf::basics::constant; +using namespace vf::lbm::dir; +using namespace vf::gpu; + +////////////////////////////////////////////////////////////////////////////// +__global__ void QDevice3rdMomentsComp27( + real* distributions, + int* subgridDistanceIndices, + real* subgridDistances, + unsigned int numberOfBCnodes, + real omega, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + Distributions27 D; + if (isEvenTimestep==true) + { + 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]; + } + //////////////////////////////////////////////////////////////////////////////// + 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 = &subgridDistances[dP00 * numberOfBCnodes]; + q_dirW = &subgridDistances[dM00 * numberOfBCnodes]; + q_dirN = &subgridDistances[d0P0 * numberOfBCnodes]; + q_dirS = &subgridDistances[d0M0 * numberOfBCnodes]; + q_dirT = &subgridDistances[d00P * numberOfBCnodes]; + q_dirB = &subgridDistances[d00M * numberOfBCnodes]; + q_dirNE = &subgridDistances[dPP0 * numberOfBCnodes]; + q_dirSW = &subgridDistances[dMM0 * numberOfBCnodes]; + q_dirSE = &subgridDistances[dPM0 * numberOfBCnodes]; + q_dirNW = &subgridDistances[dMP0 * numberOfBCnodes]; + q_dirTE = &subgridDistances[dP0P * numberOfBCnodes]; + q_dirBW = &subgridDistances[dM0M * numberOfBCnodes]; + q_dirBE = &subgridDistances[dP0M * numberOfBCnodes]; + q_dirTW = &subgridDistances[dM0P * numberOfBCnodes]; + q_dirTN = &subgridDistances[d0PP * numberOfBCnodes]; + q_dirBS = &subgridDistances[d0MM * numberOfBCnodes]; + q_dirBN = &subgridDistances[d0PM * numberOfBCnodes]; + q_dirTS = &subgridDistances[d0MP * numberOfBCnodes]; + q_dirTNE = &subgridDistances[dPPP * numberOfBCnodes]; + q_dirTSW = &subgridDistances[dMMP * numberOfBCnodes]; + q_dirTSE = &subgridDistances[dPMP * numberOfBCnodes]; + q_dirTNW = &subgridDistances[dMPP * numberOfBCnodes]; + q_dirBNE = &subgridDistances[dPPM * numberOfBCnodes]; + q_dirBSW = &subgridDistances[dMMM * numberOfBCnodes]; + q_dirBSE = &subgridDistances[dPMM * numberOfBCnodes]; + q_dirBNW = &subgridDistances[dMPM * numberOfBCnodes]; + //////////////////////////////////////////////////////////////////////////////// + //index + unsigned int numberOfNodesK = subgridDistanceIndices[k]; + unsigned int kzero= numberOfNodesK; + unsigned int ke = numberOfNodesK; + unsigned int kw = neighborX[numberOfNodesK]; + unsigned int kn = numberOfNodesK; + unsigned int ks = neighborY[numberOfNodesK]; + unsigned int kt = numberOfNodesK; + unsigned int kb = neighborZ[numberOfNodesK]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = numberOfNodesK; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = numberOfNodesK; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = numberOfNodesK; + 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 = numberOfNodesK; + 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, feq, q, m3; + 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); + + ////////////////////////////////////////////////////////////////////////// + if (isEvenTimestep==false) + { + 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]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //Test + //(D.f[d000])[k]=c1o10; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + //ToDo anders klammern !!!!!! + + q = q_dirE[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_E - f_W - c2o1 * drho * c2o27 * (c3o1*( vx1 )); + feq=c2o27* (drho/*+three*( vx1 )*/+c9o2*( vx1 )*( vx1 ) * (c1o1 + drho)-cu_sq); + (D.f[dM00])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W-m3+(f_E+f_W-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_E+f_W))/(c1o1+q)+(m3*c1o2); + //(D.f[dM00])[kw]=zero; + } + + q = q_dirW[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_W - f_E - c2o1 * drho * c2o27 * (c3o1*(-vx1 )); + feq=c2o27* (drho/*+three*(-vx1 )*/+c9o2*(-vx1 )*(-vx1 ) * (c1o1 + drho)-cu_sq); + (D.f[dP00])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E-m3+(f_W+f_E-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_W+f_E))/(c1o1+q)+(m3*c1o2); + //(D.f[dP00])[ke]=zero; + } + + q = q_dirN[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_N - f_S - c2o1 * drho * c2o27 * (c3o1*( vx2 )); + feq=c2o27* (drho/*+three*( vx2 )*/+c9o2*( vx2 )*( vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[d0M0])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S-m3+(f_N+f_S-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_N+f_S))/(c1o1+q)+(m3*c1o2); + //(D.f[d0M0])[ks]=zero; + } + + q = q_dirS[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_S - f_N - c2o1 * drho * c2o27 * (c3o1*( -vx2 )); + feq=c2o27* (drho/*+three*( -vx2 )*/+c9o2*( -vx2 )*( -vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[d0P0])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N-m3+(f_S+f_N-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_S+f_N))/(c1o1+q)+(m3*c1o2); + //(D.f[d0P0])[kn]=zero; + } + + q = q_dirT[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_T - f_B - c2o1 * drho * c2o27 * (c3o1*( vx3)); + feq=c2o27* (drho/*+three*( vx3)*/+c9o2*( vx3)*( vx3) * (c1o1 + drho)-cu_sq); + (D.f[d00M])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B-m3+(f_T+f_B-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_T+f_B))/(c1o1+q)+(m3*c1o2); + //(D.f[d00M])[kb]=one; + } + + q = q_dirB[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_B - f_T - c2o1 * drho * c2o27 * (c3o1*( -vx3)); + feq=c2o27* (drho/*+three*( -vx3)*/+c9o2*( -vx3)*( -vx3) * (c1o1 + drho)-cu_sq); + (D.f[d00P])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T-m3+(f_B+f_T-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_B+f_T))/(c1o1+q)+(m3*c1o2); + //(D.f[d00P])[kt]=zero; + } + + q = q_dirNE[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_NE - f_SW - c2o1 * drho * c1o54 * (c3o1*( vx1+vx2 )); + feq=c1o54* (drho/*+three*( vx1+vx2 )*/+c9o2*( vx1+vx2 )*( vx1+vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dMM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW-m3+(f_NE+f_SW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_NE+f_SW))/(c1o1+q)+(m3*c1o2); + //(D.f[dMM0])[ksw]=zero; + } + + q = q_dirSW[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_SW - f_NE - c2o1 * drho * c1o54 * (c3o1*(-vx1-vx2 )); + feq=c1o54* (drho/*+three*(-vx1-vx2 )*/+c9o2*(-vx1-vx2 )*(-vx1-vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dPP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE-m3+(f_SW+f_NE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_SW+f_NE))/(c1o1+q)+(m3*c1o2); + //(D.f[dPP0])[kne]=zero; + } + + q = q_dirSE[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_SE - f_NW - c2o1 * drho * c1o54 * (c3o1*( vx1-vx2 )); + feq=c1o54* (drho/*+three*( vx1-vx2 )*/+c9o2*( vx1-vx2 )*( vx1-vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dMP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW-m3+(f_SE+f_NW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_SE+f_NW))/(c1o1+q)+(m3*c1o2); + //(D.f[dMP0])[knw]=zero; + } + + q = q_dirNW[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_NW - f_SE - c2o1 * drho * c1o54 * (c3o1*(-vx1+vx2 )); + feq=c1o54* (drho/*+three*(-vx1+vx2 )*/+c9o2*(-vx1+vx2 )*(-vx1+vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dPM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE-m3+(f_NW+f_SE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_NW+f_SE))/(c1o1+q)+(m3*c1o2); + //(D.f[dPM0])[kse]=zero; + } + + q = q_dirTE[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_TE - f_BW - c2o1 * drho * c1o54 * (c3o1*( vx1 +vx3)); + feq=c1o54* (drho/*+three*( vx1 +vx3)*/+c9o2*( vx1 +vx3)*( vx1 +vx3) * (c1o1 + drho)-cu_sq); + (D.f[dM0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW-m3+(f_TE+f_BW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TE+f_BW))/(c1o1+q)+(m3*c1o2); + //(D.f[dM0M])[kbw]=zero; + } + + q = q_dirBW[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_BW - f_TE - c2o1 * drho * c1o54 * (c3o1*(-vx1 -vx3)); + feq=c1o54* (drho/*+three*(-vx1 -vx3)*/+c9o2*(-vx1 -vx3)*(-vx1 -vx3) * (c1o1 + drho)-cu_sq); + (D.f[dP0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE-m3+(f_BW+f_TE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BW+f_TE))/(c1o1+q)+(m3*c1o2); + //(D.f[dP0P])[kte]=zero; + } + + q = q_dirBE[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_BE - f_TW - c2o1 * drho * c1o54 * (c3o1*( vx1 -vx3)); + feq=c1o54* (drho/*+three*( vx1 -vx3)*/+c9o2*( vx1 -vx3)*( vx1 -vx3) * (c1o1 + drho)-cu_sq); + (D.f[dM0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW-m3+(f_BE+f_TW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BE+f_TW))/(c1o1+q)+(m3*c1o2); + //(D.f[dM0P])[ktw]=zero; + } + + q = q_dirTW[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_TW - f_BE - c2o1 * drho * c1o54 * (c3o1*(-vx1 +vx3)); + feq=c1o54* (drho/*+three*(-vx1 +vx3)*/+c9o2*(-vx1 +vx3)*(-vx1 +vx3) * (c1o1 + drho)-cu_sq); + (D.f[dP0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE-m3+(f_TW+f_BE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TW+f_BE))/(c1o1+q)+(m3*c1o2); + //(D.f[dP0M])[kbe]=zero; + } + + q = q_dirTN[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_TN - f_BS - c2o1 * drho * c1o54 * (c3o1*( vx2+vx3)); + feq=c1o54* (drho/*+three*( vx2+vx3)*/+c9o2*( vx2+vx3)*( vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS-m3+(f_TN+f_BS-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TN+f_BS))/(c1o1+q)+(m3*c1o2); + //(D.f[d0MM])[kbs]=zero; + } + + q = q_dirBS[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_BS - f_TN - c2o1 * drho * c1o54 * (c3o1*( -vx2-vx3)); + feq=c1o54* (drho/*+three*( -vx2-vx3)*/+c9o2*( -vx2-vx3)*( -vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN-m3+(f_BS+f_TN-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BS+f_TN))/(c1o1+q)+(m3*c1o2); + //(D.f[d0PP])[ktn]=zero; + } + + q = q_dirBN[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_BN - f_TS - c2o1 * drho * c1o54 * (c3o1*( vx2-vx3)); + feq=c1o54* (drho/*+three*( vx2-vx3)*/+c9o2*( vx2-vx3)*( vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS-m3+(f_BN+f_TS-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BN+f_TS))/(c1o1+q)+(m3*c1o2); + //(D.f[d0MP])[kts]=zero; + } + + q = q_dirTS[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_TS - f_BN - c2o1 * drho * c1o54 * (c3o1*( -vx2+vx3)); + feq=c1o54* (drho/*+three*( -vx2+vx3)*/+c9o2*( -vx2+vx3)*( -vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN-m3+(f_TS+f_BN-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TS+f_BN))/(c1o1+q)+(m3*c1o2); + //(D.f[d0PM])[kbn]=zero; + } + + q = q_dirTNE[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_TNE - f_BSW - c2o1 * drho * c1o216 * (c3o1*( vx1+vx2+vx3)); + feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMMM])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW-m3+(f_TNE+f_BSW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TNE+f_BSW))/(c1o1+q)+(m3*c1o2); + //(D.f[dMMM])[kbsw]=zero; + } + + q = q_dirBSW[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_BSW - f_TNE - c2o1 * drho * c1o216 * (c3o1*(-vx1-vx2-vx3)); + feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPPP])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE-m3+(f_BSW+f_TNE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BSW+f_TNE))/(c1o1+q)+(m3*c1o2); + //(D.f[dPPP])[ktne]=zero; + } + + q = q_dirBNE[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_BNE - f_TSW - c2o1 * drho * c1o216 * (c3o1*( vx1+vx2-vx3)); + feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMMP])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW-m3+(f_BNE+f_TSW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BNE+f_TSW))/(c1o1+q)+(m3*c1o2); + //(D.f[dMMP])[ktsw]=zero; + } + + q = q_dirTSW[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_TSW - f_BNE - c2o1 * drho * c1o216 * (c3o1*(-vx1-vx2+vx3)); + feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPPM])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE-m3+(f_TSW+f_BNE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TSW+f_BNE))/(c1o1+q)+(m3*c1o2); + //(D.f[dPPM])[kbne]=zero; + } + + q = q_dirTSE[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_TSE - f_BNW - c2o1 * drho * c1o216 * (c3o1*( vx1-vx2+vx3)); + feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMPM])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW-m3+(f_TSE+f_BNW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TSE+f_BNW))/(c1o1+q)+(m3*c1o2); + //(D.f[dMPM])[kbnw]=zero; + } + + q = q_dirBNW[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_BNW - f_TSE - c2o1 * drho * c1o216 * (c3o1*(-vx1+vx2-vx3)); + feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPMP])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE-m3+(f_BNW+f_TSE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BNW+f_TSE))/(c1o1+q)+(m3*c1o2); + //(D.f[dPMP])[ktse]=zero; + } + + q = q_dirBSE[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_BSE - f_TNW - c2o1 * drho * c1o216 * (c3o1*( vx1-vx2-vx3)); + feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMPP])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW-m3+(f_BSE+f_TNW-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_BSE+f_TNW))/(c1o1+q)+(m3*c1o2); + //(D.f[dMPP])[ktnw]=zero; + } + + q = q_dirTNW[k]; + if (q>=c0o1 && q<=c1o1) + { + m3 = f_TNW - f_BSE - c2o1 * drho * c1o216 * (c3o1*(-vx1+vx2+vx3)); + feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPMM])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE-m3+(f_TNW+f_BSE-c2o1*feq*omega)/(c1o1-omega))*c1o2+(q*(f_TNW+f_BSE))/(c1o1+q)+(m3*c1o2); + //(D.f[dPMM])[kbse]=zero; + } + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void QDeviceIncompHighNu27( + real* DD, + 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]; + } + //////////////////////////////////////////////////////////////////////////////// + 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 numberOfNodesK = k_Q[k]; + unsigned int kzero= numberOfNodesK; + unsigned int ke = numberOfNodesK; + unsigned int kw = neighborX[numberOfNodesK]; + unsigned int kn = numberOfNodesK; + unsigned int ks = neighborY[numberOfNodesK]; + unsigned int kt = numberOfNodesK; + unsigned int kb = neighborZ[numberOfNodesK]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = numberOfNodesK; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = numberOfNodesK; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = numberOfNodesK; + 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 = numberOfNodesK; + 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_E = (D.f[dP00])[ke ]; + f_W = (D.f[dM00])[kw ]; + f_N = (D.f[d0P0])[kn ]; + f_S = (D.f[d0M0])[ks ]; + f_T = (D.f[d00P])[kt ]; + f_B = (D.f[d00M])[kb ]; + f_NE = (D.f[dPP0])[kne ]; + f_SW = (D.f[dMM0])[ksw ]; + f_SE = (D.f[dPM0])[kse ]; + f_NW = (D.f[dMP0])[knw ]; + f_TE = (D.f[dP0P])[kte ]; + f_BW = (D.f[dM0M])[kbw ]; + f_BE = (D.f[dP0M])[kbe ]; + f_TW = (D.f[dM0P])[ktw ]; + f_TN = (D.f[d0PP])[ktn ]; + f_BS = (D.f[d0MM])[kbs ]; + f_BN = (D.f[d0PM])[kbn ]; + f_TS = (D.f[d0MP])[kts ]; + f_TNE = (D.f[dPPP])[ktne ]; + f_TSW = (D.f[dMMP])[ktsw ]; + f_TSE = (D.f[dPMP])[ktse ]; + f_TNW = (D.f[dMPP])[ktnw ]; + f_BNE = (D.f[dPPM])[kbne ]; + f_BSW = (D.f[dMMM])[kbsw ]; + f_BSE = (D.f[dPMM])[kbse ]; + f_BNW = (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 + ((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));// / (one + 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));// / (one + 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));// / (one + drho); + + real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);// * (one + drho); + + ////////////////////////////////////////////////////////////////////////// + if (isEvenTimestep==false) + { + 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]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //Test + //(D.f[d000])[k]=c1o10; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real VeloX = c0o1; + real VeloY = c0o1; + real VeloZ = c0o1; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + //ToDo anders klammern !!!!!! + + q = q_dirE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( vx1 )*/+c9o2*( vx1 )*( vx1 ) /** (one + drho)*/-cu_sq); + (D.f[dM00])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX )) / (q + c1o1) ; + } + + q = q_dirW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*(-vx1 )*/+c9o2*(-vx1 )*(-vx1 ) /** (one + drho)*/-cu_sq); + (D.f[dP00])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX )) / (q + c1o1) ; + } + + q = q_dirN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( vx2 )*/+c9o2*( vx2 )*( vx2 ) /** (one + drho)*/-cu_sq); + (D.f[d0M0])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY )) / (q + c1o1) ; + } + + q = q_dirS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( -vx2 )*/+c9o2*( -vx2 )*( -vx2 ) /** (one + drho)*/-cu_sq); + (D.f[d0P0])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY )) / (q + c1o1) ; + } + + q = q_dirT[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( vx3)*/+c9o2*( vx3)*( vx3) /** (one + drho)*/-cu_sq); + (D.f[d00M])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ )) / (q + c1o1) ; + } + + q = q_dirB[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( -vx3)*/+c9o2*( -vx3)*( -vx3) /** (one + drho)*/-cu_sq); + (D.f[d00P])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ )) / (q + c1o1) ; + } + + q = q_dirNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1+vx2 )*/+c9o2*( vx1+vx2 )*( vx1+vx2 ) /** (one + drho)*/-cu_sq); + (D.f[dMM0])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ; + } + + q = q_dirSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1-vx2 )*/+c9o2*(-vx1-vx2 )*(-vx1-vx2 ) /** (one + drho)*/-cu_sq); + (D.f[dPP0])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ; + } + + q = q_dirSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1-vx2 )*/+c9o2*( vx1-vx2 )*( vx1-vx2 ) /** (one + drho)*/-cu_sq); + (D.f[dMP0])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ; + } + + q = q_dirNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1+vx2 )*/+c9o2*(-vx1+vx2 )*(-vx1+vx2 ) /** (one + drho)*/-cu_sq); + (D.f[dPM0])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ; + } + + q = q_dirTE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1 +vx3)*/+c9o2*( vx1 +vx3)*( vx1 +vx3) /** (one + drho)*/-cu_sq); + (D.f[dM0M])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ; + } + + q = q_dirBW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1 -vx3)*/+c9o2*(-vx1 -vx3)*(-vx1 -vx3) /** (one + drho)*/-cu_sq); + (D.f[dP0P])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ; + } + + q = q_dirBE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1 -vx3)*/+c9o2*( vx1 -vx3)*( vx1 -vx3) /** (one + drho)*/-cu_sq); + (D.f[dM0P])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ; + } + + q = q_dirTW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1 +vx3)*/+c9o2*(-vx1 +vx3)*(-vx1 +vx3) /** (one + drho)*/-cu_sq); + (D.f[dP0M])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ; + } + + q = q_dirTN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx2+vx3)*/+c9o2*( vx2+vx3)*( vx2+vx3) /** (one + drho)*/-cu_sq); + (D.f[d0MM])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ; + } + + q = q_dirBS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( -vx2-vx3)*/+c9o2*( -vx2-vx3)*( -vx2-vx3) /** (one + drho)*/-cu_sq); + (D.f[d0PP])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ; + } + + q = q_dirBN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx2-vx3)*/+c9o2*( vx2-vx3)*( vx2-vx3) /** (one + drho)*/-cu_sq); + (D.f[d0MP])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ; + } + + q = q_dirTS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( -vx2+vx3)*/+c9o2*( -vx2+vx3)*( -vx2+vx3) /** (one + drho)*/-cu_sq); + (D.f[d0PM])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ; + } + + q = q_dirTNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) /** (one + drho)*/-cu_sq); + (D.f[dMMM])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ; + } + + q = q_dirBSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) /** (one + drho)*/-cu_sq); + (D.f[dPPP])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ; + } + + q = q_dirBNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) /** (one + drho)*/-cu_sq); + (D.f[dMMP])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ; + } + + q = q_dirTSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) /** (one + drho)*/-cu_sq); + (D.f[dPPM])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ; + } + + q = q_dirTSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) /** (one + drho)*/-cu_sq); + (D.f[dMPM])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ; + } + + q = q_dirBNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) /** (one + drho)*/-cu_sq); + (D.f[dPMP])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ; + } + + q = q_dirBSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) /** (one + drho)*/-cu_sq); + (D.f[dMPP])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ; + } + + q = q_dirTNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) /** (one + drho)*/-cu_sq); + (D.f[dPMM])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ; + } + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void QDeviceCompHighNu27( + real* DD, + 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]; + } + //////////////////////////////////////////////////////////////////////////////// + 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 numberOfNodesK = k_Q[k]; + unsigned int kzero= numberOfNodesK; + unsigned int ke = numberOfNodesK; + unsigned int kw = neighborX[numberOfNodesK]; + unsigned int kn = numberOfNodesK; + unsigned int ks = neighborY[numberOfNodesK]; + unsigned int kt = numberOfNodesK; + unsigned int kb = neighborZ[numberOfNodesK]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = numberOfNodesK; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = numberOfNodesK; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = numberOfNodesK; + 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 = numberOfNodesK; + 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_E = (D.f[dP00])[ke ]; + f_W = (D.f[dM00])[kw ]; + f_N = (D.f[d0P0])[kn ]; + f_S = (D.f[d0M0])[ks ]; + f_T = (D.f[d00P])[kt ]; + f_B = (D.f[d00M])[kb ]; + f_NE = (D.f[dPP0])[kne ]; + f_SW = (D.f[dMM0])[ksw ]; + f_SE = (D.f[dPM0])[kse ]; + f_NW = (D.f[dMP0])[knw ]; + f_TE = (D.f[dP0P])[kte ]; + f_BW = (D.f[dM0M])[kbw ]; + f_BE = (D.f[dP0M])[kbe ]; + f_TW = (D.f[dM0P])[ktw ]; + f_TN = (D.f[d0PP])[ktn ]; + f_BS = (D.f[d0MM])[kbs ]; + f_BN = (D.f[d0PM])[kbn ]; + f_TS = (D.f[d0MP])[kts ]; + f_TNE = (D.f[dPPP])[ktne ]; + f_TSW = (D.f[dMMP])[ktsw ]; + f_TSE = (D.f[dPMP])[ktse ]; + f_TNW = (D.f[dMPP])[ktnw ]; + f_BNE = (D.f[dPPM])[kbne ]; + f_BSW = (D.f[dMMM])[kbsw ]; + f_BSE = (D.f[dPMM])[kbse ]; + f_BNW = (D.f[dMPM])[kbnw ]; + //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, 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 + ((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); + + ////////////////////////////////////////////////////////////////////////// + if (isEvenTimestep==false) + { + 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]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //Test + //(D.f[d000])[k]=c1o10; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real VeloX = c0o1; + real VeloY = c0o1; + real VeloZ = c0o1; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + //ToDo anders klammern !!!!!! + + q = q_dirE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( vx1 )*/+c9o2*( vx1 )*( vx1 ) * (c1o1 + drho)-cu_sq); + (D.f[dM00])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX )) / (q + c1o1) ; + //(D.f[dM00])[kw]=(one-q)/(one+q)*(f_E-f_W+(f_E+f_W-two*feq*om1)/(one-om1))*c1o2+(q*(f_E+f_W)-six*c2over27*( VeloX ))/(one+q) - c2over27 * drho; + //(D.f[dM00])[kw]=zero; + } + + q = q_dirW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*(-vx1 )*/+c9o2*(-vx1 )*(-vx1 ) * (c1o1 + drho)-cu_sq); + (D.f[dP00])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX )) / (q + c1o1) ; + //(D.f[dP00])[ke]=(one-q)/(one+q)*(f_W-f_E+(f_W+f_E-two*feq*om1)/(one-om1))*c1o2+(q*(f_W+f_E)-six*c2over27*(-VeloX ))/(one+q) - c2over27 * drho; + //(D.f[dP00])[ke]=zero; + } + + q = q_dirN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( vx2 )*/+c9o2*( vx2 )*( vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[d0M0])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY )) / (q + c1o1) ; + //(D.f[d0M0])[ks]=(one-q)/(one+q)*(f_N-f_S+(f_N+f_S-two*feq*om1)/(one-om1))*c1o2+(q*(f_N+f_S)-six*c2over27*( VeloY ))/(one+q) - c2over27 * drho; + //(D.f[d0M0])[ks]=zero; + } + + q = q_dirS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( -vx2 )*/+c9o2*( -vx2 )*( -vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[d0P0])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY )) / (q + c1o1) ; + //(D.f[d0P0])[kn]=(one-q)/(one+q)*(f_S-f_N+(f_S+f_N-two*feq*om1)/(one-om1))*c1o2+(q*(f_S+f_N)-six*c2over27*(-VeloY ))/(one+q) - c2over27 * drho; + //(D.f[d0P0])[kn]=zero; + } + + q = q_dirT[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( vx3)*/+c9o2*( vx3)*( vx3) * (c1o1 + drho)-cu_sq); + (D.f[d00M])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ )) / (q + c1o1) ; + //(D.f[d00M])[kb]=(one-q)/(one+q)*(f_T-f_B+(f_T+f_B-two*feq*om1)/(one-om1))*c1o2+(q*(f_T+f_B)-six*c2over27*( VeloZ ))/(one+q) - c2over27 * drho; + //(D.f[d00M])[kb]=one; + } + + q = q_dirB[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( -vx3)*/+c9o2*( -vx3)*( -vx3) * (c1o1 + drho)-cu_sq); + (D.f[d00P])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ )) / (q + c1o1) ; + //(D.f[d00P])[kt]=(one-q)/(one+q)*(f_B-f_T+(f_B+f_T-two*feq*om1)/(one-om1))*c1o2+(q*(f_B+f_T)-six*c2over27*(-VeloZ ))/(one+q) - c2over27 * drho; + //(D.f[d00P])[kt]=zero; + } + + q = q_dirNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1+vx2 )*/+c9o2*( vx1+vx2 )*( vx1+vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dMM0])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ; + //(D.f[dMM0])[ksw]=(one-q)/(one+q)*(f_NE-f_SW+(f_NE+f_SW-two*feq*om1)/(one-om1))*c1o2+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q) - c1over54 * drho; + //(D.f[dMM0])[ksw]=zero; + } + + q = q_dirSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1-vx2 )*/+c9o2*(-vx1-vx2 )*(-vx1-vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dPP0])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ; + //(D.f[dPP0])[kne]=(one-q)/(one+q)*(f_SW-f_NE+(f_SW+f_NE-two*feq*om1)/(one-om1))*c1o2+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q) - c1over54 * drho; + //(D.f[dPP0])[kne]=zero; + } + + q = q_dirSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1-vx2 )*/+c9o2*( vx1-vx2 )*( vx1-vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dMP0])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ; + //(D.f[dMP0])[knw]=(one-q)/(one+q)*(f_SE-f_NW+(f_SE+f_NW-two*feq*om1)/(one-om1))*c1o2+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q) - c1over54 * drho; + //(D.f[dMP0])[knw]=zero; + } + + q = q_dirNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1+vx2 )*/+c9o2*(-vx1+vx2 )*(-vx1+vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dPM0])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ; + //(D.f[dPM0])[kse]=(one-q)/(one+q)*(f_NW-f_SE+(f_NW+f_SE-two*feq*om1)/(one-om1))*c1o2+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q) - c1over54 * drho; + //(D.f[dPM0])[kse]=zero; + } + + q = q_dirTE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1 +vx3)*/+c9o2*( vx1 +vx3)*( vx1 +vx3) * (c1o1 + drho)-cu_sq); + (D.f[dM0M])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ; + //(D.f[dM0M])[kbw]=(one-q)/(one+q)*(f_TE-f_BW+(f_TE+f_BW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q) - c1over54 * drho; + //(D.f[dM0M])[kbw]=zero; + } + + q = q_dirBW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1 -vx3)*/+c9o2*(-vx1 -vx3)*(-vx1 -vx3) * (c1o1 + drho)-cu_sq); + (D.f[dP0P])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ; + //(D.f[dP0P])[kte]=(one-q)/(one+q)*(f_BW-f_TE+(f_BW+f_TE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q) - c1over54 * drho; + //(D.f[dP0P])[kte]=zero; + } + + q = q_dirBE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1 -vx3)*/+c9o2*( vx1 -vx3)*( vx1 -vx3) * (c1o1 + drho)-cu_sq); + (D.f[dM0P])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ; + //(D.f[dM0P])[ktw]=(one-q)/(one+q)*(f_BE-f_TW+(f_BE+f_TW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q) - c1over54 * drho; + //(D.f[dM0P])[ktw]=zero; + } + + q = q_dirTW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1 +vx3)*/+c9o2*(-vx1 +vx3)*(-vx1 +vx3) * (c1o1 + drho)-cu_sq); + (D.f[dP0M])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ; + //(D.f[dP0M])[kbe]=(one-q)/(one+q)*(f_TW-f_BE+(f_TW+f_BE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q) - c1over54 * drho; + //(D.f[dP0M])[kbe]=zero; + } + + q = q_dirTN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx2+vx3)*/+c9o2*( vx2+vx3)*( vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0MM])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ; + //(D.f[d0MM])[kbs]=(one-q)/(one+q)*(f_TN-f_BS+(f_TN+f_BS-two*feq*om1)/(one-om1))*c1o2+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q) - c1over54 * drho; + //(D.f[d0MM])[kbs]=zero; + } + + q = q_dirBS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( -vx2-vx3)*/+c9o2*( -vx2-vx3)*( -vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0PP])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ; + //(D.f[d0PP])[ktn]=(one-q)/(one+q)*(f_BS-f_TN+(f_BS+f_TN-two*feq*om1)/(one-om1))*c1o2+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q) - c1over54 * drho; + //(D.f[d0PP])[ktn]=zero; + } + + q = q_dirBN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx2-vx3)*/+c9o2*( vx2-vx3)*( vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0MP])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ; + //(D.f[d0MP])[kts]=(one-q)/(one+q)*(f_BN-f_TS+(f_BN+f_TS-two*feq*om1)/(one-om1))*c1o2+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q) - c1over54 * drho; + //(D.f[d0MP])[kts]=zero; + } + + q = q_dirTS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( -vx2+vx3)*/+c9o2*( -vx2+vx3)*( -vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0PM])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ; + //(D.f[d0PM])[kbn]=(one-q)/(one+q)*(f_TS-f_BN+(f_TS+f_BN-two*feq*om1)/(one-om1))*c1o2+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q) - c1over54 * drho; + //(D.f[d0PM])[kbn]=zero; + } + + q = q_dirTNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMMM])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ; + //(D.f[dMMM])[kbsw]=(one-q)/(one+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q) - c1over216 * drho; + //(D.f[dMMM])[kbsw]=zero; + } + + q = q_dirBSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPPP])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ; + //(D.f[dPPP])[ktne]=(one-q)/(one+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q) - c1over216 * drho; + //(D.f[dPPP])[ktne]=zero; + } + + q = q_dirBNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMMP])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ; + //(D.f[dMMP])[ktsw]=(one-q)/(one+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q) - c1over216 * drho; + //(D.f[dMMP])[ktsw]=zero; + } + + q = q_dirTSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPPM])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ; + //(D.f[dPPM])[kbne]=(one-q)/(one+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q) - c1over216 * drho; + //(D.f[dPPM])[kbne]=zero; + } + + q = q_dirTSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMPM])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ; + //(D.f[dMPM])[kbnw]=(one-q)/(one+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q) - c1over216 * drho; + //(D.f[dMPM])[kbnw]=zero; + } + + q = q_dirBNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPMP])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ; + //(D.f[dPMP])[ktse]=(one-q)/(one+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q) - c1over216 * drho; + //(D.f[dPMP])[ktse]=zero; + } + + q = q_dirBSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMPP])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ; + //(D.f[dMPP])[ktnw]=(one-q)/(one+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q) - c1over216 * drho; + //(D.f[dMPP])[ktnw]=zero; + } + + q = q_dirTNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPMM])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ; + //(D.f[dPMM])[kbse]=(one-q)/(one+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q) - c1over216 * drho; + //(D.f[dPMM])[kbse]=zero; + } + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void QDeviceComp27( + real* distributions, + int* subgridDistanceIndices, + real* subgridDistances, + unsigned int numberOfBCnodes, + real omega, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + ////////////////////////////////////////////////////////////////////////// + //! The no-slip boundary condition is executed in the following steps + //! + //////////////////////////////////////////////////////////////////////////////// + //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. + //! + const unsigned nodeIndex = getNodeIndex(); + + if(nodeIndex < numberOfBCnodes) + { + ////////////////////////////////////////////////////////////////////////// + //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref + //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> + //! + Distributions27 dist; + getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); + + //////////////////////////////////////////////////////////////////////////////// + //! - Set local subgrid distances (q's) + //! + SubgridDistances27 subgridD; + getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes); + + //////////////////////////////////////////////////////////////////////////////// + //! - Set neighbor indices (necessary for indirect addressing) + //! + unsigned int indexOfBCnode = subgridDistanceIndices[nodeIndex]; + unsigned int kzero= indexOfBCnode; + unsigned int ke = indexOfBCnode; + unsigned int kw = neighborX[indexOfBCnode]; + unsigned int kn = indexOfBCnode; + unsigned int ks = neighborY[indexOfBCnode]; + unsigned int kt = indexOfBCnode; + unsigned int kb = neighborZ[indexOfBCnode]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = indexOfBCnode; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = indexOfBCnode; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = indexOfBCnode; + 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 = indexOfBCnode; + unsigned int kbsw = neighborZ[ksw]; + + //////////////////////////////////////////////////////////////////////////////// + //! - Set local distributions + //! + real f_W = (dist.f[dP00])[ke ]; + real f_E = (dist.f[dM00])[kw ]; + real f_S = (dist.f[d0P0])[kn ]; + real f_N = (dist.f[d0M0])[ks ]; + real f_B = (dist.f[d00P])[kt ]; + real f_T = (dist.f[d00M])[kb ]; + real f_SW = (dist.f[dPP0])[kne ]; + real f_NE = (dist.f[dMM0])[ksw ]; + real f_NW = (dist.f[dPM0])[kse ]; + real f_SE = (dist.f[dMP0])[knw ]; + real f_BW = (dist.f[dP0P])[kte ]; + real f_TE = (dist.f[dM0M])[kbw ]; + real f_TW = (dist.f[dP0M])[kbe ]; + real f_BE = (dist.f[dM0P])[ktw ]; + real f_BS = (dist.f[d0PP])[ktn ]; + real f_TN = (dist.f[d0MM])[kbs ]; + real f_TS = (dist.f[d0PM])[kbn ]; + real f_BN = (dist.f[d0MP])[kts ]; + real f_BSW = (dist.f[dPPP])[ktne ]; + real f_BNE = (dist.f[dMMP])[ktsw ]; + real f_BNW = (dist.f[dPMP])[ktse ]; + real f_BSE = (dist.f[dMPP])[ktnw ]; + real f_TSW = (dist.f[dPPM])[kbne ]; + real f_TNE = (dist.f[dMMM])[kbsw ]; + real f_TNW = (dist.f[dPMM])[kbse ]; + real f_TSE = (dist.f[dMPM])[kbnw ]; + + //////////////////////////////////////////////////////////////////////////////// + //! - Calculate macroscopic quantities + //! + real 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 + ((dist.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)) / (c1o1 + drho); + + 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)) / (c1o1 + drho); + + 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)) / (c1o1 + drho); + + real cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3) * (c1o1 + drho); + + //////////////////////////////////////////////////////////////////////////////// + //! - change the pointer to write the results in the correct array + //! + getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep); + + //////////////////////////////////////////////////////////////////////////////// + //! - Update distributions with subgrid distance (q) between zero and one + real feq, q, velocityLB; + q = (subgridD.q[dP00])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one + { + velocityLB = vx1; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + (dist.f[dM00])[kw] = getInterpolatedDistributionForNoSlipBC(q, f_E, f_W, feq, omega); + } + + q = (subgridD.q[dM00])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + (dist.f[dP00])[ke] = getInterpolatedDistributionForNoSlipBC(q, f_W, f_E, feq, omega); + } + + q = (subgridD.q[d0P0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + (dist.f[d0M0])[ks] = getInterpolatedDistributionForNoSlipBC(q, f_N, f_S, feq, omega); + } + + q = (subgridD.q[d0M0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + (dist.f[d0P0])[kn] = getInterpolatedDistributionForNoSlipBC(q, f_S, f_N, feq, omega); + } + + q = (subgridD.q[d00P])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + (dist.f[d00M])[kb] = getInterpolatedDistributionForNoSlipBC(q, f_T, f_B, feq, omega); + } + + q = (subgridD.q[d00M])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + (dist.f[d00P])[kt] = getInterpolatedDistributionForNoSlipBC(q, f_B, f_T, feq, omega); + } + + q = (subgridD.q[dPP0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 + vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[dMM0])[ksw] = getInterpolatedDistributionForNoSlipBC(q, f_NE, f_SW, feq, omega); + } + + q = (subgridD.q[dMM0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 - vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[dPP0])[kne] = getInterpolatedDistributionForNoSlipBC(q, f_SW, f_NE, feq, omega); + } + + q = (subgridD.q[dPM0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 - vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[dMP0])[knw] = getInterpolatedDistributionForNoSlipBC(q, f_SE, f_NW, feq, omega); + } + + q = (subgridD.q[dMP0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 + vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[dPM0])[kse] = getInterpolatedDistributionForNoSlipBC(q, f_NW, f_SE, feq, omega); + } + + q = (subgridD.q[dP0P])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[dM0M])[kbw] = getInterpolatedDistributionForNoSlipBC(q, f_TE, f_BW, feq, omega); + } + + q = (subgridD.q[dM0M])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[dP0P])[kte] = getInterpolatedDistributionForNoSlipBC(q, f_BW, f_TE, feq, omega); + } + + q = (subgridD.q[dP0M])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[dM0P])[ktw] = getInterpolatedDistributionForNoSlipBC(q, f_BE, f_TW, feq, omega); + } + + q = (subgridD.q[dM0P])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[dP0M])[kbe] = getInterpolatedDistributionForNoSlipBC(q, f_TW, f_BE, feq, omega); + } + + q = (subgridD.q[d0PP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[d0MM])[kbs] = getInterpolatedDistributionForNoSlipBC(q, f_TN, f_BS, feq, omega); + } + + q = (subgridD.q[d0MM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[d0PP])[ktn] = getInterpolatedDistributionForNoSlipBC(q, f_BS, f_TN, feq, omega); + } + + q = (subgridD.q[d0PM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[d0MP])[kts] = getInterpolatedDistributionForNoSlipBC(q, f_BN, f_TS, feq, omega); + } + + q = (subgridD.q[d0MP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[d0PM])[kbn] = getInterpolatedDistributionForNoSlipBC(q, f_TS, f_BN, feq, omega); + } + + q = (subgridD.q[dPPP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 + vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + (dist.f[dMMM])[kbsw] = getInterpolatedDistributionForNoSlipBC(q, f_TNE, f_BSW, feq, omega); + } + + q = (subgridD.q[dMMM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 - vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + (dist.f[dPPP])[ktne] = getInterpolatedDistributionForNoSlipBC(q, f_BSW, f_TNE, feq, omega); + } + + q = (subgridD.q[dPPM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 + vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + (dist.f[dMMP])[ktsw] = getInterpolatedDistributionForNoSlipBC(q, f_BNE, f_TSW, feq, omega); + } + + q = (subgridD.q[dMMP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 - vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + (dist.f[dPPM])[kbne] = getInterpolatedDistributionForNoSlipBC(q, f_TSW, f_BNE, feq, omega); + } + + q = (subgridD.q[dPMP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 - vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + (dist.f[dMPM])[kbnw] = getInterpolatedDistributionForNoSlipBC(q, f_TSE, f_BNW, feq, omega); + } + + q = (subgridD.q[dMPM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 + vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + (dist.f[dPMP])[ktse] = getInterpolatedDistributionForNoSlipBC(q, f_BNW, f_TSE, feq, omega); + } + + q = (subgridD.q[dPMM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 - vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + (dist.f[dMPP])[ktnw] = getInterpolatedDistributionForNoSlipBC(q, f_BSE, f_TNW, feq, omega); + } + + q = (subgridD.q[dMPP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 + vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + (dist.f[dPMM])[kbse] = getInterpolatedDistributionForNoSlipBC(q, f_TNW, f_BSE, feq, omega); + } + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void QDevice27( + real* distributions, + int* subgridDistanceIndices, + real* subgridDistances, + unsigned int numberOfBCnodes, + real omega, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + ////////////////////////////////////////////////////////////////////////// + //! The no-slip boundary condition is executed in the following steps + //! + //////////////////////////////////////////////////////////////////////////////// + //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. + //! + const unsigned nodeIndex = getNodeIndex(); + + ////////////////////////////////////////////////////////////////////////// + //! - Run for all indices in size of boundary condition (numberOfBCnodes) + //! + if(nodeIndex < numberOfBCnodes) + { + + ////////////////////////////////////////////////////////////////////////// + //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref + //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> + //! + Distributions27 dist; + getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); + + //////////////////////////////////////////////////////////////////////////////// + //! - Set local subgrid distances (q's) + //! + SubgridDistances27 subgridD; + getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes); + + //////////////////////////////////////////////////////////////////////////////// + //! - Set neighbor indices (necessary for indirect addressing) + //! + unsigned int indexOfBCnode = subgridDistanceIndices[nodeIndex]; + unsigned int kzero= indexOfBCnode; + unsigned int ke = indexOfBCnode; + unsigned int kw = neighborX[indexOfBCnode]; + unsigned int kn = indexOfBCnode; + unsigned int ks = neighborY[indexOfBCnode]; + unsigned int kt = indexOfBCnode; + unsigned int kb = neighborZ[indexOfBCnode]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = indexOfBCnode; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = indexOfBCnode; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = indexOfBCnode; + 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 = indexOfBCnode; + unsigned int kbsw = neighborZ[ksw]; + + //////////////////////////////////////////////////////////////////////////////// + //! - Set local distributions + //! + real f_W = (dist.f[dP00])[ke ]; + real f_E = (dist.f[dM00])[kw ]; + real f_S = (dist.f[d0P0])[kn ]; + real f_N = (dist.f[d0M0])[ks ]; + real f_B = (dist.f[d00P])[kt ]; + real f_T = (dist.f[d00M])[kb ]; + real f_SW = (dist.f[dPP0])[kne ]; + real f_NE = (dist.f[dMM0])[ksw ]; + real f_NW = (dist.f[dPM0])[kse ]; + real f_SE = (dist.f[dMP0])[knw ]; + real f_BW = (dist.f[dP0P])[kte ]; + real f_TE = (dist.f[dM0M])[kbw ]; + real f_TW = (dist.f[dP0M])[kbe ]; + real f_BE = (dist.f[dM0P])[ktw ]; + real f_BS = (dist.f[d0PP])[ktn ]; + real f_TN = (dist.f[d0MM])[kbs ]; + real f_TS = (dist.f[d0PM])[kbn ]; + real f_BN = (dist.f[d0MP])[kts ]; + real f_BSW = (dist.f[dPPP])[ktne ]; + real f_BNE = (dist.f[dMMP])[ktsw ]; + real f_BNW = (dist.f[dPMP])[ktse ]; + real f_BSE = (dist.f[dMPP])[ktnw ]; + real f_TSW = (dist.f[dPPM])[kbne ]; + real f_TNE = (dist.f[dMMM])[kbsw ]; + real f_TNW = (dist.f[dPMM])[kbse ]; + real f_TSE = (dist.f[dMPM])[kbnw ]; + + //////////////////////////////////////////////////////////////////////////////// + //! - Calculate macroscopic quantities + //! + real 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 + ((dist.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 cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); + + //////////////////////////////////////////////////////////////////////////////// + //! - change the pointer to write the results in the correct array + //! + getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep); + + //////////////////////////////////////////////////////////////////////////////// + //! - Update distributions with subgrid distance (q) between zero and one + //! + real feq, q, velocityLB; + q = (subgridD.q[dP00])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one + { + velocityLB = vx1; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + (dist.f[dM00])[kw] = getInterpolatedDistributionForNoSlipBC(q, f_E, f_W, feq, omega); + } + + q = (subgridD.q[dM00])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + (dist.f[dP00])[ke] = getInterpolatedDistributionForNoSlipBC(q, f_W, f_E, feq, omega); + } + + q = (subgridD.q[d0P0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + (dist.f[d0M0])[ks] = getInterpolatedDistributionForNoSlipBC(q, f_N, f_S, feq, omega); + } + + q = (subgridD.q[d0M0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + (dist.f[d0P0])[kn] = getInterpolatedDistributionForNoSlipBC(q, f_S, f_N, feq, omega); + } + + q = (subgridD.q[d00P])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + (dist.f[d00M])[kb] = getInterpolatedDistributionForNoSlipBC(q, f_T, f_B, feq, omega); + } + + q = (subgridD.q[d00M])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + (dist.f[d00P])[kt] = getInterpolatedDistributionForNoSlipBC(q, f_B, f_T, feq, omega); + } + + q = (subgridD.q[dPP0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 + vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[dMM0])[ksw] = getInterpolatedDistributionForNoSlipBC(q, f_NE, f_SW, feq, omega); + } + + q = (subgridD.q[dMM0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 - vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[dPP0])[kne] = getInterpolatedDistributionForNoSlipBC(q, f_SW, f_NE, feq, omega); + } + + q = (subgridD.q[dPM0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 - vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[dMP0])[knw] = getInterpolatedDistributionForNoSlipBC(q, f_SE, f_NW, feq, omega); + } + + q = (subgridD.q[dMP0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 + vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[dPM0])[kse] = getInterpolatedDistributionForNoSlipBC(q, f_NW, f_SE, feq, omega); + } + + q = (subgridD.q[dP0P])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[dM0M])[kbw] = getInterpolatedDistributionForNoSlipBC(q, f_TE, f_BW, feq, omega); + } + + q = (subgridD.q[dM0M])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[dP0P])[kte] = getInterpolatedDistributionForNoSlipBC(q, f_BW, f_TE, feq, omega); + } + + q = (subgridD.q[dP0M])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[dM0P])[ktw] = getInterpolatedDistributionForNoSlipBC(q, f_BE, f_TW, feq, omega); + } + + q = (subgridD.q[dM0P])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[dP0M])[kbe] = getInterpolatedDistributionForNoSlipBC(q, f_TW, f_BE, feq, omega); + } + + q = (subgridD.q[d0PP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[d0MM])[kbs] = getInterpolatedDistributionForNoSlipBC(q, f_TN, f_BS, feq, omega); + } + + q = (subgridD.q[d0MM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[d0PP])[ktn] = getInterpolatedDistributionForNoSlipBC(q, f_BS, f_TN, feq, omega); + } + + q = (subgridD.q[d0PM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[d0MP])[kts] = getInterpolatedDistributionForNoSlipBC(q, f_BN, f_TS, feq, omega); + } + + q = (subgridD.q[d0MP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + (dist.f[d0PM])[kbn] = getInterpolatedDistributionForNoSlipBC(q, f_TS, f_BN, feq, omega); + } + + q = (subgridD.q[dPPP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 + vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + (dist.f[dMMM])[kbsw] = getInterpolatedDistributionForNoSlipBC(q, f_TNE, f_BSW, feq, omega); + } + + q = (subgridD.q[dMMM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 - vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + (dist.f[dPPP])[ktne] = getInterpolatedDistributionForNoSlipBC(q, f_BSW, f_TNE, feq, omega); + } + + q = (subgridD.q[dPPM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 + vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + (dist.f[dMMP])[ktsw] = getInterpolatedDistributionForNoSlipBC(q, f_BNE, f_TSW, feq, omega); + } + + q = (subgridD.q[dMMP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 - vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + (dist.f[dPPM])[kbne] = getInterpolatedDistributionForNoSlipBC(q, f_TSW, f_BNE, feq, omega); + } + + q = (subgridD.q[dPMP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 - vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + (dist.f[dMPM])[kbnw] = getInterpolatedDistributionForNoSlipBC(q, f_TSE, f_BNW, feq, omega); + } + + q = (subgridD.q[dMPM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 + vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + (dist.f[dPMP])[ktse] = getInterpolatedDistributionForNoSlipBC(q, f_BNW, f_TSE, feq, omega); + } + + q = (subgridD.q[dPMM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 - vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + (dist.f[dMPP])[ktnw] = getInterpolatedDistributionForNoSlipBC(q, f_BSE, f_TNW, feq, omega); + } + + q = (subgridD.q[dMPP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 + vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + (dist.f[dPMM])[kbse] = getInterpolatedDistributionForNoSlipBC(q, f_TNW, f_BSE, feq, omega); + } + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void BBDevice27( + real* distributions, + int* subgridDistanceIndices, + real* subgridDistances, + unsigned int numberOfBCnodes, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + ////////////////////////////////////////////////////////////////////////// + //! The no-slip boundary condition is executed in the following steps + //! + //////////////////////////////////////////////////////////////////////////////// + //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. + //! + const unsigned nodeIndex = getNodeIndex(); + + ////////////////////////////////////////////////////////////////////////// + // run for all indices in size of boundary condition (numberOfBCnodes) + if(nodeIndex < numberOfBCnodes) + { + ////////////////////////////////////////////////////////////////////////// + //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref + //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> + //! + Distributions27 dist; + getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); + + //////////////////////////////////////////////////////////////////////////////// + //! - Set local subgrid distances (q's) + //! + SubgridDistances27 subgridD; + getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes); + + //////////////////////////////////////////////////////////////////////////////// + //! - Set neighbor indices (necessary for indirect addressing) + //! + unsigned int indexOfBCnode = subgridDistanceIndices[nodeIndex]; + unsigned int ke = indexOfBCnode; + unsigned int kw = neighborX[indexOfBCnode]; + unsigned int kn = indexOfBCnode; + unsigned int ks = neighborY[indexOfBCnode]; + unsigned int kt = indexOfBCnode; + unsigned int kb = neighborZ[indexOfBCnode]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = indexOfBCnode; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = indexOfBCnode; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = indexOfBCnode; + 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 = indexOfBCnode; + unsigned int kbsw = neighborZ[ksw]; + + //////////////////////////////////////////////////////////////////////////////// + //! - Set local distributions + //! + real f_W = (dist.f[dP00])[ke ]; + real f_E = (dist.f[dM00])[kw ]; + real f_S = (dist.f[d0P0])[kn ]; + real f_N = (dist.f[d0M0])[ks ]; + real f_B = (dist.f[d00P])[kt ]; + real f_T = (dist.f[d00M])[kb ]; + real f_SW = (dist.f[dPP0])[kne ]; + real f_NE = (dist.f[dMM0])[ksw ]; + real f_NW = (dist.f[dPM0])[kse ]; + real f_SE = (dist.f[dMP0])[knw ]; + real f_BW = (dist.f[dP0P])[kte ]; + real f_TE = (dist.f[dM0M])[kbw ]; + real f_TW = (dist.f[dP0M])[kbe ]; + real f_BE = (dist.f[dM0P])[ktw ]; + real f_BS = (dist.f[d0PP])[ktn ]; + real f_TN = (dist.f[d0MM])[kbs ]; + real f_TS = (dist.f[d0PM])[kbn ]; + real f_BN = (dist.f[d0MP])[kts ]; + real f_BSW = (dist.f[dPPP])[ktne ]; + real f_BNE = (dist.f[dMMP])[ktsw ]; + real f_BNW = (dist.f[dPMP])[ktse ]; + real f_BSE = (dist.f[dMPP])[ktnw ]; + real f_TSW = (dist.f[dPPM])[kbne ]; + real f_TNE = (dist.f[dMMM])[kbsw ]; + real f_TNW = (dist.f[dPMM])[kbse ]; + real f_TSE = (dist.f[dMPM])[kbnw ]; + + //////////////////////////////////////////////////////////////////////////////// + //! - change the pointer to write the results in the correct array + //! + getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep); + + //////////////////////////////////////////////////////////////////////////////// + //! - rewrite distributions if there is a sub-grid distance (q) in same direction + real q; + q = (subgridD.q[dP00])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dM00])[kw ]=f_E ; + q = (subgridD.q[dM00])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dP00])[ke ]=f_W ; + q = (subgridD.q[d0P0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[d0M0])[ks ]=f_N ; + q = (subgridD.q[d0M0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[d0P0])[kn ]=f_S ; + q = (subgridD.q[d00P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[d00M])[kb ]=f_T ; + q = (subgridD.q[d00M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[d00P])[kt ]=f_B ; + q = (subgridD.q[dPP0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dMM0])[ksw ]=f_NE ; + q = (subgridD.q[dMM0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dPP0])[kne ]=f_SW ; + q = (subgridD.q[dPM0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dMP0])[knw ]=f_SE ; + q = (subgridD.q[dMP0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dPM0])[kse ]=f_NW ; + q = (subgridD.q[dP0P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dM0M])[kbw ]=f_TE ; + q = (subgridD.q[dM0M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dP0P])[kte ]=f_BW ; + q = (subgridD.q[dP0M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dM0P])[ktw ]=f_BE ; + q = (subgridD.q[dM0P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dP0M])[kbe ]=f_TW ; + q = (subgridD.q[d0PP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[d0MM])[kbs ]=f_TN ; + q = (subgridD.q[d0MM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[d0PP])[ktn ]=f_BS ; + q = (subgridD.q[d0PM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[d0MP])[kts ]=f_BN ; + q = (subgridD.q[d0MP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[d0PM])[kbn ]=f_TS ; + q = (subgridD.q[dPPP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dMMM])[kbsw]=f_TNE; + q = (subgridD.q[dMMM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dPPP])[ktne]=f_BSW; + q = (subgridD.q[dPPM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dMMP])[ktsw]=f_BNE; + q = (subgridD.q[dMMP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dPPM])[kbne]=f_TSW; + q = (subgridD.q[dPMP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dMPM])[kbnw]=f_TSE; + q = (subgridD.q[dMPM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dPMP])[ktse]=f_BNW; + q = (subgridD.q[dPMM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dMPP])[ktnw]=f_BSE; + q = (subgridD.q[dMPP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dPMM])[kbse]=f_TNW; + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + diff --git a/src/gpu/VirtualFluids_GPU/GPU/Particles.cu b/src/gpu/core/GPU/Particles.cu similarity index 84% rename from src/gpu/VirtualFluids_GPU/GPU/Particles.cu rename to src/gpu/core/GPU/Particles.cu index 7a82c694ef55ff5bc6770b9ae333e2de7ed1938c..6f30a09c1b306f8833649a84f6ee7b702ab83f7e 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/Particles.cu +++ b/src/gpu/core/GPU/Particles.cu @@ -248,63 +248,63 @@ __global__ void MoveParticles( real* coordX, { if (isEvenTimestep==true) { - feC = &DD[DIR_P00 * numberOfLBnodes]; - fwC = &DD[DIR_M00 * numberOfLBnodes]; - fnC = &DD[DIR_0P0 * numberOfLBnodes]; - fsC = &DD[DIR_0M0 * numberOfLBnodes]; - ftC = &DD[DIR_00P * numberOfLBnodes]; - fbC = &DD[DIR_00M * numberOfLBnodes]; - fneC = &DD[DIR_PP0 * numberOfLBnodes]; - fswC = &DD[DIR_MM0 * numberOfLBnodes]; - fseC = &DD[DIR_PM0 * numberOfLBnodes]; - fnwC = &DD[DIR_MP0 * numberOfLBnodes]; - fteC = &DD[DIR_P0P * numberOfLBnodes]; - fbwC = &DD[DIR_M0M * numberOfLBnodes]; - fbeC = &DD[DIR_P0M * numberOfLBnodes]; - ftwC = &DD[DIR_M0P * numberOfLBnodes]; - ftnC = &DD[DIR_0PP * numberOfLBnodes]; - fbsC = &DD[DIR_0MM * numberOfLBnodes]; - fbnC = &DD[DIR_0PM * numberOfLBnodes]; - ftsC = &DD[DIR_0MP * numberOfLBnodes]; - fzeroC = &DD[DIR_000 * numberOfLBnodes]; - ftneC = &DD[DIR_PPP * numberOfLBnodes]; - ftswC = &DD[DIR_MMP * numberOfLBnodes]; - ftseC = &DD[DIR_PMP * numberOfLBnodes]; - ftnwC = &DD[DIR_MPP * numberOfLBnodes]; - fbneC = &DD[DIR_PPM * numberOfLBnodes]; - fbswC = &DD[DIR_MMM * numberOfLBnodes]; - fbseC = &DD[DIR_PMM * numberOfLBnodes]; - fbnwC = &DD[DIR_MPM * numberOfLBnodes]; + feC = &DD[dP00 * numberOfLBnodes]; + fwC = &DD[dM00 * numberOfLBnodes]; + fnC = &DD[d0P0 * numberOfLBnodes]; + fsC = &DD[d0M0 * numberOfLBnodes]; + ftC = &DD[d00P * numberOfLBnodes]; + fbC = &DD[d00M * numberOfLBnodes]; + fneC = &DD[dPP0 * numberOfLBnodes]; + fswC = &DD[dMM0 * numberOfLBnodes]; + fseC = &DD[dPM0 * numberOfLBnodes]; + fnwC = &DD[dMP0 * numberOfLBnodes]; + fteC = &DD[dP0P * numberOfLBnodes]; + fbwC = &DD[dM0M * numberOfLBnodes]; + fbeC = &DD[dP0M * numberOfLBnodes]; + ftwC = &DD[dM0P * numberOfLBnodes]; + ftnC = &DD[d0PP * numberOfLBnodes]; + fbsC = &DD[d0MM * numberOfLBnodes]; + fbnC = &DD[d0PM * numberOfLBnodes]; + ftsC = &DD[d0MP * numberOfLBnodes]; + fzeroC = &DD[d000 * numberOfLBnodes]; + ftneC = &DD[dPPP * numberOfLBnodes]; + ftswC = &DD[dMMP * numberOfLBnodes]; + ftseC = &DD[dPMP * numberOfLBnodes]; + ftnwC = &DD[dMPP * numberOfLBnodes]; + fbneC = &DD[dPPM * numberOfLBnodes]; + fbswC = &DD[dMMM * numberOfLBnodes]; + fbseC = &DD[dPMM * numberOfLBnodes]; + fbnwC = &DD[dMPM * numberOfLBnodes]; } else { - fwC = &DD[DIR_P00 * numberOfLBnodes]; - feC = &DD[DIR_M00 * numberOfLBnodes]; - fsC = &DD[DIR_0P0 * numberOfLBnodes]; - fnC = &DD[DIR_0M0 * numberOfLBnodes]; - fbC = &DD[DIR_00P * numberOfLBnodes]; - ftC = &DD[DIR_00M * numberOfLBnodes]; - fswC = &DD[DIR_PP0 * numberOfLBnodes]; - fneC = &DD[DIR_MM0 * numberOfLBnodes]; - fnwC = &DD[DIR_PM0 * numberOfLBnodes]; - fseC = &DD[DIR_MP0 * numberOfLBnodes]; - fbwC = &DD[DIR_P0P * numberOfLBnodes]; - fteC = &DD[DIR_M0M * numberOfLBnodes]; - ftwC = &DD[DIR_P0M * numberOfLBnodes]; - fbeC = &DD[DIR_M0P * numberOfLBnodes]; - fbsC = &DD[DIR_0PP * numberOfLBnodes]; - ftnC = &DD[DIR_0MM * numberOfLBnodes]; - ftsC = &DD[DIR_0PM * numberOfLBnodes]; - fbnC = &DD[DIR_0MP * numberOfLBnodes]; - fzeroC = &DD[DIR_000 * numberOfLBnodes]; - fbswC = &DD[DIR_PPP * numberOfLBnodes]; - fbneC = &DD[DIR_MMP * numberOfLBnodes]; - fbnwC = &DD[DIR_PMP * numberOfLBnodes]; - fbseC = &DD[DIR_MPP * numberOfLBnodes]; - ftswC = &DD[DIR_PPM * numberOfLBnodes]; - ftneC = &DD[DIR_MMM * numberOfLBnodes]; - ftnwC = &DD[DIR_PMM * numberOfLBnodes]; - ftseC = &DD[DIR_MPM * numberOfLBnodes]; + fwC = &DD[dP00 * numberOfLBnodes]; + feC = &DD[dM00 * numberOfLBnodes]; + fsC = &DD[d0P0 * numberOfLBnodes]; + fnC = &DD[d0M0 * numberOfLBnodes]; + fbC = &DD[d00P * numberOfLBnodes]; + ftC = &DD[d00M * numberOfLBnodes]; + fswC = &DD[dPP0 * numberOfLBnodes]; + fneC = &DD[dMM0 * numberOfLBnodes]; + fnwC = &DD[dPM0 * numberOfLBnodes]; + fseC = &DD[dMP0 * numberOfLBnodes]; + fbwC = &DD[dP0P * numberOfLBnodes]; + fteC = &DD[dM0M * numberOfLBnodes]; + ftwC = &DD[dP0M * numberOfLBnodes]; + fbeC = &DD[dM0P * numberOfLBnodes]; + fbsC = &DD[d0PP * numberOfLBnodes]; + ftnC = &DD[d0MM * numberOfLBnodes]; + ftsC = &DD[d0PM * numberOfLBnodes]; + fbnC = &DD[d0MP * numberOfLBnodes]; + fzeroC = &DD[d000 * numberOfLBnodes]; + fbswC = &DD[dPPP * numberOfLBnodes]; + fbneC = &DD[dMMP * numberOfLBnodes]; + fbnwC = &DD[dPMP * numberOfLBnodes]; + fbseC = &DD[dMPP * numberOfLBnodes]; + ftswC = &DD[dPPM * numberOfLBnodes]; + ftneC = &DD[dMMM * numberOfLBnodes]; + ftnwC = &DD[dPMM * numberOfLBnodes]; + ftseC = &DD[dMPM * numberOfLBnodes]; } ////////////////////////////////////////////////////////////////////////// @@ -1114,63 +1114,63 @@ __global__ void MoveParticlesWithoutBCs( real* coordX, { if (isEvenTimestep==true) { - feC = &DD[DIR_P00 * numberOfLBnodes]; - fwC = &DD[DIR_M00 * numberOfLBnodes]; - fnC = &DD[DIR_0P0 * numberOfLBnodes]; - fsC = &DD[DIR_0M0 * numberOfLBnodes]; - ftC = &DD[DIR_00P * numberOfLBnodes]; - fbC = &DD[DIR_00M * numberOfLBnodes]; - fneC = &DD[DIR_PP0 * numberOfLBnodes]; - fswC = &DD[DIR_MM0 * numberOfLBnodes]; - fseC = &DD[DIR_PM0 * numberOfLBnodes]; - fnwC = &DD[DIR_MP0 * numberOfLBnodes]; - fteC = &DD[DIR_P0P * numberOfLBnodes]; - fbwC = &DD[DIR_M0M * numberOfLBnodes]; - fbeC = &DD[DIR_P0M * numberOfLBnodes]; - ftwC = &DD[DIR_M0P * numberOfLBnodes]; - ftnC = &DD[DIR_0PP * numberOfLBnodes]; - fbsC = &DD[DIR_0MM * numberOfLBnodes]; - fbnC = &DD[DIR_0PM * numberOfLBnodes]; - ftsC = &DD[DIR_0MP * numberOfLBnodes]; - fzeroC = &DD[DIR_000 * numberOfLBnodes]; - ftneC = &DD[DIR_PPP * numberOfLBnodes]; - ftswC = &DD[DIR_MMP * numberOfLBnodes]; - ftseC = &DD[DIR_PMP * numberOfLBnodes]; - ftnwC = &DD[DIR_MPP * numberOfLBnodes]; - fbneC = &DD[DIR_PPM * numberOfLBnodes]; - fbswC = &DD[DIR_MMM * numberOfLBnodes]; - fbseC = &DD[DIR_PMM * numberOfLBnodes]; - fbnwC = &DD[DIR_MPM * numberOfLBnodes]; + feC = &DD[dP00 * numberOfLBnodes]; + fwC = &DD[dM00 * numberOfLBnodes]; + fnC = &DD[d0P0 * numberOfLBnodes]; + fsC = &DD[d0M0 * numberOfLBnodes]; + ftC = &DD[d00P * numberOfLBnodes]; + fbC = &DD[d00M * numberOfLBnodes]; + fneC = &DD[dPP0 * numberOfLBnodes]; + fswC = &DD[dMM0 * numberOfLBnodes]; + fseC = &DD[dPM0 * numberOfLBnodes]; + fnwC = &DD[dMP0 * numberOfLBnodes]; + fteC = &DD[dP0P * numberOfLBnodes]; + fbwC = &DD[dM0M * numberOfLBnodes]; + fbeC = &DD[dP0M * numberOfLBnodes]; + ftwC = &DD[dM0P * numberOfLBnodes]; + ftnC = &DD[d0PP * numberOfLBnodes]; + fbsC = &DD[d0MM * numberOfLBnodes]; + fbnC = &DD[d0PM * numberOfLBnodes]; + ftsC = &DD[d0MP * numberOfLBnodes]; + fzeroC = &DD[d000 * numberOfLBnodes]; + ftneC = &DD[dPPP * numberOfLBnodes]; + ftswC = &DD[dMMP * numberOfLBnodes]; + ftseC = &DD[dPMP * numberOfLBnodes]; + ftnwC = &DD[dMPP * numberOfLBnodes]; + fbneC = &DD[dPPM * numberOfLBnodes]; + fbswC = &DD[dMMM * numberOfLBnodes]; + fbseC = &DD[dPMM * numberOfLBnodes]; + fbnwC = &DD[dMPM * numberOfLBnodes]; } else { - fwC = &DD[DIR_P00 * numberOfLBnodes]; - feC = &DD[DIR_M00 * numberOfLBnodes]; - fsC = &DD[DIR_0P0 * numberOfLBnodes]; - fnC = &DD[DIR_0M0 * numberOfLBnodes]; - fbC = &DD[DIR_00P * numberOfLBnodes]; - ftC = &DD[DIR_00M * numberOfLBnodes]; - fswC = &DD[DIR_PP0 * numberOfLBnodes]; - fneC = &DD[DIR_MM0 * numberOfLBnodes]; - fnwC = &DD[DIR_PM0 * numberOfLBnodes]; - fseC = &DD[DIR_MP0 * numberOfLBnodes]; - fbwC = &DD[DIR_P0P * numberOfLBnodes]; - fteC = &DD[DIR_M0M * numberOfLBnodes]; - ftwC = &DD[DIR_P0M * numberOfLBnodes]; - fbeC = &DD[DIR_M0P * numberOfLBnodes]; - fbsC = &DD[DIR_0PP * numberOfLBnodes]; - ftnC = &DD[DIR_0MM * numberOfLBnodes]; - ftsC = &DD[DIR_0PM * numberOfLBnodes]; - fbnC = &DD[DIR_0MP * numberOfLBnodes]; - fzeroC = &DD[DIR_000 * numberOfLBnodes]; - fbswC = &DD[DIR_PPP * numberOfLBnodes]; - fbneC = &DD[DIR_MMP * numberOfLBnodes]; - fbnwC = &DD[DIR_PMP * numberOfLBnodes]; - fbseC = &DD[DIR_MPP * numberOfLBnodes]; - ftswC = &DD[DIR_PPM * numberOfLBnodes]; - ftneC = &DD[DIR_MMM * numberOfLBnodes]; - ftnwC = &DD[DIR_PMM * numberOfLBnodes]; - ftseC = &DD[DIR_MPM * numberOfLBnodes]; + fwC = &DD[dP00 * numberOfLBnodes]; + feC = &DD[dM00 * numberOfLBnodes]; + fsC = &DD[d0P0 * numberOfLBnodes]; + fnC = &DD[d0M0 * numberOfLBnodes]; + fbC = &DD[d00P * numberOfLBnodes]; + ftC = &DD[d00M * numberOfLBnodes]; + fswC = &DD[dPP0 * numberOfLBnodes]; + fneC = &DD[dMM0 * numberOfLBnodes]; + fnwC = &DD[dPM0 * numberOfLBnodes]; + fseC = &DD[dMP0 * numberOfLBnodes]; + fbwC = &DD[dP0P * numberOfLBnodes]; + fteC = &DD[dM0M * numberOfLBnodes]; + ftwC = &DD[dP0M * numberOfLBnodes]; + fbeC = &DD[dM0P * numberOfLBnodes]; + fbsC = &DD[d0PP * numberOfLBnodes]; + ftnC = &DD[d0MM * numberOfLBnodes]; + ftsC = &DD[d0PM * numberOfLBnodes]; + fbnC = &DD[d0MP * numberOfLBnodes]; + fzeroC = &DD[d000 * numberOfLBnodes]; + fbswC = &DD[dPPP * numberOfLBnodes]; + fbneC = &DD[dMMP * numberOfLBnodes]; + fbnwC = &DD[dPMP * numberOfLBnodes]; + fbseC = &DD[dMPP * numberOfLBnodes]; + ftswC = &DD[dPPM * numberOfLBnodes]; + ftneC = &DD[dMMM * numberOfLBnodes]; + ftnwC = &DD[dPMM * numberOfLBnodes]; + ftseC = &DD[dMPM * numberOfLBnodes]; } ////////////////////////////////////////////////////////////////////////// @@ -1937,63 +1937,63 @@ __global__ void ParticleNoSlipDeviceComp27(real* coordX, //Distributions27 D; //if (isEvenTimestep==true) //{ - // D.f[DIR_P00] = &DD[DIR_P00 * size_Mat]; - // D.f[DIR_M00] = &DD[DIR_M00 * size_Mat]; - // D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat]; - // D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat]; - // D.f[DIR_00P] = &DD[DIR_00P * size_Mat]; - // D.f[DIR_00M] = &DD[DIR_00M * size_Mat]; - // D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat]; - // D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat]; - // D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat]; - // D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat]; - // D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat]; - // D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat]; - // D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat]; - // D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat]; - // D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat]; - // D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat]; - // D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat]; - // D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat]; - // D.f[DIR_000] = &DD[DIR_000 * size_Mat]; - // D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat]; - // D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat]; - // D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat]; - // D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat]; - // D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat]; - // D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat]; - // D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat]; - // D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat]; + // 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[DIR_M00] = &DD[DIR_P00 * size_Mat]; - // D.f[DIR_P00] = &DD[DIR_M00 * size_Mat]; - // D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat]; - // D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat]; - // D.f[DIR_00M] = &DD[DIR_00P * size_Mat]; - // D.f[DIR_00P] = &DD[DIR_00M * size_Mat]; - // D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat]; - // D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat]; - // D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat]; - // D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat]; - // D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat]; - // D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat]; - // D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat]; - // D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat]; - // D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat]; - // D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat]; - // D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat]; - // D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat]; - // D.f[DIR_000] = &DD[DIR_000 * size_Mat]; - // D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat]; - // D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat]; - // D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat]; - // D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat]; - // D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat]; - // D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat]; - // D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat]; - // D.f[DIR_MPM] = &DD[DIR_PMP * size_Mat]; + // 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]; //} ////////////////////////////////////////////////////////////////////////////////// //const unsigned x = threadIdx.x; // Globaler x-Index @@ -2015,128 +2015,128 @@ __global__ void ParticleNoSlipDeviceComp27(real* coordX, // // *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[DIR_P00 * numberOfBCnodes]; - // q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - // // q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - // q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - // // q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - // q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - // // q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - // // q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - // // q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - // // q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - // // q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - // // q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - // // q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - // // q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - // // q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - // // q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - // // q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - // // q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - // // q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - // // q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - // // q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - // // q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - // // q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - // // q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - // // q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - // // q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes]; + // // 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]; // //////////////////////////////////////////////////////////////////////////////// // // real *nx_dirE, *nx_dirW, *nx_dirN, *nx_dirS, *nx_dirT, *nx_dirB, // // *nx_dirNE, *nx_dirSW, *nx_dirSE, *nx_dirNW, *nx_dirTE, *nx_dirBW, // // *nx_dirBE, *nx_dirTW, *nx_dirTN, *nx_dirBS, *nx_dirBN, *nx_dirTS, // // *nx_dirTNE, *nx_dirTSW, *nx_dirTSE, *nx_dirTNW, *nx_dirBNE, *nx_dirBSW, // // *nx_dirBSE, *nx_dirBNW; - // // nx_dirE = &NormalX[DIR_P00 * numberOfBCnodes]; - // // nx_dirW = &NormalX[DIR_M00 * numberOfBCnodes]; - // // nx_dirN = &NormalX[DIR_0P0 * numberOfBCnodes]; - // // nx_dirS = &NormalX[DIR_0M0 * numberOfBCnodes]; - // // nx_dirT = &NormalX[DIR_00P * numberOfBCnodes]; - // // nx_dirB = &NormalX[DIR_00M * numberOfBCnodes]; - // // nx_dirNE = &NormalX[DIR_PP0 * numberOfBCnodes]; - // // nx_dirSW = &NormalX[DIR_MM0 * numberOfBCnodes]; - // // nx_dirSE = &NormalX[DIR_PM0 * numberOfBCnodes]; - // // nx_dirNW = &NormalX[DIR_MP0 * numberOfBCnodes]; - // // nx_dirTE = &NormalX[DIR_P0P * numberOfBCnodes]; - // // nx_dirBW = &NormalX[DIR_M0M * numberOfBCnodes]; - // // nx_dirBE = &NormalX[DIR_P0M * numberOfBCnodes]; - // // nx_dirTW = &NormalX[DIR_M0P * numberOfBCnodes]; - // // nx_dirTN = &NormalX[DIR_0PP * numberOfBCnodes]; - // // nx_dirBS = &NormalX[DIR_0MM * numberOfBCnodes]; - // // nx_dirBN = &NormalX[DIR_0PM * numberOfBCnodes]; - // // nx_dirTS = &NormalX[DIR_0MP * numberOfBCnodes]; - // // nx_dirTNE = &NormalX[DIR_PPP * numberOfBCnodes]; - // // nx_dirTSW = &NormalX[DIR_MMP * numberOfBCnodes]; - // // nx_dirTSE = &NormalX[DIR_PMP * numberOfBCnodes]; - // // nx_dirTNW = &NormalX[DIR_MPP * numberOfBCnodes]; - // // nx_dirBNE = &NormalX[DIR_PPM * numberOfBCnodes]; - // // nx_dirBSW = &NormalX[DIR_MMM * numberOfBCnodes]; - // // nx_dirBSE = &NormalX[DIR_PMM * numberOfBCnodes]; - // // nx_dirBNW = &NormalX[DIR_MPM * numberOfBCnodes]; + // // nx_dirE = &NormalX[dP00 * numberOfBCnodes]; + // // nx_dirW = &NormalX[dM00 * numberOfBCnodes]; + // // nx_dirN = &NormalX[d0P0 * numberOfBCnodes]; + // // nx_dirS = &NormalX[d0M0 * numberOfBCnodes]; + // // nx_dirT = &NormalX[d00P * numberOfBCnodes]; + // // nx_dirB = &NormalX[d00M * numberOfBCnodes]; + // // nx_dirNE = &NormalX[dPP0 * numberOfBCnodes]; + // // nx_dirSW = &NormalX[dMM0 * numberOfBCnodes]; + // // nx_dirSE = &NormalX[dPM0 * numberOfBCnodes]; + // // nx_dirNW = &NormalX[dMP0 * numberOfBCnodes]; + // // nx_dirTE = &NormalX[dP0P * numberOfBCnodes]; + // // nx_dirBW = &NormalX[dM0M * numberOfBCnodes]; + // // nx_dirBE = &NormalX[dP0M * numberOfBCnodes]; + // // nx_dirTW = &NormalX[dM0P * numberOfBCnodes]; + // // nx_dirTN = &NormalX[d0PP * numberOfBCnodes]; + // // nx_dirBS = &NormalX[d0MM * numberOfBCnodes]; + // // nx_dirBN = &NormalX[d0PM * numberOfBCnodes]; + // // nx_dirTS = &NormalX[d0MP * numberOfBCnodes]; + // // nx_dirTNE = &NormalX[dPPP * numberOfBCnodes]; + // // nx_dirTSW = &NormalX[dMMP * numberOfBCnodes]; + // // nx_dirTSE = &NormalX[dPMP * numberOfBCnodes]; + // // nx_dirTNW = &NormalX[dMPP * numberOfBCnodes]; + // // nx_dirBNE = &NormalX[dPPM * numberOfBCnodes]; + // // nx_dirBSW = &NormalX[dMMM * numberOfBCnodes]; + // // nx_dirBSE = &NormalX[dPMM * numberOfBCnodes]; + // // nx_dirBNW = &NormalX[dMPM * numberOfBCnodes]; // //////////////////////////////////////////////////////////////////////////////// // // real *ny_dirE, *ny_dirW, *ny_dirN, *ny_dirS, *ny_dirT, *ny_dirB, // // *ny_dirNE, *ny_dirSW, *ny_dirSE, *ny_dirNW, *ny_dirTE, *ny_dirBW, // // *ny_dirBE, *ny_dirTW, *ny_dirTN, *ny_dirBS, *ny_dirBN, *ny_dirTS, // // *ny_dirTNE, *ny_dirTSW, *ny_dirTSE, *ny_dirTNW, *ny_dirBNE, *ny_dirBSW, // // *ny_dirBSE, *ny_dirBNW; - // // ny_dirE = &NormalY[DIR_P00 * numberOfBCnodes]; - // // ny_dirW = &NormalY[DIR_M00 * numberOfBCnodes]; - // // ny_dirN = &NormalY[DIR_0P0 * numberOfBCnodes]; - // // ny_dirS = &NormalY[DIR_0M0 * numberOfBCnodes]; - // // ny_dirT = &NormalY[DIR_00P * numberOfBCnodes]; - // // ny_dirB = &NormalY[DIR_00M * numberOfBCnodes]; - // // ny_dirNE = &NormalY[DIR_PP0 * numberOfBCnodes]; - // // ny_dirSW = &NormalY[DIR_MM0 * numberOfBCnodes]; - // // ny_dirSE = &NormalY[DIR_PM0 * numberOfBCnodes]; - // // ny_dirNW = &NormalY[DIR_MP0 * numberOfBCnodes]; - // // ny_dirTE = &NormalY[DIR_P0P * numberOfBCnodes]; - // // ny_dirBW = &NormalY[DIR_M0M * numberOfBCnodes]; - // // ny_dirBE = &NormalY[DIR_P0M * numberOfBCnodes]; - // // ny_dirTW = &NormalY[DIR_M0P * numberOfBCnodes]; - // // ny_dirTN = &NormalY[DIR_0PP * numberOfBCnodes]; - // // ny_dirBS = &NormalY[DIR_0MM * numberOfBCnodes]; - // // ny_dirBN = &NormalY[DIR_0PM * numberOfBCnodes]; - // // ny_dirTS = &NormalY[DIR_0MP * numberOfBCnodes]; - // // ny_dirTNE = &NormalY[DIR_PPP * numberOfBCnodes]; - // // ny_dirTSW = &NormalY[DIR_MMP * numberOfBCnodes]; - // // ny_dirTSE = &NormalY[DIR_PMP * numberOfBCnodes]; - // // ny_dirTNW = &NormalY[DIR_MPP * numberOfBCnodes]; - // // ny_dirBNE = &NormalY[DIR_PPM * numberOfBCnodes]; - // // ny_dirBSW = &NormalY[DIR_MMM * numberOfBCnodes]; - // // ny_dirBSE = &NormalY[DIR_PMM * numberOfBCnodes]; - // // ny_dirBNW = &NormalY[DIR_MPM * numberOfBCnodes]; + // // ny_dirE = &NormalY[dP00 * numberOfBCnodes]; + // // ny_dirW = &NormalY[dM00 * numberOfBCnodes]; + // // ny_dirN = &NormalY[d0P0 * numberOfBCnodes]; + // // ny_dirS = &NormalY[d0M0 * numberOfBCnodes]; + // // ny_dirT = &NormalY[d00P * numberOfBCnodes]; + // // ny_dirB = &NormalY[d00M * numberOfBCnodes]; + // // ny_dirNE = &NormalY[dPP0 * numberOfBCnodes]; + // // ny_dirSW = &NormalY[dMM0 * numberOfBCnodes]; + // // ny_dirSE = &NormalY[dPM0 * numberOfBCnodes]; + // // ny_dirNW = &NormalY[dMP0 * numberOfBCnodes]; + // // ny_dirTE = &NormalY[dP0P * numberOfBCnodes]; + // // ny_dirBW = &NormalY[dM0M * numberOfBCnodes]; + // // ny_dirBE = &NormalY[dP0M * numberOfBCnodes]; + // // ny_dirTW = &NormalY[dM0P * numberOfBCnodes]; + // // ny_dirTN = &NormalY[d0PP * numberOfBCnodes]; + // // ny_dirBS = &NormalY[d0MM * numberOfBCnodes]; + // // ny_dirBN = &NormalY[d0PM * numberOfBCnodes]; + // // ny_dirTS = &NormalY[d0MP * numberOfBCnodes]; + // // ny_dirTNE = &NormalY[dPPP * numberOfBCnodes]; + // // ny_dirTSW = &NormalY[dMMP * numberOfBCnodes]; + // // ny_dirTSE = &NormalY[dPMP * numberOfBCnodes]; + // // ny_dirTNW = &NormalY[dMPP * numberOfBCnodes]; + // // ny_dirBNE = &NormalY[dPPM * numberOfBCnodes]; + // // ny_dirBSW = &NormalY[dMMM * numberOfBCnodes]; + // // ny_dirBSE = &NormalY[dPMM * numberOfBCnodes]; + // // ny_dirBNW = &NormalY[dMPM * numberOfBCnodes]; // //////////////////////////////////////////////////////////////////////////////// // // real *nz_dirE, *nz_dirW, *nz_dirN, *nz_dirS, *nz_dirT, *nz_dirB, // // *nz_dirNE, *nz_dirSW, *nz_dirSE, *nz_dirNW, *nz_dirTE, *nz_dirBW, // // *nz_dirBE, *nz_dirTW, *nz_dirTN, *nz_dirBS, *nz_dirBN, *nz_dirTS, // // *nz_dirTNE, *nz_dirTSW, *nz_dirTSE, *nz_dirTNW, *nz_dirBNE, *nz_dirBSW, // // *nz_dirBSE, *nz_dirBNW; - // // nz_dirE = &NormalZ[DIR_P00 * numberOfBCnodes]; - // // nz_dirW = &NormalZ[DIR_M00 * numberOfBCnodes]; - // // nz_dirN = &NormalZ[DIR_0P0 * numberOfBCnodes]; - // // nz_dirS = &NormalZ[DIR_0M0 * numberOfBCnodes]; - // // nz_dirT = &NormalZ[DIR_00P * numberOfBCnodes]; - // // nz_dirB = &NormalZ[DIR_00M * numberOfBCnodes]; - // // nz_dirNE = &NormalZ[DIR_PP0 * numberOfBCnodes]; - // // nz_dirSW = &NormalZ[DIR_MM0 * numberOfBCnodes]; - // // nz_dirSE = &NormalZ[DIR_PM0 * numberOfBCnodes]; - // // nz_dirNW = &NormalZ[DIR_MP0 * numberOfBCnodes]; - // // nz_dirTE = &NormalZ[DIR_P0P * numberOfBCnodes]; - // // nz_dirBW = &NormalZ[DIR_M0M * numberOfBCnodes]; - // // nz_dirBE = &NormalZ[DIR_P0M * numberOfBCnodes]; - // // nz_dirTW = &NormalZ[DIR_M0P * numberOfBCnodes]; - // // nz_dirTN = &NormalZ[DIR_0PP * numberOfBCnodes]; - // // nz_dirBS = &NormalZ[DIR_0MM * numberOfBCnodes]; - // // nz_dirBN = &NormalZ[DIR_0PM * numberOfBCnodes]; - // // nz_dirTS = &NormalZ[DIR_0MP * numberOfBCnodes]; - // // nz_dirTNE = &NormalZ[DIR_PPP * numberOfBCnodes]; - // // nz_dirTSW = &NormalZ[DIR_MMP * numberOfBCnodes]; - // // nz_dirTSE = &NormalZ[DIR_PMP * numberOfBCnodes]; - // // nz_dirTNW = &NormalZ[DIR_MPP * numberOfBCnodes]; - // // nz_dirBNE = &NormalZ[DIR_PPM * numberOfBCnodes]; - // // nz_dirBSW = &NormalZ[DIR_MMM * numberOfBCnodes]; - // // nz_dirBSE = &NormalZ[DIR_PMM * numberOfBCnodes]; - // // nz_dirBNW = &NormalZ[DIR_MPM * numberOfBCnodes]; + // // nz_dirE = &NormalZ[dP00 * numberOfBCnodes]; + // // nz_dirW = &NormalZ[dM00 * numberOfBCnodes]; + // // nz_dirN = &NormalZ[d0P0 * numberOfBCnodes]; + // // nz_dirS = &NormalZ[d0M0 * numberOfBCnodes]; + // // nz_dirT = &NormalZ[d00P * numberOfBCnodes]; + // // nz_dirB = &NormalZ[d00M * numberOfBCnodes]; + // // nz_dirNE = &NormalZ[dPP0 * numberOfBCnodes]; + // // nz_dirSW = &NormalZ[dMM0 * numberOfBCnodes]; + // // nz_dirSE = &NormalZ[dPM0 * numberOfBCnodes]; + // // nz_dirNW = &NormalZ[dMP0 * numberOfBCnodes]; + // // nz_dirTE = &NormalZ[dP0P * numberOfBCnodes]; + // // nz_dirBW = &NormalZ[dM0M * numberOfBCnodes]; + // // nz_dirBE = &NormalZ[dP0M * numberOfBCnodes]; + // // nz_dirTW = &NormalZ[dM0P * numberOfBCnodes]; + // // nz_dirTN = &NormalZ[d0PP * numberOfBCnodes]; + // // nz_dirBS = &NormalZ[d0MM * numberOfBCnodes]; + // // nz_dirBN = &NormalZ[d0PM * numberOfBCnodes]; + // // nz_dirTS = &NormalZ[d0MP * numberOfBCnodes]; + // // nz_dirTNE = &NormalZ[dPPP * numberOfBCnodes]; + // // nz_dirTSW = &NormalZ[dMMP * numberOfBCnodes]; + // // nz_dirTSE = &NormalZ[dPMP * numberOfBCnodes]; + // // nz_dirTNW = &NormalZ[dMPP * numberOfBCnodes]; + // // nz_dirBNE = &NormalZ[dPPM * numberOfBCnodes]; + // // nz_dirBSW = &NormalZ[dMMM * numberOfBCnodes]; + // // nz_dirBSE = &NormalZ[dPMM * numberOfBCnodes]; + // // nz_dirBNW = &NormalZ[dMPM * numberOfBCnodes]; // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //bool changeCell = false; // unsigned int KQK = k_Q[k]; @@ -2190,38 +2190,38 @@ __global__ void ParticleNoSlipDeviceComp27(real* coordX, // unsigned int ktne = KQK; // unsigned int kbsw = neighborZ[ksw]; // //////////////////////////////////////////////////////////////////////////////// - // real f_W = (D.f[DIR_P00])[ke ]; - // real f_E = (D.f[DIR_M00])[kw ]; - // real f_S = (D.f[DIR_0P0])[kn ]; - // real f_N = (D.f[DIR_0M0])[ks ]; - // real f_B = (D.f[DIR_00P])[kt ]; - // real f_T = (D.f[DIR_00M])[kb ]; - // real f_SW = (D.f[DIR_PP0])[kne ]; - // real f_NE = (D.f[DIR_MM0])[ksw ]; - // real f_NW = (D.f[DIR_PM0])[kse ]; - // real f_SE = (D.f[DIR_MP0])[knw ]; - // real f_BW = (D.f[DIR_P0P])[kte ]; - // real f_TE = (D.f[DIR_M0M])[kbw ]; - // real f_TW = (D.f[DIR_P0M])[kbe ]; - // real f_BE = (D.f[DIR_M0P])[ktw ]; - // real f_BS = (D.f[DIR_0PP])[ktn ]; - // real f_TN = (D.f[DIR_0MM])[kbs ]; - // real f_TS = (D.f[DIR_0PM])[kbn ]; - // real f_BN = (D.f[DIR_0MP])[kts ]; - // real f_BSW = (D.f[DIR_PPP])[ktne ]; - // real f_BNE = (D.f[DIR_MMP])[ktsw ]; - // real f_BNW = (D.f[DIR_PMP])[ktse ]; - // real f_BSE = (D.f[DIR_MPP])[ktnw ]; - // real f_TSW = (D.f[DIR_PPM])[kbne ]; - // real f_TNE = (D.f[DIR_MMM])[kbsw ]; - // real f_TNW = (D.f[DIR_PMM])[kbse ]; - // real f_TSE = (D.f[DIR_MPM])[kbnw ]; + // 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 feq, q; // 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[DIR_000])[kzero]); + // 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)) + @@ -2241,63 +2241,63 @@ __global__ void ParticleNoSlipDeviceComp27(real* coordX, // ////////////////////////////////////////////////////////////////////////// // if (isEvenTimestep==false) // { - // D.f[DIR_P00] = &DD[DIR_P00 * size_Mat]; - // D.f[DIR_M00] = &DD[DIR_M00 * size_Mat]; - // D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat]; - // D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat]; - // D.f[DIR_00P] = &DD[DIR_00P * size_Mat]; - // D.f[DIR_00M] = &DD[DIR_00M * size_Mat]; - // D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat]; - // D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat]; - // D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat]; - // D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat]; - // D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat]; - // D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat]; - // D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat]; - // D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat]; - // D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat]; - // D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat]; - // D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat]; - // D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat]; - // D.f[DIR_000] = &DD[DIR_000 * size_Mat]; - // D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat]; - // D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat]; - // D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat]; - // D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat]; - // D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat]; - // D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat]; - // D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat]; - // D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat]; + // 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[DIR_M00] = &DD[DIR_P00 * size_Mat]; - // D.f[DIR_P00] = &DD[DIR_M00 * size_Mat]; - // D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat]; - // D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat]; - // D.f[DIR_00M] = &DD[DIR_00P * size_Mat]; - // D.f[DIR_00P] = &DD[DIR_00M * size_Mat]; - // D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat]; - // D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat]; - // D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat]; - // D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat]; - // D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat]; - // D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat]; - // D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat]; - // D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat]; - // D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat]; - // D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat]; - // D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat]; - // D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat]; - // D.f[DIR_000] = &DD[DIR_000 * size_Mat]; - // D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat]; - // D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat]; - // D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat]; - // D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat]; - // D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat]; - // D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat]; - // D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat]; - // D.f[DIR_MPM] = &DD[DIR_PMP * size_Mat]; + // 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]; // } //} } diff --git a/src/gpu/VirtualFluids_GPU/GPU/PrecursorBCs27.cu b/src/gpu/core/GPU/PrecursorBCs27.cu similarity index 79% rename from src/gpu/VirtualFluids_GPU/GPU/PrecursorBCs27.cu rename to src/gpu/core/GPU/PrecursorBCs27.cu index 64c6b6085c353e16c08f9057f603a7799ce14289..b60559a89691312155cad38617576b2782f555af 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/PrecursorBCs27.cu +++ b/src/gpu/core/GPU/PrecursorBCs27.cu @@ -171,32 +171,32 @@ __global__ void QPrecursorDeviceCompZeroPress( //////////////////////////////////////////////////////////////////////////////// //! - Set local distributions //! - real f_M00 = (dist.f[DIR_P00])[kP00]; - real f_P00 = (dist.f[DIR_M00])[kM00]; - real f_0M0 = (dist.f[DIR_0P0])[k0P0]; - real f_0P0 = (dist.f[DIR_0M0])[k0M0]; - real f_00M = (dist.f[DIR_00P])[k00P]; - real f_00P = (dist.f[DIR_00M])[k00M]; - real f_MM0 = (dist.f[DIR_PP0])[kPP0]; - real f_PP0 = (dist.f[DIR_MM0])[kMM0]; - real f_MP0 = (dist.f[DIR_PM0])[kPM0]; - real f_PM0 = (dist.f[DIR_MP0])[kMP0]; - real f_M0M = (dist.f[DIR_P0P])[kP0P]; - real f_P0P = (dist.f[DIR_M0M])[kM0M]; - real f_M0P = (dist.f[DIR_P0M])[kP0M]; - real f_P0M = (dist.f[DIR_M0P])[kM0P]; - real f_0MM = (dist.f[DIR_0PP])[k0PP]; - real f_0PP = (dist.f[DIR_0MM])[k0MM]; - real f_0MP = (dist.f[DIR_0PM])[k0PM]; - real f_0PM = (dist.f[DIR_0MP])[k0MP]; - real f_MMM = (dist.f[DIR_PPP])[kPPP]; - real f_PPM = (dist.f[DIR_MMP])[kMMP]; - real f_MPM = (dist.f[DIR_PMP])[kPMP]; - real f_PMM = (dist.f[DIR_MPP])[kMPP]; - real f_MMP = (dist.f[DIR_PPM])[kPPM]; - real f_PPP = (dist.f[DIR_MMM])[kMMM]; - real f_MPP = (dist.f[DIR_PMM])[kPMM]; - real f_PMP = (dist.f[DIR_MPM])[kMPM]; + real f_M00 = (dist.f[dP00])[kP00]; + real f_P00 = (dist.f[dM00])[kM00]; + real f_0M0 = (dist.f[d0P0])[k0P0]; + real f_0P0 = (dist.f[d0M0])[k0M0]; + real f_00M = (dist.f[d00P])[k00P]; + real f_00P = (dist.f[d00M])[k00M]; + real f_MM0 = (dist.f[dPP0])[kPP0]; + real f_PP0 = (dist.f[dMM0])[kMM0]; + real f_MP0 = (dist.f[dPM0])[kPM0]; + real f_PM0 = (dist.f[dMP0])[kMP0]; + real f_M0M = (dist.f[dP0P])[kP0P]; + real f_P0P = (dist.f[dM0M])[kM0M]; + real f_M0P = (dist.f[dP0M])[kP0M]; + real f_P0M = (dist.f[dM0P])[kM0P]; + real f_0MM = (dist.f[vf::lbm::dir::d0PP])[k0PP]; + real f_0PP = (dist.f[d0MM])[k0MM]; + real f_0MP = (dist.f[d0PM])[k0PM]; + real f_0PM = (dist.f[d0MP])[k0MP]; + real f_MMM = (dist.f[dPPP])[kPPP]; + real f_PPM = (dist.f[dMMP])[kMMP]; + real f_MPM = (dist.f[dPMP])[kPMP]; + real f_PMM = (dist.f[dMPP])[kMPP]; + real f_MMP = (dist.f[dPPM])[kPPM]; + real f_PPP = (dist.f[dMMM])[kMMM]; + real f_MPP = (dist.f[dPMM])[kPMM]; + real f_PMP = (dist.f[dMPM])[kMPM]; SubgridDistances27 subgridD; getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes); @@ -204,7 +204,7 @@ __global__ void QPrecursorDeviceCompZeroPress( //////////////////////////////////////////////////////////////////////////////// real drho = f_PMP + f_MPP + f_PPP + f_MMP + f_PMM + f_MPM + f_PPM + f_MMM + f_0PM + f_0PP + f_0MP + f_0MM + f_P0M + f_M0P + f_P0P + f_M0M + f_PM0 + f_MP0 + f_PP0 + f_MM0 + - f_00P + f_00M + f_0P0 + f_0M0 + f_P00 + f_M00 + ((dist.f[DIR_000])[k000]); + f_00P + f_00M + f_0P0 + f_0M0 + f_P00 + f_M00 + ((dist.f[d000])[k000]); real vx1 = (((f_PMP - f_MPM) - (f_MPP - f_PMM)) + ((f_PPP - f_MMM) - (f_MMP - f_PPM)) + ((f_P0M - f_M0P) + (f_P0P - f_M0M)) + ((f_PM0 - f_MP0) + (f_PP0 - f_MM0)) + @@ -228,238 +228,238 @@ __global__ void QPrecursorDeviceCompZeroPress( //////////////////////////////////////////////////////////////////////////////// //! - Update distributions with subgrid distance (q) between zero and one real feq, q, velocityLB, velocityBC; - q = (subgridD.q[DIR_P00])[nodeIndex]; + q = (subgridD.q[dP00])[nodeIndex]; if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one { velocityLB = vx1; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = VeloX; - (dist.f[DIR_M00])[kM00] = getInterpolatedDistributionForVeloWithPressureBC(q, f_P00, f_M00, feq, omega, drho, velocityBC, c2o27); + (dist.f[dM00])[kM00] = getInterpolatedDistributionForVeloWithPressureBC(q, f_P00, f_M00, feq, omega, drho, velocityBC, c2o27); } - q = (subgridD.q[DIR_M00])[nodeIndex]; + q = (subgridD.q[dM00])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = -vx1; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = -VeloX; - (dist.f[DIR_P00])[kP00] = getInterpolatedDistributionForVeloWithPressureBC(q, f_M00, f_P00, feq, omega, drho, velocityBC, c2o27); + (dist.f[dP00])[kP00] = getInterpolatedDistributionForVeloWithPressureBC(q, f_M00, f_P00, feq, omega, drho, velocityBC, c2o27); } - q = (subgridD.q[DIR_0P0])[nodeIndex]; + q = (subgridD.q[d0P0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = VeloY; - (dist.f[DIR_0M0])[DIR_0M0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0P0, f_0M0, feq, omega, drho, velocityBC, c2o27); + (dist.f[d0M0])[d0M0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0P0, f_0M0, feq, omega, drho, velocityBC, c2o27); } - q = (subgridD.q[DIR_0M0])[nodeIndex]; + q = (subgridD.q[d0M0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = -vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = -VeloY; - (dist.f[DIR_0P0])[k0P0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0M0, f_0P0, feq, omega, drho, velocityBC, c2o27); + (dist.f[d0P0])[k0P0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0M0, f_0P0, feq, omega, drho, velocityBC, c2o27); } - q = (subgridD.q[DIR_00P])[nodeIndex]; + q = (subgridD.q[d00P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = VeloZ; - (dist.f[DIR_00M])[k00M] = getInterpolatedDistributionForVeloWithPressureBC(q, f_00P, f_00M, feq, omega, drho, velocityBC, c2o27); + (dist.f[d00M])[k00M] = getInterpolatedDistributionForVeloWithPressureBC(q, f_00P, f_00M, feq, omega, drho, velocityBC, c2o27); } - q = (subgridD.q[DIR_00M])[nodeIndex]; + q = (subgridD.q[d00M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = -vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = -VeloZ; - (dist.f[DIR_00P])[k00P] = getInterpolatedDistributionForVeloWithPressureBC(q, f_00M, f_00P, feq, omega, drho, velocityBC, c2o27); + (dist.f[d00P])[k00P] = getInterpolatedDistributionForVeloWithPressureBC(q, f_00M, f_00P, feq, omega, drho, velocityBC, c2o27); } - q = (subgridD.q[DIR_PP0])[nodeIndex]; + q = (subgridD.q[dPP0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = vx1 + vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloX + VeloY; - (dist.f[DIR_MM0])[kMM0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PP0, f_MM0, feq, omega, drho, velocityBC, c1o54); + (dist.f[dMM0])[kMM0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PP0, f_MM0, feq, omega, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_MM0])[nodeIndex]; + q = (subgridD.q[dMM0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = -vx1 - vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloX - VeloY; - (dist.f[DIR_PP0])[kPP0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MM0, f_PP0, feq, omega, drho, velocityBC, c1o54); + (dist.f[dPP0])[kPP0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MM0, f_PP0, feq, omega, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_PM0])[nodeIndex]; + q = (subgridD.q[dPM0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = vx1 - vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloX - VeloY; - (dist.f[DIR_MP0])[kMP0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PM0, f_MP0, feq, omega, drho, velocityBC, c1o54); + (dist.f[dMP0])[kMP0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PM0, f_MP0, feq, omega, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_MP0])[nodeIndex]; + q = (subgridD.q[dMP0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = -vx1 + vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloX + VeloY; - (dist.f[DIR_PM0])[kPM0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MP0, f_PM0, feq, omega, drho, velocityBC, c1o54); + (dist.f[dPM0])[kPM0] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MP0, f_PM0, feq, omega, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_P0P])[nodeIndex]; + q = (subgridD.q[dP0P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = vx1 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloX + VeloZ; - (dist.f[DIR_M0M])[kM0M] = getInterpolatedDistributionForVeloWithPressureBC(q, f_P0P, f_M0M, feq, omega, drho, velocityBC, c1o54); + (dist.f[dM0M])[kM0M] = getInterpolatedDistributionForVeloWithPressureBC(q, f_P0P, f_M0M, feq, omega, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_M0M])[nodeIndex]; + q = (subgridD.q[dM0M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = -vx1 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloX - VeloZ; - (dist.f[DIR_P0P])[kP0P] = getInterpolatedDistributionForVeloWithPressureBC(q, f_M0M, f_P0P, feq, omega, drho, velocityBC, c1o54); + (dist.f[dP0P])[kP0P] = getInterpolatedDistributionForVeloWithPressureBC(q, f_M0M, f_P0P, feq, omega, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_P0M])[nodeIndex]; + q = (subgridD.q[dP0M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = vx1 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloX - VeloZ; - (dist.f[DIR_M0P])[kM0P] = getInterpolatedDistributionForVeloWithPressureBC(q, f_P0M, f_M0P, feq, omega, drho, velocityBC, c1o54); + (dist.f[dM0P])[kM0P] = getInterpolatedDistributionForVeloWithPressureBC(q, f_P0M, f_M0P, feq, omega, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_M0P])[nodeIndex]; + q = (subgridD.q[dM0P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = -vx1 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloX + VeloZ; - (dist.f[DIR_P0M])[kP0M] = getInterpolatedDistributionForVeloWithPressureBC(q, f_M0P, f_P0M, feq, omega, drho, velocityBC, c1o54); + (dist.f[dP0M])[kP0M] = getInterpolatedDistributionForVeloWithPressureBC(q, f_M0P, f_P0M, feq, omega, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_0PP])[nodeIndex]; + q = (subgridD.q[vf::lbm::dir::d0PP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloY + VeloZ; - (dist.f[DIR_0MM])[k0MM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0PP, f_0MM, feq, omega, drho, velocityBC, c1o54); + (dist.f[d0MM])[k0MM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0PP, f_0MM, feq, omega, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_0MM])[nodeIndex]; + q = (subgridD.q[d0MM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = -vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloY - VeloZ; - (dist.f[DIR_0PP])[k0PP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0MM, f_0PP, feq, omega, drho, velocityBC, c1o54); + (dist.f[vf::lbm::dir::d0PP])[k0PP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0MM, f_0PP, feq, omega, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_0PM])[nodeIndex]; + q = (subgridD.q[d0PM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloY - VeloZ; - (dist.f[DIR_0MP])[k0MP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0PM, f_0PP, feq, omega, drho, velocityBC, c1o54); + (dist.f[d0MP])[k0MP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0PM, f_0PP, feq, omega, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_0MP])[nodeIndex]; + q = (subgridD.q[d0MP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = -vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloY + VeloZ; - (dist.f[DIR_0PM])[k0PM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0PP, f_0PM, feq, omega, drho, velocityBC, c1o54); + (dist.f[d0PM])[k0PM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_0PP, f_0PM, feq, omega, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_PPP])[nodeIndex]; + q = (subgridD.q[dPPP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = vx1 + vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = VeloX + VeloY + VeloZ; - (dist.f[DIR_MMM])[kMMM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PPP, f_MMM, feq, omega, drho, velocityBC, c1o216); + (dist.f[dMMM])[kMMM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PPP, f_MMM, feq, omega, drho, velocityBC, c1o216); } - q = (subgridD.q[DIR_MMM])[nodeIndex]; + q = (subgridD.q[dMMM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = -vx1 - vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = -VeloX - VeloY - VeloZ; - (dist.f[DIR_PPP])[kPPP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MMM, f_PPP, feq, omega, drho, velocityBC, c1o216); + (dist.f[dPPP])[kPPP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MMM, f_PPP, feq, omega, drho, velocityBC, c1o216); } - q = (subgridD.q[DIR_PPM])[nodeIndex]; + q = (subgridD.q[dPPM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = vx1 + vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = VeloX + VeloY - VeloZ; - (dist.f[DIR_MMP])[kMMP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PPM, f_MMP, feq, omega, drho, velocityBC, c1o216); + (dist.f[dMMP])[kMMP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PPM, f_MMP, feq, omega, drho, velocityBC, c1o216); } - q = (subgridD.q[DIR_MMP])[nodeIndex]; + q = (subgridD.q[dMMP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = -vx1 - vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = -VeloX - VeloY + VeloZ; - (dist.f[DIR_PPM])[kPPM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MMP, f_PPM, feq, omega, drho, velocityBC, c1o216); + (dist.f[dPPM])[kPPM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MMP, f_PPM, feq, omega, drho, velocityBC, c1o216); } - q = (subgridD.q[DIR_PMP])[nodeIndex]; + q = (subgridD.q[dPMP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = vx1 - vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = VeloX - VeloY + VeloZ; - (dist.f[DIR_MPM])[kMPM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PMP, f_MPM, feq, omega, drho, velocityBC, c1o216); + (dist.f[dMPM])[kMPM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PMP, f_MPM, feq, omega, drho, velocityBC, c1o216); } - q = (subgridD.q[DIR_MPM])[nodeIndex]; + q = (subgridD.q[dMPM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = -vx1 + vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = -VeloX + VeloY - VeloZ; - (dist.f[DIR_PMP])[kPMP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MPM, f_PMP, feq, omega, drho, velocityBC, c1o216); + (dist.f[dPMP])[kPMP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MPM, f_PMP, feq, omega, drho, velocityBC, c1o216); } - q = (subgridD.q[DIR_PMM])[nodeIndex]; + q = (subgridD.q[dPMM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = vx1 - vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = VeloX - VeloY - VeloZ; - (dist.f[DIR_MPP])[kMPP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PMM, f_MPP, feq, omega, drho, velocityBC, c1o216); + (dist.f[dMPP])[kMPP] = getInterpolatedDistributionForVeloWithPressureBC(q, f_PMM, f_MPP, feq, omega, drho, velocityBC, c1o216); } - q = (subgridD.q[DIR_MPP])[nodeIndex]; + q = (subgridD.q[dMPP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { velocityLB = -vx1 + vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = -VeloX + VeloY + VeloZ; - (dist.f[DIR_PMM])[kPMM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MPP, f_PMM, feq, omega, drho, velocityBC, c1o216); + (dist.f[dPMM])[kPMM] = getInterpolatedDistributionForVeloWithPressureBC(q, f_MPP, f_PMM, feq, omega, drho, velocityBC, c1o216); } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -635,33 +635,33 @@ __global__ void PrecursorDeviceEQ27( ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // based on BGK Plus Comp ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real f_M00 = (dist.f[DIR_P00])[kP00]; - real f_P00 = (dist.f[DIR_M00])[kM00]; - real f_0M0 = (dist.f[DIR_0P0])[k0P0]; - real f_0P0 = (dist.f[DIR_0M0])[k0M0]; - real f_00M = (dist.f[DIR_00P])[k00P]; - real f_00P = (dist.f[DIR_00M])[k00M]; - real f_MM0 = (dist.f[DIR_PP0])[kPP0]; - real f_PP0 = (dist.f[DIR_MM0])[kMM0]; - real f_MP0 = (dist.f[DIR_PM0])[kPM0]; - real f_PM0 = (dist.f[DIR_MP0])[kMP0]; - real f_M0M = (dist.f[DIR_P0P])[kP0P]; - real f_P0P = (dist.f[DIR_M0M])[kM0M]; - real f_M0P = (dist.f[DIR_P0M])[kP0M]; - real f_P0M = (dist.f[DIR_M0P])[kM0P]; - real f_0MM = (dist.f[DIR_0PP])[k0PP]; - real f_0PP = (dist.f[DIR_0MM])[k0MM]; - real f_0PM = (dist.f[DIR_0MP])[k0MP]; - real f_0MP = (dist.f[DIR_0PM])[k0PM]; - real f_000 = (dist.f[DIR_000])[k000]; - real f_MMM = (dist.f[DIR_PPP])[kPPP]; - real f_PPM = (dist.f[DIR_MMP])[kMMP]; - real f_MPM = (dist.f[DIR_PMP])[kPMP]; - real f_PMM = (dist.f[DIR_MPP])[kMPP]; - real f_MMP = (dist.f[DIR_PPM])[kPPM]; - real f_PPP = (dist.f[DIR_MMM])[kMMM]; - real f_MPP = (dist.f[DIR_PMM])[kPMM]; - real f_PMP = (dist.f[DIR_MPM])[kMPM]; + real f_M00 = (dist.f[dP00])[kP00]; + real f_P00 = (dist.f[dM00])[kM00]; + real f_0M0 = (dist.f[d0P0])[k0P0]; + real f_0P0 = (dist.f[d0M0])[k0M0]; + real f_00M = (dist.f[d00P])[k00P]; + real f_00P = (dist.f[d00M])[k00M]; + real f_MM0 = (dist.f[dPP0])[kPP0]; + real f_PP0 = (dist.f[dMM0])[kMM0]; + real f_MP0 = (dist.f[dPM0])[kPM0]; + real f_PM0 = (dist.f[dMP0])[kMP0]; + real f_M0M = (dist.f[dP0P])[kP0P]; + real f_P0P = (dist.f[dM0M])[kM0M]; + real f_M0P = (dist.f[dP0M])[kP0M]; + real f_P0M = (dist.f[dM0P])[kM0P]; + real f_0MM = (dist.f[vf::lbm::dir::d0PP])[k0PP]; + real f_0PP = (dist.f[d0MM])[k0MM]; + real f_0PM = (dist.f[d0MP])[k0MP]; + real f_0MP = (dist.f[d0PM])[k0PM]; + real f_000 = (dist.f[d000])[k000]; + real f_MMM = (dist.f[dPPP])[kPPP]; + real f_PPM = (dist.f[dMMP])[kMMP]; + real f_MPM = (dist.f[dPMP])[kPMP]; + real f_PMM = (dist.f[dMPP])[kMPP]; + real f_MMP = (dist.f[dPPM])[kPPM]; + real f_PPP = (dist.f[dMMM])[kMMM]; + real f_MPP = (dist.f[dPMM])[kPMM]; + real f_PMP = (dist.f[dMPM])[kMPM]; //////////////////////////////////////////////////////////////////////////////// //! - Set macroscopic quantities @@ -708,35 +708,35 @@ __global__ void PrecursorDeviceEQ27( //////////////////////////////////////////////////////////////////////////////// //! write the new distributions to the bc nodes //! - (dist.f[DIR_P00])[kP00] = f_M00; - (dist.f[DIR_PP0])[kPP0] = f_MM0; - (dist.f[DIR_P0M])[kP0M] = f_M0P; - (dist.f[DIR_PM0])[kPM0] = f_MP0; - (dist.f[DIR_PMP])[kPMP] = f_MPM; - (dist.f[DIR_P0P])[kP0P] = f_M0M; - (dist.f[DIR_PPM])[kPPM] = f_MMP; - (dist.f[DIR_PPP])[kPPP] = f_MMM; - (dist.f[DIR_PMM])[kPMM] = f_MPP; - - (dist.f[DIR_M00])[kM00] = f_P00; - (dist.f[DIR_MM0])[kMM0] = f_PP0; - (dist.f[DIR_M0M])[kM0M] = f_P0P; - (dist.f[DIR_MP0])[kMP0] = f_PM0; - (dist.f[DIR_M0P])[kM0P] = f_P0M; - (dist.f[DIR_MMM])[kMMM] = f_PPP; - (dist.f[DIR_MMP])[kMMP] = f_PPM; - (dist.f[DIR_MPP])[kMPP] = f_PMM; - (dist.f[DIR_MPM])[kMPM] = f_PMP; - - (dist.f[DIR_0P0])[k0P0] = f_0M0; - (dist.f[DIR_0M0])[k0M0] = f_0P0; - (dist.f[DIR_00P])[k00P] = f_00M; - (dist.f[DIR_00M])[k00M] = f_00P; - (dist.f[DIR_0PP])[k0PP] = f_0MM; - (dist.f[DIR_0MM])[k0MM] = f_0PP; - (dist.f[DIR_0PM])[k0PM] = f_0MP; - (dist.f[DIR_0MP])[k0MP] = f_0PM; - (dist.f[DIR_000])[k000] = f_000; + (dist.f[dP00])[kP00] = f_M00; + (dist.f[dPP0])[kPP0] = f_MM0; + (dist.f[dP0M])[kP0M] = f_M0P; + (dist.f[dPM0])[kPM0] = f_MP0; + (dist.f[dPMP])[kPMP] = f_MPM; + (dist.f[dP0P])[kP0P] = f_M0M; + (dist.f[dPPM])[kPPM] = f_MMP; + (dist.f[dPPP])[kPPP] = f_MMM; + (dist.f[dPMM])[kPMM] = f_MPP; + + (dist.f[dM00])[kM00] = f_P00; + (dist.f[dMM0])[kMM0] = f_PP0; + (dist.f[dM0M])[kM0M] = f_P0P; + (dist.f[dMP0])[kMP0] = f_PM0; + (dist.f[dM0P])[kM0P] = f_P0M; + (dist.f[dMMM])[kMMM] = f_PPP; + (dist.f[dMMP])[kMMP] = f_PPM; + (dist.f[dMPP])[kMPP] = f_PMM; + (dist.f[dMPM])[kMPM] = f_PMP; + + (dist.f[d0P0])[k0P0] = f_0M0; + (dist.f[d0M0])[k0M0] = f_0P0; + (dist.f[d00P])[k00P] = f_00M; + (dist.f[d00M])[k00M] = f_00P; + (dist.f[vf::lbm::dir::d0PP])[k0PP] = f_0MM; + (dist.f[d0MM])[k0MM] = f_0PP; + (dist.f[d0PM])[k0PM] = f_0MP; + (dist.f[d0MP])[k0MP] = f_0PM; + (dist.f[d000])[k000] = f_000; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -929,15 +929,15 @@ __global__ void PrecursorDeviceDistributions( unsigned int kPPP = KQK; // unsigned int kMMM = neighborZ[kMM0]; - dist.f[DIR_P00][kP00] = f0LastInterp*(1.f-timeRatio) + f0NextInterp*timeRatio; - dist.f[DIR_PP0][kPP0] = f1LastInterp*(1.f-timeRatio) + f1NextInterp*timeRatio; - dist.f[DIR_PM0][kPM0] = f2LastInterp*(1.f-timeRatio) + f2NextInterp*timeRatio; - dist.f[DIR_P0P][kP0P] = f3LastInterp*(1.f-timeRatio) + f3NextInterp*timeRatio; - dist.f[DIR_P0M][kP0M] = f4LastInterp*(1.f-timeRatio) + f4NextInterp*timeRatio; - dist.f[DIR_PPP][kPPP] = f5LastInterp*(1.f-timeRatio) + f5NextInterp*timeRatio; - dist.f[DIR_PMP][kPMP] = f6LastInterp*(1.f-timeRatio) + f6NextInterp*timeRatio; - dist.f[DIR_PPM][kPPM] = f7LastInterp*(1.f-timeRatio) + f7NextInterp*timeRatio; - dist.f[DIR_PMM][kPMM] = f8LastInterp*(1.f-timeRatio) + f8NextInterp*timeRatio; + dist.f[dP00][kP00] = f0LastInterp*(1.f-timeRatio) + f0NextInterp*timeRatio; + dist.f[dPP0][kPP0] = f1LastInterp*(1.f-timeRatio) + f1NextInterp*timeRatio; + dist.f[dPM0][kPM0] = f2LastInterp*(1.f-timeRatio) + f2NextInterp*timeRatio; + dist.f[dP0P][kP0P] = f3LastInterp*(1.f-timeRatio) + f3NextInterp*timeRatio; + dist.f[dP0M][kP0M] = f4LastInterp*(1.f-timeRatio) + f4NextInterp*timeRatio; + dist.f[dPPP][kPPP] = f5LastInterp*(1.f-timeRatio) + f5NextInterp*timeRatio; + dist.f[dPMP][kPMP] = f6LastInterp*(1.f-timeRatio) + f6NextInterp*timeRatio; + dist.f[dPPM][kPPM] = f7LastInterp*(1.f-timeRatio) + f7NextInterp*timeRatio; + dist.f[dPMM][kPMM] = f8LastInterp*(1.f-timeRatio) + f8NextInterp*timeRatio; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1143,15 +1143,15 @@ __global__ void QPrecursorDeviceDistributions( getPointersToSubgridDistances(qs, subgridDistances, sizeQ); real q; - q = qs.q[DIR_P00][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[DIR_P00][kP00] = f0LastInterp*(1.f-timeRatio) + f0NextInterp*timeRatio; - q = qs.q[DIR_PP0][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[DIR_PP0][kPP0] = f1LastInterp*(1.f-timeRatio) + f1NextInterp*timeRatio; - q = qs.q[DIR_PM0][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[DIR_PM0][kPM0] = f2LastInterp*(1.f-timeRatio) + f2NextInterp*timeRatio; - q = qs.q[DIR_P0P][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[DIR_P0P][kP0P] = f3LastInterp*(1.f-timeRatio) + f3NextInterp*timeRatio; - q = qs.q[DIR_P0M][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[DIR_P0M][kP0M] = f4LastInterp*(1.f-timeRatio) + f4NextInterp*timeRatio; - q = qs.q[DIR_PPP][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[DIR_PPP][kPPP] = f5LastInterp*(1.f-timeRatio) + f5NextInterp*timeRatio; - q = qs.q[DIR_PMP][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[DIR_PMP][kPMP] = f6LastInterp*(1.f-timeRatio) + f6NextInterp*timeRatio; - q = qs.q[DIR_PPM][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[DIR_PPM][kPPM] = f7LastInterp*(1.f-timeRatio) + f7NextInterp*timeRatio; - q = qs.q[DIR_PMM][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[DIR_PMM][kPMM] = f8LastInterp*(1.f-timeRatio) + f8NextInterp*timeRatio; + q = qs.q[dP00][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[dP00][kP00] = f0LastInterp*(1.f-timeRatio) + f0NextInterp*timeRatio; + q = qs.q[dPP0][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[dPP0][kPP0] = f1LastInterp*(1.f-timeRatio) + f1NextInterp*timeRatio; + q = qs.q[dPM0][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[dPM0][kPM0] = f2LastInterp*(1.f-timeRatio) + f2NextInterp*timeRatio; + q = qs.q[dP0P][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[dP0P][kP0P] = f3LastInterp*(1.f-timeRatio) + f3NextInterp*timeRatio; + q = qs.q[dP0M][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[dP0M][kP0M] = f4LastInterp*(1.f-timeRatio) + f4NextInterp*timeRatio; + q = qs.q[dPPP][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[dPPP][kPPP] = f5LastInterp*(1.f-timeRatio) + f5NextInterp*timeRatio; + q = qs.q[dPMP][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[dPMP][kPMP] = f6LastInterp*(1.f-timeRatio) + f6NextInterp*timeRatio; + q = qs.q[dPPM][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[dPPM][kPPM] = f7LastInterp*(1.f-timeRatio) + f7NextInterp*timeRatio; + q = qs.q[dPMM][nodeIndex]; if(q>= c0o1 && q <= c1o1) dist.f[dPMM][kPMM] = f8LastInterp*(1.f-timeRatio) + f8NextInterp*timeRatio; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/gpu/core/GPU/PressBCs27.cu b/src/gpu/core/GPU/PressBCs27.cu new file mode 100644 index 0000000000000000000000000000000000000000..9ccd5a496b7bb233a2c322e8f2564079d610f7b6 --- /dev/null +++ b/src/gpu/core/GPU/PressBCs27.cu @@ -0,0 +1,5294 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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/>. +// +//! \file PressBCs27.cu +//! \ingroup GPU +//! \author Martin Schoenherr, Anna Wellmann +//====================================================================================== +#include "LBM/LB.h" +#include "lbm/constants/D3Q27.h" +#include "basics/constants/NumericConstants.h" +#include "lbm/MacroscopicQuantities.h" +#include "LBM/GPUHelperFunctions/KernelUtilities.h" + +using namespace vf::basics::constant; +using namespace vf::lbm::dir; +using namespace vf::gpu; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +__global__ void QInflowScaleByPressDevice27( + real* rhoBC, + real* DD, + int* k_Q, + int* k_N, + int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //////////////////////////////////////////////////////////////////////////////// + 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) + { + //////////////////////////////////////////////////////////////////////////////// + //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]; + //////////////////////////////////////////////////////////////////////////////// + //index1 + unsigned int K1QK = k_N[k]; + unsigned int k1zero= K1QK; + unsigned int k1e = K1QK; + unsigned int k1w = neighborX[K1QK]; + unsigned int k1n = K1QK; + unsigned int k1s = neighborY[K1QK]; + unsigned int k1t = K1QK; + unsigned int k1b = neighborZ[K1QK]; + unsigned int k1sw = neighborY[k1w]; + unsigned int k1ne = K1QK; + unsigned int k1se = k1s; + unsigned int k1nw = k1w; + unsigned int k1bw = neighborZ[k1w]; + unsigned int k1te = K1QK; + unsigned int k1be = k1b; + unsigned int k1tw = k1w; + unsigned int k1bs = neighborZ[k1s]; + unsigned int k1tn = K1QK; + unsigned int k1bn = k1b; + unsigned int k1ts = k1s; + unsigned int k1tse = k1s; + unsigned int k1bnw = k1bw; + unsigned int k1tnw = k1w; + unsigned int k1bse = k1bs; + unsigned int k1tsw = k1sw; + unsigned int k1bne = k1b; + unsigned int k1tne = K1QK; + unsigned int k1bsw = neighborZ[k1sw]; + //////////////////////////////////////////////////////////////////////////////// + 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]; + } + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real f1_E = (D.f[dP00])[k1e ]; + real f1_W = (D.f[dM00])[k1w ]; + real f1_N = (D.f[d0P0])[k1n ]; + real f1_S = (D.f[d0M0])[k1s ]; + real f1_T = (D.f[d00P])[k1t ]; + real f1_B = (D.f[d00M])[k1b ]; + real f1_NE = (D.f[dPP0])[k1ne ]; + real f1_SW = (D.f[dMM0])[k1sw ]; + real f1_SE = (D.f[dPM0])[k1se ]; + real f1_NW = (D.f[dMP0])[k1nw ]; + real f1_TE = (D.f[dP0P])[k1te ]; + real f1_BW = (D.f[dM0M])[k1bw ]; + real f1_BE = (D.f[dP0M])[k1be ]; + real f1_TW = (D.f[dM0P])[k1tw ]; + real f1_TN = (D.f[d0PP])[k1tn ]; + real f1_BS = (D.f[d0MM])[k1bs ]; + real f1_BN = (D.f[d0PM])[k1bn ]; + real f1_TS = (D.f[d0MP])[k1ts ]; + //real f1_ZERO = (D.f[d000])[k1zero]; + real f1_TNE = (D.f[dPPP])[k1tne ]; + real f1_TSW = (D.f[dMMP])[k1tsw ]; + real f1_TSE = (D.f[dPMP])[k1tse ]; + real f1_TNW = (D.f[dMPP])[k1tnw ]; + real f1_BNE = (D.f[dPPM])[k1bne ]; + real f1_BSW = (D.f[dMMM])[k1bsw ]; + real f1_BSE = (D.f[dPMM])[k1bse ]; + real f1_BNW = (D.f[dMPM])[k1bnw ]; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real f_E = (D.f[dP00])[ke ]; + real f_W = (D.f[dM00])[kw ]; + real f_N = (D.f[d0P0])[kn ]; + real f_S = (D.f[d0M0])[ks ]; + real f_T = (D.f[d00P])[kt ]; + real f_B = (D.f[d00M])[kb ]; + real f_NE = (D.f[dPP0])[kne ]; + real f_SW = (D.f[dMM0])[ksw ]; + real f_SE = (D.f[dPM0])[kse ]; + real f_NW = (D.f[dMP0])[knw ]; + real f_TE = (D.f[dP0P])[kte ]; + real f_BW = (D.f[dM0M])[kbw ]; + real f_BE = (D.f[dP0M])[kbe ]; + real f_TW = (D.f[dM0P])[ktw ]; + real f_TN = (D.f[d0PP])[ktn ]; + real f_BS = (D.f[d0MM])[kbs ]; + real f_BN = (D.f[d0PM])[kbn ]; + real f_TS = (D.f[d0MP])[kts ]; + //real f_ZERO = (D.f[d000])[kzero]; + real f_TNE = (D.f[dPPP])[ktne ]; + real f_TSW = (D.f[dMMP])[ktsw ]; + real f_TSE = (D.f[dPMP])[ktse ]; + real f_TNW = (D.f[dMPP])[ktnw ]; + real f_BNE = (D.f[dPPM])[kbne ]; + real f_BSW = (D.f[dMMM])[kbsw ]; + real f_BSE = (D.f[dPMM])[kbse ]; + real f_BNW = (D.f[dMPM])[kbnw ]; + ////////////////////////////////////////////////////////////////////////// + // real vx1, vx2, vx3; + real drho, drho1; + ////////////////////////////////////////////////////////////////////////// + //Dichte + drho1 = f1_TSE + f1_TNW + f1_TNE + f1_TSW + f1_BSE + f1_BNW + f1_BNE + f1_BSW + + f1_BN + f1_TS + f1_TN + f1_BS + f1_BE + f1_TW + f1_TE + f1_BW + f1_SE + f1_NW + f1_NE + f1_SW + + f1_T + f1_B + f1_N + f1_S + f1_E + f1_W + ((D.f[d000])[k1zero]); + 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]); + ////////////////////////////////////////////////////////////////////////// + //Schallgeschwindigkeit + real cs = c1o1 / sqrtf(c3o1); + ////////////////////////////////////////////////////////////////////////// + real rhoInterpol = drho1 * cs + (c1o1 - cs) * drho; + //real diffRho = (rhoBC[k] + one) / (rhoInterpol + one); + real diffRhoToAdd = rhoBC[k] - rhoInterpol; + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //no velocity + ////////////////////////////////////////// + f_E = f1_E * cs + (c1o1 - cs) * f_E ; + f_W = f1_W * cs + (c1o1 - cs) * f_W ; + f_N = f1_N * cs + (c1o1 - cs) * f_N ; + f_S = f1_S * cs + (c1o1 - cs) * f_S ; + f_T = f1_T * cs + (c1o1 - cs) * f_T ; + f_B = f1_B * cs + (c1o1 - cs) * f_B ; + f_NE = f1_NE * cs + (c1o1 - cs) * f_NE ; + f_SW = f1_SW * cs + (c1o1 - cs) * f_SW ; + f_SE = f1_SE * cs + (c1o1 - cs) * f_SE ; + f_NW = f1_NW * cs + (c1o1 - cs) * f_NW ; + f_TE = f1_TE * cs + (c1o1 - cs) * f_TE ; + f_BW = f1_BW * cs + (c1o1 - cs) * f_BW ; + f_BE = f1_BE * cs + (c1o1 - cs) * f_BE ; + f_TW = f1_TW * cs + (c1o1 - cs) * f_TW ; + f_TN = f1_TN * cs + (c1o1 - cs) * f_TN ; + f_BS = f1_BS * cs + (c1o1 - cs) * f_BS ; + f_BN = f1_BN * cs + (c1o1 - cs) * f_BN ; + f_TS = f1_TS * cs + (c1o1 - cs) * f_TS ; + f_TNE = f1_TNE * cs + (c1o1 - cs) * f_TNE ; + f_TSW = f1_TSW * cs + (c1o1 - cs) * f_TSW ; + f_TSE = f1_TSE * cs + (c1o1 - cs) * f_TSE ; + f_TNW = f1_TNW * cs + (c1o1 - cs) * f_TNW ; + f_BNE = f1_BNE * cs + (c1o1 - cs) * f_BNE ; + f_BSW = f1_BSW * cs + (c1o1 - cs) * f_BSW ; + f_BSE = f1_BSE * cs + (c1o1 - cs) * f_BSE ; + f_BNW = f1_BNW * cs + (c1o1 - cs) * f_BNW ; + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //scale by press + ////////////////////////////////////////// + //f_E = (f_E + c2over27 ) * diffRho - c2over27 ; + // f_W = (f_W + c2over27 ) * diffRho - c2over27 ; + // f_N = (f_N + c2over27 ) * diffRho - c2over27 ; + // f_S = (f_S + c2over27 ) * diffRho - c2over27 ; + // f_T = (f_T + c2over27 ) * diffRho - c2over27 ; + // f_B = (f_B + c2over27 ) * diffRho - c2over27 ; + //f_NE = (f_NE + c1over54 ) * diffRho - c1over54 ; + // f_SW = (f_SW + c1over54 ) * diffRho - c1over54 ; + // f_SE = (f_SE + c1over54 ) * diffRho - c1over54 ; + // f_NW = (f_NW + c1over54 ) * diffRho - c1over54 ; + // f_TE = (f_TE + c1over54 ) * diffRho - c1over54 ; + // f_BW = (f_BW + c1over54 ) * diffRho - c1over54 ; + // f_BE = (f_BE + c1over54 ) * diffRho - c1over54 ; + // f_TW = (f_TW + c1over54 ) * diffRho - c1over54 ; + // f_TN = (f_TN + c1over54 ) * diffRho - c1over54 ; + // f_BS = (f_BS + c1over54 ) * diffRho - c1over54 ; + // f_BN = (f_BN + c1over54 ) * diffRho - c1over54 ; + // f_TS = (f_TS + c1over54 ) * diffRho - c1over54 ; + // f_TNE = (f_TNE + c1over216) * diffRho - c1over216; + // f_TSW = (f_TSW + c1over216) * diffRho - c1over216; + // f_TSE = (f_TSE + c1over216) * diffRho - c1over216; + // f_TNW = (f_TNW + c1over216) * diffRho - c1over216; + // f_BNE = (f_BNE + c1over216) * diffRho - c1over216; + // f_BSW = (f_BSW + c1over216) * diffRho - c1over216; + // f_BSE = (f_BSE + c1over216) * diffRho - c1over216; + // f_BNW = (f_BNW + c1over216) * diffRho - c1over216; + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // add press + ////////////////////////////////////////// + f_E = (f_E + c2o27 * diffRhoToAdd); + f_W = (f_W + c2o27 * diffRhoToAdd); + f_N = (f_N + c2o27 * diffRhoToAdd); + f_S = (f_S + c2o27 * diffRhoToAdd); + f_T = (f_T + c2o27 * diffRhoToAdd); + f_B = (f_B + c2o27 * diffRhoToAdd); + f_NE = (f_NE + c1o54 * diffRhoToAdd); + f_SW = (f_SW + c1o54 * diffRhoToAdd); + f_SE = (f_SE + c1o54 * diffRhoToAdd); + f_NW = (f_NW + c1o54 * diffRhoToAdd); + f_TE = (f_TE + c1o54 * diffRhoToAdd); + f_BW = (f_BW + c1o54 * diffRhoToAdd); + f_BE = (f_BE + c1o54 * diffRhoToAdd); + f_TW = (f_TW + c1o54 * diffRhoToAdd); + f_TN = (f_TN + c1o54 * diffRhoToAdd); + f_BS = (f_BS + c1o54 * diffRhoToAdd); + f_BN = (f_BN + c1o54 * diffRhoToAdd); + f_TS = (f_TS + c1o54 * diffRhoToAdd); + f_TNE = (f_TNE + c1o216 * diffRhoToAdd); + f_TSW = (f_TSW + c1o216 * diffRhoToAdd); + f_TSE = (f_TSE + c1o216 * diffRhoToAdd); + f_TNW = (f_TNW + c1o216 * diffRhoToAdd); + f_BNE = (f_BNE + c1o216 * diffRhoToAdd); + f_BSW = (f_BSW + c1o216 * diffRhoToAdd); + f_BSE = (f_BSE + c1o216 * diffRhoToAdd); + f_BNW = (f_BNW + c1o216 * diffRhoToAdd); + ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + ////////////////////////////////////////////////////////////////////////// + if (isEvenTimestep==false) + { + 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]; + } + ////////////////////////////////////////////////////////////////////////// + //__syncthreads(); + // -X + //(D.f[dP00])[ke ] = f_E ; + //(D.f[dPM0])[kse ] = f_SE ; + //(D.f[dPP0])[kne ] = f_NE ; + //(D.f[dP0M])[kbe ] = f_BE ; + //(D.f[dP0P])[kte ] = f_TE ; + //(D.f[dPMP])[ktse ] = f_TSE ; + //(D.f[dPPP])[ktne ] = f_TNE ; + //(D.f[dPMM])[kbse ] = f_BSE ; + //(D.f[dPPM])[kbne ] = f_BNE ; + // X + (D.f[dM00])[kw ] = f_W ; + (D.f[dMM0])[ksw ] = f_SW ; + (D.f[dMP0])[knw ] = f_NW ; + (D.f[dM0M])[kbw ] = f_BW ; + (D.f[dM0P])[ktw ] = f_TW ; + (D.f[dMMP])[ktsw ] = f_TSW ; + (D.f[dMPP])[ktnw ] = f_TNW ; + (D.f[dMMM])[kbsw ] = f_BSW ; + (D.f[dMPM])[kbnw ] = f_BNW ; + // Y + //(D.f[d0M0])[ks ] = f_S ; + //(D.f[dPM0])[kse ] = f_SE ; + //(D.f[dMM0])[ksw ] = f_SW ; + //(D.f[d0MP])[kts ] = f_TS ; + //(D.f[d0MM])[kbs ] = f_BS ; + //(D.f[dPMP])[ktse ] = f_TSE ; + //(D.f[dMMP])[ktsw ] = f_TSW ; + //(D.f[dPMM])[kbse ] = f_BSE ; + //(D.f[dMMM])[kbsw ] = f_BSW ; + // Z + //(D.f[d00M])[kb ] = f_B ; + //(D.f[dP0M])[kbe ] = f_BE ; + //(D.f[dM0M])[kbw ] = f_BW ; + //(D.f[d0PM])[kbn ] = f_BN ; + //(D.f[d0MM])[kbs ] = f_BS ; + //(D.f[dPPM])[kbne ] = f_BNE ; + //(D.f[dMPM])[kbnw ] = f_BNW ; + //(D.f[dPMM])[kbse ] = f_BSE ; + //(D.f[dMMM])[kbsw ] = f_BSW ; + ////////////////////////////////////////////////////////////////////////// + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +__global__ void QPressDeviceIncompNEQ27( + real* rhoBC, + real* DD, + int* k_Q, + int* k_N, + int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //////////////////////////////////////////////////////////////////////////////// + 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) + { + //////////////////////////////////////////////////////////////////////////////// + //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]; + //////////////////////////////////////////////////////////////////////////////// + //index1 + unsigned int K1QK = k_N[k]; + unsigned int k1zero= K1QK; + unsigned int k1e = K1QK; + unsigned int k1w = neighborX[K1QK]; + unsigned int k1n = K1QK; + unsigned int k1s = neighborY[K1QK]; + unsigned int k1t = K1QK; + unsigned int k1b = neighborZ[K1QK]; + unsigned int k1sw = neighborY[k1w]; + unsigned int k1ne = K1QK; + unsigned int k1se = k1s; + unsigned int k1nw = k1w; + unsigned int k1bw = neighborZ[k1w]; + unsigned int k1te = K1QK; + unsigned int k1be = k1b; + unsigned int k1tw = k1w; + unsigned int k1bs = neighborZ[k1s]; + unsigned int k1tn = K1QK; + unsigned int k1bn = k1b; + unsigned int k1ts = k1s; + unsigned int k1tse = k1s; + unsigned int k1bnw = k1bw; + unsigned int k1tnw = k1w; + unsigned int k1bse = k1bs; + unsigned int k1tsw = k1sw; + unsigned int k1bne = k1b; + unsigned int k1tne = K1QK; + unsigned int k1bsw = neighborZ[k1sw]; + //////////////////////////////////////////////////////////////////////////////// + Distributions27 D; + if (isEvenTimestep==true) //// ACHTUNG PREColl !!!!!!!!!!!!!! + { + 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]; + } + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO, + f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW; + + f1_W = (D.f[dP00])[k1e ]; + f1_E = (D.f[dM00])[k1w ]; + f1_S = (D.f[d0P0])[k1n ]; + f1_N = (D.f[d0M0])[k1s ]; + f1_B = (D.f[d00P])[k1t ]; + f1_T = (D.f[d00M])[k1b ]; + f1_SW = (D.f[dPP0])[k1ne ]; + f1_NE = (D.f[dMM0])[k1sw ]; + f1_NW = (D.f[dPM0])[k1se ]; + f1_SE = (D.f[dMP0])[k1nw ]; + f1_BW = (D.f[dP0P])[k1te ]; + f1_TE = (D.f[dM0M])[k1bw ]; + f1_TW = (D.f[dP0M])[k1be ]; + f1_BE = (D.f[dM0P])[k1tw ]; + f1_BS = (D.f[d0PP])[k1tn ]; + f1_TN = (D.f[d0MM])[k1bs ]; + f1_TS = (D.f[d0PM])[k1bn ]; + f1_BN = (D.f[d0MP])[k1ts ]; + f1_ZERO = (D.f[d000])[k1zero]; + f1_BSW = (D.f[dPPP])[k1tne ]; + f1_BNE = (D.f[dMMP])[k1tsw ]; + f1_BNW = (D.f[dPMP])[k1tse ]; + f1_BSE = (D.f[dMPP])[k1tnw ]; + f1_TSW = (D.f[dPPM])[k1bne ]; + f1_TNE = (D.f[dMMM])[k1bsw ]; + f1_TNW = (D.f[dPMM])[k1bse ]; + f1_TSE = (D.f[dMPM])[k1bnw ]; + + ////////////////////////////////////////////////////////////////////////// + real drho1 = f1_ZERO+f1_E+f1_W+f1_N+f1_S+f1_T+f1_B+f1_NE+f1_SW+f1_SE+f1_NW+f1_TE+f1_BW+f1_BE+f1_TW+f1_TN+f1_BS+f1_BN+f1_TS+ + f1_TNE+f1_TSW+f1_TSE+f1_TNW+f1_BNE+f1_BSW+f1_BSE+f1_BNW; + + real vx1 = ((f1_TSE - f1_BNW) - (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) - (f1_TSW - f1_BNE)) + + ((f1_BE - f1_TW) + (f1_TE - f1_BW)) + ((f1_SE - f1_NW) + (f1_NE - f1_SW)) + + (f1_E - f1_W); + + + real vx2 = (-(f1_TSE - f1_BNW) + (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) - (f1_TSW - f1_BNE)) + + ((f1_BN - f1_TS) + (f1_TN - f1_BS)) + (-(f1_SE - f1_NW) + (f1_NE - f1_SW)) + + (f1_N - f1_S); + + real vx3 = ((f1_TSE - f1_BNW) + (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) + (f1_TSW - f1_BNE)) + + (-(f1_BN - f1_TS) + (f1_TN - f1_BS)) + ((f1_TE - f1_BW) - (f1_BE - f1_TW)) + + (f1_T - f1_B); + + real cusq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); + + f1_ZERO -= c8o27* (drho1-(drho1+c1o1)*cusq); + f1_E -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cusq)); + f1_W -= c2o27* (drho1+(drho1+c1o1)*(c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cusq)); + f1_N -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cusq)); + f1_S -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cusq)); + f1_T -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx3)+c9o2*( vx3)*( vx3)-cusq)); + f1_B -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cusq)); + f1_NE -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cusq)); + f1_SW -= c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cusq)); + f1_SE -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cusq)); + f1_NW -= c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cusq)); + f1_TE -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cusq)); + f1_BW -= c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cusq)); + f1_BE -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cusq)); + f1_TW -= c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cusq)); + f1_TN -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cusq)); + f1_BS -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cusq)); + f1_BN -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cusq)); + f1_TS -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cusq)); + f1_TNE -= c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq)); + f1_BSW -= c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq)); + f1_BNE -= c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq)); + f1_TSW -= c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq)); + f1_TSE -= c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq)); + f1_BNW -= c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq)); + f1_BSE -= c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq)); + f1_TNW -= c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq)); + + drho1 = rhoBC[k]; + + //if(vx1 < zero){ + // vx1 *= 0.9; + //} + //if(vx2 < zero){ + // vx2 *= c1o10;//0.9; + //} + + f1_ZERO += c8o27* (drho1-(drho1+c1o1)*cusq); + f1_E += c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cusq)); + f1_W += c2o27* (drho1+(drho1+c1o1)*(c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cusq)); + f1_N += c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cusq)); + f1_S += c2o27* (drho1+(drho1+c1o1)*(c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cusq)); + f1_T += c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx3)+c9o2*( vx3)*( vx3)-cusq)); + f1_B += c2o27* (drho1+(drho1+c1o1)*(c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cusq)); + f1_NE += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cusq)); + f1_SW += c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cusq)); + f1_SE += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cusq)); + f1_NW += c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cusq)); + f1_TE += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cusq)); + f1_BW += c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cusq)); + f1_BE += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cusq)); + f1_TW += c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cusq)); + f1_TN += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cusq)); + f1_BS += c1o54* (drho1+(drho1+c1o1)*(c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cusq)); + f1_BN += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cusq)); + f1_TS += c1o54* (drho1+(drho1+c1o1)*(c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cusq)); + f1_TNE += c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq)); + f1_BSW += c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq)); + f1_BNE += c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq)); + f1_TSW += c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq)); + f1_TSE += c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq)); + f1_BNW += c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq)); + f1_BSE += c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq)); + f1_TNW += c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq)); + + //drho1 = (drho1 + rhoBC[k])/2.f; + //drho1 = drho1 - rhoBC[k]; + ////////////////////////////////////////////////////////////////////////// + + __syncthreads(); + + (D.f[dP00])[ke ] = f1_W ; + (D.f[dM00])[kw ] = f1_E ; + (D.f[d0P0])[kn ] = f1_S ; + (D.f[d0M0])[ks ] = f1_N ; + (D.f[d00P])[kt ] = f1_B ; + (D.f[d00M])[kb ] = f1_T ; + (D.f[dPP0])[kne ] = f1_SW ; + (D.f[dMM0])[ksw ] = f1_NE ; + (D.f[dPM0])[kse ] = f1_NW ; + (D.f[dMP0])[knw ] = f1_SE ; + (D.f[dP0P])[kte ] = f1_BW ; + (D.f[dM0M])[kbw ] = f1_TE ; + (D.f[dP0M])[kbe ] = f1_TW ; + (D.f[dM0P])[ktw ] = f1_BE ; + (D.f[d0PP])[ktn ] = f1_BS ; + (D.f[d0MM])[kbs ] = f1_TN ; + (D.f[d0PM])[kbn ] = f1_TS ; + (D.f[d0MP])[kts ] = f1_BN ; + (D.f[d000])[kzero] = f1_ZERO; + (D.f[dPPP])[ktne ] = f1_BSW ; + (D.f[dMMP])[ktsw ] = f1_BNE ; + (D.f[dPMP])[ktse ] = f1_BNW ; + (D.f[dMPP])[ktnw ] = f1_BSE ; + (D.f[dPPM])[kbne ] = f1_TSW ; + (D.f[dMMM])[kbsw ] = f1_TNE ; + (D.f[dPMM])[kbse ] = f1_TNW ; + (D.f[dMPM])[kbnw ] = f1_TSE ; + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +__global__ void QPressDeviceNEQ27( + real* rhoBC, + real* distributions, + int* bcNodeIndices, + int* bcNeighborIndices, + int numberOfBCnodes, + real omega1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //////////////////////////////////////////////////////////////////////////////// + //! The pressure boundary condition is executed in the following steps + //! + + //////////////////////////////////////////////////////////////////////////////// + //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. + //! + const unsigned nodeIndex = getNodeIndex(); + + //////////////////////////////////////////////////////////////////////////////// + //! - Run for all indices in size of boundary condition (numberOfBCnodes) + //! + if(nodeIndex < numberOfBCnodes) + { + ////////////////////////////////////////////////////////////////////////// + //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref + //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> + //! + Distributions27 dist; + getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); + + //////////////////////////////////////////////////////////////////////////////// + //! - Set local pressure + //! + real rhoBClocal = rhoBC[nodeIndex]; + + //////////////////////////////////////////////////////////////////////////////// + //! - Set neighbor indices (necessary for indirect addressing) + //! + unsigned int KQK = bcNodeIndices[nodeIndex]; + 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]; + //////////////////////////////////////////////////////////////////////////////// + //! - Set neighbor indices (necessary for indirect addressing) for neighboring node + //! + unsigned int K1QK = bcNeighborIndices[nodeIndex]; + unsigned int k1zero= K1QK; + unsigned int k1e = K1QK; + unsigned int k1w = neighborX[K1QK]; + unsigned int k1n = K1QK; + unsigned int k1s = neighborY[K1QK]; + unsigned int k1t = K1QK; + unsigned int k1b = neighborZ[K1QK]; + unsigned int k1sw = neighborY[k1w]; + unsigned int k1ne = K1QK; + unsigned int k1se = k1s; + unsigned int k1nw = k1w; + unsigned int k1bw = neighborZ[k1w]; + unsigned int k1te = K1QK; + unsigned int k1be = k1b; + unsigned int k1tw = k1w; + unsigned int k1bs = neighborZ[k1s]; + unsigned int k1tn = K1QK; + unsigned int k1bn = k1b; + unsigned int k1ts = k1s; + unsigned int k1tse = k1s; + unsigned int k1bnw = k1bw; + unsigned int k1tnw = k1w; + unsigned int k1bse = k1bs; + unsigned int k1tsw = k1sw; + unsigned int k1bne = k1b; + unsigned int k1tne = K1QK; + unsigned int k1bsw = neighborZ[k1sw]; + + //////////////////////////////////////////////////////////////////////////////// + //! - Set local distributions for neighboring node + //! + real f1_W = (dist.f[dP00])[k1e ]; + real f1_E = (dist.f[dM00])[k1w ]; + real f1_S = (dist.f[d0P0])[k1n ]; + real f1_N = (dist.f[d0M0])[k1s ]; + real f1_B = (dist.f[d00P])[k1t ]; + real f1_T = (dist.f[d00M])[k1b ]; + real f1_SW = (dist.f[dPP0])[k1ne ]; + real f1_NE = (dist.f[dMM0])[k1sw ]; + real f1_NW = (dist.f[dPM0])[k1se ]; + real f1_SE = (dist.f[dMP0])[k1nw ]; + real f1_BW = (dist.f[dP0P])[k1te ]; + real f1_TE = (dist.f[dM0M])[k1bw ]; + real f1_TW = (dist.f[dP0M])[k1be ]; + real f1_BE = (dist.f[dM0P])[k1tw ]; + real f1_BS = (dist.f[d0PP])[k1tn ]; + real f1_TN = (dist.f[d0MM])[k1bs ]; + real f1_TS = (dist.f[d0PM])[k1bn ]; + real f1_BN = (dist.f[d0MP])[k1ts ]; + real f1_ZERO = (dist.f[d000])[k1zero]; + real f1_BSW = (dist.f[dPPP])[k1tne ]; + real f1_BNE = (dist.f[dMMP])[k1tsw ]; + real f1_BNW = (dist.f[dPMP])[k1tse ]; + real f1_BSE = (dist.f[dMPP])[k1tnw ]; + real f1_TSW = (dist.f[dPPM])[k1bne ]; + real f1_TNE = (dist.f[dMMM])[k1bsw ]; + real f1_TNW = (dist.f[dPMM])[k1bse ]; + real f1_TSE = (dist.f[dMPM])[k1bnw ]; + + //////////////////////////////////////////////////////////////////////////////// + //! - Calculate macroscopic quantities (for neighboring node) + //! + real drho1 = f1_TSE + f1_TNW + f1_TNE + f1_TSW + f1_BSE + f1_BNW + f1_BNE + f1_BSW + + f1_BN + f1_TS + f1_TN + f1_BS + f1_BE + f1_TW + f1_TE + f1_BW + f1_SE + f1_NW + f1_NE + f1_SW + + f1_T + f1_B + f1_N + f1_S + f1_E + f1_W + ((dist.f[d000])[kzero]); + + real vx1 = (((f1_TSE - f1_BNW) - (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) - (f1_TSW - f1_BNE)) + + ((f1_BE - f1_TW) + (f1_TE - f1_BW)) + ((f1_SE - f1_NW) + (f1_NE - f1_SW)) + + (f1_E - f1_W)) / (c1o1 + drho1); + + real vx2 = ((-(f1_TSE - f1_BNW) + (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) - (f1_TSW - f1_BNE)) + + ((f1_BN - f1_TS) + (f1_TN - f1_BS)) + (-(f1_SE - f1_NW) + (f1_NE - f1_SW)) + + (f1_N - f1_S)) / (c1o1 + drho1); + + real vx3 = (((f1_TSE - f1_BNW) + (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) + (f1_TSW - f1_BNE)) + + (-(f1_BN - f1_TS) + (f1_TN - f1_BS)) + ((f1_TE - f1_BW) - (f1_BE - f1_TW)) + + (f1_T - f1_B)) / (c1o1 + drho1); + + real cusq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3); + + //////////////////////////////////////////////////////////////////////////////// + //! subtract the equilibrium (eq) to obtain the non-equilibrium (neq) (for neighboring node) + //! + f1_ZERO -= c8o27* (drho1-(drho1+c1o1)*cusq); + f1_E -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cusq)); + f1_W -= c2o27* (drho1+(drho1+c1o1)*(c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cusq)); + f1_N -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cusq)); + f1_S -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cusq)); + f1_T -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx3)+c9o2*( vx3)*( vx3)-cusq)); + f1_B -= c2o27* (drho1+(drho1+c1o1)*(c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cusq)); + f1_NE -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cusq)); + f1_SW -= c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cusq)); + f1_SE -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cusq)); + f1_NW -= c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cusq)); + f1_TE -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cusq)); + f1_BW -= c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cusq)); + f1_BE -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cusq)); + f1_TW -= c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cusq)); + f1_TN -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cusq)); + f1_BS -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cusq)); + f1_BN -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cusq)); + f1_TS -= c1o54* (drho1+(drho1+c1o1)*(c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cusq)); + f1_TNE -= c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq)); + f1_BSW -= c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq)); + f1_BNE -= c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq)); + f1_TSW -= c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq)); + f1_TSE -= c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq)); + f1_BNW -= c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq)); + f1_BSE -= c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq)); + f1_TNW -= c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq)); + + //////////////////////////////////////////////////////////////////////////////// + //! redefine drho1 with rhoBClocal + //! + drho1 = rhoBClocal; + + //////////////////////////////////////////////////////////////////////////////// + //! add the equilibrium (eq), which is calculated with rhoBClocal (for neighboring node) + //! + f1_ZERO += c8o27* (drho1-(drho1+c1o1)*cusq); + f1_E += c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cusq)); + f1_W += c2o27* (drho1+(drho1+c1o1)*(c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cusq)); + f1_N += c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cusq)); + f1_S += c2o27* (drho1+(drho1+c1o1)*(c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cusq)); + f1_T += c2o27* (drho1+(drho1+c1o1)*(c3o1*( vx3)+c9o2*( vx3)*( vx3)-cusq)); + f1_B += c2o27* (drho1+(drho1+c1o1)*(c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cusq)); + f1_NE += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cusq)); + f1_SW += c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cusq)); + f1_SE += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cusq)); + f1_NW += c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cusq)); + f1_TE += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cusq)); + f1_BW += c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cusq)); + f1_BE += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cusq)); + f1_TW += c1o54* (drho1+(drho1+c1o1)*(c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cusq)); + f1_TN += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cusq)); + f1_BS += c1o54* (drho1+(drho1+c1o1)*(c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cusq)); + f1_BN += c1o54* (drho1+(drho1+c1o1)*(c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cusq)); + f1_TS += c1o54* (drho1+(drho1+c1o1)*(c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cusq)); + f1_TNE += c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq)); + f1_BSW += c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq)); + f1_BNE += c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq)); + f1_TSW += c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq)); + f1_TSE += c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq)); + f1_BNW += c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq)); + f1_BSE += c1o216*(drho1+(drho1+c1o1)*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq)); + f1_TNW += c1o216*(drho1+(drho1+c1o1)*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq)); + + ////////////////////////////////////////////////////////////////////////// + + __syncthreads(); + + //////////////////////////////////////////////////////////////////////////////// + //! write the new distributions to the bc nodes + //! + (dist.f[dP00])[ke ] = f1_W ; + (dist.f[dM00])[kw ] = f1_E ; + (dist.f[d0P0])[kn ] = f1_S ; + (dist.f[d0M0])[ks ] = f1_N ; + (dist.f[d00P])[kt ] = f1_B ; + (dist.f[d00M])[kb ] = f1_T ; + (dist.f[dPP0])[kne ] = f1_SW ; + (dist.f[dMM0])[ksw ] = f1_NE ; + (dist.f[dPM0])[kse ] = f1_NW ; + (dist.f[dMP0])[knw ] = f1_SE ; + (dist.f[dP0P])[kte ] = f1_BW ; + (dist.f[dM0M])[kbw ] = f1_TE ; + (dist.f[dP0M])[kbe ] = f1_TW ; + (dist.f[dM0P])[ktw ] = f1_BE ; + (dist.f[d0PP])[ktn ] = f1_BS ; + (dist.f[d0MM])[kbs ] = f1_TN ; + (dist.f[d0PM])[kbn ] = f1_TS ; + (dist.f[d0MP])[kts ] = f1_BN ; + (dist.f[d000])[kzero] = f1_ZERO; + (dist.f[dPPP])[ktne ] = f1_BSW ; + (dist.f[dMMP])[ktsw ] = f1_BNE ; + (dist.f[dPMP])[ktse ] = f1_BNW ; + (dist.f[dMPP])[ktnw ] = f1_BSE ; + (dist.f[dPPM])[kbne ] = f1_TSW ; + (dist.f[dMMM])[kbsw ] = f1_TNE ; + (dist.f[dPMM])[kbse ] = f1_TNW ; + (dist.f[dMPM])[kbnw ] = f1_TSE ; + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//////////////////////////////////////////////////////////////////////////////// +__global__ void LB_BC_Press_East27( + int nx, + int ny, + int tz, + unsigned int* bcMatD, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + real* DD, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //thread-index + int ty = blockIdx.x; + int tx = threadIdx.x; + + int k, k1, nxny; // Zugriff auf arrays im device + + int x = tx + STARTOFFX; // Globaler x-Index + int y = ty + STARTOFFY; // Globaler y-Index + int z = tz + STARTOFFZ; // Globaler z-Index + + k = nx*(ny*z + y) + x; + nxny = nx*ny; + k1 = k-nxny; + + if( bcMatD[k] == GEO_PRESS && bcMatD[k1] == GEO_FLUID) + { + 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]; + } + //////////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + //index + unsigned int kzero= k; + unsigned int ke = k; + unsigned int kw = neighborX[k]; + unsigned int kn = k; + unsigned int ks = neighborY[k]; + unsigned int kt = k; + unsigned int kb = neighborZ[k]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = k; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = k; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = k; + 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 = k; + unsigned int kbsw = neighborZ[ksw]; + //unsigned int kzero= k; + //unsigned int ke = k; + //unsigned int kw = k + 1; + //unsigned int kn = k; + //unsigned int ks = k + nx; + //unsigned int kt = k; + //unsigned int kb = k + nxny; + //unsigned int ksw = k + nx + 1; + //unsigned int kne = k; + //unsigned int kse = k + nx; + //unsigned int knw = k + 1; + //unsigned int kbw = k + nxny + 1; + //unsigned int kte = k; + //unsigned int kbe = k + nxny; + //unsigned int ktw = k + 1; + //unsigned int kbs = k + nxny + nx; + //unsigned int ktn = k; + //unsigned int kbn = k + nxny; + //unsigned int kts = k + nx; + //unsigned int ktse = k + nx; + //unsigned int kbnw = k + nxny + 1; + //unsigned int ktnw = k + 1; + //unsigned int kbse = k + nxny + nx; + //unsigned int ktsw = k + nx + 1; + //unsigned int kbne = k + nxny; + //unsigned int ktne = k; + //unsigned int kbsw = k + nxny + nx + 1; + //////////////////////////////////////////////////////////////////////////////// + //index1 + unsigned int k1zero= k1; + unsigned int k1e = k1; + unsigned int k1w = neighborX[k1]; + unsigned int k1n = k1; + unsigned int k1s = neighborY[k1]; + unsigned int k1t = k1; + unsigned int k1b = neighborZ[k1]; + unsigned int k1sw = neighborY[k1w]; + unsigned int k1ne = k1; + unsigned int k1se = k1s; + unsigned int k1nw = k1w; + unsigned int k1bw = neighborZ[k1w]; + unsigned int k1te = k1; + unsigned int k1be = k1b; + unsigned int k1tw = k1w; + unsigned int k1bs = neighborZ[k1s]; + unsigned int k1tn = k1; + unsigned int k1bn = k1b; + unsigned int k1ts = k1s; + unsigned int k1tse = k1s; + unsigned int k1bnw = k1bw; + unsigned int k1tnw = k1w; + unsigned int k1bse = k1bs; + unsigned int k1tsw = k1sw; + unsigned int k1bne = k1b; + unsigned int k1tne = k1; + unsigned int k1bsw = neighborZ[k1sw]; + //unsigned int k1zero= k1; + //unsigned int k1e = k1; + //unsigned int k1w = k1 + 1; + //unsigned int k1n = k1; + //unsigned int k1s = k1 + nx; + //unsigned int k1t = k1; + //unsigned int k1b = k1 + nxny; + //unsigned int k1sw = k1 + nx + 1; + //unsigned int k1ne = k1; + //unsigned int k1se = k1 + nx; + //unsigned int k1nw = k1 + 1; + //unsigned int k1bw = k1 + nxny + 1; + //unsigned int k1te = k1; + //unsigned int k1be = k1 + nxny; + //unsigned int k1tw = k1 + 1; + //unsigned int k1bs = k1 + nxny + nx; + //unsigned int k1tn = k1; + //unsigned int k1bn = k1 + nxny; + //unsigned int k1ts = k1 + nx; + //unsigned int k1tse = k1 + nx; + //unsigned int k1bnw = k1 + nxny + 1; + //unsigned int k1tnw = k1 + 1; + //unsigned int k1bse = k1 + nxny + nx; + //unsigned int k1tsw = k1 + nx + 1; + //unsigned int k1bne = k1 + nxny; + //unsigned int k1tne = k1; + //unsigned int k1bsw = k1 + nxny + nx + 1; + //////////////////////////////////////////////////////////////////////////////// + real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO, + f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW; + + f1_W = (D.f[dP00])[k1e ]; + f1_E = (D.f[dM00])[k1w ]; + f1_S = (D.f[d0P0])[k1n ]; + f1_N = (D.f[d0M0])[k1s ]; + f1_B = (D.f[d00P])[k1t ]; + f1_T = (D.f[d00M])[k1b ]; + f1_SW = (D.f[dPP0])[k1ne ]; + f1_NE = (D.f[dMM0])[k1sw ]; + f1_NW = (D.f[dPM0])[k1se ]; + f1_SE = (D.f[dMP0])[k1nw ]; + f1_BW = (D.f[dP0P])[k1te ]; + f1_TE = (D.f[dM0M])[k1bw ]; + f1_TW = (D.f[dP0M])[k1be ]; + f1_BE = (D.f[dM0P])[k1tw ]; + f1_BS = (D.f[d0PP])[k1tn ]; + f1_TN = (D.f[d0MM])[k1bs ]; + f1_TS = (D.f[d0PM])[k1bn ]; + f1_BN = (D.f[d0MP])[k1ts ]; + f1_ZERO = (D.f[d000])[k1zero]; + f1_BSW = (D.f[dPPP])[k1tne ]; + f1_BNE = (D.f[dMMP])[k1tsw ]; + f1_BNW = (D.f[dPMP])[k1tse ]; + f1_BSE = (D.f[dMPP])[k1tnw ]; + f1_TSW = (D.f[dPPM])[k1bne ]; + f1_TNE = (D.f[dMMM])[k1bsw ]; + f1_TNW = (D.f[dPMM])[k1bse ]; + f1_TSE = (D.f[dMPM])[k1bnw ]; + + real drho1 = f1_ZERO+f1_E+f1_W+f1_N+f1_S+f1_T+f1_B+f1_NE+f1_SW+f1_SE+f1_NW+f1_TE+f1_BW+f1_BE+f1_TW+f1_TN+f1_BS+f1_BN+f1_TS+ + f1_TNE+f1_TSW+f1_TSE+f1_TNW+f1_BNE+f1_BSW+f1_BSE+f1_BNW; + + __syncthreads(); + + (D.f[dP00])[ke ] = f1_W -c2o27*drho1; + (D.f[dM00])[kw ] = f1_E -c2o27*drho1; + (D.f[d0P0])[kn ] = f1_S -c2o27*drho1; + (D.f[d0M0])[ks ] = f1_N -c2o27*drho1; + (D.f[d00P])[kt ] = f1_B -c2o27*drho1; + (D.f[d00M])[kb ] = f1_T -c2o27*drho1; + (D.f[dPP0])[kne ] = f1_SW -c1o54*drho1; + (D.f[dMM0])[ksw ] = f1_NE -c1o54*drho1; + (D.f[dPM0])[kse ] = f1_NW -c1o54*drho1; + (D.f[dMP0])[knw ] = f1_SE -c1o54*drho1; + (D.f[dP0P])[kte ] = f1_BW -c1o54*drho1; + (D.f[dM0M])[kbw ] = f1_TE -c1o54*drho1; + (D.f[dP0M])[kbe ] = f1_TW -c1o54*drho1; + (D.f[dM0P])[ktw ] = f1_BE -c1o54*drho1; + (D.f[d0PP])[ktn ] = f1_BS -c1o54*drho1; + (D.f[d0MM])[kbs ] = f1_TN -c1o54*drho1; + (D.f[d0PM])[kbn ] = f1_TS -c1o54*drho1; + (D.f[d0MP])[kts ] = f1_BN -c1o54*drho1; + (D.f[d000])[kzero] = f1_ZERO-c8o27*drho1; + (D.f[dPPP])[ktne ] = f1_BSW -c1o216*drho1; + (D.f[dMMP])[ktsw ] = f1_BNE -c1o216*drho1; + (D.f[dPMP])[ktse ] = f1_BNW -c1o216*drho1; + (D.f[dMPP])[ktnw ] = f1_BSE -c1o216*drho1; + (D.f[dPPM])[kbne ] = f1_TSW -c1o216*drho1; + (D.f[dMMM])[kbsw ] = f1_TNE -c1o216*drho1; + (D.f[dPMM])[kbse ] = f1_TNW -c1o216*drho1; + (D.f[dMPM])[kbnw ] = f1_TSE -c1o216*drho1; + } + __syncthreads(); +} +////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void QPressDevice27( + real* rhoBC, + real* DD, + 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]; + } + //////////////////////////////////////////////////////////////////////////////// + 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 q, vx1, vx2, vx3, drho; + 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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); + ////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////// + drho = rhoBC[k]; + //deltaRho = (rhoBC[k] + one) / (deltaRho + one); + //////////////////////////////////////////////////////////////////////////////// + if (isEvenTimestep==false) + { + 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]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + q = q_dirE[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dM00])[kw]=c2o27* (drho+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); + //(D.f[dP00])[ke]=c2over27* (drho+three*( vx1 )+c9over2*( vx1 )*( vx1 )-cu_sq); + } + + q = q_dirW[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dP00])[ke]=c2o27* (drho+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); + //(D.f[dM00])[kw]=c2over27* (drho+three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cu_sq); + } + + q = q_dirN[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[d0M0])[ks]=c2o27* (drho+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); + //(D.f[d0P0])[kn]=c2over27* (drho+three*( vx2 )+c9over2*( vx2 )*( vx2 )-cu_sq); + } + + q = q_dirS[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[d0P0])[kn]=c2o27* (drho+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); + //(D.f[d0M0])[ks]=c2over27* (drho+three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cu_sq); + } + + q = q_dirT[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[d00M])[kb]=c2o27* (drho+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); + //(D.f[d00P])[kt]=c2over27* (drho+three*( vx3)+c9over2*( vx3)*( vx3)-cu_sq); + } + + q = q_dirB[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[d00P])[kt]=c2o27* (drho+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); + //(D.f[d00M])[kb]=c2over27* (drho+three*( -vx3)+c9over2*( -vx3)*( -vx3)-cu_sq); + } + + q = q_dirNE[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dMM0])[ksw]=c1o54* (drho+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); + //(D.f[dPP0])[kne]=c1over54* (drho+three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); + } + + q = q_dirSW[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dPP0])[kne]=c1o54* (drho+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); + //(D.f[dMM0])[ksw]=c1over54* (drho+three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); + } + + q = q_dirSE[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dMP0])[knw]=c1o54* (drho+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); + //(D.f[dPM0])[kse]=c1over54* (drho+three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); + } + + q = q_dirNW[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dPM0])[kse]=c1o54* (drho+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); + //(D.f[dMP0])[knw]=c1over54* (drho+three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); + } + + q = q_dirTE[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dM0M])[kbw]=c1o54* (drho+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); + //(D.f[dP0P])[kte]=c1over54* (drho+three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); + } + + q = q_dirBW[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dP0P])[kte]=c1o54* (drho+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); + //(D.f[dM0M])[kbw]=c1over54* (drho+three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); + } + + q = q_dirBE[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dM0P])[ktw]=c1o54* (drho+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); + //(D.f[dP0M])[kbe]=c1over54* (drho+three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); + } + + q = q_dirTW[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dP0M])[kbe]=c1o54* (drho+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); + //(D.f[dM0P])[ktw]=c1over54* (drho+three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); + } + + q = q_dirTN[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[d0MM])[kbs]=c1o54* (drho+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); + //(D.f[d0PP])[ktn]=c1over54* (drho+three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cu_sq); + } + + q = q_dirBS[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[d0PP])[ktn]=c1o54* (drho+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); + //(D.f[d0MM])[kbs]=c1over54* (drho+three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); + } + + q = q_dirBN[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[d0MP])[kts]=c1o54* (drho+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); + //(D.f[d0PM])[kbn]=c1over54* (drho+three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cu_sq); + } + + q = q_dirTS[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[d0PM])[kbn]=c1o54* (drho+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); + //(D.f[d0MP])[kts]=c1over54* (drho+three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); + } + + q = q_dirTNE[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dMMM])[kbsw]=c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); + //(D.f[dPPP])[ktne]=c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); + } + + q = q_dirBSW[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dPPP])[ktne]=c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); + //(D.f[dMMM])[kbsw]=c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); + } + + q = q_dirBNE[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dMMP])[ktsw]=c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); + //(D.f[dPPM])[kbne]=c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); + } + + q = q_dirTSW[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dPPM])[kbne]=c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); + //(D.f[dMMP])[ktsw]=c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); + } + + q = q_dirTSE[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dMPM])[kbnw]=c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); + //(D.f[dPMP])[ktse]=c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); + } + + q = q_dirBNW[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dPMP])[ktse]=c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); + //(D.f[dMPM])[kbnw]=c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); + } + + q = q_dirBSE[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dMPP])[ktnw]=c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); + //(D.f[dPMM])[kbse]=c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); + } + + q = q_dirTNW[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dPMM])[kbse]=c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); + //(D.f[dMPP])[ktnw]=c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); + } + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void QPressDeviceAntiBB27( + real* rhoBC, + real* vx, + real* vy, + real* vz, + real* DD, + int* k_Q, + real* QQ, + 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]; + } + //////////////////////////////////////////////////////////////////////////////// + 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_ZERO; + + 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 ]; + f_ZERO = (D.f[d000])[kzero]; + //////////////////////////////////////////////////////////////////////////////// + //real vx1, vx2, vx3, drho; + //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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); + ////////////////////////////////////////////////////////////////////////// + real drho = f_ZERO+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; + drho = drho - rhoBC[k]; + drho *= 0.01f; + //////////////////////////////////////////////////////////////////////////////// + real q; + //deltaRho = (rhoBC[k] + one) / (deltaRho + one); + //////////////////////////////////////////////////////////////////////////////// + if (isEvenTimestep==false) + { + 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]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + q = q_dirE[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dM00])[kw]=f_W-c2o27*drho; + } + + q = q_dirW[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dP00])[ke]=f_E-c2o27*drho; + } + + q = q_dirN[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[d0M0])[ks]=f_S-c2o27*drho; + } + + q = q_dirS[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[d0P0])[kn]=f_N-c2o27*drho; + } + + q = q_dirT[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[d00M])[kb]=f_B-c2o27*drho; + } + + q = q_dirB[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[d00P])[kt]=f_T-c2o27*drho; + } + + q = q_dirNE[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dMM0])[ksw]=f_SW-c1o54*drho; + } + + q = q_dirSW[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dPP0])[kne]=f_NE-c1o54*drho; + } + + q = q_dirSE[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dMP0])[knw]=f_NW-c1o54*drho; + } + + q = q_dirNW[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dPM0])[kse]=f_SE-c1o54*drho; + } + + q = q_dirTE[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dM0M])[kbw]=f_BW-c1o54*drho; + } + + q = q_dirBW[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dP0P])[kte]=f_TE-c1o54*drho; + } + + q = q_dirBE[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dM0P])[ktw]=f_TW-c1o54*drho; + } + + q = q_dirTW[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dP0M])[kbe]=f_BE-c1o54*drho; + } + + q = q_dirTN[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[d0MM])[kbs]=f_BS-c1o54*drho; + } + + q = q_dirBS[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[d0PP])[ktn]=f_TN-c1o54*drho; + } + + q = q_dirBN[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[d0MP])[kts]=f_TS-c1o54*drho; + } + + q = q_dirTS[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[d0PM])[kbn]=f_BN-c1o54*drho; + } + + q = q_dirTNE[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dMMM])[kbsw]=f_BSW-c1o216*drho; + } + + q = q_dirBSW[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dPPP])[ktne]=f_TNE-c1o216*drho; + } + + q = q_dirBNE[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dMMP])[ktsw]=f_TSW-c1o216*drho; + } + + q = q_dirTSW[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dPPM])[kbne]=f_BNE-c1o216*drho; + } + + q = q_dirTSE[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dMPM])[kbnw]=f_BNW-c1o216*drho; + } + + q = q_dirBNW[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dPMP])[ktse]=f_TSE-c1o216*drho; + } + + q = q_dirBSE[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dMPP])[ktnw]=f_TNW-c1o216*drho; + } + + q = q_dirTNW[k]; + if (q>=c0o1 && q<=c1o1) + { + (D.f[dPMM])[kbse]=f_BSE-c1o216*drho; + } + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void QPressDeviceFixBackflow27( + real* rhoBC, + real* DD, + int* k_Q, + int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //////////////////////////////////////////////////////////////////////////////// + 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) + { + //////////////////////////////////////////////////////////////////////////////// + //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 deltaRho; + //////////////////////////////////////////////////////////////////////////////// + deltaRho = rhoBC[k]; + //////////////////////////////////////////////////////////////////////////////// + Distributions27 D; + if (isEvenTimestep==false) + { + 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]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + (D.f[dM00])[kw] = c2o27 * deltaRho; + (D.f[dP00])[ke] = c2o27 * deltaRho; + (D.f[d0M0])[ks] = c2o27 * deltaRho; + (D.f[d0P0])[kn] = c2o27 * deltaRho; + (D.f[d00M])[kb] = c2o27 * deltaRho; + (D.f[d00P])[kt] = c2o27 * deltaRho; + (D.f[dMM0])[ksw] = c1o54 * deltaRho; + (D.f[dPP0])[kne] = c1o54 * deltaRho; + (D.f[dMP0])[knw] = c1o54 * deltaRho; + (D.f[dPM0])[kse] = c1o54 * deltaRho; + (D.f[dM0M])[kbw] = c1o54 * deltaRho; + (D.f[dP0P])[kte] = c1o54 * deltaRho; + (D.f[dM0P])[ktw] = c1o54 * deltaRho; + (D.f[dP0M])[kbe] = c1o54 * deltaRho; + (D.f[d0MM])[kbs] = c1o54 * deltaRho; + (D.f[d0PP])[ktn] = c1o54 * deltaRho; + (D.f[d0MP])[kts] = c1o54 * deltaRho; + (D.f[d0PM])[kbn] = c1o54 * deltaRho; + (D.f[dMMM])[kbsw] = c1o216 * deltaRho; + (D.f[dPPP])[ktne] = c1o216 * deltaRho; + (D.f[dMMP])[ktsw] = c1o216 * deltaRho; + (D.f[dPPM])[kbne] = c1o216 * deltaRho; + (D.f[dMPM])[kbnw] = c1o216 * deltaRho; + (D.f[dPMP])[ktse] = c1o216 * deltaRho; + (D.f[dMPP])[ktnw] = c1o216 * deltaRho; + (D.f[dPMM])[kbse] = c1o216 * deltaRho; + (D.f[d000])[kzero] = c8o27 * deltaRho; + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void QPressDeviceDirDepBot27( + real* rhoBC, + real* DD, + int* k_Q, + int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //////////////////////////////////////////////////////////////////////////////// + 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) + { + //////////////////////////////////////////////////////////////////////////////// + //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 rho; + //////////////////////////////////////////////////////////////////////////////// + rho = rhoBC[k]; + //////////////////////////////////////////////////////////////////////////////// + Distributions27 D; + if (isEvenTimestep==false) + { + 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]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real f_E,f_W,f_N,f_S,f_T,f_NE,f_SW,f_SE,f_NW,f_TE,f_TW,f_TN,f_TS,f_ZERO,f_TNE,f_TSW,f_TSE,f_TNW;//, + //f_B,f_BW,f_BE,f_BS,f_BN,f_BSW,f_BNE,f_BNW,f_BSE; + + f_E = (D.f[dP00])[ke ]; + f_W = (D.f[dM00])[kw ]; + f_N = (D.f[d0P0])[kn ]; + f_S = (D.f[d0M0])[ks ]; + f_T = (D.f[d00P])[kt ]; + f_NE = (D.f[dPP0])[kne ]; + f_SW = (D.f[dMM0])[ksw ]; + f_SE = (D.f[dPM0])[kse ]; + f_NW = (D.f[dMP0])[knw ]; + f_TE = (D.f[dP0P])[kte ]; + f_TW = (D.f[dM0P])[ktw ]; + f_TN = (D.f[d0PP])[ktn ]; + f_TS = (D.f[d0MP])[kts ]; + f_ZERO = (D.f[d000])[kzero]; + f_TNE = (D.f[dPPP])[ktne ]; + f_TSW = (D.f[dMMP])[ktsw ]; + f_TSE = (D.f[dPMP])[ktse ]; + f_TNW = (D.f[dMPP])[ktnw ]; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + //f_B = (four*rho- four*f_SW- eight*f_TSW-four*f_W- eight*f_TW- four*f_NW- eight*f_TNW-four*f_S- eight*f_TS-four*f_ZERO+ f_T-four*f_N- eight*f_TN- four*f_SE- eight*f_TSE-four*f_E- eight*f_TE- four*f_NE- eight*f_TNE)/nine; + //f_BW = ( two*rho+ f_SW- four*f_TSW+ f_W- four*f_TW+ f_NW- four*f_TNW- two*f_S- four*f_TS- two*f_ZERO-four*f_T- two*f_N- four*f_TN- five*f_SE- four*f_TSE-five*f_E+fourteen*f_TE- five*f_NE- four*f_TNE)/eighteen; + //f_BE = ( two*rho- five*f_SW- four*f_TSW-five*f_W+fourteen*f_TW- five*f_NW- four*f_TNW- two*f_S- four*f_TS- two*f_ZERO-four*f_T- two*f_N- four*f_TN+ f_SE- four*f_TSE+ f_E- four*f_TE+ f_NE- four*f_TNE)/eighteen; + //f_BS = ( two*rho+ f_SW- four*f_TSW- two*f_W- four*f_TW- five*f_NW- four*f_TNW+ f_S- four*f_TS- two*f_ZERO-four*f_T-five*f_N+fourteen*f_TN+ f_SE- four*f_TSE- two*f_E- four*f_TE- five*f_NE- four*f_TNE)/eighteen; + //f_BN = ( two*rho- five*f_SW- four*f_TSW- two*f_W- four*f_TW+ f_NW- four*f_TNW-five*f_S+fourteen*f_TS- two*f_ZERO-four*f_T+ f_N- four*f_TN- five*f_SE- four*f_TSE- two*f_E- four*f_TE+ f_NE- four*f_TNE)/eighteen; + //f_BSW = ( two*rho+ four*f_SW- four*f_TSW+ f_W- four*f_TW- two*f_NW- four*f_TNW+ f_S- four*f_TS- two*f_ZERO-four*f_T-five*f_N- four*f_TN- two*f_SE- four*f_TSE-five*f_E- four*f_TE-eight*f_NE+sixtyeight*f_TNE)/seventytwo; + //f_BNE = ( two*rho-eight*f_SW+sixtyeight*f_TSW-five*f_W- four*f_TW- two*f_NW- four*f_TNW-five*f_S- four*f_TS- two*f_ZERO-four*f_T+ f_N- four*f_TN- two*f_SE- four*f_TSE+ f_E- four*f_TE+ four*f_NE- four*f_TNE)/seventytwo; + //f_BNW = ( two*rho- two*f_SW- four*f_TSW+ f_W- four*f_TW+ four*f_NW- four*f_TNW-five*f_S- four*f_TS- two*f_ZERO-four*f_T+ f_N- four*f_TN-eight*f_SE+sixtyeight*f_TSE-five*f_E- four*f_TE- two*f_NE- four*f_TNE)/seventytwo; + //f_BSE = ( two*rho- two*f_SW- four*f_TSW-five*f_W- four*f_TW-eight*f_NW+sixtyeight*f_TNW+ f_S- four*f_TS- two*f_ZERO-four*f_T-five*f_N- four*f_TN+ four*f_SE- four*f_TSE+ f_E- four*f_TE- two*f_NE- four*f_TNE)/seventytwo; + + //real drho = f_ZERO+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; + //real vx1 = (f_E -f_W +f_NE-f_SW+f_SE-f_NW+f_TE-f_BW+f_BE-f_TW+ f_TNE-f_TSW+f_TSE-f_TNW+ f_BNE-f_BSW+f_BSE-f_BNW); + //real vx2 = (f_N -f_S +f_NE-f_SW-f_SE+f_NW+f_TN-f_BS+f_BN-f_TS+ f_TNE-f_TSW-f_TSE+f_TNW+ f_BNE-f_BSW-f_BSE+f_BNW); + //real vx3 = (f_T -f_B +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); + + //real cusq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); + + //(D.f[d000])[kzero] = c8over27* (drho-cusq); + //(D.f[dP00])[ke] = c2over27* (drho+three*( vx1 )+c9over2*( vx1 )*( vx1 )-cusq); + //(D.f[dM00])[kw] = c2over27* (drho+three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cusq); + //(D.f[d0P0])[kn] = c2over27* (drho+three*( vx2 )+c9over2*( vx2 )*( vx2 )-cusq); + //(D.f[d0M0])[ks] = c2over27* (drho+three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cusq); + //(D.f[d00P])[kt] = c2over27* (drho+three*( vx3)+c9over2*( vx3)*( vx3)-cusq); + //(D.f[d00M])[kb] = c2over27* (drho+three*( -vx3)+c9over2*( -vx3)*( -vx3)-cusq); + //(D.f[dPP0])[kne] = c1over54* (drho+three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cusq); + //(D.f[dMM0])[ksw] = c1over54* (drho+three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cusq); + //(D.f[dPM0])[kse] = c1over54* (drho+three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cusq); + //(D.f[dMP0])[knw] = c1over54* (drho+three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cusq); + //(D.f[dP0P])[kte] = c1over54* (drho+three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cusq); + //(D.f[dM0M])[kbw] = c1over54* (drho+three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cusq); + //(D.f[dP0M])[kbe] = c1over54* (drho+three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cusq); + //(D.f[dM0P])[ktw] = c1over54* (drho+three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cusq); + //(D.f[d0PP])[ktn] = c1over54* (drho+three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cusq); + //(D.f[d0MM])[kbs] = c1over54* (drho+three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cusq); + //(D.f[d0PM])[kbn] = c1over54* (drho+three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cusq); + //(D.f[d0MP])[kts] = c1over54* (drho+three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cusq); + //(D.f[dPPP])[ktne] = c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq); + //(D.f[dMMM])[kbsw] = c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq); + //(D.f[dPPM])[kbne] = c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq); + //(D.f[dMMP])[ktsw] = c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq); + //(D.f[dPMP])[ktse] = c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq); + //(D.f[dMPM])[kbnw] = c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq); + //(D.f[dPMM])[kbse] = c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq); + //(D.f[dMPP])[ktnw] = c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq); + real drho = f_ZERO+f_E+f_W+f_N+f_S+f_T+f_NE+f_SW+f_SE+f_NW+f_TE+f_TW+f_TN+f_TS+f_TNE+f_TSW+f_TSE+f_TNW; + real dTop = f_T+f_TE+f_TW+f_TN+f_TS+f_TNE+f_TSW+f_TSE+f_TNW; + (D.f[d00M])[kb] = (f_T+c2o27)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c2o27; + (D.f[dM0M])[kbw] = (f_TW+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54; + (D.f[dP0M])[kbe] = (f_TE+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54; + (D.f[d0MM])[kbs] = (f_TS+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54; + (D.f[d0PM])[kbn] = (f_TN+c1o54)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o54; + (D.f[dMMM])[kbsw] = (f_TSW+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216; + (D.f[dPPM])[kbne] = (f_TNE+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216; + (D.f[dMPM])[kbnw] = (f_TNW+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216; + (D.f[dPMM])[kbse] = (f_TSE+c1o216)*(rho-drho+c1o1/c6o1)/(dTop+c1o1/c6o1)-c1o216; + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +__host__ __device__ real computeOutflowDistribution(const real* const &f, const real* const &f1, const int dir, const real cs) +{ + return f1[dir] * cs + (c1o1 - cs) * f[dir]; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +__global__ void QPressNoRhoDevice27( + real* rhoBC, + real* distributions, + int* k_Q, + int* k_N, + int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep, + int direction) +{ + //////////////////////////////////////////////////////////////////////////////// + //! - Get the node index coordinates from threadIdx, blockIdx, blockDim and gridDim. + //! + const unsigned nodeIndex = getNodeIndex(); + + ////////////////////////////////////////////////////////////////////////// + + if(nodeIndex >= numberOfBCnodes) return; + + //////////////////////////////////////////////////////////////////////////////// + //index + unsigned int KQK = k_Q[nodeIndex]; + // 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]; + //////////////////////////////////////////////////////////////////////////////// + //index1 + unsigned int K1QK = k_N[nodeIndex]; + //unsigned int k1zero= K1QK; + unsigned int k1e = K1QK; + unsigned int k1w = neighborX[K1QK]; + unsigned int k1n = K1QK; + unsigned int k1s = neighborY[K1QK]; + unsigned int k1t = K1QK; + unsigned int k1b = neighborZ[K1QK]; + unsigned int k1sw = neighborY[k1w]; + unsigned int k1ne = K1QK; + unsigned int k1se = k1s; + unsigned int k1nw = k1w; + unsigned int k1bw = neighborZ[k1w]; + unsigned int k1te = K1QK; + unsigned int k1be = k1b; + unsigned int k1tw = k1w; + unsigned int k1bs = neighborZ[k1s]; + unsigned int k1tn = K1QK; + unsigned int k1bn = k1b; + unsigned int k1ts = k1s; + unsigned int k1tse = k1s; + unsigned int k1bnw = k1bw; + unsigned int k1tnw = k1w; + unsigned int k1bse = k1bs; + unsigned int k1tsw = k1sw; + unsigned int k1bne = k1b; + unsigned int k1tne = K1QK; + unsigned int k1bsw = neighborZ[k1sw]; + //////////////////////////////////////////////////////////////////////////////// + Distributions27 dist; + getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); + real f[27], f1[27]; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + f1[dP00] = (dist.f[dP00])[k1e ]; + f1[dM00] = (dist.f[dM00])[k1w ]; + f1[d0P0] = (dist.f[d0P0])[k1n ]; + f1[d0M0] = (dist.f[d0M0])[k1s ]; + f1[d00P] = (dist.f[d00P])[k1t ]; + f1[d00M] = (dist.f[d00M])[k1b ]; + f1[dPP0] = (dist.f[dPP0])[k1ne ]; + f1[dMM0] = (dist.f[dMM0])[k1sw ]; + f1[dPM0] = (dist.f[dPM0])[k1se ]; + f1[dMP0] = (dist.f[dMP0])[k1nw ]; + f1[dP0P] = (dist.f[dP0P])[k1te ]; + f1[dM0M] = (dist.f[dM0M])[k1bw ]; + f1[dP0M] = (dist.f[dP0M])[k1be ]; + f1[dM0P] = (dist.f[dM0P])[k1tw ]; + f1[d0PP] = (dist.f[d0PP])[k1tn ]; + f1[d0MM] = (dist.f[d0MM])[k1bs ]; + f1[d0PM] = (dist.f[d0PM])[k1bn ]; + f1[d0MP] = (dist.f[d0MP])[k1ts ]; + // f1[d000] = (dist.f[d000])[k1zero]; + f1[dPPP] = (dist.f[dPPP])[k1tne ]; + f1[dMMP] = (dist.f[dMMP])[k1tsw ]; + f1[dPMP] = (dist.f[dPMP])[k1tse ]; + f1[dMPP] = (dist.f[dMPP])[k1tnw ]; + f1[dPPM] = (dist.f[dPPM])[k1bne ]; + f1[dMMM] = (dist.f[dMMM])[k1bsw ]; + f1[dPMM] = (dist.f[dPMM])[k1bse ]; + f1[dMPM] = (dist.f[dMPM])[k1bnw ]; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + f[dP00] = (dist.f[dP00])[ke ]; + f[dM00] = (dist.f[dM00])[kw ]; + f[d0P0] = (dist.f[d0P0])[kn ]; + f[d0M0] = (dist.f[d0M0])[ks ]; + f[d00P] = (dist.f[d00P])[kt ]; + f[d00M] = (dist.f[d00M])[kb ]; + f[dPP0] = (dist.f[dPP0])[kne ]; + f[dMM0] = (dist.f[dMM0])[ksw ]; + f[dPM0] = (dist.f[dPM0])[kse ]; + f[dMP0] = (dist.f[dMP0])[knw ]; + f[dP0P] = (dist.f[dP0P])[kte ]; + f[dM0M] = (dist.f[dM0M])[kbw ]; + f[dP0M] = (dist.f[dP0M])[kbe ]; + f[dM0P] = (dist.f[dM0P])[ktw ]; + f[d0PP] = (dist.f[d0PP])[ktn ]; + f[d0MM] = (dist.f[d0MM])[kbs ]; + f[d0PM] = (dist.f[d0PM])[kbn ]; + f[d0MP] = (dist.f[d0MP])[kts ]; + // f[d000] = (dist.f[d000])[kzero]; + f[dPPP] = (dist.f[dPPP])[ktne ]; + f[dMMP] = (dist.f[dMMP])[ktsw ]; + f[dPMP] = (dist.f[dPMP])[ktse ]; + f[dMPP] = (dist.f[dMPP])[ktnw ]; + f[dPPM] = (dist.f[dPPM])[kbne ]; + f[dMMM] = (dist.f[dMMM])[kbsw ]; + f[dPMM] = (dist.f[dPMM])[kbse ]; + f[dMPM] = (dist.f[dMPM])[kbnw ]; + ////////////////////////////////////////////////////////////////////////// + + + real cs = c1o1 / sqrtf(c3o1); + + ////////////////////////////////////////////////////////////////////////// + getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep); + switch(direction) + { + case dM00: + (dist.f[dP00])[ke ] = computeOutflowDistribution(f, f1, dP00, cs); + (dist.f[dPM0])[kse ] = computeOutflowDistribution(f, f1, dPM0, cs); + (dist.f[dPP0])[kne ] = computeOutflowDistribution(f, f1, dPP0, cs); + (dist.f[dP0M])[kbe ] = computeOutflowDistribution(f, f1, dP0M, cs); + (dist.f[dP0P])[kte ] = computeOutflowDistribution(f, f1, dP0P, cs); + (dist.f[dPMP])[ktse ] = computeOutflowDistribution(f, f1, dPMP, cs); + (dist.f[dPPP])[ktne ] = computeOutflowDistribution(f, f1, dPPP, cs); + (dist.f[dPMM])[kbse ] = computeOutflowDistribution(f, f1, dPMM, cs); + (dist.f[dPPM])[kbne ] = computeOutflowDistribution(f, f1, dPPM, cs); + break; + + case dP00: + (dist.f[dM00])[kw ] = computeOutflowDistribution(f, f1, dM00, cs); + (dist.f[dMM0])[ksw ] = computeOutflowDistribution(f, f1, dMM0, cs); + (dist.f[dMP0])[knw ] = computeOutflowDistribution(f, f1, dMP0, cs); + (dist.f[dM0M])[kbw ] = computeOutflowDistribution(f, f1, dM0M, cs); + (dist.f[dM0P])[ktw ] = computeOutflowDistribution(f, f1, dM0P, cs); + (dist.f[dMMP])[ktsw ] = computeOutflowDistribution(f, f1, dMMP, cs); + (dist.f[dMPP])[ktnw ] = computeOutflowDistribution(f, f1, dMPP, cs); + (dist.f[dMMM])[kbsw ] = computeOutflowDistribution(f, f1, dMMM, cs); + (dist.f[dMPM])[kbnw ] = computeOutflowDistribution(f, f1, dMPM, cs); + break; + + case d0M0: + (dist.f[d0P0])[kn ] = computeOutflowDistribution(f, f1, d0P0, cs); + (dist.f[dPP0])[kne ] = computeOutflowDistribution(f, f1, dPP0, cs); + (dist.f[dMP0])[knw ] = computeOutflowDistribution(f, f1, dMP0, cs); + (dist.f[d0PP])[ktn ] = computeOutflowDistribution(f, f1, d0PP, cs); + (dist.f[d0PM])[kbn ] = computeOutflowDistribution(f, f1, d0PM, cs); + (dist.f[dPPP])[ktne ] = computeOutflowDistribution(f, f1, dPPP, cs); + (dist.f[dMPP])[ktnw ] = computeOutflowDistribution(f, f1, dMPP, cs); + (dist.f[dPPM])[kbne ] = computeOutflowDistribution(f, f1, dPPM, cs); + (dist.f[dMPM])[kbnw ] = computeOutflowDistribution(f, f1, dMPM, cs); + break; + + case d0P0: + (dist.f[d0M0])[ks ] = computeOutflowDistribution(f, f1, d0M0, cs); + (dist.f[dPM0])[kse ] = computeOutflowDistribution(f, f1, dPM0, cs); + (dist.f[dMM0])[ksw ] = computeOutflowDistribution(f, f1, dMM0, cs); + (dist.f[d0MP])[kts ] = computeOutflowDistribution(f, f1, d0MP, cs); + (dist.f[d0MM])[kbs ] = computeOutflowDistribution(f, f1, d0MM, cs); + (dist.f[dPMP])[ktse ] = computeOutflowDistribution(f, f1, dPMP, cs); + (dist.f[dMMP])[ktsw ] = computeOutflowDistribution(f, f1, dMMP, cs); + (dist.f[dPMM])[kbse ] = computeOutflowDistribution(f, f1, dPMM, cs); + (dist.f[dMMM])[kbsw ] = computeOutflowDistribution(f, f1, dMMM, cs); + break; + + case d00M: + (dist.f[d00P])[kt ] = computeOutflowDistribution(f, f1, d00P, cs); + (dist.f[dP0P])[kte ] = computeOutflowDistribution(f, f1, dP0P, cs); + (dist.f[dM0P])[ktw ] = computeOutflowDistribution(f, f1, dM0P, cs); + (dist.f[d0PP])[ktn ] = computeOutflowDistribution(f, f1, d0PP, cs); + (dist.f[d0MP])[kts ] = computeOutflowDistribution(f, f1, d0MP, cs); + (dist.f[dPPP])[ktne ] = computeOutflowDistribution(f, f1, dPPP, cs); + (dist.f[dMPP])[ktnw ] = computeOutflowDistribution(f, f1, dMPP, cs); + (dist.f[dPMP])[ktse ] = computeOutflowDistribution(f, f1, dPMP, cs); + (dist.f[dMMP])[ktsw ] = computeOutflowDistribution(f, f1, dMMP, cs); + break; + + case d00P: + (dist.f[d00M])[kb ] = computeOutflowDistribution(f, f1, d00M, cs); + (dist.f[dP0M])[kbe ] = computeOutflowDistribution(f, f1, dP0M, cs); + (dist.f[dM0M])[kbw ] = computeOutflowDistribution(f, f1, dM0M, cs); + (dist.f[d0PM])[kbn ] = computeOutflowDistribution(f, f1, d0PM, cs); + (dist.f[d0MM])[kbs ] = computeOutflowDistribution(f, f1, d0MM, cs); + (dist.f[dPPM])[kbne ] = computeOutflowDistribution(f, f1, dPPM, cs); + (dist.f[dMPM])[kbnw ] = computeOutflowDistribution(f, f1, dMPM, cs); + (dist.f[dPMM])[kbse ] = computeOutflowDistribution(f, f1, dPMM, cs); + (dist.f[dMMM])[kbsw ] = computeOutflowDistribution(f, f1, dMMM, cs); + break; + default: + break; + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +__host__ __device__ real computeOutflowDistribution(const real* const &f, const real* const &f1, const int dir, const real rhoCorrection, const real cs, const real weight) +{ + return f1[dir ] * cs + (c1o1 - cs) * f[dir ] - weight *rhoCorrection; +} + +__global__ void QPressZeroRhoOutflowDevice27( + real* rhoBC, + real* distributions, + int* k_Q, + int* k_N, + int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep, + int direction, + real densityCorrectionFactor) +{ + //////////////////////////////////////////////////////////////////////////////// + //! - Get the node index coordinates from threadIdx, blockIdx, blockDim and gridDim. + //! + const unsigned nodeIndex = getNodeIndex(); + + ////////////////////////////////////////////////////////////////////////// + + if( nodeIndex >= numberOfBCnodes ) return; + + //////////////////////////////////////////////////////////////////////////////// + //index + + uint k_000 = k_Q[nodeIndex]; + uint k_M00 = neighborX[k_000]; + uint k_0M0 = neighborY[k_000]; + uint k_00M = neighborZ[k_000]; + uint k_MM0 = neighborY[k_M00]; + uint k_M0M = neighborZ[k_M00]; + uint k_0MM = neighborZ[k_0M0]; + uint k_MMM = neighborZ[k_MM0]; + + //////////////////////////////////////////////////////////////////////////////// + //index of neighbor + uint kN_000 = k_N[nodeIndex]; + uint kN_M00 = neighborX[k_000]; + uint kN_0M0 = neighborY[k_000]; + uint kN_00M = neighborZ[k_000]; + uint kN_MM0 = neighborY[k_M00]; + uint kN_M0M = neighborZ[k_M00]; + uint kN_0MM = neighborZ[k_0M0]; + uint kN_MMM = neighborZ[k_MM0]; + //////////////////////////////////////////////////////////////////////////////// + Distributions27 dist; + getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); + real f[27], fN[27]; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + f[d000] = (dist.f[d000])[k_000]; + f[dP00] = (dist.f[dP00])[k_000]; + f[dM00] = (dist.f[dM00])[k_M00]; + f[d0P0] = (dist.f[d0P0])[k_000]; + f[d0M0] = (dist.f[d0M0])[k_0M0]; + f[d00P] = (dist.f[d00P])[k_000]; + f[d00M] = (dist.f[d00M])[k_00M]; + f[dPP0] = (dist.f[dPP0])[k_000]; + f[dMM0] = (dist.f[dMM0])[k_MM0]; + f[dPM0] = (dist.f[dPM0])[k_0M0]; + f[dMP0] = (dist.f[dMP0])[k_M00]; + f[dP0P] = (dist.f[dP0P])[k_000]; + f[dM0M] = (dist.f[dM0M])[k_M0M]; + f[dP0M] = (dist.f[dP0M])[k_00M]; + f[dM0P] = (dist.f[dM0P])[k_M00]; + f[d0PP] = (dist.f[d0PP])[k_000]; + f[d0MM] = (dist.f[d0MM])[k_0MM]; + f[d0PM] = (dist.f[d0PM])[k_00M]; + f[d0MP] = (dist.f[d0MP])[k_0M0]; + f[dPPP] = (dist.f[dPPP])[k_000]; + f[dMPP] = (dist.f[dMPP])[k_M00]; + f[dPMP] = (dist.f[dPMP])[k_0M0]; + f[dMMP] = (dist.f[dMMP])[k_MM0]; + f[dPPM] = (dist.f[dPPM])[k_00M]; + f[dMPM] = (dist.f[dMPM])[k_M0M]; + f[dPMM] = (dist.f[dPMM])[k_0MM]; + f[dMMM] = (dist.f[dMMM])[k_MMM]; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + fN[d000] = (dist.f[d000])[kN_000]; + fN[dP00] = (dist.f[dP00])[kN_000]; + fN[dM00] = (dist.f[dM00])[kN_M00]; + fN[d0P0] = (dist.f[d0P0])[kN_000]; + fN[d0M0] = (dist.f[d0M0])[kN_0M0]; + fN[d00P] = (dist.f[d00P])[kN_000]; + fN[d00M] = (dist.f[d00M])[kN_00M]; + fN[dPP0] = (dist.f[dPP0])[kN_000]; + fN[dMM0] = (dist.f[dMM0])[kN_MM0]; + fN[dPM0] = (dist.f[dPM0])[kN_0M0]; + fN[dMP0] = (dist.f[dMP0])[kN_M00]; + fN[dP0P] = (dist.f[dP0P])[kN_000]; + fN[dM0M] = (dist.f[dM0M])[kN_M0M]; + fN[dP0M] = (dist.f[dP0M])[kN_00M]; + fN[dM0P] = (dist.f[dM0P])[kN_M00]; + fN[d0PP] = (dist.f[d0PP])[kN_000]; + fN[d0MM] = (dist.f[d0MM])[kN_0MM]; + fN[d0PM] = (dist.f[d0PM])[kN_00M]; + fN[d0MP] = (dist.f[d0MP])[kN_0M0]; + fN[dPPP] = (dist.f[dPPP])[kN_000]; + fN[dMPP] = (dist.f[dMPP])[kN_M00]; + fN[dPMP] = (dist.f[dPMP])[kN_0M0]; + fN[dMMP] = (dist.f[dMMP])[kN_MM0]; + fN[dPPM] = (dist.f[dPPM])[kN_00M]; + fN[dMPM] = (dist.f[dMPM])[kN_M0M]; + fN[dPMM] = (dist.f[dPMM])[kN_0MM]; + fN[dMMM] = (dist.f[dMMM])[kN_MMM]; + ////////////////////////////////////////////////////////////////////////// + real drho = vf::lbm::getDensity(f); + + real rhoCorrection = densityCorrectionFactor*drho; + + real cs = c1o1 / sqrtf(c3o1); + + getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep); + + switch(direction) + { + case dM00: + (dist.f[dP00])[k_000] = computeOutflowDistribution(f, fN, dP00 , rhoCorrection, cs, c2o27); + (dist.f[dPM0])[k_0M0] = computeOutflowDistribution(f, fN, dPM0, rhoCorrection, cs, c1o54); + (dist.f[dPP0])[k_000] = computeOutflowDistribution(f, fN, dPP0, rhoCorrection, cs, c1o54); + (dist.f[dP0M])[k_00M] = computeOutflowDistribution(f, fN, dP0M, rhoCorrection, cs, c1o54); + (dist.f[dP0P])[k_000] = computeOutflowDistribution(f, fN, dP0P, rhoCorrection, cs, c1o54); + (dist.f[dPMP])[k_0M0] = computeOutflowDistribution(f, fN, dPMP, rhoCorrection, cs, c1o216); + (dist.f[dPPP])[k_000] = computeOutflowDistribution(f, fN, dPPP, rhoCorrection, cs, c1o216); + (dist.f[dPMM])[k_0MM] = computeOutflowDistribution(f, fN, dPMM, rhoCorrection, cs, c1o216); + (dist.f[dPPM])[k_00M] = computeOutflowDistribution(f, fN, dPPM, rhoCorrection, cs, c1o216); + break; + + case dP00: + (dist.f[dM00])[k_M00] = computeOutflowDistribution(f, fN, dM00, rhoCorrection, cs, c2o27); + (dist.f[dMM0])[k_MM0] = computeOutflowDistribution(f, fN, dMM0, rhoCorrection, cs, c1o54); + (dist.f[dMP0])[k_M00] = computeOutflowDistribution(f, fN, dMP0, rhoCorrection, cs, c1o54); + (dist.f[dM0M])[k_M0M] = computeOutflowDistribution(f, fN, dM0M, rhoCorrection, cs, c1o54); + (dist.f[dM0P])[k_M00] = computeOutflowDistribution(f, fN, dM0P, rhoCorrection, cs, c1o54); + (dist.f[dMMP])[k_MM0] = computeOutflowDistribution(f, fN, dMMP, rhoCorrection, cs, c1o216); + (dist.f[dMPP])[k_M00] = computeOutflowDistribution(f, fN, dMPP, rhoCorrection, cs, c1o216); + (dist.f[dMMM])[k_MMM] = computeOutflowDistribution(f, fN, dMMM, rhoCorrection, cs, c1o216); + (dist.f[dMPM])[k_M0M] = computeOutflowDistribution(f, fN, dMPM, rhoCorrection, cs, c1o216); + break; + + case d0M0: + (dist.f[d0P0])[k_000] = computeOutflowDistribution(f, fN, d0P0, rhoCorrection, cs, c2o27); + (dist.f[dPP0])[k_000] = computeOutflowDistribution(f, fN, dPP0, rhoCorrection, cs, c1o54); + (dist.f[dMP0])[k_M00] = computeOutflowDistribution(f, fN, dMP0, rhoCorrection, cs, c1o54); + (dist.f[d0PP])[k_000] = computeOutflowDistribution(f, fN, d0PP, rhoCorrection, cs, c1o54); + (dist.f[d0PM])[k_00M] = computeOutflowDistribution(f, fN, d0PM, rhoCorrection, cs, c1o54); + (dist.f[dPPP])[k_000] = computeOutflowDistribution(f, fN, dPPP, rhoCorrection, cs, c1o216); + (dist.f[dMPP])[k_M00] = computeOutflowDistribution(f, fN, dMPP, rhoCorrection, cs, c1o216); + (dist.f[dPPM])[k_00M] = computeOutflowDistribution(f, fN, dPPM, rhoCorrection, cs, c1o216); + (dist.f[dMPM])[k_M0M] = computeOutflowDistribution(f, fN, dMPM, rhoCorrection, cs, c1o216); + break; + + case d0P0: + (dist.f[d0M0])[k_0M0] =computeOutflowDistribution(f, fN, d0M0, rhoCorrection, cs, c2o27); + (dist.f[dPM0])[k_0M0] =computeOutflowDistribution(f, fN, dPM0, rhoCorrection, cs, c1o54); + (dist.f[dMM0])[k_MM0] =computeOutflowDistribution(f, fN, dMM0, rhoCorrection, cs, c1o54); + (dist.f[d0MP])[k_0M0] =computeOutflowDistribution(f, fN, d0MP, rhoCorrection, cs, c1o54); + (dist.f[d0MM])[k_0MM] =computeOutflowDistribution(f, fN, d0MM, rhoCorrection, cs, c1o54); + (dist.f[dPMP])[k_0M0] =computeOutflowDistribution(f, fN, dPMP, rhoCorrection, cs, c1o216); + (dist.f[dMMP])[k_MM0] =computeOutflowDistribution(f, fN, dMMP, rhoCorrection, cs, c1o216); + (dist.f[dPMM])[k_0MM] =computeOutflowDistribution(f, fN, dPMM, rhoCorrection, cs, c1o216); + (dist.f[dMMM])[k_MMM] =computeOutflowDistribution(f, fN, dMMM, rhoCorrection, cs, c1o216); + break; + + case d00M: + (dist.f[d00P])[k_000] = computeOutflowDistribution(f, fN, d00P, rhoCorrection, cs, c2o27); + (dist.f[dP0P])[k_000] = computeOutflowDistribution(f, fN, dP0P, rhoCorrection, cs, c1o54); + (dist.f[dM0P])[k_M00] = computeOutflowDistribution(f, fN, dM0P, rhoCorrection, cs, c1o54); + (dist.f[d0PP])[k_000] = computeOutflowDistribution(f, fN, d0PP, rhoCorrection, cs, c1o54); + (dist.f[d0MP])[k_0M0] = computeOutflowDistribution(f, fN, d0MP, rhoCorrection, cs, c1o54); + (dist.f[dPPP])[k_000] = computeOutflowDistribution(f, fN, dPPP, rhoCorrection, cs, c1o216); + (dist.f[dMPP])[k_M00] = computeOutflowDistribution(f, fN, dMPP, rhoCorrection, cs, c1o216); + (dist.f[dPMP])[k_0M0] = computeOutflowDistribution(f, fN, dPMP, rhoCorrection, cs, c1o216); + (dist.f[dMMP])[k_MM0] = computeOutflowDistribution(f, fN, dMMP, rhoCorrection, cs, c1o216); + break; + + case d00P: + (dist.f[d00M])[k_00M] = computeOutflowDistribution(f, fN, d00M, rhoCorrection, cs, c2o27); + (dist.f[dP0M])[k_00M] = computeOutflowDistribution(f, fN, dP0M, rhoCorrection, cs, c1o54); + (dist.f[dM0M])[k_M0M] = computeOutflowDistribution(f, fN, dM0M, rhoCorrection, cs, c1o54); + (dist.f[d0PM])[k_00M] = computeOutflowDistribution(f, fN, d0PM, rhoCorrection, cs, c1o54); + (dist.f[d0MM])[k_0MM] = computeOutflowDistribution(f, fN, d0MM, rhoCorrection, cs, c1o54); + (dist.f[dPPM])[k_00M] = computeOutflowDistribution(f, fN, dPPM, rhoCorrection, cs, c1o216); + (dist.f[dMPM])[k_M0M] = computeOutflowDistribution(f, fN, dMPM, rhoCorrection, cs, c1o216); + (dist.f[dPMM])[k_0MM] = computeOutflowDistribution(f, fN, dPMM, rhoCorrection, cs, c1o216); + (dist.f[dMMM])[k_MMM] = computeOutflowDistribution(f, fN, dMMM, rhoCorrection, cs, c1o216); + break; + default: + break; + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +__global__ void QPressDeviceOld27( + real* rhoBC, + real* DD, + int* k_Q, + int* k_N, + int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //////////////////////////////////////////////////////////////////////////////// + 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) + { + //////////////////////////////////////////////////////////////////////////////// + //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]; + //////////////////////////////////////////////////////////////////////////////// + //index1 + unsigned int K1QK = k_N[k]; + unsigned int k1zero= K1QK; + unsigned int k1e = K1QK; + unsigned int k1w = neighborX[K1QK]; + unsigned int k1n = K1QK; + unsigned int k1s = neighborY[K1QK]; + unsigned int k1t = K1QK; + unsigned int k1b = neighborZ[K1QK]; + unsigned int k1sw = neighborY[k1w]; + unsigned int k1ne = K1QK; + unsigned int k1se = k1s; + unsigned int k1nw = k1w; + unsigned int k1bw = neighborZ[k1w]; + unsigned int k1te = K1QK; + unsigned int k1be = k1b; + unsigned int k1tw = k1w; + unsigned int k1bs = neighborZ[k1s]; + unsigned int k1tn = K1QK; + unsigned int k1bn = k1b; + unsigned int k1ts = k1s; + unsigned int k1tse = k1s; + unsigned int k1bnw = k1bw; + unsigned int k1tnw = k1w; + unsigned int k1bse = k1bs; + unsigned int k1tsw = k1sw; + unsigned int k1bne = k1b; + unsigned int k1tne = K1QK; + unsigned int k1bsw = neighborZ[k1sw]; + //////////////////////////////////////////////////////////////////////////////// + Distributions27 D; + if (isEvenTimestep==false) + { + 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]; + } + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO, + f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW; + + f1_W = (D.f[dP00])[k1e ]; + f1_E = (D.f[dM00])[k1w ]; + f1_S = (D.f[d0P0])[k1n ]; + f1_N = (D.f[d0M0])[k1s ]; + f1_B = (D.f[d00P])[k1t ]; + f1_T = (D.f[d00M])[k1b ]; + f1_SW = (D.f[dPP0])[k1ne ]; + f1_NE = (D.f[dMM0])[k1sw ]; + f1_NW = (D.f[dPM0])[k1se ]; + f1_SE = (D.f[dMP0])[k1nw ]; + f1_BW = (D.f[dP0P])[k1te ]; + f1_TE = (D.f[dM0M])[k1bw ]; + f1_TW = (D.f[dP0M])[k1be ]; + f1_BE = (D.f[dM0P])[k1tw ]; + f1_BS = (D.f[d0PP])[k1tn ]; + f1_TN = (D.f[d0MM])[k1bs ]; + f1_TS = (D.f[d0PM])[k1bn ]; + f1_BN = (D.f[d0MP])[k1ts ]; + f1_ZERO = (D.f[d000])[k1zero]; + f1_BSW = (D.f[dPPP])[k1tne ]; + f1_BNE = (D.f[dMMP])[k1tsw ]; + f1_BNW = (D.f[dPMP])[k1tse ]; + f1_BSE = (D.f[dMPP])[k1tnw ]; + f1_TSW = (D.f[dPPM])[k1bne ]; + f1_TNE = (D.f[dMMM])[k1bsw ]; + f1_TNW = (D.f[dPMM])[k1bse ]; + f1_TSE = (D.f[dMPM])[k1bnw ]; + + ////////////////////////////////////////////////////////////////////////// + real drho1 = f1_ZERO+f1_E+f1_W+f1_N+f1_S+f1_T+f1_B+f1_NE+f1_SW+f1_SE+f1_NW+f1_TE+f1_BW+f1_BE+f1_TW+f1_TN+f1_BS+f1_BN+f1_TS+ + f1_TNE+f1_TSW+f1_TSE+f1_TNW+f1_BNE+f1_BSW+f1_BSE+f1_BNW; + + //drho1 = (drho1 + rhoBC[k])/2.f; + drho1 = drho1 - rhoBC[k]; + ////////////////////////////////////////////////////////////////////////// + + __syncthreads(); + + (D.f[dP00])[ke ] = f1_W -c2o27*drho1; // c1o100; // zero; // + (D.f[dM00])[kw ] = f1_E -c2o27*drho1; // c1o100; // zero; // + (D.f[d0P0])[kn ] = f1_S -c2o27*drho1; // c1o100; // zero; // + (D.f[d0M0])[ks ] = f1_N -c2o27*drho1; // c1o100; // zero; // + (D.f[d00P])[kt ] = f1_B -c2o27*drho1; // c1o100; // zero; // + (D.f[d00M])[kb ] = f1_T -c2o27*drho1; // c1o100; // zero; // + (D.f[dPP0])[kne ] = f1_SW -c1o54*drho1; // c1o100; // zero; // + (D.f[dMM0])[ksw ] = f1_NE -c1o54*drho1; // c1o100; // zero; // + (D.f[dPM0])[kse ] = f1_NW -c1o54*drho1; // c1o100; // zero; // + (D.f[dMP0])[knw ] = f1_SE -c1o54*drho1; // c1o100; // zero; // + (D.f[dP0P])[kte ] = f1_BW -c1o54*drho1; // c1o100; // zero; // + (D.f[dM0M])[kbw ] = f1_TE -c1o54*drho1; // c1o100; // zero; // + (D.f[dP0M])[kbe ] = f1_TW -c1o54*drho1; // c1o100; // zero; // + (D.f[dM0P])[ktw ] = f1_BE -c1o54*drho1; // c1o100; // zero; // + (D.f[d0PP])[ktn ] = f1_BS -c1o54*drho1; // c1o100; // zero; // + (D.f[d0MM])[kbs ] = f1_TN -c1o54*drho1; // c1o100; // zero; // + (D.f[d0PM])[kbn ] = f1_TS -c1o54*drho1; // c1o100; // zero; // + (D.f[d0MP])[kts ] = f1_BN -c1o54*drho1; // c1o100; // zero; // + (D.f[d000])[kzero] = f1_ZERO-c8o27*drho1; // c1o100; // zero; // + (D.f[dPPP])[ktne ] = f1_BSW -c1o216*drho1; // c1o100; // zero; // + (D.f[dMMP])[ktsw ] = f1_BNE -c1o216*drho1; // c1o100; // zero; // + (D.f[dPMP])[ktse ] = f1_BNW -c1o216*drho1; // c1o100; // zero; // + (D.f[dMPP])[ktnw ] = f1_BSE -c1o216*drho1; // c1o100; // zero; // + (D.f[dPPM])[kbne ] = f1_TSW -c1o216*drho1; // c1o100; // zero; // + (D.f[dMMM])[kbsw ] = f1_TNE -c1o216*drho1; // c1o100; // zero; // + (D.f[dPMM])[kbse ] = f1_TNW -c1o216*drho1; // c1o100; // zero; // + (D.f[dMPM])[kbnw ] = f1_TSE -c1o216*drho1; // c1o100; // zero; // + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +__global__ void QPressDeviceEQZ27( + real* rhoBC, + real* DD, + int* k_Q, + int* k_N, + real* kTestRE, + int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //////////////////////////////////////////////////////////////////////////////// + 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) + { + //////////////////////////////////////////////////////////////////////////////// + //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]; + //////////////////////////////////////////////////////////////////////////////// + //index1 + unsigned int K1QK = k_N[k]; + unsigned int k1zero= K1QK; + unsigned int k1e = K1QK; + unsigned int k1w = neighborX[K1QK]; + unsigned int k1n = K1QK; + unsigned int k1s = neighborY[K1QK]; + unsigned int k1t = K1QK; + unsigned int k1b = neighborZ[K1QK]; + unsigned int k1sw = neighborY[k1w]; + unsigned int k1ne = K1QK; + unsigned int k1se = k1s; + unsigned int k1nw = k1w; + unsigned int k1bw = neighborZ[k1w]; + unsigned int k1te = K1QK; + unsigned int k1be = k1b; + unsigned int k1tw = k1w; + unsigned int k1bs = neighborZ[k1s]; + unsigned int k1tn = K1QK; + unsigned int k1bn = k1b; + unsigned int k1ts = k1s; + unsigned int k1tse = k1s; + unsigned int k1bnw = k1bw; + unsigned int k1tnw = k1w; + unsigned int k1bse = k1bs; + unsigned int k1tsw = k1sw; + unsigned int k1bne = k1b; + unsigned int k1tne = K1QK; + unsigned int k1bsw = neighborZ[k1sw]; + //////////////////////////////////////////////////////////////////////////////// + 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 kDistTest; + // kDistTest.f[dP00] = &kTestRE[dP00 * numberOfBCnodes]; + // kDistTest.f[dM00] = &kTestRE[dM00 * numberOfBCnodes]; + // kDistTest.f[d0P0] = &kTestRE[d0P0 * numberOfBCnodes]; + // kDistTest.f[d0M0] = &kTestRE[d0M0 * numberOfBCnodes]; + // kDistTest.f[d00P] = &kTestRE[d00P * numberOfBCnodes]; + // kDistTest.f[d00M] = &kTestRE[d00M * numberOfBCnodes]; + // kDistTest.f[dPP0] = &kTestRE[dPP0 * numberOfBCnodes]; + // kDistTest.f[dMM0] = &kTestRE[dMM0 * numberOfBCnodes]; + // kDistTest.f[dPM0] = &kTestRE[dPM0 * numberOfBCnodes]; + // kDistTest.f[dMP0] = &kTestRE[dMP0 * numberOfBCnodes]; + // kDistTest.f[dP0P] = &kTestRE[dP0P * numberOfBCnodes]; + // kDistTest.f[dM0M] = &kTestRE[dM0M * numberOfBCnodes]; + // kDistTest.f[dP0M] = &kTestRE[dP0M * numberOfBCnodes]; + // kDistTest.f[dM0P] = &kTestRE[dM0P * numberOfBCnodes]; + // kDistTest.f[d0PP] = &kTestRE[d0PP * numberOfBCnodes]; + // kDistTest.f[d0MM] = &kTestRE[d0MM * numberOfBCnodes]; + // kDistTest.f[d0PM] = &kTestRE[d0PM * numberOfBCnodes]; + // kDistTest.f[d0MP] = &kTestRE[d0MP * numberOfBCnodes]; + // kDistTest.f[d000] = &kTestRE[d000 * numberOfBCnodes]; + // kDistTest.f[dPPP] = &kTestRE[dPPP * numberOfBCnodes]; + // kDistTest.f[dMMP] = &kTestRE[dMMP * numberOfBCnodes]; + // kDistTest.f[dPMP] = &kTestRE[dPMP * numberOfBCnodes]; + // kDistTest.f[dMPP] = &kTestRE[dMPP * numberOfBCnodes]; + // kDistTest.f[dPPM] = &kTestRE[dPPM * numberOfBCnodes]; + // kDistTest.f[dMMM] = &kTestRE[dMMM * numberOfBCnodes]; + // kDistTest.f[dPMM] = &kTestRE[dPMM * numberOfBCnodes]; + // kDistTest.f[dMPM] = &kTestRE[dMPM * numberOfBCnodes]; + // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // //real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO,f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW; + // //f1_W = (D.f[dP00])[k1e ]; + // //f1_E = (D.f[dM00])[k1w ]; + // //f1_S = (D.f[d0P0])[k1n ]; + // //f1_N = (D.f[d0M0])[k1s ]; + // //f1_B = (D.f[d00P])[k1t ]; + // //f1_T = (D.f[d00M])[k1b ]; + // //f1_SW = (D.f[dPP0])[k1ne ]; + // //f1_NE = (D.f[dMM0])[k1sw ]; + // //f1_NW = (D.f[dPM0])[k1se ]; + // //f1_SE = (D.f[dMP0])[k1nw ]; + // //f1_BW = (D.f[dP0P])[k1te ]; + // //f1_TE = (D.f[dM0M])[k1bw ]; + // //f1_TW = (D.f[dP0M])[k1be ]; + // //f1_BE = (D.f[dM0P])[k1tw ]; + // //f1_BS = (D.f[d0PP])[k1tn ]; + // //f1_TN = (D.f[d0MM])[k1bs ]; + // //f1_TS = (D.f[d0PM])[k1bn ]; + // //f1_BN = (D.f[d0MP])[k1ts ]; + // //f1_ZERO = (D.f[d000])[k1zero]; + // //f1_BSW = (D.f[dPPP])[k1tne ]; + // //f1_BNE = (D.f[dMMP])[k1tsw ]; + // //f1_BNW = (D.f[dPMP])[k1tse ]; + // //f1_BSE = (D.f[dMPP])[k1tnw ]; + // //f1_TSW = (D.f[dPPM])[k1bne ]; + // //f1_TNE = (D.f[dMMM])[k1bsw ]; + // //f1_TNW = (D.f[dPMM])[k1bse ]; + // //f1_TSE = (D.f[dMPM])[k1bnw ]; + // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO,f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW; + // f1_E = (D.f[dP00])[k1e ]; + // f1_W = (D.f[dM00])[k1w ]; + // f1_N = (D.f[d0P0])[k1n ]; + // f1_S = (D.f[d0M0])[k1s ]; + // f1_T = (D.f[d00P])[k1t ]; + // f1_B = (D.f[d00M])[k1b ]; + // f1_NE = (D.f[dPP0])[k1ne ]; + // f1_SW = (D.f[dMM0])[k1sw ]; + // f1_SE = (D.f[dPM0])[k1se ]; + // f1_NW = (D.f[dMP0])[k1nw ]; + // f1_TE = (D.f[dP0P])[k1te ]; + // f1_BW = (D.f[dM0M])[k1bw ]; + // f1_BE = (D.f[dP0M])[k1be ]; + // f1_TW = (D.f[dM0P])[k1tw ]; + // f1_TN = (D.f[d0PP])[k1tn ]; + // f1_BS = (D.f[d0MM])[k1bs ]; + // f1_BN = (D.f[d0PM])[k1bn ]; + // f1_TS = (D.f[d0MP])[k1ts ]; + // f1_ZERO = (D.f[d000])[k1zero]; + // f1_TNE = (D.f[dPPP])[k1tne ]; + // f1_TSW = (D.f[dMMP])[k1tsw ]; + // f1_TSE = (D.f[dPMP])[k1tse ]; + // f1_TNW = (D.f[dMPP])[k1tnw ]; + // f1_BNE = (D.f[dPPM])[k1bne ]; + // f1_BSW = (D.f[dMMM])[k1bsw ]; + // f1_BSE = (D.f[dPMM])[k1bse ]; + // f1_BNW = (D.f[dMPM])[k1bnw ]; + // ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + // ////////////////////////////////////////////////////////////////////////// + // real drho1 = f1_ZERO+f1_E+f1_W+f1_N+f1_S+f1_T+f1_B+f1_NE+f1_SW+f1_SE+f1_NW+f1_TE+f1_BW+f1_BE+f1_TW+f1_TN+f1_BS+f1_BN+f1_TS+ f1_TNE+f1_TSW+f1_TSE+f1_TNW+f1_BNE+f1_BSW+f1_BSE+f1_BNW; + //real vx1 = (((f1_TNE-f1_BSW)+(f1_BSE-f1_TNW)+(f1_BNE-f1_TSW)+(f1_TSE-f1_BNW)) + (((f1_NE-f1_SW)+(f1_TE-f1_BW))+((f1_SE-f1_NW)+(f1_BE-f1_TW))) + (f1_E-f1_W)) / (one + drho1); + //real vx2 = (((f1_TNE-f1_BSW)+(f1_TNW-f1_BSE)+(f1_BNE-f1_TSW)+(f1_BNW-f1_TSE)) + (((f1_NE-f1_SW)+(f1_TN-f1_BS))+((f1_BN-f1_TS)+(f1_NW-f1_SE))) + (f1_N-f1_S)) / (one + drho1); + //real vx3 = (((f1_TNE-f1_BSW)+(f1_TNW-f1_BSE)+(f1_TSW-f1_BNE)+(f1_TSE-f1_BNW)) + (((f1_TE-f1_BW)+(f1_TN-f1_BS))+((f1_TW-f1_BE)+(f1_TS-f1_BN))) + (f1_T-f1_B)) / (one + drho1); + // ////////////////////////////////////////////////////////////////////////// + ////real omega = om1; + // real cusq = c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); + // ////////////////////////////////////////////////////////////////////////// + ////T�st MK + ////if(vx1 < zero) vx1 = zero; + // ////////////////////////////////////////////////////////////////////////// + ////becomes higher with neighbor source and lower with local source + // //real fZERO = c8over27* (rhoBC[k]-(one + rhoBC[k])*(cusq)) ; + // //real fE = c2over27* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1 )+c9over2*( vx1 )*( vx1 )-cusq)); + // //real fW = c2over27* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cusq)); + // //real fN = c2over27* (rhoBC[k]+(one + rhoBC[k])*(three*( vx2 )+c9over2*( vx2 )*( vx2 )-cusq)); + // //real fS = c2over27* (rhoBC[k]+(one + rhoBC[k])*(three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cusq)); + // //real fT = c2over27* (rhoBC[k]+(one + rhoBC[k])*(three*( vx3)+c9over2*( vx3)*( vx3)-cusq)); + // //real fB = c2over27* (rhoBC[k]+(one + rhoBC[k])*(three*( -vx3)+c9over2*( -vx3)*( -vx3)-cusq)); + // //real fNE = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cusq)); + // //real fSW = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cusq)); + // //real fSE = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cusq)); + // //real fNW = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cusq)); + // //real fTE = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cusq)); + // //real fBW = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cusq)); + // //real fBE = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cusq)); + // //real fTW = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cusq)); + // //real fTN = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cusq)); + // //real fBS = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cusq)); + // //real fBN = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cusq)); + // //real fTS = c1over54* (rhoBC[k]+(one + rhoBC[k])*(three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cusq)); + // //real fTNE = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq)); + // //real fBSW = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq)); + // //real fBNE = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq)); + // //real fTSW = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq)); + // //real fTSE = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq)); + // //real fBNW = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq)); + // //real fBSE = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq)); + // //real fTNW = c1over216* (rhoBC[k]+(one + rhoBC[k])*(three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq)); + // ////////////////////////////////////////////////////////////////////////// + //// based on VirtualFluids (kucher + fard) + // real fZERO = c8over27 * rhoBC[k] * (one - cusq); + // real fE = c2over27 * rhoBC[k] * (one + three * ( vx1 ) + c9over2 * ( vx1 ) * ( vx1 ) - cusq); + // real fW = c2over27 * rhoBC[k] * (one + three * (-vx1 ) + c9over2 * (-vx1 ) * (-vx1 ) - cusq); + // real fN = c2over27 * rhoBC[k] * (one + three * ( vx2 ) + c9over2 * ( vx2 ) * ( vx2 ) - cusq); + // real fS = c2over27 * rhoBC[k] * (one + three * ( -vx2 ) + c9over2 * ( -vx2 ) * ( -vx2 ) - cusq); + // real fT = c2over27 * rhoBC[k] * (one + three * ( vx3) + c9over2 * ( vx3) * ( vx3) - cusq); + // real fB = c2over27 * rhoBC[k] * (one + three * ( -vx3) + c9over2 * ( -vx3) * ( -vx3) - cusq); + // real fNE = c1over54 * rhoBC[k] * (one + three * ( vx1+vx2 ) + c9over2 * ( vx1+vx2 ) * ( vx1+vx2 ) - cusq); + // real fSW = c1over54 * rhoBC[k] * (one + three * (-vx1-vx2 ) + c9over2 * (-vx1-vx2 ) * (-vx1-vx2 ) - cusq); + // real fSE = c1over54 * rhoBC[k] * (one + three * ( vx1-vx2 ) + c9over2 * ( vx1-vx2 ) * ( vx1-vx2 ) - cusq); + // real fNW = c1over54 * rhoBC[k] * (one + three * (-vx1+vx2 ) + c9over2 * (-vx1+vx2 ) * (-vx1+vx2 ) - cusq); + // real fTE = c1over54 * rhoBC[k] * (one + three * ( vx1 +vx3) + c9over2 * ( vx1 +vx3) * ( vx1 +vx3) - cusq); + // real fBW = c1over54 * rhoBC[k] * (one + three * (-vx1 -vx3) + c9over2 * (-vx1 -vx3) * (-vx1 -vx3) - cusq); + // real fBE = c1over54 * rhoBC[k] * (one + three * ( vx1 -vx3) + c9over2 * ( vx1 -vx3) * ( vx1 -vx3) - cusq); + // real fTW = c1over54 * rhoBC[k] * (one + three * (-vx1 +vx3) + c9over2 * (-vx1 +vx3) * (-vx1 +vx3) - cusq); + // real fTN = c1over54 * rhoBC[k] * (one + three * ( vx2+vx3) + c9over2 * ( vx2+vx3) * ( vx2+vx3) - cusq); + // real fBS = c1over54 * rhoBC[k] * (one + three * ( -vx2-vx3) + c9over2 * ( -vx2-vx3) * ( -vx2-vx3) - cusq); + // real fBN = c1over54 * rhoBC[k] * (one + three * ( vx2-vx3) + c9over2 * ( vx2-vx3) * ( vx2-vx3) - cusq); + // real fTS = c1over54 * rhoBC[k] * (one + three * ( -vx2+vx3) + c9over2 * ( -vx2+vx3) * ( -vx2+vx3) - cusq); + // real fTNE = c1over216 * rhoBC[k] * (one + three * ( vx1+vx2+vx3) + c9over2 * ( vx1+vx2+vx3) * ( vx1+vx2+vx3) - cusq); + // real fBSW = c1over216 * rhoBC[k] * (one + three * (-vx1-vx2-vx3) + c9over2 * (-vx1-vx2-vx3) * (-vx1-vx2-vx3) - cusq); + // real fBNE = c1over216 * rhoBC[k] * (one + three * ( vx1+vx2-vx3) + c9over2 * ( vx1+vx2-vx3) * ( vx1+vx2-vx3) - cusq); + // real fTSW = c1over216 * rhoBC[k] * (one + three * (-vx1-vx2+vx3) + c9over2 * (-vx1-vx2+vx3) * (-vx1-vx2+vx3) - cusq); + // real fTSE = c1over216 * rhoBC[k] * (one + three * ( vx1-vx2+vx3) + c9over2 * ( vx1-vx2+vx3) * ( vx1-vx2+vx3) - cusq); + // real fBNW = c1over216 * rhoBC[k] * (one + three * (-vx1+vx2-vx3) + c9over2 * (-vx1+vx2-vx3) * (-vx1+vx2-vx3) - cusq); + // real fBSE = c1over216 * rhoBC[k] * (one + three * ( vx1-vx2-vx3) + c9over2 * ( vx1-vx2-vx3) * ( vx1-vx2-vx3) - cusq); + // real fTNW = c1over216 * rhoBC[k] * (one + three * (-vx1+vx2+vx3) + c9over2 * (-vx1+vx2+vx3) * (-vx1+vx2+vx3) - cusq); + //// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //////test + //// real fZERO = c8over27 * ((drho1 + rhoBC[k]) / two) * (one - cusq); + //// real fE = c2over27 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1 ) + c9over2 * ( vx1 ) * ( vx1 ) - cusq); + //// real fW = c2over27 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1 ) + c9over2 * (-vx1 ) * (-vx1 ) - cusq); + //// real fN = c2over27 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx2 ) + c9over2 * ( vx2 ) * ( vx2 ) - cusq); + //// real fS = c2over27 * ((drho1 + rhoBC[k]) / two) * (one + three * ( -vx2 ) + c9over2 * ( -vx2 ) * ( -vx2 ) - cusq); + //// real fT = c2over27 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx3) + c9over2 * ( vx3) * ( vx3) - cusq); + //// real fB = c2over27 * ((drho1 + rhoBC[k]) / two) * (one + three * ( -vx3) + c9over2 * ( -vx3) * ( -vx3) - cusq); + //// real fNE = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1+vx2 ) + c9over2 * ( vx1+vx2 ) * ( vx1+vx2 ) - cusq); + //// real fSW = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1-vx2 ) + c9over2 * (-vx1-vx2 ) * (-vx1-vx2 ) - cusq); + //// real fSE = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1-vx2 ) + c9over2 * ( vx1-vx2 ) * ( vx1-vx2 ) - cusq); + //// real fNW = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1+vx2 ) + c9over2 * (-vx1+vx2 ) * (-vx1+vx2 ) - cusq); + //// real fTE = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1 +vx3) + c9over2 * ( vx1 +vx3) * ( vx1 +vx3) - cusq); + //// real fBW = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1 -vx3) + c9over2 * (-vx1 -vx3) * (-vx1 -vx3) - cusq); + //// real fBE = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1 -vx3) + c9over2 * ( vx1 -vx3) * ( vx1 -vx3) - cusq); + //// real fTW = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1 +vx3) + c9over2 * (-vx1 +vx3) * (-vx1 +vx3) - cusq); + //// real fTN = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx2+vx3) + c9over2 * ( vx2+vx3) * ( vx2+vx3) - cusq); + //// real fBS = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * ( -vx2-vx3) + c9over2 * ( -vx2-vx3) * ( -vx2-vx3) - cusq); + //// real fBN = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx2-vx3) + c9over2 * ( vx2-vx3) * ( vx2-vx3) - cusq); + //// real fTS = c1over54 * ((drho1 + rhoBC[k]) / two) * (one + three * ( -vx2+vx3) + c9over2 * ( -vx2+vx3) * ( -vx2+vx3) - cusq); + //// real fTNE = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1+vx2+vx3) + c9over2 * ( vx1+vx2+vx3) * ( vx1+vx2+vx3) - cusq); + //// real fBSW = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1-vx2-vx3) + c9over2 * (-vx1-vx2-vx3) * (-vx1-vx2-vx3) - cusq); + //// real fBNE = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1+vx2-vx3) + c9over2 * ( vx1+vx2-vx3) * ( vx1+vx2-vx3) - cusq); + //// real fTSW = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1-vx2+vx3) + c9over2 * (-vx1-vx2+vx3) * (-vx1-vx2+vx3) - cusq); + //// real fTSE = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1-vx2+vx3) + c9over2 * ( vx1-vx2+vx3) * ( vx1-vx2+vx3) - cusq); + //// real fBNW = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1+vx2-vx3) + c9over2 * (-vx1+vx2-vx3) * (-vx1+vx2-vx3) - cusq); + //// real fBSE = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * ( vx1-vx2-vx3) + c9over2 * ( vx1-vx2-vx3) * ( vx1-vx2-vx3) - cusq); + //// real fTNW = c1over216 * ((drho1 + rhoBC[k]) / two) * (one + three * (-vx1+vx2+vx3) + c9over2 * (-vx1+vx2+vx3) * (-vx1+vx2+vx3) - cusq); + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // based on BGK Plus Comp + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //double mfabb = (D.f[dP00])[k1e ]; + //double mfcbb = (D.f[dM00])[k1w ]; + //double mfbab = (D.f[d0P0])[k1n ]; + //double mfbcb = (D.f[d0M0])[k1s ]; + //double mfbba = (D.f[d00P])[k1t ]; + //double mfbbc = (D.f[d00M])[k1b ]; + //double mfaab = (D.f[dPP0])[k1ne ]; + //double mfccb = (D.f[dMM0])[k1sw ]; + //double mfacb = (D.f[dPM0])[k1se ]; + //double mfcab = (D.f[dMP0])[k1nw ]; + //double mfaba = (D.f[dP0P])[k1te ]; + //double mfcbc = (D.f[dM0M])[k1bw ]; + //double mfabc = (D.f[dP0M])[k1be ]; + //double mfcba = (D.f[dM0P])[k1tw ]; + //double mfbaa = (D.f[d0PP])[k1tn ]; + //double mfbcc = (D.f[d0MM])[k1bs ]; + //double mfbac = (D.f[d0PM])[k1bn ]; + //double mfbca = (D.f[d0MP])[k1ts ]; + //double mfbbb = (D.f[d000])[k1zero]; + //double mfaaa = (D.f[dPPP])[k1tne ]; + //double mfcca = (D.f[dMMP])[k1tsw ]; + //double mfaca = (D.f[dPMP])[k1tse ]; + //double mfcaa = (D.f[dMPP])[k1tnw ]; + //double mfaac = (D.f[dPPM])[k1bne ]; + //double mfccc = (D.f[dMMM])[k1bsw ]; + //double mfacc = (D.f[dPMM])[k1bse ]; + //double mfcac = (D.f[dMPM])[k1bnw ]; + real mfabb = (D.f[dP00])[k1e ]; + real mfcbb = (D.f[dM00])[k1w ]; + real mfbab = (D.f[d0P0])[k1n ]; + real mfbcb = (D.f[d0M0])[k1s ]; + real mfbba = (D.f[d00P])[k1t ]; + real mfbbc = (D.f[d00M])[k1b ]; + real mfaab = (D.f[dPP0])[k1ne ]; + real mfccb = (D.f[dMM0])[k1sw ]; + real mfacb = (D.f[dPM0])[k1se ]; + real mfcab = (D.f[dMP0])[k1nw ]; + real mfaba = (D.f[dP0P])[k1te ]; + real mfcbc = (D.f[dM0M])[k1bw ]; + real mfabc = (D.f[dP0M])[k1be ]; + real mfcba = (D.f[dM0P])[k1tw ]; + real mfbaa = (D.f[d0PP])[k1tn ]; + real mfbcc = (D.f[d0MM])[k1bs ]; + real mfbac = (D.f[d0PM])[k1bn ]; + real mfbca = (D.f[d0MP])[k1ts ]; + real mfbbb = (D.f[d000])[k1zero]; + real mfaaa = (D.f[dPPP])[k1tne ]; + real mfcca = (D.f[dMMP])[k1tsw ]; + real mfaca = (D.f[dPMP])[k1tse ]; + real mfcaa = (D.f[dMPP])[k1tnw ]; + real mfaac = (D.f[dPPM])[k1bne ]; + real mfccc = (D.f[dMMM])[k1bsw ]; + real mfacc = (D.f[dPMM])[k1bse ]; + real mfcac = (D.f[dMPM])[k1bnw ]; + + //real mfcbb = (D.f[dP00])[ke ]; + //real mfabb = (D.f[dM00])[kw ]; + //real mfbcb = (D.f[d0P0])[kn ]; + //real mfbab = (D.f[d0M0])[ks ]; + //real mfbbc = (D.f[d00P])[kt ]; + //real mfbba = (D.f[d00M])[kb ]; + //real mfccb = (D.f[dPP0])[kne ]; + //real mfaab = (D.f[dMM0])[ksw ]; + //real mfcab = (D.f[dPM0])[kse ]; + //real mfacb = (D.f[dMP0])[knw ]; + //real mfcbc = (D.f[dP0P])[kte ]; + //real mfaba = (D.f[dM0M])[kbw ]; + //real mfcba = (D.f[dP0M])[kbe ]; + //real mfabc = (D.f[dM0P])[ktw ]; + //real mfbcc = (D.f[d0PP])[ktn ]; + //real mfbaa = (D.f[d0MM])[kbs ]; + //real mfbca = (D.f[d0PM])[kbn ]; + //real mfbac = (D.f[d0MP])[kts ]; + //real mfbbb = (D.f[d000])[kzero]; + //real mfccc = (D.f[dPPP])[ktne ]; + //real mfaac = (D.f[dMMP])[ktsw ]; + //real mfcac = (D.f[dPMP])[ktse ]; + //real mfacc = (D.f[dMPP])[ktnw ]; + //real mfcca = (D.f[dPPM])[kbne ]; + //real mfaaa = (D.f[dMMM])[kbsw ]; + //real mfcaa = (D.f[dPMM])[kbse ]; + //real mfaca = (D.f[dMPM])[kbnw ]; + //////////////////////////////////////////////////////////////////////////////////// + //real rho = (((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + + // (((mfbac+mfbca) + (mfbaa+mfbcc)) + ((mfabc+mfcba) + (mfaba+mfcbc)) + ((mfacb+mfcab) + (mfaab+mfccb))) + + // ((mfabb+mfcbb) + (mfbab+mfbcb)) + (mfbba+mfbbc)) + mfbbb) + one;//!!!!Achtung + one + //////////////////////////////////////////////////////////////////////////////////// + real rho = rhoBC[k]; + //////////////////////////////////////////////////////////////////////////////////// + real OoRho = c1o1 / (rho * 1.5f); + //////////////////////////////////////////////////////////////////////////////////// + real vvx = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + + (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + + (mfcbb-mfabb)) * OoRho; + real vvy =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + + (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + + (mfbcb-mfbab)) * OoRho; + real vvz =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + + (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + + (mfbbc-mfbba)) * OoRho; + ///////////////////////// + //Test Values + //double vvx = 0.016; + //double vvy = zero; + //double vvz = zero; + //////////////////////////////////////////////////////////////////////////////////////// + ////round off error test + //if(vvx!=zero){ + // (kDistTest.f[dP00])[k] = mfabb; + // (kDistTest.f[dM00])[k] = mfcbb; + // (kDistTest.f[d0P0])[k] = mfbab; + // (kDistTest.f[d0M0])[k] = mfbcb; + // (kDistTest.f[d00P])[k] = mfbba; + // (kDistTest.f[d00M])[k] = mfbbc; + // (kDistTest.f[dPP0])[k] = mfaab; + // (kDistTest.f[dMM0])[k] = mfccb; + // (kDistTest.f[dPM0])[k] = mfacb; + // (kDistTest.f[dMP0])[k] = mfcab; + // (kDistTest.f[dP0P])[k] = mfaba; + // (kDistTest.f[dM0M])[k] = mfcbc; + // (kDistTest.f[dP0M])[k] = mfabc; + // (kDistTest.f[dM0P])[k] = mfcba; + // (kDistTest.f[d0PP])[k] = mfbaa; + // (kDistTest.f[d0MM])[k] = mfbcc; + // (kDistTest.f[d0PM])[k] = mfbac; + // (kDistTest.f[d0MP])[k] = mfbca; + // (kDistTest.f[d000])[k] = KQK; + // (kDistTest.f[dPPP])[k] = mfaaa; + // (kDistTest.f[dMMP])[k] = mfcca; + // (kDistTest.f[dPMP])[k] = mfaca; + // (kDistTest.f[dMPP])[k] = mfcaa; + // (kDistTest.f[dPPM])[k] = mfaac; + // (kDistTest.f[dMMM])[k] = mfccc; + // (kDistTest.f[dPMM])[k] = mfacc; + // (kDistTest.f[dMPM])[k] = mfcac; + //}else{ + // (kDistTest.f[dP00])[k] = zero; + // (kDistTest.f[dM00])[k] = zero; + // (kDistTest.f[d0P0])[k] = zero; + // (kDistTest.f[d0M0])[k] = zero; + // (kDistTest.f[d00P])[k] = zero; + // (kDistTest.f[d00M])[k] = zero; + // (kDistTest.f[dPP0])[k] = zero; + // (kDistTest.f[dMM0])[k] = zero; + // (kDistTest.f[dPM0])[k] = zero; + // (kDistTest.f[dMP0])[k] = zero; + // (kDistTest.f[dP0P])[k] = zero; + // (kDistTest.f[dM0M])[k] = zero; + // (kDistTest.f[dP0M])[k] = zero; + // (kDistTest.f[dM0P])[k] = zero; + // (kDistTest.f[d0PP])[k] = zero; + // (kDistTest.f[d0MM])[k] = zero; + // (kDistTest.f[d0PM])[k] = zero; + // (kDistTest.f[d0MP])[k] = zero; + // (kDistTest.f[d000])[k] = zero; + // (kDistTest.f[dPPP])[k] = zero; + // (kDistTest.f[dMMP])[k] = zero; + // (kDistTest.f[dPMP])[k] = zero; + // (kDistTest.f[dMPP])[k] = zero; + // (kDistTest.f[dPPM])[k] = zero; + // (kDistTest.f[dMMM])[k] = zero; + // (kDistTest.f[dPMM])[k] = zero; + // (kDistTest.f[dMPM])[k] = zero; + //} + + ////////////////////////////////////////////////////////////////////////////////////// + //// first bad fix for negative x velocity + ////if(vvx > zero) vvx = zero; + ////////////////////////////////////////////////////////////////////////////////////// + ////// second bad fix for negative x velocity + ////if(vvx > zero){ + //// vvx = -vvx; + //// vvy = -vvy; + //// vvz = -vvz; + ////} + //////////////////////////////////////////////////////////////////////////////////// + double vx2 = vvx * vvx; + double vy2 = vvy * vvy; + double vz2 = vvz * vvz; + ////////////////////////////////////////////////////////////////////////////////// + //original + real XXb = -c2o3 + vx2; + real XXc = -c1o2 * (XXb + c1o1 + vvx); + real XXa = XXc + vvx; + real YYb = -c2o3 + vy2; + real YYc = -c1o2 * (YYb + c1o1 + vvy); + real YYa = YYc + vvy; + real ZZb = -c2o3 + vz2; + real ZZc = -c1o2 * (ZZb + c1o1 + vvz); + real ZZa = ZZc + vvz; + ////////////////////////////////////////////////////////////////////////////////// + //unkonditioniert + mfcbb = -(rhoBC[k] + c1o1) * XXc * YYb * ZZb - c2o27; + mfabb = -(rhoBC[k] + c1o1) * XXa * YYb * ZZb - c2o27; + mfbcb = -(rhoBC[k] + c1o1) * XXb * YYc * ZZb - c2o27; + mfbab = -(rhoBC[k] + c1o1) * XXb * YYa * ZZb - c2o27; + mfbbc = -(rhoBC[k] + c1o1) * XXb * YYb * ZZc - c2o27; + mfbba = -(rhoBC[k] + c1o1) * XXb * YYb * ZZa - c2o27; + mfccb = -(rhoBC[k] + c1o1) * XXc * YYc * ZZb - c1o54; + mfaab = -(rhoBC[k] + c1o1) * XXa * YYa * ZZb - c1o54; + mfcab = -(rhoBC[k] + c1o1) * XXc * YYa * ZZb - c1o54; + mfacb = -(rhoBC[k] + c1o1) * XXa * YYc * ZZb - c1o54; + mfcbc = -(rhoBC[k] + c1o1) * XXc * YYb * ZZc - c1o54; + mfaba = -(rhoBC[k] + c1o1) * XXa * YYb * ZZa - c1o54; + mfcba = -(rhoBC[k] + c1o1) * XXc * YYb * ZZa - c1o54; + mfabc = -(rhoBC[k] + c1o1) * XXa * YYb * ZZc - c1o54; + mfbcc = -(rhoBC[k] + c1o1) * XXb * YYc * ZZc - c1o54; + mfbaa = -(rhoBC[k] + c1o1) * XXb * YYa * ZZa - c1o54; + mfbca = -(rhoBC[k] + c1o1) * XXb * YYc * ZZa - c1o54; + mfbac = -(rhoBC[k] + c1o1) * XXb * YYa * ZZc - c1o54; + mfbbb = -(rhoBC[k] + c1o1) * XXb * YYb * ZZb - c8o27; + mfccc = -(rhoBC[k] + c1o1) * XXc * YYc * ZZc - c1o216; + mfaac = -(rhoBC[k] + c1o1) * XXa * YYa * ZZc - c1o216; + mfcac = -(rhoBC[k] + c1o1) * XXc * YYa * ZZc - c1o216; + mfacc = -(rhoBC[k] + c1o1) * XXa * YYc * ZZc - c1o216; + mfcca = -(rhoBC[k] + c1o1) * XXc * YYc * ZZa - c1o216; + mfaaa = -(rhoBC[k] + c1o1) * XXa * YYa * ZZa - c1o216; + mfcaa = -(rhoBC[k] + c1o1) * XXc * YYa * ZZa - c1o216; + mfaca = -(rhoBC[k] + c1o1) * XXa * YYc * ZZa - c1o216; + ////////////////////////////////////////////////////////// + ////konditioniert + //double OneOver216RhoPlusOne = c1over216*(rhoBC[k]+one); + //double OnoOver216Rho = c1over216*rhoBC[k]; + //mfcbb = OnoOver216Rho*sixteen + OneOver216RhoPlusOne*twelve*(-(two*vy2) - two*vz2 + three*vy2*vz2 + vvx*(-two + three*vy2)*(-two + three*vz2) + vx2*(-two + three*vy2)*(-two + three*vz2)); + //mfabb = OnoOver216Rho*sixteen - OneOver216RhoPlusOne*twelve*(two*vy2 + two*vz2 - three*vy2*vz2 + vvx*(-two + three*vy2)*(-two + three*vz2) + vx2*(-four + six*vy2 + six*vz2 - nine*vy2*vz2)); + //mfbcb = four*(-(four*OneOver216RhoPlusOne) + four*OnoOver216Rho + OneOver216RhoPlusOne*(-two + three*vx2)*(one + three*vvy + three*vy2)*(-two + three*vz2)); + //mfbab = four*(four*OnoOver216Rho - OneOver216RhoPlusOne*three*(vvy*(-two + three*vx2)*(-two + three*vz2) - one*vx2*(one + three*vy2)*(-two + three*vz2) + two*(-(two*vy2) + vz2 + three*vy2*vz2))); + //mfbbc = four*(-(four*OneOver216RhoPlusOne) + four*OnoOver216Rho + OneOver216RhoPlusOne*(-two + three*vx2)*(-two + three*vy2)*(one + three*vvz + three*vz2)); + //mfbba = four*(four*OnoOver216Rho - OneOver216RhoPlusOne*three*(vvz*(-two + three*vx2)*(-two + three*vy2) - one*vx2*(-two + three*vy2)*(one + three*vz2) + two*(vy2 - two*vz2 + three*vy2*vz2))); + //mfccb = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(-(two*vx2) - two*vy2 - six*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(-two + three*vz2) + vvx*(one + three*vvy + three*vy2)*(-two + three*vz2)))); + //mfaab = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(-(two*vx2) - two*vy2 - six*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-two + three*vz2) + vvx*(-one + three*vvy - three*vy2)*(-two + three*vz2)))); + //mfcab = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(two*vx2 + two*vy2 + six*vx2*vy2 - one*vz2 - three*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(-two + three*vz2) + vvx*(-one + three*vvy - three*vy2)*(-two + three*vz2))); + //mfacb = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(two*vx2 + two*vy2 + six*vx2*vy2 - one*vz2 - three*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-two + three*vz2) + vvx*(one + three*vvy + three*vy2)*(-two + three*vz2))); + //mfcbc = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(-(two*vx2) + vy2 + three*vx2*vy2 + vvz*(one + three*vx2)*(-two + three*vy2) - two*vz2 - six*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvx*(-two + three*vy2)*(one + three*vvz + three*vz2)))); + //mfaba = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(-(two*vx2) + vy2 + three*vx2*vy2 - one*vvz*(one + three*vx2)*(-two + three*vy2) - two*vz2 - six*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvx*(-two + three*vy2)*(-one + three*vvz - three*vz2)))); + //mfcba = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(two*vx2 - one*vy2 - three*vx2*vy2 + vvz*(one + three*vx2)*(-two + three*vy2) + two*vz2 + six*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 + vvx*(-two + three*vy2)*(-one + three*vvz - three*vz2))); + //mfabc = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(two*vx2 - one*vy2 - three*vx2*vy2 - one*vvz*(one + three*vx2)*(-two + three*vy2) + two*vz2 + six*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 + vvx*(-two + three*vy2)*(one + three*vvz + three*vz2))); + //mfbcc = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(vx2 - two*vy2 + three*vx2*vy2 + vvz*(-two + three*vx2)*(one + three*vy2) - two*vz2 + three*vx2*vz2 - six*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(-two + three*vx2)*(one + three*vvz + three*vz2)))); + //mfbaa = -(two*(-(OnoOver216Rho*two) + OneOver216RhoPlusOne*three*(vx2 - two*vy2 + three*vx2*vy2 - one*vvz*(-two + three*vx2)*(one + three*vy2) - two*vz2 + three*vx2*vz2 - six*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(-two + three*vx2)*(-one + three*vvz - three*vz2)))); + //mfbca = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(-(one*vx2) + two*vy2 - three*vx2*vy2 + vvz*(-two + three*vx2)*(one + three*vy2) + two*vz2 - three*vx2*vz2 + six*vy2*vz2 - nine*vx2*vy2*vz2 + vvy*(-two + three*vx2)*(-one + three*vvz - three*vz2))); + //mfbac = two*(OnoOver216Rho*two + OneOver216RhoPlusOne*three*(-(one*vx2) + two*vy2 - three*vx2*vy2 - one*vvz*(-two + three*vx2)*(one + three*vy2) + two*vz2 - three*vx2*vz2 + six*vy2*vz2 - nine*vx2*vy2*vz2 + vvy*(-two + three*vx2)*(one + three*vvz + three*vz2))); + //mfbbb = eight*(eight*OnoOver216Rho + OneOver216RhoPlusOne*three*(four*vy2 + four*vz2 - six*vy2*vz2 + vx2*(-two + three*vy2)*(-two + three*vz2))); + //mfccc = OnoOver216Rho + OneOver216RhoPlusOne*three*(vvz + vx2 + three*vvz*vx2 + vy2 + three*vvz*vy2 + three*vx2*vy2 + nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(one + three*vvz + three*vz2) + vvx*(one + three*vvy + three*vy2)*(one + three*vvz + three*vz2)); + //mfaac = OnoOver216Rho + OneOver216RhoPlusOne*three*(vvz + vx2 + three*vvz*vx2 + vy2 + three*vvz*vy2 + three*vx2*vy2 + nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(one + three*vvz + three*vz2) + vvx*(-one + three*vvy - three*vy2)*(one + three*vvz + three*vz2)); + //mfcac = OnoOver216Rho + OneOver216RhoPlusOne*three*(vvz + vx2 + three*vvz*vx2 + vy2 + three*vvz*vy2 + three*vx2*vy2 + nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(one + three*vvz + three*vz2) - one*vvx*(-one + three*vvy - three*vy2)*(one + three*vvz + three*vz2)); + //mfacc = OnoOver216Rho + OneOver216RhoPlusOne*three*(vvz + vx2 + three*vvz*vx2 + vy2 + three*vvz*vy2 + three*vx2*vy2 + nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(one + three*vvz + three*vz2) - one*vvx*(one + three*vvy + three*vy2)*(one + three*vvz + three*vz2)); + //mfcca = OnoOver216Rho + OneOver216RhoPlusOne*three*(-(one*vvz) + vx2 - three*vvz*vx2 + vy2 - three*vvz*vy2 + three*vx2*vy2 - nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-one + three*vvz - three*vz2) - one*vvx*(one + three*vvy + three*vy2)*(-one + three*vvz - three*vz2)); + //mfaaa = OnoOver216Rho - OneOver216RhoPlusOne*three*(vvz - one*vx2 + three*vvz*vx2 - one*vy2 + three*vvz*vy2 - three*vx2*vy2 + nine*vvz*vx2*vy2 - one*vz2 - three*vx2*vz2 - three*vy2*vz2 - nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-one + three*vvz - three*vz2) + vvx*(-one + three*vvy - three*vy2)*(-one + three*vvz - three*vz2)); + //mfcaa = OnoOver216Rho + OneOver216RhoPlusOne*three*(-(one*vvz) + vx2 - three*vvz*vx2 + vy2 - three*vvz*vy2 + three*vx2*vy2 - nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 + vvy*(one + three*vx2)*(-one + three*vvz - three*vz2) + vvx*(-one + three*vvy - three*vy2)*(-one + three*vvz - three*vz2)); + //mfaca = OnoOver216Rho + OneOver216RhoPlusOne*three*(-(one*vvz) + vx2 - three*vvz*vx2 + vy2 - three*vvz*vy2 + three*vx2*vy2 - nine*vvz*vx2*vy2 + vz2 + three*vx2*vz2 + three*vy2*vz2 + nine*vx2*vy2*vz2 - one*vvy*(one + three*vx2)*(-one + three*vvz - three*vz2) + vvx*(one + three*vvy + three*vy2)*(-one + three*vvz - three*vz2)); + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //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]; + //} + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //__syncthreads(); + + (D.f[dP00])[ke ] = mfabb;//mfcbb; + (D.f[dM00])[kw ] = mfcbb;//mfabb; + (D.f[d0P0])[kn ] = mfbab;//mfbcb; + (D.f[d0M0])[ks ] = mfbcb;//mfbab; + (D.f[d00P])[kt ] = mfbba;//mfbbc; + (D.f[d00M])[kb ] = mfbbc;//mfbba; + (D.f[dPP0])[kne ] = mfaab;//mfccb; + (D.f[dMM0])[ksw ] = mfccb;//mfaab; + (D.f[dPM0])[kse ] = mfacb;//mfcab; + (D.f[dMP0])[knw ] = mfcab;//mfacb; + (D.f[dP0P])[kte ] = mfaba;//mfcbc; + (D.f[dM0M])[kbw ] = mfcbc;//mfaba; + (D.f[dP0M])[kbe ] = mfabc;//mfcba; + (D.f[dM0P])[ktw ] = mfcba;//mfabc; + (D.f[d0PP])[ktn ] = mfbaa;//mfbcc; + (D.f[d0MM])[kbs ] = mfbcc;//mfbaa; + (D.f[d0PM])[kbn ] = mfbac;//mfbca; + (D.f[d0MP])[kts ] = mfbca;//mfbac; + (D.f[d000])[kzero] = mfbbb;//mfbbb; + (D.f[dPPP])[ktne ] = mfaaa;//mfccc; + (D.f[dMMP])[ktsw ] = mfcca;//mfaac; + (D.f[dPMP])[ktse ] = mfaca;//mfcac; + (D.f[dMPP])[ktnw ] = mfcaa;//mfacc; + (D.f[dPPM])[kbne ] = mfaac;//mfcca; + (D.f[dMMM])[kbsw ] = mfccc;//mfaaa; + (D.f[dPMM])[kbse ] = mfacc;//mfcaa; + (D.f[dMPM])[kbnw ] = mfcac;//mfaca; + //(D.f[dP00])[ke ] = mfcbb; + //(D.f[dM00])[kw ] = mfabb; + //(D.f[d0P0])[kn ] = mfbcb; + //(D.f[d0M0])[ks ] = mfbab; + //(D.f[d00P])[kt ] = mfbbc; + //(D.f[d00M])[kb ] = mfbba; + //(D.f[dPP0])[kne ] = mfccb; + //(D.f[dMM0])[ksw ] = mfaab; + //(D.f[dPM0])[kse ] = mfcab; + //(D.f[dMP0])[knw ] = mfacb; + //(D.f[dP0P])[kte ] = mfcbc; + //(D.f[dM0M])[kbw ] = mfaba; + //(D.f[dP0M])[kbe ] = mfcba; + //(D.f[dM0P])[ktw ] = mfabc; + //(D.f[d0PP])[ktn ] = mfbcc; + //(D.f[d0MM])[kbs ] = mfbaa; + //(D.f[d0PM])[kbn ] = mfbca; + //(D.f[d0MP])[kts ] = mfbac; + //(D.f[d000])[kzero] = mfbbb; + //(D.f[dPPP])[ktne ] = mfccc; + //(D.f[dMMP])[ktsw ] = mfaac; + //(D.f[dPMP])[ktse ] = mfcac; + //(D.f[dMPP])[ktnw ] = mfacc; + //(D.f[dPPM])[kbne ] = mfcca; + //(D.f[dMMM])[kbsw ] = mfaaa; + //(D.f[dPMM])[kbse ] = mfcaa; + //(D.f[dMPM])[kbnw ] = mfaca; + + //(D.f[dP00])[ke ] = fE ; //f1_E ; //fW; //fE ; + //(D.f[dM00])[kw ] = fW ; //f1_W ; //fE; //fW ; + //(D.f[d0P0])[kn ] = fN ; //f1_N ; //fS; //fN ; + //(D.f[d0M0])[ks ] = fS ; //f1_S ; //fN; //fS ; + //(D.f[d00P])[kt ] = fT ; //f1_T ; //fB; //fT ; + //(D.f[d00M])[kb ] = fB ; //f1_B ; //fT; //fB ; + //(D.f[dPP0])[kne ] = fNE; //f1_NE; //fSW; //fNE; + //(D.f[dMM0])[ksw ] = fSW; //f1_SW; //fNE; //fSW; + //(D.f[dPM0])[kse ] = fSE; //f1_SE; //fNW; //fSE; + //(D.f[dMP0])[knw ] = fNW; //f1_NW; //fSE; //fNW; + //(D.f[dP0P])[kte ] = fTE; //f1_TE; //fBW; //fTE; + //(D.f[dM0M])[kbw ] = fBW; //f1_BW; //fTE; //fBW; + //(D.f[dP0M])[kbe ] = fBE; //f1_BE; //fTW; //fBE; + //(D.f[dM0P])[ktw ] = fTW; //f1_TW; //fBE; //fTW; + //(D.f[d0PP])[ktn ] = fTN; //f1_TN; //fBS; //fTN; + //(D.f[d0MM])[kbs ] = fBS; //f1_BS; //fTN; //fBS; + //(D.f[d0PM])[kbn ] = fBN; //f1_BN; //fTS; //fBN; + //(D.f[d0MP])[kts ] = fTS; //f1_TS; //fBN; //fTS; + //(D.f[d000])[kzero] = fZERO;//f1_ZERO; //fZERO; //fZERO; + //(D.f[dPPP])[ktne ] = fTNE; //f1_TNE; //fBSW; //fTNE; + //(D.f[dMMM])[kbsw ] = fBSW; //f1_BSW; //fTNE; //fBSW; + //(D.f[dPPM])[kbne ] = fBNE; //f1_BNE; //fTSW; //fBNE; + //(D.f[dMMP])[ktsw ] = fTSW; //f1_TSW; //fBNE; //fTSW; + //(D.f[dPMP])[ktse ] = fTSE; //f1_TSE; //fBNW; //fTSE; + //(D.f[dMPM])[kbnw ] = fBNW; //f1_BNW; //fTSE; //fBNW; + //(D.f[dPMM])[kbse ] = fBSE; //f1_BSE; //fTNW; //fBSE; + //(D.f[dMPP])[ktnw ] = fTNW; //f1_TNW; //fBSE; //fTNW; + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +__global__ void QPressDeviceZero27( + real* DD, + int* k_Q, + unsigned int numberOfBCnodes, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //////////////////////////////////////////////////////////////////////////////// + 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) + { + //////////////////////////////////////////////////////////////////////////////// + //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]; + //////////////////////////////////////////////////////////////////////////////// + Distributions27 D; + if (isEvenTimestep==false) + { + 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]; + } + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //__syncthreads(); + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + (D.f[dP00])[ke ] =c0o1; + (D.f[dM00])[kw ] =c0o1; + (D.f[d0P0])[kn ] =c0o1; + (D.f[d0M0])[ks ] =c0o1; + (D.f[d00P])[kt ] =c0o1; + (D.f[d00M])[kb ] =c0o1; + (D.f[dPP0])[kne ] =c0o1; + (D.f[dMM0])[ksw ] =c0o1; + (D.f[dPM0])[kse ] =c0o1; + (D.f[dMP0])[knw ] =c0o1; + (D.f[dP0P])[kte ] =c0o1; + (D.f[dM0M])[kbw ] =c0o1; + (D.f[dP0M])[kbe ] =c0o1; + (D.f[dM0P])[ktw ] =c0o1; + (D.f[d0PP])[ktn ] =c0o1; + (D.f[d0MM])[kbs ] =c0o1; + (D.f[d0PM])[kbn ] =c0o1; + (D.f[d0MP])[kts ] =c0o1; + (D.f[d000])[kzero] =c0o1; + (D.f[dPPP])[ktne ] =c0o1; + (D.f[dMMP])[ktsw ] =c0o1; + (D.f[dPMP])[ktse ] =c0o1; + (D.f[dMPP])[ktnw ] =c0o1; + (D.f[dPPM])[kbne ] =c0o1; + (D.f[dMMM])[kbsw ] =c0o1; + (D.f[dPMM])[kbse ] =c0o1; + (D.f[dMPM])[kbnw ] =c0o1; + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +__global__ void QPressDeviceFake27( + real* rhoBC, + real* DD, + int* k_Q, + int* k_N, + int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //////////////////////////////////////////////////////////////////////////////// + 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) + { + //////////////////////////////////////////////////////////////////////////////// + //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]; + //////////////////////////////////////////////////////////////////////////////// + //index1 + unsigned int K1QK = k_N[k]; + unsigned int k1zero= K1QK; + unsigned int k1e = K1QK; + unsigned int k1w = neighborX[K1QK]; + unsigned int k1n = K1QK; + unsigned int k1s = neighborY[K1QK]; + unsigned int k1t = K1QK; + unsigned int k1b = neighborZ[K1QK]; + unsigned int k1sw = neighborY[k1w]; + unsigned int k1ne = K1QK; + unsigned int k1se = k1s; + unsigned int k1nw = k1w; + unsigned int k1bw = neighborZ[k1w]; + unsigned int k1te = K1QK; + unsigned int k1be = k1b; + unsigned int k1tw = k1w; + unsigned int k1bs = neighborZ[k1s]; + unsigned int k1tn = K1QK; + unsigned int k1bn = k1b; + unsigned int k1ts = k1s; + unsigned int k1tse = k1s; + unsigned int k1bnw = k1bw; + unsigned int k1tnw = k1w; + unsigned int k1bse = k1bs; + unsigned int k1tsw = k1sw; + unsigned int k1bne = k1b; + unsigned int k1tne = K1QK; + unsigned int k1bsw = neighborZ[k1sw]; + //////////////////////////////////////////////////////////////////////////////// + Distributions27 D; + if (isEvenTimestep==false) + { + 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]; + } + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO, + f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW; + + f1_W = (D.f[dP00])[k1e ]; + f1_E = (D.f[dM00])[k1w ]; + f1_S = (D.f[d0P0])[k1n ]; + f1_N = (D.f[d0M0])[k1s ]; + f1_B = (D.f[d00P])[k1t ]; + f1_T = (D.f[d00M])[k1b ]; + f1_SW = (D.f[dPP0])[k1ne ]; + f1_NE = (D.f[dMM0])[k1sw ]; + f1_NW = (D.f[dPM0])[k1se ]; + f1_SE = (D.f[dMP0])[k1nw ]; + f1_BW = (D.f[dP0P])[k1te ]; + f1_TE = (D.f[dM0M])[k1bw ]; + f1_TW = (D.f[dP0M])[k1be ]; + f1_BE = (D.f[dM0P])[k1tw ]; + f1_BS = (D.f[d0PP])[k1tn ]; + f1_TN = (D.f[d0MM])[k1bs ]; + f1_TS = (D.f[d0PM])[k1bn ]; + f1_BN = (D.f[d0MP])[k1ts ]; + f1_ZERO = (D.f[d000])[k1zero]; + f1_BSW = (D.f[dPPP])[k1tne ]; + f1_BNE = (D.f[dMMP])[k1tsw ]; + f1_BNW = (D.f[dPMP])[k1tse ]; + f1_BSE = (D.f[dMPP])[k1tnw ]; + f1_TSW = (D.f[dPPM])[k1bne ]; + f1_TNE = (D.f[dMMM])[k1bsw ]; + f1_TNW = (D.f[dPMM])[k1bse ]; + f1_TSE = (D.f[dMPM])[k1bnw ]; + + //////////////////////////////////////////////////////////////////////////////// + real vx1, vx2, vx3; + vx1 = ((f1_TSE - f1_BNW) - (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) - (f1_TSW - f1_BNE)) + + ((f1_BE - f1_TW) + (f1_TE - f1_BW)) + ((f1_SE - f1_NW) + (f1_NE - f1_SW)) + + (f1_E - f1_W); + + + vx2 = (-(f1_TSE - f1_BNW) + (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) - (f1_TSW - f1_BNE)) + + ((f1_BN - f1_TS) + (f1_TN - f1_BS)) + (-(f1_SE - f1_NW) + (f1_NE - f1_SW)) + + (f1_N - f1_S); + + vx3 = ((f1_TSE - f1_BNW) + (f1_TNW - f1_BSE)) + ((f1_TNE - f1_BSW) + (f1_TSW - f1_BNE)) + + (-(f1_BN - f1_TS) + (f1_TN - f1_BS)) + ((f1_TE - f1_BW) - (f1_BE - f1_TW)) + + (f1_T - f1_B); + + real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); + ////////////////////////////////////////////////////////////////////////// + real drho1 = f1_ZERO+f1_E+f1_W+f1_N+f1_S+f1_T+f1_B+f1_NE+f1_SW+f1_SE+f1_NW+f1_TE+f1_BW+f1_BE+f1_TW+f1_TN+f1_BS+f1_BN+f1_TS+ + f1_TNE+f1_TSW+f1_TSE+f1_TNW+f1_BNE+f1_BSW+f1_BSE+f1_BNW; + + //drho1 = (drho1 + rhoBC[k])/2.f; + drho1 = drho1 - rhoBC[k]; + + __syncthreads(); + + (D.f[dP00])[ke ] = c2o27* (rhoBC[k]+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); + (D.f[dM00])[kw ] = c2o27* (rhoBC[k]+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); + (D.f[d0P0])[kn ] = c2o27* (rhoBC[k]+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); + (D.f[d0M0])[ks ] = c2o27* (rhoBC[k]+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); + (D.f[d00P])[kt ] = c2o27* (rhoBC[k]+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); + (D.f[d00M])[kb ] = c2o27* (rhoBC[k]+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); + (D.f[dPP0])[kne ] = f1_SW -c1o54*drho1; // c1o100; // zero; // + (D.f[dMM0])[ksw ] = f1_NE -c1o54*drho1; // c1o100; // zero; // + (D.f[dPM0])[kse ] = f1_NW -c1o54*drho1; // c1o100; // zero; // + (D.f[dMP0])[knw ] = f1_SE -c1o54*drho1; // c1o100; // zero; // + (D.f[dP0P])[kte ] = f1_BW -c1o54*drho1; // c1o100; // zero; // + (D.f[dM0M])[kbw ] = f1_TE -c1o54*drho1; // c1o100; // zero; // + (D.f[dP0M])[kbe ] = f1_TW -c1o54*drho1; // c1o100; // zero; // + (D.f[dM0P])[ktw ] = f1_BE -c1o54*drho1; // c1o100; // zero; // + (D.f[d0PP])[ktn ] = f1_BS -c1o54*drho1; // c1o100; // zero; // + (D.f[d0MM])[kbs ] = f1_TN -c1o54*drho1; // c1o100; // zero; // + (D.f[d0PM])[kbn ] = f1_TS -c1o54*drho1; // c1o100; // zero; // + (D.f[d0MP])[kts ] = f1_BN -c1o54*drho1; // c1o100; // zero; // + (D.f[d000])[kzero] = f1_ZERO-c8o27*drho1; // c1o100; // zero; // + (D.f[dPPP])[ktne ] = f1_BSW -c1o216*drho1; // c1o100; // zero; // + (D.f[dMMP])[ktsw ] = f1_BNE -c1o216*drho1; // c1o100; // zero; // + (D.f[dPMP])[ktse ] = f1_BNW -c1o216*drho1; // c1o100; // zero; // + (D.f[dMPP])[ktnw ] = f1_BSE -c1o216*drho1; // c1o100; // zero; // + (D.f[dPPM])[kbne ] = f1_TSW -c1o216*drho1; // c1o100; // zero; // + (D.f[dMMM])[kbsw ] = f1_TNE -c1o216*drho1; // c1o100; // zero; // + (D.f[dPMM])[kbse ] = f1_TNW -c1o216*drho1; // c1o100; // zero; // + (D.f[dMPM])[kbnw ] = f1_TSE -c1o216*drho1; // c1o100; // zero; // + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////// +__global__ void QPressDevice27_IntBB( + real* rho, + real* DD, + 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]; + } + //////////////////////////////////////////////////////////////////////////////// + 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 VeloX = vx[k]; + //real VeloY = vy[k]; + //real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny) + //////////////////////////////////////////////////////////////////////////////// + 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, 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 + ((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); + + ////////////////////////////////////////////////////////////////////////// + if (isEvenTimestep==false) + { + 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]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //Test + //(D.f[d000])[k]=c1o10; + real rhoDiff = drho - rho[k]; + real VeloX = vx1; + real VeloY = vx2; + real VeloZ = vx3; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + q = q_dirE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho+c9o2*( vx1 )*( vx1 )-cu_sq); + (D.f[dM00])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c2o27*(rhoDiff + c6o1*( VeloX )))/(c1o1+q); + } + + q = q_dirW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho+c9o2*(-vx1 )*(-vx1 )-cu_sq); + (D.f[dP00])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c2o27*(rhoDiff + c6o1*(-VeloX )))/(c1o1+q); + } + + q = q_dirN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho+c9o2*( vx2 )*( vx2 )-cu_sq); + (D.f[d0M0])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c2o27*(rhoDiff + c6o1*( VeloY )))/(c1o1+q); + } + + q = q_dirS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho+c9o2*( -vx2 )*( -vx2 )-cu_sq); + (D.f[d0P0])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c2o27*(rhoDiff + c6o1*(-VeloY )))/(c1o1+q); + } + + q = q_dirT[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho+c9o2*( vx3)*( vx3)-cu_sq); + (D.f[d00M])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c2o27*(rhoDiff + c6o1*( VeloZ )))/(c1o1+q); + } + + q = q_dirB[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho+c9o2*( -vx3)*( -vx3)-cu_sq); + (D.f[d00P])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c2o27*(rhoDiff + c6o1*(-VeloZ )))/(c1o1+q); + } + + q = q_dirNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); + (D.f[dMM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c1o54*(rhoDiff + c6o1*(VeloX+VeloY)))/(c1o1+q); + } + + q = q_dirSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); + (D.f[dPP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c1o54*(rhoDiff + c6o1*(-VeloX-VeloY)))/(c1o1+q); + } + + q = q_dirSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); + (D.f[dMP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c1o54*(rhoDiff + c6o1*( VeloX-VeloY)))/(c1o1+q); + } + + q = q_dirNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); + (D.f[dPM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c1o54*(rhoDiff + c6o1*(-VeloX+VeloY)))/(c1o1+q); + } + + q = q_dirTE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); + (D.f[dM0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c1o54*(rhoDiff + c6o1*( VeloX+VeloZ)))/(c1o1+q); + } + + q = q_dirBW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); + (D.f[dP0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c1o54*(rhoDiff + c6o1*(-VeloX-VeloZ)))/(c1o1+q); + } + + q = q_dirBE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); + (D.f[dM0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c1o54*(rhoDiff + c6o1*( VeloX-VeloZ)))/(c1o1+q); + } + + q = q_dirTW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); + (D.f[dP0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c1o54*(rhoDiff + c6o1*(-VeloX+VeloZ)))/(c1o1+q); + } + + q = q_dirTN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); + (D.f[d0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c1o54*(rhoDiff + c6o1*( VeloY+VeloZ)))/(c1o1+q); + } + + q = q_dirBS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); + (D.f[d0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c1o54*(rhoDiff + c6o1*( -VeloY-VeloZ)))/(c1o1+q); + } + + q = q_dirBN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); + (D.f[d0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c1o54*(rhoDiff + c6o1*( VeloY-VeloZ)))/(c1o1+q); + } + + q = q_dirTS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); + (D.f[d0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c1o54*(rhoDiff + c6o1*( -VeloY+VeloZ)))/(c1o1+q); + } + + q = q_dirTNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); + (D.f[dMMM])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c1o216*(rhoDiff + c6o1*( VeloX+VeloY+VeloZ)))/(c1o1+q); + } + + q = q_dirBSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); + (D.f[dPPP])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c1o216*(rhoDiff + c6o1*(-VeloX-VeloY-VeloZ)))/(c1o1+q); + } + + q = q_dirBNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); + (D.f[dMMP])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c1o216*(rhoDiff + c6o1*( VeloX+VeloY-VeloZ)))/(c1o1+q); + } + + q = q_dirTSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); + (D.f[dPPM])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c1o216*(rhoDiff + c6o1*(-VeloX-VeloY+VeloZ)))/(c1o1+q); + } + + q = q_dirTSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); + (D.f[dMPM])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c1o216*(rhoDiff + c6o1*( VeloX-VeloY+VeloZ)))/(c1o1+q); + } + + q = q_dirBNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); + (D.f[dPMP])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c1o216*(rhoDiff + c6o1*(-VeloX+VeloY-VeloZ)))/(c1o1+q); + } + + q = q_dirBSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); + (D.f[dMPP])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c1o216*(rhoDiff + c6o1*( VeloX-VeloY-VeloZ)))/(c1o1+q); + } + + q = q_dirTNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); + (D.f[dPMM])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c1o216*(rhoDiff + c6o1*(-VeloX+VeloY+VeloZ)))/(c1o1+q); + } + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + diff --git a/src/gpu/VirtualFluids_GPU/GPU/Random.cu b/src/gpu/core/GPU/Random.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/GPU/Random.cu rename to src/gpu/core/GPU/Random.cu diff --git a/src/gpu/core/GPU/SchlafferBCs27.cu b/src/gpu/core/GPU/SchlafferBCs27.cu new file mode 100644 index 0000000000000000000000000000000000000000..b031d25bd252b8405b75c0f07afe07a16ce93ee2 --- /dev/null +++ b/src/gpu/core/GPU/SchlafferBCs27.cu @@ -0,0 +1,590 @@ +/* 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; + +// TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/29 +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +__global__ void PressSchlaff27(real* rhoBC, + real* DD, + real* vx0, + real* vy0, + real* vz0, + real* deltaVz0, + int* k_Q, + int* k_N, + int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //////////////////////////////////////////////////////////////////////////////// + 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) + { + //////////////////////////////////////////////////////////////////////////////// + //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]; + //////////////////////////////////////////////////////////////////////////////// + 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]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO,f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW; + + f1_E = (D.f[dP00])[ke ]; + f1_W = (D.f[dM00])[kw ]; + f1_N = (D.f[d0P0])[kn ]; + f1_S = (D.f[d0M0])[ks ]; + f1_T = (D.f[d00P])[kt ]; + f1_B = (D.f[d00M])[kb ]; + f1_NE = (D.f[dPP0])[kne ]; + f1_SW = (D.f[dMM0])[ksw ]; + f1_SE = (D.f[dPM0])[kse ]; + f1_NW = (D.f[dMP0])[knw ]; + f1_TE = (D.f[dP0P])[kte ]; + f1_BW = (D.f[dM0M])[kbw ]; + f1_BE = (D.f[dP0M])[kbe ]; + f1_TW = (D.f[dM0P])[ktw ]; + f1_TN = (D.f[d0PP])[ktn ]; + f1_BS = (D.f[d0MM])[kbs ]; + f1_BN = (D.f[d0PM])[kbn ]; + f1_TS = (D.f[d0MP])[kts ]; + f1_ZERO = (D.f[d000])[kzero]; + f1_TNE = (D.f[dPPP])[ktne ]; + f1_TSW = (D.f[dMMP])[ktsw ]; + f1_TSE = (D.f[dPMP])[ktse ]; + f1_TNW = (D.f[dMPP])[ktnw ]; + f1_BNE = (D.f[dPPM])[kbne ]; + f1_BSW = (D.f[dMMM])[kbsw ]; + f1_BSE = (D.f[dPMM])[kbse ]; + f1_BNW = (D.f[dMPM])[kbnw ]; + ////////////////////////////////////////////////////////////////////////// + real cs = c1o1/sqrt(c3o1); + real csp1 = cs + c1o1; + real csp1Sq = (c1o1 + cs)*(c1o1 + cs); + real relFac = c21o20; // 0.9...1.0 + ////////////////////////////////////////////////////////////////////////// + // For adaption: + // Pressure limits with rho0 = 1: + // 2.2e-10 ~ 0.94 dB + // 6.2e-10 ~ 9.9 dB + // 6.2e-9 ~ 29.9 dB + // 2.0e-7 ~ 60.1 dB /Vel + // 2.0e-5 ~ 100.1 dB /press + const double dPlimit = c0p0000002; + const double dRlimit = dPlimit * c3o1;// three = c1oCs2; + const double uSlimit = dRlimit * c1o1;// one = c1oRho0; + ////////////////////////////////////////////////////////////////////////// + real VX = vx0[k]; + real VY = vy0[k]; + real VZ = vz0[k]; + ////////////////////////////////////////////////////////////////////////// + + real temp = c2o1*(f1_TNE + f1_TSE + f1_TSW + f1_TNW) + c2o1*(f1_TE + f1_TW + f1_TN + f1_TS) + f1_NE + f1_SW + f1_SE + f1_NW + c2o1*f1_T + f1_E + f1_W + f1_N + f1_S + f1_ZERO; + + real vs_z = relFac * (VZ+cs) * ( csp1 - sqrt(csp1Sq + c2o1*VZ - c2o1*temp) ); //old = relFac * cs * ( csp1 - sqrt(csp1Sq + two*VZ - two*temp) ); + + // 3. Compute density of compensated velocity: + real tempDeltaV = deltaVz0[k]; + real rholoc = temp - c1o1 * (VZ + tempDeltaV + vs_z); + + // 4. Compute density deviation: + real drho = rholoc - rhoBC[k]; + + // 5. Adapt Speed: + real dv = tempDeltaV + vs_z; + + if( drho > dRlimit) { + VZ += dv + uSlimit; + tempDeltaV += uSlimit; + } + else if( drho < -dRlimit) { + VZ += dv - uSlimit; + tempDeltaV -= uSlimit; + } + else { + VZ += dv + drho; + tempDeltaV += drho; + } + + //VZ = vz0[k] + vs_z; + // 6. Set unknown distributions: + f1_B = f1_T - c4o9 * VZ; + f1_BW = f1_TE - c1o9 * (VX + VZ); + f1_BE = f1_TW + c1o9 * (VX - VZ); + f1_BS = f1_TN - c1o9 * (VY + VZ); + f1_BN = f1_TS + c1o9 * (VY - VZ); + f1_BSW = f1_TNE - c1o36 * (VX + VY + VZ); + f1_BNW = f1_TSE - c1o36 * (VX - VY + VZ); + f1_BNE = f1_TSW + c1o36 * (VX + VY - VZ); + f1_BSE = f1_TNW + c1o36 * (VX - VY - VZ); + + deltaVz0[k] = tempDeltaV; + + (D.f[d00M])[kb ] = f1_B ; + (D.f[dM0M])[kbw ] = f1_BW ; + (D.f[dP0M])[kbe ] = f1_BE ; + (D.f[d0MM])[kbs ] = f1_BS ; + (D.f[d0PM])[kbn ] = f1_BN ; + (D.f[dPPM])[kbne ] = f1_BNE ; + (D.f[dMMM])[kbsw ] = f1_BSW ; + (D.f[dPMM])[kbse ] = f1_BSE ; + (D.f[dMPM])[kbnw ] = f1_BNW ; + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +// TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/29 +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +__global__ void VelSchlaff27( int t, + real* DD, + real* vz0, + real* deltaVz0, + int* k_Q, + int* k_N, + int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //////////////////////////////////////////////////////////////////////////////// + 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) + { + //////////////////////////////////////////////////////////////////////////////// + //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]; + //////////////////////////////////////////////////////////////////////////////// + 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]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO, + f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW; + + f1_E = (D.f[dP00])[ke ]; + f1_W = (D.f[dM00])[kw ]; + f1_N = (D.f[d0P0])[kn ]; + f1_S = (D.f[d0M0])[ks ]; + f1_T = (D.f[d00P])[kt ]; + f1_B = (D.f[d00M])[kb ]; + f1_NE = (D.f[dPP0])[kne ]; + f1_SW = (D.f[dMM0])[ksw ]; + f1_SE = (D.f[dPM0])[kse ]; + f1_NW = (D.f[dMP0])[knw ]; + f1_TE = (D.f[dP0P])[kte ]; + f1_BW = (D.f[dM0M])[kbw ]; + f1_BE = (D.f[dP0M])[kbe ]; + f1_TW = (D.f[dM0P])[ktw ]; + f1_TN = (D.f[d0PP])[ktn ]; + f1_BS = (D.f[d0MM])[kbs ]; + f1_BN = (D.f[d0PM])[kbn ]; + f1_TS = (D.f[d0MP])[kts ]; + f1_ZERO = (D.f[d000])[kzero]; + f1_TNE = (D.f[dPPP])[ktne ]; + f1_TSW = (D.f[dMMP])[ktsw ]; + f1_TSE = (D.f[dPMP])[ktse ]; + f1_TNW = (D.f[dMPP])[ktnw ]; + f1_BNE = (D.f[dPPM])[kbne ]; + f1_BSW = (D.f[dMMM])[kbsw ]; + f1_BSE = (D.f[dPMM])[kbse ]; + f1_BNW = (D.f[dMPM])[kbnw ]; + //f1_W = (D.f[dP00])[ke ]; + //f1_E = (D.f[dM00])[kw ]; + //f1_S = (D.f[d0P0])[kn ]; + //f1_N = (D.f[d0M0])[ks ]; + //f1_B = (D.f[d00P])[kt ]; + //f1_T = (D.f[d00M])[kb ]; + //f1_SW = (D.f[dPP0])[kne ]; + //f1_NE = (D.f[dMM0])[ksw ]; + //f1_NW = (D.f[dPM0])[kse ]; + //f1_SE = (D.f[dMP0])[knw ]; + //f1_BW = (D.f[dP0P])[kte ]; + //f1_TE = (D.f[dM0M])[kbw ]; + //f1_TW = (D.f[dP0M])[kbe ]; + //f1_BE = (D.f[dM0P])[ktw ]; + //f1_BS = (D.f[d0PP])[ktn ]; + //f1_TN = (D.f[d0MM])[kbs ]; + //f1_TS = (D.f[d0PM])[kbn ]; + //f1_BN = (D.f[d0MP])[kts ]; + //f1_ZERO = (D.f[d000])[kzero]; + //f1_BSW = (D.f[dPPP])[ktne ]; + //f1_BNE = (D.f[dMMP])[ktsw ]; + //f1_BNW = (D.f[dPMP])[ktse ]; + //f1_BSE = (D.f[dMPP])[ktnw ]; + //f1_TSW = (D.f[dPPM])[kbne ]; + //f1_TNE = (D.f[dMMM])[kbsw ]; + //f1_TNW = (D.f[dPMM])[kbse ]; + //f1_TSE = (D.f[dMPM])[kbnw ]; + ////////////////////////////////////////////////////////////////////////// + real cs = c1o1/sqrt(c3o1); + real csp1 = cs + c1o1; + real csp1Sq = (c1o1 + cs)*(c1o1 + cs); + real relFac = c19o20; // 0.9...1.0 + ////////////////////////////////////////////////////////////////////////// + // For adaption: + // Pressure limits with rho0 = 1: + // 2.2e-10 ~ 0.94 dB + // 6.2e-10 ~ 9.9 dB + // 6.2e-9 ~ 29.9 dB + // 2.0e-7 ~ 60.1 dB /Vel + // 2.0e-5 ~ 100.1 dB /press + real uSlimit = c0p0000002; + ////////////////////////////////////////////////////////////////////////// + real VX = c0o1; + real VY = c0o1; + real VZ = vz0[k]; + ////////////////////////////////////////////////////////////////////////// + real temp = f1_ZERO + f1_E + f1_W + f1_N + f1_S + f1_NE + f1_SW + f1_SE + f1_NW + c2o1*(f1_B + f1_BE + f1_BW + f1_BN + f1_BS + f1_BNE + f1_BSE + f1_BSW + f1_BNW); + //real temp = f1_ZERO + f1_E + f1_W + f1_N + f1_S + f1_NE + f1_SW + f1_SE + f1_NW + two*(f1_T + f1_TE + f1_TW + f1_TN + f1_TS + f1_TNE + f1_TSE + f1_TSW + f1_TNW); + ////real temp2= c1mcsSq + two*VZ - two*temp; + real vs_z; + //if (t < 5) + //{ + // vs_z = zero; + //} + //else + //{ + vs_z = relFac * (cs-VZ) * ( sqrt(csp1Sq - c2o1*VZ - c2o1*temp) - csp1 ); //old = relFac * cs * ( sqrt(csp1Sq - two*VZ - two*temp) - csp1 ); + //} + + // 3. Adapt Speed: + real tempDeltaV = deltaVz0[k]; + real dv = tempDeltaV + vs_z; + + if( dv > uSlimit) { + VZ += dv - uSlimit; + tempDeltaV -= uSlimit; + } + else if( dv < -uSlimit) { + VZ += dv + uSlimit; + tempDeltaV += uSlimit; + } + else { + tempDeltaV = -vs_z; + } + + //VZ = vz0[k]+vs_z; + // 4. Set unknown distributions: + //f1_B = f1_T - c4o9 * VZ; + //f1_BW = f1_TE - c1o9 * (VX + VZ); + //f1_BE = f1_TW + c1o9 * (VX - VZ); + //f1_BS = f1_TN - c1o9 * (VY + VZ); + //f1_BN = f1_TS + c1o9 * (VY - VZ); + //f1_BSW = f1_TNE - c1o36 * (VX + VY + VZ); + //f1_BNW = f1_TSE - c1o36 * (VX - VY + VZ); + //f1_BNE = f1_TSW + c1o36 * (VX + VY - VZ); + //f1_BSE = f1_TNW + c1o36 * (VX - VY - VZ); + + f1_T = f1_B + c4o9 * VZ; + f1_TE = f1_BW + c1o9 * (VX + VZ); + f1_TW = f1_BE - c1o9 * (VX - VZ); + f1_TN = f1_BS + c1o9 * (VY + VZ); + f1_TS = f1_BN - c1o9 * (VY - VZ); + f1_TNE = f1_BSW + c1o36 * (VX + VY + VZ); + f1_TSE = f1_BNW + c1o36 * (VX - VY + VZ); + f1_TSW = f1_BNE - c1o36 * (VX + VY - VZ); + f1_TNW = f1_BSE - c1o36 * (VX - VY - VZ); + + deltaVz0[k] = tempDeltaV; + (D.f[d00P])[kt ] = f1_T ; + (D.f[dP0P])[kte ] = f1_TE ; + (D.f[dM0P])[ktw ] = f1_TW ; + (D.f[d0PP])[ktn ] = f1_TN ; + (D.f[d0MP])[kts ] = f1_TS ; + (D.f[dPPP])[ktne ] = f1_TNE; + (D.f[dMMP])[ktsw ] = f1_TSW; + (D.f[dPMP])[ktse ] = f1_TSE; + (D.f[dMPP])[ktnw ] = f1_TNW; + + //(D.f[d00M])[kb ] = f1_B ; + //(D.f[dM0M])[kbw ] = f1_BW ; + //(D.f[dP0M])[kbe ] = f1_BE ; + //(D.f[d0MM])[kbs ] = f1_BS ; + //(D.f[d0PM])[kbn ] = f1_BN ; + //(D.f[dPPM])[kbne ] = f1_BNE ; + //(D.f[dMMM])[kbsw ] = f1_BSW ; + //(D.f[dPMM])[kbse ] = f1_BSE ; + //(D.f[dMPM])[kbnw ] = f1_BNW ; + + + //(D.f[d00P])[kt ] = f1_B ; + //(D.f[dP0P])[kte ] = f1_BW ; + //(D.f[dM0P])[ktw ] = f1_BE ; + //(D.f[d0PP])[ktn ] = f1_BS ; + //(D.f[d0MP])[kts ] = f1_BN ; + //(D.f[dPPP])[ktne ] = f1_BSW; + //(D.f[dMMP])[ktsw ] = f1_BNE; + //(D.f[dPMP])[ktse ] = f1_BNW; + //(D.f[dMPP])[ktnw ] = f1_BSE; + + //(D.f[dP00])[ke ] = f1_W -c2over27*drho1; + //(D.f[dM00])[kw ] = f1_E -c2over27*drho1; + //(D.f[d0P0])[kn ] = f1_S -c2over27*drho1; + //(D.f[d0M0])[ks ] = f1_N -c2over27*drho1; + //(D.f[d00P])[kt ] = f1_B -c2over27*drho1; + //(D.f[d00M])[kb ] = f1_T -c2over27*drho1; + //(D.f[dPP0])[kne ] = f1_SW -c1over54*drho1; + //(D.f[dMM0])[ksw ] = f1_NE -c1over54*drho1; + //(D.f[dPM0])[kse ] = f1_NW -c1over54*drho1; + //(D.f[dMP0])[knw ] = f1_SE -c1over54*drho1; + //(D.f[dP0P])[kte ] = f1_BW -c1over54*drho1; + //(D.f[dM0M])[kbw ] = f1_TE -c1over54*drho1; + //(D.f[dP0M])[kbe ] = f1_TW -c1over54*drho1; + //(D.f[dM0P])[ktw ] = f1_BE -c1over54*drho1; + //(D.f[d0PP])[ktn ] = f1_BS -c1over54*drho1; + //(D.f[d0MM])[kbs ] = f1_TN -c1over54*drho1; + //(D.f[d0PM])[kbn ] = f1_TS -c1over54*drho1; + //(D.f[d0MP])[kts ] = f1_BN -c1over54*drho1; + //(D.f[d000])[kzero] = f1_ZERO-c8over27*drho1; + //(D.f[dPPP])[ktne ] = f1_BSW -c1over216*drho1; + //(D.f[dMMP])[ktsw ] = f1_BNE -c1over216*drho1; + //(D.f[dPMP])[ktse ] = f1_BNW -c1over216*drho1; + //(D.f[dMPP])[ktnw ] = f1_BSE -c1over216*drho1; + //(D.f[dPPM])[kbne ] = f1_TSW -c1over216*drho1; + //(D.f[dMMM])[kbsw ] = f1_TNE -c1over216*drho1; + //(D.f[dPMM])[kbse ] = f1_TNW -c1over216*drho1; + //(D.f[dMPM])[kbnw ] = f1_TSE -c1over216*drho1; + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + diff --git a/src/gpu/core/GPU/SetForcing27.cu b/src/gpu/core/GPU/SetForcing27.cu new file mode 100644 index 0000000000000000000000000000000000000000..d356084fa0d7f1fc7afb94b784c1b45206a9bf98 --- /dev/null +++ b/src/gpu/core/GPU/SetForcing27.cu @@ -0,0 +1,174 @@ +/* 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 GetVeloforForcing27( real* DD, + int* bcIndex, + int nonAtBC, + real* Vx, + real* Vy, + real* Vz, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + Distributions27 D; + if (isEvenTimestep==false) + { + 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]; + } + //////////////////////////////////////////////////////////////////////////////// + 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 < nonAtBC) + { + //////////////////////////////////////////////////////////////////////////////// + //index + unsigned int KQK = bcIndex[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 mfcbb = (D.f[dP00])[ke ]; + real mfabb = (D.f[dM00])[kw ]; + real mfbcb = (D.f[d0P0])[kn ]; + real mfbab = (D.f[d0M0])[ks ]; + real mfbbc = (D.f[d00P])[kt ]; + real mfbba = (D.f[d00M])[kb ]; + real mfccb = (D.f[dPP0])[kne ]; + real mfaab = (D.f[dMM0])[ksw ]; + real mfcab = (D.f[dPM0])[kse ]; + real mfacb = (D.f[dMP0])[knw ]; + real mfcbc = (D.f[dP0P])[kte ]; + real mfaba = (D.f[dM0M])[kbw ]; + real mfcba = (D.f[dP0M])[kbe ]; + real mfabc = (D.f[dM0P])[ktw ]; + real mfbcc = (D.f[d0PP])[ktn ]; + real mfbaa = (D.f[d0MM])[kbs ]; + real mfbca = (D.f[d0PM])[kbn ]; + real mfbac = (D.f[d0MP])[kts ]; + real mfbbb = (D.f[d000])[kzero]; + real mfccc = (D.f[dPPP])[ktne ]; + real mfaac = (D.f[dMMP])[ktsw ]; + real mfcac = (D.f[dPMP])[ktse ]; + real mfacc = (D.f[dMPP])[ktnw ]; + real mfcca = (D.f[dPPM])[kbne ]; + real mfaaa = (D.f[dMMM])[kbsw ]; + real mfcaa = (D.f[dPMM])[kbse ]; + real mfaca = (D.f[dMPM])[kbnw ]; + //////////////////////////////////////////////////////////////////////////////////// + real rho = (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + + mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb + + mfabb+mfcbb + mfbab+mfbcb + mfbba+mfbbc + mfbbb + c1o1);//!!!!Achtung + one + //////////////////////////////////////////////////////////////////////////////////// + real vx =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + + (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + + (mfcbb-mfabb))/ rho; + real vy =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + + (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + + (mfbcb-mfbab)) / rho; + real vz =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + + (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + + (mfbbc-mfbba)) / rho; + //////////////////////////////////////////////////////////////////////////////////// + Vx[k] = vx; + Vy[k] = vy; + Vz[k] = vz; + //////////////////////////////////////////////////////////////////////////////////// + } +} + diff --git a/src/gpu/VirtualFluids_GPU/GPU/SlipBCs27.cu b/src/gpu/core/GPU/SlipBCs27.cu similarity index 62% rename from src/gpu/VirtualFluids_GPU/GPU/SlipBCs27.cu rename to src/gpu/core/GPU/SlipBCs27.cu index ecd7427665427376aaee290e918fd5c723576f73..2ef15989422a7eccf15c5eb931115282c8794a64 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/SlipBCs27.cu +++ b/src/gpu/core/GPU/SlipBCs27.cu @@ -32,7 +32,6 @@ //====================================================================================== #include "LBM/LB.h" #include "lbm/constants/D3Q27.h" -#include "Kernel/Utilities/DistributionHelper.cuh" #include "basics/constants/NumericConstants.h" #include "LBM/GPUHelperFunctions/KernelUtilities.h" @@ -74,32 +73,32 @@ __global__ void QSlipDevice27( *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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes]; + 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]; @@ -131,37 +130,37 @@ __global__ void QSlipDevice27( unsigned int ktne = KQK; unsigned int kbsw = neighborZ[ksw]; //////////////////////////////////////////////////////////////////////////////// - real f_W = (D.f[DIR_P00])[ke ]; - real f_E = (D.f[DIR_M00])[kw ]; - real f_S = (D.f[DIR_0P0])[kn ]; - real f_N = (D.f[DIR_0M0])[ks ]; - real f_B = (D.f[DIR_00P])[kt ]; - real f_T = (D.f[DIR_00M])[kb ]; - real f_SW = (D.f[DIR_PP0])[kne ]; - real f_NE = (D.f[DIR_MM0])[ksw ]; - real f_NW = (D.f[DIR_PM0])[kse ]; - real f_SE = (D.f[DIR_MP0])[knw ]; - real f_BW = (D.f[DIR_P0P])[kte ]; - real f_TE = (D.f[DIR_M0M])[kbw ]; - real f_TW = (D.f[DIR_P0M])[kbe ]; - real f_BE = (D.f[DIR_M0P])[ktw ]; - real f_BS = (D.f[DIR_0PP])[ktn ]; - real f_TN = (D.f[DIR_0MM])[kbs ]; - real f_TS = (D.f[DIR_0PM])[kbn ]; - real f_BN = (D.f[DIR_0MP])[kts ]; - real f_BSW = (D.f[DIR_PPP])[ktne ]; - real f_BNE = (D.f[DIR_MMP])[ktsw ]; - real f_BNW = (D.f[DIR_PMP])[ktse ]; - real f_BSE = (D.f[DIR_MPP])[ktnw ]; - real f_TSW = (D.f[DIR_PPM])[kbne ]; - real f_TNE = (D.f[DIR_MMM])[kbsw ]; - real f_TNW = (D.f[DIR_PMM])[kbse ]; - real f_TSE = (D.f[DIR_MPM])[kbnw ]; + 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, 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 + ((D.f[DIR_000])[kzero]); + 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)) + @@ -183,7 +182,7 @@ __global__ void QSlipDevice27( D = vf::gpu::getDistributionReferences27(DD, numberOfLBnodes, !isEvenTimestep); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Test - //(D.f[DIR_000])[k]=c1o10; + //(D.f[d000])[k]=c1o10; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// real fac = c1o1;//c99o100; real VeloX = fac*vx1; @@ -201,8 +200,8 @@ __global__ void QSlipDevice27( VeloZ = fac*vx3; x = true; feq=c2o27* (drho+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); - (D.f[DIR_M00])[kw]=(c1o1-q)/(c1o1+q)*(f_E-feq*om1)/(c1o1-om1)+(q*(f_E+f_W)-c6o1*c2o27*( VeloX ))/(c1o1+q); - //(D.f[DIR_M00])[kw]=zero; + (D.f[dM00])[kw]=(c1o1-q)/(c1o1+q)*(f_E-feq*om1)/(c1o1-om1)+(q*(f_E+f_W)-c6o1*c2o27*( VeloX ))/(c1o1+q); + //(D.f[dM00])[kw]=zero; } q = q_dirW[k]; @@ -213,8 +212,8 @@ __global__ void QSlipDevice27( VeloZ = fac*vx3; x = true; feq=c2o27* (drho+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); - (D.f[DIR_P00])[ke]=(c1o1-q)/(c1o1+q)*(f_W-feq*om1)/(c1o1-om1)+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX ))/(c1o1+q); - //(D.f[DIR_P00])[ke]=zero; + (D.f[dP00])[ke]=(c1o1-q)/(c1o1+q)*(f_W-feq*om1)/(c1o1-om1)+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX ))/(c1o1+q); + //(D.f[dP00])[ke]=zero; } q = q_dirN[k]; @@ -225,8 +224,8 @@ __global__ void QSlipDevice27( VeloZ = fac*vx3; y = true; feq=c2o27* (drho+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); - (D.f[DIR_0M0])[ks]=(c1o1-q)/(c1o1+q)*(f_N-feq*om1)/(c1o1-om1)+(q*(f_N+f_S)-c6o1*c2o27*( VeloY ))/(c1o1+q); - //(D.f[DIR_0M0])[ks]=zero; + (D.f[d0M0])[ks]=(c1o1-q)/(c1o1+q)*(f_N-feq*om1)/(c1o1-om1)+(q*(f_N+f_S)-c6o1*c2o27*( VeloY ))/(c1o1+q); + //(D.f[d0M0])[ks]=zero; } q = q_dirS[k]; @@ -237,8 +236,8 @@ __global__ void QSlipDevice27( VeloZ = fac*vx3; y = true; feq=c2o27* (drho+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); - (D.f[DIR_0P0])[kn]=(c1o1-q)/(c1o1+q)*(f_S-feq*om1)/(c1o1-om1)+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY ))/(c1o1+q); - //(D.f[DIR_0P0])[kn]=zero; + (D.f[d0P0])[kn]=(c1o1-q)/(c1o1+q)*(f_S-feq*om1)/(c1o1-om1)+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY ))/(c1o1+q); + //(D.f[d0P0])[kn]=zero; } q = q_dirT[k]; @@ -249,8 +248,8 @@ __global__ void QSlipDevice27( VeloZ = c0o1; z = true; feq=c2o27* (drho+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); - (D.f[DIR_00M])[kb]=(c1o1-q)/(c1o1+q)*(f_T-feq*om1)/(c1o1-om1)+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ ))/(c1o1+q); - //(D.f[DIR_00M])[kb]=one; + (D.f[d00M])[kb]=(c1o1-q)/(c1o1+q)*(f_T-feq*om1)/(c1o1-om1)+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ ))/(c1o1+q); + //(D.f[d00M])[kb]=one; } q = q_dirB[k]; @@ -261,8 +260,8 @@ __global__ void QSlipDevice27( VeloZ = c0o1; z = true; feq=c2o27* (drho+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); - (D.f[DIR_00P])[kt]=(c1o1-q)/(c1o1+q)*(f_B-feq*om1)/(c1o1-om1)+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ ))/(c1o1+q); - //(D.f[DIR_00P])[kt]=zero; + (D.f[d00P])[kt]=(c1o1-q)/(c1o1+q)*(f_B-feq*om1)/(c1o1-om1)+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ ))/(c1o1+q); + //(D.f[d00P])[kt]=zero; } q = q_dirNE[k]; @@ -274,8 +273,8 @@ __global__ void QSlipDevice27( if (x == true) VeloX = c0o1; if (y == true) VeloY = c0o1; feq=c1o54* (drho+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); - (D.f[DIR_MM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-feq*om1)/(c1o1-om1)+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q); - //(D.f[DIR_MM0])[ksw]=zero; + (D.f[dMM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-feq*om1)/(c1o1-om1)+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q); + //(D.f[dMM0])[ksw]=zero; } q = q_dirSW[k]; @@ -287,8 +286,8 @@ __global__ void QSlipDevice27( if (x == true) VeloX = c0o1; if (y == true) VeloY = c0o1; feq=c1o54* (drho+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); - (D.f[DIR_PP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-feq*om1)/(c1o1-om1)+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q); - //(D.f[DIR_PP0])[kne]=zero; + (D.f[dPP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-feq*om1)/(c1o1-om1)+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q); + //(D.f[dPP0])[kne]=zero; } q = q_dirSE[k]; @@ -300,8 +299,8 @@ __global__ void QSlipDevice27( if (x == true) VeloX = c0o1; if (y == true) VeloY = c0o1; feq=c1o54* (drho+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); - (D.f[DIR_MP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-feq*om1)/(c1o1-om1)+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q); - //(D.f[DIR_MP0])[knw]=zero; + (D.f[dMP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-feq*om1)/(c1o1-om1)+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q); + //(D.f[dMP0])[knw]=zero; } q = q_dirNW[k]; @@ -313,8 +312,8 @@ __global__ void QSlipDevice27( if (x == true) VeloX = c0o1; if (y == true) VeloY = c0o1; feq=c1o54* (drho+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); - (D.f[DIR_PM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-feq*om1)/(c1o1-om1)+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q); - //(D.f[DIR_PM0])[kse]=zero; + (D.f[dPM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-feq*om1)/(c1o1-om1)+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q); + //(D.f[dPM0])[kse]=zero; } q = q_dirTE[k]; @@ -326,8 +325,8 @@ __global__ void QSlipDevice27( if (x == true) VeloX = c0o1; if (z == true) VeloZ = c0o1; feq=c1o54* (drho+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); - (D.f[DIR_M0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-feq*om1)/(c1o1-om1)+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q); - //(D.f[DIR_M0M])[kbw]=zero; + (D.f[dM0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-feq*om1)/(c1o1-om1)+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q); + //(D.f[dM0M])[kbw]=zero; } q = q_dirBW[k]; @@ -339,8 +338,8 @@ __global__ void QSlipDevice27( if (x == true) VeloX = c0o1; if (z == true) VeloZ = c0o1; feq=c1o54* (drho+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); - (D.f[DIR_P0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-feq*om1)/(c1o1-om1)+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q); - //(D.f[DIR_P0P])[kte]=zero; + (D.f[dP0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-feq*om1)/(c1o1-om1)+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q); + //(D.f[dP0P])[kte]=zero; } q = q_dirBE[k]; @@ -352,8 +351,8 @@ __global__ void QSlipDevice27( if (x == true) VeloX = c0o1; if (z == true) VeloZ = c0o1; feq=c1o54* (drho+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); - (D.f[DIR_M0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-feq*om1)/(c1o1-om1)+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q); - //(D.f[DIR_M0P])[ktw]=zero; + (D.f[dM0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-feq*om1)/(c1o1-om1)+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q); + //(D.f[dM0P])[ktw]=zero; } q = q_dirTW[k]; @@ -365,8 +364,8 @@ __global__ void QSlipDevice27( if (x == true) VeloX = c0o1; if (z == true) VeloZ = c0o1; feq=c1o54* (drho+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); - (D.f[DIR_P0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-feq*om1)/(c1o1-om1)+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q); - //(D.f[DIR_P0M])[kbe]=zero; + (D.f[dP0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-feq*om1)/(c1o1-om1)+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q); + //(D.f[dP0M])[kbe]=zero; } q = q_dirTN[k]; @@ -378,8 +377,8 @@ __global__ void QSlipDevice27( if (y == true) VeloY = c0o1; if (z == true) VeloZ = c0o1; feq=c1o54* (drho+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); - (D.f[DIR_0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-feq*om1)/(c1o1-om1)+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q); - //(D.f[DIR_0MM])[kbs]=zero; + (D.f[d0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-feq*om1)/(c1o1-om1)+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q); + //(D.f[d0MM])[kbs]=zero; } q = q_dirBS[k]; @@ -391,8 +390,8 @@ __global__ void QSlipDevice27( if (y == true) VeloY = c0o1; if (z == true) VeloZ = c0o1; feq=c1o54* (drho+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); - (D.f[DIR_0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-feq*om1)/(c1o1-om1)+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q); - //(D.f[DIR_0PP])[ktn]=zero; + (D.f[d0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-feq*om1)/(c1o1-om1)+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q); + //(D.f[d0PP])[ktn]=zero; } q = q_dirBN[k]; @@ -404,8 +403,8 @@ __global__ void QSlipDevice27( if (y == true) VeloY = c0o1; if (z == true) VeloZ = c0o1; feq=c1o54* (drho+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); - (D.f[DIR_0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-feq*om1)/(c1o1-om1)+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q); - //(D.f[DIR_0MP])[kts]=zero; + (D.f[d0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-feq*om1)/(c1o1-om1)+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q); + //(D.f[d0MP])[kts]=zero; } q = q_dirTS[k]; @@ -417,8 +416,8 @@ __global__ void QSlipDevice27( if (y == true) VeloY = c0o1; if (z == true) VeloZ = c0o1; feq=c1o54* (drho+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); - (D.f[DIR_0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-feq*om1)/(c1o1-om1)+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q); - //(D.f[DIR_0PM])[kbn]=zero; + (D.f[d0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-feq*om1)/(c1o1-om1)+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q); + //(D.f[d0PM])[kbn]=zero; } q = q_dirTNE[k]; @@ -431,8 +430,8 @@ __global__ void QSlipDevice27( if (y == true) VeloY = c0o1; if (z == true) VeloZ = c0o1; feq=c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); - (D.f[DIR_MMM])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-feq*om1)/(c1o1-om1)+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q); - //(D.f[DIR_MMM])[kbsw]=zero; + (D.f[dMMM])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-feq*om1)/(c1o1-om1)+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q); + //(D.f[dMMM])[kbsw]=zero; } q = q_dirBSW[k]; @@ -445,8 +444,8 @@ __global__ void QSlipDevice27( if (y == true) VeloY = c0o1; if (z == true) VeloZ = c0o1; feq=c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); - (D.f[DIR_PPP])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-feq*om1)/(c1o1-om1)+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q); - //(D.f[DIR_PPP])[ktne]=zero; + (D.f[dPPP])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-feq*om1)/(c1o1-om1)+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q); + //(D.f[dPPP])[ktne]=zero; } q = q_dirBNE[k]; @@ -459,8 +458,8 @@ __global__ void QSlipDevice27( if (y == true) VeloY = c0o1; if (z == true) VeloZ = c0o1; feq=c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); - (D.f[DIR_MMP])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-feq*om1)/(c1o1-om1)+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q); - //(D.f[DIR_MMP])[ktsw]=zero; + (D.f[dMMP])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-feq*om1)/(c1o1-om1)+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q); + //(D.f[dMMP])[ktsw]=zero; } q = q_dirTSW[k]; @@ -473,8 +472,8 @@ __global__ void QSlipDevice27( if (y == true) VeloY = c0o1; if (z == true) VeloZ = c0o1; feq=c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); - (D.f[DIR_PPM])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-feq*om1)/(c1o1-om1)+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q); - //(D.f[DIR_PPM])[kbne]=zero; + (D.f[dPPM])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-feq*om1)/(c1o1-om1)+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q); + //(D.f[dPPM])[kbne]=zero; } q = q_dirTSE[k]; @@ -487,8 +486,8 @@ __global__ void QSlipDevice27( if (y == true) VeloY = c0o1; if (z == true) VeloZ = c0o1; feq=c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); - (D.f[DIR_MPM])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-feq*om1)/(c1o1-om1)+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q); - //(D.f[DIR_MPM])[kbnw]=zero; + (D.f[dMPM])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-feq*om1)/(c1o1-om1)+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q); + //(D.f[dMPM])[kbnw]=zero; } q = q_dirBNW[k]; @@ -501,8 +500,8 @@ __global__ void QSlipDevice27( if (y == true) VeloY = c0o1; if (z == true) VeloZ = c0o1; feq=c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); - (D.f[DIR_PMP])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-feq*om1)/(c1o1-om1)+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q); - //(D.f[DIR_PMP])[ktse]=zero; + (D.f[dPMP])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-feq*om1)/(c1o1-om1)+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q); + //(D.f[dPMP])[ktse]=zero; } q = q_dirBSE[k]; @@ -515,8 +514,8 @@ __global__ void QSlipDevice27( if (y == true) VeloY = c0o1; if (z == true) VeloZ = c0o1; feq=c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); - (D.f[DIR_MPP])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-feq*om1)/(c1o1-om1)+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q); - //(D.f[DIR_MPP])[ktnw]=zero; + (D.f[dMPP])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-feq*om1)/(c1o1-om1)+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q); + //(D.f[dMPP])[ktnw]=zero; } q = q_dirTNW[k]; @@ -529,8 +528,8 @@ __global__ void QSlipDevice27( if (y == true) VeloY = c0o1; if (z == true) VeloZ = c0o1; feq=c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); - (D.f[DIR_PMM])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-feq*om1)/(c1o1-om1)+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q); - //(D.f[DIR_PMM])[kbse]=zero; + (D.f[dPMM])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-feq*om1)/(c1o1-om1)+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q); + //(D.f[dPMM])[kbse]=zero; } } } @@ -645,39 +644,39 @@ __global__ void QSlipDeviceComp27( //////////////////////////////////////////////////////////////////////////////// //! - Set local distributions //! - real f_W = (dist.f[DIR_P00])[ke ]; - real f_E = (dist.f[DIR_M00])[kw ]; - real f_S = (dist.f[DIR_0P0])[kn ]; - real f_N = (dist.f[DIR_0M0])[ks ]; - real f_B = (dist.f[DIR_00P])[kt ]; - real f_T = (dist.f[DIR_00M])[kb ]; - real f_SW = (dist.f[DIR_PP0])[kne ]; - real f_NE = (dist.f[DIR_MM0])[ksw ]; - real f_NW = (dist.f[DIR_PM0])[kse ]; - real f_SE = (dist.f[DIR_MP0])[knw ]; - real f_BW = (dist.f[DIR_P0P])[kte ]; - real f_TE = (dist.f[DIR_M0M])[kbw ]; - real f_TW = (dist.f[DIR_P0M])[kbe ]; - real f_BE = (dist.f[DIR_M0P])[ktw ]; - real f_BS = (dist.f[DIR_0PP])[ktn ]; - real f_TN = (dist.f[DIR_0MM])[kbs ]; - real f_TS = (dist.f[DIR_0PM])[kbn ]; - real f_BN = (dist.f[DIR_0MP])[kts ]; - real f_BSW = (dist.f[DIR_PPP])[ktne ]; - real f_BNE = (dist.f[DIR_MMP])[ktsw ]; - real f_BNW = (dist.f[DIR_PMP])[ktse ]; - real f_BSE = (dist.f[DIR_MPP])[ktnw ]; - real f_TSW = (dist.f[DIR_PPM])[kbne ]; - real f_TNE = (dist.f[DIR_MMM])[kbsw ]; - real f_TNW = (dist.f[DIR_PMM])[kbse ]; - real f_TSE = (dist.f[DIR_MPM])[kbnw ]; + real f_W = (dist.f[dP00])[ke ]; + real f_E = (dist.f[dM00])[kw ]; + real f_S = (dist.f[d0P0])[kn ]; + real f_N = (dist.f[d0M0])[ks ]; + real f_B = (dist.f[d00P])[kt ]; + real f_T = (dist.f[d00M])[kb ]; + real f_SW = (dist.f[dPP0])[kne ]; + real f_NE = (dist.f[dMM0])[ksw ]; + real f_NW = (dist.f[dPM0])[kse ]; + real f_SE = (dist.f[dMP0])[knw ]; + real f_BW = (dist.f[dP0P])[kte ]; + real f_TE = (dist.f[dM0M])[kbw ]; + real f_TW = (dist.f[dP0M])[kbe ]; + real f_BE = (dist.f[dM0P])[ktw ]; + real f_BS = (dist.f[d0PP])[ktn ]; + real f_TN = (dist.f[d0MM])[kbs ]; + real f_TS = (dist.f[d0PM])[kbn ]; + real f_BN = (dist.f[d0MP])[kts ]; + real f_BSW = (dist.f[dPPP])[ktne ]; + real f_BNE = (dist.f[dMMP])[ktsw ]; + real f_BNW = (dist.f[dPMP])[ktse ]; + real f_BSE = (dist.f[dMPP])[ktnw ]; + real f_TSW = (dist.f[dPPM])[kbne ]; + real f_TNE = (dist.f[dMMM])[kbsw ]; + real f_TNW = (dist.f[dPMM])[kbse ]; + real f_TSE = (dist.f[dMPM])[kbnw ]; //////////////////////////////////////////////////////////////////////////////// //! - Calculate macroscopic quantities //! real 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 + ((dist.f[DIR_000])[kzero]); + f_T + f_B + f_N + f_S + f_E + f_W + ((dist.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)) + @@ -715,7 +714,7 @@ __global__ void QSlipDeviceComp27( bool y = false; bool z = false; - q = (subgridD.q[DIR_P00])[nodeIndex]; + q = (subgridD.q[dP00])[nodeIndex]; if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one { VeloX = c0o1; @@ -724,10 +723,10 @@ __global__ void QSlipDeviceComp27( velocityLB = vx1; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = VeloX; - (dist.f[DIR_M00])[kw] = getInterpolatedDistributionForVeloBC(q, f_E, f_W, feq, omega, velocityBC, c2o27); + (dist.f[dM00])[kw] = getInterpolatedDistributionForVeloBC(q, f_E, f_W, feq, omega, velocityBC, c2o27); } - q = (subgridD.q[DIR_M00])[nodeIndex]; + q = (subgridD.q[dM00])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = c0o1; @@ -736,10 +735,10 @@ __global__ void QSlipDeviceComp27( velocityLB = -vx1; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = -VeloX; - (dist.f[DIR_P00])[ke] = getInterpolatedDistributionForVeloBC(q, f_W, f_E, feq, omega, velocityBC, c2o27); + (dist.f[dP00])[ke] = getInterpolatedDistributionForVeloBC(q, f_W, f_E, feq, omega, velocityBC, c2o27); } - q = (subgridD.q[DIR_0P0])[nodeIndex]; + q = (subgridD.q[d0P0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = c0o1; @@ -748,10 +747,10 @@ __global__ void QSlipDeviceComp27( velocityLB = vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = VeloY; - (dist.f[DIR_0M0])[ks] = getInterpolatedDistributionForVeloBC(q, f_N, f_S, feq, omega, velocityBC, c2o27); + (dist.f[d0M0])[ks] = getInterpolatedDistributionForVeloBC(q, f_N, f_S, feq, omega, velocityBC, c2o27); } - q = (subgridD.q[DIR_0M0])[nodeIndex]; + q = (subgridD.q[d0M0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = c0o1; @@ -760,10 +759,10 @@ __global__ void QSlipDeviceComp27( velocityLB = -vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = -VeloY; - (dist.f[DIR_0P0])[kn] = getInterpolatedDistributionForVeloBC(q, f_S, f_N, feq, omega, velocityBC, c2o27); + (dist.f[d0P0])[kn] = getInterpolatedDistributionForVeloBC(q, f_S, f_N, feq, omega, velocityBC, c2o27); } - q = (subgridD.q[DIR_00P])[nodeIndex]; + q = (subgridD.q[d00P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloZ = c0o1; @@ -772,10 +771,10 @@ __global__ void QSlipDeviceComp27( velocityLB = vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = VeloZ; - (dist.f[DIR_00M])[kb] = getInterpolatedDistributionForVeloBC(q, f_T, f_B, feq, omega, velocityBC, c2o27); + (dist.f[d00M])[kb] = getInterpolatedDistributionForVeloBC(q, f_T, f_B, feq, omega, velocityBC, c2o27); } - q = (subgridD.q[DIR_00M])[nodeIndex]; + q = (subgridD.q[d00M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloZ = c0o1; @@ -784,10 +783,10 @@ __global__ void QSlipDeviceComp27( velocityLB = -vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = -VeloZ; - (dist.f[DIR_00P])[kt] = getInterpolatedDistributionForVeloBC(q, f_B, f_T, feq, omega, velocityBC, c2o27); + (dist.f[d00P])[kt] = getInterpolatedDistributionForVeloBC(q, f_B, f_T, feq, omega, velocityBC, c2o27); } - q = (subgridD.q[DIR_PP0])[nodeIndex]; + q = (subgridD.q[dPP0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -798,10 +797,10 @@ __global__ void QSlipDeviceComp27( velocityLB = vx1 + vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloX + VeloY; - (dist.f[DIR_MM0])[ksw] = getInterpolatedDistributionForVeloBC(q, f_NE, f_SW, feq, omega, velocityBC, c1o54); + (dist.f[dMM0])[ksw] = getInterpolatedDistributionForVeloBC(q, f_NE, f_SW, feq, omega, velocityBC, c1o54); } - q = (subgridD.q[DIR_MM0])[nodeIndex]; + q = (subgridD.q[dMM0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -812,10 +811,10 @@ __global__ void QSlipDeviceComp27( velocityLB = -vx1 - vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloX - VeloY; - (dist.f[DIR_PP0])[kne] = getInterpolatedDistributionForVeloBC(q, f_SW, f_NE, feq, omega, velocityBC, c1o54); + (dist.f[dPP0])[kne] = getInterpolatedDistributionForVeloBC(q, f_SW, f_NE, feq, omega, velocityBC, c1o54); } - q = (subgridD.q[DIR_PM0])[nodeIndex]; + q = (subgridD.q[dPM0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -826,10 +825,10 @@ __global__ void QSlipDeviceComp27( velocityLB = vx1 - vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloX - VeloY; - (dist.f[DIR_MP0])[knw] = getInterpolatedDistributionForVeloBC(q, f_SE, f_NW, feq, omega, velocityBC, c1o54); + (dist.f[dMP0])[knw] = getInterpolatedDistributionForVeloBC(q, f_SE, f_NW, feq, omega, velocityBC, c1o54); } - q = (subgridD.q[DIR_MP0])[nodeIndex]; + q = (subgridD.q[dMP0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -840,10 +839,10 @@ __global__ void QSlipDeviceComp27( velocityLB = -vx1 + vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloX + VeloY; - (dist.f[DIR_PM0])[kse] = getInterpolatedDistributionForVeloBC(q, f_NW, f_SE, feq, omega, velocityBC, c1o54); + (dist.f[dPM0])[kse] = getInterpolatedDistributionForVeloBC(q, f_NW, f_SE, feq, omega, velocityBC, c1o54); } - q = (subgridD.q[DIR_P0P])[nodeIndex]; + q = (subgridD.q[dP0P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -854,10 +853,10 @@ __global__ void QSlipDeviceComp27( velocityLB = vx1 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloX + VeloZ; - (dist.f[DIR_M0M])[kbw] = getInterpolatedDistributionForVeloBC(q, f_TE, f_BW, feq, omega, velocityBC, c1o54); + (dist.f[dM0M])[kbw] = getInterpolatedDistributionForVeloBC(q, f_TE, f_BW, feq, omega, velocityBC, c1o54); } - q = (subgridD.q[DIR_M0M])[nodeIndex]; + q = (subgridD.q[dM0M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -868,10 +867,10 @@ __global__ void QSlipDeviceComp27( velocityLB = -vx1 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloX - VeloZ; - (dist.f[DIR_P0P])[kte] = getInterpolatedDistributionForVeloBC(q, f_BW, f_TE, feq, omega, velocityBC, c1o54); + (dist.f[dP0P])[kte] = getInterpolatedDistributionForVeloBC(q, f_BW, f_TE, feq, omega, velocityBC, c1o54); } - q = (subgridD.q[DIR_P0M])[nodeIndex]; + q = (subgridD.q[dP0M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -882,10 +881,10 @@ __global__ void QSlipDeviceComp27( velocityLB = vx1 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloX - VeloZ; - (dist.f[DIR_M0P])[ktw] = getInterpolatedDistributionForVeloBC(q, f_BE, f_TW, feq, omega, velocityBC, c1o54); + (dist.f[dM0P])[ktw] = getInterpolatedDistributionForVeloBC(q, f_BE, f_TW, feq, omega, velocityBC, c1o54); } - q = (subgridD.q[DIR_M0P])[nodeIndex]; + q = (subgridD.q[dM0P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -896,10 +895,10 @@ __global__ void QSlipDeviceComp27( velocityLB = -vx1 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloX + VeloZ; - (dist.f[DIR_P0M])[kbe] = getInterpolatedDistributionForVeloBC(q, f_TW, f_BE, feq, omega, velocityBC, c1o54); + (dist.f[dP0M])[kbe] = getInterpolatedDistributionForVeloBC(q, f_TW, f_BE, feq, omega, velocityBC, c1o54); } - q = (subgridD.q[DIR_0PP])[nodeIndex]; + q = (subgridD.q[d0PP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = slipLength*vx2; @@ -910,10 +909,10 @@ __global__ void QSlipDeviceComp27( velocityLB = vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloY + VeloZ; - (dist.f[DIR_0MM])[kbs] = getInterpolatedDistributionForVeloBC(q, f_TN, f_BS, feq, omega, velocityBC, c1o54); + (dist.f[d0MM])[kbs] = getInterpolatedDistributionForVeloBC(q, f_TN, f_BS, feq, omega, velocityBC, c1o54); } - q = (subgridD.q[DIR_0MM])[nodeIndex]; + q = (subgridD.q[d0MM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = slipLength*vx2; @@ -924,11 +923,11 @@ __global__ void QSlipDeviceComp27( velocityLB = -vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloY - VeloZ; - (dist.f[DIR_0PP])[ktn] = getInterpolatedDistributionForVeloBC(q, f_BS, f_TN, feq, omega, velocityBC, c1o54); + (dist.f[d0PP])[ktn] = getInterpolatedDistributionForVeloBC(q, f_BS, f_TN, feq, omega, velocityBC, c1o54); } - q = (subgridD.q[DIR_0PM])[nodeIndex]; + q = (subgridD.q[d0PM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = slipLength*vx2; @@ -939,10 +938,10 @@ __global__ void QSlipDeviceComp27( velocityLB = vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloY - VeloZ; - (dist.f[DIR_0MP])[kts] = getInterpolatedDistributionForVeloBC(q, f_BN, f_TS, feq, omega, velocityBC, c1o54); + (dist.f[d0MP])[kts] = getInterpolatedDistributionForVeloBC(q, f_BN, f_TS, feq, omega, velocityBC, c1o54); } - q = (subgridD.q[DIR_0MP])[nodeIndex]; + q = (subgridD.q[d0MP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = slipLength*vx2; @@ -953,10 +952,10 @@ __global__ void QSlipDeviceComp27( velocityLB = -vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloY + VeloZ; - (dist.f[DIR_0PM])[kbn] = getInterpolatedDistributionForVeloBC(q, f_TS, f_BN, feq, omega, velocityBC, c1o54); + (dist.f[d0PM])[kbn] = getInterpolatedDistributionForVeloBC(q, f_TS, f_BN, feq, omega, velocityBC, c1o54); } - q = (subgridD.q[DIR_PPP])[nodeIndex]; + q = (subgridD.q[dPPP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -968,10 +967,10 @@ __global__ void QSlipDeviceComp27( velocityLB = vx1 + vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = VeloX + VeloY + VeloZ; - (dist.f[DIR_MMM])[kbsw] = getInterpolatedDistributionForVeloBC(q, f_TNE, f_BSW, feq, omega, velocityBC, c1o216); + (dist.f[dMMM])[kbsw] = getInterpolatedDistributionForVeloBC(q, f_TNE, f_BSW, feq, omega, velocityBC, c1o216); } - q = (subgridD.q[DIR_MMM])[nodeIndex]; + q = (subgridD.q[dMMM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -983,11 +982,11 @@ __global__ void QSlipDeviceComp27( velocityLB = -vx1 - vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = -VeloX - VeloY - VeloZ; - (dist.f[DIR_PPP])[ktne] = getInterpolatedDistributionForVeloBC(q, f_BSW, f_TNE, feq, omega, velocityBC, c1o216); + (dist.f[dPPP])[ktne] = getInterpolatedDistributionForVeloBC(q, f_BSW, f_TNE, feq, omega, velocityBC, c1o216); } - q = (subgridD.q[DIR_PPM])[nodeIndex]; + q = (subgridD.q[dPPM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -999,10 +998,10 @@ __global__ void QSlipDeviceComp27( velocityLB = vx1 + vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = VeloX + VeloY - VeloZ; - (dist.f[DIR_MMP])[ktsw] = getInterpolatedDistributionForVeloBC(q, f_BNE, f_TSW, feq, omega, velocityBC, c1o216); + (dist.f[dMMP])[ktsw] = getInterpolatedDistributionForVeloBC(q, f_BNE, f_TSW, feq, omega, velocityBC, c1o216); } - q = (subgridD.q[DIR_MMP])[nodeIndex]; + q = (subgridD.q[dMMP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1014,10 +1013,10 @@ __global__ void QSlipDeviceComp27( velocityLB = -vx1 - vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = -VeloX - VeloY + VeloZ; - (dist.f[DIR_PPM])[kbne] = getInterpolatedDistributionForVeloBC(q, f_TSW, f_BNE, feq, omega, velocityBC, c1o216); + (dist.f[dPPM])[kbne] = getInterpolatedDistributionForVeloBC(q, f_TSW, f_BNE, feq, omega, velocityBC, c1o216); } - q = (subgridD.q[DIR_PMP])[nodeIndex]; + q = (subgridD.q[dPMP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1029,10 +1028,10 @@ __global__ void QSlipDeviceComp27( velocityLB = vx1 - vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = VeloX - VeloY + VeloZ; - (dist.f[DIR_MPM])[kbnw] = getInterpolatedDistributionForVeloBC(q, f_TSE, f_BNW, feq, omega, velocityBC, c1o216); + (dist.f[dMPM])[kbnw] = getInterpolatedDistributionForVeloBC(q, f_TSE, f_BNW, feq, omega, velocityBC, c1o216); } - q = (subgridD.q[DIR_MPM])[nodeIndex]; + q = (subgridD.q[dMPM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1044,10 +1043,10 @@ __global__ void QSlipDeviceComp27( velocityLB = -vx1 + vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = -VeloX + VeloY - VeloZ; - (dist.f[DIR_PMP])[ktse] = getInterpolatedDistributionForVeloBC(q, f_BNW, f_TSE, feq, omega, velocityBC, c1o216); + (dist.f[dPMP])[ktse] = getInterpolatedDistributionForVeloBC(q, f_BNW, f_TSE, feq, omega, velocityBC, c1o216); } - q = (subgridD.q[DIR_PMM])[nodeIndex]; + q = (subgridD.q[dPMM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1059,10 +1058,10 @@ __global__ void QSlipDeviceComp27( velocityLB = vx1 - vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = VeloX - VeloY - VeloZ; - (dist.f[DIR_MPP])[ktnw] = getInterpolatedDistributionForVeloBC(q, f_BSE, f_TNW, feq, omega, velocityBC, c1o216); + (dist.f[dMPP])[ktnw] = getInterpolatedDistributionForVeloBC(q, f_BSE, f_TNW, feq, omega, velocityBC, c1o216); } - q = (subgridD.q[DIR_MPP])[nodeIndex]; + q = (subgridD.q[dMPP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1074,7 +1073,7 @@ __global__ void QSlipDeviceComp27( velocityLB = -vx1 + vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = -VeloX + VeloY + VeloZ; - (dist.f[DIR_PMM])[kbse] = getInterpolatedDistributionForVeloBC(q, f_TNW, f_BSE, feq, omega, velocityBC, c1o216); + (dist.f[dPMM])[kbse] = getInterpolatedDistributionForVeloBC(q, f_TNW, f_BSE, feq, omega, velocityBC, c1o216); } } } @@ -1174,39 +1173,39 @@ __global__ void BBSlipDeviceComp27( //////////////////////////////////////////////////////////////////////////////// //! - Set local distributions //! - real f_W = (dist.f[DIR_P00])[ke ]; - real f_E = (dist.f[DIR_M00])[kw ]; - real f_S = (dist.f[DIR_0P0])[kn ]; - real f_N = (dist.f[DIR_0M0])[ks ]; - real f_B = (dist.f[DIR_00P])[kt ]; - real f_T = (dist.f[DIR_00M])[kb ]; - real f_SW = (dist.f[DIR_PP0])[kne ]; - real f_NE = (dist.f[DIR_MM0])[ksw ]; - real f_NW = (dist.f[DIR_PM0])[kse ]; - real f_SE = (dist.f[DIR_MP0])[knw ]; - real f_BW = (dist.f[DIR_P0P])[kte ]; - real f_TE = (dist.f[DIR_M0M])[kbw ]; - real f_TW = (dist.f[DIR_P0M])[kbe ]; - real f_BE = (dist.f[DIR_M0P])[ktw ]; - real f_BS = (dist.f[DIR_0PP])[ktn ]; - real f_TN = (dist.f[DIR_0MM])[kbs ]; - real f_TS = (dist.f[DIR_0PM])[kbn ]; - real f_BN = (dist.f[DIR_0MP])[kts ]; - real f_BSW = (dist.f[DIR_PPP])[ktne ]; - real f_BNE = (dist.f[DIR_MMP])[ktsw ]; - real f_BNW = (dist.f[DIR_PMP])[ktse ]; - real f_BSE = (dist.f[DIR_MPP])[ktnw ]; - real f_TSW = (dist.f[DIR_PPM])[kbne ]; - real f_TNE = (dist.f[DIR_MMM])[kbsw ]; - real f_TNW = (dist.f[DIR_PMM])[kbse ]; - real f_TSE = (dist.f[DIR_MPM])[kbnw ]; + real f_W = (dist.f[dP00])[ke ]; + real f_E = (dist.f[dM00])[kw ]; + real f_S = (dist.f[d0P0])[kn ]; + real f_N = (dist.f[d0M0])[ks ]; + real f_B = (dist.f[d00P])[kt ]; + real f_T = (dist.f[d00M])[kb ]; + real f_SW = (dist.f[dPP0])[kne ]; + real f_NE = (dist.f[dMM0])[ksw ]; + real f_NW = (dist.f[dPM0])[kse ]; + real f_SE = (dist.f[dMP0])[knw ]; + real f_BW = (dist.f[dP0P])[kte ]; + real f_TE = (dist.f[dM0M])[kbw ]; + real f_TW = (dist.f[dP0M])[kbe ]; + real f_BE = (dist.f[dM0P])[ktw ]; + real f_BS = (dist.f[d0PP])[ktn ]; + real f_TN = (dist.f[d0MM])[kbs ]; + real f_TS = (dist.f[d0PM])[kbn ]; + real f_BN = (dist.f[d0MP])[kts ]; + real f_BSW = (dist.f[dPPP])[ktne ]; + real f_BNE = (dist.f[dMMP])[ktsw ]; + real f_BNW = (dist.f[dPMP])[ktse ]; + real f_BSE = (dist.f[dMPP])[ktnw ]; + real f_TSW = (dist.f[dPPM])[kbne ]; + real f_TNE = (dist.f[dMMM])[kbsw ]; + real f_TNW = (dist.f[dPMM])[kbse ]; + real f_TSE = (dist.f[dMPM])[kbnw ]; //////////////////////////////////////////////////////////////////////////////// //! - Calculate macroscopic quantities //! real 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 + ((dist.f[DIR_000])[kzero]); + f_T + f_B + f_N + f_S + f_E + f_W + ((dist.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)) + @@ -1244,67 +1243,67 @@ __global__ void BBSlipDeviceComp27( bool y = false; bool z = false; - q = (subgridD.q[DIR_P00])[nodeIndex]; + q = (subgridD.q[dP00])[nodeIndex]; if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one { VeloX = c0o1; x = true; velocityBC = VeloX; - (dist.f[DIR_M00])[kw] = getBounceBackDistributionForVeloBC(f_W, velocityBC, c2o27); + (dist.f[dM00])[kw] = getBounceBackDistributionForVeloBC(f_W, velocityBC, c2o27); } - q = (subgridD.q[DIR_M00])[nodeIndex]; + q = (subgridD.q[dM00])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = c0o1; x = true; velocityBC = -VeloX; - (dist.f[DIR_P00])[ke] = getBounceBackDistributionForVeloBC(f_E, velocityBC, c2o27); + (dist.f[dP00])[ke] = getBounceBackDistributionForVeloBC(f_E, velocityBC, c2o27); } - q = (subgridD.q[DIR_0P0])[nodeIndex]; + q = (subgridD.q[d0P0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = c0o1; y = true; velocityBC = VeloY; - (dist.f[DIR_0M0])[ks] = getBounceBackDistributionForVeloBC(f_S, velocityBC, c2o27); + (dist.f[d0M0])[ks] = getBounceBackDistributionForVeloBC(f_S, velocityBC, c2o27); } - q = (subgridD.q[DIR_0M0])[nodeIndex]; + q = (subgridD.q[d0M0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = c0o1; y = true; velocityBC = -VeloY; - (dist.f[DIR_0P0])[kn] = getBounceBackDistributionForVeloBC(f_N, velocityBC, c2o27); + (dist.f[d0P0])[kn] = getBounceBackDistributionForVeloBC(f_N, velocityBC, c2o27); } - q = (subgridD.q[DIR_00P])[nodeIndex]; + q = (subgridD.q[d00P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloZ = c0o1; z = true; velocityBC = VeloZ; - (dist.f[DIR_00M])[kb] = getBounceBackDistributionForVeloBC(f_B, velocityBC, c2o27); + (dist.f[d00M])[kb] = getBounceBackDistributionForVeloBC(f_B, velocityBC, c2o27); } - q = (subgridD.q[DIR_00M])[nodeIndex]; + q = (subgridD.q[d00M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloZ = c0o1; z = true; velocityBC = -VeloZ; - (dist.f[DIR_00P])[kt] = getBounceBackDistributionForVeloBC(f_T, velocityBC, c2o27); + (dist.f[d00P])[kt] = getBounceBackDistributionForVeloBC(f_T, velocityBC, c2o27); } - q = (subgridD.q[DIR_PP0])[nodeIndex]; + q = (subgridD.q[dPP0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1313,10 +1312,10 @@ __global__ void BBSlipDeviceComp27( if (y == true) VeloY = c0o1; velocityBC = VeloX + VeloY; - (dist.f[DIR_MM0])[ksw] = getBounceBackDistributionForVeloBC(f_SW, velocityBC, c1o54); + (dist.f[dMM0])[ksw] = getBounceBackDistributionForVeloBC(f_SW, velocityBC, c1o54); } - q = (subgridD.q[DIR_MM0])[nodeIndex]; + q = (subgridD.q[dMM0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1325,10 +1324,10 @@ __global__ void BBSlipDeviceComp27( if (y == true) VeloY = c0o1; velocityBC = -VeloX - VeloY; - (dist.f[DIR_PP0])[kne] = getBounceBackDistributionForVeloBC(f_NE, velocityBC, c1o54); + (dist.f[dPP0])[kne] = getBounceBackDistributionForVeloBC(f_NE, velocityBC, c1o54); } - q = (subgridD.q[DIR_PM0])[nodeIndex]; + q = (subgridD.q[dPM0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1337,10 +1336,10 @@ __global__ void BBSlipDeviceComp27( if (y == true) VeloY = c0o1; velocityBC = VeloX - VeloY; - (dist.f[DIR_MP0])[knw] = getBounceBackDistributionForVeloBC(f_NW, velocityBC, c1o54); + (dist.f[dMP0])[knw] = getBounceBackDistributionForVeloBC(f_NW, velocityBC, c1o54); } - q = (subgridD.q[DIR_MP0])[nodeIndex]; + q = (subgridD.q[dMP0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1349,10 +1348,10 @@ __global__ void BBSlipDeviceComp27( if (y == true) VeloY = c0o1; velocityBC = -VeloX + VeloY; - (dist.f[DIR_PM0])[kse] = getBounceBackDistributionForVeloBC(f_SE, velocityBC, c1o54); + (dist.f[dPM0])[kse] = getBounceBackDistributionForVeloBC(f_SE, velocityBC, c1o54); } - q = (subgridD.q[DIR_P0P])[nodeIndex]; + q = (subgridD.q[dP0P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1361,10 +1360,10 @@ __global__ void BBSlipDeviceComp27( if (z == true) VeloZ = c0o1; velocityBC = VeloX + VeloZ; - (dist.f[DIR_M0M])[kbw] = getBounceBackDistributionForVeloBC(f_BW, velocityBC, c1o54); + (dist.f[dM0M])[kbw] = getBounceBackDistributionForVeloBC(f_BW, velocityBC, c1o54); } - q = (subgridD.q[DIR_M0M])[nodeIndex]; + q = (subgridD.q[dM0M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1373,10 +1372,10 @@ __global__ void BBSlipDeviceComp27( if (z == true) VeloZ = c0o1; velocityBC = -VeloX - VeloZ; - (dist.f[DIR_P0P])[kte] = getBounceBackDistributionForVeloBC(f_TE, velocityBC, c1o54); + (dist.f[dP0P])[kte] = getBounceBackDistributionForVeloBC(f_TE, velocityBC, c1o54); } - q = (subgridD.q[DIR_P0M])[nodeIndex]; + q = (subgridD.q[dP0M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1385,10 +1384,10 @@ __global__ void BBSlipDeviceComp27( if (z == true) VeloZ = c0o1; velocityBC = VeloX - VeloZ; - (dist.f[DIR_M0P])[ktw] = getBounceBackDistributionForVeloBC(f_TW, velocityBC, c1o54); + (dist.f[dM0P])[ktw] = getBounceBackDistributionForVeloBC(f_TW, velocityBC, c1o54); } - q = (subgridD.q[DIR_M0P])[nodeIndex]; + q = (subgridD.q[dM0P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1397,10 +1396,10 @@ __global__ void BBSlipDeviceComp27( if (z == true) VeloZ = c0o1; velocityBC = -VeloX + VeloZ; - (dist.f[DIR_P0M])[kbe] = getBounceBackDistributionForVeloBC(f_BE, velocityBC, c1o54); + (dist.f[dP0M])[kbe] = getBounceBackDistributionForVeloBC(f_BE, velocityBC, c1o54); } - q = (subgridD.q[DIR_0PP])[nodeIndex]; + q = (subgridD.q[d0PP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = slipLength*vx2; @@ -1409,10 +1408,10 @@ __global__ void BBSlipDeviceComp27( if (z == true) VeloZ = c0o1; velocityBC = VeloY + VeloZ; - (dist.f[DIR_0MM])[kbs] = getBounceBackDistributionForVeloBC(f_BS, velocityBC, c1o54); + (dist.f[d0MM])[kbs] = getBounceBackDistributionForVeloBC(f_BS, velocityBC, c1o54); } - q = (subgridD.q[DIR_0MM])[nodeIndex]; + q = (subgridD.q[d0MM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = slipLength*vx2; @@ -1421,11 +1420,11 @@ __global__ void BBSlipDeviceComp27( if (z == true) VeloZ = c0o1; velocityBC = -VeloY - VeloZ; - (dist.f[DIR_0PP])[ktn] = getBounceBackDistributionForVeloBC(f_TN, velocityBC, c1o54); + (dist.f[d0PP])[ktn] = getBounceBackDistributionForVeloBC(f_TN, velocityBC, c1o54); } - q = (subgridD.q[DIR_0PM])[nodeIndex]; + q = (subgridD.q[d0PM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = slipLength*vx2; @@ -1434,10 +1433,10 @@ __global__ void BBSlipDeviceComp27( if (z == true) VeloZ = c0o1; velocityBC = VeloY - VeloZ; - (dist.f[DIR_0MP])[kts] = getBounceBackDistributionForVeloBC(f_TS, velocityBC, c1o54); + (dist.f[d0MP])[kts] = getBounceBackDistributionForVeloBC(f_TS, velocityBC, c1o54); } - q = (subgridD.q[DIR_0MP])[nodeIndex]; + q = (subgridD.q[d0MP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = slipLength*vx2; @@ -1446,10 +1445,10 @@ __global__ void BBSlipDeviceComp27( if (z == true) VeloZ = c0o1; velocityBC = -VeloY + VeloZ; - (dist.f[DIR_0PM])[kbn] = getBounceBackDistributionForVeloBC(f_BN, velocityBC, c1o54); + (dist.f[d0PM])[kbn] = getBounceBackDistributionForVeloBC(f_BN, velocityBC, c1o54); } - q = (subgridD.q[DIR_PPP])[nodeIndex]; + q = (subgridD.q[dPPP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1460,10 +1459,10 @@ __global__ void BBSlipDeviceComp27( if (z == true) VeloZ = c0o1; velocityBC = VeloX + VeloY + VeloZ; - (dist.f[DIR_MMM])[kbsw] = getBounceBackDistributionForVeloBC(f_TNE, velocityBC, c1o216); + (dist.f[dMMM])[kbsw] = getBounceBackDistributionForVeloBC(f_TNE, velocityBC, c1o216); } - q = (subgridD.q[DIR_MMM])[nodeIndex]; + q = (subgridD.q[dMMM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1474,11 +1473,11 @@ __global__ void BBSlipDeviceComp27( if (z == true) VeloZ = c0o1; velocityBC = -VeloX - VeloY - VeloZ; - (dist.f[DIR_PPP])[ktne] = getBounceBackDistributionForVeloBC(f_TNE, velocityBC, c1o216); + (dist.f[dPPP])[ktne] = getBounceBackDistributionForVeloBC(f_TNE, velocityBC, c1o216); } - q = (subgridD.q[DIR_PPM])[nodeIndex]; + q = (subgridD.q[dPPM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1489,10 +1488,10 @@ __global__ void BBSlipDeviceComp27( if (z == true) VeloZ = c0o1; velocityBC = VeloX + VeloY - VeloZ; - (dist.f[DIR_MMP])[ktsw] = getBounceBackDistributionForVeloBC(f_TSW, velocityBC, c1o216); + (dist.f[dMMP])[ktsw] = getBounceBackDistributionForVeloBC(f_TSW, velocityBC, c1o216); } - q = (subgridD.q[DIR_MMP])[nodeIndex]; + q = (subgridD.q[dMMP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1503,10 +1502,10 @@ __global__ void BBSlipDeviceComp27( if (z == true) VeloZ = c0o1; velocityBC = -VeloX - VeloY + VeloZ; - (dist.f[DIR_PPM])[kbne] = getBounceBackDistributionForVeloBC(f_BNE, velocityBC, c1o216); + (dist.f[dPPM])[kbne] = getBounceBackDistributionForVeloBC(f_BNE, velocityBC, c1o216); } - q = (subgridD.q[DIR_PMP])[nodeIndex]; + q = (subgridD.q[dPMP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1517,10 +1516,10 @@ __global__ void BBSlipDeviceComp27( if (z == true) VeloZ = c0o1; velocityBC = VeloX - VeloY + VeloZ; - (dist.f[DIR_MPM])[kbnw] = getBounceBackDistributionForVeloBC(f_BNW, velocityBC, c1o216); + (dist.f[dMPM])[kbnw] = getBounceBackDistributionForVeloBC(f_BNW, velocityBC, c1o216); } - q = (subgridD.q[DIR_MPM])[nodeIndex]; + q = (subgridD.q[dMPM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1531,10 +1530,10 @@ __global__ void BBSlipDeviceComp27( if (z == true) VeloZ = c0o1; velocityBC = -VeloX + VeloY - VeloZ; - (dist.f[DIR_PMP])[ktse] = getBounceBackDistributionForVeloBC(f_TSE, velocityBC, c1o216); + (dist.f[dPMP])[ktse] = getBounceBackDistributionForVeloBC(f_TSE, velocityBC, c1o216); } - q = (subgridD.q[DIR_PMM])[nodeIndex]; + q = (subgridD.q[dPMM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1545,10 +1544,10 @@ __global__ void BBSlipDeviceComp27( if (z == true) VeloZ = c0o1; velocityBC = VeloX - VeloY - VeloZ; - (dist.f[DIR_MPP])[ktnw] = getBounceBackDistributionForVeloBC(f_TNW, velocityBC, c1o216); + (dist.f[dMPP])[ktnw] = getBounceBackDistributionForVeloBC(f_TNW, velocityBC, c1o216); } - q = (subgridD.q[DIR_MPP])[nodeIndex]; + q = (subgridD.q[dMPP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1559,7 +1558,7 @@ __global__ void BBSlipDeviceComp27( if (z == true) VeloZ = c0o1; velocityBC = -VeloX + VeloY + VeloZ; - (dist.f[DIR_PMM])[kbse] = getBounceBackDistributionForVeloBC(f_BSE, velocityBC, c1o216); + (dist.f[dPMM])[kbse] = getBounceBackDistributionForVeloBC(f_BSE, velocityBC, c1o216); } } } @@ -1664,39 +1663,39 @@ __global__ void QSlipDeviceComp27TurbViscosity( //////////////////////////////////////////////////////////////////////////////// //! - Set local distributions //! - real f_W = (dist.f[DIR_P00])[ke ]; - real f_E = (dist.f[DIR_M00])[kw ]; - real f_S = (dist.f[DIR_0P0])[kn ]; - real f_N = (dist.f[DIR_0M0])[ks ]; - real f_B = (dist.f[DIR_00P])[kt ]; - real f_T = (dist.f[DIR_00M])[kb ]; - real f_SW = (dist.f[DIR_PP0])[kne ]; - real f_NE = (dist.f[DIR_MM0])[ksw ]; - real f_NW = (dist.f[DIR_PM0])[kse ]; - real f_SE = (dist.f[DIR_MP0])[knw ]; - real f_BW = (dist.f[DIR_P0P])[kte ]; - real f_TE = (dist.f[DIR_M0M])[kbw ]; - real f_TW = (dist.f[DIR_P0M])[kbe ]; - real f_BE = (dist.f[DIR_M0P])[ktw ]; - real f_BS = (dist.f[DIR_0PP])[ktn ]; - real f_TN = (dist.f[DIR_0MM])[kbs ]; - real f_TS = (dist.f[DIR_0PM])[kbn ]; - real f_BN = (dist.f[DIR_0MP])[kts ]; - real f_BSW = (dist.f[DIR_PPP])[ktne ]; - real f_BNE = (dist.f[DIR_MMP])[ktsw ]; - real f_BNW = (dist.f[DIR_PMP])[ktse ]; - real f_BSE = (dist.f[DIR_MPP])[ktnw ]; - real f_TSW = (dist.f[DIR_PPM])[kbne ]; - real f_TNE = (dist.f[DIR_MMM])[kbsw ]; - real f_TNW = (dist.f[DIR_PMM])[kbse ]; - real f_TSE = (dist.f[DIR_MPM])[kbnw ]; + real f_W = (dist.f[dP00])[ke ]; + real f_E = (dist.f[dM00])[kw ]; + real f_S = (dist.f[d0P0])[kn ]; + real f_N = (dist.f[d0M0])[ks ]; + real f_B = (dist.f[d00P])[kt ]; + real f_T = (dist.f[d00M])[kb ]; + real f_SW = (dist.f[dPP0])[kne ]; + real f_NE = (dist.f[dMM0])[ksw ]; + real f_NW = (dist.f[dPM0])[kse ]; + real f_SE = (dist.f[dMP0])[knw ]; + real f_BW = (dist.f[dP0P])[kte ]; + real f_TE = (dist.f[dM0M])[kbw ]; + real f_TW = (dist.f[dP0M])[kbe ]; + real f_BE = (dist.f[dM0P])[ktw ]; + real f_BS = (dist.f[d0PP])[ktn ]; + real f_TN = (dist.f[d0MM])[kbs ]; + real f_TS = (dist.f[d0PM])[kbn ]; + real f_BN = (dist.f[d0MP])[kts ]; + real f_BSW = (dist.f[dPPP])[ktne ]; + real f_BNE = (dist.f[dMMP])[ktsw ]; + real f_BNW = (dist.f[dPMP])[ktse ]; + real f_BSE = (dist.f[dMPP])[ktnw ]; + real f_TSW = (dist.f[dPPM])[kbne ]; + real f_TNE = (dist.f[dMMM])[kbsw ]; + real f_TNW = (dist.f[dPMM])[kbse ]; + real f_TSE = (dist.f[dMPM])[kbnw ]; //////////////////////////////////////////////////////////////////////////////// //! - Calculate macroscopic quantities //! real 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 + ((dist.f[DIR_000])[kzero]); + f_T + f_B + f_N + f_S + f_E + f_W + ((dist.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)) + @@ -1739,7 +1738,7 @@ __global__ void QSlipDeviceComp27TurbViscosity( bool y = false; bool z = false; - q = (subgridD.q[DIR_P00])[nodeIndex]; + q = (subgridD.q[dP00])[nodeIndex]; if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one { VeloX = c0o1; @@ -1748,10 +1747,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = vx1; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = VeloX; - (dist.f[DIR_M00])[kw] = getInterpolatedDistributionForVeloBC(q, f_E, f_W, feq, om_turb, velocityBC, c2o27); + (dist.f[dM00])[kw] = getInterpolatedDistributionForVeloBC(q, f_E, f_W, feq, om_turb, velocityBC, c2o27); } - q = (subgridD.q[DIR_M00])[nodeIndex]; + q = (subgridD.q[dM00])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = c0o1; @@ -1760,10 +1759,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = -vx1; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = -VeloX; - (dist.f[DIR_P00])[ke] = getInterpolatedDistributionForVeloBC(q, f_W, f_E, feq, om_turb, velocityBC, c2o27); + (dist.f[dP00])[ke] = getInterpolatedDistributionForVeloBC(q, f_W, f_E, feq, om_turb, velocityBC, c2o27); } - q = (subgridD.q[DIR_0P0])[nodeIndex]; + q = (subgridD.q[d0P0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = c0o1; @@ -1772,10 +1771,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = VeloY; - (dist.f[DIR_0M0])[ks] = getInterpolatedDistributionForVeloBC(q, f_N, f_S, feq, om_turb, velocityBC, c2o27); + (dist.f[d0M0])[ks] = getInterpolatedDistributionForVeloBC(q, f_N, f_S, feq, om_turb, velocityBC, c2o27); } - q = (subgridD.q[DIR_0M0])[nodeIndex]; + q = (subgridD.q[d0M0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = c0o1; @@ -1784,10 +1783,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = -vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = -VeloY; - (dist.f[DIR_0P0])[kn] = getInterpolatedDistributionForVeloBC(q, f_S, f_N, feq, om_turb, velocityBC, c2o27); + (dist.f[d0P0])[kn] = getInterpolatedDistributionForVeloBC(q, f_S, f_N, feq, om_turb, velocityBC, c2o27); } - q = (subgridD.q[DIR_00P])[nodeIndex]; + q = (subgridD.q[d00P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloZ = c0o1; @@ -1796,10 +1795,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = VeloZ; - (dist.f[DIR_00M])[kb] = getInterpolatedDistributionForVeloBC(q, f_T, f_B, feq, om_turb, velocityBC, c2o27); + (dist.f[d00M])[kb] = getInterpolatedDistributionForVeloBC(q, f_T, f_B, feq, om_turb, velocityBC, c2o27); } - q = (subgridD.q[DIR_00M])[nodeIndex]; + q = (subgridD.q[d00M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloZ = c0o1; @@ -1808,10 +1807,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = -vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = -VeloZ; - (dist.f[DIR_00P])[kt] = getInterpolatedDistributionForVeloBC(q, f_B, f_T, feq, om_turb, velocityBC, c2o27); + (dist.f[d00P])[kt] = getInterpolatedDistributionForVeloBC(q, f_B, f_T, feq, om_turb, velocityBC, c2o27); } - q = (subgridD.q[DIR_PP0])[nodeIndex]; + q = (subgridD.q[dPP0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1822,10 +1821,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = vx1 + vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloX + VeloY; - (dist.f[DIR_MM0])[ksw] = getInterpolatedDistributionForVeloBC(q, f_NE, f_SW, feq, om_turb, velocityBC, c1o54); + (dist.f[dMM0])[ksw] = getInterpolatedDistributionForVeloBC(q, f_NE, f_SW, feq, om_turb, velocityBC, c1o54); } - q = (subgridD.q[DIR_MM0])[nodeIndex]; + q = (subgridD.q[dMM0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1836,10 +1835,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = -vx1 - vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloX - VeloY; - (dist.f[DIR_PP0])[kne] = getInterpolatedDistributionForVeloBC(q, f_SW, f_NE, feq, om_turb, velocityBC, c1o54); + (dist.f[dPP0])[kne] = getInterpolatedDistributionForVeloBC(q, f_SW, f_NE, feq, om_turb, velocityBC, c1o54); } - q = (subgridD.q[DIR_PM0])[nodeIndex]; + q = (subgridD.q[dPM0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1850,10 +1849,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = vx1 - vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloX - VeloY; - (dist.f[DIR_MP0])[knw] = getInterpolatedDistributionForVeloBC(q, f_SE, f_NW, feq, om_turb, velocityBC, c1o54); + (dist.f[dMP0])[knw] = getInterpolatedDistributionForVeloBC(q, f_SE, f_NW, feq, om_turb, velocityBC, c1o54); } - q = (subgridD.q[DIR_MP0])[nodeIndex]; + q = (subgridD.q[dMP0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1864,10 +1863,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = -vx1 + vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloX + VeloY; - (dist.f[DIR_PM0])[kse] = getInterpolatedDistributionForVeloBC(q, f_NW, f_SE, feq, om_turb, velocityBC, c1o54); + (dist.f[dPM0])[kse] = getInterpolatedDistributionForVeloBC(q, f_NW, f_SE, feq, om_turb, velocityBC, c1o54); } - q = (subgridD.q[DIR_P0P])[nodeIndex]; + q = (subgridD.q[dP0P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1878,10 +1877,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = vx1 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloX + VeloZ; - (dist.f[DIR_M0M])[kbw] = getInterpolatedDistributionForVeloBC(q, f_TE, f_BW, feq, om_turb, velocityBC, c1o54); + (dist.f[dM0M])[kbw] = getInterpolatedDistributionForVeloBC(q, f_TE, f_BW, feq, om_turb, velocityBC, c1o54); } - q = (subgridD.q[DIR_M0M])[nodeIndex]; + q = (subgridD.q[dM0M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1892,10 +1891,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = -vx1 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloX - VeloZ; - (dist.f[DIR_P0P])[kte] = getInterpolatedDistributionForVeloBC(q, f_BW, f_TE, feq, om_turb, velocityBC, c1o54); + (dist.f[dP0P])[kte] = getInterpolatedDistributionForVeloBC(q, f_BW, f_TE, feq, om_turb, velocityBC, c1o54); } - q = (subgridD.q[DIR_P0M])[nodeIndex]; + q = (subgridD.q[dP0M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1906,10 +1905,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = vx1 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloX - VeloZ; - (dist.f[DIR_M0P])[ktw] = getInterpolatedDistributionForVeloBC(q, f_BE, f_TW, feq, om_turb, velocityBC, c1o54); + (dist.f[dM0P])[ktw] = getInterpolatedDistributionForVeloBC(q, f_BE, f_TW, feq, om_turb, velocityBC, c1o54); } - q = (subgridD.q[DIR_M0P])[nodeIndex]; + q = (subgridD.q[dM0P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1920,10 +1919,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = -vx1 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloX + VeloZ; - (dist.f[DIR_P0M])[kbe] = getInterpolatedDistributionForVeloBC(q, f_TW, f_BE, feq, om_turb, velocityBC, c1o54); + (dist.f[dP0M])[kbe] = getInterpolatedDistributionForVeloBC(q, f_TW, f_BE, feq, om_turb, velocityBC, c1o54); } - q = (subgridD.q[DIR_0PP])[nodeIndex]; + q = (subgridD.q[d0PP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = slipLength*vx2; @@ -1934,10 +1933,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloY + VeloZ; - (dist.f[DIR_0MM])[kbs] = getInterpolatedDistributionForVeloBC(q, f_TN, f_BS, feq, om_turb, velocityBC, c1o54); + (dist.f[d0MM])[kbs] = getInterpolatedDistributionForVeloBC(q, f_TN, f_BS, feq, om_turb, velocityBC, c1o54); } - q = (subgridD.q[DIR_0MM])[nodeIndex]; + q = (subgridD.q[d0MM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = slipLength*vx2; @@ -1948,11 +1947,11 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = -vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloY - VeloZ; - (dist.f[DIR_0PP])[ktn] = getInterpolatedDistributionForVeloBC(q, f_BS, f_TN, feq, om_turb, velocityBC, c1o54); + (dist.f[d0PP])[ktn] = getInterpolatedDistributionForVeloBC(q, f_BS, f_TN, feq, om_turb, velocityBC, c1o54); } - q = (subgridD.q[DIR_0PM])[nodeIndex]; + q = (subgridD.q[d0PM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = slipLength*vx2; @@ -1963,10 +1962,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloY - VeloZ; - (dist.f[DIR_0MP])[kts] = getInterpolatedDistributionForVeloBC(q, f_BN, f_TS, feq, om_turb, velocityBC, c1o54); + (dist.f[d0MP])[kts] = getInterpolatedDistributionForVeloBC(q, f_BN, f_TS, feq, om_turb, velocityBC, c1o54); } - q = (subgridD.q[DIR_0MP])[nodeIndex]; + q = (subgridD.q[d0MP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = slipLength*vx2; @@ -1977,10 +1976,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = -vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloY + VeloZ; - (dist.f[DIR_0PM])[kbn] = getInterpolatedDistributionForVeloBC(q, f_TS, f_BN, feq, om_turb, velocityBC, c1o54); + (dist.f[d0PM])[kbn] = getInterpolatedDistributionForVeloBC(q, f_TS, f_BN, feq, om_turb, velocityBC, c1o54); } - q = (subgridD.q[DIR_PPP])[nodeIndex]; + q = (subgridD.q[dPPP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -1992,10 +1991,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = vx1 + vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = VeloX + VeloY + VeloZ; - (dist.f[DIR_MMM])[kbsw] = getInterpolatedDistributionForVeloBC(q, f_TNE, f_BSW, feq, om_turb, velocityBC, c1o216); + (dist.f[dMMM])[kbsw] = getInterpolatedDistributionForVeloBC(q, f_TNE, f_BSW, feq, om_turb, velocityBC, c1o216); } - q = (subgridD.q[DIR_MMM])[nodeIndex]; + q = (subgridD.q[dMMM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2007,11 +2006,11 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = -vx1 - vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = -VeloX - VeloY - VeloZ; - (dist.f[DIR_PPP])[ktne] = getInterpolatedDistributionForVeloBC(q, f_BSW, f_TNE, feq, om_turb, velocityBC, c1o216); + (dist.f[dPPP])[ktne] = getInterpolatedDistributionForVeloBC(q, f_BSW, f_TNE, feq, om_turb, velocityBC, c1o216); } - q = (subgridD.q[DIR_PPM])[nodeIndex]; + q = (subgridD.q[dPPM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2023,10 +2022,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = vx1 + vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = VeloX + VeloY - VeloZ; - (dist.f[DIR_MMP])[ktsw] = getInterpolatedDistributionForVeloBC(q, f_BNE, f_TSW, feq, om_turb, velocityBC, c1o216); + (dist.f[dMMP])[ktsw] = getInterpolatedDistributionForVeloBC(q, f_BNE, f_TSW, feq, om_turb, velocityBC, c1o216); } - q = (subgridD.q[DIR_MMP])[nodeIndex]; + q = (subgridD.q[dMMP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2038,10 +2037,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = -vx1 - vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = -VeloX - VeloY + VeloZ; - (dist.f[DIR_PPM])[kbne] = getInterpolatedDistributionForVeloBC(q, f_TSW, f_BNE, feq, om_turb, velocityBC, c1o216); + (dist.f[dPPM])[kbne] = getInterpolatedDistributionForVeloBC(q, f_TSW, f_BNE, feq, om_turb, velocityBC, c1o216); } - q = (subgridD.q[DIR_PMP])[nodeIndex]; + q = (subgridD.q[dPMP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2053,10 +2052,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = vx1 - vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = VeloX - VeloY + VeloZ; - (dist.f[DIR_MPM])[kbnw] = getInterpolatedDistributionForVeloBC(q, f_TSE, f_BNW, feq, om_turb, velocityBC, c1o216); + (dist.f[dMPM])[kbnw] = getInterpolatedDistributionForVeloBC(q, f_TSE, f_BNW, feq, om_turb, velocityBC, c1o216); } - q = (subgridD.q[DIR_MPM])[nodeIndex]; + q = (subgridD.q[dMPM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2068,10 +2067,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = -vx1 + vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = -VeloX + VeloY - VeloZ; - (dist.f[DIR_PMP])[ktse] = getInterpolatedDistributionForVeloBC(q, f_BNW, f_TSE, feq, om_turb, velocityBC, c1o216); + (dist.f[dPMP])[ktse] = getInterpolatedDistributionForVeloBC(q, f_BNW, f_TSE, feq, om_turb, velocityBC, c1o216); } - q = (subgridD.q[DIR_PMM])[nodeIndex]; + q = (subgridD.q[dPMM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2083,10 +2082,10 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = vx1 - vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = VeloX - VeloY - VeloZ; - (dist.f[DIR_MPP])[ktnw] = getInterpolatedDistributionForVeloBC(q, f_BSE, f_TNW, feq, om_turb, velocityBC, c1o216); + (dist.f[dMPP])[ktnw] = getInterpolatedDistributionForVeloBC(q, f_BSE, f_TNW, feq, om_turb, velocityBC, c1o216); } - q = (subgridD.q[DIR_MPP])[nodeIndex]; + q = (subgridD.q[dMPP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2098,7 +2097,7 @@ __global__ void QSlipDeviceComp27TurbViscosity( velocityLB = -vx1 + vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = -VeloX + VeloY + VeloZ; - (dist.f[DIR_PMM])[kbse] = getInterpolatedDistributionForVeloBC(q, f_TNW, f_BSE, feq, om_turb, velocityBC, c1o216); + (dist.f[dPMM])[kbse] = getInterpolatedDistributionForVeloBC(q, f_TNW, f_BSE, feq, om_turb, velocityBC, c1o216); } } } @@ -2204,39 +2203,39 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( //////////////////////////////////////////////////////////////////////////////// //! - Set local distributions //! - real f_W = (dist.f[DIR_P00])[ke ]; - real f_E = (dist.f[DIR_M00])[kw ]; - real f_S = (dist.f[DIR_0P0])[kn ]; - real f_N = (dist.f[DIR_0M0])[ks ]; - real f_B = (dist.f[DIR_00P])[kt ]; - real f_T = (dist.f[DIR_00M])[kb ]; - real f_SW = (dist.f[DIR_PP0])[kne ]; - real f_NE = (dist.f[DIR_MM0])[ksw ]; - real f_NW = (dist.f[DIR_PM0])[kse ]; - real f_SE = (dist.f[DIR_MP0])[knw ]; - real f_BW = (dist.f[DIR_P0P])[kte ]; - real f_TE = (dist.f[DIR_M0M])[kbw ]; - real f_TW = (dist.f[DIR_P0M])[kbe ]; - real f_BE = (dist.f[DIR_M0P])[ktw ]; - real f_BS = (dist.f[DIR_0PP])[ktn ]; - real f_TN = (dist.f[DIR_0MM])[kbs ]; - real f_TS = (dist.f[DIR_0PM])[kbn ]; - real f_BN = (dist.f[DIR_0MP])[kts ]; - real f_BSW = (dist.f[DIR_PPP])[ktne ]; - real f_BNE = (dist.f[DIR_MMP])[ktsw ]; - real f_BNW = (dist.f[DIR_PMP])[ktse ]; - real f_BSE = (dist.f[DIR_MPP])[ktnw ]; - real f_TSW = (dist.f[DIR_PPM])[kbne ]; - real f_TNE = (dist.f[DIR_MMM])[kbsw ]; - real f_TNW = (dist.f[DIR_PMM])[kbse ]; - real f_TSE = (dist.f[DIR_MPM])[kbnw ]; + real f_W = (dist.f[dP00])[ke ]; + real f_E = (dist.f[dM00])[kw ]; + real f_S = (dist.f[d0P0])[kn ]; + real f_N = (dist.f[d0M0])[ks ]; + real f_B = (dist.f[d00P])[kt ]; + real f_T = (dist.f[d00M])[kb ]; + real f_SW = (dist.f[dPP0])[kne ]; + real f_NE = (dist.f[dMM0])[ksw ]; + real f_NW = (dist.f[dPM0])[kse ]; + real f_SE = (dist.f[dMP0])[knw ]; + real f_BW = (dist.f[dP0P])[kte ]; + real f_TE = (dist.f[dM0M])[kbw ]; + real f_TW = (dist.f[dP0M])[kbe ]; + real f_BE = (dist.f[dM0P])[ktw ]; + real f_BS = (dist.f[d0PP])[ktn ]; + real f_TN = (dist.f[d0MM])[kbs ]; + real f_TS = (dist.f[d0PM])[kbn ]; + real f_BN = (dist.f[d0MP])[kts ]; + real f_BSW = (dist.f[dPPP])[ktne ]; + real f_BNE = (dist.f[dMMP])[ktsw ]; + real f_BNW = (dist.f[dPMP])[ktse ]; + real f_BSE = (dist.f[dMPP])[ktnw ]; + real f_TSW = (dist.f[dPPM])[kbne ]; + real f_TNE = (dist.f[dMMM])[kbsw ]; + real f_TNW = (dist.f[dPMM])[kbse ]; + real f_TSE = (dist.f[dMPM])[kbnw ]; //////////////////////////////////////////////////////////////////////////////// //! - Calculate macroscopic quantities //! real 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 + ((dist.f[DIR_000])[kzero]); + f_T + f_B + f_N + f_S + f_E + f_W + ((dist.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)) + @@ -2279,7 +2278,7 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( bool y = false; bool z = false; - q = (subgridD.q[DIR_P00])[nodeIndex]; + q = (subgridD.q[dP00])[nodeIndex]; if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one { VeloX = c0o1; @@ -2288,10 +2287,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = vx1; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = VeloX; - (dist.f[DIR_M00])[kw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_E, f_W, feq, om_turb, drho, velocityBC, c2o27); + (dist.f[dM00])[kw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_E, f_W, feq, om_turb, drho, velocityBC, c2o27); } - q = (subgridD.q[DIR_M00])[nodeIndex]; + q = (subgridD.q[dM00])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = c0o1; @@ -2300,10 +2299,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = -vx1; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = -VeloX; - (dist.f[DIR_P00])[ke] = getInterpolatedDistributionForVeloWithPressureBC(q, f_W, f_E, feq, om_turb, drho, velocityBC, c2o27); + (dist.f[dP00])[ke] = getInterpolatedDistributionForVeloWithPressureBC(q, f_W, f_E, feq, om_turb, drho, velocityBC, c2o27); } - q = (subgridD.q[DIR_0P0])[nodeIndex]; + q = (subgridD.q[d0P0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = c0o1; @@ -2312,10 +2311,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = VeloY; - (dist.f[DIR_0M0])[ks] = getInterpolatedDistributionForVeloWithPressureBC(q, f_N, f_S, feq, om_turb, drho, velocityBC, c2o27); + (dist.f[d0M0])[ks] = getInterpolatedDistributionForVeloWithPressureBC(q, f_N, f_S, feq, om_turb, drho, velocityBC, c2o27); } - q = (subgridD.q[DIR_0M0])[nodeIndex]; + q = (subgridD.q[d0M0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = c0o1; @@ -2324,10 +2323,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = -vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = -VeloY; - (dist.f[DIR_0P0])[kn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_S, f_N, feq, om_turb, drho, velocityBC, c2o27); + (dist.f[d0P0])[kn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_S, f_N, feq, om_turb, drho, velocityBC, c2o27); } - q = (subgridD.q[DIR_00P])[nodeIndex]; + q = (subgridD.q[d00P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloZ = c0o1; @@ -2336,10 +2335,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = VeloZ; - (dist.f[DIR_00M])[kb] = getInterpolatedDistributionForVeloWithPressureBC(q, f_T, f_B, feq, om_turb, drho, velocityBC, c2o27); + (dist.f[d00M])[kb] = getInterpolatedDistributionForVeloWithPressureBC(q, f_T, f_B, feq, om_turb, drho, velocityBC, c2o27); } - q = (subgridD.q[DIR_00M])[nodeIndex]; + q = (subgridD.q[d00M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloZ = c0o1; @@ -2348,10 +2347,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = -vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); velocityBC = -VeloZ; - (dist.f[DIR_00P])[kt] = getInterpolatedDistributionForVeloWithPressureBC(q, f_B, f_T, feq, om_turb, drho, velocityBC, c2o27); + (dist.f[d00P])[kt] = getInterpolatedDistributionForVeloWithPressureBC(q, f_B, f_T, feq, om_turb, drho, velocityBC, c2o27); } - q = (subgridD.q[DIR_PP0])[nodeIndex]; + q = (subgridD.q[dPP0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2362,10 +2361,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = vx1 + vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloX + VeloY; - (dist.f[DIR_MM0])[ksw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NE, f_SW, feq, om_turb, drho, velocityBC, c1o54); + (dist.f[dMM0])[ksw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NE, f_SW, feq, om_turb, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_MM0])[nodeIndex]; + q = (subgridD.q[dMM0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2376,10 +2375,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = -vx1 - vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloX - VeloY; - (dist.f[DIR_PP0])[kne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SW, f_NE, feq, om_turb, drho, velocityBC, c1o54); + (dist.f[dPP0])[kne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SW, f_NE, feq, om_turb, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_PM0])[nodeIndex]; + q = (subgridD.q[dPM0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2390,10 +2389,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = vx1 - vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloX - VeloY; - (dist.f[DIR_MP0])[knw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SE, f_NW, feq, om_turb, drho, velocityBC, c1o54); + (dist.f[dMP0])[knw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SE, f_NW, feq, om_turb, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_MP0])[nodeIndex]; + q = (subgridD.q[dMP0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2404,10 +2403,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = -vx1 + vx2; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloX + VeloY; - (dist.f[DIR_PM0])[kse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NW, f_SE, feq, om_turb, drho, velocityBC, c1o54); + (dist.f[dPM0])[kse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NW, f_SE, feq, om_turb, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_P0P])[nodeIndex]; + q = (subgridD.q[dP0P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2418,10 +2417,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = vx1 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloX + VeloZ; - (dist.f[DIR_M0M])[kbw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TE, f_BW, feq, om_turb, drho, velocityBC, c1o54); + (dist.f[dM0M])[kbw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TE, f_BW, feq, om_turb, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_M0M])[nodeIndex]; + q = (subgridD.q[dM0M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2432,10 +2431,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = -vx1 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloX - VeloZ; - (dist.f[DIR_P0P])[kte] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BW, f_TE, feq, om_turb, drho, velocityBC, c1o54); + (dist.f[dP0P])[kte] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BW, f_TE, feq, om_turb, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_P0M])[nodeIndex]; + q = (subgridD.q[dP0M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2446,10 +2445,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = vx1 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloX - VeloZ; - (dist.f[DIR_M0P])[ktw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BE, f_TW, feq, om_turb, drho, velocityBC, c1o54); + (dist.f[dM0P])[ktw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BE, f_TW, feq, om_turb, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_M0P])[nodeIndex]; + q = (subgridD.q[dM0P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2460,10 +2459,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = -vx1 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloX + VeloZ; - (dist.f[DIR_P0M])[kbe] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TW, f_BE, feq, om_turb, drho, velocityBC, c1o54); + (dist.f[dP0M])[kbe] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TW, f_BE, feq, om_turb, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_0PP])[nodeIndex]; + q = (subgridD.q[d0PP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = slipLength*vx2; @@ -2474,10 +2473,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloY + VeloZ; - (dist.f[DIR_0MM])[kbs] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TN, f_BS, feq, om_turb, drho, velocityBC, c1o54); + (dist.f[d0MM])[kbs] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TN, f_BS, feq, om_turb, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_0MM])[nodeIndex]; + q = (subgridD.q[d0MM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = slipLength*vx2; @@ -2488,11 +2487,11 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = -vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloY - VeloZ; - (dist.f[DIR_0PP])[ktn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BS, f_TN, feq, om_turb, drho, velocityBC, c1o54); + (dist.f[d0PP])[ktn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BS, f_TN, feq, om_turb, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_0PM])[nodeIndex]; + q = (subgridD.q[d0PM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = slipLength*vx2; @@ -2503,10 +2502,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = VeloY - VeloZ; - (dist.f[DIR_0MP])[kts] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BN, f_TS, feq, om_turb, drho, velocityBC, c1o54); + (dist.f[d0MP])[kts] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BN, f_TS, feq, om_turb, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_0MP])[nodeIndex]; + q = (subgridD.q[d0MP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloY = slipLength*vx2; @@ -2517,10 +2516,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = -vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); velocityBC = -VeloY + VeloZ; - (dist.f[DIR_0PM])[kbn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TS, f_BN, feq, om_turb, drho, velocityBC, c1o54); + (dist.f[d0PM])[kbn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TS, f_BN, feq, om_turb, drho, velocityBC, c1o54); } - q = (subgridD.q[DIR_PPP])[nodeIndex]; + q = (subgridD.q[dPPP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2532,10 +2531,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = vx1 + vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = VeloX + VeloY + VeloZ; - (dist.f[DIR_MMM])[kbsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNE, f_BSW, feq, om_turb, drho, velocityBC, c1o216); + (dist.f[dMMM])[kbsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNE, f_BSW, feq, om_turb, drho, velocityBC, c1o216); } - q = (subgridD.q[DIR_MMM])[nodeIndex]; + q = (subgridD.q[dMMM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2547,11 +2546,11 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = -vx1 - vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = -VeloX - VeloY - VeloZ; - (dist.f[DIR_PPP])[ktne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSW, f_TNE, feq, om_turb, drho, velocityBC, c1o216); + (dist.f[dPPP])[ktne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSW, f_TNE, feq, om_turb, drho, velocityBC, c1o216); } - q = (subgridD.q[DIR_PPM])[nodeIndex]; + q = (subgridD.q[dPPM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2563,10 +2562,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = vx1 + vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = VeloX + VeloY - VeloZ; - (dist.f[DIR_MMP])[ktsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNE, f_TSW, feq, om_turb, drho, velocityBC, c1o216); + (dist.f[dMMP])[ktsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNE, f_TSW, feq, om_turb, drho, velocityBC, c1o216); } - q = (subgridD.q[DIR_MMP])[nodeIndex]; + q = (subgridD.q[dMMP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2578,10 +2577,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = -vx1 - vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = -VeloX - VeloY + VeloZ; - (dist.f[DIR_PPM])[kbne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSW, f_BNE, feq, om_turb, drho, velocityBC, c1o216); + (dist.f[dPPM])[kbne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSW, f_BNE, feq, om_turb, drho, velocityBC, c1o216); } - q = (subgridD.q[DIR_PMP])[nodeIndex]; + q = (subgridD.q[dPMP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2593,10 +2592,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = vx1 - vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = VeloX - VeloY + VeloZ; - (dist.f[DIR_MPM])[kbnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSE, f_BNW, feq, om_turb, drho, velocityBC, c1o216); + (dist.f[dMPM])[kbnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSE, f_BNW, feq, om_turb, drho, velocityBC, c1o216); } - q = (subgridD.q[DIR_MPM])[nodeIndex]; + q = (subgridD.q[dMPM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2608,10 +2607,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = -vx1 + vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = -VeloX + VeloY - VeloZ; - (dist.f[DIR_PMP])[ktse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNW, f_TSE, feq, om_turb, drho, velocityBC, c1o216); + (dist.f[dPMP])[ktse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNW, f_TSE, feq, om_turb, drho, velocityBC, c1o216); } - q = (subgridD.q[DIR_PMM])[nodeIndex]; + q = (subgridD.q[dPMM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2623,10 +2622,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = vx1 - vx2 - vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = VeloX - VeloY - VeloZ; - (dist.f[DIR_MPP])[ktnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSE, f_TNW, feq, om_turb, drho, velocityBC, c1o216); + (dist.f[dMPP])[ktnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSE, f_TNW, feq, om_turb, drho, velocityBC, c1o216); } - q = (subgridD.q[DIR_MPP])[nodeIndex]; + q = (subgridD.q[dMPP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) { VeloX = slipLength*vx1; @@ -2638,7 +2637,7 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( velocityLB = -vx1 + vx2 + vx3; feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); velocityBC = -VeloX + VeloY + VeloZ; - (dist.f[DIR_PMM])[kbse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNW, f_BSE, feq, om_turb, drho, velocityBC, c1o216); + (dist.f[dPMM])[kbse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNW, f_BSE, feq, om_turb, drho, velocityBC, c1o216); } } } @@ -2658,63 +2657,63 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // Distributions27 D; // if (isEvenTimestep==true) // { -// D.f[DIR_P00] = &DD[DIR_P00 * size_Mat]; -// D.f[DIR_M00] = &DD[DIR_M00 * size_Mat]; -// D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat]; -// D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat]; -// D.f[DIR_00P] = &DD[DIR_00P * size_Mat]; -// D.f[DIR_00M] = &DD[DIR_00M * size_Mat]; -// D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat]; -// D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat]; -// D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat]; -// D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat]; -// D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat]; -// D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat]; -// D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat]; -// D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat]; -// D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat]; -// D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat]; -// D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat]; -// D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat]; -// D.f[DIR_000] = &DD[DIR_000 * size_Mat]; -// D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat]; -// D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat]; -// D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat]; -// D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat]; -// D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat]; -// D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat]; -// D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat]; -// D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat]; +// 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[DIR_M00] = &DD[DIR_P00 * size_Mat]; -// D.f[DIR_P00] = &DD[DIR_M00 * size_Mat]; -// D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat]; -// D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat]; -// D.f[DIR_00M] = &DD[DIR_00P * size_Mat]; -// D.f[DIR_00P] = &DD[DIR_00M * size_Mat]; -// D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat]; -// D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat]; -// D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat]; -// D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat]; -// D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat]; -// D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat]; -// D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat]; -// D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat]; -// D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat]; -// D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat]; -// D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat]; -// D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat]; -// D.f[DIR_000] = &DD[DIR_000 * size_Mat]; -// D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat]; -// D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat]; -// D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat]; -// D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat]; -// D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat]; -// D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat]; -// D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat]; -// D.f[DIR_MPM] = &DD[DIR_PMP * size_Mat]; +// 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]; // } // //////////////////////////////////////////////////////////////////////////////// // const unsigned x = threadIdx.x; // Globaler x-Index @@ -2735,32 +2734,32 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // *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[DIR_P00 * numberOfBCnodes]; -// q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; -// q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; -// q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; -// q_dirT = &QQ[DIR_00P * numberOfBCnodes]; -// q_dirB = &QQ[DIR_00M * numberOfBCnodes]; -// q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; -// q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; -// q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; -// q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; -// q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; -// q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; -// q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; -// q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; -// q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; -// q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; -// q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; -// q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; -// q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; -// q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; -// q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; -// q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; -// q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; -// q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; -// q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; -// q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes]; +// 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]; @@ -2793,37 +2792,37 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // unsigned int kbsw = neighborZ[ksw]; // //////////////////////////////////////////////////////////////////////////////// -// real f_W = (D.f[DIR_P00])[ke ]; -// real f_E = (D.f[DIR_M00])[kw ]; -// real f_S = (D.f[DIR_0P0])[kn ]; -// real f_N = (D.f[DIR_0M0])[ks ]; -// real f_B = (D.f[DIR_00P])[kt ]; -// real f_T = (D.f[DIR_00M])[kb ]; -// real f_SW = (D.f[DIR_PP0])[kne ]; -// real f_NE = (D.f[DIR_MM0])[ksw ]; -// real f_NW = (D.f[DIR_PM0])[kse ]; -// real f_SE = (D.f[DIR_MP0])[knw ]; -// real f_BW = (D.f[DIR_P0P])[kte ]; -// real f_TE = (D.f[DIR_M0M])[kbw ]; -// real f_TW = (D.f[DIR_P0M])[kbe ]; -// real f_BE = (D.f[DIR_M0P])[ktw ]; -// real f_BS = (D.f[DIR_0PP])[ktn ]; -// real f_TN = (D.f[DIR_0MM])[kbs ]; -// real f_TS = (D.f[DIR_0PM])[kbn ]; -// real f_BN = (D.f[DIR_0MP])[kts ]; -// real f_BSW = (D.f[DIR_PPP])[ktne ]; -// real f_BNE = (D.f[DIR_MMP])[ktsw ]; -// real f_BNW = (D.f[DIR_PMP])[ktse ]; -// real f_BSE = (D.f[DIR_MPP])[ktnw ]; -// real f_TSW = (D.f[DIR_PPM])[kbne ]; -// real f_TNE = (D.f[DIR_MMM])[kbsw ]; -// real f_TNW = (D.f[DIR_PMM])[kbse ]; -// real f_TSE = (D.f[DIR_MPM])[kbnw ]; +// 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, 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 + ((D.f[DIR_000])[kzero]); +// 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)) + @@ -2843,67 +2842,67 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // ////////////////////////////////////////////////////////////////////////// // if (isEvenTimestep==false) // { -// D.f[DIR_P00] = &DD[DIR_P00 * size_Mat]; -// D.f[DIR_M00] = &DD[DIR_M00 * size_Mat]; -// D.f[DIR_0P0] = &DD[DIR_0P0 * size_Mat]; -// D.f[DIR_0M0] = &DD[DIR_0M0 * size_Mat]; -// D.f[DIR_00P] = &DD[DIR_00P * size_Mat]; -// D.f[DIR_00M] = &DD[DIR_00M * size_Mat]; -// D.f[DIR_PP0] = &DD[DIR_PP0 * size_Mat]; -// D.f[DIR_MM0] = &DD[DIR_MM0 * size_Mat]; -// D.f[DIR_PM0] = &DD[DIR_PM0 * size_Mat]; -// D.f[DIR_MP0] = &DD[DIR_MP0 * size_Mat]; -// D.f[DIR_P0P] = &DD[DIR_P0P * size_Mat]; -// D.f[DIR_M0M] = &DD[DIR_M0M * size_Mat]; -// D.f[DIR_P0M] = &DD[DIR_P0M * size_Mat]; -// D.f[DIR_M0P] = &DD[DIR_M0P * size_Mat]; -// D.f[DIR_0PP] = &DD[DIR_0PP * size_Mat]; -// D.f[DIR_0MM] = &DD[DIR_0MM * size_Mat]; -// D.f[DIR_0PM] = &DD[DIR_0PM * size_Mat]; -// D.f[DIR_0MP] = &DD[DIR_0MP * size_Mat]; -// D.f[DIR_000] = &DD[DIR_000 * size_Mat]; -// D.f[DIR_PPP] = &DD[DIR_PPP * size_Mat]; -// D.f[DIR_MMP] = &DD[DIR_MMP * size_Mat]; -// D.f[DIR_PMP] = &DD[DIR_PMP * size_Mat]; -// D.f[DIR_MPP] = &DD[DIR_MPP * size_Mat]; -// D.f[DIR_PPM] = &DD[DIR_PPM * size_Mat]; -// D.f[DIR_MMM] = &DD[DIR_MMM * size_Mat]; -// D.f[DIR_PMM] = &DD[DIR_PMM * size_Mat]; -// D.f[DIR_MPM] = &DD[DIR_MPM * size_Mat]; +// 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[DIR_M00] = &DD[DIR_P00 * size_Mat]; -// D.f[DIR_P00] = &DD[DIR_M00 * size_Mat]; -// D.f[DIR_0M0] = &DD[DIR_0P0 * size_Mat]; -// D.f[DIR_0P0] = &DD[DIR_0M0 * size_Mat]; -// D.f[DIR_00M] = &DD[DIR_00P * size_Mat]; -// D.f[DIR_00P] = &DD[DIR_00M * size_Mat]; -// D.f[DIR_MM0] = &DD[DIR_PP0 * size_Mat]; -// D.f[DIR_PP0] = &DD[DIR_MM0 * size_Mat]; -// D.f[DIR_MP0] = &DD[DIR_PM0 * size_Mat]; -// D.f[DIR_PM0] = &DD[DIR_MP0 * size_Mat]; -// D.f[DIR_M0M] = &DD[DIR_P0P * size_Mat]; -// D.f[DIR_P0P] = &DD[DIR_M0M * size_Mat]; -// D.f[DIR_M0P] = &DD[DIR_P0M * size_Mat]; -// D.f[DIR_P0M] = &DD[DIR_M0P * size_Mat]; -// D.f[DIR_0MM] = &DD[DIR_0PP * size_Mat]; -// D.f[DIR_0PP] = &DD[DIR_0MM * size_Mat]; -// D.f[DIR_0MP] = &DD[DIR_0PM * size_Mat]; -// D.f[DIR_0PM] = &DD[DIR_0MP * size_Mat]; -// D.f[DIR_000] = &DD[DIR_000 * size_Mat]; -// D.f[DIR_PPP] = &DD[DIR_MMM * size_Mat]; -// D.f[DIR_MMP] = &DD[DIR_PPM * size_Mat]; -// D.f[DIR_PMP] = &DD[DIR_MPM * size_Mat]; -// D.f[DIR_MPP] = &DD[DIR_PMM * size_Mat]; -// D.f[DIR_PPM] = &DD[DIR_MMP * size_Mat]; -// D.f[DIR_MMM] = &DD[DIR_PPP * size_Mat]; -// D.f[DIR_PMM] = &DD[DIR_MPP * size_Mat]; -// D.f[DIR_MPM] = &DD[DIR_PMP * size_Mat]; +// 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]; // } // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // //Test -// //(D.f[DIR_000])[k]=c1o10; +// //(D.f[d000])[k]=c1o10; // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // real om_turb = om1 / (c1o1 + c3o1*om1*max(c0o1, turbViscosity[k_Q[k]])); @@ -2923,10 +2922,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // VeloZ = fac*vx3; // x = true; // feq=c2o27* (drho/*+three*( vx1 )*/+c9o2*( vx1 )*( vx1 ) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_M00])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX ))/(c1o1+q) - c2o27 * drho; +// (D.f[dM00])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX ))/(c1o1+q) - c2o27 * drho; // //feq=c2over27* (drho+three*( vx1 )+c9over2*( vx1 )*( vx1 )-cu_sq); -// //(D.f[DIR_M00])[kw]=(one-q)/(one+q)*(f_E-feq*om1)/(one-om1)+(q*(f_E+f_W)-six*c2over27*( VeloX ))/(one+q); -// //(D.f[DIR_M00])[kw]=zero; +// //(D.f[dM00])[kw]=(one-q)/(one+q)*(f_E-feq*om1)/(one-om1)+(q*(f_E+f_W)-six*c2over27*( VeloX ))/(one+q); +// //(D.f[dM00])[kw]=zero; // } // q = q_dirW[k]; @@ -2937,10 +2936,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // VeloZ = fac*vx3; // x = true; // feq=c2o27* (drho/*+three*(-vx1 )*/+c9o2*(-vx1 )*(-vx1 ) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_P00])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX ))/(c1o1+q) - c2o27 * drho; +// (D.f[dP00])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX ))/(c1o1+q) - c2o27 * drho; // //feq=c2over27* (drho+three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cu_sq); -// //(D.f[DIR_P00])[ke]=(one-q)/(one+q)*(f_W-feq*om_turb)/(one-om_turb)+(q*(f_W+f_E)-six*c2over27*(-VeloX ))/(one+q); -// //(D.f[DIR_P00])[ke]=zero; +// //(D.f[dP00])[ke]=(one-q)/(one+q)*(f_W-feq*om_turb)/(one-om_turb)+(q*(f_W+f_E)-six*c2over27*(-VeloX ))/(one+q); +// //(D.f[dP00])[ke]=zero; // } // q = q_dirN[k]; @@ -2951,10 +2950,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // VeloZ = fac*vx3; // y = true; // feq=c2o27* (drho/*+three*( vx2 )*/+c9o2*( vx2 )*( vx2 ) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_0M0])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY ))/(c1o1+q) - c2o27 * drho; +// (D.f[d0M0])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY ))/(c1o1+q) - c2o27 * drho; // //feq=c2over27* (drho+three*( vx2 )+c9over2*( vx2 )*( vx2 )-cu_sq); -// //(D.f[DIR_0M0])[ks]=(one-q)/(one+q)*(f_N-feq*om_turb)/(one-om_turb)+(q*(f_N+f_S)-six*c2over27*( VeloY ))/(one+q); -// //(D.f[DIR_0M0])[ks]=zero; +// //(D.f[d0M0])[ks]=(one-q)/(one+q)*(f_N-feq*om_turb)/(one-om_turb)+(q*(f_N+f_S)-six*c2over27*( VeloY ))/(one+q); +// //(D.f[d0M0])[ks]=zero; // } // q = q_dirS[k]; @@ -2965,10 +2964,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // VeloZ = fac*vx3; // y = true; // feq=c2o27* (drho/*+three*( -vx2 )*/+c9o2*( -vx2 )*( -vx2 ) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_0P0])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY ))/(c1o1+q) - c2o27 * drho; +// (D.f[d0P0])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY ))/(c1o1+q) - c2o27 * drho; // //feq=c2over27* (drho+three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cu_sq); -// //(D.f[DIR_0P0])[kn]=(one-q)/(one+q)*(f_S-feq*om_turb)/(one-om_turb)+(q*(f_S+f_N)-six*c2over27*(-VeloY ))/(one+q); -// //(D.f[DIR_0P0])[kn]=zero; +// //(D.f[d0P0])[kn]=(one-q)/(one+q)*(f_S-feq*om_turb)/(one-om_turb)+(q*(f_S+f_N)-six*c2over27*(-VeloY ))/(one+q); +// //(D.f[d0P0])[kn]=zero; // } // q = q_dirT[k]; @@ -2979,10 +2978,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // VeloZ = c0o1; // z = true; // feq=c2o27* (drho/*+three*( vx3)*/+c9o2*( vx3)*( vx3) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_00M])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ ))/(c1o1+q) - c2o27 * drho; +// (D.f[d00M])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ ))/(c1o1+q) - c2o27 * drho; // //feq=c2over27* (drho+three*( vx3)+c9over2*( vx3)*( vx3)-cu_sq); -// //(D.f[DIR_00M])[kb]=(one-q)/(one+q)*(f_T-feq*om_turb)/(one-om_turb)+(q*(f_T+f_B)-six*c2over27*( VeloZ ))/(one+q); -// //(D.f[DIR_00M])[kb]=one; +// //(D.f[d00M])[kb]=(one-q)/(one+q)*(f_T-feq*om_turb)/(one-om_turb)+(q*(f_T+f_B)-six*c2over27*( VeloZ ))/(one+q); +// //(D.f[d00M])[kb]=one; // } // q = q_dirB[k]; @@ -2993,10 +2992,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // VeloZ = c0o1; // z = true; // feq=c2o27* (drho/*+three*( -vx3)*/+c9o2*( -vx3)*( -vx3) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_00P])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ ))/(c1o1+q) - c2o27 * drho; +// (D.f[d00P])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ ))/(c1o1+q) - c2o27 * drho; // //feq=c2over27* (drho+three*( -vx3)+c9over2*( -vx3)*( -vx3)-cu_sq); -// //(D.f[DIR_00P])[kt]=(one-q)/(one+q)*(f_B-feq*om_turb)/(one-om_turb)+(q*(f_B+f_T)-six*c2over27*(-VeloZ ))/(one+q); -// //(D.f[DIR_00P])[kt]=zero; +// //(D.f[d00P])[kt]=(one-q)/(one+q)*(f_B-feq*om_turb)/(one-om_turb)+(q*(f_B+f_T)-six*c2over27*(-VeloZ ))/(one+q); +// //(D.f[d00P])[kt]=zero; // } // q = q_dirNE[k]; @@ -3008,10 +3007,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (x == true) VeloX = c0o1; // if (y == true) VeloY = c0o1; // feq=c1o54* (drho/*+three*( vx1+vx2 )*/+c9o2*( vx1+vx2 )*( vx1+vx2 ) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_MM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q) - c1o54 * drho; +// (D.f[dMM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q) - c1o54 * drho; // //feq=c1over54* (drho+three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); -// //(D.f[DIR_MM0])[ksw]=(one-q)/(one+q)*(f_NE-feq*om_turb)/(one-om_turb)+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q); -// //(D.f[DIR_MM0])[ksw]=zero; +// //(D.f[dMM0])[ksw]=(one-q)/(one+q)*(f_NE-feq*om_turb)/(one-om_turb)+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q); +// //(D.f[dMM0])[ksw]=zero; // } // q = q_dirSW[k]; @@ -3023,10 +3022,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (x == true) VeloX = c0o1; // if (y == true) VeloY = c0o1; // feq=c1o54* (drho/*+three*(-vx1-vx2 )*/+c9o2*(-vx1-vx2 )*(-vx1-vx2 ) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_PP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q) - c1o54 * drho; +// (D.f[dPP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q) - c1o54 * drho; // //feq=c1over54* (drho+three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); -// //(D.f[DIR_PP0])[kne]=(one-q)/(one+q)*(f_SW-feq*om_turb)/(one-om_turb)+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q); -// //(D.f[DIR_PP0])[kne]=zero; +// //(D.f[dPP0])[kne]=(one-q)/(one+q)*(f_SW-feq*om_turb)/(one-om_turb)+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q); +// //(D.f[dPP0])[kne]=zero; // } // q = q_dirSE[k]; @@ -3038,10 +3037,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (x == true) VeloX = c0o1; // if (y == true) VeloY = c0o1; // feq=c1o54* (drho/*+three*( vx1-vx2 )*/+c9o2*( vx1-vx2 )*( vx1-vx2 ) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_MP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q) - c1o54 * drho; +// (D.f[dMP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q) - c1o54 * drho; // //feq=c1over54* (drho+three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); -// //(D.f[DIR_MP0])[knw]=(one-q)/(one+q)*(f_SE-feq*om_turb)/(one-om_turb)+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q); -// //(D.f[DIR_MP0])[knw]=zero; +// //(D.f[dMP0])[knw]=(one-q)/(one+q)*(f_SE-feq*om_turb)/(one-om_turb)+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q); +// //(D.f[dMP0])[knw]=zero; // } // q = q_dirNW[k]; @@ -3053,10 +3052,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (x == true) VeloX = c0o1; // if (y == true) VeloY = c0o1; // feq=c1o54* (drho/*+three*(-vx1+vx2 )*/+c9o2*(-vx1+vx2 )*(-vx1+vx2 ) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_PM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q) - c1o54 * drho; +// (D.f[dPM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q) - c1o54 * drho; // //feq=c1over54* (drho+three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); -// //(D.f[DIR_PM0])[kse]=(one-q)/(one+q)*(f_NW-feq*om_turb)/(one-om_turb)+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q); -// //(D.f[DIR_PM0])[kse]=zero; +// //(D.f[dPM0])[kse]=(one-q)/(one+q)*(f_NW-feq*om_turb)/(one-om_turb)+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q); +// //(D.f[dPM0])[kse]=zero; // } // q = q_dirTE[k]; @@ -3069,10 +3068,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (z == true) VeloZ = c0o1; // // if (k==10000) printf("AFTER x: %u \t y: %u \t z: %u \n VeloX: %f \t VeloY: %f \t VeloZ: %f \n\n", x,y,z, VeloX,VeloY,VeloZ); // feq=c1o54* (drho/*+three*( vx1 +vx3)*/+c9o2*( vx1 +vx3)*( vx1 +vx3) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_M0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q) - c1o54 * drho; +// (D.f[dM0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q) - c1o54 * drho; // //feq=c1over54* (drho+three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); -// //(D.f[DIR_M0M])[kbw]=(one-q)/(one+q)*(f_TE-feq*om_turb)/(one-om_turb)+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q); -// //(D.f[DIR_M0M])[kbw]=zero; +// //(D.f[dM0M])[kbw]=(one-q)/(one+q)*(f_TE-feq*om_turb)/(one-om_turb)+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q); +// //(D.f[dM0M])[kbw]=zero; // } // q = q_dirBW[k]; @@ -3084,10 +3083,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (x == true) VeloX = c0o1; // if (z == true) VeloZ = c0o1; // feq=c1o54* (drho/*+three*(-vx1 -vx3)*/+c9o2*(-vx1 -vx3)*(-vx1 -vx3) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_P0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q) - c1o54 * drho; +// (D.f[dP0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q) - c1o54 * drho; // //feq=c1over54* (drho+three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); -// //(D.f[DIR_P0P])[kte]=(one-q)/(one+q)*(f_BW-feq*om_turb)/(one-om_turb)+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q); -// //(D.f[DIR_P0P])[kte]=zero; +// //(D.f[dP0P])[kte]=(one-q)/(one+q)*(f_BW-feq*om_turb)/(one-om_turb)+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q); +// //(D.f[dP0P])[kte]=zero; // } // q = q_dirBE[k]; @@ -3099,10 +3098,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (x == true) VeloX = c0o1; // if (z == true) VeloZ = c0o1; // feq=c1o54* (drho/*+three*( vx1 -vx3)*/+c9o2*( vx1 -vx3)*( vx1 -vx3) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_M0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q) - c1o54 * drho; +// (D.f[dM0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q) - c1o54 * drho; // //feq=c1over54* (drho+three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); -// //(D.f[DIR_M0P])[ktw]=(one-q)/(one+q)*(f_BE-feq*om_turb)/(one-om_turb)+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q); -// //(D.f[DIR_M0P])[ktw]=zero; +// //(D.f[dM0P])[ktw]=(one-q)/(one+q)*(f_BE-feq*om_turb)/(one-om_turb)+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q); +// //(D.f[dM0P])[ktw]=zero; // } // q = q_dirTW[k]; @@ -3114,10 +3113,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (x == true) VeloX = c0o1; // if (z == true) VeloZ = c0o1; // feq=c1o54* (drho/*+three*(-vx1 +vx3)*/+c9o2*(-vx1 +vx3)*(-vx1 +vx3) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_P0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q) - c1o54 * drho; +// (D.f[dP0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q) - c1o54 * drho; // //feq=c1over54* (drho+three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); -// //(D.f[DIR_P0M])[kbe]=(one-q)/(one+q)*(f_TW-feq*om_turb)/(one-om_turb)+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q); -// //(D.f[DIR_P0M])[kbe]=zero; +// //(D.f[dP0M])[kbe]=(one-q)/(one+q)*(f_TW-feq*om_turb)/(one-om_turb)+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q); +// //(D.f[dP0M])[kbe]=zero; // } // q = q_dirTN[k]; @@ -3129,10 +3128,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (y == true) VeloY = c0o1; // if (z == true) VeloZ = c0o1; // feq=c1o54* (drho/*+three*( vx2+vx3)*/+c9o2*( vx2+vx3)*( vx2+vx3) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q) - c1o54 * drho; +// (D.f[d0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q) - c1o54 * drho; // //feq=c1over54* (drho+three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cu_sq); -// //(D.f[DIR_0MM])[kbs]=(one-q)/(one+q)*(f_TN-feq*om_turb)/(one-om_turb)+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q); -// //(D.f[DIR_0MM])[kbs]=zero; +// //(D.f[d0MM])[kbs]=(one-q)/(one+q)*(f_TN-feq*om_turb)/(one-om_turb)+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q); +// //(D.f[d0MM])[kbs]=zero; // } // q = q_dirBS[k]; @@ -3144,10 +3143,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (y == true) VeloY = c0o1; // if (z == true) VeloZ = c0o1; // feq=c1o54* (drho/*+three*( -vx2-vx3)*/+c9o2*( -vx2-vx3)*( -vx2-vx3) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q) - c1o54 * drho; +// (D.f[d0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q) - c1o54 * drho; // //feq=c1over54* (drho+three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); -// //(D.f[DIR_0PP])[ktn]=(one-q)/(one+q)*(f_BS-feq*om_turb)/(one-om_turb)+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q); -// //(D.f[DIR_0PP])[ktn]=zero; +// //(D.f[d0PP])[ktn]=(one-q)/(one+q)*(f_BS-feq*om_turb)/(one-om_turb)+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q); +// //(D.f[d0PP])[ktn]=zero; // } // q = q_dirBN[k]; @@ -3159,10 +3158,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (y == true) VeloY = c0o1; // if (z == true) VeloZ = c0o1; // feq=c1o54* (drho/*+three*( vx2-vx3)*/+c9o2*( vx2-vx3)*( vx2-vx3) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q) - c1o54 * drho; +// (D.f[d0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q) - c1o54 * drho; // //feq=c1over54* (drho+three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cu_sq); -// //(D.f[DIR_0MP])[kts]=(one-q)/(one+q)*(f_BN-feq*om_turb)/(one-om_turb)+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q); -// //(D.f[DIR_0MP])[kts]=zero; +// //(D.f[d0MP])[kts]=(one-q)/(one+q)*(f_BN-feq*om_turb)/(one-om_turb)+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q); +// //(D.f[d0MP])[kts]=zero; // } // q = q_dirTS[k]; @@ -3174,10 +3173,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (y == true) VeloY = c0o1; // if (z == true) VeloZ = c0o1; // feq=c1o54* (drho/*+three*( -vx2+vx3)*/+c9o2*( -vx2+vx3)*( -vx2+vx3) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q) - c1o54 * drho; +// (D.f[d0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q) - c1o54 * drho; // //feq=c1over54* (drho+three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); -// //(D.f[DIR_0PM])[kbn]=(one-q)/(one+q)*(f_TS-feq*om_turb)/(one-om_turb)+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q); -// //(D.f[DIR_0PM])[kbn]=zero; +// //(D.f[d0PM])[kbn]=(one-q)/(one+q)*(f_TS-feq*om_turb)/(one-om_turb)+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q); +// //(D.f[d0PM])[kbn]=zero; // } // q = q_dirTNE[k]; @@ -3190,10 +3189,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (y == true) VeloY = c0o1; // if (z == true) VeloZ = c0o1; // feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_MMM])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho; +// (D.f[dMMM])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho; // //feq=c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); -// //(D.f[DIR_MMM])[kbsw]=(one-q)/(one+q)*(f_TNE-feq*om_turb)/(one-om_turb)+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q); -// //(D.f[DIR_MMM])[kbsw]=zero; +// //(D.f[dMMM])[kbsw]=(one-q)/(one+q)*(f_TNE-feq*om_turb)/(one-om_turb)+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q); +// //(D.f[dMMM])[kbsw]=zero; // } // q = q_dirBSW[k]; @@ -3206,10 +3205,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (y == true) VeloY = c0o1; // if (z == true) VeloZ = c0o1; // feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_PPP])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho; +// (D.f[dPPP])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho; // //feq=c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); -// //(D.f[DIR_PPP])[ktne]=(one-q)/(one+q)*(f_BSW-feq*om_turb)/(one-om_turb)+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q); -// //(D.f[DIR_PPP])[ktne]=zero; +// //(D.f[dPPP])[ktne]=(one-q)/(one+q)*(f_BSW-feq*om_turb)/(one-om_turb)+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q); +// //(D.f[dPPP])[ktne]=zero; // } // q = q_dirBNE[k]; @@ -3222,10 +3221,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (y == true) VeloY = c0o1; // if (z == true) VeloZ = c0o1; // feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_MMP])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho; +// (D.f[dMMP])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho; // //feq=c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); -// //(D.f[DIR_MMP])[ktsw]=(one-q)/(one+q)*(f_BNE-feq*om_turb)/(one-om_turb)+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q); -// //(D.f[DIR_MMP])[ktsw]=zero; +// //(D.f[dMMP])[ktsw]=(one-q)/(one+q)*(f_BNE-feq*om_turb)/(one-om_turb)+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q); +// //(D.f[dMMP])[ktsw]=zero; // } // q = q_dirTSW[k]; @@ -3238,10 +3237,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (y == true) VeloY = c0o1; // if (z == true) VeloZ = c0o1; // feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_PPM])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho; +// (D.f[dPPM])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho; // //feq=c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); -// //(D.f[DIR_PPM])[kbne]=(one-q)/(one+q)*(f_TSW-feq*om_turb)/(one-om_turb)+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q); -// //(D.f[DIR_PPM])[kbne]=zero; +// //(D.f[dPPM])[kbne]=(one-q)/(one+q)*(f_TSW-feq*om_turb)/(one-om_turb)+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q); +// //(D.f[dPPM])[kbne]=zero; // } // q = q_dirTSE[k]; @@ -3254,10 +3253,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (y == true) VeloY = c0o1; // if (z == true) VeloZ = c0o1; // feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_MPM])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho; +// (D.f[dMPM])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho; // //feq=c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); -// //(D.f[DIR_MPM])[kbnw]=(one-q)/(one+q)*(f_TSE-feq*om_turb)/(one-om_turb)+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q); -// //(D.f[DIR_MPM])[kbnw]=zero; +// //(D.f[dMPM])[kbnw]=(one-q)/(one+q)*(f_TSE-feq*om_turb)/(one-om_turb)+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q); +// //(D.f[dMPM])[kbnw]=zero; // } // q = q_dirBNW[k]; @@ -3270,10 +3269,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (y == true) VeloY = c0o1; // if (z == true) VeloZ = c0o1; // feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_PMP])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho; +// (D.f[dPMP])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho; // //feq=c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); -// //(D.f[DIR_PMP])[ktse]=(one-q)/(one+q)*(f_BNW-feq*om_turb)/(one-om_turb)+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q); -// //(D.f[DIR_PMP])[ktse]=zero; +// //(D.f[dPMP])[ktse]=(one-q)/(one+q)*(f_BNW-feq*om_turb)/(one-om_turb)+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q); +// //(D.f[dPMP])[ktse]=zero; // } // q = q_dirBSE[k]; @@ -3286,10 +3285,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (y == true) VeloY = c0o1; // if (z == true) VeloZ = c0o1; // feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_MPP])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho; +// (D.f[dMPP])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho; // //feq=c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); -// //(D.f[DIR_MPP])[ktnw]=(one-q)/(one+q)*(f_BSE-feq*om_turb)/(one-om_turb)+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q); -// //(D.f[DIR_MPP])[ktnw]=zero; +// //(D.f[dMPP])[ktnw]=(one-q)/(one+q)*(f_BSE-feq*om_turb)/(one-om_turb)+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q); +// //(D.f[dMPP])[ktnw]=zero; // } // q = q_dirTNW[k]; @@ -3302,10 +3301,10 @@ __global__ void QSlipPressureDeviceComp27TurbViscosity( // if (y == true) VeloY = c0o1; // if (z == true) VeloZ = c0o1; // feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); -// (D.f[DIR_PMM])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho; +// (D.f[dPMM])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om_turb)/(c1o1-om_turb))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho; // //feq=c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); -// //(D.f[DIR_PMM])[kbse]=(one-q)/(one+q)*(f_TNW-feq*om_turb)/(one-om_turb)+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q); -// //(D.f[DIR_PMM])[kbse]=zero; +// //(D.f[dPMM])[kbse]=(one-q)/(one+q)*(f_TNW-feq*om_turb)/(one-om_turb)+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q); +// //(D.f[dPMM])[kbse]=zero; // } // } // } @@ -3366,63 +3365,63 @@ __global__ void QSlipGeomDeviceComp27( Distributions27 D; if (isEvenTimestep==true) { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; + 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[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; + 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]; } //////////////////////////////////////////////////////////////////////////////// const unsigned x = threadIdx.x; // Globaler x-Index @@ -3443,128 +3442,128 @@ __global__ void QSlipGeomDeviceComp27( *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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes]; + 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]; //////////////////////////////////////////////////////////////////////////////// real *nx_dirE, *nx_dirW, *nx_dirN, *nx_dirS, *nx_dirT, *nx_dirB, *nx_dirNE, *nx_dirSW, *nx_dirSE, *nx_dirNW, *nx_dirTE, *nx_dirBW, *nx_dirBE, *nx_dirTW, *nx_dirTN, *nx_dirBS, *nx_dirBN, *nx_dirTS, *nx_dirTNE, *nx_dirTSW, *nx_dirTSE, *nx_dirTNW, *nx_dirBNE, *nx_dirBSW, *nx_dirBSE, *nx_dirBNW; - nx_dirE = &NormalX[DIR_P00 * numberOfBCnodes]; - nx_dirW = &NormalX[DIR_M00 * numberOfBCnodes]; - nx_dirN = &NormalX[DIR_0P0 * numberOfBCnodes]; - nx_dirS = &NormalX[DIR_0M0 * numberOfBCnodes]; - nx_dirT = &NormalX[DIR_00P * numberOfBCnodes]; - nx_dirB = &NormalX[DIR_00M * numberOfBCnodes]; - nx_dirNE = &NormalX[DIR_PP0 * numberOfBCnodes]; - nx_dirSW = &NormalX[DIR_MM0 * numberOfBCnodes]; - nx_dirSE = &NormalX[DIR_PM0 * numberOfBCnodes]; - nx_dirNW = &NormalX[DIR_MP0 * numberOfBCnodes]; - nx_dirTE = &NormalX[DIR_P0P * numberOfBCnodes]; - nx_dirBW = &NormalX[DIR_M0M * numberOfBCnodes]; - nx_dirBE = &NormalX[DIR_P0M * numberOfBCnodes]; - nx_dirTW = &NormalX[DIR_M0P * numberOfBCnodes]; - nx_dirTN = &NormalX[DIR_0PP * numberOfBCnodes]; - nx_dirBS = &NormalX[DIR_0MM * numberOfBCnodes]; - nx_dirBN = &NormalX[DIR_0PM * numberOfBCnodes]; - nx_dirTS = &NormalX[DIR_0MP * numberOfBCnodes]; - nx_dirTNE = &NormalX[DIR_PPP * numberOfBCnodes]; - nx_dirTSW = &NormalX[DIR_MMP * numberOfBCnodes]; - nx_dirTSE = &NormalX[DIR_PMP * numberOfBCnodes]; - nx_dirTNW = &NormalX[DIR_MPP * numberOfBCnodes]; - nx_dirBNE = &NormalX[DIR_PPM * numberOfBCnodes]; - nx_dirBSW = &NormalX[DIR_MMM * numberOfBCnodes]; - nx_dirBSE = &NormalX[DIR_PMM * numberOfBCnodes]; - nx_dirBNW = &NormalX[DIR_MPM * numberOfBCnodes]; + nx_dirE = &NormalX[dP00 * numberOfBCnodes]; + nx_dirW = &NormalX[dM00 * numberOfBCnodes]; + nx_dirN = &NormalX[d0P0 * numberOfBCnodes]; + nx_dirS = &NormalX[d0M0 * numberOfBCnodes]; + nx_dirT = &NormalX[d00P * numberOfBCnodes]; + nx_dirB = &NormalX[d00M * numberOfBCnodes]; + nx_dirNE = &NormalX[dPP0 * numberOfBCnodes]; + nx_dirSW = &NormalX[dMM0 * numberOfBCnodes]; + nx_dirSE = &NormalX[dPM0 * numberOfBCnodes]; + nx_dirNW = &NormalX[dMP0 * numberOfBCnodes]; + nx_dirTE = &NormalX[dP0P * numberOfBCnodes]; + nx_dirBW = &NormalX[dM0M * numberOfBCnodes]; + nx_dirBE = &NormalX[dP0M * numberOfBCnodes]; + nx_dirTW = &NormalX[dM0P * numberOfBCnodes]; + nx_dirTN = &NormalX[d0PP * numberOfBCnodes]; + nx_dirBS = &NormalX[d0MM * numberOfBCnodes]; + nx_dirBN = &NormalX[d0PM * numberOfBCnodes]; + nx_dirTS = &NormalX[d0MP * numberOfBCnodes]; + nx_dirTNE = &NormalX[dPPP * numberOfBCnodes]; + nx_dirTSW = &NormalX[dMMP * numberOfBCnodes]; + nx_dirTSE = &NormalX[dPMP * numberOfBCnodes]; + nx_dirTNW = &NormalX[dMPP * numberOfBCnodes]; + nx_dirBNE = &NormalX[dPPM * numberOfBCnodes]; + nx_dirBSW = &NormalX[dMMM * numberOfBCnodes]; + nx_dirBSE = &NormalX[dPMM * numberOfBCnodes]; + nx_dirBNW = &NormalX[dMPM * numberOfBCnodes]; //////////////////////////////////////////////////////////////////////////////// real *ny_dirE, *ny_dirW, *ny_dirN, *ny_dirS, *ny_dirT, *ny_dirB, *ny_dirNE, *ny_dirSW, *ny_dirSE, *ny_dirNW, *ny_dirTE, *ny_dirBW, *ny_dirBE, *ny_dirTW, *ny_dirTN, *ny_dirBS, *ny_dirBN, *ny_dirTS, *ny_dirTNE, *ny_dirTSW, *ny_dirTSE, *ny_dirTNW, *ny_dirBNE, *ny_dirBSW, *ny_dirBSE, *ny_dirBNW; - ny_dirE = &NormalY[DIR_P00 * numberOfBCnodes]; - ny_dirW = &NormalY[DIR_M00 * numberOfBCnodes]; - ny_dirN = &NormalY[DIR_0P0 * numberOfBCnodes]; - ny_dirS = &NormalY[DIR_0M0 * numberOfBCnodes]; - ny_dirT = &NormalY[DIR_00P * numberOfBCnodes]; - ny_dirB = &NormalY[DIR_00M * numberOfBCnodes]; - ny_dirNE = &NormalY[DIR_PP0 * numberOfBCnodes]; - ny_dirSW = &NormalY[DIR_MM0 * numberOfBCnodes]; - ny_dirSE = &NormalY[DIR_PM0 * numberOfBCnodes]; - ny_dirNW = &NormalY[DIR_MP0 * numberOfBCnodes]; - ny_dirTE = &NormalY[DIR_P0P * numberOfBCnodes]; - ny_dirBW = &NormalY[DIR_M0M * numberOfBCnodes]; - ny_dirBE = &NormalY[DIR_P0M * numberOfBCnodes]; - ny_dirTW = &NormalY[DIR_M0P * numberOfBCnodes]; - ny_dirTN = &NormalY[DIR_0PP * numberOfBCnodes]; - ny_dirBS = &NormalY[DIR_0MM * numberOfBCnodes]; - ny_dirBN = &NormalY[DIR_0PM * numberOfBCnodes]; - ny_dirTS = &NormalY[DIR_0MP * numberOfBCnodes]; - ny_dirTNE = &NormalY[DIR_PPP * numberOfBCnodes]; - ny_dirTSW = &NormalY[DIR_MMP * numberOfBCnodes]; - ny_dirTSE = &NormalY[DIR_PMP * numberOfBCnodes]; - ny_dirTNW = &NormalY[DIR_MPP * numberOfBCnodes]; - ny_dirBNE = &NormalY[DIR_PPM * numberOfBCnodes]; - ny_dirBSW = &NormalY[DIR_MMM * numberOfBCnodes]; - ny_dirBSE = &NormalY[DIR_PMM * numberOfBCnodes]; - ny_dirBNW = &NormalY[DIR_MPM * numberOfBCnodes]; + ny_dirE = &NormalY[dP00 * numberOfBCnodes]; + ny_dirW = &NormalY[dM00 * numberOfBCnodes]; + ny_dirN = &NormalY[d0P0 * numberOfBCnodes]; + ny_dirS = &NormalY[d0M0 * numberOfBCnodes]; + ny_dirT = &NormalY[d00P * numberOfBCnodes]; + ny_dirB = &NormalY[d00M * numberOfBCnodes]; + ny_dirNE = &NormalY[dPP0 * numberOfBCnodes]; + ny_dirSW = &NormalY[dMM0 * numberOfBCnodes]; + ny_dirSE = &NormalY[dPM0 * numberOfBCnodes]; + ny_dirNW = &NormalY[dMP0 * numberOfBCnodes]; + ny_dirTE = &NormalY[dP0P * numberOfBCnodes]; + ny_dirBW = &NormalY[dM0M * numberOfBCnodes]; + ny_dirBE = &NormalY[dP0M * numberOfBCnodes]; + ny_dirTW = &NormalY[dM0P * numberOfBCnodes]; + ny_dirTN = &NormalY[d0PP * numberOfBCnodes]; + ny_dirBS = &NormalY[d0MM * numberOfBCnodes]; + ny_dirBN = &NormalY[d0PM * numberOfBCnodes]; + ny_dirTS = &NormalY[d0MP * numberOfBCnodes]; + ny_dirTNE = &NormalY[dPPP * numberOfBCnodes]; + ny_dirTSW = &NormalY[dMMP * numberOfBCnodes]; + ny_dirTSE = &NormalY[dPMP * numberOfBCnodes]; + ny_dirTNW = &NormalY[dMPP * numberOfBCnodes]; + ny_dirBNE = &NormalY[dPPM * numberOfBCnodes]; + ny_dirBSW = &NormalY[dMMM * numberOfBCnodes]; + ny_dirBSE = &NormalY[dPMM * numberOfBCnodes]; + ny_dirBNW = &NormalY[dMPM * numberOfBCnodes]; //////////////////////////////////////////////////////////////////////////////// real *nz_dirE, *nz_dirW, *nz_dirN, *nz_dirS, *nz_dirT, *nz_dirB, *nz_dirNE, *nz_dirSW, *nz_dirSE, *nz_dirNW, *nz_dirTE, *nz_dirBW, *nz_dirBE, *nz_dirTW, *nz_dirTN, *nz_dirBS, *nz_dirBN, *nz_dirTS, *nz_dirTNE, *nz_dirTSW, *nz_dirTSE, *nz_dirTNW, *nz_dirBNE, *nz_dirBSW, *nz_dirBSE, *nz_dirBNW; - nz_dirE = &NormalZ[DIR_P00 * numberOfBCnodes]; - nz_dirW = &NormalZ[DIR_M00 * numberOfBCnodes]; - nz_dirN = &NormalZ[DIR_0P0 * numberOfBCnodes]; - nz_dirS = &NormalZ[DIR_0M0 * numberOfBCnodes]; - nz_dirT = &NormalZ[DIR_00P * numberOfBCnodes]; - nz_dirB = &NormalZ[DIR_00M * numberOfBCnodes]; - nz_dirNE = &NormalZ[DIR_PP0 * numberOfBCnodes]; - nz_dirSW = &NormalZ[DIR_MM0 * numberOfBCnodes]; - nz_dirSE = &NormalZ[DIR_PM0 * numberOfBCnodes]; - nz_dirNW = &NormalZ[DIR_MP0 * numberOfBCnodes]; - nz_dirTE = &NormalZ[DIR_P0P * numberOfBCnodes]; - nz_dirBW = &NormalZ[DIR_M0M * numberOfBCnodes]; - nz_dirBE = &NormalZ[DIR_P0M * numberOfBCnodes]; - nz_dirTW = &NormalZ[DIR_M0P * numberOfBCnodes]; - nz_dirTN = &NormalZ[DIR_0PP * numberOfBCnodes]; - nz_dirBS = &NormalZ[DIR_0MM * numberOfBCnodes]; - nz_dirBN = &NormalZ[DIR_0PM * numberOfBCnodes]; - nz_dirTS = &NormalZ[DIR_0MP * numberOfBCnodes]; - nz_dirTNE = &NormalZ[DIR_PPP * numberOfBCnodes]; - nz_dirTSW = &NormalZ[DIR_MMP * numberOfBCnodes]; - nz_dirTSE = &NormalZ[DIR_PMP * numberOfBCnodes]; - nz_dirTNW = &NormalZ[DIR_MPP * numberOfBCnodes]; - nz_dirBNE = &NormalZ[DIR_PPM * numberOfBCnodes]; - nz_dirBSW = &NormalZ[DIR_MMM * numberOfBCnodes]; - nz_dirBSE = &NormalZ[DIR_PMM * numberOfBCnodes]; - nz_dirBNW = &NormalZ[DIR_MPM * numberOfBCnodes]; + nz_dirE = &NormalZ[dP00 * numberOfBCnodes]; + nz_dirW = &NormalZ[dM00 * numberOfBCnodes]; + nz_dirN = &NormalZ[d0P0 * numberOfBCnodes]; + nz_dirS = &NormalZ[d0M0 * numberOfBCnodes]; + nz_dirT = &NormalZ[d00P * numberOfBCnodes]; + nz_dirB = &NormalZ[d00M * numberOfBCnodes]; + nz_dirNE = &NormalZ[dPP0 * numberOfBCnodes]; + nz_dirSW = &NormalZ[dMM0 * numberOfBCnodes]; + nz_dirSE = &NormalZ[dPM0 * numberOfBCnodes]; + nz_dirNW = &NormalZ[dMP0 * numberOfBCnodes]; + nz_dirTE = &NormalZ[dP0P * numberOfBCnodes]; + nz_dirBW = &NormalZ[dM0M * numberOfBCnodes]; + nz_dirBE = &NormalZ[dP0M * numberOfBCnodes]; + nz_dirTW = &NormalZ[dM0P * numberOfBCnodes]; + nz_dirTN = &NormalZ[d0PP * numberOfBCnodes]; + nz_dirBS = &NormalZ[d0MM * numberOfBCnodes]; + nz_dirBN = &NormalZ[d0PM * numberOfBCnodes]; + nz_dirTS = &NormalZ[d0MP * numberOfBCnodes]; + nz_dirTNE = &NormalZ[dPPP * numberOfBCnodes]; + nz_dirTSW = &NormalZ[dMMP * numberOfBCnodes]; + nz_dirTSE = &NormalZ[dPMP * numberOfBCnodes]; + nz_dirTNW = &NormalZ[dMPP * numberOfBCnodes]; + nz_dirBNE = &NormalZ[dPPM * numberOfBCnodes]; + nz_dirBSW = &NormalZ[dMMM * numberOfBCnodes]; + nz_dirBSE = &NormalZ[dPMM * numberOfBCnodes]; + nz_dirBNW = &NormalZ[dMPM * numberOfBCnodes]; //////////////////////////////////////////////////////////////////////////////// //index unsigned int KQK = k_Q[k]; @@ -3596,37 +3595,37 @@ __global__ void QSlipGeomDeviceComp27( unsigned int ktne = KQK; unsigned int kbsw = neighborZ[ksw]; //////////////////////////////////////////////////////////////////////////////// - real f_W = (D.f[DIR_P00])[ke ]; - real f_E = (D.f[DIR_M00])[kw ]; - real f_S = (D.f[DIR_0P0])[kn ]; - real f_N = (D.f[DIR_0M0])[ks ]; - real f_B = (D.f[DIR_00P])[kt ]; - real f_T = (D.f[DIR_00M])[kb ]; - real f_SW = (D.f[DIR_PP0])[kne ]; - real f_NE = (D.f[DIR_MM0])[ksw ]; - real f_NW = (D.f[DIR_PM0])[kse ]; - real f_SE = (D.f[DIR_MP0])[knw ]; - real f_BW = (D.f[DIR_P0P])[kte ]; - real f_TE = (D.f[DIR_M0M])[kbw ]; - real f_TW = (D.f[DIR_P0M])[kbe ]; - real f_BE = (D.f[DIR_M0P])[ktw ]; - real f_BS = (D.f[DIR_0PP])[ktn ]; - real f_TN = (D.f[DIR_0MM])[kbs ]; - real f_TS = (D.f[DIR_0PM])[kbn ]; - real f_BN = (D.f[DIR_0MP])[kts ]; - real f_BSW = (D.f[DIR_PPP])[ktne ]; - real f_BNE = (D.f[DIR_MMP])[ktsw ]; - real f_BNW = (D.f[DIR_PMP])[ktse ]; - real f_BSE = (D.f[DIR_MPP])[ktnw ]; - real f_TSW = (D.f[DIR_PPM])[kbne ]; - real f_TNE = (D.f[DIR_MMM])[kbsw ]; - real f_TNW = (D.f[DIR_PMM])[kbse ]; - real f_TSE = (D.f[DIR_MPM])[kbnw ]; + 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, 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 + ((D.f[DIR_000])[kzero]); + 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)) + @@ -3646,63 +3645,63 @@ __global__ void QSlipGeomDeviceComp27( ////////////////////////////////////////////////////////////////////////// if (isEvenTimestep==false) { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; + 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[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; + 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]; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// real VeloX = vx1; @@ -3724,11 +3723,11 @@ __global__ void QSlipGeomDeviceComp27( //fac = fac * magS / (c1o3 * (one / om1 - c1o2)); // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //real *facAst = &QQ[DIR_000 * numberOfBCnodes]; + //real *facAst = &QQ[d000 * numberOfBCnodes]; //fac = fac * alpha + facAst[k] * (one - alpha); //facAst[k] = fac; - //(&QQ[DIR_000 * numberOfBCnodes])[KQK] = fac; + //(&QQ[d000 * numberOfBCnodes])[KQK] = fac; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////real uk = sqrtf(vx1*vx1 + vx2*vx2 + vx3*vx3); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -3777,84 +3776,84 @@ __global__ void QSlipGeomDeviceComp27( if (q>=c0o1 && q<=c1o1) { VeloX = vx1 - (vx1 * nx_dirE[k] + vx2 * ny_dirE[k] + vx3 * nz_dirE[k]) * nx_dirE[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! phi = fac / (q * fabs( nx_dirE[k]) + fac); VeloX *= phi; feq=c2o27* (drho/*+three*( vx1 )*/+c9o2*( vx1 )*( vx1 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M00])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX ))/(c1o1+q) - c2o27 * drho; + (D.f[dM00])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX ))/(c1o1+q) - c2o27 * drho; } q = q_dirW[k]; if (q>=c0o1 && q<=c1o1) { VeloX = vx1 - (vx1 * nx_dirW[k] + vx2 * ny_dirW[k] + vx3 * nz_dirW[k]) * nx_dirW[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! phi = fac / (q * fabs(-nx_dirW[k]) + fac); VeloX *= phi; feq=c2o27* (drho/*+three*(-vx1 )*/+c9o2*(-vx1 )*(-vx1 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P00])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX ))/(c1o1+q) - c2o27 * drho; + (D.f[dP00])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX ))/(c1o1+q) - c2o27 * drho; } q = q_dirN[k]; if (q>=c0o1 && q<=c1o1) { VeloY = vx2 - (vx1 * nx_dirN[k] + vx2 * ny_dirN[k] + vx3 * nz_dirN[k]) * ny_dirN[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! phi = fac / (q * fabs( ny_dirN[k]) + fac); VeloY *= phi; feq=c2o27* (drho/*+three*( vx2 )*/+c9o2*( vx2 )*( vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0M0])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY ))/(c1o1+q) - c2o27 * drho; + (D.f[d0M0])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY ))/(c1o1+q) - c2o27 * drho; } q = q_dirS[k]; if (q>=c0o1 && q<=c1o1) { VeloY = vx2 - (vx1 * nx_dirS[k] + vx2 * ny_dirS[k] + vx3 * nz_dirS[k]) * ny_dirS[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! phi = fac / (q * fabs(-ny_dirS[k]) + fac); VeloY *= phi; feq=c2o27* (drho/*+three*( -vx2 )*/+c9o2*( -vx2 )*( -vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0P0])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY ))/(c1o1+q) - c2o27 * drho; + (D.f[d0P0])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY ))/(c1o1+q) - c2o27 * drho; } q = q_dirT[k]; if (q>=c0o1 && q<=c1o1) { VeloZ = vx3 - (vx1 * nx_dirT[k] + vx2 * ny_dirT[k] + vx3 * nz_dirT[k]) * nz_dirT[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! phi = fac / (q * fabs( nz_dirT[k]) + fac); VeloZ *= phi; feq=c2o27* (drho/*+three*( vx3)*/+c9o2*( vx3)*( vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_00M])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ ))/(c1o1+q) - c2o27 * drho; + (D.f[d00M])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ ))/(c1o1+q) - c2o27 * drho; } q = q_dirB[k]; if (q>=c0o1 && q<=c1o1) { VeloZ = vx3 - (vx1 * nx_dirB[k] + vx2 * ny_dirB[k] + vx3 * nz_dirB[k]) * nz_dirB[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! phi = fac / (q * fabs(-nz_dirB[k]) + fac); VeloZ *= phi; feq=c2o27* (drho/*+three*( -vx3)*/+c9o2*( -vx3)*( -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_00P])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ ))/(c1o1+q) - c2o27 * drho; + (D.f[d00P])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ ))/(c1o1+q) - c2o27 * drho; } q = q_dirNE[k]; @@ -3862,7 +3861,7 @@ __global__ void QSlipGeomDeviceComp27( { VeloX = vx1 - (vx1 * nx_dirNE[k] + vx2 * ny_dirNE[k] + vx3 * nz_dirNE[k]) * nx_dirNE[k]; VeloY = vx2 - (vx1 * nx_dirNE[k] + vx2 * ny_dirNE[k] + vx3 * nz_dirNE[k]) * ny_dirNE[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -3870,7 +3869,7 @@ __global__ void QSlipGeomDeviceComp27( VeloX *= phi; VeloY *= phi; feq=c1o54* (drho/*+three*( vx1+vx2 )*/+c9o2*( vx1+vx2 )*( vx1+vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q) - c1o54 * drho; + (D.f[dMM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q) - c1o54 * drho; } q = q_dirSW[k]; @@ -3878,7 +3877,7 @@ __global__ void QSlipGeomDeviceComp27( { VeloX = vx1 - (vx1 * nx_dirSW[k] + vx2 * ny_dirSW[k] + vx3 * nz_dirSW[k]) * nx_dirSW[k]; VeloY = vx2 - (vx1 * nx_dirSW[k] + vx2 * ny_dirSW[k] + vx3 * nz_dirSW[k]) * ny_dirSW[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -3886,7 +3885,7 @@ __global__ void QSlipGeomDeviceComp27( VeloX *= phi; VeloY *= phi; feq=c1o54* (drho/*+three*(-vx1-vx2 )*/+c9o2*(-vx1-vx2 )*(-vx1-vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q) - c1o54 * drho; + (D.f[dPP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q) - c1o54 * drho; } q = q_dirSE[k]; @@ -3894,7 +3893,7 @@ __global__ void QSlipGeomDeviceComp27( { VeloX = vx1 - (vx1 * nx_dirSE[k] + vx2 * ny_dirSE[k] + vx3 * nz_dirSE[k]) * nx_dirSE[k]; VeloY = vx2 - (vx1 * nx_dirSE[k] + vx2 * ny_dirSE[k] + vx3 * nz_dirSE[k]) * ny_dirSE[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -3902,7 +3901,7 @@ __global__ void QSlipGeomDeviceComp27( VeloX *= phi; VeloY *= phi; feq=c1o54* (drho/*+three*( vx1-vx2 )*/+c9o2*( vx1-vx2 )*( vx1-vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q) - c1o54 * drho; + (D.f[dMP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q) - c1o54 * drho; } q = q_dirNW[k]; @@ -3910,7 +3909,7 @@ __global__ void QSlipGeomDeviceComp27( { VeloX = vx1 - (vx1 * nx_dirNW[k] + vx2 * ny_dirNW[k] + vx3 * nz_dirNW[k]) * nx_dirNW[k]; VeloY = vx2 - (vx1 * nx_dirNW[k] + vx2 * ny_dirNW[k] + vx3 * nz_dirNW[k]) * ny_dirNW[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -3918,7 +3917,7 @@ __global__ void QSlipGeomDeviceComp27( VeloX *= phi; VeloY *= phi; feq=c1o54* (drho/*+three*(-vx1+vx2 )*/+c9o2*(-vx1+vx2 )*(-vx1+vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q) - c1o54 * drho; + (D.f[dPM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q) - c1o54 * drho; } q = q_dirTE[k]; @@ -3926,7 +3925,7 @@ __global__ void QSlipGeomDeviceComp27( { VeloX = vx1 - (vx1 * nx_dirTE[k] + vx2 * ny_dirTE[k] + vx3 * nz_dirTE[k]) * nx_dirTE[k]; VeloZ = vx3 - (vx1 * nx_dirTE[k] + vx2 * ny_dirTE[k] + vx3 * nz_dirTE[k]) * nz_dirTE[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -3934,7 +3933,7 @@ __global__ void QSlipGeomDeviceComp27( VeloX *= phi; VeloZ *= phi; feq=c1o54* (drho/*+three*( vx1 +vx3)*/+c9o2*( vx1 +vx3)*( vx1 +vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q) - c1o54 * drho; + (D.f[dM0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q) - c1o54 * drho; } q = q_dirBW[k]; @@ -3942,7 +3941,7 @@ __global__ void QSlipGeomDeviceComp27( { VeloX = vx1 - (vx1 * nx_dirBW[k] + vx2 * ny_dirBW[k] + vx3 * nz_dirBW[k]) * nx_dirBW[k]; VeloZ = vx3 - (vx1 * nx_dirBW[k] + vx2 * ny_dirBW[k] + vx3 * nz_dirBW[k]) * nz_dirBW[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -3950,7 +3949,7 @@ __global__ void QSlipGeomDeviceComp27( VeloX *= phi; VeloZ *= phi; feq=c1o54* (drho/*+three*(-vx1 -vx3)*/+c9o2*(-vx1 -vx3)*(-vx1 -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q) - c1o54 * drho; + (D.f[dP0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q) - c1o54 * drho; } q = q_dirBE[k]; @@ -3958,7 +3957,7 @@ __global__ void QSlipGeomDeviceComp27( { VeloX = vx1 - (vx1 * nx_dirBE[k] + vx2 * ny_dirBE[k] + vx3 * nz_dirBE[k]) * nx_dirBE[k]; VeloZ = vx3 - (vx1 * nx_dirBE[k] + vx2 * ny_dirBE[k] + vx3 * nz_dirBE[k]) * nz_dirBE[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -3966,7 +3965,7 @@ __global__ void QSlipGeomDeviceComp27( VeloX *= phi; VeloZ *= phi; feq=c1o54* (drho/*+three*( vx1 -vx3)*/+c9o2*( vx1 -vx3)*( vx1 -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q) - c1o54 * drho; + (D.f[dM0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q) - c1o54 * drho; } q = q_dirTW[k]; @@ -3974,7 +3973,7 @@ __global__ void QSlipGeomDeviceComp27( { VeloX = vx1 - (vx1 * nx_dirTW[k] + vx2 * ny_dirTW[k] + vx3 * nz_dirTW[k]) * nx_dirTW[k]; VeloZ = vx3 - (vx1 * nx_dirTW[k] + vx2 * ny_dirTW[k] + vx3 * nz_dirTW[k]) * nz_dirTW[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -3982,7 +3981,7 @@ __global__ void QSlipGeomDeviceComp27( VeloX *= phi; VeloZ *= phi; feq=c1o54* (drho/*+three*(-vx1 +vx3)*/+c9o2*(-vx1 +vx3)*(-vx1 +vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q) - c1o54 * drho; + (D.f[dP0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q) - c1o54 * drho; } q = q_dirTN[k]; @@ -3990,7 +3989,7 @@ __global__ void QSlipGeomDeviceComp27( { VeloY = vx2 - (vx1 * nx_dirTN[k] + vx2 * ny_dirTN[k] + vx3 * nz_dirTN[k]) * ny_dirTN[k]; VeloZ = vx3 - (vx1 * nx_dirTN[k] + vx2 * ny_dirTN[k] + vx3 * nz_dirTN[k]) * nz_dirTN[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -3998,7 +3997,7 @@ __global__ void QSlipGeomDeviceComp27( VeloY *= phi; VeloZ *= phi; feq=c1o54* (drho/*+three*( vx2+vx3)*/+c9o2*( vx2+vx3)*( vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q) - c1o54 * drho; + (D.f[d0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q) - c1o54 * drho; } q = q_dirBS[k]; @@ -4006,7 +4005,7 @@ __global__ void QSlipGeomDeviceComp27( { VeloY = vx2 - (vx1 * nx_dirBS[k] + vx2 * ny_dirBS[k] + vx3 * nz_dirBS[k]) * ny_dirBS[k]; VeloZ = vx3 - (vx1 * nx_dirBS[k] + vx2 * ny_dirBS[k] + vx3 * nz_dirBS[k]) * nz_dirBS[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -4014,7 +4013,7 @@ __global__ void QSlipGeomDeviceComp27( VeloY *= phi; VeloZ *= phi; feq=c1o54* (drho/*+three*( -vx2-vx3)*/+c9o2*( -vx2-vx3)*( -vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q) - c1o54 * drho; + (D.f[d0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q) - c1o54 * drho; } q = q_dirBN[k]; @@ -4022,7 +4021,7 @@ __global__ void QSlipGeomDeviceComp27( { VeloY = vx2 - (vx1 * nx_dirBN[k] + vx2 * ny_dirBN[k] + vx3 * nz_dirBN[k]) * ny_dirBN[k]; VeloZ = vx3 - (vx1 * nx_dirBN[k] + vx2 * ny_dirBN[k] + vx3 * nz_dirBN[k]) * nz_dirBN[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -4030,7 +4029,7 @@ __global__ void QSlipGeomDeviceComp27( VeloY *= phi; VeloZ *= phi; feq=c1o54* (drho/*+three*( vx2-vx3)*/+c9o2*( vx2-vx3)*( vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q) - c1o54 * drho; + (D.f[d0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q) - c1o54 * drho; } q = q_dirTS[k]; @@ -4038,7 +4037,7 @@ __global__ void QSlipGeomDeviceComp27( { VeloY = vx2 - (vx1 * nx_dirTS[k] + vx2 * ny_dirTS[k] + vx3 * nz_dirTS[k]) * ny_dirTS[k]; VeloZ = vx3 - (vx1 * nx_dirTS[k] + vx2 * ny_dirTS[k] + vx3 * nz_dirTS[k]) * nz_dirTS[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -4046,7 +4045,7 @@ __global__ void QSlipGeomDeviceComp27( VeloY *= phi; VeloZ *= phi; feq=c1o54* (drho/*+three*( -vx2+vx3)*/+c9o2*( -vx2+vx3)*( -vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q) - c1o54 * drho; + (D.f[d0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q) - c1o54 * drho; } q = q_dirTNE[k]; @@ -4055,7 +4054,7 @@ __global__ void QSlipGeomDeviceComp27( VeloX = vx1 - (vx1 * nx_dirTNE[k] + vx2 * ny_dirTNE[k] + vx3 * nz_dirTNE[k]) * nx_dirTNE[k]; VeloY = vx2 - (vx1 * nx_dirTNE[k] + vx2 * ny_dirTNE[k] + vx3 * nz_dirTNE[k]) * ny_dirTNE[k]; VeloZ = vx3 - (vx1 * nx_dirTNE[k] + vx2 * ny_dirTNE[k] + vx3 * nz_dirTNE[k]) * nz_dirTNE[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -4064,7 +4063,7 @@ __global__ void QSlipGeomDeviceComp27( VeloY *= phi; VeloZ *= phi; feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MMM])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho; + (D.f[dMMM])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho; } q = q_dirBSW[k]; @@ -4073,7 +4072,7 @@ __global__ void QSlipGeomDeviceComp27( VeloX = vx1 - (vx1 * nx_dirBSW[k] + vx2 * ny_dirBSW[k] + vx3 * nz_dirBSW[k]) * nx_dirBSW[k]; VeloY = vx2 - (vx1 * nx_dirBSW[k] + vx2 * ny_dirBSW[k] + vx3 * nz_dirBSW[k]) * ny_dirBSW[k]; VeloZ = vx3 - (vx1 * nx_dirBSW[k] + vx2 * ny_dirBSW[k] + vx3 * nz_dirBSW[k]) * nz_dirBSW[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -4082,7 +4081,7 @@ __global__ void QSlipGeomDeviceComp27( VeloY *= phi; VeloZ *= phi; feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PPP])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho; + (D.f[dPPP])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho; } q = q_dirBNE[k]; @@ -4091,7 +4090,7 @@ __global__ void QSlipGeomDeviceComp27( VeloX = vx1 - (vx1 * nx_dirBNE[k] + vx2 * ny_dirBNE[k] + vx3 * nz_dirBNE[k]) * nx_dirBNE[k]; VeloY = vx2 - (vx1 * nx_dirBNE[k] + vx2 * ny_dirBNE[k] + vx3 * nz_dirBNE[k]) * ny_dirBNE[k]; VeloZ = vx3 - (vx1 * nx_dirBNE[k] + vx2 * ny_dirBNE[k] + vx3 * nz_dirBNE[k]) * nz_dirBNE[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -4100,7 +4099,7 @@ __global__ void QSlipGeomDeviceComp27( VeloY *= phi; VeloZ *= phi; feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MMP])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho; + (D.f[dMMP])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho; } q = q_dirTSW[k]; @@ -4109,7 +4108,7 @@ __global__ void QSlipGeomDeviceComp27( VeloX = vx1 - (vx1 * nx_dirTSW[k] + vx2 * ny_dirTSW[k] + vx3 * nz_dirTSW[k]) * nx_dirTSW[k]; VeloY = vx2 - (vx1 * nx_dirTSW[k] + vx2 * ny_dirTSW[k] + vx3 * nz_dirTSW[k]) * ny_dirTSW[k]; VeloZ = vx3 - (vx1 * nx_dirTSW[k] + vx2 * ny_dirTSW[k] + vx3 * nz_dirTSW[k]) * nz_dirTSW[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -4118,7 +4117,7 @@ __global__ void QSlipGeomDeviceComp27( VeloY *= phi; VeloZ *= phi; feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PPM])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho; + (D.f[dPPM])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho; } q = q_dirTSE[k]; @@ -4127,7 +4126,7 @@ __global__ void QSlipGeomDeviceComp27( VeloX = vx1 - (vx1 * nx_dirTSE[k] + vx2 * ny_dirTSE[k] + vx3 * nz_dirTSE[k]) * nx_dirTSE[k]; VeloY = vx2 - (vx1 * nx_dirTSE[k] + vx2 * ny_dirTSE[k] + vx3 * nz_dirTSE[k]) * ny_dirTSE[k]; VeloZ = vx3 - (vx1 * nx_dirTSE[k] + vx2 * ny_dirTSE[k] + vx3 * nz_dirTSE[k]) * nz_dirTSE[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -4136,7 +4135,7 @@ __global__ void QSlipGeomDeviceComp27( VeloY *= phi; VeloZ *= phi; feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MPM])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho; + (D.f[dMPM])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q) - c1o216 * drho; } q = q_dirBNW[k]; @@ -4145,7 +4144,7 @@ __global__ void QSlipGeomDeviceComp27( VeloX = vx1 - (vx1 * nx_dirBNW[k] + vx2 * ny_dirBNW[k] + vx3 * nz_dirBNW[k]) * nx_dirBNW[k]; VeloY = vx2 - (vx1 * nx_dirBNW[k] + vx2 * ny_dirBNW[k] + vx3 * nz_dirBNW[k]) * ny_dirBNW[k]; VeloZ = vx3 - (vx1 * nx_dirBNW[k] + vx2 * ny_dirBNW[k] + vx3 * nz_dirBNW[k]) * nz_dirBNW[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -4154,7 +4153,7 @@ __global__ void QSlipGeomDeviceComp27( VeloY *= phi; VeloZ *= phi; feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PMP])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho; + (D.f[dPMP])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q) - c1o216 * drho; } q = q_dirBSE[k]; @@ -4163,7 +4162,7 @@ __global__ void QSlipGeomDeviceComp27( VeloX = vx1 - (vx1 * nx_dirBSE[k] + vx2 * ny_dirBSE[k] + vx3 * nz_dirBSE[k]) * nx_dirBSE[k]; VeloY = vx2 - (vx1 * nx_dirBSE[k] + vx2 * ny_dirBSE[k] + vx3 * nz_dirBSE[k]) * ny_dirBSE[k]; VeloZ = vx3 - (vx1 * nx_dirBSE[k] + vx2 * ny_dirBSE[k] + vx3 * nz_dirBSE[k]) * nz_dirBSE[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = (phi > one) ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -4172,7 +4171,7 @@ __global__ void QSlipGeomDeviceComp27( VeloY *= phi; VeloZ *= phi; feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MPP])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho; + (D.f[dMPP])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q) - c1o216 * drho; } q = q_dirTNW[k]; @@ -4181,7 +4180,7 @@ __global__ void QSlipGeomDeviceComp27( VeloX = vx1 - (vx1 * nx_dirTNW[k] + vx2 * ny_dirTNW[k] + vx3 * nz_dirTNW[k]) * nx_dirTNW[k]; VeloY = vx2 - (vx1 * nx_dirTNW[k] + vx2 * ny_dirTNW[k] + vx3 * nz_dirTNW[k]) * ny_dirTNW[k]; VeloZ = vx3 - (vx1 * nx_dirTNW[k] + vx2 * ny_dirTNW[k] + vx3 * nz_dirTNW[k]) * nz_dirTNW[k]; - //phi = fac * (one + magS / (Op0000002+uk) * (one-q)); + //phi = fac * (one + magS / (c0p0000002+uk) * (one-q)); //phi = phi > one ? one:phi; //phi = fac; //Test q = testQ; //AAAAHHHHHH bitte wieder raus nehmen!!!! @@ -4190,7 +4189,7 @@ __global__ void QSlipGeomDeviceComp27( VeloY *= phi; VeloZ *= phi; feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PMM])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho; + (D.f[dPMM])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q) - c1o216 * drho; } } } @@ -4253,63 +4252,63 @@ __global__ void QSlipNormDeviceComp27( Distributions27 D; if (isEvenTimestep==true) { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; + 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[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; + 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]; } //////////////////////////////////////////////////////////////////////////////// const unsigned x = threadIdx.x; // Globaler x-Index @@ -4330,128 +4329,128 @@ __global__ void QSlipNormDeviceComp27( *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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes]; + 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]; //////////////////////////////////////////////////////////////////////////////// real *nx_dirE, *nx_dirW, *nx_dirN, *nx_dirS, *nx_dirT, *nx_dirB, *nx_dirNE, *nx_dirSW, *nx_dirSE, *nx_dirNW, *nx_dirTE, *nx_dirBW, *nx_dirBE, *nx_dirTW, *nx_dirTN, *nx_dirBS, *nx_dirBN, *nx_dirTS, *nx_dirTNE, *nx_dirTSW, *nx_dirTSE, *nx_dirTNW, *nx_dirBNE, *nx_dirBSW, *nx_dirBSE, *nx_dirBNW; - nx_dirE = &NormalX[DIR_P00 * numberOfBCnodes]; - nx_dirW = &NormalX[DIR_M00 * numberOfBCnodes]; - nx_dirN = &NormalX[DIR_0P0 * numberOfBCnodes]; - nx_dirS = &NormalX[DIR_0M0 * numberOfBCnodes]; - nx_dirT = &NormalX[DIR_00P * numberOfBCnodes]; - nx_dirB = &NormalX[DIR_00M * numberOfBCnodes]; - nx_dirNE = &NormalX[DIR_PP0 * numberOfBCnodes]; - nx_dirSW = &NormalX[DIR_MM0 * numberOfBCnodes]; - nx_dirSE = &NormalX[DIR_PM0 * numberOfBCnodes]; - nx_dirNW = &NormalX[DIR_MP0 * numberOfBCnodes]; - nx_dirTE = &NormalX[DIR_P0P * numberOfBCnodes]; - nx_dirBW = &NormalX[DIR_M0M * numberOfBCnodes]; - nx_dirBE = &NormalX[DIR_P0M * numberOfBCnodes]; - nx_dirTW = &NormalX[DIR_M0P * numberOfBCnodes]; - nx_dirTN = &NormalX[DIR_0PP * numberOfBCnodes]; - nx_dirBS = &NormalX[DIR_0MM * numberOfBCnodes]; - nx_dirBN = &NormalX[DIR_0PM * numberOfBCnodes]; - nx_dirTS = &NormalX[DIR_0MP * numberOfBCnodes]; - nx_dirTNE = &NormalX[DIR_PPP * numberOfBCnodes]; - nx_dirTSW = &NormalX[DIR_MMP * numberOfBCnodes]; - nx_dirTSE = &NormalX[DIR_PMP * numberOfBCnodes]; - nx_dirTNW = &NormalX[DIR_MPP * numberOfBCnodes]; - nx_dirBNE = &NormalX[DIR_PPM * numberOfBCnodes]; - nx_dirBSW = &NormalX[DIR_MMM * numberOfBCnodes]; - nx_dirBSE = &NormalX[DIR_PMM * numberOfBCnodes]; - nx_dirBNW = &NormalX[DIR_MPM * numberOfBCnodes]; + nx_dirE = &NormalX[dP00 * numberOfBCnodes]; + nx_dirW = &NormalX[dM00 * numberOfBCnodes]; + nx_dirN = &NormalX[d0P0 * numberOfBCnodes]; + nx_dirS = &NormalX[d0M0 * numberOfBCnodes]; + nx_dirT = &NormalX[d00P * numberOfBCnodes]; + nx_dirB = &NormalX[d00M * numberOfBCnodes]; + nx_dirNE = &NormalX[dPP0 * numberOfBCnodes]; + nx_dirSW = &NormalX[dMM0 * numberOfBCnodes]; + nx_dirSE = &NormalX[dPM0 * numberOfBCnodes]; + nx_dirNW = &NormalX[dMP0 * numberOfBCnodes]; + nx_dirTE = &NormalX[dP0P * numberOfBCnodes]; + nx_dirBW = &NormalX[dM0M * numberOfBCnodes]; + nx_dirBE = &NormalX[dP0M * numberOfBCnodes]; + nx_dirTW = &NormalX[dM0P * numberOfBCnodes]; + nx_dirTN = &NormalX[d0PP * numberOfBCnodes]; + nx_dirBS = &NormalX[d0MM * numberOfBCnodes]; + nx_dirBN = &NormalX[d0PM * numberOfBCnodes]; + nx_dirTS = &NormalX[d0MP * numberOfBCnodes]; + nx_dirTNE = &NormalX[dPPP * numberOfBCnodes]; + nx_dirTSW = &NormalX[dMMP * numberOfBCnodes]; + nx_dirTSE = &NormalX[dPMP * numberOfBCnodes]; + nx_dirTNW = &NormalX[dMPP * numberOfBCnodes]; + nx_dirBNE = &NormalX[dPPM * numberOfBCnodes]; + nx_dirBSW = &NormalX[dMMM * numberOfBCnodes]; + nx_dirBSE = &NormalX[dPMM * numberOfBCnodes]; + nx_dirBNW = &NormalX[dMPM * numberOfBCnodes]; //////////////////////////////////////////////////////////////////////////////// real *ny_dirE, *ny_dirW, *ny_dirN, *ny_dirS, *ny_dirT, *ny_dirB, *ny_dirNE, *ny_dirSW, *ny_dirSE, *ny_dirNW, *ny_dirTE, *ny_dirBW, *ny_dirBE, *ny_dirTW, *ny_dirTN, *ny_dirBS, *ny_dirBN, *ny_dirTS, *ny_dirTNE, *ny_dirTSW, *ny_dirTSE, *ny_dirTNW, *ny_dirBNE, *ny_dirBSW, *ny_dirBSE, *ny_dirBNW; - ny_dirE = &NormalY[DIR_P00 * numberOfBCnodes]; - ny_dirW = &NormalY[DIR_M00 * numberOfBCnodes]; - ny_dirN = &NormalY[DIR_0P0 * numberOfBCnodes]; - ny_dirS = &NormalY[DIR_0M0 * numberOfBCnodes]; - ny_dirT = &NormalY[DIR_00P * numberOfBCnodes]; - ny_dirB = &NormalY[DIR_00M * numberOfBCnodes]; - ny_dirNE = &NormalY[DIR_PP0 * numberOfBCnodes]; - ny_dirSW = &NormalY[DIR_MM0 * numberOfBCnodes]; - ny_dirSE = &NormalY[DIR_PM0 * numberOfBCnodes]; - ny_dirNW = &NormalY[DIR_MP0 * numberOfBCnodes]; - ny_dirTE = &NormalY[DIR_P0P * numberOfBCnodes]; - ny_dirBW = &NormalY[DIR_M0M * numberOfBCnodes]; - ny_dirBE = &NormalY[DIR_P0M * numberOfBCnodes]; - ny_dirTW = &NormalY[DIR_M0P * numberOfBCnodes]; - ny_dirTN = &NormalY[DIR_0PP * numberOfBCnodes]; - ny_dirBS = &NormalY[DIR_0MM * numberOfBCnodes]; - ny_dirBN = &NormalY[DIR_0PM * numberOfBCnodes]; - ny_dirTS = &NormalY[DIR_0MP * numberOfBCnodes]; - ny_dirTNE = &NormalY[DIR_PPP * numberOfBCnodes]; - ny_dirTSW = &NormalY[DIR_MMP * numberOfBCnodes]; - ny_dirTSE = &NormalY[DIR_PMP * numberOfBCnodes]; - ny_dirTNW = &NormalY[DIR_MPP * numberOfBCnodes]; - ny_dirBNE = &NormalY[DIR_PPM * numberOfBCnodes]; - ny_dirBSW = &NormalY[DIR_MMM * numberOfBCnodes]; - ny_dirBSE = &NormalY[DIR_PMM * numberOfBCnodes]; - ny_dirBNW = &NormalY[DIR_MPM * numberOfBCnodes]; + ny_dirE = &NormalY[dP00 * numberOfBCnodes]; + ny_dirW = &NormalY[dM00 * numberOfBCnodes]; + ny_dirN = &NormalY[d0P0 * numberOfBCnodes]; + ny_dirS = &NormalY[d0M0 * numberOfBCnodes]; + ny_dirT = &NormalY[d00P * numberOfBCnodes]; + ny_dirB = &NormalY[d00M * numberOfBCnodes]; + ny_dirNE = &NormalY[dPP0 * numberOfBCnodes]; + ny_dirSW = &NormalY[dMM0 * numberOfBCnodes]; + ny_dirSE = &NormalY[dPM0 * numberOfBCnodes]; + ny_dirNW = &NormalY[dMP0 * numberOfBCnodes]; + ny_dirTE = &NormalY[dP0P * numberOfBCnodes]; + ny_dirBW = &NormalY[dM0M * numberOfBCnodes]; + ny_dirBE = &NormalY[dP0M * numberOfBCnodes]; + ny_dirTW = &NormalY[dM0P * numberOfBCnodes]; + ny_dirTN = &NormalY[d0PP * numberOfBCnodes]; + ny_dirBS = &NormalY[d0MM * numberOfBCnodes]; + ny_dirBN = &NormalY[d0PM * numberOfBCnodes]; + ny_dirTS = &NormalY[d0MP * numberOfBCnodes]; + ny_dirTNE = &NormalY[dPPP * numberOfBCnodes]; + ny_dirTSW = &NormalY[dMMP * numberOfBCnodes]; + ny_dirTSE = &NormalY[dPMP * numberOfBCnodes]; + ny_dirTNW = &NormalY[dMPP * numberOfBCnodes]; + ny_dirBNE = &NormalY[dPPM * numberOfBCnodes]; + ny_dirBSW = &NormalY[dMMM * numberOfBCnodes]; + ny_dirBSE = &NormalY[dPMM * numberOfBCnodes]; + ny_dirBNW = &NormalY[dMPM * numberOfBCnodes]; //////////////////////////////////////////////////////////////////////////////// real *nz_dirE, *nz_dirW, *nz_dirN, *nz_dirS, *nz_dirT, *nz_dirB, *nz_dirNE, *nz_dirSW, *nz_dirSE, *nz_dirNW, *nz_dirTE, *nz_dirBW, *nz_dirBE, *nz_dirTW, *nz_dirTN, *nz_dirBS, *nz_dirBN, *nz_dirTS, *nz_dirTNE, *nz_dirTSW, *nz_dirTSE, *nz_dirTNW, *nz_dirBNE, *nz_dirBSW, *nz_dirBSE, *nz_dirBNW; - nz_dirE = &NormalZ[DIR_P00 * numberOfBCnodes]; - nz_dirW = &NormalZ[DIR_M00 * numberOfBCnodes]; - nz_dirN = &NormalZ[DIR_0P0 * numberOfBCnodes]; - nz_dirS = &NormalZ[DIR_0M0 * numberOfBCnodes]; - nz_dirT = &NormalZ[DIR_00P * numberOfBCnodes]; - nz_dirB = &NormalZ[DIR_00M * numberOfBCnodes]; - nz_dirNE = &NormalZ[DIR_PP0 * numberOfBCnodes]; - nz_dirSW = &NormalZ[DIR_MM0 * numberOfBCnodes]; - nz_dirSE = &NormalZ[DIR_PM0 * numberOfBCnodes]; - nz_dirNW = &NormalZ[DIR_MP0 * numberOfBCnodes]; - nz_dirTE = &NormalZ[DIR_P0P * numberOfBCnodes]; - nz_dirBW = &NormalZ[DIR_M0M * numberOfBCnodes]; - nz_dirBE = &NormalZ[DIR_P0M * numberOfBCnodes]; - nz_dirTW = &NormalZ[DIR_M0P * numberOfBCnodes]; - nz_dirTN = &NormalZ[DIR_0PP * numberOfBCnodes]; - nz_dirBS = &NormalZ[DIR_0MM * numberOfBCnodes]; - nz_dirBN = &NormalZ[DIR_0PM * numberOfBCnodes]; - nz_dirTS = &NormalZ[DIR_0MP * numberOfBCnodes]; - nz_dirTNE = &NormalZ[DIR_PPP * numberOfBCnodes]; - nz_dirTSW = &NormalZ[DIR_MMP * numberOfBCnodes]; - nz_dirTSE = &NormalZ[DIR_PMP * numberOfBCnodes]; - nz_dirTNW = &NormalZ[DIR_MPP * numberOfBCnodes]; - nz_dirBNE = &NormalZ[DIR_PPM * numberOfBCnodes]; - nz_dirBSW = &NormalZ[DIR_MMM * numberOfBCnodes]; - nz_dirBSE = &NormalZ[DIR_PMM * numberOfBCnodes]; - nz_dirBNW = &NormalZ[DIR_MPM * numberOfBCnodes]; + nz_dirE = &NormalZ[dP00 * numberOfBCnodes]; + nz_dirW = &NormalZ[dM00 * numberOfBCnodes]; + nz_dirN = &NormalZ[d0P0 * numberOfBCnodes]; + nz_dirS = &NormalZ[d0M0 * numberOfBCnodes]; + nz_dirT = &NormalZ[d00P * numberOfBCnodes]; + nz_dirB = &NormalZ[d00M * numberOfBCnodes]; + nz_dirNE = &NormalZ[dPP0 * numberOfBCnodes]; + nz_dirSW = &NormalZ[dMM0 * numberOfBCnodes]; + nz_dirSE = &NormalZ[dPM0 * numberOfBCnodes]; + nz_dirNW = &NormalZ[dMP0 * numberOfBCnodes]; + nz_dirTE = &NormalZ[dP0P * numberOfBCnodes]; + nz_dirBW = &NormalZ[dM0M * numberOfBCnodes]; + nz_dirBE = &NormalZ[dP0M * numberOfBCnodes]; + nz_dirTW = &NormalZ[dM0P * numberOfBCnodes]; + nz_dirTN = &NormalZ[d0PP * numberOfBCnodes]; + nz_dirBS = &NormalZ[d0MM * numberOfBCnodes]; + nz_dirBN = &NormalZ[d0PM * numberOfBCnodes]; + nz_dirTS = &NormalZ[d0MP * numberOfBCnodes]; + nz_dirTNE = &NormalZ[dPPP * numberOfBCnodes]; + nz_dirTSW = &NormalZ[dMMP * numberOfBCnodes]; + nz_dirTSE = &NormalZ[dPMP * numberOfBCnodes]; + nz_dirTNW = &NormalZ[dMPP * numberOfBCnodes]; + nz_dirBNE = &NormalZ[dPPM * numberOfBCnodes]; + nz_dirBSW = &NormalZ[dMMM * numberOfBCnodes]; + nz_dirBSE = &NormalZ[dPMM * numberOfBCnodes]; + nz_dirBNW = &NormalZ[dMPM * numberOfBCnodes]; //////////////////////////////////////////////////////////////////////////////// //index unsigned int KQK = k_Q[k]; @@ -4483,37 +4482,37 @@ __global__ void QSlipNormDeviceComp27( unsigned int ktne = KQK; unsigned int kbsw = neighborZ[ksw]; //////////////////////////////////////////////////////////////////////////////// - real f_W = (D.f[DIR_P00])[ke ]; - real f_E = (D.f[DIR_M00])[kw ]; - real f_S = (D.f[DIR_0P0])[kn ]; - real f_N = (D.f[DIR_0M0])[ks ]; - real f_B = (D.f[DIR_00P])[kt ]; - real f_T = (D.f[DIR_00M])[kb ]; - real f_SW = (D.f[DIR_PP0])[kne ]; - real f_NE = (D.f[DIR_MM0])[ksw ]; - real f_NW = (D.f[DIR_PM0])[kse ]; - real f_SE = (D.f[DIR_MP0])[knw ]; - real f_BW = (D.f[DIR_P0P])[kte ]; - real f_TE = (D.f[DIR_M0M])[kbw ]; - real f_TW = (D.f[DIR_P0M])[kbe ]; - real f_BE = (D.f[DIR_M0P])[ktw ]; - real f_BS = (D.f[DIR_0PP])[ktn ]; - real f_TN = (D.f[DIR_0MM])[kbs ]; - real f_TS = (D.f[DIR_0PM])[kbn ]; - real f_BN = (D.f[DIR_0MP])[kts ]; - real f_BSW = (D.f[DIR_PPP])[ktne ]; - real f_BNE = (D.f[DIR_MMP])[ktsw ]; - real f_BNW = (D.f[DIR_PMP])[ktse ]; - real f_BSE = (D.f[DIR_MPP])[ktnw ]; - real f_TSW = (D.f[DIR_PPM])[kbne ]; - real f_TNE = (D.f[DIR_MMM])[kbsw ]; - real f_TNW = (D.f[DIR_PMM])[kbse ]; - real f_TSE = (D.f[DIR_MPM])[kbnw ]; + 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, 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 + ((D.f[DIR_000])[kzero]); + 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)) + @@ -4533,63 +4532,63 @@ __global__ void QSlipNormDeviceComp27( ////////////////////////////////////////////////////////////////////////// if (isEvenTimestep==false) { - D.f[DIR_P00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_M00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_PMP * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_MPM * numberOfLBnodes]; + 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[DIR_M00] = &DD[DIR_P00 * numberOfLBnodes]; - D.f[DIR_P00] = &DD[DIR_M00 * numberOfLBnodes]; - D.f[DIR_0M0] = &DD[DIR_0P0 * numberOfLBnodes]; - D.f[DIR_0P0] = &DD[DIR_0M0 * numberOfLBnodes]; - D.f[DIR_00M] = &DD[DIR_00P * numberOfLBnodes]; - D.f[DIR_00P] = &DD[DIR_00M * numberOfLBnodes]; - D.f[DIR_MM0] = &DD[DIR_PP0 * numberOfLBnodes]; - D.f[DIR_PP0] = &DD[DIR_MM0 * numberOfLBnodes]; - D.f[DIR_MP0] = &DD[DIR_PM0 * numberOfLBnodes]; - D.f[DIR_PM0] = &DD[DIR_MP0 * numberOfLBnodes]; - D.f[DIR_M0M] = &DD[DIR_P0P * numberOfLBnodes]; - D.f[DIR_P0P] = &DD[DIR_M0M * numberOfLBnodes]; - D.f[DIR_M0P] = &DD[DIR_P0M * numberOfLBnodes]; - D.f[DIR_P0M] = &DD[DIR_M0P * numberOfLBnodes]; - D.f[DIR_0MM] = &DD[DIR_0PP * numberOfLBnodes]; - D.f[DIR_0PP] = &DD[DIR_0MM * numberOfLBnodes]; - D.f[DIR_0MP] = &DD[DIR_0PM * numberOfLBnodes]; - D.f[DIR_0PM] = &DD[DIR_0MP * numberOfLBnodes]; - D.f[DIR_000] = &DD[DIR_000 * numberOfLBnodes]; - D.f[DIR_PPP] = &DD[DIR_MMM * numberOfLBnodes]; - D.f[DIR_MMP] = &DD[DIR_PPM * numberOfLBnodes]; - D.f[DIR_PMP] = &DD[DIR_MPM * numberOfLBnodes]; - D.f[DIR_MPP] = &DD[DIR_PMM * numberOfLBnodes]; - D.f[DIR_PPM] = &DD[DIR_MMP * numberOfLBnodes]; - D.f[DIR_MMM] = &DD[DIR_PPP * numberOfLBnodes]; - D.f[DIR_PMM] = &DD[DIR_MPP * numberOfLBnodes]; - D.f[DIR_MPM] = &DD[DIR_PMP * numberOfLBnodes]; + 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]; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// real VeloX = vx1; @@ -4611,11 +4610,11 @@ __global__ void QSlipNormDeviceComp27( fac = fac * magS / (c1o3 * (c1o1 / om1 - c1o2)); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real *facAst = &QQ[DIR_000 * numberOfBCnodes]; + real *facAst = &QQ[d000 * numberOfBCnodes]; fac = fac * alpha + facAst[k] * (c1o1 - alpha); facAst[k] = fac; - //(&QQ[DIR_000 * numberOfBCnodes])[KQK] = fac; + //(&QQ[d000 * numberOfBCnodes])[KQK] = fac; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ////real uk = sqrtf(vx1*vx1 + vx2*vx2 + vx3*vx3); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -4663,7 +4662,7 @@ __global__ void QSlipNormDeviceComp27( real un = c0o1; real ut = c0o1; real tangential = c0o1; - //real smallSingle = Op0000002; + //real cSmallSingle = c0p0000002; q = q_dirE[k]; if (q>=c0o1 && q<=c1o1) @@ -4671,13 +4670,13 @@ __global__ void QSlipNormDeviceComp27( VeloX = vx1 - (vx1 * nx_dirE[k] + vx2 * ny_dirE[k] + vx3 * nz_dirE[k]) * nx_dirE[k]; un = fabs((vx1 * nx_dirE[k] + vx2 * ny_dirE[k] + vx3 * nz_dirE[k]) * nx_dirE[k]); ut = fabs(VeloX); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs( nx_dirE[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c2o27* (drho/*+three*( vx1 )*/+c9o2*( vx1 )*( vx1 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M00])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W))/(c1o1+q) - c2o27 * drho; + (D.f[dM00])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W))/(c1o1+q) - c2o27 * drho; } q = q_dirW[k]; @@ -4686,13 +4685,13 @@ __global__ void QSlipNormDeviceComp27( VeloX = vx1 - (vx1 * nx_dirW[k] + vx2 * ny_dirW[k] + vx3 * nz_dirW[k]) * nx_dirW[k]; un = fabs(-(vx1 * nx_dirW[k] + vx2 * ny_dirW[k] + vx3 * nz_dirW[k]) * nx_dirW[k]); ut = fabs(-VeloX); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs(-nx_dirW[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c2o27* (drho/*+three*(-vx1 )*/+c9o2*(-vx1 )*(-vx1 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P00])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E))/(c1o1+q) - c2o27 * drho; + (D.f[dP00])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E))/(c1o1+q) - c2o27 * drho; } q = q_dirN[k]; @@ -4701,13 +4700,13 @@ __global__ void QSlipNormDeviceComp27( VeloY = vx2 - (vx1 * nx_dirN[k] + vx2 * ny_dirN[k] + vx3 * nz_dirN[k]) * ny_dirN[k]; un = fabs( (vx1 * nx_dirN[k] + vx2 * ny_dirN[k] + vx3 * nz_dirN[k]) * ny_dirN[k]); ut = fabs( VeloY); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs( ny_dirN[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c2o27* (drho/*+three*( vx2 )*/+c9o2*( vx2 )*( vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0M0])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S))/(c1o1+q) - c2o27 * drho; + (D.f[d0M0])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S))/(c1o1+q) - c2o27 * drho; } q = q_dirS[k]; @@ -4716,13 +4715,13 @@ __global__ void QSlipNormDeviceComp27( VeloY = vx2 - (vx1 * nx_dirS[k] + vx2 * ny_dirS[k] + vx3 * nz_dirS[k]) * ny_dirS[k]; un = fabs(-(vx1 * nx_dirS[k] + vx2 * ny_dirS[k] + vx3 * nz_dirS[k]) * ny_dirS[k]); ut = fabs(-VeloY); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs(-ny_dirS[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c2o27* (drho/*+three*( -vx2 )*/+c9o2*( -vx2 )*( -vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0P0])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N))/(c1o1+q) - c2o27 * drho; + (D.f[d0P0])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N))/(c1o1+q) - c2o27 * drho; } q = q_dirT[k]; @@ -4731,13 +4730,13 @@ __global__ void QSlipNormDeviceComp27( VeloZ = vx3 - (vx1 * nx_dirT[k] + vx2 * ny_dirT[k] + vx3 * nz_dirT[k]) * nz_dirT[k]; un = fabs( (vx1 * nx_dirT[k] + vx2 * ny_dirT[k] + vx3 * nz_dirT[k]) * nz_dirT[k]); ut = fabs( VeloZ); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs( nz_dirT[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c2o27* (drho/*+three*( vx3)*/+c9o2*( vx3)*( vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_00M])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B))/(c1o1+q) - c2o27 * drho; + (D.f[d00M])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B))/(c1o1+q) - c2o27 * drho; } q = q_dirB[k]; @@ -4746,13 +4745,13 @@ __global__ void QSlipNormDeviceComp27( VeloZ = vx3 - (vx1 * nx_dirB[k] + vx2 * ny_dirB[k] + vx3 * nz_dirB[k]) * nz_dirB[k]; un = fabs(-(vx1 * nx_dirB[k] + vx2 * ny_dirB[k] + vx3 * nz_dirB[k]) * nz_dirB[k]); ut = fabs(-VeloZ); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs(-nz_dirB[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c2o27* (drho/*+three*( -vx3)*/+c9o2*( -vx3)*( -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_00P])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T))/(c1o1+q) - c2o27 * drho; + (D.f[d00P])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T))/(c1o1+q) - c2o27 * drho; } q = q_dirNE[k]; @@ -4762,13 +4761,13 @@ __global__ void QSlipNormDeviceComp27( VeloY = vx2 - (vx1 * nx_dirNE[k] + vx2 * ny_dirNE[k] + vx3 * nz_dirNE[k]) * ny_dirNE[k]; un = fabs( (vx1 * nx_dirNE[k] + vx2 * ny_dirNE[k] + vx3 * nz_dirNE[k]) * nx_dirNE[k] + (vx1 * nx_dirNE[k] + vx2 * ny_dirNE[k] + vx3 * nz_dirNE[k]) * ny_dirNE[k]); ut = fabs( VeloX + VeloY); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs( nx_dirNE[k]+ny_dirNE[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o54* (drho/*+three*( vx1+vx2 )*/+c9o2*( vx1+vx2 )*( vx1+vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW))/(c1o1+q) - c1o54 * drho; + (D.f[dMM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW))/(c1o1+q) - c1o54 * drho; } q = q_dirSW[k]; @@ -4778,13 +4777,13 @@ __global__ void QSlipNormDeviceComp27( VeloY = vx2 - (vx1 * nx_dirSW[k] + vx2 * ny_dirSW[k] + vx3 * nz_dirSW[k]) * ny_dirSW[k]; un = fabs(-(vx1 * nx_dirSW[k] + vx2 * ny_dirSW[k] + vx3 * nz_dirSW[k]) * nx_dirSW[k] - (vx1 * nx_dirSW[k] + vx2 * ny_dirSW[k] + vx3 * nz_dirSW[k]) * ny_dirSW[k]); ut = fabs(-VeloX - VeloY); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs(-nx_dirSW[k]-ny_dirSW[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o54* (drho/*+three*(-vx1-vx2 )*/+c9o2*(-vx1-vx2 )*(-vx1-vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE))/(c1o1+q) - c1o54 * drho; + (D.f[dPP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE))/(c1o1+q) - c1o54 * drho; } q = q_dirSE[k]; @@ -4794,13 +4793,13 @@ __global__ void QSlipNormDeviceComp27( VeloY = vx2 - (vx1 * nx_dirSE[k] + vx2 * ny_dirSE[k] + vx3 * nz_dirSE[k]) * ny_dirSE[k]; un = fabs( (vx1 * nx_dirSE[k] + vx2 * ny_dirSE[k] + vx3 * nz_dirSE[k]) * nx_dirSE[k] - (vx1 * nx_dirSE[k] + vx2 * ny_dirSE[k] + vx3 * nz_dirSE[k]) * ny_dirSE[k]); ut = fabs( VeloX - VeloY); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs( nx_dirSE[k]-ny_dirSE[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o54* (drho/*+three*( vx1-vx2 )*/+c9o2*( vx1-vx2 )*( vx1-vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW))/(c1o1+q) - c1o54 * drho; + (D.f[dMP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW))/(c1o1+q) - c1o54 * drho; } q = q_dirNW[k]; @@ -4810,13 +4809,13 @@ __global__ void QSlipNormDeviceComp27( VeloY = vx2 - (vx1 * nx_dirNW[k] + vx2 * ny_dirNW[k] + vx3 * nz_dirNW[k]) * ny_dirNW[k]; un = fabs(-(vx1 * nx_dirNW[k] + vx2 * ny_dirNW[k] + vx3 * nz_dirNW[k]) * nx_dirNW[k] + (vx1 * nx_dirNW[k] + vx2 * ny_dirNW[k] + vx3 * nz_dirNW[k]) * ny_dirNW[k]); ut = fabs(-VeloX + VeloY); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs(-nx_dirNW[k]+ny_dirNW[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o54* (drho/*+three*(-vx1+vx2 )*/+c9o2*(-vx1+vx2 )*(-vx1+vx2 ) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE))/(c1o1+q) - c1o54 * drho; + (D.f[dPM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE))/(c1o1+q) - c1o54 * drho; } q = q_dirTE[k]; @@ -4826,13 +4825,13 @@ __global__ void QSlipNormDeviceComp27( VeloZ = vx3 - (vx1 * nx_dirTE[k] + vx2 * ny_dirTE[k] + vx3 * nz_dirTE[k]) * nz_dirTE[k]; un = fabs( (vx1 * nx_dirTE[k] + vx2 * ny_dirTE[k] + vx3 * nz_dirTE[k]) * nx_dirTE[k] + (vx1 * nx_dirTE[k] + vx2 * ny_dirTE[k] + vx3 * nz_dirTE[k]) * nz_dirTE[k]); ut = fabs( VeloX + VeloZ); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs( nx_dirTE[k]+nz_dirTE[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o54* (drho/*+three*( vx1 +vx3)*/+c9o2*( vx1 +vx3)*( vx1 +vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW))/(c1o1+q) - c1o54 * drho; + (D.f[dM0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW))/(c1o1+q) - c1o54 * drho; } q = q_dirBW[k]; @@ -4842,13 +4841,13 @@ __global__ void QSlipNormDeviceComp27( VeloZ = vx3 - (vx1 * nx_dirBW[k] + vx2 * ny_dirBW[k] + vx3 * nz_dirBW[k]) * nz_dirBW[k]; un = fabs(-(vx1 * nx_dirBW[k] + vx2 * ny_dirBW[k] + vx3 * nz_dirBW[k]) * nx_dirBW[k] - (vx1 * nx_dirBW[k] + vx2 * ny_dirBW[k] + vx3 * nz_dirBW[k]) * nz_dirBW[k]); ut = fabs(-VeloX - VeloZ); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs(-nx_dirBW[k]-nz_dirBW[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o54* (drho/*+three*(-vx1 -vx3)*/+c9o2*(-vx1 -vx3)*(-vx1 -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE))/(c1o1+q) - c1o54 * drho; + (D.f[dP0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE))/(c1o1+q) - c1o54 * drho; } q = q_dirBE[k]; @@ -4858,13 +4857,13 @@ __global__ void QSlipNormDeviceComp27( VeloZ = vx3 - (vx1 * nx_dirBE[k] + vx2 * ny_dirBE[k] + vx3 * nz_dirBE[k]) * nz_dirBE[k]; un = fabs( (vx1 * nx_dirBE[k] + vx2 * ny_dirBE[k] + vx3 * nz_dirBE[k]) * nx_dirBE[k] - (vx1 * nx_dirBE[k] + vx2 * ny_dirBE[k] + vx3 * nz_dirBE[k]) * nz_dirBE[k]); ut = fabs( VeloX - VeloZ); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs( nx_dirBE[k]-nz_dirBE[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o54* (drho/*+three*( vx1 -vx3)*/+c9o2*( vx1 -vx3)*( vx1 -vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_M0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW))/(c1o1+q) - c1o54 * drho; + (D.f[dM0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW))/(c1o1+q) - c1o54 * drho; } q = q_dirTW[k]; @@ -4874,13 +4873,13 @@ __global__ void QSlipNormDeviceComp27( VeloZ = vx3 - (vx1 * nx_dirTW[k] + vx2 * ny_dirTW[k] + vx3 * nz_dirTW[k]) * nz_dirTW[k]; un = fabs(-(vx1 * nx_dirTW[k] + vx2 * ny_dirTW[k] + vx3 * nz_dirTW[k]) * nx_dirTW[k] + (vx1 * nx_dirTW[k] + vx2 * ny_dirTW[k] + vx3 * nz_dirTW[k]) * nz_dirTW[k]); ut = fabs(-VeloX + VeloZ); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs(-nx_dirTW[k]+nz_dirTW[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o54* (drho/*+three*(-vx1 +vx3)*/+c9o2*(-vx1 +vx3)*(-vx1 +vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_P0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE))/(c1o1+q) - c1o54 * drho; + (D.f[dP0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE))/(c1o1+q) - c1o54 * drho; } q = q_dirTN[k]; @@ -4890,13 +4889,13 @@ __global__ void QSlipNormDeviceComp27( VeloZ = vx3 - (vx1 * nx_dirTN[k] + vx2 * ny_dirTN[k] + vx3 * nz_dirTN[k]) * nz_dirTN[k]; un = fabs( (vx1 * nx_dirTN[k] + vx2 * ny_dirTN[k] + vx3 * nz_dirTN[k]) * ny_dirTN[k] + (vx1 * nx_dirTN[k] + vx2 * ny_dirTN[k] + vx3 * nz_dirTN[k]) * nz_dirTN[k]); ut = fabs( VeloY + VeloZ); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs( ny_dirTN[k]+nz_dirTN[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o54* (drho/*+three*( vx2+vx3)*/+c9o2*( vx2+vx3)*( vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS))/(c1o1+q) - c1o54 * drho; + (D.f[d0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS))/(c1o1+q) - c1o54 * drho; } q = q_dirBS[k]; @@ -4906,13 +4905,13 @@ __global__ void QSlipNormDeviceComp27( VeloZ = vx3 - (vx1 * nx_dirBS[k] + vx2 * ny_dirBS[k] + vx3 * nz_dirBS[k]) * nz_dirBS[k]; un = fabs(-(vx1 * nx_dirBS[k] + vx2 * ny_dirBS[k] + vx3 * nz_dirBS[k]) * ny_dirBS[k] - (vx1 * nx_dirBS[k] + vx2 * ny_dirBS[k] + vx3 * nz_dirBS[k]) * nz_dirBS[k]); ut = fabs(-VeloY - VeloZ); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs(-ny_dirBS[k]-nz_dirBS[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o54* (drho/*+three*( -vx2-vx3)*/+c9o2*( -vx2-vx3)*( -vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN))/(c1o1+q) - c1o54 * drho; + (D.f[d0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN))/(c1o1+q) - c1o54 * drho; } q = q_dirBN[k]; @@ -4922,13 +4921,13 @@ __global__ void QSlipNormDeviceComp27( VeloZ = vx3 - (vx1 * nx_dirBN[k] + vx2 * ny_dirBN[k] + vx3 * nz_dirBN[k]) * nz_dirBN[k]; un = fabs( (vx1 * nx_dirBN[k] + vx2 * ny_dirBN[k] + vx3 * nz_dirBN[k]) * ny_dirBN[k] - (vx1 * nx_dirBN[k] + vx2 * ny_dirBN[k] + vx3 * nz_dirBN[k]) * nz_dirBN[k]); ut = fabs( VeloY - VeloZ); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs( ny_dirBN[k]-nz_dirBN[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o54* (drho/*+three*( vx2-vx3)*/+c9o2*( vx2-vx3)*( vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS))/(c1o1+q) - c1o54 * drho; + (D.f[d0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS))/(c1o1+q) - c1o54 * drho; } q = q_dirTS[k]; @@ -4938,13 +4937,13 @@ __global__ void QSlipNormDeviceComp27( VeloZ = vx3 - (vx1 * nx_dirTS[k] + vx2 * ny_dirTS[k] + vx3 * nz_dirTS[k]) * nz_dirTS[k]; un = fabs(-(vx1 * nx_dirTS[k] + vx2 * ny_dirTS[k] + vx3 * nz_dirTS[k]) * ny_dirTS[k] + (vx1 * nx_dirTS[k] + vx2 * ny_dirTS[k] + vx3 * nz_dirTS[k]) * nz_dirTS[k]); ut = fabs(-VeloY + VeloZ); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs(-ny_dirTS[k]+nz_dirTS[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o54* (drho/*+three*( -vx2+vx3)*/+c9o2*( -vx2+vx3)*( -vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN))/(c1o1+q) - c1o54 * drho; + (D.f[d0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN))/(c1o1+q) - c1o54 * drho; } q = q_dirTNE[k]; @@ -4957,13 +4956,13 @@ __global__ void QSlipNormDeviceComp27( +(vx1 * nx_dirTNE[k] + vx2 * ny_dirTNE[k] + vx3 * nz_dirTNE[k]) * ny_dirTNE[k] +(vx1 * nx_dirTNE[k] + vx2 * ny_dirTNE[k] + vx3 * nz_dirTNE[k]) * nz_dirTNE[k]); ut = fabs( VeloX + VeloY + VeloZ); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs( nx_dirTNE[k] + ny_dirTNE[k] + nz_dirTNE[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MMM])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW))/(c1o1+q) - c1o216 * drho; + (D.f[dMMM])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW))/(c1o1+q) - c1o216 * drho; } q = q_dirBSW[k]; @@ -4976,13 +4975,13 @@ __global__ void QSlipNormDeviceComp27( -(vx1 * nx_dirBSW[k] + vx2 * ny_dirBSW[k] + vx3 * nz_dirBSW[k]) * ny_dirBSW[k] -(vx1 * nx_dirBSW[k] + vx2 * ny_dirBSW[k] + vx3 * nz_dirBSW[k]) * nz_dirBSW[k]); ut = fabs(-VeloX - VeloY - VeloZ); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs(-nx_dirBSW[k] - ny_dirBSW[k] - nz_dirBSW[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PPP])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE))/(c1o1+q) - c1o216 * drho; + (D.f[dPPP])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE))/(c1o1+q) - c1o216 * drho; } q = q_dirBNE[k]; @@ -4995,13 +4994,13 @@ __global__ void QSlipNormDeviceComp27( +(vx1 * nx_dirBNE[k] + vx2 * ny_dirBNE[k] + vx3 * nz_dirBNE[k]) * ny_dirBNE[k] -(vx1 * nx_dirBNE[k] + vx2 * ny_dirBNE[k] + vx3 * nz_dirBNE[k]) * nz_dirBNE[k]); ut = fabs( VeloX + VeloY - VeloZ); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs( nx_dirBNE[k] + ny_dirBNE[k] - nz_dirBNE[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MMP])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW))/(c1o1+q) - c1o216 * drho; + (D.f[dMMP])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW))/(c1o1+q) - c1o216 * drho; } q = q_dirTSW[k]; @@ -5014,13 +5013,13 @@ __global__ void QSlipNormDeviceComp27( -(vx1 * nx_dirTSW[k] + vx2 * ny_dirTSW[k] + vx3 * nz_dirTSW[k]) * ny_dirTSW[k] +(vx1 * nx_dirTSW[k] + vx2 * ny_dirTSW[k] + vx3 * nz_dirTSW[k]) * nz_dirTSW[k]); ut = fabs(-VeloX - VeloY + VeloZ); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs(-nx_dirTSW[k] - ny_dirTSW[k] + nz_dirTSW[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PPM])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE))/(c1o1+q) - c1o216 * drho; + (D.f[dPPM])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE))/(c1o1+q) - c1o216 * drho; } q = q_dirTSE[k]; @@ -5033,13 +5032,13 @@ __global__ void QSlipNormDeviceComp27( -(vx1 * nx_dirTSE[k] + vx2 * ny_dirTSE[k] + vx3 * nz_dirTSE[k]) * ny_dirTSE[k] +(vx1 * nx_dirTSE[k] + vx2 * ny_dirTSE[k] + vx3 * nz_dirTSE[k]) * nz_dirTSE[k]); ut = fabs(+VeloX - VeloY + VeloZ); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs( nx_dirTSE[k] - ny_dirTSE[k] + nz_dirTSE[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MPM])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW))/(c1o1+q) - c1o216 * drho; + (D.f[dMPM])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW))/(c1o1+q) - c1o216 * drho; } q = q_dirBNW[k]; @@ -5052,13 +5051,13 @@ __global__ void QSlipNormDeviceComp27( +(vx1 * nx_dirBNW[k] + vx2 * ny_dirBNW[k] + vx3 * nz_dirBNW[k]) * ny_dirBNW[k] -(vx1 * nx_dirBNW[k] + vx2 * ny_dirBNW[k] + vx3 * nz_dirBNW[k]) * nz_dirBNW[k]); ut = fabs(-VeloX + VeloY - VeloZ); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs(-nx_dirBNW[k] + ny_dirBNW[k] - nz_dirBNW[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PMP])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE))/(c1o1+q) - c1o216 * drho; + (D.f[dPMP])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE))/(c1o1+q) - c1o216 * drho; } q = q_dirBSE[k]; @@ -5071,13 +5070,13 @@ __global__ void QSlipNormDeviceComp27( -(vx1 * nx_dirBSE[k] + vx2 * ny_dirBSE[k] + vx3 * nz_dirBSE[k]) * ny_dirBSE[k] -(vx1 * nx_dirBSE[k] + vx2 * ny_dirBSE[k] + vx3 * nz_dirBSE[k]) * nz_dirBSE[k]); ut = fabs( VeloX - VeloY - VeloZ); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs( nx_dirBSE[k] - ny_dirBSE[k] - nz_dirBSE[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_MPP])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW))/(c1o1+q) - c1o216 * drho; + (D.f[dMPP])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW))/(c1o1+q) - c1o216 * drho; } q = q_dirTNW[k]; @@ -5090,13 +5089,13 @@ __global__ void QSlipNormDeviceComp27( +(vx1 * nx_dirTNW[k] + vx2 * ny_dirTNW[k] + vx3 * nz_dirTNW[k]) * ny_dirTNW[k] +(vx1 * nx_dirTNW[k] + vx2 * ny_dirTNW[k] + vx3 * nz_dirTNW[k]) * nz_dirTNW[k]); ut = fabs(-VeloX + VeloY + VeloZ); - tangential = ut / (ut + un + smallSingle); + tangential = ut / (ut + un + cSmallSingle); qSlip = sliplength * fabs(-nx_dirTNW[k] + ny_dirTNW[k] + nz_dirTNW[k]); //sliplength * e_i * n_i //qSlip = (qSlip < zero) ? zero:qSlip; //tangential = (tangential > one) ? one:tangential; - q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (smallSingle + q)); + q = (q + qSlip)/(c1o1 + qSlip * (c1o1 - tangential) / (cSmallSingle + q)); feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); - (D.f[DIR_PMM])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE))/(c1o1+q) - c1o216 * drho; + (D.f[dPMM])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE))/(c1o1+q) - c1o216 * drho; } } } diff --git a/src/gpu/VirtualFluids_GPU/GPU/StressBCs27.cu b/src/gpu/core/GPU/StressBCs27.cu similarity index 83% rename from src/gpu/VirtualFluids_GPU/GPU/StressBCs27.cu rename to src/gpu/core/GPU/StressBCs27.cu index 1cc5017816aed29d52e74823a8c910bfed35ad42..b9b538dbc643fee107780f5d34d3f3e91b762ef1 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/StressBCs27.cu +++ b/src/gpu/core/GPU/StressBCs27.cu @@ -42,7 +42,6 @@ #include "LBM/LB.h" #include "lbm/constants/D3Q27.h" -#include "Kernel/Utilities/DistributionHelper.cuh" #include <basics/constants/NumericConstants.h> #include "LBM/GPUHelperFunctions/KernelUtilities.h" @@ -195,32 +194,32 @@ __global__ void QStressDeviceComp27( *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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes]; + 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]; @@ -255,38 +254,38 @@ __global__ void QStressDeviceComp27( 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[DIR_P00])[ke ]; //post-coll f's - f_E = (D.f[DIR_M00])[kw ]; - f_S = (D.f[DIR_0P0])[kn ]; - f_N = (D.f[DIR_0M0])[ks ]; - f_B = (D.f[DIR_00P])[kt ]; - f_T = (D.f[DIR_00M])[kb ]; - f_SW = (D.f[DIR_PP0])[kne ]; - f_NE = (D.f[DIR_MM0])[ksw ]; - f_NW = (D.f[DIR_PM0])[kse ]; - f_SE = (D.f[DIR_MP0])[knw ]; - f_BW = (D.f[DIR_P0P])[kte ]; - f_TE = (D.f[DIR_M0M])[kbw ]; - f_TW = (D.f[DIR_P0M])[kbe ]; - f_BE = (D.f[DIR_M0P])[ktw ]; - f_BS = (D.f[DIR_0PP])[ktn ]; - f_TN = (D.f[DIR_0MM])[kbs ]; - f_TS = (D.f[DIR_0PM])[kbn ]; - f_BN = (D.f[DIR_0MP])[kts ]; - f_BSW = (D.f[DIR_PPP])[ktne ]; - f_BNE = (D.f[DIR_MMP])[ktsw ]; - f_BNW = (D.f[DIR_PMP])[ktse ]; - f_BSE = (D.f[DIR_MPP])[ktnw ]; - f_TSW = (D.f[DIR_PPM])[kbne ]; - f_TNE = (D.f[DIR_MMM])[kbsw ]; - f_TNW = (D.f[DIR_PMM])[kbse ]; - f_TSE = (D.f[DIR_MPM])[kbnw ]; + f_W = (D.f[dP00])[ke ]; //post-coll f's + 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, 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 + ((D.f[DIR_000])[kzero]); + 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)) + @@ -637,49 +636,49 @@ __global__ void QStressDeviceComp27( q = q_dirE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_M00])[kw] = f_W_in - (c6o1*c2o27*( VeloX ))/(c1o1+q); + (D.f[dM00])[kw] = f_W_in - (c6o1*c2o27*( VeloX ))/(c1o1+q); wallMomentumX += -(c6o1*c2o27*( VeloX ))/(c1o1+q); } q = q_dirW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_P00])[ke] = f_E_in - (c6o1*c2o27*(-VeloX ))/(c1o1+q); + (D.f[dP00])[ke] = f_E_in - (c6o1*c2o27*(-VeloX ))/(c1o1+q); wallMomentumX -= - (c6o1*c2o27*(-VeloX ))/(c1o1+q); } q = q_dirN[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_0M0])[ks] = f_S_in - (c6o1*c2o27*( VeloY ))/(c1o1+q); + (D.f[d0M0])[ks] = f_S_in - (c6o1*c2o27*( VeloY ))/(c1o1+q); wallMomentumY += - (c6o1*c2o27*( VeloY ))/(c1o1+q); } q = q_dirS[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_0P0])[kn] = f_N_in - (c6o1*c2o27*(-VeloY ))/(c1o1+q); + (D.f[d0P0])[kn] = f_N_in - (c6o1*c2o27*(-VeloY ))/(c1o1+q); wallMomentumY -= -(c6o1*c2o27*(-VeloY ))/(c1o1+q); } q = q_dirT[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_00M])[kb] = f_B_in - (c6o1*c2o27*( VeloZ ))/(c1o1+q); + (D.f[d00M])[kb] = f_B_in - (c6o1*c2o27*( VeloZ ))/(c1o1+q); wallMomentumZ += - (c6o1*c2o27*( VeloZ ))/(c1o1+q); } q = q_dirB[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_00P])[kt] = f_T_in - (c6o1*c2o27*(-VeloZ ))/(c1o1+q); + (D.f[d00P])[kt] = f_T_in - (c6o1*c2o27*(-VeloZ ))/(c1o1+q); wallMomentumZ -= -(c6o1*c2o27*(-VeloZ ))/(c1o1+q); } q = q_dirNE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_MM0])[ksw] = f_SW_in - (c6o1*c1o54*(VeloX+VeloY))/(c1o1+q); + (D.f[dMM0])[ksw] = f_SW_in - (c6o1*c1o54*(VeloX+VeloY))/(c1o1+q); wallMomentumX += -(c6o1*c1o54*(VeloX+VeloY))/(c1o1+q); wallMomentumY += -(c6o1*c1o54*(VeloX+VeloY))/(c1o1+q); } @@ -687,7 +686,7 @@ __global__ void QStressDeviceComp27( q = q_dirSW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_PP0])[kne] = f_NE_in - (c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q); + (D.f[dPP0])[kne] = f_NE_in - (c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q); wallMomentumX -= - (c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q); wallMomentumY -= - (c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q); } @@ -695,7 +694,7 @@ __global__ void QStressDeviceComp27( q = q_dirSE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_MP0])[knw] = f_NW_in - (c6o1*c1o54*( VeloX-VeloY))/(c1o1+q); + (D.f[dMP0])[knw] = f_NW_in - (c6o1*c1o54*( VeloX-VeloY))/(c1o1+q); wallMomentumX += -(c6o1*c1o54*( VeloX-VeloY))/(c1o1+q); wallMomentumY -= -(c6o1*c1o54*( VeloX-VeloY))/(c1o1+q); } @@ -703,7 +702,7 @@ __global__ void QStressDeviceComp27( q = q_dirNW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_PM0])[kse] = f_SE_in - (c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q); + (D.f[dPM0])[kse] = f_SE_in - (c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q); wallMomentumX -= - (c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q); wallMomentumY += - (c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q); } @@ -711,7 +710,7 @@ __global__ void QStressDeviceComp27( q = q_dirTE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_M0M])[kbw] = f_BW_in - (c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q); + (D.f[dM0M])[kbw] = f_BW_in - (c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q); wallMomentumX += - (c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q); wallMomentumZ += - (c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q); } @@ -719,7 +718,7 @@ __global__ void QStressDeviceComp27( q = q_dirBW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_P0P])[kte] = f_TE_in - (c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q); + (D.f[dP0P])[kte] = f_TE_in - (c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q); wallMomentumX -= - (c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q); wallMomentumZ -= - (c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q); } @@ -727,7 +726,7 @@ __global__ void QStressDeviceComp27( q = q_dirBE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_M0P])[ktw] = f_TW_in - (c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q); + (D.f[dM0P])[ktw] = f_TW_in - (c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q); wallMomentumX += - (c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q); wallMomentumZ -= - (c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q); } @@ -735,7 +734,7 @@ __global__ void QStressDeviceComp27( q = q_dirTW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_P0M])[kbe] = f_BE_in - (c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q); + (D.f[dP0M])[kbe] = f_BE_in - (c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q); wallMomentumX -= - (c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q); wallMomentumZ += - (c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q); } @@ -743,7 +742,7 @@ __global__ void QStressDeviceComp27( q = q_dirTN[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_0MM])[kbs] = f_BS_in - (c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q); + (D.f[d0MM])[kbs] = f_BS_in - (c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q); wallMomentumY += - (c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q); wallMomentumZ += - (c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q); } @@ -751,7 +750,7 @@ __global__ void QStressDeviceComp27( q = q_dirBS[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_0PP])[ktn] = f_TN_in - (c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q); + (D.f[d0PP])[ktn] = f_TN_in - (c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q); wallMomentumY -= - (c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q); wallMomentumZ -= - (c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q); } @@ -759,7 +758,7 @@ __global__ void QStressDeviceComp27( q = q_dirBN[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_0MP])[kts] = f_TS_in - (c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q); + (D.f[d0MP])[kts] = f_TS_in - (c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q); wallMomentumY += - (c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q); wallMomentumZ -= - (c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q); } @@ -767,7 +766,7 @@ __global__ void QStressDeviceComp27( q = q_dirTS[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_0PM])[kbn] = f_BN_in - (c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q); + (D.f[d0PM])[kbn] = f_BN_in - (c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q); wallMomentumY -= - (c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q); wallMomentumZ += - (c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q); } @@ -775,7 +774,7 @@ __global__ void QStressDeviceComp27( q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_MMM])[kbsw] = f_BSW_in - (c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q); + (D.f[dMMM])[kbsw] = f_BSW_in - (c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q); wallMomentumX += - (c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q); wallMomentumY += - (c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q); wallMomentumZ += - (c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q); @@ -784,7 +783,7 @@ __global__ void QStressDeviceComp27( q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_PPP])[ktne] = f_TNE_in - (c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q); + (D.f[dPPP])[ktne] = f_TNE_in - (c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q); wallMomentumX -= - (c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q); wallMomentumY -= - (c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q); wallMomentumZ -= - (c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q); @@ -793,7 +792,7 @@ __global__ void QStressDeviceComp27( q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_MMP])[ktsw] = f_TSW_in - (c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q); + (D.f[dMMP])[ktsw] = f_TSW_in - (c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q); wallMomentumX += - (c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q); wallMomentumY += - (c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q); wallMomentumZ -= - (c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q); @@ -802,7 +801,7 @@ __global__ void QStressDeviceComp27( q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_PPM])[kbne] = f_BNE_in - (c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q); + (D.f[dPPM])[kbne] = f_BNE_in - (c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q); wallMomentumX -= - (c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q); wallMomentumY -= - (c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q); wallMomentumZ += - (c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q); @@ -811,7 +810,7 @@ __global__ void QStressDeviceComp27( q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_MPM])[kbnw] = f_BNW_in - (c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q); + (D.f[dMPM])[kbnw] = f_BNW_in - (c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q); wallMomentumX += - (c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q); wallMomentumY -= - (c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q); wallMomentumZ += - (c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q); @@ -820,7 +819,7 @@ __global__ void QStressDeviceComp27( q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_PMP])[ktse] = f_TSE_in - (c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q); + (D.f[dPMP])[ktse] = f_TSE_in - (c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q); wallMomentumX -= - (c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q); wallMomentumY += - (c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q); wallMomentumZ -= - (c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q); @@ -829,7 +828,7 @@ __global__ void QStressDeviceComp27( q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_MPP])[ktnw] = f_TNW_in - (c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q); + (D.f[dMPP])[ktnw] = f_TNW_in - (c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q); wallMomentumX += - (c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q); wallMomentumY -= - (c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q); wallMomentumZ -= - (c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q); @@ -838,7 +837,7 @@ __global__ void QStressDeviceComp27( q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_PMM])[kbse] = f_BSE_in - (c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q); + (D.f[dPMM])[kbse] = f_BSE_in - (c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q); wallMomentumX -= - (c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q); wallMomentumY += - (c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q); wallMomentumZ += - (c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q); @@ -907,32 +906,32 @@ __global__ void BBStressDevice27( real* DD, *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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes]; + 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]; @@ -968,38 +967,38 @@ __global__ void BBStressDevice27( real* DD, 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[DIR_P00])[ke ]; - f_E = (D.f[DIR_M00])[kw ]; - f_S = (D.f[DIR_0P0])[kn ]; - f_N = (D.f[DIR_0M0])[ks ]; - f_B = (D.f[DIR_00P])[kt ]; - f_T = (D.f[DIR_00M])[kb ]; - f_SW = (D.f[DIR_PP0])[kne ]; - f_NE = (D.f[DIR_MM0])[ksw ]; - f_NW = (D.f[DIR_PM0])[kse ]; - f_SE = (D.f[DIR_MP0])[knw ]; - f_BW = (D.f[DIR_P0P])[kte ]; - f_TE = (D.f[DIR_M0M])[kbw ]; - f_TW = (D.f[DIR_P0M])[kbe ]; - f_BE = (D.f[DIR_M0P])[ktw ]; - f_BS = (D.f[DIR_0PP])[ktn ]; - f_TN = (D.f[DIR_0MM])[kbs ]; - f_TS = (D.f[DIR_0PM])[kbn ]; - f_BN = (D.f[DIR_0MP])[kts ]; - f_BSW = (D.f[DIR_PPP])[ktne ]; - f_BNE = (D.f[DIR_MMP])[ktsw ]; - f_BNW = (D.f[DIR_PMP])[ktse ]; - f_BSE = (D.f[DIR_MPP])[ktnw ]; - f_TSW = (D.f[DIR_PPM])[kbne ]; - f_TNE = (D.f[DIR_MMM])[kbsw ]; - f_TNW = (D.f[DIR_PMM])[kbse ]; - f_TSE = (D.f[DIR_MPM])[kbnw ]; + 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[DIR_000])[kzero]); + 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)) + @@ -1267,49 +1266,49 @@ __global__ void BBStressDevice27( real* DD, q = q_dirE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_M00])[kw] = f_W_in - (c6o1*c2o27*( VeloX )); + (D.f[dM00])[kw] = f_W_in - (c6o1*c2o27*( VeloX )); wallMomentumX += -(c6o1*c2o27*( VeloX )); } q = q_dirW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_P00])[ke] = f_E_in - (c6o1*c2o27*(-VeloX )); + (D.f[dP00])[ke] = f_E_in - (c6o1*c2o27*(-VeloX )); wallMomentumX -= - (c6o1*c2o27*(-VeloX )); } q = q_dirN[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_0M0])[ks] = f_S_in - (c6o1*c2o27*( VeloY )); + (D.f[d0M0])[ks] = f_S_in - (c6o1*c2o27*( VeloY )); wallMomentumY += - (c6o1*c2o27*( VeloY )); } q = q_dirS[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_0P0])[kn] = f_N_in - (c6o1*c2o27*(-VeloY )); + (D.f[d0P0])[kn] = f_N_in - (c6o1*c2o27*(-VeloY )); wallMomentumY -= -(c6o1*c2o27*(-VeloY )); } q = q_dirT[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_00M])[kb] = f_B_in - (c6o1*c2o27*( VeloZ )); + (D.f[d00M])[kb] = f_B_in - (c6o1*c2o27*( VeloZ )); wallMomentumZ += - (c6o1*c2o27*( VeloZ )); } q = q_dirB[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_00P])[kt] = f_T_in - (c6o1*c2o27*(-VeloZ )); + (D.f[d00P])[kt] = f_T_in - (c6o1*c2o27*(-VeloZ )); wallMomentumZ -= -(c6o1*c2o27*(-VeloZ )); } q = q_dirNE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_MM0])[ksw] = f_SW_in - (c6o1*c1o54*(VeloX+VeloY)); + (D.f[dMM0])[ksw] = f_SW_in - (c6o1*c1o54*(VeloX+VeloY)); wallMomentumX += -(c6o1*c1o54*(VeloX+VeloY)); wallMomentumY += -(c6o1*c1o54*(VeloX+VeloY)); } @@ -1317,7 +1316,7 @@ __global__ void BBStressDevice27( real* DD, q = q_dirSW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_PP0])[kne] = f_NE_in - (c6o1*c1o54*(-VeloX-VeloY)); + (D.f[dPP0])[kne] = f_NE_in - (c6o1*c1o54*(-VeloX-VeloY)); wallMomentumX -= - (c6o1*c1o54*(-VeloX-VeloY)); wallMomentumY -= - (c6o1*c1o54*(-VeloX-VeloY)); } @@ -1325,7 +1324,7 @@ __global__ void BBStressDevice27( real* DD, q = q_dirSE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_MP0])[knw] = f_NW_in - (c6o1*c1o54*( VeloX-VeloY)); + (D.f[dMP0])[knw] = f_NW_in - (c6o1*c1o54*( VeloX-VeloY)); wallMomentumX += -(c6o1*c1o54*( VeloX-VeloY)); wallMomentumY -= -(c6o1*c1o54*( VeloX-VeloY)); } @@ -1333,7 +1332,7 @@ __global__ void BBStressDevice27( real* DD, q = q_dirNW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_PM0])[kse] = f_SE_in - (c6o1*c1o54*(-VeloX+VeloY)); + (D.f[dPM0])[kse] = f_SE_in - (c6o1*c1o54*(-VeloX+VeloY)); wallMomentumX -= - (c6o1*c1o54*(-VeloX+VeloY)); wallMomentumY += - (c6o1*c1o54*(-VeloX+VeloY)); } @@ -1341,7 +1340,7 @@ __global__ void BBStressDevice27( real* DD, q = q_dirTE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_M0M])[kbw] = f_BW_in - (c6o1*c1o54*( VeloX+VeloZ)); + (D.f[dM0M])[kbw] = f_BW_in - (c6o1*c1o54*( VeloX+VeloZ)); wallMomentumX += - (c6o1*c1o54*( VeloX+VeloZ)); wallMomentumZ += - (c6o1*c1o54*( VeloX+VeloZ)); } @@ -1349,7 +1348,7 @@ __global__ void BBStressDevice27( real* DD, q = q_dirBW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_P0P])[kte] = f_TE_in - (c6o1*c1o54*(-VeloX-VeloZ)); + (D.f[dP0P])[kte] = f_TE_in - (c6o1*c1o54*(-VeloX-VeloZ)); wallMomentumX -= - (c6o1*c1o54*(-VeloX-VeloZ)); wallMomentumZ -= - (c6o1*c1o54*(-VeloX-VeloZ)); } @@ -1357,7 +1356,7 @@ __global__ void BBStressDevice27( real* DD, q = q_dirBE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_M0P])[ktw] = f_TW_in - (c6o1*c1o54*( VeloX-VeloZ)); + (D.f[dM0P])[ktw] = f_TW_in - (c6o1*c1o54*( VeloX-VeloZ)); wallMomentumX += - (c6o1*c1o54*( VeloX-VeloZ)); wallMomentumZ -= - (c6o1*c1o54*( VeloX-VeloZ)); } @@ -1365,7 +1364,7 @@ __global__ void BBStressDevice27( real* DD, q = q_dirTW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_P0M])[kbe] = f_BE_in - (c6o1*c1o54*(-VeloX+VeloZ)); + (D.f[dP0M])[kbe] = f_BE_in - (c6o1*c1o54*(-VeloX+VeloZ)); wallMomentumX -= - (c6o1*c1o54*(-VeloX+VeloZ)); wallMomentumZ += - (c6o1*c1o54*(-VeloX+VeloZ)); } @@ -1373,7 +1372,7 @@ __global__ void BBStressDevice27( real* DD, q = q_dirTN[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_0MM])[kbs] = f_BS_in - (c6o1*c1o54*( VeloY+VeloZ)); + (D.f[d0MM])[kbs] = f_BS_in - (c6o1*c1o54*( VeloY+VeloZ)); wallMomentumY += - (c6o1*c1o54*( VeloY+VeloZ)); wallMomentumZ += - (c6o1*c1o54*( VeloY+VeloZ)); } @@ -1381,7 +1380,7 @@ __global__ void BBStressDevice27( real* DD, q = q_dirBS[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_0PP])[ktn] = f_TN_in - (c6o1*c1o54*( -VeloY-VeloZ)); + (D.f[d0PP])[ktn] = f_TN_in - (c6o1*c1o54*( -VeloY-VeloZ)); wallMomentumY -= - (c6o1*c1o54*( -VeloY-VeloZ)); wallMomentumZ -= - (c6o1*c1o54*( -VeloY-VeloZ)); } @@ -1389,7 +1388,7 @@ __global__ void BBStressDevice27( real* DD, q = q_dirBN[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_0MP])[kts] = f_TS_in - (c6o1*c1o54*( VeloY-VeloZ)); + (D.f[d0MP])[kts] = f_TS_in - (c6o1*c1o54*( VeloY-VeloZ)); wallMomentumY += - (c6o1*c1o54*( VeloY-VeloZ)); wallMomentumZ -= - (c6o1*c1o54*( VeloY-VeloZ)); } @@ -1397,7 +1396,7 @@ __global__ void BBStressDevice27( real* DD, q = q_dirTS[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_0PM])[kbn] = f_BN_in - (c6o1*c1o54*( -VeloY+VeloZ)); + (D.f[d0PM])[kbn] = f_BN_in - (c6o1*c1o54*( -VeloY+VeloZ)); wallMomentumY -= - (c6o1*c1o54*( -VeloY+VeloZ)); wallMomentumZ += - (c6o1*c1o54*( -VeloY+VeloZ)); } @@ -1405,7 +1404,7 @@ __global__ void BBStressDevice27( real* DD, q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_MMM])[kbsw] = f_BSW_in - (c6o1*c1o216*( VeloX+VeloY+VeloZ)); + (D.f[dMMM])[kbsw] = f_BSW_in - (c6o1*c1o216*( VeloX+VeloY+VeloZ)); wallMomentumX += - (c6o1*c1o216*( VeloX+VeloY+VeloZ)); wallMomentumY += - (c6o1*c1o216*( VeloX+VeloY+VeloZ)); wallMomentumZ += - (c6o1*c1o216*( VeloX+VeloY+VeloZ)); @@ -1414,7 +1413,7 @@ __global__ void BBStressDevice27( real* DD, q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_PPP])[ktne] = f_TNE_in - (c6o1*c1o216*(-VeloX-VeloY-VeloZ)); + (D.f[dPPP])[ktne] = f_TNE_in - (c6o1*c1o216*(-VeloX-VeloY-VeloZ)); wallMomentumX -= - (c6o1*c1o216*(-VeloX-VeloY-VeloZ)); wallMomentumY -= - (c6o1*c1o216*(-VeloX-VeloY-VeloZ)); wallMomentumZ -= - (c6o1*c1o216*(-VeloX-VeloY-VeloZ)); @@ -1423,7 +1422,7 @@ __global__ void BBStressDevice27( real* DD, q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_MMP])[ktsw] = f_TSW_in - (c6o1*c1o216*( VeloX+VeloY-VeloZ)); + (D.f[dMMP])[ktsw] = f_TSW_in - (c6o1*c1o216*( VeloX+VeloY-VeloZ)); wallMomentumX += - (c6o1*c1o216*( VeloX+VeloY-VeloZ)); wallMomentumY += - (c6o1*c1o216*( VeloX+VeloY-VeloZ)); wallMomentumZ -= - (c6o1*c1o216*( VeloX+VeloY-VeloZ)); @@ -1432,7 +1431,7 @@ __global__ void BBStressDevice27( real* DD, q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_PPM])[kbne] = f_BNE_in - (c6o1*c1o216*(-VeloX-VeloY+VeloZ)); + (D.f[dPPM])[kbne] = f_BNE_in - (c6o1*c1o216*(-VeloX-VeloY+VeloZ)); wallMomentumX -= - (c6o1*c1o216*(-VeloX-VeloY+VeloZ)); wallMomentumY -= - (c6o1*c1o216*(-VeloX-VeloY+VeloZ)); wallMomentumZ += - (c6o1*c1o216*(-VeloX-VeloY+VeloZ)); @@ -1441,7 +1440,7 @@ __global__ void BBStressDevice27( real* DD, q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_MPM])[kbnw] = f_BNW_in - (c6o1*c1o216*( VeloX-VeloY+VeloZ)); + (D.f[dMPM])[kbnw] = f_BNW_in - (c6o1*c1o216*( VeloX-VeloY+VeloZ)); wallMomentumX += - (c6o1*c1o216*( VeloX-VeloY+VeloZ)); wallMomentumY -= - (c6o1*c1o216*( VeloX-VeloY+VeloZ)); wallMomentumZ += - (c6o1*c1o216*( VeloX-VeloY+VeloZ)); @@ -1450,7 +1449,7 @@ __global__ void BBStressDevice27( real* DD, q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_PMP])[ktse] = f_TSE_in - (c6o1*c1o216*(-VeloX+VeloY-VeloZ)); + (D.f[dPMP])[ktse] = f_TSE_in - (c6o1*c1o216*(-VeloX+VeloY-VeloZ)); wallMomentumX -= - (c6o1*c1o216*(-VeloX+VeloY-VeloZ)); wallMomentumY += - (c6o1*c1o216*(-VeloX+VeloY-VeloZ)); wallMomentumZ -= - (c6o1*c1o216*(-VeloX+VeloY-VeloZ)); @@ -1459,7 +1458,7 @@ __global__ void BBStressDevice27( real* DD, q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_MPP])[ktnw] = f_TNW_in - (c6o1*c1o216*( VeloX-VeloY-VeloZ)); + (D.f[dMPP])[ktnw] = f_TNW_in - (c6o1*c1o216*( VeloX-VeloY-VeloZ)); wallMomentumX += - (c6o1*c1o216*( VeloX-VeloY-VeloZ)); wallMomentumY -= - (c6o1*c1o216*( VeloX-VeloY-VeloZ)); wallMomentumZ -= - (c6o1*c1o216*( VeloX-VeloY-VeloZ)); @@ -1468,7 +1467,7 @@ __global__ void BBStressDevice27( real* DD, q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_PMM])[kbse] = f_BSE_in - (c6o1*c1o216*(-VeloX+VeloY+VeloZ)); + (D.f[dPMM])[kbse] = f_BSE_in - (c6o1*c1o216*(-VeloX+VeloY+VeloZ)); wallMomentumX -= - (c6o1*c1o216*(-VeloX+VeloY+VeloZ)); wallMomentumY += - (c6o1*c1o216*(-VeloX+VeloY+VeloZ)); wallMomentumZ += - (c6o1*c1o216*(-VeloX+VeloY+VeloZ)); @@ -1537,32 +1536,32 @@ __global__ void BBStressPressureDevice27( real* DD, *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[DIR_P00 * numberOfBCnodes]; - q_dirW = &QQ[DIR_M00 * numberOfBCnodes]; - q_dirN = &QQ[DIR_0P0 * numberOfBCnodes]; - q_dirS = &QQ[DIR_0M0 * numberOfBCnodes]; - q_dirT = &QQ[DIR_00P * numberOfBCnodes]; - q_dirB = &QQ[DIR_00M * numberOfBCnodes]; - q_dirNE = &QQ[DIR_PP0 * numberOfBCnodes]; - q_dirSW = &QQ[DIR_MM0 * numberOfBCnodes]; - q_dirSE = &QQ[DIR_PM0 * numberOfBCnodes]; - q_dirNW = &QQ[DIR_MP0 * numberOfBCnodes]; - q_dirTE = &QQ[DIR_P0P * numberOfBCnodes]; - q_dirBW = &QQ[DIR_M0M * numberOfBCnodes]; - q_dirBE = &QQ[DIR_P0M * numberOfBCnodes]; - q_dirTW = &QQ[DIR_M0P * numberOfBCnodes]; - q_dirTN = &QQ[DIR_0PP * numberOfBCnodes]; - q_dirBS = &QQ[DIR_0MM * numberOfBCnodes]; - q_dirBN = &QQ[DIR_0PM * numberOfBCnodes]; - q_dirTS = &QQ[DIR_0MP * numberOfBCnodes]; - q_dirTNE = &QQ[DIR_PPP * numberOfBCnodes]; - q_dirTSW = &QQ[DIR_MMP * numberOfBCnodes]; - q_dirTSE = &QQ[DIR_PMP * numberOfBCnodes]; - q_dirTNW = &QQ[DIR_MPP * numberOfBCnodes]; - q_dirBNE = &QQ[DIR_PPM * numberOfBCnodes]; - q_dirBSW = &QQ[DIR_MMM * numberOfBCnodes]; - q_dirBSE = &QQ[DIR_PMM * numberOfBCnodes]; - q_dirBNW = &QQ[DIR_MPM * numberOfBCnodes]; + 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]; @@ -1598,38 +1597,38 @@ __global__ void BBStressPressureDevice27( real* DD, 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[DIR_P00])[ke ]; - f_E = (D.f[DIR_M00])[kw ]; - f_S = (D.f[DIR_0P0])[kn ]; - f_N = (D.f[DIR_0M0])[ks ]; - f_B = (D.f[DIR_00P])[kt ]; - f_T = (D.f[DIR_00M])[kb ]; - f_SW = (D.f[DIR_PP0])[kne ]; - f_NE = (D.f[DIR_MM0])[ksw ]; - f_NW = (D.f[DIR_PM0])[kse ]; - f_SE = (D.f[DIR_MP0])[knw ]; - f_BW = (D.f[DIR_P0P])[kte ]; - f_TE = (D.f[DIR_M0M])[kbw ]; - f_TW = (D.f[DIR_P0M])[kbe ]; - f_BE = (D.f[DIR_M0P])[ktw ]; - f_BS = (D.f[DIR_0PP])[ktn ]; - f_TN = (D.f[DIR_0MM])[kbs ]; - f_TS = (D.f[DIR_0PM])[kbn ]; - f_BN = (D.f[DIR_0MP])[kts ]; - f_BSW = (D.f[DIR_PPP])[ktne ]; - f_BNE = (D.f[DIR_MMP])[ktsw ]; - f_BNW = (D.f[DIR_PMP])[ktse ]; - f_BSE = (D.f[DIR_MPP])[ktnw ]; - f_TSW = (D.f[DIR_PPM])[kbne ]; - f_TNE = (D.f[DIR_MMM])[kbsw ]; - f_TNW = (D.f[DIR_PMM])[kbse ]; - f_TSE = (D.f[DIR_MPM])[kbnw ]; + 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[DIR_000])[kzero]); + 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)) + @@ -1897,49 +1896,49 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_M00])[kw] = f_W_in - (c6o1*c2o27*( VeloX )); + (D.f[dM00])[kw] = f_W_in - (c6o1*c2o27*( VeloX )); wallMomentumX += -(c6o1*c2o27*( VeloX )); } q = q_dirW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_P00])[ke] = f_E_in - (c6o1*c2o27*(-VeloX )); + (D.f[dP00])[ke] = f_E_in - (c6o1*c2o27*(-VeloX )); wallMomentumX -= - (c6o1*c2o27*(-VeloX )); } q = q_dirN[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_0M0])[ks] = f_S_in - (c6o1*c2o27*( VeloY )); + (D.f[d0M0])[ks] = f_S_in - (c6o1*c2o27*( VeloY )); wallMomentumY += - (c6o1*c2o27*( VeloY )); } q = q_dirS[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_0P0])[kn] = f_N_in - (c6o1*c2o27*(-VeloY )); + (D.f[d0P0])[kn] = f_N_in - (c6o1*c2o27*(-VeloY )); wallMomentumY -= -(c6o1*c2o27*(-VeloY )); } q = q_dirT[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_00M])[kb] = f_B_in - (c6o1*c2o27*( VeloZ )); + (D.f[d00M])[kb] = f_B_in - (c6o1*c2o27*( VeloZ )); wallMomentumZ += - (c6o1*c2o27*( VeloZ )); } q = q_dirB[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_00P])[kt] = f_T_in - (c6o1*c2o27*(-VeloZ )); + (D.f[d00P])[kt] = f_T_in - (c6o1*c2o27*(-VeloZ )); wallMomentumZ -= -(c6o1*c2o27*(-VeloZ )); } q = q_dirNE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_MM0])[ksw] = f_SW_in - (c6o1*c1o54*(VeloX+VeloY)); + (D.f[dMM0])[ksw] = f_SW_in - (c6o1*c1o54*(VeloX+VeloY)); wallMomentumX += -(c6o1*c1o54*(VeloX+VeloY)); wallMomentumY += -(c6o1*c1o54*(VeloX+VeloY)); } @@ -1947,7 +1946,7 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirSW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_PP0])[kne] = f_NE_in - (c6o1*c1o54*(-VeloX-VeloY)); + (D.f[dPP0])[kne] = f_NE_in - (c6o1*c1o54*(-VeloX-VeloY)); wallMomentumX -= - (c6o1*c1o54*(-VeloX-VeloY)); wallMomentumY -= - (c6o1*c1o54*(-VeloX-VeloY)); } @@ -1955,7 +1954,7 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirSE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_MP0])[knw] = f_NW_in - (c6o1*c1o54*( VeloX-VeloY)); + (D.f[dMP0])[knw] = f_NW_in - (c6o1*c1o54*( VeloX-VeloY)); wallMomentumX += -(c6o1*c1o54*( VeloX-VeloY)); wallMomentumY -= -(c6o1*c1o54*( VeloX-VeloY)); } @@ -1963,7 +1962,7 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirNW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_PM0])[kse] = f_SE_in - (c6o1*c1o54*(-VeloX+VeloY)); + (D.f[dPM0])[kse] = f_SE_in - (c6o1*c1o54*(-VeloX+VeloY)); wallMomentumX -= - (c6o1*c1o54*(-VeloX+VeloY)); wallMomentumY += - (c6o1*c1o54*(-VeloX+VeloY)); } @@ -1971,7 +1970,7 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirTE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_M0M])[kbw] = f_BW_in - (c6o1*c1o54*( VeloX+VeloZ)); + (D.f[dM0M])[kbw] = f_BW_in - (c6o1*c1o54*( VeloX+VeloZ)); wallMomentumX += - (c6o1*c1o54*( VeloX+VeloZ)); wallMomentumZ += - (c6o1*c1o54*( VeloX+VeloZ)); } @@ -1979,7 +1978,7 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirBW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_P0P])[kte] = f_TE_in - (c6o1*c1o54*(-VeloX-VeloZ)); + (D.f[dP0P])[kte] = f_TE_in - (c6o1*c1o54*(-VeloX-VeloZ)); wallMomentumX -= - (c6o1*c1o54*(-VeloX-VeloZ)); wallMomentumZ -= - (c6o1*c1o54*(-VeloX-VeloZ)); } @@ -1987,7 +1986,7 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirBE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_M0P])[ktw] = f_TW_in - (c6o1*c1o54*( VeloX-VeloZ)); + (D.f[dM0P])[ktw] = f_TW_in - (c6o1*c1o54*( VeloX-VeloZ)); wallMomentumX += - (c6o1*c1o54*( VeloX-VeloZ)); wallMomentumZ -= - (c6o1*c1o54*( VeloX-VeloZ)); } @@ -1995,7 +1994,7 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirTW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_P0M])[kbe] = f_BE_in - (c6o1*c1o54*(-VeloX+VeloZ)); + (D.f[dP0M])[kbe] = f_BE_in - (c6o1*c1o54*(-VeloX+VeloZ)); wallMomentumX -= - (c6o1*c1o54*(-VeloX+VeloZ)); wallMomentumZ += - (c6o1*c1o54*(-VeloX+VeloZ)); } @@ -2003,7 +2002,7 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirTN[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_0MM])[kbs] = f_BS_in - (c6o1*c1o54*( VeloY+VeloZ)); + (D.f[d0MM])[kbs] = f_BS_in - (c6o1*c1o54*( VeloY+VeloZ)); wallMomentumY += - (c6o1*c1o54*( VeloY+VeloZ)); wallMomentumZ += - (c6o1*c1o54*( VeloY+VeloZ)); } @@ -2011,7 +2010,7 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirBS[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_0PP])[ktn] = f_TN_in - (c6o1*c1o54*( -VeloY-VeloZ)); + (D.f[d0PP])[ktn] = f_TN_in - (c6o1*c1o54*( -VeloY-VeloZ)); wallMomentumY -= - (c6o1*c1o54*( -VeloY-VeloZ)); wallMomentumZ -= - (c6o1*c1o54*( -VeloY-VeloZ)); } @@ -2019,7 +2018,7 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirBN[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_0MP])[kts] = f_TS_in - (c6o1*c1o54*( VeloY-VeloZ)); + (D.f[d0MP])[kts] = f_TS_in - (c6o1*c1o54*( VeloY-VeloZ)); wallMomentumY += - (c6o1*c1o54*( VeloY-VeloZ)); wallMomentumZ -= - (c6o1*c1o54*( VeloY-VeloZ)); } @@ -2027,7 +2026,7 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirTS[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_0PM])[kbn] = f_BN_in - (c6o1*c1o54*( -VeloY+VeloZ)); + (D.f[d0PM])[kbn] = f_BN_in - (c6o1*c1o54*( -VeloY+VeloZ)); wallMomentumY -= - (c6o1*c1o54*( -VeloY+VeloZ)); wallMomentumZ += - (c6o1*c1o54*( -VeloY+VeloZ)); } @@ -2035,7 +2034,7 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_MMM])[kbsw] = f_BSW_in - (c6o1*c1o216*( VeloX+VeloY+VeloZ)); + (D.f[dMMM])[kbsw] = f_BSW_in - (c6o1*c1o216*( VeloX+VeloY+VeloZ)); wallMomentumX += - (c6o1*c1o216*( VeloX+VeloY+VeloZ)); wallMomentumY += - (c6o1*c1o216*( VeloX+VeloY+VeloZ)); wallMomentumZ += - (c6o1*c1o216*( VeloX+VeloY+VeloZ)); @@ -2044,7 +2043,7 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_PPP])[ktne] = f_TNE_in - (c6o1*c1o216*(-VeloX-VeloY-VeloZ)); + (D.f[dPPP])[ktne] = f_TNE_in - (c6o1*c1o216*(-VeloX-VeloY-VeloZ)); wallMomentumX -= - (c6o1*c1o216*(-VeloX-VeloY-VeloZ)); wallMomentumY -= - (c6o1*c1o216*(-VeloX-VeloY-VeloZ)); wallMomentumZ -= - (c6o1*c1o216*(-VeloX-VeloY-VeloZ)); @@ -2053,7 +2052,7 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_MMP])[ktsw] = f_TSW_in - (c6o1*c1o216*( VeloX+VeloY-VeloZ)); + (D.f[dMMP])[ktsw] = f_TSW_in - (c6o1*c1o216*( VeloX+VeloY-VeloZ)); wallMomentumX += - (c6o1*c1o216*( VeloX+VeloY-VeloZ)); wallMomentumY += - (c6o1*c1o216*( VeloX+VeloY-VeloZ)); wallMomentumZ -= - (c6o1*c1o216*( VeloX+VeloY-VeloZ)); @@ -2062,7 +2061,7 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_PPM])[kbne] = f_BNE_in - (c6o1*c1o216*(-VeloX-VeloY+VeloZ)); + (D.f[dPPM])[kbne] = f_BNE_in - (c6o1*c1o216*(-VeloX-VeloY+VeloZ)); wallMomentumX -= - (c6o1*c1o216*(-VeloX-VeloY+VeloZ)); wallMomentumY -= - (c6o1*c1o216*(-VeloX-VeloY+VeloZ)); wallMomentumZ += - (c6o1*c1o216*(-VeloX-VeloY+VeloZ)); @@ -2071,7 +2070,7 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_MPM])[kbnw] = f_BNW_in - (c6o1*c1o216*( VeloX-VeloY+VeloZ)); + (D.f[dMPM])[kbnw] = f_BNW_in - (c6o1*c1o216*( VeloX-VeloY+VeloZ)); wallMomentumX += - (c6o1*c1o216*( VeloX-VeloY+VeloZ)); wallMomentumY -= - (c6o1*c1o216*( VeloX-VeloY+VeloZ)); wallMomentumZ += - (c6o1*c1o216*( VeloX-VeloY+VeloZ)); @@ -2080,7 +2079,7 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_PMP])[ktse] = f_TSE_in - (c6o1*c1o216*(-VeloX+VeloY-VeloZ)); + (D.f[dPMP])[ktse] = f_TSE_in - (c6o1*c1o216*(-VeloX+VeloY-VeloZ)); wallMomentumX -= - (c6o1*c1o216*(-VeloX+VeloY-VeloZ)); wallMomentumY += - (c6o1*c1o216*(-VeloX+VeloY-VeloZ)); wallMomentumZ -= - (c6o1*c1o216*(-VeloX+VeloY-VeloZ)); @@ -2089,7 +2088,7 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_MPP])[ktnw] = f_TNW_in - (c6o1*c1o216*( VeloX-VeloY-VeloZ)); + (D.f[dMPP])[ktnw] = f_TNW_in - (c6o1*c1o216*( VeloX-VeloY-VeloZ)); wallMomentumX += - (c6o1*c1o216*( VeloX-VeloY-VeloZ)); wallMomentumY -= - (c6o1*c1o216*( VeloX-VeloY-VeloZ)); wallMomentumZ -= - (c6o1*c1o216*( VeloX-VeloY-VeloZ)); @@ -2098,7 +2097,7 @@ __global__ void BBStressPressureDevice27( real* DD, q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) { - (D.f[DIR_PMM])[kbse] = f_BSE_in - (c6o1*c1o216*(-VeloX+VeloY+VeloZ)); + (D.f[dPMM])[kbse] = f_BSE_in - (c6o1*c1o216*(-VeloX+VeloY+VeloZ)); wallMomentumX -= - (c6o1*c1o216*(-VeloX+VeloY+VeloZ)); wallMomentumY += - (c6o1*c1o216*(-VeloX+VeloY+VeloZ)); wallMomentumZ += - (c6o1*c1o216*(-VeloX+VeloY+VeloZ)); diff --git a/src/gpu/core/GPU/ThinWallBCs27.cu b/src/gpu/core/GPU/ThinWallBCs27.cu new file mode 100644 index 0000000000000000000000000000000000000000..e35782207c90cada824b5c5423a566afa3645573 --- /dev/null +++ b/src/gpu/core/GPU/ThinWallBCs27.cu @@ -0,0 +1,1137 @@ +// _ ___ __ __________ _ __ ______________ __ +// | | / (_)____/ /___ ______ _/ / ____/ /_ __(_)___/ /____ / ___/ __ / / / / +// | | / / / ___/ __/ / / / __ `/ / /_ / / / / / / __ / ___/ / /___/ /_/ / / / / +// | |/ / / / / /_/ /_/ / /_/ / / __/ / / /_/ / / /_/ (__ ) / /_) / ____/ /__/ / +// |___/_/_/ \__/\__,_/\__,_/_/_/ /_/\__,_/_/\__,_/____/ \____/_/ \_____/ +// +////////////////////////////////////////////////////////////////////////// + +/* 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 QVelDeviceCompThinWallsPartOne27( + real* vx, + real* vy, + real* vz, + real* DD, + int* k_Q, + real* QQ, + uint numberOfBCnodes, + real om1, + uint* neighborX, + uint* neighborY, + uint* 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]; + } + //////////////////////////////////////////////////////////////////////////////// + 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 VeloX = vx[k]; + real VeloY = vy[k]; + real VeloZ = vz[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 = &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 + uint KQK = k_Q[k]; + uint kzero= KQK; + uint ke = KQK; + uint kw = neighborX[KQK]; + uint kn = KQK; + uint ks = neighborY[KQK]; + uint kt = KQK; + uint kb = neighborZ[KQK]; + uint ksw = neighborY[kw]; + uint kne = KQK; + uint kse = ks; + uint knw = kw; + uint kbw = neighborZ[kw]; + uint kte = KQK; + uint kbe = kb; + uint ktw = kw; + uint kbs = neighborZ[ks]; + uint ktn = KQK; + uint kbn = kb; + uint kts = ks; + uint ktse = ks; + uint kbnw = kbw; + uint ktnw = kw; + uint kbse = kbs; + uint ktsw = ksw; + uint kbne = kb; + uint ktne = KQK; + uint 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, 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 + ((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); + + ////////////////////////////////////////////////////////////////////////// + + q = q_dirE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho + c9o2 * ( vx1 )*( vx1 ) * (c1o1 + drho)-cu_sq); + (D.f[dM00])[kw] = (c1o1 - q) / (c1o1 + q)*(f_E - f_W + (f_E + f_W - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_E + f_W) - c6o1*c2o27*(VeloX)) / (c1o1 + q); + } + + q = q_dirW[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c2o27* (drho + c9o2 * (-vx1)*(-vx1) * (c1o1 + drho) - cu_sq); + (D.f[dP00])[ke] = (c1o1 - q) / (c1o1 + q)*(f_W - f_E + (f_W + f_E - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_W + f_E) - c6o1*c2o27*(-VeloX)) / (c1o1 + q); + } + + q = q_dirN[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c2o27* (drho + c9o2 * (vx2)*(vx2) * (c1o1 + drho) - cu_sq); + (D.f[d0M0])[ks] = (c1o1 - q) / (c1o1 + q)*(f_N - f_S + (f_N + f_S - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_N + f_S) - c6o1*c2o27*(VeloY)) / (c1o1 + q); + } + + q = q_dirS[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c2o27* (drho + c9o2 * (-vx2)*(-vx2) * (c1o1 + drho) - cu_sq); + (D.f[d0P0])[kn] = (c1o1 - q) / (c1o1 + q)*(f_S - f_N + (f_S + f_N - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_S + f_N) - c6o1*c2o27*(-VeloY)) / (c1o1 + q); + } + + q = q_dirT[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c2o27* (drho + c9o2 * (vx3)*(vx3) * (c1o1 + drho) - cu_sq); + (D.f[d00M])[kb] = (c1o1 - q) / (c1o1 + q)*(f_T - f_B + (f_T + f_B - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_T + f_B) - c6o1*c2o27*(VeloZ)) / (c1o1 + q); + } + + q = q_dirB[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c2o27* (drho + c9o2 * (-vx3)*(-vx3) * (c1o1 + drho) - cu_sq); + (D.f[d00P])[kt] = (c1o1 - q) / (c1o1 + q)*(f_B - f_T + (f_B + f_T - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_B + f_T) - c6o1*c2o27*(-VeloZ)) / (c1o1 + q); + } + + q = q_dirNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho + c9o2 * ( vx1+vx2 )*( vx1+vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dMM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*( VeloX+VeloY))/(c1o1+q); + } + + q = q_dirSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho + c9o2 * (-vx1-vx2 )*(-vx1-vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dPP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q); + } + + q = q_dirSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho + c9o2 * ( vx1-vx2 )*( vx1-vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dMP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q); + } + + q = q_dirNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho + c9o2 * (-vx1+vx2 )*(-vx1+vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dPM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q); + } + + q = q_dirTE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho + c9o2 * ( vx1 +vx3)*( vx1 +vx3) * (c1o1 + drho)-cu_sq); + (D.f[dM0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q); + } + + q = q_dirBW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho + c9o2 * (-vx1 -vx3)*(-vx1 -vx3) * (c1o1 + drho)-cu_sq); + (D.f[dP0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q); + } + + q = q_dirBE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho + c9o2 * ( vx1 -vx3)*( vx1 -vx3) * (c1o1 + drho)-cu_sq); + (D.f[dM0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q); + } + + q = q_dirTW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho + c9o2 * (-vx1 +vx3)*(-vx1 +vx3) * (c1o1 + drho)-cu_sq); + (D.f[dP0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q); + } + + q = q_dirTN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho + c9o2 * ( vx2+vx3)*( vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q); + } + + q = q_dirBS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho + c9o2 * ( -vx2-vx3)*( -vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*(-VeloY-VeloZ))/(c1o1+q); + } + + q = q_dirBN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho + c9o2 * ( vx2-vx3)*( vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q); + } + + q = q_dirTS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho + c9o2 * ( -vx2+vx3)*( -vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*(-VeloY+VeloZ))/(c1o1+q); + } + + q = q_dirTNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho + c9o2 * ( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMMM])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q); + } + + q = q_dirBSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho + c9o2 * (-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPPP])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q); + } + + q = q_dirBNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho + c9o2 * ( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMMP])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q); + } + + q = q_dirTSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho + c9o2 * (-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPPM])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q); + } + + q = q_dirTSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho + c9o2 * ( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMPM])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q); + } + + q = q_dirBNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho + c9o2 * (-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPMP])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q); + } + + q = q_dirBSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho + c9o2 * ( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMPP])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q); + } + + q = q_dirTNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho + c9o2 * (-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPMM])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q); + } + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void QDeviceCompThinWallsPartOne27( + real* DD, + 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]; + } + //////////////////////////////////////////////////////////////////////////////// + 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, 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 + ((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); + //////////////////////////////////////////////////////////////////////////////// + + q = q_dirE[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c2o27* (drho + c9o2*(vx1)*(vx1) * (c1o1 + drho) - cu_sq); + (D.f[dM00])[kw] = (c1o1 - q) / (c1o1 + q)*(f_E - f_W + (f_E + f_W - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_E + f_W)) / (c1o1 + q); + } + + q = q_dirW[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c2o27* (drho + c9o2*(-vx1)*(-vx1) * (c1o1 + drho) - cu_sq); + (D.f[dP00])[ke] = (c1o1 - q) / (c1o1 + q)*(f_W - f_E + (f_W + f_E - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_W + f_E)) / (c1o1 + q); + } + + q = q_dirN[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c2o27* (drho + c9o2*(vx2)*(vx2) * (c1o1 + drho) - cu_sq); + (D.f[d0M0])[ks] = (c1o1 - q) / (c1o1 + q)*(f_N - f_S + (f_N + f_S - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_N + f_S)) / (c1o1 + q); + } + + q = q_dirS[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c2o27* (drho + c9o2*(-vx2)*(-vx2) * (c1o1 + drho) - cu_sq); + (D.f[d0P0])[kn] = (c1o1 - q) / (c1o1 + q)*(f_S - f_N + (f_S + f_N - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_S + f_N)) / (c1o1 + q); + } + + q = q_dirT[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c2o27* (drho + c9o2*(vx3)*(vx3) * (c1o1 + drho) - cu_sq); + (D.f[d00M])[kb] = (c1o1 - q) / (c1o1 + q)*(f_T - f_B + (f_T + f_B - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_T + f_B)) / (c1o1 + q); + } + + q = q_dirB[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c2o27* (drho + c9o2*(-vx3)*(-vx3) * (c1o1 + drho) - cu_sq); + (D.f[d00P])[kt] = (c1o1 - q) / (c1o1 + q)*(f_B - f_T + (f_B + f_T - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_B + f_T)) / (c1o1 + q); + } + + q = q_dirNE[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o54* (drho + c9o2*(vx1 + vx2)*(vx1 + vx2) * (c1o1 + drho) - cu_sq); + (D.f[dMM0])[ksw] = (c1o1 - q) / (c1o1 + q)*(f_NE - f_SW + (f_NE + f_SW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_NE + f_SW)) / (c1o1 + q); + } + + q = q_dirSW[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o54* (drho + c9o2*(-vx1 - vx2)*(-vx1 - vx2) * (c1o1 + drho) - cu_sq); + (D.f[dPP0])[kne] = (c1o1 - q) / (c1o1 + q)*(f_SW - f_NE + (f_SW + f_NE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_SW + f_NE)) / (c1o1 + q); + } + + q = q_dirSE[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o54* (drho + c9o2*(vx1 - vx2)*(vx1 - vx2) * (c1o1 + drho) - cu_sq); + (D.f[dMP0])[knw] = (c1o1 - q) / (c1o1 + q)*(f_SE - f_NW + (f_SE + f_NW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_SE + f_NW)) / (c1o1 + q); + } + + q = q_dirNW[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o54* (drho + c9o2*(-vx1 + vx2)*(-vx1 + vx2) * (c1o1 + drho) - cu_sq); + (D.f[dPM0])[kse] = (c1o1 - q) / (c1o1 + q)*(f_NW - f_SE + (f_NW + f_SE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_NW + f_SE)) / (c1o1 + q); + } + + q = q_dirTE[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o54* (drho + c9o2*(vx1 + vx3)*(vx1 + vx3) * (c1o1 + drho) - cu_sq); + (D.f[dM0M])[kbw] = (c1o1 - q) / (c1o1 + q)*(f_TE - f_BW + (f_TE + f_BW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TE + f_BW)) / (c1o1 + q); + } + + q = q_dirBW[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o54* (drho + c9o2*(-vx1 - vx3)*(-vx1 - vx3) * (c1o1 + drho) - cu_sq); + (D.f[dP0P])[kte] = (c1o1 - q) / (c1o1 + q)*(f_BW - f_TE + (f_BW + f_TE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BW + f_TE)) / (c1o1 + q); + } + + q = q_dirBE[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o54* (drho + c9o2*(vx1 - vx3)*(vx1 - vx3) * (c1o1 + drho) - cu_sq); + (D.f[dM0P])[ktw] = (c1o1 - q) / (c1o1 + q)*(f_BE - f_TW + (f_BE + f_TW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BE + f_TW)) / (c1o1 + q); + } + + q = q_dirTW[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o54* (drho + c9o2*(-vx1 + vx3)*(-vx1 + vx3) * (c1o1 + drho) - cu_sq); + (D.f[dP0M])[kbe] = (c1o1 - q) / (c1o1 + q)*(f_TW - f_BE + (f_TW + f_BE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TW + f_BE)) / (c1o1 + q); + } + + q = q_dirTN[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o54* (drho + c9o2*(vx2 + vx3)*(vx2 + vx3) * (c1o1 + drho) - cu_sq); + (D.f[d0MM])[kbs] = (c1o1 - q) / (c1o1 + q)*(f_TN - f_BS + (f_TN + f_BS - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TN + f_BS)) / (c1o1 + q); + } + + q = q_dirBS[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o54* (drho + c9o2*(-vx2 - vx3)*(-vx2 - vx3) * (c1o1 + drho) - cu_sq); + (D.f[d0PP])[ktn] = (c1o1 - q) / (c1o1 + q)*(f_BS - f_TN + (f_BS + f_TN - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BS + f_TN)) / (c1o1 + q); + } + + q = q_dirBN[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o54* (drho + c9o2*(vx2 - vx3)*(vx2 - vx3) * (c1o1 + drho) - cu_sq); + (D.f[d0MP])[kts] = (c1o1 - q) / (c1o1 + q)*(f_BN - f_TS + (f_BN + f_TS - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BN + f_TS)) / (c1o1 + q); + } + + q = q_dirTS[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o54* (drho + c9o2*(-vx2 + vx3)*(-vx2 + vx3) * (c1o1 + drho) - cu_sq); + (D.f[d0PM])[kbn] = (c1o1 - q) / (c1o1 + q)*(f_TS - f_BN + (f_TS + f_BN - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TS + f_BN)) / (c1o1 + q); + } + + q = q_dirTNE[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o216*(drho + c9o2*(vx1 + vx2 + vx3)*(vx1 + vx2 + vx3) * (c1o1 + drho) - cu_sq); + (D.f[dMMM])[kbsw] = (c1o1 - q) / (c1o1 + q)*(f_TNE - f_BSW + (f_TNE + f_BSW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TNE + f_BSW)) / (c1o1 + q); + } + + q = q_dirBSW[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o216*(drho + c9o2*(-vx1 - vx2 - vx3)*(-vx1 - vx2 - vx3) * (c1o1 + drho) - cu_sq); + (D.f[dPPP])[ktne] = (c1o1 - q) / (c1o1 + q)*(f_BSW - f_TNE + (f_BSW + f_TNE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BSW + f_TNE)) / (c1o1 + q); + } + + q = q_dirBNE[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o216*(drho + c9o2*(vx1 + vx2 - vx3)*(vx1 + vx2 - vx3) * (c1o1 + drho) - cu_sq); + (D.f[dMMP])[ktsw] = (c1o1 - q) / (c1o1 + q)*(f_BNE - f_TSW + (f_BNE + f_TSW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BNE + f_TSW)) / (c1o1 + q); + } + + q = q_dirTSW[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o216*(drho + c9o2*(-vx1 - vx2 + vx3)*(-vx1 - vx2 + vx3) * (c1o1 + drho) - cu_sq); + (D.f[dPPM])[kbne] = (c1o1 - q) / (c1o1 + q)*(f_TSW - f_BNE + (f_TSW + f_BNE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TSW + f_BNE)) / (c1o1 + q); + } + + q = q_dirTSE[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o216*(drho + c9o2*(vx1 - vx2 + vx3)*(vx1 - vx2 + vx3) * (c1o1 + drho) - cu_sq); + (D.f[dMPM])[kbnw] = (c1o1 - q) / (c1o1 + q)*(f_TSE - f_BNW + (f_TSE + f_BNW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TSE + f_BNW)) / (c1o1 + q); + } + + q = q_dirBNW[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o216*(drho + c9o2*(-vx1 + vx2 - vx3)*(-vx1 + vx2 - vx3) * (c1o1 + drho) - cu_sq); + (D.f[dPMP])[ktse] = (c1o1 - q) / (c1o1 + q)*(f_BNW - f_TSE + (f_BNW + f_TSE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BNW + f_TSE)) / (c1o1 + q); + } + + q = q_dirBSE[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o216*(drho + c9o2*(vx1 - vx2 - vx3)*(vx1 - vx2 - vx3) * (c1o1 + drho) - cu_sq); + (D.f[dMPP])[ktnw] = (c1o1 - q) / (c1o1 + q)*(f_BSE - f_TNW + (f_BSE + f_TNW - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_BSE + f_TNW)) / (c1o1 + q); + } + + q = q_dirTNW[k]; + if (q >= c0o1 && q <= c1o1) + { + feq = c1o216*(drho + c9o2*(-vx1 + vx2 + vx3)*(-vx1 + vx2 + vx3) * (c1o1 + drho) - cu_sq); + (D.f[dPMM])[kbse] = (c1o1 - q) / (c1o1 + q)*(f_TNW - f_BSE + (f_TNW + f_BSE - c2o1*feq*om1) / (c1o1 - om1))*c1o2 + (q*(f_TNW + f_BSE)) / (c1o1 + q); + } + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void QThinWallsPartTwo27( + real* DD, + int* k_Q, + real* QQ, + uint numberOfBCnodes, + uint* geom, + uint* neighborX, + uint* neighborY, + uint* neighborZ, + uint* neighborWSB, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //////////////////////////////////////////////////////////////////////////////// + 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 + uint KQK = k_Q[k]; + //uint kzero= KQK; + uint ke = KQK; + uint kw = neighborX[KQK]; + uint kn = KQK; + uint ks = neighborY[KQK]; + uint kt = KQK; + uint kb = neighborZ[KQK]; + uint ksw = neighborY[kw]; + uint kne = KQK; + uint kse = ks; + uint knw = kw; + uint kbw = neighborZ[kw]; + uint kte = KQK; + uint kbe = kb; + uint ktw = kw; + uint kbs = neighborZ[ks]; + uint ktn = KQK; + uint kbn = kb; + uint kts = ks; + uint ktse = ks; + uint kbnw = kbw; + uint ktnw = kw; + uint kbse = kbs; + uint ktsw = ksw; + uint kbne = kb; + uint ktne = KQK; + uint kbsw = neighborZ[ksw]; + //////////////////////////////////////////////////////////////////////////////// + //anti ET intermediate steps + uint kmmm = neighborWSB[KQK]; // -1 -1 -1 + uint k0mm = neighborX[kmmm]; // 0 -1 -1 + uint km0m = neighborY[kmmm]; // -1 0 -1 + uint kmm0 = neighborZ[kmmm]; // -1 -1 0 + uint k0m0 = neighborX[kmm0]; // 0 -1 0 + uint km00 = neighborY[kmm0]; // -1 0 0 + ///////////////////////////////////////////////// + //final indices for anti ET + uint kpmm = neighborX[k0mm]; // 1 -1 -1 + uint kmpm = neighborY[km0m]; // -1 1 -1 + uint kmmp = neighborZ[kmm0]; // -1 -1 1 + uint kmp0 = neighborY[km00]; // -1 1 0 + uint km0p = neighborZ[km00]; // -1 0 1 + uint k0mp = neighborZ[k0m0]; // 0 -1 1 + //////////////////////////////////////////////////////////////////////////////// + Distributions27 D, DN; + 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]; + } + if (isEvenTimestep==false) + { + DN.f[dP00] = &DD[dP00 * numberOfLBnodes]; + DN.f[dM00] = &DD[dM00 * numberOfLBnodes]; + DN.f[d0P0] = &DD[d0P0 * numberOfLBnodes]; + DN.f[d0M0] = &DD[d0M0 * numberOfLBnodes]; + DN.f[d00P] = &DD[d00P * numberOfLBnodes]; + DN.f[d00M] = &DD[d00M * numberOfLBnodes]; + DN.f[dPP0] = &DD[dPP0 * numberOfLBnodes]; + DN.f[dMM0] = &DD[dMM0 * numberOfLBnodes]; + DN.f[dPM0] = &DD[dPM0 * numberOfLBnodes]; + DN.f[dMP0] = &DD[dMP0 * numberOfLBnodes]; + DN.f[dP0P] = &DD[dP0P * numberOfLBnodes]; + DN.f[dM0M] = &DD[dM0M * numberOfLBnodes]; + DN.f[dP0M] = &DD[dP0M * numberOfLBnodes]; + DN.f[dM0P] = &DD[dM0P * numberOfLBnodes]; + DN.f[d0PP] = &DD[d0PP * numberOfLBnodes]; + DN.f[d0MM] = &DD[d0MM * numberOfLBnodes]; + DN.f[d0PM] = &DD[d0PM * numberOfLBnodes]; + DN.f[d0MP] = &DD[d0MP * numberOfLBnodes]; + DN.f[d000] = &DD[d000 * numberOfLBnodes]; + DN.f[dPPP] = &DD[dPPP * numberOfLBnodes]; + DN.f[dMMP] = &DD[dMMP * numberOfLBnodes]; + DN.f[dPMP] = &DD[dPMP * numberOfLBnodes]; + DN.f[dMPP] = &DD[dMPP * numberOfLBnodes]; + DN.f[dPPM] = &DD[dPPM * numberOfLBnodes]; + DN.f[dMMM] = &DD[dMMM * numberOfLBnodes]; + DN.f[dPMM] = &DD[dPMM * numberOfLBnodes]; + DN.f[dMPM] = &DD[dMPM * numberOfLBnodes]; + } + else + { + DN.f[dM00] = &DD[dP00 * numberOfLBnodes]; + DN.f[dP00] = &DD[dM00 * numberOfLBnodes]; + DN.f[d0M0] = &DD[d0P0 * numberOfLBnodes]; + DN.f[d0P0] = &DD[d0M0 * numberOfLBnodes]; + DN.f[d00M] = &DD[d00P * numberOfLBnodes]; + DN.f[d00P] = &DD[d00M * numberOfLBnodes]; + DN.f[dMM0] = &DD[dPP0 * numberOfLBnodes]; + DN.f[dPP0] = &DD[dMM0 * numberOfLBnodes]; + DN.f[dMP0] = &DD[dPM0 * numberOfLBnodes]; + DN.f[dPM0] = &DD[dMP0 * numberOfLBnodes]; + DN.f[dM0M] = &DD[dP0P * numberOfLBnodes]; + DN.f[dP0P] = &DD[dM0M * numberOfLBnodes]; + DN.f[dM0P] = &DD[dP0M * numberOfLBnodes]; + DN.f[dP0M] = &DD[dM0P * numberOfLBnodes]; + DN.f[d0MM] = &DD[d0PP * numberOfLBnodes]; + DN.f[d0PP] = &DD[d0MM * numberOfLBnodes]; + DN.f[d0MP] = &DD[d0PM * numberOfLBnodes]; + DN.f[d0PM] = &DD[d0MP * numberOfLBnodes]; + DN.f[d000] = &DD[d000 * numberOfLBnodes]; + DN.f[dPPP] = &DD[dMMM * numberOfLBnodes]; + DN.f[dMMP] = &DD[dPPM * numberOfLBnodes]; + DN.f[dPMP] = &DD[dMPM * numberOfLBnodes]; + DN.f[dMPP] = &DD[dPMM * numberOfLBnodes]; + DN.f[dPPM] = &DD[dMMP * numberOfLBnodes]; + DN.f[dMMM] = &DD[dPPP * numberOfLBnodes]; + DN.f[dPMM] = &DD[dMPP * numberOfLBnodes]; + DN.f[dMPM] = &DD[dPMP * numberOfLBnodes]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //directions allways exchange + //(-1 -1 -1) (-1 0 0) ( 0 -1 0) ( 0 0 -1) (-1 -1 0) (-1 0 -1) ( 0 -1 -1) ( 1 1 -1) ( 1 -1 1) (-1 1 1) ( 1 -1 0) ( 1 0 -1) ( 0 1 -1) + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //directions exchange if solid neighbor + //( 1 1 1) ( 1 0 0) ( 0 1 0) ( 0 0 1) ( 1 1 0) ( 1 0 1) ( 0 1 1) (-1 -1 1) (-1 1 -1) ( 1 -1 -1) (-1 1 0) (-1 0 1) ( 0 -1 1) + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real q, tmp; + q = q_dirE[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kw ] < GEO_FLUID){tmp = (DN.f[dM00])[kw ]; (DN.f[dM00])[kw ]=(D.f[dM00])[kw ]; (D.f[dM00])[kw ]=tmp;}} + q = q_dirW[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[dP00])[ke ]; (DN.f[dP00])[ke ]=(D.f[dP00])[ke ]; (D.f[dP00])[ke ]=tmp;}} + q = q_dirN[k]; if (q>=c0o1 && q<=c1o1){ if (geom[ks ] < GEO_FLUID){tmp = (DN.f[d0M0])[ks ]; (DN.f[d0M0])[ks ]=(D.f[d0M0])[ks ]; (D.f[d0M0])[ks ]=tmp;}} + q = q_dirS[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[d0P0])[kn ]; (DN.f[d0P0])[kn ]=(D.f[d0P0])[kn ]; (D.f[d0P0])[kn ]=tmp;}} + q = q_dirT[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kb ] < GEO_FLUID){tmp = (DN.f[d00M])[kb ]; (DN.f[d00M])[kb ]=(D.f[d00M])[kb ]; (D.f[d00M])[kb ]=tmp;}} + q = q_dirB[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[d00P])[kt ]; (DN.f[d00P])[kt ]=(D.f[d00P])[kt ]; (D.f[d00P])[kt ]=tmp;}} + q = q_dirNE[k]; if (q>=c0o1 && q<=c1o1){ if (geom[ksw ] < GEO_FLUID){tmp = (DN.f[dMM0])[ksw ]; (DN.f[dMM0])[ksw ]=(D.f[dMM0])[ksw ]; (D.f[dMM0])[ksw ]=tmp;}} + q = q_dirSW[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[dPP0])[kne ]; (DN.f[dPP0])[kne ]=(D.f[dPP0])[kne ]; (D.f[dPP0])[kne ]=tmp;}} + q = q_dirSE[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[dMP0])[knw ]; (DN.f[dMP0])[knw ]=(D.f[dMP0])[knw ]; (D.f[dMP0])[knw ]=tmp;}} + q = q_dirNW[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kmp0] < GEO_FLUID){tmp = (DN.f[dPM0])[kse ]; (DN.f[dPM0])[kse ]=(D.f[dPM0])[kse ]; (D.f[dPM0])[kse ]=tmp;}} + q = q_dirTE[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kbw ] < GEO_FLUID){tmp = (DN.f[dM0M])[kbw ]; (DN.f[dM0M])[kbw ]=(D.f[dM0M])[kbw ]; (D.f[dM0M])[kbw ]=tmp;}} + q = q_dirBW[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[dP0P])[kte ]; (DN.f[dP0P])[kte ]=(D.f[dP0P])[kte ]; (D.f[dP0P])[kte ]=tmp;}} + q = q_dirBE[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[dM0P])[ktw ]; (DN.f[dM0P])[ktw ]=(D.f[dM0P])[ktw ]; (D.f[dM0P])[ktw ]=tmp;}} + q = q_dirTW[k]; if (q>=c0o1 && q<=c1o1){ if (geom[km0p] < GEO_FLUID){tmp = (DN.f[dP0M])[kbe ]; (DN.f[dP0M])[kbe ]=(D.f[dP0M])[kbe ]; (D.f[dP0M])[kbe ]=tmp;}} + q = q_dirTN[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kbs ] < GEO_FLUID){tmp = (DN.f[d0MM])[kbs ]; (DN.f[d0MM])[kbs ]=(D.f[d0MM])[kbs ]; (D.f[d0MM])[kbs ]=tmp;}} + q = q_dirBS[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[d0PP])[ktn ]; (DN.f[d0PP])[ktn ]=(D.f[d0PP])[ktn ]; (D.f[d0PP])[ktn ]=tmp;}} + q = q_dirBN[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[d0MP])[kts ]; (DN.f[d0MP])[kts ]=(D.f[d0MP])[kts ]; (D.f[d0MP])[kts ]=tmp;}} + q = q_dirTS[k]; if (q>=c0o1 && q<=c1o1){ if (geom[k0mp] < GEO_FLUID){tmp = (DN.f[d0PM])[kbn ]; (DN.f[d0PM])[kbn ]=(D.f[d0PM])[kbn ]; (D.f[d0PM])[kbn ]=tmp;}} + q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kbsw] < GEO_FLUID){tmp = (DN.f[dMMM])[kbsw]; (DN.f[dMMM])[kbsw]=(D.f[dMMM])[kbsw]; (D.f[dMMM])[kbsw]=tmp;}} + q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[dPPP])[ktne]; (DN.f[dPPP])[ktne]=(D.f[dPPP])[ktne]; (D.f[dPPP])[ktne]=tmp;}} + q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[dMMP])[ktsw]; (DN.f[dMMP])[ktsw]=(D.f[dMMP])[ktsw]; (D.f[dMMP])[ktsw]=tmp;}} + q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kmmp] < GEO_FLUID){tmp = (DN.f[dPPM])[kbne]; (DN.f[dPPM])[kbne]=(D.f[dPPM])[kbne]; (D.f[dPPM])[kbne]=tmp;}} + q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[dMPM])[kbnw]; (DN.f[dMPM])[kbnw]=(D.f[dMPM])[kbnw]; (D.f[dMPM])[kbnw]=tmp;}} + q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kmpm] < GEO_FLUID){tmp = (DN.f[dPMP])[ktse]; (DN.f[dPMP])[ktse]=(D.f[dPMP])[ktse]; (D.f[dPMP])[ktse]=tmp;}} + q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1){ if (geom[kpmm] < GEO_FLUID){tmp = (DN.f[dMPP])[ktnw]; (DN.f[dMPP])[ktnw]=(D.f[dMPP])[ktnw]; (D.f[dMPP])[ktnw]=tmp;}} + q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1){ {tmp = (DN.f[dPMM])[kbse]; (DN.f[dPMM])[kbse]=(D.f[dPMM])[kbse]; (D.f[dPMM])[kbse]=tmp;}} + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/gpu/VirtualFluids_GPU/GPU/TurbulenceIntensity.cu b/src/gpu/core/GPU/TurbulenceIntensity.cu similarity index 57% rename from src/gpu/VirtualFluids_GPU/GPU/TurbulenceIntensity.cu rename to src/gpu/core/GPU/TurbulenceIntensity.cu index 82e5f98fda0086458f2bc937dbe33e7b66feb2c5..15f2cb2806fe096391a2f57a39c964f3ffd25c1a 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/TurbulenceIntensity.cu +++ b/src/gpu/core/GPU/TurbulenceIntensity.cu @@ -12,7 +12,6 @@ #include "basics/constants/NumericConstants.h" #include "lbm/MacroscopicQuantities.h" -#include "../Kernel/Utilities/DistributionHelper.cuh" #include "LBM/GPUHelperFunctions/KernelUtilities.h" @@ -44,34 +43,37 @@ __global__ void CalcTurbulenceIntensity( //! const unsigned nodeIndex = getNodeIndex(); - if (nodeIndex >= numberOfLBnodes) - return; + if (nodeIndex >= numberOfLBnodes) + return; - if (!isValidFluidNode(typeOfGridNode[nodeIndex])) - return; + if (!isValidFluidNode(typeOfGridNode[nodeIndex])) + return; - DistributionWrapper distr_wrapper(distributions, numberOfLBnodes, isEvenTimestep, nodeIndex, neighborX, neighborY, neighborZ); - const auto &distribution = distr_wrapper.distribution; + Distributions27 dist; + vf::gpu::getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); + vf::gpu::ListIndices listIndices(nodeIndex, neighborX, neighborY, neighborZ); - // analogue to LBCalcMacCompSP27 - real rho = vf::lbm::getDensity(distribution.f); - real vx = vf::lbm::getCompressibleVelocityX1(distribution.f, rho); - real vy = vf::lbm::getCompressibleVelocityX2(distribution.f, rho); - real vz = vf::lbm::getCompressibleVelocityX3(distribution.f, rho); + real distribution[27]; + vf::gpu::getPreCollisionDistribution(distribution, dist, listIndices); + // analogue to LBCalcMacCompSP27 + real rho = vf::lbm::getDensity(distribution); + real vx = vf::lbm::getCompressibleVelocityX1(distribution, rho); + real vy = vf::lbm::getCompressibleVelocityX2(distribution, rho); + real vz = vf::lbm::getCompressibleVelocityX3(distribution, rho); - // compute subtotals: - // fluctuations - vxx[nodeIndex] = vxx[nodeIndex] + vx * vx; - vyy[nodeIndex] = vyy[nodeIndex] + vy * vy; - vzz[nodeIndex] = vzz[nodeIndex] + vz * vz; - vxy[nodeIndex] = vxy[nodeIndex] + vx * vy; - vxz[nodeIndex] = vxz[nodeIndex] + vx * vz; - vyz[nodeIndex] = vyz[nodeIndex] + vy * vz; + // compute subtotals: + // fluctuations + vxx[nodeIndex] = vxx[nodeIndex] + vx * vx; + vyy[nodeIndex] = vyy[nodeIndex] + vy * vy; + vzz[nodeIndex] = vzz[nodeIndex] + vz * vz; + vxy[nodeIndex] = vxy[nodeIndex] + vx * vy; + vxz[nodeIndex] = vxz[nodeIndex] + vx * vz; + vyz[nodeIndex] = vyz[nodeIndex] + vy * vz; - // velocity (for mean velocity) - vx_mean[nodeIndex] = vx_mean[nodeIndex] + vx; - vy_mean[nodeIndex] = vy_mean[nodeIndex] + vy; - vz_mean[nodeIndex] = vz_mean[nodeIndex] + vz; + // velocity (for mean velocity) + vx_mean[nodeIndex] = vx_mean[nodeIndex] + vx; + vy_mean[nodeIndex] = vy_mean[nodeIndex] + vy; + vz_mean[nodeIndex] = vz_mean[nodeIndex] + vz; } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/gpu/VirtualFluids_GPU/GPU/TurbulentViscosityKernels.cu b/src/gpu/core/GPU/TurbulentViscosityKernels.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/GPU/TurbulentViscosityKernels.cu rename to src/gpu/core/GPU/TurbulentViscosityKernels.cu diff --git a/src/gpu/VirtualFluids_GPU/GPU/TurbulentViscosityKernels.h b/src/gpu/core/GPU/TurbulentViscosityKernels.h similarity index 98% rename from src/gpu/VirtualFluids_GPU/GPU/TurbulentViscosityKernels.h rename to src/gpu/core/GPU/TurbulentViscosityKernels.h index 74d0e69a181e94c6d34e9207f203fb852d9d2fd1..1f83e5878fc4da2442f40597c8de9eba631fce18 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/TurbulentViscosityKernels.h +++ b/src/gpu/core/GPU/TurbulentViscosityKernels.h @@ -38,7 +38,7 @@ #include <cuda_runtime.h> #include "LBM/LB.h" -#include "DataTypes.h" +#include <basics/DataTypes.h> #include <basics/constants/NumericConstants.h> using namespace vf::basics::constant; diff --git a/src/gpu/core/GPU/VelocityBCs27.cu b/src/gpu/core/GPU/VelocityBCs27.cu new file mode 100644 index 0000000000000000000000000000000000000000..f7e0a574578afb515b3a5665cfeaafe7bc315661 --- /dev/null +++ b/src/gpu/core/GPU/VelocityBCs27.cu @@ -0,0 +1,5844 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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/>. +// +//! \file VelocityBCs27.cu +//! \ingroup GPU +//! \author Martin Schoenherr, Anna Wellmann +//====================================================================================== +#include "LBM/LB.h" +#include "lbm/constants/D3Q27.h" +#include "basics/constants/NumericConstants.h" +#include "LBM/GPUHelperFunctions/KernelUtilities.h" + +using namespace vf::basics::constant; +using namespace vf::lbm::dir; +using namespace vf::gpu; + +////////////////////////////////////////////////////////////////////////////// +__global__ void QVelDeviceCompPlusSlip27( + real* vx, + real* vy, + real* vz, + real* DD, + 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]; + } + //////////////////////////////////////////////////////////////////////////////// + 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 VeloX = vx[k]; + real VeloY = vy[k]; + real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny) + //////////////////////////////////////////////////////////////////////////////// + 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, 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 + ((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); + + ////////////////////////////////////////////////////////////////////////// + if (isEvenTimestep == false) + { + 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]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //Test + //(D.f[d000])[k]=c1o10; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + //ToDo anders Klammern + + /////To Slip Or Not To Slip? + // We assume slip BC if |vec(V_BC)|=1. To avoid problems we take V_BC*V_BC>0.99 (c99o100) + if (VeloX*VeloX + VeloY*VeloY + VeloZ*VeloZ > c99o100) + { + // vt=v-(n \dot v) *n + // n=(VeloX,VeloY,VeloZ) a misuse of the velocity variable! + real normalV = VeloX*vx1 + VeloY*vx2 + VeloZ*vx3; + vx1 = vx1 - normalV*VeloX; + vx2 = vx2 - normalV*VeloY; + vx3 = vx3 - normalV*VeloZ; + } + //////////////// + + q = q_dirE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( vx1 )*/+c9o2*( vx1 )*( vx1 ) * (c1o1 + drho)-cu_sq); + (D.f[dM00])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX ))/(c1o1+q);// - c2over27 * drho; + //(D.f[dM00])[kw]=zero; + } + + q = q_dirW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*(-vx1 )*/+c9o2*(-vx1 )*(-vx1 ) * (c1o1 + drho)-cu_sq); + (D.f[dP00])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX ))/(c1o1+q);// - c2over27 * drho; + //(D.f[dP00])[ke]=zero; + } + + q = q_dirN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( vx2 )*/+c9o2*( vx2 )*( vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[d0M0])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY ))/(c1o1+q);// - c2over27 * drho; + //(D.f[d0M0])[ks]=zero; + } + + q = q_dirS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( -vx2 )*/+c9o2*( -vx2 )*( -vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[d0P0])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY ))/(c1o1+q);// - c2over27 * drho; + //(D.f[d0P0])[kn]=zero; + } + + q = q_dirT[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( vx3)*/+c9o2*( vx3)*( vx3) * (c1o1 + drho)-cu_sq); + (D.f[d00M])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ ))/(c1o1+q);// - c2over27 * drho; + //(D.f[d00M])[kb]=one; + } + + q = q_dirB[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( -vx3)*/+c9o2*( -vx3)*( -vx3) * (c1o1 + drho)-cu_sq); + (D.f[d00P])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ ))/(c1o1+q);// - c2over27 * drho; + //(D.f[d00P])[kt]=zero; + } + + q = q_dirNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1+vx2 )*/+c9o2*( vx1+vx2 )*( vx1+vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dMM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q);// - c1over54 * drho; + //(D.f[dMM0])[ksw]=zero; + } + + q = q_dirSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1-vx2 )*/+c9o2*(-vx1-vx2 )*(-vx1-vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dPP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q);// - c1over54 * drho; + //(D.f[dPP0])[kne]=zero; + } + + q = q_dirSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1-vx2 )*/+c9o2*( vx1-vx2 )*( vx1-vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dMP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q);// - c1over54 * drho; + //(D.f[dMP0])[knw]=zero; + } + + q = q_dirNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1+vx2 )*/+c9o2*(-vx1+vx2 )*(-vx1+vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dPM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q);// - c1over54 * drho; + //(D.f[dPM0])[kse]=zero; + } + + q = q_dirTE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1 +vx3)*/+c9o2*( vx1 +vx3)*( vx1 +vx3) * (c1o1 + drho)-cu_sq); + (D.f[dM0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q);// - c1over54 * drho; + //(D.f[dM0M])[kbw]=zero; + } + + q = q_dirBW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1 -vx3)*/+c9o2*(-vx1 -vx3)*(-vx1 -vx3) * (c1o1 + drho)-cu_sq); + (D.f[dP0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q);// - c1over54 * drho; + //(D.f[dP0P])[kte]=zero; + } + + q = q_dirBE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1 -vx3)*/+c9o2*( vx1 -vx3)*( vx1 -vx3) * (c1o1 + drho)-cu_sq); + (D.f[dM0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q);// - c1over54 * drho; + //(D.f[dM0P])[ktw]=zero; + } + + q = q_dirTW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1 +vx3)*/+c9o2*(-vx1 +vx3)*(-vx1 +vx3) * (c1o1 + drho)-cu_sq); + (D.f[dP0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q);// - c1over54 * drho; + //(D.f[dP0M])[kbe]=zero; + } + + q = q_dirTN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx2+vx3)*/+c9o2*( vx2+vx3)*( vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q);// - c1over54 * drho; + //(D.f[d0MM])[kbs]=zero; + } + + q = q_dirBS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( -vx2-vx3)*/+c9o2*( -vx2-vx3)*( -vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q);// - c1over54 * drho; + //(D.f[d0PP])[ktn]=zero; + } + + q = q_dirBN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx2-vx3)*/+c9o2*( vx2-vx3)*( vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q);// - c1over54 * drho; + //(D.f[d0MP])[kts]=zero; + } + + q = q_dirTS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( -vx2+vx3)*/+c9o2*( -vx2+vx3)*( -vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q);// - c1over54 * drho; + //(D.f[d0PM])[kbn]=zero; + } + + q = q_dirTNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMMM])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q);// - c1over216 * drho; + //(D.f[dMMM])[kbsw]=zero; + } + + q = q_dirBSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPPP])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q);// - c1over216 * drho; + //(D.f[dPPP])[ktne]=zero; + } + + q = q_dirBNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMMP])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q);// - c1over216 * drho; + //(D.f[dMMP])[ktsw]=zero; + } + + q = q_dirTSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPPM])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q);// - c1over216 * drho; + //(D.f[dPPM])[kbne]=zero; + } + + q = q_dirTSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMPM])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q);// - c1over216 * drho; + //(D.f[dMPM])[kbnw]=zero; + } + + q = q_dirBNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPMP])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q);// - c1over216 * drho; + //(D.f[dPMP])[ktse]=zero; + } + + q = q_dirBSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMPP])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q);// - c1over216 * drho; + //(D.f[dMPP])[ktnw]=zero; + } + + q = q_dirTNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPMM])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q);// - c1over216 * drho; + //(D.f[dPMM])[kbse]=zero; + } + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +__global__ void QVeloDeviceEQ27( + real* VeloX, + real* VeloY, + real* VeloZ, + real* DD, + int* k_Q, + int numberOfBCnodes, + real om1, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + //////////////////////////////////////////////////////////////////////////////// + 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) + { + //////////////////////////////////////////////////////////////////////////////// + //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]; + //////////////////////////////////////////////////////////////////////////////// + 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]; + } + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // based on BGK Plus Comp + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real mfcbb = (D.f[dP00])[ke ]; + real mfabb = (D.f[dM00])[kw ]; + real mfbcb = (D.f[d0P0])[kn ]; + real mfbab = (D.f[d0M0])[ks ]; + real mfbbc = (D.f[d00P])[kt ]; + real mfbba = (D.f[d00M])[kb ]; + real mfccb = (D.f[dPP0])[kne ]; + real mfaab = (D.f[dMM0])[ksw ]; + real mfcab = (D.f[dPM0])[kse ]; + real mfacb = (D.f[dMP0])[knw ]; + real mfcbc = (D.f[dP0P])[kte ]; + real mfaba = (D.f[dM0M])[kbw ]; + real mfcba = (D.f[dP0M])[kbe ]; + real mfabc = (D.f[dM0P])[ktw ]; + real mfbcc = (D.f[d0PP])[ktn ]; + real mfbaa = (D.f[d0MM])[kbs ]; + real mfbca = (D.f[d0PM])[kbn ]; + real mfbac = (D.f[d0MP])[kts ]; + real mfbbb = (D.f[d000])[kzero]; + real mfccc = (D.f[dPPP])[ktne ]; + real mfaac = (D.f[dMMP])[ktsw ]; + real mfcac = (D.f[dPMP])[ktse ]; + real mfacc = (D.f[dMPP])[ktnw ]; + real mfcca = (D.f[dPPM])[kbne ]; + real mfaaa = (D.f[dMMM])[kbsw ]; + real mfcaa = (D.f[dPMM])[kbse ]; + real mfaca = (D.f[dMPM])[kbnw ]; + //////////////////////////////////////////////////////////////////////////////////// + real rho = (mfccc+mfaaa + mfaca+mfcac + mfacc+mfcaa + mfaac+mfcca + + mfbac+mfbca + mfbaa+mfbcc + mfabc+mfcba + mfaba+mfcbc + mfacb+mfcab + mfaab+mfccb + + mfabb+mfcbb + mfbab+mfbcb + mfbba+mfbbc + mfbbb + c1o1);//!!!!Achtung + one + //////////////////////////////////////////////////////////////////////////////////// + real vvx = ((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfcaa-mfacc) + (mfcca-mfaac))) + + (((mfcba-mfabc) + (mfcbc-mfaba)) + ((mfcab-mfacb) + (mfccb-mfaab))) + + (mfcbb-mfabb)) / rho; + real vvy =((((mfccc-mfaaa) + (mfaca-mfcac)) + ((mfacc-mfcaa) + (mfcca-mfaac))) + + (((mfbca-mfbac) + (mfbcc-mfbaa)) + ((mfacb-mfcab) + (mfccb-mfaab))) + + (mfbcb-mfbab)) / rho; + real vvz =((((mfccc-mfaaa) + (mfcac-mfaca)) + ((mfacc-mfcaa) + (mfaac-mfcca))) + + (((mfbac-mfbca) + (mfbcc-mfbaa)) + ((mfabc-mfcba) + (mfcbc-mfaba))) + + (mfbbc-mfbba)) / rho; + //////////////////////////////////////////////////////////////////////////////////// + if(VeloX[k]!=c0o1) vvx = VeloX[k]; + if(VeloY[k]!=c0o1) vvy = VeloY[k]; + if(VeloZ[k]!=c0o1) vvz = VeloZ[k]; + //////////////////////////////////////////////////////////////////////////////////// + real vx2 = vvx * vvx; + real vy2 = vvy * vvy; + real vz2 = vvz * vvz; + //////////////////////////////////////////////////////////////////////////////////// + real XXb = -c2o3 + vx2; + real XXc = -c1o2 * (XXb + c1o1 + vvx); + real XXa = XXc + vvx; + real YYb = -c2o3 + vy2; + real YYc = -c1o2 * (YYb + c1o1 + vvy); + real YYa = YYc + vvy; + real ZZb = -c2o3 + vz2; + real ZZc = -c1o2 * (ZZb + c1o1 + vvz); + real ZZa = ZZc + vvz; + //////////////////////////////////////////////////////////////////////////////////// + mfcbb = -rho * XXc * YYb * ZZb - c2o27 ; + mfabb = -rho * XXa * YYb * ZZb - c2o27 ; + mfbcb = -rho * XXb * YYc * ZZb - c2o27 ; + mfbab = -rho * XXb * YYa * ZZb - c2o27 ; + mfbbc = -rho * XXb * YYb * ZZc - c2o27 ; + mfbba = -rho * XXb * YYb * ZZa - c2o27 ; + mfccb = -rho * XXc * YYc * ZZb - c1o54 ; + mfaab = -rho * XXa * YYa * ZZb - c1o54 ; + mfcab = -rho * XXc * YYa * ZZb - c1o54 ; + mfacb = -rho * XXa * YYc * ZZb - c1o54 ; + mfcbc = -rho * XXc * YYb * ZZc - c1o54 ; + mfaba = -rho * XXa * YYb * ZZa - c1o54 ; + mfcba = -rho * XXc * YYb * ZZa - c1o54 ; + mfabc = -rho * XXa * YYb * ZZc - c1o54 ; + mfbcc = -rho * XXb * YYc * ZZc - c1o54 ; + mfbaa = -rho * XXb * YYa * ZZa - c1o54 ; + mfbca = -rho * XXb * YYc * ZZa - c1o54 ; + mfbac = -rho * XXb * YYa * ZZc - c1o54 ; + mfbbb = -rho * XXb * YYb * ZZb - c8o27 ; + mfccc = -rho * XXc * YYc * ZZc - c1o216; + mfaac = -rho * XXa * YYa * ZZc - c1o216; + mfcac = -rho * XXc * YYa * ZZc - c1o216; + mfacc = -rho * XXa * YYc * ZZc - c1o216; + mfcca = -rho * XXc * YYc * ZZa - c1o216; + mfaaa = -rho * XXa * YYa * ZZa - c1o216; + mfcaa = -rho * XXc * YYa * ZZa - c1o216; + mfaca = -rho * XXa * YYc * ZZa - c1o216; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + (D.f[dP00])[ke ] = mfabb;//mfcbb; + (D.f[dM00])[kw ] = mfcbb;//mfabb; + (D.f[d0P0])[kn ] = mfbab;//mfbcb; + (D.f[d0M0])[ks ] = mfbcb;//mfbab; + (D.f[d00P])[kt ] = mfbba;//mfbbc; + (D.f[d00M])[kb ] = mfbbc;//mfbba; + (D.f[dPP0])[kne ] = mfaab;//mfccb; + (D.f[dMM0])[ksw ] = mfccb;//mfaab; + (D.f[dPM0])[kse ] = mfacb;//mfcab; + (D.f[dMP0])[knw ] = mfcab;//mfacb; + (D.f[dP0P])[kte ] = mfaba;//mfcbc; + (D.f[dM0M])[kbw ] = mfcbc;//mfaba; + (D.f[dP0M])[kbe ] = mfabc;//mfcba; + (D.f[dM0P])[ktw ] = mfcba;//mfabc; + (D.f[d0PP])[ktn ] = mfbaa;//mfbcc; + (D.f[d0MM])[kbs ] = mfbcc;//mfbaa; + (D.f[d0PM])[kbn ] = mfbac;//mfbca; + (D.f[d0MP])[kts ] = mfbca;//mfbac; + (D.f[d000])[kzero] = mfbbb;//mfbbb; + (D.f[dPPP])[ktne ] = mfaaa;//mfccc; + (D.f[dMMP])[ktsw ] = mfcca;//mfaac; + (D.f[dPMP])[ktse ] = mfaca;//mfcac; + (D.f[dMPP])[ktnw ] = mfcaa;//mfacc; + (D.f[dPPM])[kbne ] = mfaac;//mfcca; + (D.f[dMMM])[kbsw ] = mfccc;//mfaaa; + (D.f[dPMM])[kbse ] = mfacc;//mfcaa; + (D.f[dMPM])[kbnw ] = mfcac;//mfaca; + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void QVelDeviceIncompHighNu27( + real* vx, + real* vy, + real* vz, + real* DD, + 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]; + } + //////////////////////////////////////////////////////////////////////////////// + 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 VeloX = vx[k]; + real VeloY = vy[k]; + real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny) + //////////////////////////////////////////////////////////////////////////////// + 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_E = (D.f[dP00])[ke ]; + f_W = (D.f[dM00])[kw ]; + f_N = (D.f[d0P0])[kn ]; + f_S = (D.f[d0M0])[ks ]; + f_T = (D.f[d00P])[kt ]; + f_B = (D.f[d00M])[kb ]; + f_NE = (D.f[dPP0])[kne ]; + f_SW = (D.f[dMM0])[ksw ]; + f_SE = (D.f[dPM0])[kse ]; + f_NW = (D.f[dMP0])[knw ]; + f_TE = (D.f[dP0P])[kte ]; + f_BW = (D.f[dM0M])[kbw ]; + f_BE = (D.f[dP0M])[kbe ]; + f_TW = (D.f[dM0P])[ktw ]; + f_TN = (D.f[d0PP])[ktn ]; + f_BS = (D.f[d0MM])[kbs ]; + f_BN = (D.f[d0PM])[kbn ]; + f_TS = (D.f[d0MP])[kts ]; + f_TNE = (D.f[dPPP])[ktne ]; + f_TSW = (D.f[dMMP])[ktsw ]; + f_TSE = (D.f[dPMP])[ktse ]; + f_TNW = (D.f[dMPP])[ktnw ]; + f_BNE = (D.f[dPPM])[kbne ]; + f_BSW = (D.f[dMMM])[kbsw ]; + f_BSE = (D.f[dPMM])[kbse ]; + f_BNW = (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 + ((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));// / (one + 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));// / (one + 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));// / (one + drho); + + real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3);// * (one + drho); + + ////////////////////////////////////////////////////////////////////////// + if (isEvenTimestep==false) + { + 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]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //Test + //(D.f[d000])[k]=c1o10; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + //ToDo anders Klammern + + q = q_dirE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( vx1 )*/+c9o2*( vx1 )*( vx1 ) /** (one + drho)*/-cu_sq); + (D.f[dM00])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX )) / (q + c1o1) ; + } + + q = q_dirW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*(-vx1 )*/+c9o2*(-vx1 )*(-vx1 ) /** (one + drho)*/-cu_sq); + (D.f[dP00])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX )) / (q + c1o1) ; + } + + q = q_dirN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( vx2 )*/+c9o2*( vx2 )*( vx2 ) /** (one + drho)*/-cu_sq); + (D.f[d0M0])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY )) / (q + c1o1) ; + } + + q = q_dirS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( -vx2 )*/+c9o2*( -vx2 )*( -vx2 ) /** (one + drho)*/-cu_sq); + (D.f[d0P0])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY )) / (q + c1o1) ; + } + + q = q_dirT[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( vx3)*/+c9o2*( vx3)*( vx3) /** (one + drho)*/-cu_sq); + (D.f[d00M])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ )) / (q + c1o1) ; + } + + q = q_dirB[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( -vx3)*/+c9o2*( -vx3)*( -vx3) /** (one + drho)*/-cu_sq); + (D.f[d00P])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ )) / (q + c1o1) ; + } + + q = q_dirNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1+vx2 )*/+c9o2*( vx1+vx2 )*( vx1+vx2 ) /** (one + drho)*/-cu_sq); + (D.f[dMM0])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ; + } + + q = q_dirSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1-vx2 )*/+c9o2*(-vx1-vx2 )*(-vx1-vx2 ) /** (one + drho)*/-cu_sq); + (D.f[dPP0])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ; + } + + q = q_dirSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1-vx2 )*/+c9o2*( vx1-vx2 )*( vx1-vx2 ) /** (one + drho)*/-cu_sq); + (D.f[dMP0])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ; + } + + q = q_dirNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1+vx2 )*/+c9o2*(-vx1+vx2 )*(-vx1+vx2 ) /** (one + drho)*/-cu_sq); + (D.f[dPM0])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ; + } + + q = q_dirTE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1 +vx3)*/+c9o2*( vx1 +vx3)*( vx1 +vx3) /** (one + drho)*/-cu_sq); + (D.f[dM0M])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ; + } + + q = q_dirBW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1 -vx3)*/+c9o2*(-vx1 -vx3)*(-vx1 -vx3) /** (one + drho)*/-cu_sq); + (D.f[dP0P])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ; + } + + q = q_dirBE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1 -vx3)*/+c9o2*( vx1 -vx3)*( vx1 -vx3) /** (one + drho)*/-cu_sq); + (D.f[dM0P])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ; + } + + q = q_dirTW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1 +vx3)*/+c9o2*(-vx1 +vx3)*(-vx1 +vx3) /** (one + drho)*/-cu_sq); + (D.f[dP0M])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ; + } + + q = q_dirTN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx2+vx3)*/+c9o2*( vx2+vx3)*( vx2+vx3) /** (one + drho)*/-cu_sq); + (D.f[d0MM])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ; + } + + q = q_dirBS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( -vx2-vx3)*/+c9o2*( -vx2-vx3)*( -vx2-vx3) /** (one + drho)*/-cu_sq); + (D.f[d0PP])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ; + } + + q = q_dirBN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx2-vx3)*/+c9o2*( vx2-vx3)*( vx2-vx3) /** (one + drho)*/-cu_sq); + (D.f[d0MP])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ; + } + + q = q_dirTS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( -vx2+vx3)*/+c9o2*( -vx2+vx3)*( -vx2+vx3) /** (one + drho)*/-cu_sq); + (D.f[d0PM])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ; + } + + q = q_dirTNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) /** (one + drho)*/-cu_sq); + (D.f[dMMM])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ; + } + + q = q_dirBSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) /** (one + drho)*/-cu_sq); + (D.f[dPPP])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ; + } + + q = q_dirBNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) /** (one + drho)*/-cu_sq); + (D.f[dMMP])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ; + } + + q = q_dirTSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) /** (one + drho)*/-cu_sq); + (D.f[dPPM])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ; + } + + q = q_dirTSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) /** (one + drho)*/-cu_sq); + (D.f[dMPM])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ; + } + + q = q_dirBNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) /** (one + drho)*/-cu_sq); + (D.f[dPMP])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ; + } + + q = q_dirBSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) /** (one + drho)*/-cu_sq); + (D.f[dMPP])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ; + } + + q = q_dirTNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) /** (one + drho)*/-cu_sq); + (D.f[dPMM])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ; + } + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void QVelDeviceCompHighNu27( + real* vx, + real* vy, + real* vz, + real* DD, + 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]; + } + //////////////////////////////////////////////////////////////////////////////// + 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 VeloX = vx[k]; + real VeloY = vy[k]; + real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny) + //////////////////////////////////////////////////////////////////////////////// + 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_E = (D.f[dP00])[ke ]; + f_W = (D.f[dM00])[kw ]; + f_N = (D.f[d0P0])[kn ]; + f_S = (D.f[d0M0])[ks ]; + f_T = (D.f[d00P])[kt ]; + f_B = (D.f[d00M])[kb ]; + f_NE = (D.f[dPP0])[kne ]; + f_SW = (D.f[dMM0])[ksw ]; + f_SE = (D.f[dPM0])[kse ]; + f_NW = (D.f[dMP0])[knw ]; + f_TE = (D.f[dP0P])[kte ]; + f_BW = (D.f[dM0M])[kbw ]; + f_BE = (D.f[dP0M])[kbe ]; + f_TW = (D.f[dM0P])[ktw ]; + f_TN = (D.f[d0PP])[ktn ]; + f_BS = (D.f[d0MM])[kbs ]; + f_BN = (D.f[d0PM])[kbn ]; + f_TS = (D.f[d0MP])[kts ]; + f_TNE = (D.f[dPPP])[ktne ]; + f_TSW = (D.f[dMMP])[ktsw ]; + f_TSE = (D.f[dPMP])[ktse ]; + f_TNW = (D.f[dMPP])[ktnw ]; + f_BNE = (D.f[dPPM])[kbne ]; + f_BSW = (D.f[dMMM])[kbsw ]; + f_BSE = (D.f[dPMM])[kbse ]; + f_BNW = (D.f[dMPM])[kbnw ]; + //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, 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 + ((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); + + ////////////////////////////////////////////////////////////////////////// + if (isEvenTimestep==false) + { + 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]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //Test + //(D.f[d000])[k]=c1o10; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + //ToDo anders Klammern + + q = q_dirE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( vx1 )*/+c9o2*( vx1 )*( vx1 ) * (c1o1 + drho)-cu_sq); + (D.f[dM00])[kw]=((c1o1 - q) * f_E + q * ((f_E + f_W) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloX )) / (q + c1o1) ; + //(D.f[dM00])[kw]=(one-q)/(one+q)*(f_E-f_W+(f_E+f_W-two*feq*om1)/(one-om1))*c1o2+(q*(f_E+f_W)-six*c2over27*( VeloX ))/(one+q) - c2over27 * drho; + //(D.f[dM00])[kw]=zero; + } + + q = q_dirW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*(-vx1 )*/+c9o2*(-vx1 )*(-vx1 ) * (c1o1 + drho)-cu_sq); + (D.f[dP00])[ke]=((c1o1 - q) * f_W + q * ((f_W + f_E) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloX )) / (q + c1o1) ; + //(D.f[dP00])[ke]=(one-q)/(one+q)*(f_W-f_E+(f_W+f_E-two*feq*om1)/(one-om1))*c1o2+(q*(f_W+f_E)-six*c2over27*(-VeloX ))/(one+q) - c2over27 * drho; + //(D.f[dP00])[ke]=zero; + } + + q = q_dirN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( vx2 )*/+c9o2*( vx2 )*( vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[d0M0])[ks]=((c1o1 - q) * f_N + q * ((f_N + f_S) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloY )) / (q + c1o1) ; + //(D.f[d0M0])[ks]=(one-q)/(one+q)*(f_N-f_S+(f_N+f_S-two*feq*om1)/(one-om1))*c1o2+(q*(f_N+f_S)-six*c2over27*( VeloY ))/(one+q) - c2over27 * drho; + //(D.f[d0M0])[ks]=zero; + } + + q = q_dirS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( -vx2 )*/+c9o2*( -vx2 )*( -vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[d0P0])[kn]=((c1o1 - q) * f_S + q * ((f_S + f_N) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloY )) / (q + c1o1) ; + //(D.f[d0P0])[kn]=(one-q)/(one+q)*(f_S-f_N+(f_S+f_N-two*feq*om1)/(one-om1))*c1o2+(q*(f_S+f_N)-six*c2over27*(-VeloY ))/(one+q) - c2over27 * drho; + //(D.f[d0P0])[kn]=zero; + } + + q = q_dirT[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( vx3)*/+c9o2*( vx3)*( vx3) * (c1o1 + drho)-cu_sq); + (D.f[d00M])[kb]=((c1o1 - q) * f_T + q * ((f_T + f_B) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*( VeloZ )) / (q + c1o1) ; + //(D.f[d00M])[kb]=(one-q)/(one+q)*(f_T-f_B+(f_T+f_B-two*feq*om1)/(one-om1))*c1o2+(q*(f_T+f_B)-six*c2over27*( VeloZ ))/(one+q) - c2over27 * drho; + //(D.f[d00M])[kb]=one; + } + + q = q_dirB[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( -vx3)*/+c9o2*( -vx3)*( -vx3) * (c1o1 + drho)-cu_sq); + (D.f[d00P])[kt]=((c1o1 - q) * f_B + q * ((f_B + f_T) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c2o27*(-VeloZ )) / (q + c1o1) ; + //(D.f[d00P])[kt]=(one-q)/(one+q)*(f_B-f_T+(f_B+f_T-two*feq*om1)/(one-om1))*c1o2+(q*(f_B+f_T)-six*c2over27*(-VeloZ ))/(one+q) - c2over27 * drho; + //(D.f[d00P])[kt]=zero; + } + + q = q_dirNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1+vx2 )*/+c9o2*( vx1+vx2 )*( vx1+vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dMM0])[ksw]=((c1o1 - q) * f_NE + q * ((f_NE + f_SW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloY)) / (q + c1o1) ; + //(D.f[dMM0])[ksw]=(one-q)/(one+q)*(f_NE-f_SW+(f_NE+f_SW-two*feq*om1)/(one-om1))*c1o2+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q) - c1over54 * drho; + //(D.f[dMM0])[ksw]=zero; + } + + q = q_dirSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1-vx2 )*/+c9o2*(-vx1-vx2 )*(-vx1-vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dPP0])[kne]=((c1o1 - q) * f_SW + q * ((f_SW + f_NE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloY)) / (q + c1o1) ; + //(D.f[dPP0])[kne]=(one-q)/(one+q)*(f_SW-f_NE+(f_SW+f_NE-two*feq*om1)/(one-om1))*c1o2+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q) - c1over54 * drho; + //(D.f[dPP0])[kne]=zero; + } + + q = q_dirSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1-vx2 )*/+c9o2*( vx1-vx2 )*( vx1-vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dMP0])[knw]=((c1o1 - q) * f_SE + q * ((f_SE + f_NW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloY)) / (q + c1o1) ; + //(D.f[dMP0])[knw]=(one-q)/(one+q)*(f_SE-f_NW+(f_SE+f_NW-two*feq*om1)/(one-om1))*c1o2+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q) - c1over54 * drho; + //(D.f[dMP0])[knw]=zero; + } + + q = q_dirNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1+vx2 )*/+c9o2*(-vx1+vx2 )*(-vx1+vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dPM0])[kse]=((c1o1 - q) * f_NW + q * ((f_NW + f_SE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloY)) / (q + c1o1) ; + //(D.f[dPM0])[kse]=(one-q)/(one+q)*(f_NW-f_SE+(f_NW+f_SE-two*feq*om1)/(one-om1))*c1o2+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q) - c1over54 * drho; + //(D.f[dPM0])[kse]=zero; + } + + q = q_dirTE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1 +vx3)*/+c9o2*( vx1 +vx3)*( vx1 +vx3) * (c1o1 + drho)-cu_sq); + (D.f[dM0M])[kbw]=((c1o1 - q) * f_TE + q * ((f_TE + f_BW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX+VeloZ)) / (q + c1o1) ; + //(D.f[dM0M])[kbw]=(one-q)/(one+q)*(f_TE-f_BW+(f_TE+f_BW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q) - c1over54 * drho; + //(D.f[dM0M])[kbw]=zero; + } + + q = q_dirBW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1 -vx3)*/+c9o2*(-vx1 -vx3)*(-vx1 -vx3) * (c1o1 + drho)-cu_sq); + (D.f[dP0P])[kte]=((c1o1 - q) * f_BW + q * ((f_BW + f_TE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX-VeloZ)) / (q + c1o1) ; + //(D.f[dP0P])[kte]=(one-q)/(one+q)*(f_BW-f_TE+(f_BW+f_TE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q) - c1over54 * drho; + //(D.f[dP0P])[kte]=zero; + } + + q = q_dirBE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1 -vx3)*/+c9o2*( vx1 -vx3)*( vx1 -vx3) * (c1o1 + drho)-cu_sq); + (D.f[dM0P])[ktw]=((c1o1 - q) * f_BE + q * ((f_BE + f_TW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloX-VeloZ)) / (q + c1o1) ; + //(D.f[dM0P])[ktw]=(one-q)/(one+q)*(f_BE-f_TW+(f_BE+f_TW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q) - c1over54 * drho; + //(D.f[dM0P])[ktw]=zero; + } + + q = q_dirTW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1 +vx3)*/+c9o2*(-vx1 +vx3)*(-vx1 +vx3) * (c1o1 + drho)-cu_sq); + (D.f[dP0M])[kbe]=((c1o1 - q) * f_TW + q * ((f_TW + f_BE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloX+VeloZ)) / (q + c1o1) ; + //(D.f[dP0M])[kbe]=(one-q)/(one+q)*(f_TW-f_BE+(f_TW+f_BE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q) - c1over54 * drho; + //(D.f[dP0M])[kbe]=zero; + } + + q = q_dirTN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx2+vx3)*/+c9o2*( vx2+vx3)*( vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0MM])[kbs]=((c1o1 - q) * f_TN + q * ((f_TN + f_BS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY+VeloZ)) / (q + c1o1) ; + //(D.f[d0MM])[kbs]=(one-q)/(one+q)*(f_TN-f_BS+(f_TN+f_BS-two*feq*om1)/(one-om1))*c1o2+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q) - c1over54 * drho; + //(D.f[d0MM])[kbs]=zero; + } + + q = q_dirBS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( -vx2-vx3)*/+c9o2*( -vx2-vx3)*( -vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0PP])[ktn]=((c1o1 - q) * f_BS + q * ((f_BS + f_TN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY-VeloZ)) / (q + c1o1) ; + //(D.f[d0PP])[ktn]=(one-q)/(one+q)*(f_BS-f_TN+(f_BS+f_TN-two*feq*om1)/(one-om1))*c1o2+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q) - c1over54 * drho; + //(D.f[d0PP])[ktn]=zero; + } + + q = q_dirBN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx2-vx3)*/+c9o2*( vx2-vx3)*( vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0MP])[kts]=((c1o1 - q) * f_BN + q * ((f_BN + f_TS) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*( VeloY-VeloZ)) / (q + c1o1) ; + //(D.f[d0MP])[kts]=(one-q)/(one+q)*(f_BN-f_TS+(f_BN+f_TS-two*feq*om1)/(one-om1))*c1o2+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q) - c1over54 * drho; + //(D.f[d0MP])[kts]=zero; + } + + q = q_dirTS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( -vx2+vx3)*/+c9o2*( -vx2+vx3)*( -vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0PM])[kbn]=((c1o1 - q) * f_TS + q * ((f_TS + f_BN) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o54*(-VeloY+VeloZ)) / (q + c1o1) ; + //(D.f[d0PM])[kbn]=(one-q)/(one+q)*(f_TS-f_BN+(f_TS+f_BN-two*feq*om1)/(one-om1))*c1o2+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q) - c1over54 * drho; + //(D.f[d0PM])[kbn]=zero; + } + + q = q_dirTNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMMM])[kbsw]=((c1o1 - q) * f_TNE + q * ((f_TNE + f_BSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY+VeloZ)) / (q + c1o1) ; + //(D.f[dMMM])[kbsw]=(one-q)/(one+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q) - c1over216 * drho; + //(D.f[dMMM])[kbsw]=zero; + } + + q = q_dirBSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPPP])[ktne]=((c1o1 - q) * f_BSW + q * ((f_BSW + f_TNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY-VeloZ)) / (q + c1o1) ; + //(D.f[dPPP])[ktne]=(one-q)/(one+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q) - c1over216 * drho; + //(D.f[dPPP])[ktne]=zero; + } + + q = q_dirBNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMMP])[ktsw]=((c1o1 - q) * f_BNE + q * ((f_BNE + f_TSW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX+VeloY-VeloZ)) / (q + c1o1) ; + //(D.f[dMMP])[ktsw]=(one-q)/(one+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q) - c1over216 * drho; + //(D.f[dMMP])[ktsw]=zero; + } + + q = q_dirTSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPPM])[kbne]=((c1o1 - q) * f_TSW + q * ((f_TSW + f_BNE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX-VeloY+VeloZ)) / (q + c1o1) ; + //(D.f[dPPM])[kbne]=(one-q)/(one+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q) - c1over216 * drho; + //(D.f[dPPM])[kbne]=zero; + } + + q = q_dirTSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMPM])[kbnw]=((c1o1 - q) * f_TSE + q * ((f_TSE + f_BNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY+VeloZ)) / (q + c1o1) ; + //(D.f[dMPM])[kbnw]=(one-q)/(one+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q) - c1over216 * drho; + //(D.f[dMPM])[kbnw]=zero; + } + + q = q_dirBNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPMP])[ktse]=((c1o1 - q) * f_BNW + q * ((f_BNW + f_TSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY-VeloZ)) / (q + c1o1) ; + //(D.f[dPMP])[ktse]=(one-q)/(one+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q) - c1over216 * drho; + //(D.f[dPMP])[ktse]=zero; + } + + q = q_dirBSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMPP])[ktnw]=((c1o1 - q) * f_BSE + q * ((f_BSE + f_TNW) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*( VeloX-VeloY-VeloZ)) / (q + c1o1) ; + //(D.f[dMPP])[ktnw]=(one-q)/(one+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q) - c1over216 * drho; + //(D.f[dMPP])[ktnw]=zero; + } + + q = q_dirTNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPMM])[kbse]=((c1o1 - q) * f_TNW + q * ((f_TNW + f_BSE) * (c1o1 - om1) + om1 * c2o1 * feq) - c6o1*c1o216*(-VeloX+VeloY+VeloZ)) / (q + c1o1) ; + //(D.f[dPMM])[kbse]=(one-q)/(one+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q) - c1over216 * drho; + //(D.f[dPMM])[kbse]=zero; + } + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void QVelDeviceCompZeroPress27( + real* velocityX, + real* velocityY, + real* velocityZ, + real* distribution, + int* subgridDistanceIndices, + real* subgridDistances, + unsigned int numberOfBCnodes, + real omega, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + ////////////////////////////////////////////////////////////////////////// + //! The velocity boundary condition is executed in the following steps + //! + //////////////////////////////////////////////////////////////////////////////// + //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. + //! + const unsigned nodeIndex = getNodeIndex(); + + ////////////////////////////////////////////////////////////////////////// + //! - Run for all indices in size of boundary condition (numberOfBCnodes) + //! + if(nodeIndex < numberOfBCnodes) + { + + ////////////////////////////////////////////////////////////////////////// + //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref + //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> + //! + Distributions27 dist; + getPointersToDistributions(dist, distribution, numberOfLBnodes, isEvenTimestep); + + //////////////////////////////////////////////////////////////////////////////// + //! - Set local velocities + //! + real VeloX = velocityX[nodeIndex]; + real VeloY = velocityY[nodeIndex]; + real VeloZ = velocityZ[nodeIndex]; + + + //////////////////////////////////////////////////////////////////////////////// + //! - Set local subgrid distances (q's) + //! + SubgridDistances27 subgridD; + getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes); + + //////////////////////////////////////////////////////////////////////////////// + //! - Set neighbor indices (necessary for indirect addressing) + //! + unsigned int KQK = subgridDistanceIndices[nodeIndex]; + 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]; + + //////////////////////////////////////////////////////////////////////////////// + //! - Set local distributions + //! + real f_W = (dist.f[dP00])[ke ]; + real f_E = (dist.f[dM00])[kw ]; + real f_S = (dist.f[d0P0])[kn ]; + real f_N = (dist.f[d0M0])[ks ]; + real f_B = (dist.f[d00P])[kt ]; + real f_T = (dist.f[d00M])[kb ]; + real f_SW = (dist.f[dPP0])[kne ]; + real f_NE = (dist.f[dMM0])[ksw ]; + real f_NW = (dist.f[dPM0])[kse ]; + real f_SE = (dist.f[dMP0])[knw ]; + real f_BW = (dist.f[dP0P])[kte ]; + real f_TE = (dist.f[dM0M])[kbw ]; + real f_TW = (dist.f[dP0M])[kbe ]; + real f_BE = (dist.f[dM0P])[ktw ]; + real f_BS = (dist.f[d0PP])[ktn ]; + real f_TN = (dist.f[d0MM])[kbs ]; + real f_TS = (dist.f[d0PM])[kbn ]; + real f_BN = (dist.f[d0MP])[kts ]; + real f_BSW = (dist.f[dPPP])[ktne ]; + real f_BNE = (dist.f[dMMP])[ktsw ]; + real f_BNW = (dist.f[dPMP])[ktse ]; + real f_BSE = (dist.f[dMPP])[ktnw ]; + real f_TSW = (dist.f[dPPM])[kbne ]; + real f_TNE = (dist.f[dMMM])[kbsw ]; + real f_TNW = (dist.f[dPMM])[kbse ]; + real f_TSE = (dist.f[dMPM])[kbnw ]; + + //////////////////////////////////////////////////////////////////////////////// + //! - Calculate macroscopic quantities + //! + real 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 + ((dist.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)) / (c1o1 + drho); + + + 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)) / (c1o1 + drho); + + 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)) / (c1o1 + drho); + + real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3) * (c1o1 + drho); + + //////////////////////////////////////////////////////////////////////////////// + //! - change the pointer to write the results in the correct array + //! + getPointersToDistributions(dist, distribution, numberOfLBnodes, !isEvenTimestep); + + //////////////////////////////////////////////////////////////////////////////// + //! - Update distributions with subgrid distance (q) between zero and one + real feq, q, velocityLB, velocityBC; + q = (subgridD.q[dP00])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one + { + velocityLB = vx1; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + velocityBC = VeloX; + (dist.f[dM00])[kw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_E, f_W, feq, omega, drho, velocityBC, c2o27); + } + + q = (subgridD.q[dM00])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + velocityBC = -VeloX; + (dist.f[dP00])[ke] = getInterpolatedDistributionForVeloWithPressureBC(q, f_W, f_E, feq, omega, drho, velocityBC, c2o27); + } + + q = (subgridD.q[d0P0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + velocityBC = VeloY; + (dist.f[d0M0])[ks] = getInterpolatedDistributionForVeloWithPressureBC(q, f_N, f_S, feq, omega, drho, velocityBC, c2o27); + } + + q = (subgridD.q[d0M0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + velocityBC = -VeloY; + (dist.f[d0P0])[kn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_S, f_N, feq, omega, drho, velocityBC, c2o27); + } + + q = (subgridD.q[d00P])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + velocityBC = VeloZ; + (dist.f[d00M])[kb] = getInterpolatedDistributionForVeloWithPressureBC(q, f_T, f_B, feq, omega, drho, velocityBC, c2o27); + } + + q = (subgridD.q[d00M])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + velocityBC = -VeloZ; + (dist.f[d00P])[kt] = getInterpolatedDistributionForVeloWithPressureBC(q, f_B, f_T, feq, omega, drho, velocityBC, c2o27); + } + + q = (subgridD.q[dPP0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 + vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = VeloX + VeloY; + (dist.f[dMM0])[ksw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NE, f_SW, feq, omega, drho, velocityBC, c1o54); + } + + q = (subgridD.q[dMM0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 - vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = -VeloX - VeloY; + (dist.f[dPP0])[kne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SW, f_NE, feq, omega, drho, velocityBC, c1o54); + } + + q = (subgridD.q[dPM0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 - vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = VeloX - VeloY; + (dist.f[dMP0])[knw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_SE, f_NW, feq, omega, drho, velocityBC, c1o54); + } + + q = (subgridD.q[dMP0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 + vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = -VeloX + VeloY; + (dist.f[dPM0])[kse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_NW, f_SE, feq, omega, drho, velocityBC, c1o54); + } + + q = (subgridD.q[dP0P])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = VeloX + VeloZ; + (dist.f[dM0M])[kbw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TE, f_BW, feq, omega, drho, velocityBC, c1o54); + } + + q = (subgridD.q[dM0M])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = -VeloX - VeloZ; + (dist.f[dP0P])[kte] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BW, f_TE, feq, omega, drho, velocityBC, c1o54); + } + + q = (subgridD.q[dP0M])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = VeloX - VeloZ; + (dist.f[dM0P])[ktw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BE, f_TW, feq, omega, drho, velocityBC, c1o54); + } + + q = (subgridD.q[dM0P])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = -VeloX + VeloZ; + (dist.f[dP0M])[kbe] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TW, f_BE, feq, omega, drho, velocityBC, c1o54); + } + + q = (subgridD.q[d0PP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = VeloY + VeloZ; + (dist.f[d0MM])[kbs] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TN, f_BS, feq, omega, drho, velocityBC, c1o54); + } + + q = (subgridD.q[d0MM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = -VeloY - VeloZ; + (dist.f[d0PP])[ktn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BS, f_TN, feq, omega, drho, velocityBC, c1o54); + } + + q = (subgridD.q[d0PM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = VeloY - VeloZ; + (dist.f[d0MP])[kts] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BN, f_TS, feq, omega, drho, velocityBC, c1o54); + } + + q = (subgridD.q[d0MP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = -VeloY + VeloZ; + (dist.f[d0PM])[kbn] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TS, f_BN, feq, omega, drho, velocityBC, c1o54); + } + + q = (subgridD.q[dPPP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 + vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + velocityBC = VeloX + VeloY + VeloZ; + (dist.f[dMMM])[kbsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNE, f_BSW, feq, omega, drho, velocityBC, c1o216); + } + + q = (subgridD.q[dMMM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 - vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + velocityBC = -VeloX - VeloY - VeloZ; + (dist.f[dPPP])[ktne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSW, f_TNE, feq, omega, drho, velocityBC, c1o216); + } + + q = (subgridD.q[dPPM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 + vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + velocityBC = VeloX + VeloY - VeloZ; + (dist.f[dMMP])[ktsw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNE, f_TSW, feq, omega, drho, velocityBC, c1o216); + } + + q = (subgridD.q[dMMP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 - vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + velocityBC = -VeloX - VeloY + VeloZ; + (dist.f[dPPM])[kbne] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSW, f_BNE, feq, omega, drho, velocityBC, c1o216); + } + + q = (subgridD.q[dPMP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 - vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + velocityBC = VeloX - VeloY + VeloZ; + (dist.f[dMPM])[kbnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TSE, f_BNW, feq, omega, drho, velocityBC, c1o216); + } + + q = (subgridD.q[dMPM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 + vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + velocityBC = -VeloX + VeloY - VeloZ; + (dist.f[dPMP])[ktse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BNW, f_TSE, feq, omega, drho, velocityBC, c1o216); + } + + q = (subgridD.q[dPMM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 - vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + velocityBC = VeloX - VeloY - VeloZ; + (dist.f[dMPP])[ktnw] = getInterpolatedDistributionForVeloWithPressureBC(q, f_BSE, f_TNW, feq, omega, drho, velocityBC, c1o216); + } + + q = (subgridD.q[dMPP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 + vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + velocityBC = -VeloX + VeloY + VeloZ; + (dist.f[dPMM])[kbse] = getInterpolatedDistributionForVeloWithPressureBC(q, f_TNW, f_BSE, feq, omega, drho, velocityBC, c1o216); + } + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void QVelDeviceCompZeroPress1h27( + int inx, + int iny, + real* vx, + real* vy, + real* vz, + real* DD, + int* k_Q, + real* QQ, + unsigned int numberOfBCnodes, + real om1, + real Phi, + real angularVelocity, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + real* coordX, + real* coordY, + real* coordZ, + 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]; + } + //////////////////////////////////////////////////////////////////////////////// + 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 VeloX = vx[k]; + //real VeloY = vy[k]; + //real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny) + //////////////////////////////////////////////////////////////////////////////// + real VeloX = cosf(Phi)*vx[k] - sinf(Phi)*vy[k]; + real VeloY = sinf(Phi)*vx[k] + cosf(Phi)*vy[k]; + //real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny) + //////////////////////////////////////////////////////////////////////////////////// + //Ship + real coord0X = 281.125f;//7.5f; + real coord0Y = 388.125f;//7.5f; + real ux = - angularVelocity * (coordY[k_Q[k]] - coord0Y); + real uy = angularVelocity * (coordX[k_Q[k]] - coord0X); + real VeloXpur=VeloX; + real VeloYpur=VeloY; + VeloX-=ux; + VeloY-=uy; + //////////////////////////////////////////////////////////////////////////////// + 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]; + ////////////////////////////////////////////////////////////////////////// + if (isEvenTimestep==false) + { + 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]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real vx1, vx2, vx3, drho, feq, q, cu_sq; + ///////// equilibrium BC + cu_sq=c3o2*(VeloX*VeloX +VeloY*VeloY); + VeloXpur*=-c1o1; + VeloYpur*=-c1o1; + vx1=VeloX; + vx2=VeloY; + vx3=c0o1; + drho=c0o1; + + q = q_dirE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho+c3o1*( VeloXpur )+c9o2*( vx1 )*( vx1 ) * (c1o1 + drho)-cu_sq); + (D.f[dM00])[kw]= feq - c2o27 * drho; + } + + q = q_dirW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho+c3o1*(-VeloXpur )+c9o2*(-vx1 )*(-vx1 ) * (c1o1 + drho)-cu_sq); + (D.f[dP00])[ke]= feq - c2o27 * drho; + } + + q = q_dirN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho+c3o1*( VeloYpur )+c9o2*( vx2 )*( vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[d0M0])[ks]= feq - c2o27 * drho; + } + + q = q_dirS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho+c3o1*( -VeloYpur )+c9o2*( -vx2 )*( -vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[d0P0])[kn]= feq - c2o27 * drho; + } + + q = q_dirT[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho+c3o1*( vx3)+c9o2*( vx3)*( vx3) * (c1o1 + drho)-cu_sq); + (D.f[d00M])[kb]= feq - c2o27 * drho; + } + + q = q_dirB[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3) * (c1o1 + drho)-cu_sq); + (D.f[d00P])[kt]= feq - c2o27 * drho; + } + + q = q_dirNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*( VeloXpur+VeloYpur )+c9o2*( vx1+vx2 )*( vx1+vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dMM0])[ksw]= feq - c1o54 * drho; + } + + q = q_dirSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*(-VeloXpur-VeloYpur )+c9o2*(-vx1-vx2 )*(-vx1-vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dPP0])[kne]= feq - c1o54 * drho; + } + + q = q_dirSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*( VeloXpur-VeloYpur )+c9o2*( vx1-vx2 )*( vx1-vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dMP0])[knw]= feq - c1o54 * drho; + } + + q = q_dirNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*(-VeloXpur+VeloYpur )+c9o2*(-vx1+vx2 )*(-vx1+vx2 ) * (c1o1 + drho)-cu_sq); + (D.f[dPM0])[kse]= feq - c1o54 * drho; + } + + q = q_dirTE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*( VeloXpur +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3) * (c1o1 + drho)-cu_sq); + (D.f[dM0M])[kbw]= feq - c1o54 * drho; + } + + q = q_dirBW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*(-VeloXpur -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3) * (c1o1 + drho)-cu_sq); + (D.f[dP0P])[kte]= feq - c1o54 * drho; + } + + q = q_dirBE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*( VeloXpur -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3) * (c1o1 + drho)-cu_sq); + (D.f[dM0P])[ktw]= feq - c1o54 * drho; + } + + q = q_dirTW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*(-VeloXpur +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3) * (c1o1 + drho)-cu_sq); + (D.f[dP0M])[kbe]= feq - c1o54 * drho; + } + + q = q_dirTN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*( VeloYpur+vx3)+c9o2*( vx2+vx3)*( vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0MM])[kbs]= feq - c1o54 * drho; + } + + q = q_dirBS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*( -VeloYpur-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0PP])[ktn]= feq - c1o54 * drho; + } + + q = q_dirBN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*( VeloYpur-vx3)+c9o2*( vx2-vx3)*( vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0MP])[kts]= feq - c1o54 * drho; + } + + q = q_dirTS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*( -VeloYpur+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[d0PM])[kbn]= feq - c1o54 * drho; + } + + q = q_dirTNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c3o1*( VeloXpur+VeloYpur+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMMM])[kbsw]= feq - c1o216 * drho; + } + + q = q_dirBSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c3o1*(-VeloXpur-VeloYpur-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPPP])[ktne]= feq - c1o216 * drho; + } + + q = q_dirBNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c3o1*( VeloXpur+VeloYpur-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMMP])[ktsw]= feq - c1o216 * drho; + } + + q = q_dirTSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c3o1*(-VeloXpur-VeloYpur+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPPM])[kbne]= feq - c1o216 * drho; + } + + q = q_dirTSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c3o1*( VeloXpur-VeloYpur+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMPM])[kbnw]= feq - c1o216 * drho; + } + + q = q_dirBNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c3o1*(-VeloXpur+VeloYpur-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPMP])[ktse]= feq - c1o216 * drho; + } + + q = q_dirBSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c3o1*( VeloXpur-VeloYpur-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (c1o1 + drho)-cu_sq); + (D.f[dMPP])[ktnw]= feq - c1o216 * drho; + } + + q = q_dirTNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c3o1*(-VeloXpur+VeloYpur+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (c1o1 + drho)-cu_sq); + (D.f[dPMM])[kbse]= feq - c1o216 * drho; + } + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void LB_BC_Vel_West_27( + int nx, + int ny, + int nz, + int itz, + unsigned int* bcMatD, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + real* DD, + unsigned long long numberOfLBnodes, + bool isEvenTimestep, + real u0x, + unsigned int grid_nx, + unsigned int grid_ny, + real om) +{ + //thread-index + unsigned int ity = blockIdx.x; + unsigned int itx = threadIdx.x; + + unsigned int k, nxny; // Zugriff auf arrays im device + + unsigned int x = itx + STARTOFFX; // Globaler x-Index + unsigned int y = ity + STARTOFFY; // Globaler y-Index + unsigned int z = itz + STARTOFFZ; // Globaler z-Index + + k = nx*(ny*z + y) + x; + nxny = nx*ny; + unsigned int k1 = k+nxny; + + if( bcMatD[k] == GEO_VELO ) + { + 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]; + } + + //////////////////////////////////////////////////////////////////////////////// + //index + unsigned int kzero= k; + unsigned int ke = k; + unsigned int kw = neighborX[k]; + unsigned int kn = k; + unsigned int ks = neighborY[k]; + unsigned int kt = k; + unsigned int kb = neighborZ[k]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = k; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = k; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = k; + 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 = k; + unsigned int kbsw = neighborZ[ksw]; + //unsigned int kzero= k; + //unsigned int ke = k; + //unsigned int kw = k + 1; + //unsigned int kn = k; + //unsigned int ks = k + nx; + //unsigned int kt = k; + //unsigned int kb = k + nxny; + //unsigned int ksw = k + nx + 1; + //unsigned int kne = k; + //unsigned int kse = k + nx; + //unsigned int knw = k + 1; + //unsigned int kbw = k + nxny + 1; + //unsigned int kte = k; + //unsigned int kbe = k + nxny; + //unsigned int ktw = k + 1; + //unsigned int kbs = k + nxny + nx; + //unsigned int ktn = k; + //unsigned int kbn = k + nxny; + //unsigned int kts = k + nx; + //unsigned int ktse = k + nx; + //unsigned int kbnw = k + nxny + 1; + //unsigned int ktnw = k + 1; + //unsigned int kbse = k + nxny + nx; + //unsigned int ktsw = k + nx + 1; + //unsigned int kbne = k + nxny; + //unsigned int ktne = k; + //unsigned int kbsw = k + nxny + nx + 1; + //////////////////////////////////////////////////////////////////////////////// + //index1 + unsigned int k1zero= k1; + unsigned int k1e = k1; + unsigned int k1w = neighborX[k1]; + unsigned int k1n = k1; + unsigned int k1s = neighborY[k1]; + unsigned int k1t = k1; + unsigned int k1b = neighborZ[k1]; + unsigned int k1sw = neighborY[k1w]; + unsigned int k1ne = k1; + unsigned int k1se = k1s; + unsigned int k1nw = k1w; + unsigned int k1bw = neighborZ[k1w]; + unsigned int k1te = k1; + unsigned int k1be = k1b; + unsigned int k1tw = k1w; + unsigned int k1bs = neighborZ[k1s]; + unsigned int k1tn = k1; + unsigned int k1bn = k1b; + unsigned int k1ts = k1s; + unsigned int k1tse = k1s; + unsigned int k1bnw = k1bw; + unsigned int k1tnw = k1w; + unsigned int k1bse = k1bs; + unsigned int k1tsw = k1sw; + unsigned int k1bne = k1b; + unsigned int k1tne = k1; + unsigned int k1bsw = neighborZ[k1sw]; + //unsigned int k1zero= k1; + //unsigned int k1e = k1; + //unsigned int k1w = k1 + 1; + //unsigned int k1n = k1; + //unsigned int k1s = k1 + nx; + //unsigned int k1t = k1; + //unsigned int k1b = k1 + nxny; + //unsigned int k1sw = k1 + nx + 1; + //unsigned int k1ne = k1; + //unsigned int k1se = k1 + nx; + //unsigned int k1nw = k1 + 1; + //unsigned int k1bw = k1 + nxny + 1; + //unsigned int k1te = k1; + //unsigned int k1be = k1 + nxny; + //unsigned int k1tw = k1 + 1; + //unsigned int k1bs = k1 + nxny + nx; + //unsigned int k1tn = k1; + //unsigned int k1bn = k1 + nxny; + //unsigned int k1ts = k1 + nx; + //unsigned int k1tse = k1 + nx; + //unsigned int k1bnw = k1 + nxny + 1; + //unsigned int k1tnw = k1 + 1; + //unsigned int k1bse = k1 + nxny + nx; + //unsigned int k1tsw = k1 + nx + 1; + //unsigned int k1bne = k1 + nxny; + //unsigned int k1tne = k1; + //unsigned int k1bsw = k1 + nxny + nx + 1; + //////////////////////////////////////////////////////////////////////////////// + real f1_E,f1_W,f1_N,f1_S,f1_T,f1_B,f1_NE,f1_SW,f1_SE,f1_NW,f1_TE,f1_BW,f1_BE,f1_TW,f1_TN,f1_BS,f1_BN,f1_TS,f1_ZERO, + f1_TNE,f1_TSW,f1_TSE,f1_TNW,f1_BNE,f1_BSW,f1_BSE,f1_BNW; + + f1_W = (D.f[dP00])[k1e ]; + f1_E = (D.f[dM00])[k1w ]; + f1_S = (D.f[d0P0])[k1n ]; + f1_N = (D.f[d0M0])[k1s ]; + f1_B = (D.f[d00P])[k1t ]; + f1_T = (D.f[d00M])[k1b ]; + f1_SW = (D.f[dPP0])[k1ne ]; + f1_NE = (D.f[dMM0])[k1sw ]; + f1_NW = (D.f[dPM0])[k1se ]; + f1_SE = (D.f[dMP0])[k1nw ]; + f1_BW = (D.f[dP0P])[k1te ]; + f1_TE = (D.f[dM0M])[k1bw ]; + f1_TW = (D.f[dP0M])[k1be ]; + f1_BE = (D.f[dM0P])[k1tw ]; + f1_BS = (D.f[d0PP])[k1tn ]; + f1_TN = (D.f[d0MM])[k1bs ]; + f1_TS = (D.f[d0PM])[k1bn ]; + f1_BN = (D.f[d0MP])[k1ts ]; + f1_ZERO = (D.f[d000])[k1zero]; + f1_BSW = (D.f[dPPP])[k1tne ]; + f1_BNE = (D.f[dMMP])[k1tsw ]; + f1_BNW = (D.f[dPMP])[k1tse ]; + f1_BSE = (D.f[dMPP])[k1tnw ]; + f1_TSW = (D.f[dPPM])[k1bne ]; + f1_TNE = (D.f[dMMM])[k1bsw ]; + f1_TNW = (D.f[dPMM])[k1bse ]; + f1_TSE = (D.f[dMPM])[k1bnw ]; + + real drho1 = f1_ZERO+f1_E+f1_W+f1_N+f1_S+f1_T+f1_B+f1_NE+f1_SW+f1_SE+f1_NW+f1_TE+f1_BW+f1_BE+f1_TW+f1_TN+f1_BS+f1_BN+f1_TS+ + f1_TNE+f1_TSW+f1_TSE+f1_TNW+f1_BNE+f1_BSW+f1_BSE+f1_BNW; + + __syncthreads(); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real drho = drho1; + real vx1 = c0o1; + real vx2 = c0o1; + real vx3 = u0x; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); + + (D.f[d000])[kzero] = c8o27* (drho-cu_sq); + (D.f[dP00])[ke ] = c2o27* (drho+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); + (D.f[dM00])[kw ] = c2o27* (drho+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); + (D.f[d0P0])[kn ] = c2o27* (drho+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); + (D.f[d0M0])[ks ] = c2o27* (drho+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); + (D.f[d00P])[kt ] = c2o27* (drho+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); + (D.f[d00M])[kb ] = c2o27* (drho+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); + (D.f[dPP0])[kne ] = c1o54* (drho+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); + (D.f[dMM0])[ksw ] = c1o54* (drho+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); + (D.f[dPM0])[kse ] = c1o54* (drho+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); + (D.f[dMP0])[knw ] = c1o54* (drho+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); + (D.f[dP0P])[kte ] = c1o54* (drho+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); + (D.f[dM0M])[kbw ] = c1o54* (drho+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); + (D.f[dP0M])[kbe ] = c1o54* (drho+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); + (D.f[dM0P])[ktw ] = c1o54* (drho+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); + (D.f[d0PP])[ktn ] = c1o54* (drho+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); + (D.f[d0MM])[kbs ] = c1o54* (drho+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); + (D.f[d0PM])[kbn ] = c1o54* (drho+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); + (D.f[d0MP])[kts ] = c1o54* (drho+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); + (D.f[dPPP])[ktne ] = c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); + (D.f[dMMM])[kbsw ] = c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); + (D.f[dPPM])[kbne ] = c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); + (D.f[dMMP])[ktsw ] = c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); + (D.f[dPMP])[ktse ] = c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); + (D.f[dMPM])[kbnw ] = c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); + (D.f[dPMM])[kbse ] = c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); + (D.f[dMPP])[ktnw ] = c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); + } + __syncthreads(); +} +////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void QVelDevPlainBB27( + real* velocityX, + real* velocityY, + real* velocityZ, + real* distributions, + int* subgridDistanceIndices, + real* subgridDistances, + uint numberOfBCnodes, + uint* neighborX, + uint* neighborY, + uint* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + ////////////////////////////////////////////////////////////////////////// + //! The velocity boundary condition is executed in the following steps + //! + //////////////////////////////////////////////////////////////////////////////// + //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. + //! + const unsigned nodeIndex = getNodeIndex(); + + ////////////////////////////////////////////////////////////////////////// + // run for all indices in size of boundary condition (numberOfBCnodes) + if(nodeIndex < numberOfBCnodes) + { + ////////////////////////////////////////////////////////////////////////// + //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref + //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> + //! + Distributions27 dist; + getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); + + //////////////////////////////////////////////////////////////////////////////// + //! - Set local velocities + //! + real VeloX = velocityX[nodeIndex]; + real VeloY = velocityY[nodeIndex]; + real VeloZ = velocityZ[nodeIndex]; + + //////////////////////////////////////////////////////////////////////////////// + //! - Set local subgrid distances (q's) + //! + SubgridDistances27 subgridD; + getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes); + + //////////////////////////////////////////////////////////////////////////////// + //! - Set neighbor indices (necessary for indirect addressing) + //! + uint indexOfBCnode = subgridDistanceIndices[nodeIndex]; + uint ke = indexOfBCnode; + uint kw = neighborX[indexOfBCnode]; + uint kn = indexOfBCnode; + uint ks = neighborY[indexOfBCnode]; + uint kt = indexOfBCnode; + uint kb = neighborZ[indexOfBCnode]; + uint ksw = neighborY[kw]; + uint kne = indexOfBCnode; + uint kse = ks; + uint knw = kw; + uint kbw = neighborZ[kw]; + uint kte = indexOfBCnode; + uint kbe = kb; + uint ktw = kw; + uint kbs = neighborZ[ks]; + uint ktn = indexOfBCnode; + uint kbn = kb; + uint kts = ks; + uint ktse = ks; + uint kbnw = kbw; + uint ktnw = kw; + uint kbse = kbs; + uint ktsw = ksw; + uint kbne = kb; + uint ktne = indexOfBCnode; + uint kbsw = neighborZ[ksw]; + + //////////////////////////////////////////////////////////////////////////////// + //! - Set local distributions + //! + real f_W = (dist.f[dP00])[ke ]; + real f_E = (dist.f[dM00])[kw ]; + real f_S = (dist.f[d0P0])[kn ]; + real f_N = (dist.f[d0M0])[ks ]; + real f_B = (dist.f[d00P])[kt ]; + real f_T = (dist.f[d00M])[kb ]; + real f_SW = (dist.f[dPP0])[kne ]; + real f_NE = (dist.f[dMM0])[ksw ]; + real f_NW = (dist.f[dPM0])[kse ]; + real f_SE = (dist.f[dMP0])[knw ]; + real f_BW = (dist.f[dP0P])[kte ]; + real f_TE = (dist.f[dM0M])[kbw ]; + real f_TW = (dist.f[dP0M])[kbe ]; + real f_BE = (dist.f[dM0P])[ktw ]; + real f_BS = (dist.f[d0PP])[ktn ]; + real f_TN = (dist.f[d0MM])[kbs ]; + real f_TS = (dist.f[d0PM])[kbn ]; + real f_BN = (dist.f[d0MP])[kts ]; + real f_BSW = (dist.f[dPPP])[ktne ]; + real f_BNE = (dist.f[dMMP])[ktsw ]; + real f_BNW = (dist.f[dPMP])[ktse ]; + real f_BSE = (dist.f[dMPP])[ktnw ]; + real f_TSW = (dist.f[dPPM])[kbne ]; + real f_TNE = (dist.f[dMMM])[kbsw ]; + real f_TNW = (dist.f[dPMM])[kbse ]; + real f_TSE = (dist.f[dMPM])[kbnw ]; + + //////////////////////////////////////////////////////////////////////////////// + //! - change the pointer to write the results in the correct array + //! + getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep); + + //////////////////////////////////////////////////////////////////////////////// + //! - rewrite distributions if there is a sub-grid distance (q) in same direction + real q; + q = (subgridD.q[dP00])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dM00])[kw ]=f_E + c4o9 * (-VeloX); + q = (subgridD.q[dM00])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dP00])[ke ]=f_W + c4o9 * ( VeloX); + q = (subgridD.q[d0P0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[d0M0])[ks ]=f_N + c4o9 * (-VeloY); + q = (subgridD.q[d0M0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[d0P0])[kn ]=f_S + c4o9 * ( VeloY); + q = (subgridD.q[d00P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[d00M])[kb ]=f_T + c4o9 * (-VeloZ); + q = (subgridD.q[d00M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[d00P])[kt ]=f_B + c4o9 * ( VeloZ); + q = (subgridD.q[dPP0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dMM0])[ksw ]=f_NE + c1o9 * (-VeloX - VeloY); + q = (subgridD.q[dMM0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dPP0])[kne ]=f_SW + c1o9 * ( VeloX + VeloY); + q = (subgridD.q[dPM0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dMP0])[knw ]=f_SE + c1o9 * (-VeloX + VeloY); + q = (subgridD.q[dMP0])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dPM0])[kse ]=f_NW + c1o9 * ( VeloX - VeloY); + q = (subgridD.q[dP0P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dM0M])[kbw ]=f_TE + c1o9 * (-VeloX - VeloZ); + q = (subgridD.q[dM0M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dP0P])[kte ]=f_BW + c1o9 * ( VeloX + VeloZ); + q = (subgridD.q[dP0M])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dM0P])[ktw ]=f_BE + c1o9 * (-VeloX + VeloZ); + q = (subgridD.q[dM0P])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dP0M])[kbe ]=f_TW + c1o9 * ( VeloX - VeloZ); + q = (subgridD.q[d0PP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[d0MM])[kbs ]=f_TN + c1o9 * (-VeloY - VeloZ); + q = (subgridD.q[d0MM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[d0PP])[ktn ]=f_BS + c1o9 * ( VeloY + VeloZ); + q = (subgridD.q[d0PM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[d0MP])[kts ]=f_BN + c1o9 * (-VeloY + VeloZ); + q = (subgridD.q[d0MP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[d0PM])[kbn ]=f_TS + c1o9 * ( VeloY - VeloZ); + q = (subgridD.q[dPPP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dMMM])[kbsw]=f_TNE + c1o36 * (-VeloX - VeloY - VeloZ); + q = (subgridD.q[dMMM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dPPP])[ktne]=f_BSW + c1o36 * ( VeloX + VeloY + VeloZ); + q = (subgridD.q[dPPM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dMMP])[ktsw]=f_BNE + c1o36 * (-VeloX - VeloY + VeloZ); + q = (subgridD.q[dMMP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dPPM])[kbne]=f_TSW + c1o36 * ( VeloX + VeloY - VeloZ); + q = (subgridD.q[dPMP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dMPM])[kbnw]=f_TSE + c1o36 * (-VeloX + VeloY - VeloZ); + q = (subgridD.q[dMPM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dPMP])[ktse]=f_BNW + c1o36 * ( VeloX - VeloY + VeloZ); + q = (subgridD.q[dPMM])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dMPP])[ktnw]=f_BSE + c1o36 * (-VeloX + VeloY + VeloZ); + q = (subgridD.q[dMPP])[nodeIndex]; if (q>=c0o1 && q<=c1o1) (dist.f[dPMM])[kbse]=f_TNW + c1o36 * ( VeloX - VeloY - VeloZ); + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void QVelDevCouette27( + real* vx, + real* vy, + real* vz, + real* DD, + 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]; + } + //////////////////////////////////////////////////////////////////////////////// + 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 VeloX = vx[k]; + real VeloY = vy[k]; + real VeloZ = vz[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 = &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_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 ]; + //////////////////////////////////////////////////////////////////////////////// + + //////////////////////////////////////////////////////////////////////////////// + if (isEvenTimestep==false) + { + 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]; + } + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + /////// FlowDirection Y !!!!!!!!!! /////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //calculate velocity + //real vx1 = ((f_TNE-f_BSW)+(f_BSE-f_TNW)+(f_BNE-f_TSW)+(f_TSE-f_BNW)) + (((f_NE-f_SW)+(f_TE-f_BW))+((f_SE-f_NW)+(f_BE-f_TW))) + (f_E-f_W); + real vx2 = ((f_TNE-f_BSW)+(f_TNW-f_BSE)+(f_BNE-f_TSW)+(f_BNW-f_TSE)) + (((f_NE-f_SW)+(f_TN-f_BS))+((f_BN-f_TS)+(f_NW-f_SE))) + (f_N-f_S); + //real vx3 = ((f_TNE-f_BSW)+(f_TNW-f_BSE)+(f_TSW-f_BNE)+(f_TSE-f_BNW)) + (((f_TE-f_BW)+(f_TN-f_BS))+((f_TW-f_BE)+(f_TS-f_BN))) + (f_T-f_B); + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //constant + real on=c0o1;//c1o2;//one; + real ms=-c6o1; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //2nd order moment + real kxxMyyFromfcNEQ = c0o1;//-c3o2 * (f_BW+f_W+f_TW-f_BS-f_S-f_TS-f_BN-f_N-f_TN+f_BE+f_E+f_TE-(vx1*vx1-vx2*vx2)); //all dP00+dM00 minus all d0P0+d0M0 (no combinations of xy left) + + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //set distributions + real q; + q = q_dirE[k]; if (q>=c0o1 && q<=c1o1) (D.f[dM00])[kw ]=f_E + ms*c2o27 * VeloX; + q = q_dirW[k]; if (q>=c0o1 && q<=c1o1) (D.f[dP00])[ke ]=f_W - ms*c2o27 * VeloX; + q = q_dirN[k]; if (q>=c0o1 && q<=c1o1) (D.f[d0M0])[ks ]=f_N + ms*c2o27 * VeloY; + q = q_dirS[k]; if (q>=c0o1 && q<=c1o1) (D.f[d0P0])[kn ]=f_S - ms*c2o27 * VeloY; + q = q_dirT[k]; if (q>=c0o1 && q<=c1o1) (D.f[d00M])[kb ]=f_T + ms*c2o27 * VeloZ - c3o2*c2o27*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on; + q = q_dirB[k]; if (q>=c0o1 && q<=c1o1) (D.f[d00P])[kt ]=f_B - ms*c2o27 * VeloZ; + q = q_dirNE[k]; if (q>=c0o1 && q<=c1o1) (D.f[dMM0])[ksw ]=f_NE + ms*c1o54 * VeloX + ms*c1o54 * VeloY; + q = q_dirSW[k]; if (q>=c0o1 && q<=c1o1) (D.f[dPP0])[kne ]=f_SW - ms*c1o54 * VeloX - ms*c1o54 * VeloY; + q = q_dirSE[k]; if (q>=c0o1 && q<=c1o1) (D.f[dMP0])[knw ]=f_SE + ms*c1o54 * VeloX - ms*c1o54 * VeloY; + q = q_dirNW[k]; if (q>=c0o1 && q<=c1o1) (D.f[dPM0])[kse ]=f_NW - ms*c1o54 * VeloX + ms*c1o54 * VeloY; + q = q_dirTE[k]; if (q>=c0o1 && q<=c1o1) (D.f[dM0M])[kbw ]=f_TE + ms*c1o54 * VeloX + ms*c1o54 * VeloZ - c3o2*c1o54*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on-c1o12*kxxMyyFromfcNEQ; + q = q_dirBW[k]; if (q>=c0o1 && q<=c1o1) (D.f[dP0P])[kte ]=f_BW - ms*c1o54 * VeloX - ms*c1o54 * VeloZ; + q = q_dirBE[k]; if (q>=c0o1 && q<=c1o1) (D.f[dM0P])[ktw ]=f_BE + ms*c1o54 * VeloX - ms*c1o54 * VeloZ; + q = q_dirTW[k]; if (q>=c0o1 && q<=c1o1) (D.f[dP0M])[kbe ]=f_TW - ms*c1o54 * VeloX + ms*c1o54 * VeloZ - c3o2*c1o54*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on-c1o12*kxxMyyFromfcNEQ; + q = q_dirTN[k]; if (q>=c0o1 && q<=c1o1) (D.f[d0MM])[kbs ]=f_TN + ms*c1o54 * VeloY + ms*c1o54 * VeloZ + c3o1*c1o54*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on+c1o12*kxxMyyFromfcNEQ; + q = q_dirBS[k]; if (q>=c0o1 && q<=c1o1) (D.f[d0PP])[ktn ]=f_BS - ms*c1o54 * VeloY - ms*c1o54 * VeloZ; + q = q_dirBN[k]; if (q>=c0o1 && q<=c1o1) (D.f[d0MP])[kts ]=f_BN + ms*c1o54 * VeloY - ms*c1o54 * VeloZ; + q = q_dirTS[k]; if (q>=c0o1 && q<=c1o1) (D.f[d0PM])[kbn ]=f_TS - ms*c1o54 * VeloY + ms*c1o54 * VeloZ + c3o1*c1o54*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on+c1o12*kxxMyyFromfcNEQ; + q = q_dirTNE[k]; if (q>=c0o1 && q<=c1o1) (D.f[dMMM])[kbsw]=f_TNE + ms*c1o216 * VeloX + ms*c1o216 * VeloY + ms*c1o216 * VeloZ + c3o1*c1o216*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on; + q = q_dirBSW[k]; if (q>=c0o1 && q<=c1o1) (D.f[dPPP])[ktne]=f_BSW - ms*c1o216 * VeloX - ms*c1o216 * VeloY - ms*c1o216 * VeloZ; + q = q_dirBNE[k]; if (q>=c0o1 && q<=c1o1) (D.f[dMMP])[ktsw]=f_BNE + ms*c1o216 * VeloX + ms*c1o216 * VeloY - ms*c1o216 * VeloZ; + q = q_dirTSW[k]; if (q>=c0o1 && q<=c1o1) (D.f[dPPM])[kbne]=f_TSW - ms*c1o216 * VeloX - ms*c1o216 * VeloY + ms*c1o216 * VeloZ + c3o1*c1o216*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on; + q = q_dirTSE[k]; if (q>=c0o1 && q<=c1o1) (D.f[dMPM])[kbnw]=f_TSE + ms*c1o216 * VeloX - ms*c1o216 * VeloY + ms*c1o216 * VeloZ + c3o1*c1o216*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on; + q = q_dirBNW[k]; if (q>=c0o1 && q<=c1o1) (D.f[dPMP])[ktse]=f_BNW - ms*c1o216 * VeloX + ms*c1o216 * VeloY - ms*c1o216 * VeloZ; + q = q_dirBSE[k]; if (q>=c0o1 && q<=c1o1) (D.f[dMPP])[ktnw]=f_BSE + ms*c1o216 * VeloX - ms*c1o216 * VeloY - ms*c1o216 * VeloZ; + q = q_dirTNW[k]; if (q>=c0o1 && q<=c1o1) (D.f[dPMM])[kbse]=f_TNW - ms*c1o216 * VeloX + ms*c1o216 * VeloY + ms*c1o216 * VeloZ + c3o1*c1o216*((c2o1*VeloY-vx2)*(c2o1*VeloY-vx2)-vx2*vx2)*on; + //q = q_dirE[k]; if (q>=zero && q<=one) (D.f[dM00])[kw ]=f_E + ms*c2over27 * VeloX; + // q = q_dirW[k]; if (q>=zero && q<=one) (D.f[dP00])[ke ]=f_W - ms*c2over27 * VeloX; + // q = q_dirN[k]; if (q>=zero && q<=one) (D.f[d0M0])[ks ]=f_N + ms*c2over27 * VeloY; + // q = q_dirS[k]; if (q>=zero && q<=one) (D.f[d0P0])[kn ]=f_S - ms*c2over27 * VeloY; + //q = q_dirT[k]; if (q>=zero && q<=one) (D.f[d00M])[kb ]=f_T + ms*c2over27 * VeloZ - c1o9*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on; + // q = q_dirB[k]; if (q>=zero && q<=one) (D.f[d00P])[kt ]=f_B - ms*c2over27 * VeloZ; + // q = q_dirNE[k]; if (q>=zero && q<=one) (D.f[dMM0])[ksw ]=f_NE + ms*c1over54 * VeloX + ms*c1over54 * VeloY; + //q = q_dirSW[k]; if (q>=zero && q<=one) (D.f[dPP0])[kne ]=f_SW - ms*c1over54 * VeloX - ms*c1over54 * VeloY; + //q = q_dirSE[k]; if (q>=zero && q<=one) (D.f[dMP0])[knw ]=f_SE + ms*c1over54 * VeloX - ms*c1over54 * VeloY; + //q = q_dirNW[k]; if (q>=zero && q<=one) (D.f[dPM0])[kse ]=f_NW - ms*c1over54 * VeloX + ms*c1over54 * VeloY; + //q = q_dirTE[k]; if (q>=zero && q<=one) (D.f[dM0M])[kbw ]=f_TE + ms*c1over54 * VeloX + ms*c1over54 * VeloZ - c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on; + //q = q_dirBW[k]; if (q>=zero && q<=one) (D.f[dP0P])[kte ]=f_BW - ms*c1over54 * VeloX - ms*c1over54 * VeloZ; + //q = q_dirBE[k]; if (q>=zero && q<=one) (D.f[dM0P])[ktw ]=f_BE + ms*c1over54 * VeloX - ms*c1over54 * VeloZ; + //q = q_dirTW[k]; if (q>=zero && q<=one) (D.f[dP0M])[kbe ]=f_TW - ms*c1over54 * VeloX + ms*c1over54 * VeloZ - c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on; + //q = q_dirTN[k]; if (q>=zero && q<=one) (D.f[d0MM])[kbs ]=f_TN + ms*c1over54 * VeloY + ms*c1over54 * VeloZ + c1o2*c1o9*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on; + //q = q_dirBS[k]; if (q>=zero && q<=one) (D.f[d0PP])[ktn ]=f_BS - ms*c1over54 * VeloY - ms*c1over54 * VeloZ; + //q = q_dirBN[k]; if (q>=zero && q<=one) (D.f[d0MP])[kts ]=f_BN + ms*c1over54 * VeloY - ms*c1over54 * VeloZ; + //q = q_dirTS[k]; if (q>=zero && q<=one) (D.f[d0PM])[kbn ]=f_TS - ms*c1over54 * VeloY + ms*c1over54 * VeloZ + c1o2*c1o9*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on; + // q = q_dirTNE[k]; if (q>=zero && q<=one) (D.f[dMMM])[kbsw]=f_TNE + ms*c1over216 * VeloX + ms*c1over216 * VeloY + ms*c1over216 * VeloZ + c1o2*c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on; + // q = q_dirBSW[k]; if (q>=zero && q<=one) (D.f[dPPP])[ktne]=f_BSW - ms*c1over216 * VeloX - ms*c1over216 * VeloY - ms*c1over216 * VeloZ; + // q = q_dirBNE[k]; if (q>=zero && q<=one) (D.f[dMMP])[ktsw]=f_BNE + ms*c1over216 * VeloX + ms*c1over216 * VeloY - ms*c1over216 * VeloZ; + // q = q_dirTSW[k]; if (q>=zero && q<=one) (D.f[dPPM])[kbne]=f_TSW - ms*c1over216 * VeloX - ms*c1over216 * VeloY + ms*c1over216 * VeloZ + c1o2*c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on; + // q = q_dirTSE[k]; if (q>=zero && q<=one) (D.f[dMPM])[kbnw]=f_TSE + ms*c1over216 * VeloX - ms*c1over216 * VeloY + ms*c1over216 * VeloZ + c1o2*c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on; + // q = q_dirBNW[k]; if (q>=zero && q<=one) (D.f[dPMP])[ktse]=f_BNW - ms*c1over216 * VeloX + ms*c1over216 * VeloY - ms*c1over216 * VeloZ; + // q = q_dirBSE[k]; if (q>=zero && q<=one) (D.f[dMPP])[ktnw]=f_BSE + ms*c1over216 * VeloX - ms*c1over216 * VeloY - ms*c1over216 * VeloZ; + // q = q_dirTNW[k]; if (q>=zero && q<=one) (D.f[dPMM])[kbse]=f_TNW - ms*c1over216 * VeloX + ms*c1over216 * VeloY + ms*c1over216 * VeloZ + c1o2*c1o36*((two*VeloY-vx2)*(two*VeloY-vx2)-vx2*vx2)*on; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void QVelDev1h27( + int inx, + int iny, + real* vx, + real* vy, + real* vz, + real* DD, + int* k_Q, + real* QQ, + unsigned int numberOfBCnodes, + real om1, + real Phi, + real angularVelocity, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + real* coordX, + real* coordY, + real* coordZ, + 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]; + } + //////////////////////////////////////////////////////////////////////////////// + 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 VeloX = cosf(Phi)*vx[k] - sinf(Phi)*vy[k]; + real VeloY = sinf(Phi)*vx[k] + cosf(Phi)*vy[k]; + //real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny) + //////////////////////////////////////////////////////////////////////////////////// + //Ship + real coord0X = 281.125f;//7.5f; + real coord0Y = 388.125f;//7.5f; + real ux = - angularVelocity * (coordY[k_Q[k]] - coord0Y); + real uy = angularVelocity * (coordX[k_Q[k]] - coord0X); + real VeloXpur=VeloX; + real VeloYpur=VeloY; + VeloX-=ux; + VeloY-=uy; + //////////////////////////////////////////////////////////////////////////////// + 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]; + //unsigned int nxny = nx*ny; + //unsigned int kzero= KQK; + //unsigned int ke = KQK; + //unsigned int kw = KQK + 1; + //unsigned int kn = KQK; + //unsigned int ks = KQK + nx; + //unsigned int kt = KQK; + //unsigned int kb = KQK + nxny; + //unsigned int ksw = KQK + nx + 1; + //unsigned int kne = KQK; + //unsigned int kse = KQK + nx; + //unsigned int knw = KQK + 1; + //unsigned int kbw = KQK + nxny + 1; + //unsigned int kte = KQK; + //unsigned int kbe = KQK + nxny; + //unsigned int ktw = KQK + 1; + //unsigned int kbs = KQK + nxny + nx; + //unsigned int ktn = KQK; + //unsigned int kbn = KQK + nxny; + //unsigned int kts = KQK + nx; + //unsigned int ktse = KQK + nx; + //unsigned int kbnw = KQK + nxny + 1; + //unsigned int ktnw = KQK + 1; + //unsigned int kbse = KQK + nxny + nx; + //unsigned int ktsw = KQK + nx + 1; + //unsigned int kbne = KQK + nxny; + //unsigned int ktne = KQK; + //unsigned int kbsw = KQK + nxny + nx + 1; + //////////////////////////////////////////////////////////////////////////////// + //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, feq, q, cu_sq; + //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); + + //cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); + + ////////////////////////////////////////////////////////////////////////// + if (isEvenTimestep==false) + { + 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]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //Test + //(D.f[d000])[k]=c1o10; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + //ToDo anders Klammern + + //q = q_dirE[k]; + //if (q>=zero && q<=one) + //{ + // feq=c2over27* (drho/*+three*( vx1 )*/+c9over2*( vx1 )*( vx1 )-cu_sq); + // (D.f[dM00])[kw]=(one-q)/(one+q)*(f_E-f_W+(f_E+f_W-two*feq*om1)/(one-om1))*c1o2+(q*(f_E+f_W)-six*c2over27*( VeloX ))/(one+q); + // //(D.f[dM00])[kw]=zero; + //} + + //q = q_dirW[k]; + //if (q>=zero && q<=one) + //{ + // feq=c2over27* (drho/*+three*(-vx1 )*/+c9over2*(-vx1 )*(-vx1 )-cu_sq); + // (D.f[dP00])[ke]=(one-q)/(one+q)*(f_W-f_E+(f_W+f_E-two*feq*om1)/(one-om1))*c1o2+(q*(f_W+f_E)-six*c2over27*(-VeloX ))/(one+q); + // //(D.f[dP00])[ke]=zero; + //} + + //q = q_dirN[k]; + //if (q>=zero && q<=one) + //{ + // feq=c2over27* (drho/*+three*( vx2 )*/+c9over2*( vx2 )*( vx2 )-cu_sq); + // (D.f[d0M0])[ks]=(one-q)/(one+q)*(f_N-f_S+(f_N+f_S-two*feq*om1)/(one-om1))*c1o2+(q*(f_N+f_S)-six*c2over27*( VeloY ))/(one+q); + // //(D.f[d0M0])[ks]=zero; + //} + + //q = q_dirS[k]; + //if (q>=zero && q<=one) + //{ + // feq=c2over27* (drho/*+three*( -vx2 )*/+c9over2*( -vx2 )*( -vx2 )-cu_sq); + // (D.f[d0P0])[kn]=(one-q)/(one+q)*(f_S-f_N+(f_S+f_N-two*feq*om1)/(one-om1))*c1o2+(q*(f_S+f_N)-six*c2over27*(-VeloY ))/(one+q); + // //(D.f[d0P0])[kn]=zero; + //} + + //q = q_dirT[k]; + //if (q>=zero && q<=one) + //{ + // feq=c2over27* (drho/*+three*( vx3)*/+c9over2*( vx3)*( vx3)-cu_sq); + // (D.f[d00M])[kb]=(one-q)/(one+q)*(f_T-f_B+(f_T+f_B-two*feq*om1)/(one-om1))*c1o2+(q*(f_T+f_B)-six*c2over27*( VeloZ ))/(one+q); + // //(D.f[d00M])[kb]=one; + //} + + //q = q_dirB[k]; + //if (q>=zero && q<=one) + //{ + // feq=c2over27* (drho/*+three*( -vx3)*/+c9over2*( -vx3)*( -vx3)-cu_sq); + // (D.f[d00P])[kt]=(one-q)/(one+q)*(f_B-f_T+(f_B+f_T-two*feq*om1)/(one-om1))*c1o2+(q*(f_B+f_T)-six*c2over27*(-VeloZ ))/(one+q); + // //(D.f[d00P])[kt]=zero; + //} + + //q = q_dirNE[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over54* (drho/*+three*( vx1+vx2 )*/+c9over2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); + // (D.f[dMM0])[ksw]=(one-q)/(one+q)*(f_NE-f_SW+(f_NE+f_SW-two*feq*om1)/(one-om1))*c1o2+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q); + // //(D.f[dMM0])[ksw]=zero; + //} + + //q = q_dirSW[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over54* (drho/*+three*(-vx1-vx2 )*/+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); + // (D.f[dPP0])[kne]=(one-q)/(one+q)*(f_SW-f_NE+(f_SW+f_NE-two*feq*om1)/(one-om1))*c1o2+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q); + // //(D.f[dPP0])[kne]=zero; + //} + + //q = q_dirSE[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over54* (drho/*+three*( vx1-vx2 )*/+c9over2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); + // (D.f[dMP0])[knw]=(one-q)/(one+q)*(f_SE-f_NW+(f_SE+f_NW-two*feq*om1)/(one-om1))*c1o2+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q); + // //(D.f[dMP0])[knw]=zero; + //} + + //q = q_dirNW[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over54* (drho/*+three*(-vx1+vx2 )*/+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); + // (D.f[dPM0])[kse]=(one-q)/(one+q)*(f_NW-f_SE+(f_NW+f_SE-two*feq*om1)/(one-om1))*c1o2+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q); + // //(D.f[dPM0])[kse]=zero; + //} + + //q = q_dirTE[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over54* (drho/*+three*( vx1 +vx3)*/+c9over2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); + // (D.f[dM0M])[kbw]=(one-q)/(one+q)*(f_TE-f_BW+(f_TE+f_BW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q); + // //(D.f[dM0M])[kbw]=zero; + //} + + //q = q_dirBW[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over54* (drho/*+three*(-vx1 -vx3)*/+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); + // (D.f[dP0P])[kte]=(one-q)/(one+q)*(f_BW-f_TE+(f_BW+f_TE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q); + // //(D.f[dP0P])[kte]=zero; + //} + + //q = q_dirBE[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over54* (drho/*+three*( vx1 -vx3)*/+c9over2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); + // (D.f[dM0P])[ktw]=(one-q)/(one+q)*(f_BE-f_TW+(f_BE+f_TW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q); + // //(D.f[dM0P])[ktw]=zero; + //} + + //q = q_dirTW[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over54* (drho/*+three*(-vx1 +vx3)*/+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); + // (D.f[dP0M])[kbe]=(one-q)/(one+q)*(f_TW-f_BE+(f_TW+f_BE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q); + // //(D.f[dP0M])[kbe]=zero; + //} + + //q = q_dirTN[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over54* (drho/*+three*( vx2+vx3)*/+c9over2*( vx2+vx3)*( vx2+vx3)-cu_sq); + // (D.f[d0MM])[kbs]=(one-q)/(one+q)*(f_TN-f_BS+(f_TN+f_BS-two*feq*om1)/(one-om1))*c1o2+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q); + // //(D.f[d0MM])[kbs]=zero; + //} + + //q = q_dirBS[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over54* (drho/*+three*( -vx2-vx3)*/+c9over2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); + // (D.f[d0PP])[ktn]=(one-q)/(one+q)*(f_BS-f_TN+(f_BS+f_TN-two*feq*om1)/(one-om1))*c1o2+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q); + // //(D.f[d0PP])[ktn]=zero; + //} + + //q = q_dirBN[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over54* (drho/*+three*( vx2-vx3)*/+c9over2*( vx2-vx3)*( vx2-vx3)-cu_sq); + // (D.f[d0MP])[kts]=(one-q)/(one+q)*(f_BN-f_TS+(f_BN+f_TS-two*feq*om1)/(one-om1))*c1o2+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q); + // //(D.f[d0MP])[kts]=zero; + //} + + //q = q_dirTS[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over54* (drho/*+three*( -vx2+vx3)*/+c9over2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); + // (D.f[d0PM])[kbn]=(one-q)/(one+q)*(f_TS-f_BN+(f_TS+f_BN-two*feq*om1)/(one-om1))*c1o2+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q); + // //(D.f[d0PM])[kbn]=zero; + //} + + //q = q_dirTNE[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over216*(drho/*+three*( vx1+vx2+vx3)*/+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); + // (D.f[dMMM])[kbsw]=(one-q)/(one+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q); + // //(D.f[dMMM])[kbsw]=zero; + //} + + //q = q_dirBSW[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over216*(drho/*+three*(-vx1-vx2-vx3)*/+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); + // (D.f[dPPP])[ktne]=(one-q)/(one+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q); + // //(D.f[dPPP])[ktne]=zero; + //} + + //q = q_dirBNE[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over216*(drho/*+three*( vx1+vx2-vx3)*/+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); + // (D.f[dMMP])[ktsw]=(one-q)/(one+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q); + // //(D.f[dMMP])[ktsw]=zero; + //} + + //q = q_dirTSW[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over216*(drho/*+three*(-vx1-vx2+vx3)*/+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); + // (D.f[dPPM])[kbne]=(one-q)/(one+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q); + // //(D.f[dPPM])[kbne]=zero; + //} + + //q = q_dirTSE[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over216*(drho/*+three*( vx1-vx2+vx3)*/+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); + // (D.f[dMPM])[kbnw]=(one-q)/(one+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q); + // //(D.f[dMPM])[kbnw]=zero; + //} + + //q = q_dirBNW[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over216*(drho/*+three*(-vx1+vx2-vx3)*/+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); + // (D.f[dPMP])[ktse]=(one-q)/(one+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q); + // //(D.f[dPMP])[ktse]=zero; + //} + + //q = q_dirBSE[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over216*(drho/*+three*( vx1-vx2-vx3)*/+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); + // (D.f[dMPP])[ktnw]=(one-q)/(one+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q); + // //(D.f[dMPP])[ktnw]=zero; + //} + + //q = q_dirTNW[k]; + //if (q>=zero && q<=one) + //{ + // feq=c1over216*(drho/*+three*(-vx1+vx2+vx3)*/+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); + // (D.f[dPMM])[kbse]=(one-q)/(one+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q); + // //(D.f[dPMM])[kbse]=zero; + //} + + ///////// equilibrium BC + cu_sq=c3o2*(VeloX*VeloX +VeloY*VeloY); + VeloXpur*=-c1o1; + VeloYpur*=-c1o1; + vx3=c0o1; + drho=c0o1; + q = q_dirE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho+c3o1*( VeloXpur )+c9o2*( VeloX )*( VeloX )-cu_sq); + (D.f[dM00])[kw]=feq; + //(D.f[dM00])[kw]=zero; + } + + q = q_dirW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho+c3o1*(-VeloXpur )+c9o2*(-VeloX )*(-VeloX )-cu_sq); + (D.f[dP00])[ke]=feq; + //(D.f[dP00])[ke]=zero; + } + + q = q_dirN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho+c3o1*( VeloYpur )+c9o2*( VeloY )*( VeloY )-cu_sq); + (D.f[d0M0])[ks]=feq; + //(D.f[d0M0])[ks]=zero; + } + + q = q_dirS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho+c3o1*( -VeloYpur )+c9o2*( -VeloY )*( -VeloY )-cu_sq); + (D.f[d0P0])[kn]=feq; + //(D.f[d0P0])[kn]=zero; + } + + q = q_dirT[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); + (D.f[d00M])[kb]=feq; + //(D.f[d00M])[kb]=one; + } + + q = q_dirB[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); + (D.f[d00P])[kt]=feq; + //(D.f[d00P])[kt]=zero; + } + + q = q_dirNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*( VeloXpur+VeloYpur )+c9o2*( VeloX+VeloY )*( VeloX+VeloY )-cu_sq); + (D.f[dMM0])[ksw]=feq; + //(D.f[dMM0])[ksw]=zero; + } + + q = q_dirSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*(-VeloXpur-VeloYpur )+c9o2*(-VeloX-VeloY )*(-VeloX-VeloY )-cu_sq); + (D.f[dPP0])[kne]=feq; + //(D.f[dPP0])[kne]=zero; + } + + q = q_dirSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*( VeloXpur-VeloYpur )+c9o2*( VeloX-VeloY )*( VeloX-VeloY )-cu_sq); + (D.f[dMP0])[knw]=feq; + //(D.f[dMP0])[knw]=zero; + } + + q = q_dirNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*(-VeloXpur+VeloYpur )+c9o2*(-VeloX+VeloY )*(-VeloX+VeloY )-cu_sq); + (D.f[dPM0])[kse]=feq; + //(D.f[dPM0])[kse]=zero; + } + + q = q_dirTE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*( VeloXpur +vx3)+c9o2*( VeloX +vx3)*( VeloX +vx3)-cu_sq); + (D.f[dM0M])[kbw]=feq; + //(D.f[dM0M])[kbw]=zero; + } + + q = q_dirBW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*(-VeloXpur -vx3)+c9o2*(-VeloX -vx3)*(-VeloX -vx3)-cu_sq); + (D.f[dP0P])[kte]=feq; + //(D.f[dP0P])[kte]=zero; + } + + q = q_dirBE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*( VeloXpur -vx3)+c9o2*( VeloX -vx3)*( VeloX -vx3)-cu_sq); + (D.f[dM0P])[ktw]=feq; + //(D.f[dM0P])[ktw]=zero; + } + + q = q_dirTW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*(-VeloXpur +vx3)+c9o2*(-VeloX +vx3)*(-VeloX +vx3)-cu_sq); + (D.f[dP0M])[kbe]=feq; + //(D.f[dP0M])[kbe]=zero; + } + + q = q_dirTN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*( VeloYpur+vx3)+c9o2*( VeloY+vx3)*( VeloY+vx3)-cu_sq); + (D.f[d0MM])[kbs]=feq; + //(D.f[d0MM])[kbs]=zero; + } + + q = q_dirBS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*( -VeloYpur-vx3)+c9o2*( -VeloY-vx3)*( -VeloY-vx3)-cu_sq); + (D.f[d0PP])[ktn]=feq; + //(D.f[d0PP])[ktn]=zero; + } + + q = q_dirBN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*( VeloYpur-vx3)+c9o2*( VeloY-vx3)*( VeloY-vx3)-cu_sq); + (D.f[d0MP])[kts]=feq; + //(D.f[d0MP])[kts]=zero; + } + + q = q_dirTS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho+c3o1*( -VeloYpur+vx3)+c9o2*( -VeloY+vx3)*( -VeloY+vx3)-cu_sq); + (D.f[d0PM])[kbn]=feq; + //(D.f[d0PM])[kbn]=zero; + } + + q = q_dirTNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c3o1*( VeloXpur+VeloYpur+vx3)+c9o2*( VeloX+VeloY+vx3)*( VeloX+VeloY+vx3)-cu_sq); + (D.f[dMMM])[kbsw]=feq; + //(D.f[dMMM])[kbsw]=zero; + } + + q = q_dirBSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c3o1*(-VeloXpur-VeloYpur-vx3)+c9o2*(-VeloX-VeloY-vx3)*(-VeloX-VeloY-vx3)-cu_sq); + (D.f[dPPP])[ktne]=feq; + //(D.f[dPPP])[ktne]=zero; + } + + q = q_dirBNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c3o1*( VeloXpur+VeloYpur-vx3)+c9o2*( VeloX+VeloY-vx3)*( VeloX+VeloY-vx3)-cu_sq); + (D.f[dMMP])[ktsw]=feq; + //(D.f[dMMP])[ktsw]=zero; + } + + q = q_dirTSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c3o1*(-VeloXpur-VeloYpur+vx3)+c9o2*(-VeloX-VeloY+vx3)*(-VeloX-VeloY+vx3)-cu_sq); + (D.f[dPPM])[kbne]=feq; + //(D.f[dPPM])[kbne]=zero; + } + + q = q_dirTSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c3o1*( VeloXpur-VeloYpur+vx3)+c9o2*( VeloX-VeloY+vx3)*( VeloX-VeloY+vx3)-cu_sq); + (D.f[dMPM])[kbnw]=feq; + //(D.f[dMPM])[kbnw]=zero; + } + + q = q_dirBNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c3o1*(-VeloXpur+VeloYpur-vx3)+c9o2*(-VeloX+VeloY-vx3)*(-VeloX+VeloY-vx3)-cu_sq); + (D.f[dPMP])[ktse]=feq; + //(D.f[dPMP])[ktse]=zero; + } + + q = q_dirBSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c3o1*( VeloXpur-VeloYpur-vx3)+c9o2*( VeloX-VeloY-vx3)*( VeloX-VeloY-vx3)-cu_sq); + (D.f[dMPP])[ktnw]=feq; + //(D.f[dMPP])[ktnw]=zero; + } + + q = q_dirTNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho+c3o1*(-VeloXpur+VeloYpur+vx3)+c9o2*(-VeloX+VeloY+vx3)*(-VeloX+VeloY+vx3)-cu_sq); + (D.f[dPMM])[kbse]=feq; + //(D.f[dPMM])[kbse]=zero; + } + + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void QVelDeviceComp27( + real* velocityX, + real* velocityY, + real* velocityZ, + real* distributions, + int* subgridDistanceIndices, + real* subgridDistances, + unsigned int numberOfBCnodes, + real omega, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned long long numberOfLBnodes, + bool isEvenTimestep) +{ + ////////////////////////////////////////////////////////////////////////// + //! The velocity boundary condition is executed in the following steps + //! + //////////////////////////////////////////////////////////////////////////////// + //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. + //! + const unsigned nodeIndex = getNodeIndex(); + + ////////////////////////////////////////////////////////////////////////// + //! - Run for all indices in size of boundary condition (numberOfBCnodes) + //! + if(nodeIndex < numberOfBCnodes) + { + ////////////////////////////////////////////////////////////////////////// + //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref + //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> + //! + Distributions27 dist; + getPointersToDistributions(dist, distributions, numberOfLBnodes, isEvenTimestep); + + //////////////////////////////////////////////////////////////////////////////// + //! - Set local velocities + //! + real VeloX = velocityX[nodeIndex]; + real VeloY = velocityY[nodeIndex]; + real VeloZ = velocityZ[nodeIndex]; + + //////////////////////////////////////////////////////////////////////////////// + //! - Set local subgrid distances (q's) + //! + SubgridDistances27 subgridD; + getPointersToSubgridDistances(subgridD, subgridDistances, numberOfBCnodes); + + //////////////////////////////////////////////////////////////////////////////// + //! - Set neighbor indices (necessary for indirect addressing) + //! + unsigned int indexOfBCnode = subgridDistanceIndices[nodeIndex]; + unsigned int kzero= indexOfBCnode; + unsigned int ke = indexOfBCnode; + unsigned int kw = neighborX[indexOfBCnode]; + unsigned int kn = indexOfBCnode; + unsigned int ks = neighborY[indexOfBCnode]; + unsigned int kt = indexOfBCnode; + unsigned int kb = neighborZ[indexOfBCnode]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = indexOfBCnode; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = indexOfBCnode; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = indexOfBCnode; + 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 = indexOfBCnode; + unsigned int kbsw = neighborZ[ksw]; + + //////////////////////////////////////////////////////////////////////////////// + //! - Set local distributions + //! + real f_W = (dist.f[dP00])[ke ]; + real f_E = (dist.f[dM00])[kw ]; + real f_S = (dist.f[d0P0])[kn ]; + real f_N = (dist.f[d0M0])[ks ]; + real f_B = (dist.f[d00P])[kt ]; + real f_T = (dist.f[d00M])[kb ]; + real f_SW = (dist.f[dPP0])[kne ]; + real f_NE = (dist.f[dMM0])[ksw ]; + real f_NW = (dist.f[dPM0])[kse ]; + real f_SE = (dist.f[dMP0])[knw ]; + real f_BW = (dist.f[dP0P])[kte ]; + real f_TE = (dist.f[dM0M])[kbw ]; + real f_TW = (dist.f[dP0M])[kbe ]; + real f_BE = (dist.f[dM0P])[ktw ]; + real f_BS = (dist.f[d0PP])[ktn ]; + real f_TN = (dist.f[d0MM])[kbs ]; + real f_TS = (dist.f[d0PM])[kbn ]; + real f_BN = (dist.f[d0MP])[kts ]; + real f_BSW = (dist.f[dPPP])[ktne ]; + real f_BNE = (dist.f[dMMP])[ktsw ]; + real f_BNW = (dist.f[dPMP])[ktse ]; + real f_BSE = (dist.f[dMPP])[ktnw ]; + real f_TSW = (dist.f[dPPM])[kbne ]; + real f_TNE = (dist.f[dMMM])[kbsw ]; + real f_TNW = (dist.f[dPMM])[kbse ]; + real f_TSE = (dist.f[dMPM])[kbnw ]; + + //////////////////////////////////////////////////////////////////////////////// + //! - Calculate macroscopic quantities + //! + real 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 + ((dist.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)) / (c1o1 + drho); + + 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)) / (c1o1 + drho); + + 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)) / (c1o1 + drho); + + real cu_sq = c3o2 * (vx1 * vx1 + vx2 * vx2 + vx3 * vx3) * (c1o1 + drho); + + //////////////////////////////////////////////////////////////////////////////// + //! - change the pointer to write the results in the correct array + //! + getPointersToDistributions(dist, distributions, numberOfLBnodes, !isEvenTimestep); + + //////////////////////////////////////////////////////////////////////////////// + //! - Update distributions with subgrid distance (q) between zero and one + //! + real feq, q, velocityLB, velocityBC; + q = (subgridD.q[dP00])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) // only update distribution for q between zero and one + { + velocityLB = vx1; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + velocityBC = VeloX; + (dist.f[dM00])[kw] = getInterpolatedDistributionForVeloBC(q, f_E, f_W, feq, omega, velocityBC, c2o27); + } + + q = (subgridD.q[dM00])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + velocityBC = -VeloX; + (dist.f[dP00])[ke] = getInterpolatedDistributionForVeloBC(q, f_W, f_E, feq, omega, velocityBC, c2o27); + } + + q = (subgridD.q[d0P0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + velocityBC = VeloY; + (dist.f[d0M0])[ks] = getInterpolatedDistributionForVeloBC(q, f_N, f_S, feq, omega, velocityBC, c2o27); + } + + q = (subgridD.q[d0M0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + velocityBC = -VeloY; + (dist.f[d0P0])[kn] = getInterpolatedDistributionForVeloBC(q, f_S, f_N, feq, omega, velocityBC, c2o27); + } + + q = (subgridD.q[d00P])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + velocityBC = VeloZ; + (dist.f[d00M])[kb] = getInterpolatedDistributionForVeloBC(q, f_T, f_B, feq, omega, velocityBC, c2o27); + } + + q = (subgridD.q[d00M])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c2o27); + velocityBC = -VeloZ; + (dist.f[d00P])[kt] = getInterpolatedDistributionForVeloBC(q, f_B, f_T, feq, omega, velocityBC, c2o27); + } + + q = (subgridD.q[dPP0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 + vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = VeloX + VeloY; + (dist.f[dMM0])[ksw] = getInterpolatedDistributionForVeloBC(q, f_NE, f_SW, feq, omega, velocityBC, c1o54); + } + + q = (subgridD.q[dMM0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 - vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = -VeloX - VeloY; + (dist.f[dPP0])[kne] = getInterpolatedDistributionForVeloBC(q, f_SW, f_NE, feq, omega, velocityBC, c1o54); + } + + q = (subgridD.q[dPM0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 - vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = VeloX - VeloY; + (dist.f[dMP0])[knw] = getInterpolatedDistributionForVeloBC(q, f_SE, f_NW, feq, omega, velocityBC, c1o54); + } + + q = (subgridD.q[dMP0])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 + vx2; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = -VeloX + VeloY; + (dist.f[dPM0])[kse] = getInterpolatedDistributionForVeloBC(q, f_NW, f_SE, feq, omega, velocityBC, c1o54); + } + + q = (subgridD.q[dP0P])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = VeloX + VeloZ; + (dist.f[dM0M])[kbw] = getInterpolatedDistributionForVeloBC(q, f_TE, f_BW, feq, omega, velocityBC, c1o54); + } + + q = (subgridD.q[dM0M])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = -VeloX - VeloZ; + (dist.f[dP0P])[kte] = getInterpolatedDistributionForVeloBC(q, f_BW, f_TE, feq, omega, velocityBC, c1o54); + } + + q = (subgridD.q[dP0M])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = VeloX - VeloZ; + (dist.f[dM0P])[ktw] = getInterpolatedDistributionForVeloBC(q, f_BE, f_TW, feq, omega, velocityBC, c1o54); + } + + q = (subgridD.q[dM0P])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = -VeloX + VeloZ; + (dist.f[dP0M])[kbe] = getInterpolatedDistributionForVeloBC(q, f_TW, f_BE, feq, omega, velocityBC, c1o54); + } + + q = (subgridD.q[d0PP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = VeloY + VeloZ; + (dist.f[d0MM])[kbs] = getInterpolatedDistributionForVeloBC(q, f_TN, f_BS, feq, omega, velocityBC, c1o54); + } + + q = (subgridD.q[d0MM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = -VeloY - VeloZ; + (dist.f[d0PP])[ktn] = getInterpolatedDistributionForVeloBC(q, f_BS, f_TN, feq, omega, velocityBC, c1o54); + } + + q = (subgridD.q[d0PM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = VeloY - VeloZ; + (dist.f[d0MP])[kts] = getInterpolatedDistributionForVeloBC(q, f_BN, f_TS, feq, omega, velocityBC, c1o54); + } + + q = (subgridD.q[d0MP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o54); + velocityBC = -VeloY + VeloZ; + (dist.f[d0PM])[kbn] = getInterpolatedDistributionForVeloBC(q, f_TS, f_BN, feq, omega, velocityBC, c1o54); + } + + q = (subgridD.q[dPPP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 + vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + velocityBC = VeloX + VeloY + VeloZ; + (dist.f[dMMM])[kbsw] = getInterpolatedDistributionForVeloBC(q, f_TNE, f_BSW, feq, omega, velocityBC, c1o216); + } + + q = (subgridD.q[dMMM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 - vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + velocityBC = -VeloX - VeloY - VeloZ; + (dist.f[dPPP])[ktne] = getInterpolatedDistributionForVeloBC(q, f_BSW, f_TNE, feq, omega, velocityBC, c1o216); + } + + q = (subgridD.q[dPPM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 + vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + velocityBC = VeloX + VeloY - VeloZ; + (dist.f[dMMP])[ktsw] = getInterpolatedDistributionForVeloBC(q, f_BNE, f_TSW, feq, omega, velocityBC, c1o216); + } + + q = (subgridD.q[dMMP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 - vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + velocityBC = -VeloX - VeloY + VeloZ; + (dist.f[dPPM])[kbne] = getInterpolatedDistributionForVeloBC(q, f_TSW, f_BNE, feq, omega, velocityBC, c1o216); + } + + q = (subgridD.q[dPMP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 - vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + velocityBC = VeloX - VeloY + VeloZ; + (dist.f[dMPM])[kbnw] = getInterpolatedDistributionForVeloBC(q, f_TSE, f_BNW, feq, omega, velocityBC, c1o216); + } + + q = (subgridD.q[dMPM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 + vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + velocityBC = -VeloX + VeloY - VeloZ; + (dist.f[dPMP])[ktse] = getInterpolatedDistributionForVeloBC(q, f_BNW, f_TSE, feq, omega, velocityBC, c1o216); + } + + q = (subgridD.q[dPMM])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = vx1 - vx2 - vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + velocityBC = VeloX - VeloY - VeloZ; + (dist.f[dMPP])[ktnw] = getInterpolatedDistributionForVeloBC(q, f_BSE, f_TNW, feq, omega, velocityBC, c1o216); + } + + q = (subgridD.q[dMPP])[nodeIndex]; + if (q>=c0o1 && q<=c1o1) + { + velocityLB = -vx1 + vx2 + vx3; + feq = getEquilibriumForBC(drho, velocityLB, cu_sq, c1o216); + velocityBC = -VeloX + VeloY + VeloZ; + (dist.f[dPMM])[kbse] = getInterpolatedDistributionForVeloBC(q, f_TNW, f_BSE, feq, omega, velocityBC, c1o216); + } + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +////////////////////////////////////////////////////////////////////////////// +__global__ void QVelDevice27( + int inx, + int iny, + real* vx, + real* vy, + real* vz, + real* DD, + 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]; + } + //////////////////////////////////////////////////////////////////////////////// + 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 VeloX = vx[k]; + real VeloY = vy[k]; + real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny) + //////////////////////////////////////////////////////////////////////////////// + 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]; + //unsigned int nxny = nx*ny; + //unsigned int kzero= KQK; + //unsigned int ke = KQK; + //unsigned int kw = KQK + 1; + //unsigned int kn = KQK; + //unsigned int ks = KQK + nx; + //unsigned int kt = KQK; + //unsigned int kb = KQK + nxny; + //unsigned int ksw = KQK + nx + 1; + //unsigned int kne = KQK; + //unsigned int kse = KQK + nx; + //unsigned int knw = KQK + 1; + //unsigned int kbw = KQK + nxny + 1; + //unsigned int kte = KQK; + //unsigned int kbe = KQK + nxny; + //unsigned int ktw = KQK + 1; + //unsigned int kbs = KQK + nxny + nx; + //unsigned int ktn = KQK; + //unsigned int kbn = KQK + nxny; + //unsigned int kts = KQK + nx; + //unsigned int ktse = KQK + nx; + //unsigned int kbnw = KQK + nxny + 1; + //unsigned int ktnw = KQK + 1; + //unsigned int kbse = KQK + nxny + nx; + //unsigned int ktsw = KQK + nx + 1; + //unsigned int kbne = KQK + nxny; + //unsigned int ktne = KQK; + //unsigned int kbsw = KQK + nxny + nx + 1; + //////////////////////////////////////////////////////////////////////////////// + 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, 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 + ((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 cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); + + ////////////////////////////////////////////////////////////////////////// + if (isEvenTimestep==false) + { + 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]; + } + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //Test + //(D.f[d000])[k]=c1o10; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + //ToDo anders Klammern + + q = q_dirE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( vx1 )*/+c9o2*( vx1 )*( vx1 )-cu_sq); + (D.f[dM00])[kw]=(c1o1-q)/(c1o1+q)*(f_E-f_W+(f_E+f_W-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_E+f_W)-c6o1*c2o27*( VeloX ))/(c1o1+q); + //(D.f[dM00])[kw]=zero; + } + + q = q_dirW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*(-vx1 )*/+c9o2*(-vx1 )*(-vx1 )-cu_sq); + (D.f[dP00])[ke]=(c1o1-q)/(c1o1+q)*(f_W-f_E+(f_W+f_E-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_W+f_E)-c6o1*c2o27*(-VeloX ))/(c1o1+q); + //(D.f[dP00])[ke]=zero; + } + + q = q_dirN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( vx2 )*/+c9o2*( vx2 )*( vx2 )-cu_sq); + (D.f[d0M0])[ks]=(c1o1-q)/(c1o1+q)*(f_N-f_S+(f_N+f_S-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_N+f_S)-c6o1*c2o27*( VeloY ))/(c1o1+q); + //(D.f[d0M0])[ks]=zero; + } + + q = q_dirS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( -vx2 )*/+c9o2*( -vx2 )*( -vx2 )-cu_sq); + (D.f[d0P0])[kn]=(c1o1-q)/(c1o1+q)*(f_S-f_N+(f_S+f_N-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_S+f_N)-c6o1*c2o27*(-VeloY ))/(c1o1+q); + //(D.f[d0P0])[kn]=zero; + } + + q = q_dirT[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( vx3)*/+c9o2*( vx3)*( vx3)-cu_sq); + (D.f[d00M])[kb]=(c1o1-q)/(c1o1+q)*(f_T-f_B+(f_T+f_B-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_T+f_B)-c6o1*c2o27*( VeloZ ))/(c1o1+q); + //(D.f[d00M])[kb]=one; + } + + q = q_dirB[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c2o27* (drho/*+three*( -vx3)*/+c9o2*( -vx3)*( -vx3)-cu_sq); + (D.f[d00P])[kt]=(c1o1-q)/(c1o1+q)*(f_B-f_T+(f_B+f_T-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_B+f_T)-c6o1*c2o27*(-VeloZ ))/(c1o1+q); + //(D.f[d00P])[kt]=zero; + } + + q = q_dirNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1+vx2 )*/+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); + (D.f[dMM0])[ksw]=(c1o1-q)/(c1o1+q)*(f_NE-f_SW+(f_NE+f_SW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NE+f_SW)-c6o1*c1o54*(VeloX+VeloY))/(c1o1+q); + //(D.f[dMM0])[ksw]=zero; + } + + q = q_dirSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1-vx2 )*/+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); + (D.f[dPP0])[kne]=(c1o1-q)/(c1o1+q)*(f_SW-f_NE+(f_SW+f_NE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SW+f_NE)-c6o1*c1o54*(-VeloX-VeloY))/(c1o1+q); + //(D.f[dPP0])[kne]=zero; + } + + q = q_dirSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1-vx2 )*/+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); + (D.f[dMP0])[knw]=(c1o1-q)/(c1o1+q)*(f_SE-f_NW+(f_SE+f_NW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_SE+f_NW)-c6o1*c1o54*( VeloX-VeloY))/(c1o1+q); + //(D.f[dMP0])[knw]=zero; + } + + q = q_dirNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1+vx2 )*/+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); + (D.f[dPM0])[kse]=(c1o1-q)/(c1o1+q)*(f_NW-f_SE+(f_NW+f_SE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_NW+f_SE)-c6o1*c1o54*(-VeloX+VeloY))/(c1o1+q); + //(D.f[dPM0])[kse]=zero; + } + + q = q_dirTE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1 +vx3)*/+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); + (D.f[dM0M])[kbw]=(c1o1-q)/(c1o1+q)*(f_TE-f_BW+(f_TE+f_BW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TE+f_BW)-c6o1*c1o54*( VeloX+VeloZ))/(c1o1+q); + //(D.f[dM0M])[kbw]=zero; + } + + q = q_dirBW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1 -vx3)*/+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); + (D.f[dP0P])[kte]=(c1o1-q)/(c1o1+q)*(f_BW-f_TE+(f_BW+f_TE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BW+f_TE)-c6o1*c1o54*(-VeloX-VeloZ))/(c1o1+q); + //(D.f[dP0P])[kte]=zero; + } + + q = q_dirBE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx1 -vx3)*/+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); + (D.f[dM0P])[ktw]=(c1o1-q)/(c1o1+q)*(f_BE-f_TW+(f_BE+f_TW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BE+f_TW)-c6o1*c1o54*( VeloX-VeloZ))/(c1o1+q); + //(D.f[dM0P])[ktw]=zero; + } + + q = q_dirTW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*(-vx1 +vx3)*/+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); + (D.f[dP0M])[kbe]=(c1o1-q)/(c1o1+q)*(f_TW-f_BE+(f_TW+f_BE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TW+f_BE)-c6o1*c1o54*(-VeloX+VeloZ))/(c1o1+q); + //(D.f[dP0M])[kbe]=zero; + } + + q = q_dirTN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx2+vx3)*/+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); + (D.f[d0MM])[kbs]=(c1o1-q)/(c1o1+q)*(f_TN-f_BS+(f_TN+f_BS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TN+f_BS)-c6o1*c1o54*( VeloY+VeloZ))/(c1o1+q); + //(D.f[d0MM])[kbs]=zero; + } + + q = q_dirBS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( -vx2-vx3)*/+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); + (D.f[d0PP])[ktn]=(c1o1-q)/(c1o1+q)*(f_BS-f_TN+(f_BS+f_TN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BS+f_TN)-c6o1*c1o54*( -VeloY-VeloZ))/(c1o1+q); + //(D.f[d0PP])[ktn]=zero; + } + + q = q_dirBN[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( vx2-vx3)*/+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); + (D.f[d0MP])[kts]=(c1o1-q)/(c1o1+q)*(f_BN-f_TS+(f_BN+f_TS-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BN+f_TS)-c6o1*c1o54*( VeloY-VeloZ))/(c1o1+q); + //(D.f[d0MP])[kts]=zero; + } + + q = q_dirTS[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o54* (drho/*+three*( -vx2+vx3)*/+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); + (D.f[d0PM])[kbn]=(c1o1-q)/(c1o1+q)*(f_TS-f_BN+(f_TS+f_BN-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TS+f_BN)-c6o1*c1o54*( -VeloY+VeloZ))/(c1o1+q); + //(D.f[d0PM])[kbn]=zero; + } + + q = q_dirTNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1+vx2+vx3)*/+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); + (D.f[dMMM])[kbsw]=(c1o1-q)/(c1o1+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNE+f_BSW)-c6o1*c1o216*( VeloX+VeloY+VeloZ))/(c1o1+q); + //(D.f[dMMM])[kbsw]=zero; + } + + q = q_dirBSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1-vx2-vx3)*/+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); + (D.f[dPPP])[ktne]=(c1o1-q)/(c1o1+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSW+f_TNE)-c6o1*c1o216*(-VeloX-VeloY-VeloZ))/(c1o1+q); + //(D.f[dPPP])[ktne]=zero; + } + + q = q_dirBNE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1+vx2-vx3)*/+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); + (D.f[dMMP])[ktsw]=(c1o1-q)/(c1o1+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNE+f_TSW)-c6o1*c1o216*( VeloX+VeloY-VeloZ))/(c1o1+q); + //(D.f[dMMP])[ktsw]=zero; + } + + q = q_dirTSW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1-vx2+vx3)*/+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); + (D.f[dPPM])[kbne]=(c1o1-q)/(c1o1+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSW+f_BNE)-c6o1*c1o216*(-VeloX-VeloY+VeloZ))/(c1o1+q); + //(D.f[dPPM])[kbne]=zero; + } + + q = q_dirTSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1-vx2+vx3)*/+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); + (D.f[dMPM])[kbnw]=(c1o1-q)/(c1o1+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TSE+f_BNW)-c6o1*c1o216*( VeloX-VeloY+VeloZ))/(c1o1+q); + //(D.f[dMPM])[kbnw]=zero; + } + + q = q_dirBNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1+vx2-vx3)*/+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); + (D.f[dPMP])[ktse]=(c1o1-q)/(c1o1+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BNW+f_TSE)-c6o1*c1o216*(-VeloX+VeloY-VeloZ))/(c1o1+q); + //(D.f[dPMP])[ktse]=zero; + } + + q = q_dirBSE[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*( vx1-vx2-vx3)*/+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); + (D.f[dMPP])[ktnw]=(c1o1-q)/(c1o1+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_BSE+f_TNW)-c6o1*c1o216*( VeloX-VeloY-VeloZ))/(c1o1+q); + //(D.f[dMPP])[ktnw]=zero; + } + + q = q_dirTNW[k]; + if (q>=c0o1 && q<=c1o1) + { + feq=c1o216*(drho/*+three*(-vx1+vx2+vx3)*/+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); + (D.f[dPMM])[kbse]=(c1o1-q)/(c1o1+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-c2o1*feq*om1)/(c1o1-om1))*c1o2+(q*(f_TNW+f_BSE)-c6o1*c1o216*(-VeloX+VeloY+VeloZ))/(c1o1+q); + //(D.f[dPMM])[kbse]=zero; + } + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +//////////////////////////////////////////////////////////////////////////////// +__global__ void PropellerBC( + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + real* rho, + real* ux, + real* uy, + real* uz, + int* k_Q, + unsigned int size_Prop, + unsigned long long numberOfLBnodes, + unsigned int* bcMatD, + real* DD, + bool EvenOrOdd) +{ + //////////////////////////////////////////////////////////////////////////////// + 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<size_Prop) + { + //////////////////////////////////////////////////////////////////////////////// + Distributions27 D; + if (EvenOrOdd==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[dMMM] = &DD[dPPP * numberOfLBnodes]; + D.f[dPPM] = &DD[dMMP * numberOfLBnodes]; + D.f[dMPM] = &DD[dPMP * numberOfLBnodes]; + D.f[dPMM] = &DD[dMPP * numberOfLBnodes]; + D.f[dMMP] = &DD[dPPM * numberOfLBnodes]; + D.f[dPPP] = &DD[dMMM * numberOfLBnodes]; + D.f[dMPP] = &DD[dPMM * numberOfLBnodes]; + D.f[dPMP] = &DD[dMPM * numberOfLBnodes]; + } + ////////////////////////////////////////////////////////////////////////// + unsigned int KQK = k_Q[k]; + unsigned int BC = bcMatD[KQK]; + if( (BC != GEO_SOLID) && (BC != GEO_VOID)) + { + ////////////////////////////////////////////////////////////////////////// + real vx1 = ux[k]; + real vx2 = uy[k]; + real vx3 = uz[k]; + //real vx1 = -c1o100; + //real vx2 = zero; + //real vx3 = zero; + ////////////////////////////////////////////////////////////////////////// + //index + ////////////////////////////////////////////////////////////////////////// + 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_ZERO; + + f_ZERO= (D.f[d000])[kzero]; + f_E = (D.f[dP00])[ke ]; + f_W = (D.f[dM00])[kw ]; + f_N = (D.f[d0P0])[kn ]; + f_S = (D.f[d0M0])[ks ]; + f_T = (D.f[d00P])[kt ]; + f_B = (D.f[d00M])[kb ]; + f_NE = (D.f[dPP0])[kne ]; + f_SW = (D.f[dMM0])[ksw ]; + f_SE = (D.f[dPM0])[kse ]; + f_NW = (D.f[dMP0])[knw ]; + f_TE = (D.f[dP0P])[kte ]; + f_BW = (D.f[dM0M])[kbw ]; + f_BE = (D.f[dP0M])[kbe ]; + f_TW = (D.f[dM0P])[ktw ]; + f_TN = (D.f[d0PP])[ktn ]; + f_BS = (D.f[d0MM])[kbs ]; + f_BN = (D.f[d0PM])[kbn ]; + f_TS = (D.f[d0MP])[kts ]; + f_TNE = (D.f[dPPP])[ktne ]; + f_BSW = (D.f[dMMM])[kbsw ]; + f_BNE = (D.f[dPPM])[kbne ]; + f_TSW = (D.f[dMMP])[ktsw ]; + f_TSE = (D.f[dPMP])[ktse ]; + f_BNW = (D.f[dMPM])[kbnw ]; + f_BSE = (D.f[dPMM])[kbse ]; + f_TNW = (D.f[dMPP])[ktnw ]; + //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_TNE = (D.f[dMMM])[kbsw ]; + //f_TSW = (D.f[dPPM])[kbne ]; + //f_BNE = (D.f[dMMP])[ktsw ]; + //f_BNW = (D.f[dPMP])[ktse ]; + //f_TSE = (D.f[dMPM])[kbnw ]; + //f_TNW = (D.f[dPMM])[kbse ]; + //f_BSE = (D.f[dMPP])[ktnw ]; + ////////////////////////////////////////////////////////////////////////////////// + real vxo1, vxo2, vxo3, drho; + drho = /*zero;*/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; + + vxo1 = (((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); + + + vxo2 = ((-(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); + + vxo3 = (((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 cusq=c3o2*(vxo1*vxo1+vxo2*vxo2+vxo3*vxo3); + //vx1 = vx1 * two - vxo1; + //vx2 = vx2 * two - vxo2; + //vx3 = vx3 * two - vxo3; + real cusq2=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); + + //f_ZERO = ((one+drho) * ( c8over27 *(one+(-cusq2)))) - c8over27; + //f_E = ((one+drho) * ( c2over27 *(one+three*( vx1 )+c9over2*( vx1 )*( vx1 )-cusq2))) - c2over27 ; + //f_W = ((one+drho) * ( c2over27 *(one+three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cusq2))) - c2over27 ; + //f_N = ((one+drho) * ( c2over27 *(one+three*( vx2 )+c9over2*( vx2 )*( vx2 )-cusq2))) - c2over27 ; + //f_S = ((one+drho) * ( c2over27 *(one+three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cusq2))) - c2over27 ; + //f_T = ((one+drho) * ( c2over27 *(one+three*( vx3)+c9over2*( vx3)*( vx3)-cusq2))) - c2over27 ; + //f_B = ((one+drho) * ( c2over27 *(one+three*( -vx3)+c9over2*( -vx3)*( -vx3)-cusq2))) - c2over27 ; + //f_NE = ((one+drho) * ( c1over54 *(one+three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cusq2))) - c1over54 ; + //f_SW = ((one+drho) * ( c1over54 *(one+three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cusq2))) - c1over54 ; + //f_SE = ((one+drho) * ( c1over54 *(one+three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cusq2))) - c1over54 ; + //f_NW = ((one+drho) * ( c1over54 *(one+three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cusq2))) - c1over54 ; + //f_TE = ((one+drho) * ( c1over54 *(one+three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cusq2))) - c1over54 ; + //f_BW = ((one+drho) * ( c1over54 *(one+three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cusq2))) - c1over54 ; + //f_BE = ((one+drho) * ( c1over54 *(one+three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cusq2))) - c1over54 ; + //f_TW = ((one+drho) * ( c1over54 *(one+three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cusq2))) - c1over54 ; + //f_TN = ((one+drho) * ( c1over54 *(one+three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cusq2))) - c1over54 ; + //f_BS = ((one+drho) * ( c1over54 *(one+three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cusq2))) - c1over54 ; + //f_BN = ((one+drho) * ( c1over54 *(one+three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cusq2))) - c1over54 ; + //f_TS = ((one+drho) * ( c1over54 *(one+three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cusq2))) - c1over54 ; + //f_TNE = ((one+drho) * ( c1over216*(one+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq2))) - c1over216; + //f_BSW = ((one+drho) * ( c1over216*(one+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq2))) - c1over216; + //f_BNE = ((one+drho) * ( c1over216*(one+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq2))) - c1over216; + //f_TSW = ((one+drho) * ( c1over216*(one+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq2))) - c1over216; + //f_TSE = ((one+drho) * ( c1over216*(one+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq2))) - c1over216; + //f_BNW = ((one+drho) * ( c1over216*(one+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq2))) - c1over216; + //f_BSE = ((one+drho) * ( c1over216*(one+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq2))) - c1over216; + //f_TNW = ((one+drho) * ( c1over216*(one+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq2))) - c1over216; + f_ZERO = f_ZERO + ((c1o1+drho) * (- c8o27* (-cusq) + c8o27* (-cusq2))); + f_E = f_E + ((c1o1+drho) * (- c2o27* (c3o1*( vxo1 )+c9o2*( vxo1 )*( vxo1 )-cusq) + c2o27* (c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cusq2))); + f_W = f_W + ((c1o1+drho) * (- c2o27* (c3o1*(-vxo1 )+c9o2*(-vxo1 )*(-vxo1 )-cusq) + c2o27* (c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cusq2))); + f_N = f_N + ((c1o1+drho) * (- c2o27* (c3o1*( vxo2 )+c9o2*( vxo2 )*( vxo2 )-cusq) + c2o27* (c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cusq2))); + f_S = f_S + ((c1o1+drho) * (- c2o27* (c3o1*( -vxo2 )+c9o2*( -vxo2 )*( -vxo2 )-cusq) + c2o27* (c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cusq2))); + f_T = f_T + ((c1o1+drho) * (- c2o27* (c3o1*( vxo3)+c9o2*( vxo3)*( vxo3)-cusq) + c2o27* (c3o1*( vx3)+c9o2*( vx3)*( vx3)-cusq2))); + f_B = f_B + ((c1o1+drho) * (- c2o27* (c3o1*( -vxo3)+c9o2*( -vxo3)*( -vxo3)-cusq) + c2o27* (c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cusq2))); + f_NE = f_NE + ((c1o1+drho) * (- c1o54* (c3o1*( vxo1+vxo2 )+c9o2*( vxo1+vxo2 )*( vxo1+vxo2 )-cusq) + c1o54* (c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cusq2))); + f_SW = f_SW + ((c1o1+drho) * (- c1o54* (c3o1*(-vxo1-vxo2 )+c9o2*(-vxo1-vxo2 )*(-vxo1-vxo2 )-cusq) + c1o54* (c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cusq2))); + f_SE = f_SE + ((c1o1+drho) * (- c1o54* (c3o1*( vxo1-vxo2 )+c9o2*( vxo1-vxo2 )*( vxo1-vxo2 )-cusq) + c1o54* (c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cusq2))); + f_NW = f_NW + ((c1o1+drho) * (- c1o54* (c3o1*(-vxo1+vxo2 )+c9o2*(-vxo1+vxo2 )*(-vxo1+vxo2 )-cusq) + c1o54* (c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cusq2))); + f_TE = f_TE + ((c1o1+drho) * (- c1o54* (c3o1*( vxo1 +vxo3)+c9o2*( vxo1 +vxo3)*( vxo1 +vxo3)-cusq) + c1o54* (c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cusq2))); + f_BW = f_BW + ((c1o1+drho) * (- c1o54* (c3o1*(-vxo1 -vxo3)+c9o2*(-vxo1 -vxo3)*(-vxo1 -vxo3)-cusq) + c1o54* (c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cusq2))); + f_BE = f_BE + ((c1o1+drho) * (- c1o54* (c3o1*( vxo1 -vxo3)+c9o2*( vxo1 -vxo3)*( vxo1 -vxo3)-cusq) + c1o54* (c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cusq2))); + f_TW = f_TW + ((c1o1+drho) * (- c1o54* (c3o1*(-vxo1 +vxo3)+c9o2*(-vxo1 +vxo3)*(-vxo1 +vxo3)-cusq) + c1o54* (c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cusq2))); + f_TN = f_TN + ((c1o1+drho) * (- c1o54* (c3o1*( vxo2+vxo3)+c9o2*( vxo2+vxo3)*( vxo2+vxo3)-cusq) + c1o54* (c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cusq2))); + f_BS = f_BS + ((c1o1+drho) * (- c1o54* (c3o1*( -vxo2-vxo3)+c9o2*( -vxo2-vxo3)*( -vxo2-vxo3)-cusq) + c1o54* (c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cusq2))); + f_BN = f_BN + ((c1o1+drho) * (- c1o54* (c3o1*( vxo2-vxo3)+c9o2*( vxo2-vxo3)*( vxo2-vxo3)-cusq) + c1o54* (c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cusq2))); + f_TS = f_TS + ((c1o1+drho) * (- c1o54* (c3o1*( -vxo2+vxo3)+c9o2*( -vxo2+vxo3)*( -vxo2+vxo3)-cusq) + c1o54* (c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cusq2))); + f_TNE = f_TNE + ((c1o1+drho) * (- c1o216*(c3o1*( vxo1+vxo2+vxo3)+c9o2*( vxo1+vxo2+vxo3)*( vxo1+vxo2+vxo3)-cusq) + c1o216*(c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cusq2))); + f_BSW = f_BSW + ((c1o1+drho) * (- c1o216*(c3o1*(-vxo1-vxo2-vxo3)+c9o2*(-vxo1-vxo2-vxo3)*(-vxo1-vxo2-vxo3)-cusq) + c1o216*(c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cusq2))); + f_BNE = f_BNE + ((c1o1+drho) * (- c1o216*(c3o1*( vxo1+vxo2-vxo3)+c9o2*( vxo1+vxo2-vxo3)*( vxo1+vxo2-vxo3)-cusq) + c1o216*(c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cusq2))); + f_TSW = f_TSW + ((c1o1+drho) * (- c1o216*(c3o1*(-vxo1-vxo2+vxo3)+c9o2*(-vxo1-vxo2+vxo3)*(-vxo1-vxo2+vxo3)-cusq) + c1o216*(c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cusq2))); + f_TSE = f_TSE + ((c1o1+drho) * (- c1o216*(c3o1*( vxo1-vxo2+vxo3)+c9o2*( vxo1-vxo2+vxo3)*( vxo1-vxo2+vxo3)-cusq) + c1o216*(c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cusq2))); + f_BNW = f_BNW + ((c1o1+drho) * (- c1o216*(c3o1*(-vxo1+vxo2-vxo3)+c9o2*(-vxo1+vxo2-vxo3)*(-vxo1+vxo2-vxo3)-cusq) + c1o216*(c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cusq2))); + f_BSE = f_BSE + ((c1o1+drho) * (- c1o216*(c3o1*( vxo1-vxo2-vxo3)+c9o2*( vxo1-vxo2-vxo3)*( vxo1-vxo2-vxo3)-cusq) + c1o216*(c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cusq2))); + f_TNW = f_TNW + ((c1o1+drho) * (- c1o216*(c3o1*(-vxo1+vxo2+vxo3)+c9o2*(-vxo1+vxo2+vxo3)*(-vxo1+vxo2+vxo3)-cusq) + c1o216*(c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cusq2))); + + (D.f[d000])[kzero] = f_ZERO; + (D.f[dP00])[ke ] = f_E ; // f_W ;// + (D.f[dM00])[kw ] = f_W ; // f_E ;// + (D.f[d0P0])[kn ] = f_N ; // f_S ;// + (D.f[d0M0])[ks ] = f_S ; // f_N ;// + (D.f[d00P])[kt ] = f_T ; // f_B ;// + (D.f[d00M])[kb ] = f_B ; // f_T ;// + (D.f[dPP0])[kne ] = f_NE ; // f_SW ;// + (D.f[dMM0])[ksw ] = f_SW ; // f_NE ;// + (D.f[dPM0])[kse ] = f_SE ; // f_NW ;// + (D.f[dMP0])[knw ] = f_NW ; // f_SE ;// + (D.f[dP0P])[kte ] = f_TE ; // f_BW ;// + (D.f[dM0M])[kbw ] = f_BW ; // f_TE ;// + (D.f[dP0M])[kbe ] = f_BE ; // f_TW ;// + (D.f[dM0P])[ktw ] = f_TW ; // f_BE ;// + (D.f[d0PP])[ktn ] = f_TN ; // f_BS ;// + (D.f[d0MM])[kbs ] = f_BS ; // f_TN ;// + (D.f[d0PM])[kbn ] = f_BN ; // f_TS ;// + (D.f[d0MP])[kts ] = f_TS ; // f_BN ;// + (D.f[dPPP])[ktne ] = f_TNE ; // f_BSW ;// + (D.f[dMMM])[kbsw ] = f_BSW ; // f_BNE ;// + (D.f[dPPM])[kbne ] = f_BNE ; // f_BNW ;// + (D.f[dMMP])[ktsw ] = f_TSW ; // f_BSE ;// + (D.f[dPMP])[ktse ] = f_TSE ; // f_TSW ;// + (D.f[dMPM])[kbnw ] = f_BNW ; // f_TNE ;// + (D.f[dPMM])[kbse ] = f_BSE ; // f_TNW ;// + (D.f[dMPP])[ktnw ] = f_TNW ; // f_TSE ;// + + ////////////////////////////////////////////////////////////////////////// + ////(D.f[d000])[kzero] = c8over27* (drho-cu_sq); + //(D.f[dP00])[ke ] = three*c2over27* ( vx1 ); //six + //(D.f[dM00])[kw ] = three*c2over27* (-vx1 ); //six + //(D.f[d0P0])[kn ] = three*c2over27* ( vx2 ); //six + //(D.f[d0M0])[ks ] = three*c2over27* ( -vx2 ); //six + //(D.f[d00P])[kt ] = three*c2over27* ( vx3); //six + //(D.f[d00M])[kb ] = three*c2over27* ( -vx3); //six + //(D.f[dPP0])[kne ] = three*c1over54* ( vx1+vx2 ); //six + //(D.f[dMM0])[ksw ] = three*c1over54* (-vx1-vx2 ); //six + //(D.f[dPM0])[kse ] = three*c1over54* ( vx1-vx2 ); //six + //(D.f[dMP0])[knw ] = three*c1over54* (-vx1+vx2 ); //six + //(D.f[dP0P])[kte ] = three*c1over54* ( vx1 +vx3); //six + //(D.f[dM0M])[kbw ] = three*c1over54* (-vx1 -vx3); //six + //(D.f[dP0M])[kbe ] = three*c1over54* ( vx1 -vx3); //six + //(D.f[dM0P])[ktw ] = three*c1over54* (-vx1 +vx3); //six + //(D.f[d0PP])[ktn ] = three*c1over54* ( vx2+vx3); //six + //(D.f[d0MM])[kbs ] = three*c1over54* ( -vx2-vx3); //six + //(D.f[d0PM])[kbn ] = three*c1over54* ( vx2-vx3); //six + //(D.f[d0MP])[kts ] = three*c1over54* ( -vx2+vx3); //six + //(D.f[dPPP])[ktne ] = three*c1over216*( vx1+vx2+vx3); //six + //(D.f[dMMM])[kbsw ] = three*c1over216*(-vx1-vx2-vx3); //six + //(D.f[dPPM])[kbne ] = three*c1over216*( vx1+vx2-vx3); //six + //(D.f[dMMP])[ktsw ] = three*c1over216*(-vx1-vx2+vx3); //six + //(D.f[dPMP])[ktse ] = three*c1over216*( vx1-vx2+vx3); //six + //(D.f[dMPM])[kbnw ] = three*c1over216*(-vx1+vx2-vx3); //six + //(D.f[dPMM])[kbse ] = three*c1over216*( vx1-vx2-vx3); //six + //(D.f[dMPP])[ktnw ] = three*c1over216*(-vx1+vx2+vx3); //six + //(D.f[d000])[kzero] = c8over27* (drho-cu_sq); + //(D.f[dP00])[ke ] = c2over27* (drho+three*( vx1 )+c9over2*( vx1 )*( vx1 )-cu_sq); + //(D.f[dM00])[kw ] = c2over27* (drho+three*(-vx1 )+c9over2*(-vx1 )*(-vx1 )-cu_sq); + //(D.f[d0P0])[kn ] = c2over27* (drho+three*( vx2 )+c9over2*( vx2 )*( vx2 )-cu_sq); + //(D.f[d0M0])[ks ] = c2over27* (drho+three*( -vx2 )+c9over2*( -vx2 )*( -vx2 )-cu_sq); + //(D.f[d00P])[kt ] = c2over27* (drho+three*( vx3)+c9over2*( vx3)*( vx3)-cu_sq); + //(D.f[d00M])[kb ] = c2over27* (drho+three*( -vx3)+c9over2*( -vx3)*( -vx3)-cu_sq); + //(D.f[dPP0])[kne ] = c1over54* (drho+three*( vx1+vx2 )+c9over2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); + //(D.f[dMM0])[ksw ] = c1over54* (drho+three*(-vx1-vx2 )+c9over2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); + //(D.f[dPM0])[kse ] = c1over54* (drho+three*( vx1-vx2 )+c9over2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); + //(D.f[dMP0])[knw ] = c1over54* (drho+three*(-vx1+vx2 )+c9over2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); + //(D.f[dP0P])[kte ] = c1over54* (drho+three*( vx1 +vx3)+c9over2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); + //(D.f[dM0M])[kbw ] = c1over54* (drho+three*(-vx1 -vx3)+c9over2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); + //(D.f[dP0M])[kbe ] = c1over54* (drho+three*( vx1 -vx3)+c9over2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); + //(D.f[dM0P])[ktw ] = c1over54* (drho+three*(-vx1 +vx3)+c9over2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); + //(D.f[d0PP])[ktn ] = c1over54* (drho+three*( vx2+vx3)+c9over2*( vx2+vx3)*( vx2+vx3)-cu_sq); + //(D.f[d0MM])[kbs ] = c1over54* (drho+three*( -vx2-vx3)+c9over2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); + //(D.f[d0PM])[kbn ] = c1over54* (drho+three*( vx2-vx3)+c9over2*( vx2-vx3)*( vx2-vx3)-cu_sq); + //(D.f[d0MP])[kts ] = c1over54* (drho+three*( -vx2+vx3)+c9over2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); + //(D.f[dPPP])[ktne ] = c1over216*(drho+three*( vx1+vx2+vx3)+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); + //(D.f[dMMM])[kbsw ] = c1over216*(drho+three*(-vx1-vx2-vx3)+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); + //(D.f[dPPM])[kbne ] = c1over216*(drho+three*( vx1+vx2-vx3)+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); + //(D.f[dMMP])[ktsw ] = c1over216*(drho+three*(-vx1-vx2+vx3)+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); + //(D.f[dPMP])[ktse ] = c1over216*(drho+three*( vx1-vx2+vx3)+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); + //(D.f[dMPM])[kbnw ] = c1over216*(drho+three*(-vx1+vx2-vx3)+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); + //(D.f[dPMM])[kbse ] = c1over216*(drho+three*( vx1-vx2-vx3)+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); + //(D.f[dMPP])[ktnw ] = c1over216*(drho+three*(-vx1+vx2+vx3)+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); + } + } +} +////////////////////////////////////////////////////////////////////////// + + diff --git a/src/gpu/core/GPU/WallFunction.cu b/src/gpu/core/GPU/WallFunction.cu new file mode 100644 index 0000000000000000000000000000000000000000..2777a11fd8044e746885586aec3e33fa242642b4 --- /dev/null +++ b/src/gpu/core/GPU/WallFunction.cu @@ -0,0 +1,520 @@ +/* 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 WallFunction27( + real* vx, + real* vy, + real* vz, + real* DD, + 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]; + } + //////////////////////////////////////////////////////////////////////////////// + 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 VeloX = vx[k]; + //real VeloY = vy[k]; + //real VeloZ = vz[k]; //(16.0*(u0*2.0)*bbx*bby*(grid_nx-bbx)*(grid_ny-bby))/(grid_nx*grid_nx*grid_ny*grid_ny) + //////////////////////////////////////////////////////////////////////////////// + //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 vx2, vx3, feq, q; + real vx1, 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)) / (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) * (one + drho); + + real nu = c1o3 * (c1o1 / om1 - c1o2); + real qw = c1o1; + real uTau = sqrt(nu * (vx1 - VeloX) / qw); + + if (abs(uTau)/nu>11){ + uTau = vx1 * 0.41 / (log10(9.8 * uTau * qw / nu)); + + + + vx[k] = vx1 - uTau * uTau * qw / nu; + vx[k] = (vx[k]> 0.05) ? 0.05 : ((vx[k]< -0.05) ? -0.05 : vx[k] ); + } + else{ vx[k]=c0o1; } + //vy[k] = 0.01; //Test...muss wieder raus + //vz[k] = 0.01; //Test...muss wieder raus + + // ////////////////////////////////////////////////////////////////////////// + // if (isEvenTimestep==false) + // { + // 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]; + // } + // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // //Test + // //(D.f[d000])[k]=c1o10; + // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + ////ToDo anders Klammern + + // q = q_dirE[k]; + // if (q>=zero && q<=one) + // { + // feq=c2over27* (drho/*+three*( vx1 )*/+c9over2*( vx1 )*( vx1 ) * (one + drho)-cu_sq); + // (D.f[dM00])[kw]=(one-q)/(one+q)*(f_E-f_W+(f_E+f_W-two*feq*om1)/(one-om1))*c1o2+(q*(f_E+f_W)-six*c2over27*( VeloX ))/(one+q);// - c2over27 * drho; + // //(D.f[dM00])[kw]=zero; + // } + + // q = q_dirW[k]; + // if (q>=zero && q<=one) + // { + // feq=c2over27* (drho/*+three*(-vx1 )*/+c9over2*(-vx1 )*(-vx1 ) * (one + drho)-cu_sq); + // (D.f[dP00])[ke]=(one-q)/(one+q)*(f_W-f_E+(f_W+f_E-two*feq*om1)/(one-om1))*c1o2+(q*(f_W+f_E)-six*c2over27*(-VeloX ))/(one+q);// - c2over27 * drho; + // //(D.f[dP00])[ke]=zero; + // } + + // q = q_dirN[k]; + // if (q>=zero && q<=one) + // { + // feq=c2over27* (drho/*+three*( vx2 )*/+c9over2*( vx2 )*( vx2 ) * (one + drho)-cu_sq); + // (D.f[d0M0])[ks]=(one-q)/(one+q)*(f_N-f_S+(f_N+f_S-two*feq*om1)/(one-om1))*c1o2+(q*(f_N+f_S)-six*c2over27*( VeloY ))/(one+q);// - c2over27 * drho; + // //(D.f[d0M0])[ks]=zero; + // } + + // q = q_dirS[k]; + // if (q>=zero && q<=one) + // { + // feq=c2over27* (drho/*+three*( -vx2 )*/+c9over2*( -vx2 )*( -vx2 ) * (one + drho)-cu_sq); + // (D.f[d0P0])[kn]=(one-q)/(one+q)*(f_S-f_N+(f_S+f_N-two*feq*om1)/(one-om1))*c1o2+(q*(f_S+f_N)-six*c2over27*(-VeloY ))/(one+q);// - c2over27 * drho; + // //(D.f[d0P0])[kn]=zero; + // } + + // q = q_dirT[k]; + // if (q>=zero && q<=one) + // { + // feq=c2over27* (drho/*+three*( vx3)*/+c9over2*( vx3)*( vx3) * (one + drho)-cu_sq); + // (D.f[d00M])[kb]=(one-q)/(one+q)*(f_T-f_B+(f_T+f_B-two*feq*om1)/(one-om1))*c1o2+(q*(f_T+f_B)-six*c2over27*( VeloZ ))/(one+q);// - c2over27 * drho; + // //(D.f[d00M])[kb]=one; + // } + + // q = q_dirB[k]; + // if (q>=zero && q<=one) + // { + // feq=c2over27* (drho/*+three*( -vx3)*/+c9over2*( -vx3)*( -vx3) * (one + drho)-cu_sq); + // (D.f[d00P])[kt]=(one-q)/(one+q)*(f_B-f_T+(f_B+f_T-two*feq*om1)/(one-om1))*c1o2+(q*(f_B+f_T)-six*c2over27*(-VeloZ ))/(one+q);// - c2over27 * drho; + // //(D.f[d00P])[kt]=zero; + // } + + // q = q_dirNE[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over54* (drho/*+three*( vx1+vx2 )*/+c9over2*( vx1+vx2 )*( vx1+vx2 ) * (one + drho)-cu_sq); + // (D.f[dMM0])[ksw]=(one-q)/(one+q)*(f_NE-f_SW+(f_NE+f_SW-two*feq*om1)/(one-om1))*c1o2+(q*(f_NE+f_SW)-six*c1over54*(VeloX+VeloY))/(one+q);// - c1over54 * drho; + // //(D.f[dMM0])[ksw]=zero; + // } + + // q = q_dirSW[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over54* (drho/*+three*(-vx1-vx2 )*/+c9over2*(-vx1-vx2 )*(-vx1-vx2 ) * (one + drho)-cu_sq); + // (D.f[dPP0])[kne]=(one-q)/(one+q)*(f_SW-f_NE+(f_SW+f_NE-two*feq*om1)/(one-om1))*c1o2+(q*(f_SW+f_NE)-six*c1over54*(-VeloX-VeloY))/(one+q);// - c1over54 * drho; + // //(D.f[dPP0])[kne]=zero; + // } + + // q = q_dirSE[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over54* (drho/*+three*( vx1-vx2 )*/+c9over2*( vx1-vx2 )*( vx1-vx2 ) * (one + drho)-cu_sq); + // (D.f[dMP0])[knw]=(one-q)/(one+q)*(f_SE-f_NW+(f_SE+f_NW-two*feq*om1)/(one-om1))*c1o2+(q*(f_SE+f_NW)-six*c1over54*( VeloX-VeloY))/(one+q);// - c1over54 * drho; + // //(D.f[dMP0])[knw]=zero; + // } + + // q = q_dirNW[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over54* (drho/*+three*(-vx1+vx2 )*/+c9over2*(-vx1+vx2 )*(-vx1+vx2 ) * (one + drho)-cu_sq); + // (D.f[dPM0])[kse]=(one-q)/(one+q)*(f_NW-f_SE+(f_NW+f_SE-two*feq*om1)/(one-om1))*c1o2+(q*(f_NW+f_SE)-six*c1over54*(-VeloX+VeloY))/(one+q);// - c1over54 * drho; + // //(D.f[dPM0])[kse]=zero; + // } + + // q = q_dirTE[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over54* (drho/*+three*( vx1 +vx3)*/+c9over2*( vx1 +vx3)*( vx1 +vx3) * (one + drho)-cu_sq); + // (D.f[dM0M])[kbw]=(one-q)/(one+q)*(f_TE-f_BW+(f_TE+f_BW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TE+f_BW)-six*c1over54*( VeloX+VeloZ))/(one+q);// - c1over54 * drho; + // //(D.f[dM0M])[kbw]=zero; + // } + + // q = q_dirBW[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over54* (drho/*+three*(-vx1 -vx3)*/+c9over2*(-vx1 -vx3)*(-vx1 -vx3) * (one + drho)-cu_sq); + // (D.f[dP0P])[kte]=(one-q)/(one+q)*(f_BW-f_TE+(f_BW+f_TE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BW+f_TE)-six*c1over54*(-VeloX-VeloZ))/(one+q);// - c1over54 * drho; + // //(D.f[dP0P])[kte]=zero; + // } + + // q = q_dirBE[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over54* (drho/*+three*( vx1 -vx3)*/+c9over2*( vx1 -vx3)*( vx1 -vx3) * (one + drho)-cu_sq); + // (D.f[dM0P])[ktw]=(one-q)/(one+q)*(f_BE-f_TW+(f_BE+f_TW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BE+f_TW)-six*c1over54*( VeloX-VeloZ))/(one+q);// - c1over54 * drho; + // //(D.f[dM0P])[ktw]=zero; + // } + + // q = q_dirTW[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over54* (drho/*+three*(-vx1 +vx3)*/+c9over2*(-vx1 +vx3)*(-vx1 +vx3) * (one + drho)-cu_sq); + // (D.f[dP0M])[kbe]=(one-q)/(one+q)*(f_TW-f_BE+(f_TW+f_BE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TW+f_BE)-six*c1over54*(-VeloX+VeloZ))/(one+q);// - c1over54 * drho; + // //(D.f[dP0M])[kbe]=zero; + // } + + // q = q_dirTN[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over54* (drho/*+three*( vx2+vx3)*/+c9over2*( vx2+vx3)*( vx2+vx3) * (one + drho)-cu_sq); + // (D.f[d0MM])[kbs]=(one-q)/(one+q)*(f_TN-f_BS+(f_TN+f_BS-two*feq*om1)/(one-om1))*c1o2+(q*(f_TN+f_BS)-six*c1over54*( VeloY+VeloZ))/(one+q);// - c1over54 * drho; + // //(D.f[d0MM])[kbs]=zero; + // } + + // q = q_dirBS[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over54* (drho/*+three*( -vx2-vx3)*/+c9over2*( -vx2-vx3)*( -vx2-vx3) * (one + drho)-cu_sq); + // (D.f[d0PP])[ktn]=(one-q)/(one+q)*(f_BS-f_TN+(f_BS+f_TN-two*feq*om1)/(one-om1))*c1o2+(q*(f_BS+f_TN)-six*c1over54*( -VeloY-VeloZ))/(one+q);// - c1over54 * drho; + // //(D.f[d0PP])[ktn]=zero; + // } + + // q = q_dirBN[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over54* (drho/*+three*( vx2-vx3)*/+c9over2*( vx2-vx3)*( vx2-vx3) * (one + drho)-cu_sq); + // (D.f[d0MP])[kts]=(one-q)/(one+q)*(f_BN-f_TS+(f_BN+f_TS-two*feq*om1)/(one-om1))*c1o2+(q*(f_BN+f_TS)-six*c1over54*( VeloY-VeloZ))/(one+q);// - c1over54 * drho; + // //(D.f[d0MP])[kts]=zero; + // } + + // q = q_dirTS[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over54* (drho/*+three*( -vx2+vx3)*/+c9over2*( -vx2+vx3)*( -vx2+vx3) * (one + drho)-cu_sq); + // (D.f[d0PM])[kbn]=(one-q)/(one+q)*(f_TS-f_BN+(f_TS+f_BN-two*feq*om1)/(one-om1))*c1o2+(q*(f_TS+f_BN)-six*c1over54*( -VeloY+VeloZ))/(one+q);// - c1over54 * drho; + // //(D.f[d0PM])[kbn]=zero; + // } + + // q = q_dirTNE[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over216*(drho/*+three*( vx1+vx2+vx3)*/+c9over2*( vx1+vx2+vx3)*( vx1+vx2+vx3) * (one + drho)-cu_sq); + // (D.f[dMMM])[kbsw]=(one-q)/(one+q)*(f_TNE-f_BSW+(f_TNE+f_BSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNE+f_BSW)-six*c1over216*( VeloX+VeloY+VeloZ))/(one+q);// - c1over216 * drho; + // //(D.f[dMMM])[kbsw]=zero; + // } + + // q = q_dirBSW[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over216*(drho/*+three*(-vx1-vx2-vx3)*/+c9over2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3) * (one + drho)-cu_sq); + // (D.f[dPPP])[ktne]=(one-q)/(one+q)*(f_BSW-f_TNE+(f_BSW+f_TNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSW+f_TNE)-six*c1over216*(-VeloX-VeloY-VeloZ))/(one+q);// - c1over216 * drho; + // //(D.f[dPPP])[ktne]=zero; + // } + + // q = q_dirBNE[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over216*(drho/*+three*( vx1+vx2-vx3)*/+c9over2*( vx1+vx2-vx3)*( vx1+vx2-vx3) * (one + drho)-cu_sq); + // (D.f[dMMP])[ktsw]=(one-q)/(one+q)*(f_BNE-f_TSW+(f_BNE+f_TSW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNE+f_TSW)-six*c1over216*( VeloX+VeloY-VeloZ))/(one+q);// - c1over216 * drho; + // //(D.f[dMMP])[ktsw]=zero; + // } + + // q = q_dirTSW[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over216*(drho/*+three*(-vx1-vx2+vx3)*/+c9over2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3) * (one + drho)-cu_sq); + // (D.f[dPPM])[kbne]=(one-q)/(one+q)*(f_TSW-f_BNE+(f_TSW+f_BNE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSW+f_BNE)-six*c1over216*(-VeloX-VeloY+VeloZ))/(one+q);// - c1over216 * drho; + // //(D.f[dPPM])[kbne]=zero; + // } + + // q = q_dirTSE[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over216*(drho/*+three*( vx1-vx2+vx3)*/+c9over2*( vx1-vx2+vx3)*( vx1-vx2+vx3) * (one + drho)-cu_sq); + // (D.f[dMPM])[kbnw]=(one-q)/(one+q)*(f_TSE-f_BNW+(f_TSE+f_BNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_TSE+f_BNW)-six*c1over216*( VeloX-VeloY+VeloZ))/(one+q);// - c1over216 * drho; + // //(D.f[dMPM])[kbnw]=zero; + // } + + // q = q_dirBNW[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over216*(drho/*+three*(-vx1+vx2-vx3)*/+c9over2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3) * (one + drho)-cu_sq); + // (D.f[dPMP])[ktse]=(one-q)/(one+q)*(f_BNW-f_TSE+(f_BNW+f_TSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_BNW+f_TSE)-six*c1over216*(-VeloX+VeloY-VeloZ))/(one+q);// - c1over216 * drho; + // //(D.f[dPMP])[ktse]=zero; + // } + + // q = q_dirBSE[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over216*(drho/*+three*( vx1-vx2-vx3)*/+c9over2*( vx1-vx2-vx3)*( vx1-vx2-vx3) * (one + drho)-cu_sq); + // (D.f[dMPP])[ktnw]=(one-q)/(one+q)*(f_BSE-f_TNW+(f_BSE+f_TNW-two*feq*om1)/(one-om1))*c1o2+(q*(f_BSE+f_TNW)-six*c1over216*( VeloX-VeloY-VeloZ))/(one+q);// - c1over216 * drho; + // //(D.f[dMPP])[ktnw]=zero; + // } + + // q = q_dirTNW[k]; + // if (q>=zero && q<=one) + // { + // feq=c1over216*(drho/*+three*(-vx1+vx2+vx3)*/+c9over2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3) * (one + drho)-cu_sq); + // (D.f[dPMM])[kbse]=(one-q)/(one+q)*(f_TNW-f_BSE+(f_TNW+f_BSE-two*feq*om1)/(one-om1))*c1o2+(q*(f_TNW+f_BSE)-six*c1over216*(-VeloX+VeloY+VeloZ))/(one+q);// - c1over216 * drho; + // //(D.f[dPMM])[kbse]=zero; + // } + } +} +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + + + + + + + diff --git a/src/gpu/VirtualFluids_GPU/Init/InitLattice.cpp b/src/gpu/core/Init/InitLattice.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Init/InitLattice.cpp rename to src/gpu/core/Init/InitLattice.cpp diff --git a/src/gpu/VirtualFluids_GPU/Init/InitLattice.h b/src/gpu/core/Init/InitLattice.h similarity index 98% rename from src/gpu/VirtualFluids_GPU/Init/InitLattice.h rename to src/gpu/core/Init/InitLattice.h index 512543348fae69ea9dfe03ca5300e45a650b7099..8de22f321899ba7f8a08f8809fbd904c2d9ec1ec 100644 --- a/src/gpu/VirtualFluids_GPU/Init/InitLattice.h +++ b/src/gpu/core/Init/InitLattice.h @@ -33,7 +33,7 @@ #ifndef INIT_LATTICE_H #define INIT_LATTICE_H -#include "PointerDefinitions.h" +#include <basics/PointerDefinitions.h> class Parameter; class PreProcessor; diff --git a/src/gpu/VirtualFluids_GPU/Init/PositionReader.cpp b/src/gpu/core/Init/PositionReader.cpp similarity index 80% rename from src/gpu/VirtualFluids_GPU/Init/PositionReader.cpp rename to src/gpu/core/Init/PositionReader.cpp index 6eaa0b17653aaf5257c00e674c87e2844c26cf5d..2863ce419e1e74a94f9e65ea2546a7bb143241b6 100644 --- a/src/gpu/VirtualFluids_GPU/Init/PositionReader.cpp +++ b/src/gpu/core/Init/PositionReader.cpp @@ -140,41 +140,41 @@ void PositionReader::definePropellerQs(Parameter* para) real* QQ = para->getParH(para->getFine())->propellerBC.q27[0]; unsigned int sizeQ = para->getParH(para->getFine())->propellerBC.numberOfBCnodes; QforBoundaryConditions Q; - Q.q27[DIR_P00 ] = &QQ[DIR_P00 *sizeQ]; - Q.q27[DIR_M00 ] = &QQ[DIR_M00 *sizeQ]; - Q.q27[DIR_0P0 ] = &QQ[DIR_0P0 *sizeQ]; - Q.q27[DIR_0M0 ] = &QQ[DIR_0M0 *sizeQ]; - Q.q27[DIR_00P ] = &QQ[DIR_00P *sizeQ]; - Q.q27[DIR_00M ] = &QQ[DIR_00M *sizeQ]; - Q.q27[DIR_PP0 ] = &QQ[DIR_PP0 *sizeQ]; - Q.q27[DIR_MM0 ] = &QQ[DIR_MM0 *sizeQ]; - Q.q27[DIR_PM0 ] = &QQ[DIR_PM0 *sizeQ]; - Q.q27[DIR_MP0 ] = &QQ[DIR_MP0 *sizeQ]; - Q.q27[DIR_P0P ] = &QQ[DIR_P0P *sizeQ]; - Q.q27[DIR_M0M ] = &QQ[DIR_M0M *sizeQ]; - Q.q27[DIR_P0M ] = &QQ[DIR_P0M *sizeQ]; - Q.q27[DIR_M0P ] = &QQ[DIR_M0P *sizeQ]; - Q.q27[DIR_0PP ] = &QQ[DIR_0PP *sizeQ]; - Q.q27[DIR_0MM ] = &QQ[DIR_0MM *sizeQ]; - Q.q27[DIR_0PM ] = &QQ[DIR_0PM *sizeQ]; - Q.q27[DIR_0MP ] = &QQ[DIR_0MP *sizeQ]; - Q.q27[DIR_000] = &QQ[DIR_000*sizeQ]; - Q.q27[DIR_PPP ] = &QQ[DIR_PPP *sizeQ]; - Q.q27[DIR_MMP ] = &QQ[DIR_MMP *sizeQ]; - Q.q27[DIR_PMP ] = &QQ[DIR_PMP *sizeQ]; - Q.q27[DIR_MPP ] = &QQ[DIR_MPP *sizeQ]; - Q.q27[DIR_PPM ] = &QQ[DIR_PPM *sizeQ]; - Q.q27[DIR_MMM ] = &QQ[DIR_MMM *sizeQ]; - Q.q27[DIR_PMM ] = &QQ[DIR_PMM *sizeQ]; - Q.q27[DIR_MPM ] = &QQ[DIR_MPM *sizeQ]; + Q.q27[dP00 ] = &QQ[dP00 *sizeQ]; + Q.q27[dM00 ] = &QQ[dM00 *sizeQ]; + Q.q27[d0P0 ] = &QQ[d0P0 *sizeQ]; + Q.q27[d0M0 ] = &QQ[d0M0 *sizeQ]; + Q.q27[d00P ] = &QQ[d00P *sizeQ]; + Q.q27[d00M ] = &QQ[d00M *sizeQ]; + Q.q27[dPP0 ] = &QQ[dPP0 *sizeQ]; + Q.q27[dMM0 ] = &QQ[dMM0 *sizeQ]; + Q.q27[dPM0 ] = &QQ[dPM0 *sizeQ]; + Q.q27[dMP0 ] = &QQ[dMP0 *sizeQ]; + Q.q27[dP0P ] = &QQ[dP0P *sizeQ]; + Q.q27[dM0M ] = &QQ[dM0M *sizeQ]; + Q.q27[dP0M ] = &QQ[dP0M *sizeQ]; + Q.q27[dM0P ] = &QQ[dM0P *sizeQ]; + Q.q27[d0PP ] = &QQ[d0PP *sizeQ]; + Q.q27[d0MM ] = &QQ[d0MM *sizeQ]; + Q.q27[d0PM ] = &QQ[d0PM *sizeQ]; + Q.q27[d0MP ] = &QQ[d0MP *sizeQ]; + Q.q27[d000] = &QQ[d000*sizeQ]; + Q.q27[dPPP ] = &QQ[dPPP *sizeQ]; + Q.q27[dMMP ] = &QQ[dMMP *sizeQ]; + Q.q27[dPMP ] = &QQ[dPMP *sizeQ]; + Q.q27[dMPP ] = &QQ[dMPP *sizeQ]; + Q.q27[dPPM ] = &QQ[dPPM *sizeQ]; + Q.q27[dMMM ] = &QQ[dMMM *sizeQ]; + Q.q27[dPMM ] = &QQ[dPMM *sizeQ]; + Q.q27[dMPM ] = &QQ[dMPM *sizeQ]; ////////////////////////////////////////////////////////////////// for(uint u=0; u<para->getParH(para->getFine())->propellerBC.numberOfBCnodes; u++) { - for (size_t dir = DIR_P00; dir<=DIR_MMM; dir++) + for (size_t dir = dP00; dir<=dMMM; dir++) { - if ((dir==DIR_P00) || - (dir==DIR_PP0) || (dir==DIR_PM0) || (dir==DIR_P0P) || (dir==DIR_P0M) || - (dir==DIR_PPP)|| (dir==DIR_PPM)|| (dir==DIR_PMP)|| (dir==DIR_PMM)) + if ((dir==dP00) || + (dir==dPP0) || (dir==dPM0) || (dir==dP0P) || (dir==dP0M) || + (dir==dPPP)|| (dir==dPPM)|| (dir==dPMP)|| (dir==dPMM)) { Q.q27[dir][u] = 1.0f; } diff --git a/src/gpu/VirtualFluids_GPU/Init/PositionReader.h b/src/gpu/core/Init/PositionReader.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Init/PositionReader.h rename to src/gpu/core/Init/PositionReader.h diff --git a/src/gpu/VirtualFluids_GPU/Init/VfReader.cpp b/src/gpu/core/Init/VfReader.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Init/VfReader.cpp rename to src/gpu/core/Init/VfReader.cpp diff --git a/src/gpu/VirtualFluids_GPU/Init/VfReader.h b/src/gpu/core/Init/VfReader.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Init/VfReader.h rename to src/gpu/core/Init/VfReader.h diff --git a/src/gpu/core/Kernel/AdvectionDiffusionKernel.h b/src/gpu/core/Kernel/AdvectionDiffusionKernel.h new file mode 100644 index 0000000000000000000000000000000000000000..adc3db779531ffad7918426bbd5a73d2d133182c --- /dev/null +++ b/src/gpu/core/Kernel/AdvectionDiffusionKernel.h @@ -0,0 +1,12 @@ +#ifndef AdvectionDiffusionKernel_H +#define AdvectionDiffusionKernel_H + +#include "Kernel/KernelImp.h" + +class AdvectionDiffusionKernel : public KernelImp +{ +public: + virtual ~AdvectionDiffusionKernel() = default; + virtual void run() = 0; +}; +#endif diff --git a/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/F16/F16CompressibleAdvectionDiffusion.cu b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/F16/F16CompressibleAdvectionDiffusion.cu new file mode 100644 index 0000000000000000000000000000000000000000..33b1a5c89544c115d948b35eef5161ba7d02e8e9 --- /dev/null +++ b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/F16/F16CompressibleAdvectionDiffusion.cu @@ -0,0 +1,41 @@ +#include "F16CompressibleAdvectionDiffusion.h" + +#include "F16CompressibleAdvectionDiffusion_Device.cuh" +#include "Parameter/Parameter.h" +#include <cuda_helper/CudaGrid.h> + +std::shared_ptr<F16CompressibleAdvectionDiffusion> F16CompressibleAdvectionDiffusion::getNewInstance(std::shared_ptr<Parameter> para, int level) +{ + return std::shared_ptr<F16CompressibleAdvectionDiffusion>(new F16CompressibleAdvectionDiffusion(para, level)); +} + +void F16CompressibleAdvectionDiffusion::run() +{ + vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); + + F16CompressibleAdvectionDiffusion_Device<<< grid.grid, grid.threads >>>( + para->getParD(level)->diffusivity, + para->getParD(level)->typeOfGridNode, + para->getParD(level)->neighborX, + para->getParD(level)->neighborY, + para->getParD(level)->neighborZ, + para->getParD(level)->distributions.f[0], + para->getParD(level)->distributionsAD.f[0], + para->getParD(level)->numberOfNodes, + para->getParD(level)->forcing, + para->getParD(level)->isEvenTimestep); + getLastCudaError("F16CompressibleAdvectionDiffusion_Device execution failed"); +} + +F16CompressibleAdvectionDiffusion::F16CompressibleAdvectionDiffusion(std::shared_ptr<Parameter> para, int level) +{ + this->para = para; + this->level = level; + + myPreProcessorTypes.push_back(InitCompAD27); + +} + +F16CompressibleAdvectionDiffusion::F16CompressibleAdvectionDiffusion() +{ +} diff --git a/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/F16/F16CompressibleAdvectionDiffusion.h b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/F16/F16CompressibleAdvectionDiffusion.h new file mode 100644 index 0000000000000000000000000000000000000000..5eda04602ce24aa5f2bac5c6043aee7f7dcc47c6 --- /dev/null +++ b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/F16/F16CompressibleAdvectionDiffusion.h @@ -0,0 +1,16 @@ +#ifndef F16CompressibleAdvectionDiffusion_H +#define F16CompressibleAdvectionDiffusion_H + +#include "Kernel/AdvectionDiffusionKernel.h" + +class F16CompressibleAdvectionDiffusion : public AdvectionDiffusionKernel +{ +public: + static std::shared_ptr<F16CompressibleAdvectionDiffusion> getNewInstance(std::shared_ptr< Parameter> para, int level); + void run(); + +private: + F16CompressibleAdvectionDiffusion(); + F16CompressibleAdvectionDiffusion(std::shared_ptr< Parameter> para, int level); +}; +#endif \ No newline at end of file diff --git a/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/F16/F16CompressibleAdvectionDiffusion_Device.cu b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/F16/F16CompressibleAdvectionDiffusion_Device.cu new file mode 100644 index 0000000000000000000000000000000000000000..29d7f9961b0dcdf546ce0081cffc5e77b0dae6c8 --- /dev/null +++ b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/F16/F16CompressibleAdvectionDiffusion_Device.cu @@ -0,0 +1,478 @@ +#include "LBM/LB.h" +#include <lbm/constants/D3Q27.h> +#include <lbm/ChimeraTransformation.h> +#include <basics/constants/NumericConstants.h> + +using namespace vf::basics::constant; +using namespace vf::lbm; +using namespace vf::lbm::dir; +#include "math.h" + +__global__ void F16CompressibleAdvectionDiffusion_Device( + real omegaDiffusivity, + uint* typeOfGridNode, + uint* neighborX, + uint* neighborY, + uint* neighborZ, + real* distributions, + real* distributionsAD, + unsigned long long numberOfLBnodes, + real* forces, + bool isEvenTimestep) +{ + ////////////////////////////////////////////////////////////////////////// + //! Cumulant K17 Kernel is based on \ref + //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> + //! and \ref + //! <a href="https://doi.org/10.1016/j.jcp.2017.07.004"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.07.004 ]</b></a> + //! + //! The cumulant kernel is executed in the following steps + //! + //////////////////////////////////////////////////////////////////////////////// + //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. + //! + 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; + + ////////////////////////////////////////////////////////////////////////// + // run for all indices in size_Mat and fluid nodes + if ((k < numberOfLBnodes) && (typeOfGridNode[k] == GEO_FLUID)) + { + ////////////////////////////////////////////////////////////////////////// + //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref + //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> + //! + Distributions27 dist; + if (isEvenTimestep) + { + dist.f[dP00] = &distributions[dP00 * numberOfLBnodes]; + dist.f[dM00] = &distributions[dM00 * numberOfLBnodes]; + dist.f[d0P0] = &distributions[d0P0 * numberOfLBnodes]; + dist.f[d0M0] = &distributions[d0M0 * numberOfLBnodes]; + dist.f[d00P] = &distributions[d00P * numberOfLBnodes]; + dist.f[d00M] = &distributions[d00M * numberOfLBnodes]; + dist.f[dPP0] = &distributions[dPP0 * numberOfLBnodes]; + dist.f[dMM0] = &distributions[dMM0 * numberOfLBnodes]; + dist.f[dPM0] = &distributions[dPM0 * numberOfLBnodes]; + dist.f[dMP0] = &distributions[dMP0 * numberOfLBnodes]; + dist.f[dP0P] = &distributions[dP0P * numberOfLBnodes]; + dist.f[dM0M] = &distributions[dM0M * numberOfLBnodes]; + dist.f[dP0M] = &distributions[dP0M * numberOfLBnodes]; + dist.f[dM0P] = &distributions[dM0P * numberOfLBnodes]; + dist.f[d0PP] = &distributions[d0PP * numberOfLBnodes]; + dist.f[d0MM] = &distributions[d0MM * numberOfLBnodes]; + dist.f[d0PM] = &distributions[d0PM * numberOfLBnodes]; + dist.f[d0MP] = &distributions[d0MP * numberOfLBnodes]; + dist.f[d000] = &distributions[d000 * numberOfLBnodes]; + dist.f[dPPP] = &distributions[dPPP * numberOfLBnodes]; + dist.f[dMMP] = &distributions[dMMP * numberOfLBnodes]; + dist.f[dPMP] = &distributions[dPMP * numberOfLBnodes]; + dist.f[dMPP] = &distributions[dMPP * numberOfLBnodes]; + dist.f[dPPM] = &distributions[dPPM * numberOfLBnodes]; + dist.f[dMMM] = &distributions[dMMM * numberOfLBnodes]; + dist.f[dPMM] = &distributions[dPMM * numberOfLBnodes]; + dist.f[dMPM] = &distributions[dMPM * numberOfLBnodes]; + } + else + { + dist.f[dM00] = &distributions[dP00 * numberOfLBnodes]; + dist.f[dP00] = &distributions[dM00 * numberOfLBnodes]; + dist.f[d0M0] = &distributions[d0P0 * numberOfLBnodes]; + dist.f[d0P0] = &distributions[d0M0 * numberOfLBnodes]; + dist.f[d00M] = &distributions[d00P * numberOfLBnodes]; + dist.f[d00P] = &distributions[d00M * numberOfLBnodes]; + dist.f[dMM0] = &distributions[dPP0 * numberOfLBnodes]; + dist.f[dPP0] = &distributions[dMM0 * numberOfLBnodes]; + dist.f[dMP0] = &distributions[dPM0 * numberOfLBnodes]; + dist.f[dPM0] = &distributions[dMP0 * numberOfLBnodes]; + dist.f[dM0M] = &distributions[dP0P * numberOfLBnodes]; + dist.f[dP0P] = &distributions[dM0M * numberOfLBnodes]; + dist.f[dM0P] = &distributions[dP0M * numberOfLBnodes]; + dist.f[dP0M] = &distributions[dM0P * numberOfLBnodes]; + dist.f[d0MM] = &distributions[d0PP * numberOfLBnodes]; + dist.f[d0PP] = &distributions[d0MM * numberOfLBnodes]; + dist.f[d0MP] = &distributions[d0PM * numberOfLBnodes]; + dist.f[d0PM] = &distributions[d0MP * numberOfLBnodes]; + dist.f[d000] = &distributions[d000 * numberOfLBnodes]; + dist.f[dMMM] = &distributions[dPPP * numberOfLBnodes]; + dist.f[dPPM] = &distributions[dMMP * numberOfLBnodes]; + dist.f[dMPM] = &distributions[dPMP * numberOfLBnodes]; + dist.f[dPMM] = &distributions[dMPP * numberOfLBnodes]; + dist.f[dMMP] = &distributions[dPPM * numberOfLBnodes]; + dist.f[dPPP] = &distributions[dMMM * numberOfLBnodes]; + dist.f[dMPP] = &distributions[dPMM * numberOfLBnodes]; + dist.f[dPMP] = &distributions[dMPM * numberOfLBnodes]; + } + //////////////////////////////////////////////////////////////////////////////// + Distributions27 distAD; + if (isEvenTimestep) + { + distAD.f[dP00] = &distributionsAD[dP00 * numberOfLBnodes]; + distAD.f[dM00] = &distributionsAD[dM00 * numberOfLBnodes]; + distAD.f[d0P0] = &distributionsAD[d0P0 * numberOfLBnodes]; + distAD.f[d0M0] = &distributionsAD[d0M0 * numberOfLBnodes]; + distAD.f[d00P] = &distributionsAD[d00P * numberOfLBnodes]; + distAD.f[d00M] = &distributionsAD[d00M * numberOfLBnodes]; + distAD.f[dPP0] = &distributionsAD[dPP0 * numberOfLBnodes]; + distAD.f[dMM0] = &distributionsAD[dMM0 * numberOfLBnodes]; + distAD.f[dPM0] = &distributionsAD[dPM0 * numberOfLBnodes]; + distAD.f[dMP0] = &distributionsAD[dMP0 * numberOfLBnodes]; + distAD.f[dP0P] = &distributionsAD[dP0P * numberOfLBnodes]; + distAD.f[dM0M] = &distributionsAD[dM0M * numberOfLBnodes]; + distAD.f[dP0M] = &distributionsAD[dP0M * numberOfLBnodes]; + distAD.f[dM0P] = &distributionsAD[dM0P * numberOfLBnodes]; + distAD.f[d0PP] = &distributionsAD[d0PP * numberOfLBnodes]; + distAD.f[d0MM] = &distributionsAD[d0MM * numberOfLBnodes]; + distAD.f[d0PM] = &distributionsAD[d0PM * numberOfLBnodes]; + distAD.f[d0MP] = &distributionsAD[d0MP * numberOfLBnodes]; + distAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes]; + distAD.f[dPPP] = &distributionsAD[dPPP * numberOfLBnodes]; + distAD.f[dMMP] = &distributionsAD[dMMP * numberOfLBnodes]; + distAD.f[dPMP] = &distributionsAD[dPMP * numberOfLBnodes]; + distAD.f[dMPP] = &distributionsAD[dMPP * numberOfLBnodes]; + distAD.f[dPPM] = &distributionsAD[dPPM * numberOfLBnodes]; + distAD.f[dMMM] = &distributionsAD[dMMM * numberOfLBnodes]; + distAD.f[dPMM] = &distributionsAD[dPMM * numberOfLBnodes]; + distAD.f[dMPM] = &distributionsAD[dMPM * numberOfLBnodes]; + } + else + { + distAD.f[dM00] = &distributionsAD[dP00 * numberOfLBnodes]; + distAD.f[dP00] = &distributionsAD[dM00 * numberOfLBnodes]; + distAD.f[d0M0] = &distributionsAD[d0P0 * numberOfLBnodes]; + distAD.f[d0P0] = &distributionsAD[d0M0 * numberOfLBnodes]; + distAD.f[d00M] = &distributionsAD[d00P * numberOfLBnodes]; + distAD.f[d00P] = &distributionsAD[d00M * numberOfLBnodes]; + distAD.f[dMM0] = &distributionsAD[dPP0 * numberOfLBnodes]; + distAD.f[dPP0] = &distributionsAD[dMM0 * numberOfLBnodes]; + distAD.f[dMP0] = &distributionsAD[dPM0 * numberOfLBnodes]; + distAD.f[dPM0] = &distributionsAD[dMP0 * numberOfLBnodes]; + distAD.f[dM0M] = &distributionsAD[dP0P * numberOfLBnodes]; + distAD.f[dP0P] = &distributionsAD[dM0M * numberOfLBnodes]; + distAD.f[dM0P] = &distributionsAD[dP0M * numberOfLBnodes]; + distAD.f[dP0M] = &distributionsAD[dM0P * numberOfLBnodes]; + distAD.f[d0MM] = &distributionsAD[d0PP * numberOfLBnodes]; + distAD.f[d0PP] = &distributionsAD[d0MM * numberOfLBnodes]; + distAD.f[d0MP] = &distributionsAD[d0PM * numberOfLBnodes]; + distAD.f[d0PM] = &distributionsAD[d0MP * numberOfLBnodes]; + distAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes]; + distAD.f[dMMM] = &distributionsAD[dPPP * numberOfLBnodes]; + distAD.f[dPPM] = &distributionsAD[dMMP * numberOfLBnodes]; + distAD.f[dMPM] = &distributionsAD[dPMP * numberOfLBnodes]; + distAD.f[dPMM] = &distributionsAD[dMPP * numberOfLBnodes]; + distAD.f[dMMP] = &distributionsAD[dPPM * numberOfLBnodes]; + distAD.f[dPPP] = &distributionsAD[dMMM * numberOfLBnodes]; + distAD.f[dMPP] = &distributionsAD[dPMM * numberOfLBnodes]; + distAD.f[dPMP] = &distributionsAD[dMPM * numberOfLBnodes]; + } + //////////////////////////////////////////////////////////////////////////////// + //! - Set neighbor indices (necessary for indirect addressing) + uint kw = neighborX[k]; + uint ks = neighborY[k]; + uint kb = neighborZ[k]; + uint ksw = neighborY[kw]; + uint kbw = neighborZ[kw]; + uint kbs = neighborZ[ks]; + uint kbsw = neighborZ[ksw]; + //////////////////////////////////////////////////////////////////////////////////// + //! - Set local distributions Fluid + //! + real fcbb = (dist.f[dP00])[k]; + real fabb = (dist.f[dM00])[kw]; + real fbcb = (dist.f[d0P0])[k]; + real fbab = (dist.f[d0M0])[ks]; + real fbbc = (dist.f[d00P])[k]; + real fbba = (dist.f[d00M])[kb]; + real fccb = (dist.f[dPP0])[k]; + real faab = (dist.f[dMM0])[ksw]; + real fcab = (dist.f[dPM0])[ks]; + real facb = (dist.f[dMP0])[kw]; + real fcbc = (dist.f[dP0P])[k]; + real faba = (dist.f[dM0M])[kbw]; + real fcba = (dist.f[dP0M])[kb]; + real fabc = (dist.f[dM0P])[kw]; + real fbcc = (dist.f[d0PP])[k]; + real fbaa = (dist.f[d0MM])[kbs]; + real fbca = (dist.f[d0PM])[kb]; + real fbac = (dist.f[d0MP])[ks]; + real fbbb = (dist.f[d000])[k]; + real fccc = (dist.f[dPPP])[k]; + real faac = (dist.f[dMMP])[ksw]; + real fcac = (dist.f[dPMP])[ks]; + real facc = (dist.f[dMPP])[kw]; + real fcca = (dist.f[dPPM])[kb]; + real faaa = (dist.f[dMMM])[kbsw]; + real fcaa = (dist.f[dPMM])[kbs]; + real faca = (dist.f[dMPM])[kbw]; + //////////////////////////////////////////////////////////////////////////////////// + //! - Set local distributions Advection Diffusion + //! + real mfcbb = (distAD.f[dP00])[k]; + real mfabb = (distAD.f[dM00])[kw]; + real mfbcb = (distAD.f[d0P0])[k]; + real mfbab = (distAD.f[d0M0])[ks]; + real mfbbc = (distAD.f[d00P])[k]; + real mfbba = (distAD.f[d00M])[kb]; + real mfccb = (distAD.f[dPP0])[k]; + real mfaab = (distAD.f[dMM0])[ksw]; + real mfcab = (distAD.f[dPM0])[ks]; + real mfacb = (distAD.f[dMP0])[kw]; + real mfcbc = (distAD.f[dP0P])[k]; + real mfaba = (distAD.f[dM0M])[kbw]; + real mfcba = (distAD.f[dP0M])[kb]; + real mfabc = (distAD.f[dM0P])[kw]; + real mfbcc = (distAD.f[d0PP])[k]; + real mfbaa = (distAD.f[d0MM])[kbs]; + real mfbca = (distAD.f[d0PM])[kb]; + real mfbac = (distAD.f[d0MP])[ks]; + real mfbbb = (distAD.f[d000])[k]; + real mfccc = (distAD.f[dPPP])[k]; + real mfaac = (distAD.f[dMMP])[ksw]; + real mfcac = (distAD.f[dPMP])[ks]; + real mfacc = (distAD.f[dMPP])[kw]; + real mfcca = (distAD.f[dPPM])[kb]; + real mfaaa = (distAD.f[dMMM])[kbsw]; + real mfcaa = (distAD.f[dPMM])[kbs]; + real mfaca = (distAD.f[dMPM])[kbw]; + //////////////////////////////////////////////////////////////////////////////////// + //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref + //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> + //! + //////////////////////////////////////////////////////////////////////////////////// + // fluid component + real drhoFluid = + ((((fccc + faaa) + (faca + fcac)) + ((facc + fcaa) + (faac + fcca))) + + (((fbac + fbca) + (fbaa + fbcc)) + ((fabc + fcba) + (faba + fcbc)) + ((facb + fcab) + (faab + fccb))) + + ((fabb + fcbb) + (fbab + fbcb) + (fbba + fbbc))) + fbbb; + + real rhoFluid = c1o1 + drhoFluid; + real OOrhoFluid = c1o1 / rhoFluid; + + real vvx = + ((((fccc - faaa) + (fcac - faca)) + ((fcaa - facc) + (fcca - faac))) + + (((fcba - fabc) + (fcbc - faba)) + ((fcab - facb) + (fccb - faab))) + + (fcbb - fabb)) * OOrhoFluid; + real vvy = + ((((fccc - faaa) + (faca - fcac)) + ((facc - fcaa) + (fcca - faac))) + + (((fbca - fbac) + (fbcc - fbaa)) + ((facb - fcab) + (fccb - faab))) + + (fbcb - fbab)) * OOrhoFluid; + real vvz = + ((((fccc - faaa) + (fcac - faca)) + ((facc - fcaa) + (faac - fcca))) + + (((fbac - fbca) + (fbcc - fbaa)) + ((fabc - fcba) + (fcbc - faba))) + + (fbbc - fbba)) * OOrhoFluid; + //////////////////////////////////////////////////////////////////////////////////// + // second component + real rho = + ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + + (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; + + //////////////////////////////////////////////////////////////////////////////////// + //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref + //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> + //! + real fx = forces[0]; + real fy = forces[1]; + real fz = -rho*forces[2]; + vvx += fx*c1o2; + vvy += fy*c1o2; + vvz += fz*c1o2; + //////////////////////////////////////////////////////////////////////////////////// + // calculate the square of velocities for this lattice node + real vx2 = vvx*vvx; + real vy2 = vvy*vvy; + real vz2 = vvz*vvz; + //////////////////////////////////////////////////////////////////////////////////// + //real omegaDiffusivity = c2o1 / (c6o1 * diffusivity + c1o1); + //////////////////////////////////////////////////////////////////////////////////// + //! - Chimera transform from distributions to central moments as defined in Eq. (43)-(45) in \ref + //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> + //! + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + forwardChimera(mfaaa, mfaab, mfaac, vvz, vz2); + forwardChimera(mfaba, mfabb, mfabc, vvz, vz2); + forwardChimera(mfaca, mfacb, mfacc, vvz, vz2); + forwardChimera(mfbaa, mfbab, mfbac, vvz, vz2); + forwardChimera(mfbba, mfbbb, mfbbc, vvz, vz2); + forwardChimera(mfbca, mfbcb, mfbcc, vvz, vz2); + forwardChimera(mfcaa, mfcab, mfcac, vvz, vz2); + forwardChimera(mfcba, mfcbb, mfcbc, vvz, vz2); + forwardChimera(mfcca, mfccb, mfccc, vvz, vz2); + + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + forwardChimera(mfaaa, mfaba, mfaca, vvy, vy2); + forwardChimera(mfaab, mfabb, mfacb, vvy, vy2); + forwardChimera(mfaac, mfabc, mfacc, vvy, vy2); + forwardChimera(mfbaa, mfbba, mfbca, vvy, vy2); + forwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); + forwardChimera(mfbac, mfbbc, mfbcc, vvy, vy2); + forwardChimera(mfcaa, mfcba, mfcca, vvy, vy2); + forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); + forwardChimera(mfcac, mfcbc, mfccc, vvy, vy2); + + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + forwardChimera(mfaaa, mfbaa, mfcaa, vvx, vx2); + forwardChimera(mfaba, mfbba, mfcba, vvx, vx2); + forwardChimera(mfaca, mfbca, mfcca, vvx, vx2); + forwardChimera(mfaab, mfbab, mfcab, vvx, vx2); + forwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); + forwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); + forwardChimera(mfaac, mfbac, mfcac, vvx, vx2); + forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); + forwardChimera(mfacc, mfbcc, mfccc, vvx, vx2); + + //////////////////////////////////////////////////////////////////////////////////// + //! - Factorized central moments for Advection Diffusion Equation - Eq. (15)-(16) in \ref + //! <a href="https://doi.org/10.1016/j.advwatres.2015.09.015"><b>[ X. Yang et al. (2016), DOI: 10.1016/j.advwatres.2015.09.015]</b></a> + //! + + // linearized orthogonalization of 3rd order central moments + real Mabc = mfabc - mfaba*c1o3; + real Mbca = mfbca - mfbaa*c1o3; + real Macb = mfacb - mfaab*c1o3; + real Mcba = mfcba - mfaba*c1o3; + real Mcab = mfcab - mfaab*c1o3; + real Mbac = mfbac - mfbaa*c1o3; + // linearized orthogonalization of 5th order central moments + real Mcbc = mfcbc - mfaba*c1o9; + real Mbcc = mfbcc - mfbaa*c1o9; + real Mccb = mfccb - mfaab*c1o9; + + // collision of 1st order moments + mfbaa *= c1o1 - omegaDiffusivity; + mfaba *= c1o1 - omegaDiffusivity; + mfaab *= c1o1 - omegaDiffusivity; + + // equilibration of 3rd order moments + Mabc = c0o1; + Mbca = c0o1; + Macb = c0o1; + Mcba = c0o1; + Mcab = c0o1; + Mbac = c0o1; + mfbbb = c0o1; + + // equilibration of 5th order moments + Mcbc = c0o1; + Mbcc = c0o1; + Mccb = c0o1; + + // equilibration of 2nd order moments + mfbba = c0o1; + mfbab = c0o1; + mfabb = c0o1; + + mfcaa = c1o3 * rho; + mfaca = c1o3 * rho; + mfaac = c1o3 * rho; + + // equilibration of 4th order moments + mfacc = c1o9 * rho; + mfcac = c1o9 * rho; + mfcca = c1o9 * rho; + + mfcbb = c0o1; + mfbcb = c0o1; + mfbbc = c0o1; + + // equilibration of 6th order moment + mfccc = c1o27 * rho; + + // from linearized orthogonalization 3rd order central moments to central moments + mfabc = Mabc + mfaba*c1o3; + mfbca = Mbca + mfbaa*c1o3; + mfacb = Macb + mfaab*c1o3; + mfcba = Mcba + mfaba*c1o3; + mfcab = Mcab + mfaab*c1o3; + mfbac = Mbac + mfbaa*c1o3; + + // from linearized orthogonalization 5th order central moments to central moments + mfcbc = Mcbc + mfaba*c1o9; + mfbcc = Mbcc + mfbaa*c1o9; + mfccb = Mccb + mfaab*c1o9; + + //////////////////////////////////////////////////////////////////////////////////// + //! - Chimera transform from central moments to distributions as defined in Eq. (88)-(96) in \ref + //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> + //! + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + backwardChimera(mfaaa, mfbaa, mfcaa, vvx, vx2); + backwardChimera(mfaba, mfbba, mfcba, vvx, vx2); + backwardChimera(mfaca, mfbca, mfcca, vvx, vx2); + backwardChimera(mfaab, mfbab, mfcab, vvx, vx2); + backwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); + backwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); + backwardChimera(mfaac, mfbac, mfcac, vvx, vx2); + backwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); + backwardChimera(mfacc, mfbcc, mfccc, vvx, vx2); + + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + backwardChimera(mfaaa, mfaba, mfaca, vvy, vy2); + backwardChimera(mfaab, mfabb, mfacb, vvy, vy2); + backwardChimera(mfaac, mfabc, mfacc, vvy, vy2); + backwardChimera(mfbaa, mfbba, mfbca, vvy, vy2); + backwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); + backwardChimera(mfbac, mfbbc, mfbcc, vvy, vy2); + backwardChimera(mfcaa, mfcba, mfcca, vvy, vy2); + backwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); + backwardChimera(mfcac, mfcbc, mfccc, vvy, vy2); + + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + backwardChimera(mfaaa, mfaab, mfaac, vvz, vz2); + backwardChimera(mfaba, mfabb, mfabc, vvz, vz2); + backwardChimera(mfaca, mfacb, mfacc, vvz, vz2); + backwardChimera(mfbaa, mfbab, mfbac, vvz, vz2); + backwardChimera(mfbba, mfbbb, mfbbc, vvz, vz2); + backwardChimera(mfbca, mfbcb, mfbcc, vvz, vz2); + backwardChimera(mfcaa, mfcab, mfcac, vvz, vz2); + backwardChimera(mfcba, mfcbb, mfcbc, vvz, vz2); + backwardChimera(mfcca, mfccb, mfccc, vvz, vz2); + + //////////////////////////////////////////////////////////////////////////////////// + //! - Write distributions: style of reading and writing the distributions from/to + //! stored arrays dependent on timestep is based on the esoteric twist algorithm + //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> + //! + (distAD.f[dP00])[k ] = mfabb; + (distAD.f[dM00])[kw ] = mfcbb; + (distAD.f[d0P0])[k ] = mfbab; + (distAD.f[d0M0])[ks ] = mfbcb; + (distAD.f[d00P])[k ] = mfbba; + (distAD.f[d00M])[kb ] = mfbbc; + (distAD.f[dPP0])[k ] = mfaab; + (distAD.f[dMM0])[ksw ] = mfccb; + (distAD.f[dPM0])[ks ] = mfacb; + (distAD.f[dMP0])[kw ] = mfcab; + (distAD.f[dP0P])[k ] = mfaba; + (distAD.f[dM0M])[kbw ] = mfcbc; + (distAD.f[dP0M])[kb ] = mfabc; + (distAD.f[dM0P])[kw ] = mfcba; + (distAD.f[d0PP])[k ] = mfbaa; + (distAD.f[d0MM])[kbs ] = mfbcc; + (distAD.f[d0PM])[kb ] = mfbac; + (distAD.f[d0MP])[ks ] = mfbca; + (distAD.f[d000])[k ] = mfbbb; + (distAD.f[dPPP])[k ] = mfaaa; + (distAD.f[dPMP])[ks ] = mfaca; + (distAD.f[dPPM])[kb ] = mfaac; + (distAD.f[dPMM])[kbs ] = mfacc; + (distAD.f[dMPP])[kw ] = mfcaa; + (distAD.f[dMMP])[ksw ] = mfcca; + (distAD.f[dMPM])[kbw ] = mfcac; + (distAD.f[dMMM])[kbsw] = mfccc; + } +} +//////////////////////////////////////////////////////////////////////////////// + diff --git a/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/F16/F16CompressibleAdvectionDiffusion_Device.cuh b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/F16/F16CompressibleAdvectionDiffusion_Device.cuh new file mode 100644 index 0000000000000000000000000000000000000000..30687e2a26d4965f4fbab1fb54e2be661ecee263 --- /dev/null +++ b/src/gpu/core/Kernel/Compressible/AdvectionDiffusion/F16/F16CompressibleAdvectionDiffusion_Device.cuh @@ -0,0 +1,19 @@ +#ifndef F16CompressibleAdvectionDiffusion_Device_H +#define F16CompressibleAdvectionDiffusion_Device_H + +#include <DataTypes.h> +#include <curand.h> + +__global__ void F16CompressibleAdvectionDiffusion_Device( + real omegaDiffusivity, + uint* typeOfGridNode, + uint* neighborX, + uint* neighborY, + uint* neighborZ, + real* distributions, + real* distributionsAD, + unsigned long long numberOfLBnodes, + real* forces, + bool isEvenTimestep); + +#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus.cu rename to src/gpu/core/Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus.cu diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus.h b/src/gpu/core/Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus.h rename to src/gpu/core/Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus.h diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus_Device.cu similarity index 82% rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus_Device.cu rename to src/gpu/core/Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus_Device.cu index b21213bf58fd786a4006faf485f18e5c18694e2e..11ae68e4d5e14d89599573765295b65463fad712 100644 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus_Device.cu +++ b/src/gpu/core/Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus_Device.cu @@ -38,63 +38,63 @@ __global__ void B15CompressibleNavierStokesBGKplus_Device( Distributions27 D; if (EvenOrOdd == true) { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; + D.f[dP00] = &DDStart[dP00 * size_Mat]; + D.f[dM00] = &DDStart[dM00 * size_Mat]; + D.f[d0P0] = &DDStart[d0P0 * size_Mat]; + D.f[d0M0] = &DDStart[d0M0 * size_Mat]; + D.f[d00P] = &DDStart[d00P * size_Mat]; + D.f[d00M] = &DDStart[d00M * size_Mat]; + D.f[dPP0] = &DDStart[dPP0 * size_Mat]; + D.f[dMM0] = &DDStart[dMM0 * size_Mat]; + D.f[dPM0] = &DDStart[dPM0 * size_Mat]; + D.f[dMP0] = &DDStart[dMP0 * size_Mat]; + D.f[dP0P] = &DDStart[dP0P * size_Mat]; + D.f[dM0M] = &DDStart[dM0M * size_Mat]; + D.f[dP0M] = &DDStart[dP0M * size_Mat]; + D.f[dM0P] = &DDStart[dM0P * size_Mat]; + D.f[d0PP] = &DDStart[d0PP * size_Mat]; + D.f[d0MM] = &DDStart[d0MM * size_Mat]; + D.f[d0PM] = &DDStart[d0PM * size_Mat]; + D.f[d0MP] = &DDStart[d0MP * size_Mat]; + D.f[d000] = &DDStart[d000 * size_Mat]; + D.f[dPPP] = &DDStart[dPPP * size_Mat]; + D.f[dMMP] = &DDStart[dMMP * size_Mat]; + D.f[dPMP] = &DDStart[dPMP * size_Mat]; + D.f[dMPP] = &DDStart[dMPP * size_Mat]; + D.f[dPPM] = &DDStart[dPPM * size_Mat]; + D.f[dMMM] = &DDStart[dMMM * size_Mat]; + D.f[dPMM] = &DDStart[dPMM * size_Mat]; + D.f[dMPM] = &DDStart[dMPM * size_Mat]; } else { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; + D.f[dM00] = &DDStart[dP00 * size_Mat]; + D.f[dP00] = &DDStart[dM00 * size_Mat]; + D.f[d0M0] = &DDStart[d0P0 * size_Mat]; + D.f[d0P0] = &DDStart[d0M0 * size_Mat]; + D.f[d00M] = &DDStart[d00P * size_Mat]; + D.f[d00P] = &DDStart[d00M * size_Mat]; + D.f[dMM0] = &DDStart[dPP0 * size_Mat]; + D.f[dPP0] = &DDStart[dMM0 * size_Mat]; + D.f[dMP0] = &DDStart[dPM0 * size_Mat]; + D.f[dPM0] = &DDStart[dMP0 * size_Mat]; + D.f[dM0M] = &DDStart[dP0P * size_Mat]; + D.f[dP0P] = &DDStart[dM0M * size_Mat]; + D.f[dM0P] = &DDStart[dP0M * size_Mat]; + D.f[dP0M] = &DDStart[dM0P * size_Mat]; + D.f[d0MM] = &DDStart[d0PP * size_Mat]; + D.f[d0PP] = &DDStart[d0MM * size_Mat]; + D.f[d0MP] = &DDStart[d0PM * size_Mat]; + D.f[d0PM] = &DDStart[d0MP * size_Mat]; + D.f[d000] = &DDStart[d000 * size_Mat]; + D.f[dMMM] = &DDStart[dPPP * size_Mat]; + D.f[dPPM] = &DDStart[dMMP * size_Mat]; + D.f[dMPM] = &DDStart[dPMP * size_Mat]; + D.f[dPMM] = &DDStart[dMPP * size_Mat]; + D.f[dMMP] = &DDStart[dPPM * size_Mat]; + D.f[dPPP] = &DDStart[dMMM * size_Mat]; + D.f[dMPP] = &DDStart[dPMM * size_Mat]; + D.f[dPMP] = &DDStart[dMPM * size_Mat]; } //////////////////////////////////////////////////////////////////////////////// @@ -127,33 +127,33 @@ __global__ void B15CompressibleNavierStokesBGKplus_Device( //unsigned int ktne = k; unsigned int kbsw = neighborZ[ksw]; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke - real mfabb = (D.f[DIR_M00])[kw];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn - real mfbab = (D.f[DIR_0M0])[ks];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt - real mfbba = (D.f[DIR_00M])[kb];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse - real mfacb = (D.f[DIR_MP0])[kw];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw - real mfcbc = (D.f[DIR_P0P])[k];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe - real mfabc = (D.f[DIR_M0P])[kw];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw - real mfbcc = (D.f[DIR_0PP])[k];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn - real mfbac = (D.f[DIR_0MP])[ks];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts - real mfbbb = (D.f[DIR_000])[k];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero - real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw - real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse - real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw - real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw + real mfcbb = (D.f[dP00])[k];//[ke ];// + c2over27 ;(D.f[dP00])[k ];//ke + real mfabb = (D.f[dM00])[kw];//[kw ];// + c2over27 ;(D.f[dM00])[kw ]; + real mfbcb = (D.f[d0P0])[k];//[kn ];// + c2over27 ;(D.f[d0P0])[k ];//kn + real mfbab = (D.f[d0M0])[ks];//[ks ];// + c2over27 ;(D.f[d0M0])[ks ]; + real mfbbc = (D.f[d00P])[k];//[kt ];// + c2over27 ;(D.f[d00P])[k ];//kt + real mfbba = (D.f[d00M])[kb];//[kb ];// + c2over27 ;(D.f[d00M])[kb ]; + real mfccb = (D.f[dPP0])[k];//[kne ];// + c1over54 ;(D.f[dPP0])[k ];//kne + real mfaab = (D.f[dMM0])[ksw];//[ksw ];// + c1over54 ;(D.f[dMM0])[ksw]; + real mfcab = (D.f[dPM0])[ks];//[kse ];// + c1over54 ;(D.f[dPM0])[ks ];//kse + real mfacb = (D.f[dMP0])[kw];//[knw ];// + c1over54 ;(D.f[dMP0])[kw ];//knw + real mfcbc = (D.f[dP0P])[k];//[kte ];// + c1over54 ;(D.f[dP0P])[k ];//kte + real mfaba = (D.f[dM0M])[kbw];//[kbw ];// + c1over54 ;(D.f[dM0M])[kbw]; + real mfcba = (D.f[dP0M])[kb];//[kbe ];// + c1over54 ;(D.f[dP0M])[kb ];//kbe + real mfabc = (D.f[dM0P])[kw];//[ktw ];// + c1over54 ;(D.f[dM0P])[kw ];//ktw + real mfbcc = (D.f[d0PP])[k];//[ktn ];// + c1over54 ;(D.f[d0PP])[k ];//ktn + real mfbaa = (D.f[d0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[d0MM])[kbs]; + real mfbca = (D.f[d0PM])[kb];//[kbn ];// + c1over54 ;(D.f[d0PM])[kb ];//kbn + real mfbac = (D.f[d0MP])[ks];//[kts ];// + c1over54 ;(D.f[d0MP])[ks ];//kts + real mfbbb = (D.f[d000])[k];//[kzero];// + c8over27 ;(D.f[d000])[k ];//kzero + real mfccc = (D.f[dPPP])[k];//[ktne ];// + c1over216;(D.f[dPPP])[k ];//ktne + real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// + c1over216;(D.f[dMMP])[ksw];//ktsw + real mfcac = (D.f[dPMP])[ks];//[ktse ];// + c1over216;(D.f[dPMP])[ks ];//ktse + real mfacc = (D.f[dMPP])[kw];//[ktnw ];// + c1over216;(D.f[dMPP])[kw ];//ktnw + real mfcca = (D.f[dPPM])[kb];//[kbne ];// + c1over216;(D.f[dPPM])[kb ];//kbne + real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// + c1over216;(D.f[dMMM])[kbsw]; + real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// + c1over216;(D.f[dPMM])[kbs];//kbse + real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// + c1over216;(D.f[dMPM])[kbw];//kbnw //////////////////////////////////////////////////////////////////////////////////// //slow //real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + @@ -793,33 +793,33 @@ __global__ void B15CompressibleNavierStokesBGKplus_Device( //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] - (D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] - (D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] - (D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] - (D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] - (D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] - (D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] - (D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] - (D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] - (D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] - (D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] - (D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] - (D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] - (D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] - (D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] - (D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] - (D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] - (D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] - (D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] - (D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] - (D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] - (D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] - (D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] - (D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] - (D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] - (D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] - (D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] + (D.f[dP00])[k] = mfabb;//(D.f[ dP00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ dP00 ])[k ] + (D.f[dM00])[kw] = mfcbb;//(D.f[ dM00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ dM00 ])[kw ] + (D.f[d0P0])[k] = mfbab;//(D.f[ d0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ d0P0 ])[k ] + (D.f[d0M0])[ks] = mfbcb;//(D.f[ d0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ d0M0 ])[ks ] + (D.f[d00P])[k] = mfbba;//(D.f[ d00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ d00P ])[k ] + (D.f[d00M])[kb] = mfbbc;//(D.f[ d00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ d00M ])[kb ] + (D.f[dPP0])[k] = mfaab;//(D.f[ dPP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ dPP0 ])[k ] + (D.f[dMM0])[ksw] = mfccb;//(D.f[ dMM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ dMM0 ])[ksw ] + (D.f[dPM0])[ks] = mfacb;//(D.f[ dPM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ dPM0 ])[ks ] + (D.f[dMP0])[kw] = mfcab;//(D.f[ dMP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ dMP0 ])[kw ] + (D.f[dP0P])[k] = mfaba;//(D.f[ dP0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ dP0P ])[k ] + (D.f[dM0M])[kbw] = mfcbc;//(D.f[ dM0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ dM0M ])[kbw ] + (D.f[dP0M])[kb] = mfabc;//(D.f[ dP0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ dP0M ])[kb ] + (D.f[dM0P])[kw] = mfcba;//(D.f[ dM0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ dM0P ])[kw ] + (D.f[d0PP])[k] = mfbaa;//(D.f[ d0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ d0PP ])[k ] + (D.f[d0MM])[kbs] = mfbcc;//(D.f[ d0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ d0MM ])[kbs ] + (D.f[d0PM])[kb] = mfbac;//(D.f[ d0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ d0PM ])[kb ] + (D.f[d0MP])[ks] = mfbca;//(D.f[ d0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ d0MP ])[ks ] + (D.f[d000])[k] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// - c8over27 ; (D.f[ d000])[k ] + (D.f[dPPP])[k] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ dPPP ])[k ] + (D.f[dPMP])[ks] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// - c1over216; (D.f[ dPMP ])[ks ] + (D.f[dPPM])[kb] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// - c1over216; (D.f[ dPPM ])[kb ] + (D.f[dPMM])[kbs] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// - c1over216; (D.f[ dPMM ])[kbs ] + (D.f[dMPP])[kw] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ dMPP ])[kw ] + (D.f[dMMP])[ksw] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ dMMP ])[ksw ] + (D.f[dMPM])[kbw] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ dMPM ])[kbw ] + (D.f[dMMM])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ dMMM ])[kbsw] //////////////////////////////////////////////////////////////////////////////////// } } diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus_Device.cuh similarity index 100% rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B15/B15CompressibleNavierStokesBGKplus_Device.cuh rename to src/gpu/core/Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus_Device.cuh diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes.cu rename to src/gpu/core/Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes.cu diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes.h b/src/gpu/core/Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes.h rename to src/gpu/core/Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes.h diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes_Device.cu similarity index 62% rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes_Device.cu rename to src/gpu/core/Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes_Device.cu index d032936a96f77304071d014590e35512c1ca7771..415634bb4749fb4307419ce58ca96c0c0d0d3862 100644 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes_Device.cu +++ b/src/gpu/core/Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes_Device.cu @@ -38,63 +38,63 @@ __global__ void B92CompressibleNavierStokes_Device( real omega, Distributions27 D; if (EvenOrOdd == true) { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; + D.f[dP00] = &DDStart[dP00 * size_Mat]; + D.f[dM00] = &DDStart[dM00 * size_Mat]; + D.f[d0P0] = &DDStart[d0P0 * size_Mat]; + D.f[d0M0] = &DDStart[d0M0 * size_Mat]; + D.f[d00P] = &DDStart[d00P * size_Mat]; + D.f[d00M] = &DDStart[d00M * size_Mat]; + D.f[dPP0] = &DDStart[dPP0 * size_Mat]; + D.f[dMM0] = &DDStart[dMM0 * size_Mat]; + D.f[dPM0] = &DDStart[dPM0 * size_Mat]; + D.f[dMP0] = &DDStart[dMP0 * size_Mat]; + D.f[dP0P] = &DDStart[dP0P * size_Mat]; + D.f[dM0M] = &DDStart[dM0M * size_Mat]; + D.f[dP0M] = &DDStart[dP0M * size_Mat]; + D.f[dM0P] = &DDStart[dM0P * size_Mat]; + D.f[d0PP] = &DDStart[d0PP * size_Mat]; + D.f[d0MM] = &DDStart[d0MM * size_Mat]; + D.f[d0PM] = &DDStart[d0PM * size_Mat]; + D.f[d0MP] = &DDStart[d0MP * size_Mat]; + D.f[d000] = &DDStart[d000 * size_Mat]; + D.f[dPPP] = &DDStart[dPPP * size_Mat]; + D.f[dMMP] = &DDStart[dMMP * size_Mat]; + D.f[dPMP] = &DDStart[dPMP * size_Mat]; + D.f[dMPP] = &DDStart[dMPP * size_Mat]; + D.f[dPPM] = &DDStart[dPPM * size_Mat]; + D.f[dMMM] = &DDStart[dMMM * size_Mat]; + D.f[dPMM] = &DDStart[dPMM * size_Mat]; + D.f[dMPM] = &DDStart[dMPM * size_Mat]; } else { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; + D.f[dM00] = &DDStart[dP00 * size_Mat]; + D.f[dP00] = &DDStart[dM00 * size_Mat]; + D.f[d0M0] = &DDStart[d0P0 * size_Mat]; + D.f[d0P0] = &DDStart[d0M0 * size_Mat]; + D.f[d00M] = &DDStart[d00P * size_Mat]; + D.f[d00P] = &DDStart[d00M * size_Mat]; + D.f[dMM0] = &DDStart[dPP0 * size_Mat]; + D.f[dPP0] = &DDStart[dMM0 * size_Mat]; + D.f[dMP0] = &DDStart[dPM0 * size_Mat]; + D.f[dPM0] = &DDStart[dMP0 * size_Mat]; + D.f[dM0M] = &DDStart[dP0P * size_Mat]; + D.f[dP0P] = &DDStart[dM0M * size_Mat]; + D.f[dM0P] = &DDStart[dP0M * size_Mat]; + D.f[dP0M] = &DDStart[dM0P * size_Mat]; + D.f[d0MM] = &DDStart[d0PP * size_Mat]; + D.f[d0PP] = &DDStart[d0MM * size_Mat]; + D.f[d0MP] = &DDStart[d0PM * size_Mat]; + D.f[d0PM] = &DDStart[d0MP * size_Mat]; + D.f[d000] = &DDStart[d000 * size_Mat]; + D.f[dMMM] = &DDStart[dPPP * size_Mat]; + D.f[dPPM] = &DDStart[dMMP * size_Mat]; + D.f[dMPM] = &DDStart[dPMP * size_Mat]; + D.f[dPMM] = &DDStart[dMPP * size_Mat]; + D.f[dMMP] = &DDStart[dPPM * size_Mat]; + D.f[dPPP] = &DDStart[dMMM * size_Mat]; + D.f[dMPP] = &DDStart[dPMM * size_Mat]; + D.f[dPMP] = &DDStart[dMPM * size_Mat]; } //////////////////////////////////////////////////////////////////////////////// @@ -127,33 +127,33 @@ __global__ void B92CompressibleNavierStokes_Device( real omega, //unsigned int ktne = k; unsigned int kbsw = neighborZ[ksw]; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real fE = (D.f[DIR_P00])[k];//ke - real fW = (D.f[DIR_M00])[kw]; - real fN = (D.f[DIR_0P0])[k];//kn - real fS = (D.f[DIR_0M0])[ks]; - real fT = (D.f[DIR_00P])[k];//kt - real fB = (D.f[DIR_00M])[kb]; - real fNE = (D.f[DIR_PP0])[k];//kne - real fSW = (D.f[DIR_MM0])[ksw]; - real fSE = (D.f[DIR_PM0])[ks];//kse - real fNW = (D.f[DIR_MP0])[kw];//knw - real fTE = (D.f[DIR_P0P])[k];//kte - real fBW = (D.f[DIR_M0M])[kbw]; - real fBE = (D.f[DIR_P0M])[kb];//kbe - real fTW = (D.f[DIR_M0P])[kw];//ktw - real fTN = (D.f[DIR_0PP])[k];//ktn - real fBS = (D.f[DIR_0MM])[kbs]; - real fBN = (D.f[DIR_0PM])[kb];//kbn - real fTS = (D.f[DIR_0MP])[ks];//kts - real fZERO = (D.f[DIR_000])[k];//kzero - real fTNE = (D.f[DIR_PPP])[k];//ktne - real fTSW = (D.f[DIR_MMP])[ksw];//ktsw - real fTSE = (D.f[DIR_PMP])[ks];//ktse - real fTNW = (D.f[DIR_MPP])[kw];//ktnw - real fBNE = (D.f[DIR_PPM])[kb];//kbne - real fBSW = (D.f[DIR_MMM])[kbsw]; - real fBSE = (D.f[DIR_PMM])[kbs];//kbse - real fBNW = (D.f[DIR_MPM])[kbw];//kbnw + real fE = (D.f[dP00])[k];//ke + real fW = (D.f[dM00])[kw]; + real fN = (D.f[d0P0])[k];//kn + real fS = (D.f[d0M0])[ks]; + real fT = (D.f[d00P])[k];//kt + real fB = (D.f[d00M])[kb]; + real fNE = (D.f[dPP0])[k];//kne + real fSW = (D.f[dMM0])[ksw]; + real fSE = (D.f[dPM0])[ks];//kse + real fNW = (D.f[dMP0])[kw];//knw + real fTE = (D.f[dP0P])[k];//kte + real fBW = (D.f[dM0M])[kbw]; + real fBE = (D.f[dP0M])[kb];//kbe + real fTW = (D.f[dM0P])[kw];//ktw + real fTN = (D.f[d0PP])[k];//ktn + real fBS = (D.f[d0MM])[kbs]; + real fBN = (D.f[d0PM])[kb];//kbn + real fTS = (D.f[d0MP])[ks];//kts + real fZERO = (D.f[d000])[k];//kzero + real fTNE = (D.f[dPPP])[k];//ktne + real fTSW = (D.f[dMMP])[ksw];//ktsw + real fTSE = (D.f[dPMP])[ks];//ktse + real fTNW = (D.f[dMPP])[kw];//ktnw + real fBNE = (D.f[dPPM])[kb];//kbne + real fBSW = (D.f[dMMM])[kbsw]; + real fBSE = (D.f[dPMM])[kbs];//kbse + real fBNW = (D.f[dMPM])[kbw];//kbnw //////////////////////////////////////////////////////////////////////////////// real drho = (fTNE + fBSW) + (fTSW + fBNE) + (fTSE + fBNW) + (fTNW + fBSE) + (fNE + fSW) + (fNW + fSE) + (fTE + fBW) + (fBE + fTW) + (fTN + fBS) + (fBN + fTS) + (fE + fW) + (fN + fS) + (fT + fB) + fZERO; real rho = drho + c1o1; @@ -210,33 +210,33 @@ __global__ void B92CompressibleNavierStokes_Device( real omega, ////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = fW; - (D.f[DIR_M00])[kw] = fE; - (D.f[DIR_0P0])[k] = fS; - (D.f[DIR_0M0])[ks] = fN; - (D.f[DIR_00P])[k] = fB; - (D.f[DIR_00M])[kb] = fT; - (D.f[DIR_PP0])[k] = fSW; - (D.f[DIR_MM0])[ksw] = fNE; - (D.f[DIR_PM0])[ks] = fNW; - (D.f[DIR_MP0])[kw] = fSE; - (D.f[DIR_P0P])[k] = fBW; - (D.f[DIR_M0M])[kbw] = fTE; - (D.f[DIR_P0M])[kb] = fTW; - (D.f[DIR_M0P])[kw] = fBE; - (D.f[DIR_0PP])[k] = fBS; - (D.f[DIR_0MM])[kbs] = fTN; - (D.f[DIR_0PM])[kb] = fTS; - (D.f[DIR_0MP])[ks] = fBN; - (D.f[DIR_000])[k] = fZERO; - (D.f[DIR_PPP])[k] = fBSW; - (D.f[DIR_PMP])[ks] = fBNW; - (D.f[DIR_PPM])[kb] = fTSW; - (D.f[DIR_PMM])[kbs] = fTNW; - (D.f[DIR_MPP])[kw] = fBSE; - (D.f[DIR_MMP])[ksw] = fBNE; - (D.f[DIR_MPM])[kbw] = fTSE; - (D.f[DIR_MMM])[kbsw] = fTNE; + (D.f[dP00])[k] = fW; + (D.f[dM00])[kw] = fE; + (D.f[d0P0])[k] = fS; + (D.f[d0M0])[ks] = fN; + (D.f[d00P])[k] = fB; + (D.f[d00M])[kb] = fT; + (D.f[dPP0])[k] = fSW; + (D.f[dMM0])[ksw] = fNE; + (D.f[dPM0])[ks] = fNW; + (D.f[dMP0])[kw] = fSE; + (D.f[dP0P])[k] = fBW; + (D.f[dM0M])[kbw] = fTE; + (D.f[dP0M])[kb] = fTW; + (D.f[dM0P])[kw] = fBE; + (D.f[d0PP])[k] = fBS; + (D.f[d0MM])[kbs] = fTN; + (D.f[d0PM])[kb] = fTS; + (D.f[d0MP])[ks] = fBN; + (D.f[d000])[k] = fZERO; + (D.f[dPPP])[k] = fBSW; + (D.f[dPMP])[ks] = fBNW; + (D.f[dPPM])[kb] = fTSW; + (D.f[dPMM])[kbs] = fTNW; + (D.f[dMPP])[kw] = fBSE; + (D.f[dMMP])[ksw] = fBNE; + (D.f[dMPM])[kbw] = fTSE; + (D.f[dMMM])[kbsw] = fTNE; ////////////////////////////////////////////////////////////////////////// } } diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes_Device.cuh similarity index 100% rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/B92/B92CompressibleNavierStokes_Device.cuh rename to src/gpu/core/Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes_Device.cuh diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes.cu rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes.cu diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes.h b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes.h rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes.h diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes_Device.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes_Device.cu similarity index 86% rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes_Device.cu rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes_Device.cu index e38c24d6557c0abc64681a71fc63c51b866fb25a..c3be0a4e23b009e0c8d5b523b0a34da0c8551294 100644 --- a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes_Device.cu +++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes_Device.cu @@ -39,63 +39,63 @@ __global__ void K15CompressibleNavierStokes_Device(real omega, Distributions27 D; if (EvenOrOdd == true) { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; + D.f[dP00] = &DDStart[dP00 * size_Mat]; + D.f[dM00] = &DDStart[dM00 * size_Mat]; + D.f[d0P0] = &DDStart[d0P0 * size_Mat]; + D.f[d0M0] = &DDStart[d0M0 * size_Mat]; + D.f[d00P] = &DDStart[d00P * size_Mat]; + D.f[d00M] = &DDStart[d00M * size_Mat]; + D.f[dPP0] = &DDStart[dPP0 * size_Mat]; + D.f[dMM0] = &DDStart[dMM0 * size_Mat]; + D.f[dPM0] = &DDStart[dPM0 * size_Mat]; + D.f[dMP0] = &DDStart[dMP0 * size_Mat]; + D.f[dP0P] = &DDStart[dP0P * size_Mat]; + D.f[dM0M] = &DDStart[dM0M * size_Mat]; + D.f[dP0M] = &DDStart[dP0M * size_Mat]; + D.f[dM0P] = &DDStart[dM0P * size_Mat]; + D.f[d0PP] = &DDStart[d0PP * size_Mat]; + D.f[d0MM] = &DDStart[d0MM * size_Mat]; + D.f[d0PM] = &DDStart[d0PM * size_Mat]; + D.f[d0MP] = &DDStart[d0MP * size_Mat]; + D.f[d000] = &DDStart[d000 * size_Mat]; + D.f[dPPP] = &DDStart[dPPP * size_Mat]; + D.f[dMMP] = &DDStart[dMMP * size_Mat]; + D.f[dPMP] = &DDStart[dPMP * size_Mat]; + D.f[dMPP] = &DDStart[dMPP * size_Mat]; + D.f[dPPM] = &DDStart[dPPM * size_Mat]; + D.f[dMMM] = &DDStart[dMMM * size_Mat]; + D.f[dPMM] = &DDStart[dPMM * size_Mat]; + D.f[dMPM] = &DDStart[dMPM * size_Mat]; } else { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; + D.f[dM00] = &DDStart[dP00 * size_Mat]; + D.f[dP00] = &DDStart[dM00 * size_Mat]; + D.f[d0M0] = &DDStart[d0P0 * size_Mat]; + D.f[d0P0] = &DDStart[d0M0 * size_Mat]; + D.f[d00M] = &DDStart[d00P * size_Mat]; + D.f[d00P] = &DDStart[d00M * size_Mat]; + D.f[dMM0] = &DDStart[dPP0 * size_Mat]; + D.f[dPP0] = &DDStart[dMM0 * size_Mat]; + D.f[dMP0] = &DDStart[dPM0 * size_Mat]; + D.f[dPM0] = &DDStart[dMP0 * size_Mat]; + D.f[dM0M] = &DDStart[dP0P * size_Mat]; + D.f[dP0P] = &DDStart[dM0M * size_Mat]; + D.f[dM0P] = &DDStart[dP0M * size_Mat]; + D.f[dP0M] = &DDStart[dM0P * size_Mat]; + D.f[d0MM] = &DDStart[d0PP * size_Mat]; + D.f[d0PP] = &DDStart[d0MM * size_Mat]; + D.f[d0MP] = &DDStart[d0PM * size_Mat]; + D.f[d0PM] = &DDStart[d0MP * size_Mat]; + D.f[d000] = &DDStart[d000 * size_Mat]; + D.f[dMMM] = &DDStart[dPPP * size_Mat]; + D.f[dPPM] = &DDStart[dMMP * size_Mat]; + D.f[dMPM] = &DDStart[dPMP * size_Mat]; + D.f[dPMM] = &DDStart[dMPP * size_Mat]; + D.f[dMMP] = &DDStart[dPPM * size_Mat]; + D.f[dPPP] = &DDStart[dMMM * size_Mat]; + D.f[dMPP] = &DDStart[dPMM * size_Mat]; + D.f[dPMP] = &DDStart[dMPM * size_Mat]; } //////////////////////////////////////////////////////////////////////////////// @@ -156,33 +156,33 @@ __global__ void K15CompressibleNavierStokes_Device(real omega, //unsigned int ktne = k; //unsigned int kbsw = neighborZ[ksw]; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke - real mfabb = (D.f[DIR_M00])[kw];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn - real mfbab = (D.f[DIR_0M0])[ks];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt - real mfbba = (D.f[DIR_00M])[kb];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse - real mfacb = (D.f[DIR_MP0])[kw];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw - real mfcbc = (D.f[DIR_P0P])[k];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe - real mfabc = (D.f[DIR_M0P])[kw];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw - real mfbcc = (D.f[DIR_0PP])[k];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn - real mfbac = (D.f[DIR_0MP])[ks];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts - real mfbbb = (D.f[DIR_000])[k];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero - real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw - real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse - real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw - real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw + real mfcbb = (D.f[dP00])[k];//[ke ];// + c2over27 ;(D.f[dP00])[k ];//ke + real mfabb = (D.f[dM00])[kw];//[kw ];// + c2over27 ;(D.f[dM00])[kw ]; + real mfbcb = (D.f[d0P0])[k];//[kn ];// + c2over27 ;(D.f[d0P0])[k ];//kn + real mfbab = (D.f[d0M0])[ks];//[ks ];// + c2over27 ;(D.f[d0M0])[ks ]; + real mfbbc = (D.f[d00P])[k];//[kt ];// + c2over27 ;(D.f[d00P])[k ];//kt + real mfbba = (D.f[d00M])[kb];//[kb ];// + c2over27 ;(D.f[d00M])[kb ]; + real mfccb = (D.f[dPP0])[k];//[kne ];// + c1over54 ;(D.f[dPP0])[k ];//kne + real mfaab = (D.f[dMM0])[ksw];//[ksw ];// + c1over54 ;(D.f[dMM0])[ksw]; + real mfcab = (D.f[dPM0])[ks];//[kse ];// + c1over54 ;(D.f[dPM0])[ks ];//kse + real mfacb = (D.f[dMP0])[kw];//[knw ];// + c1over54 ;(D.f[dMP0])[kw ];//knw + real mfcbc = (D.f[dP0P])[k];//[kte ];// + c1over54 ;(D.f[dP0P])[k ];//kte + real mfaba = (D.f[dM0M])[kbw];//[kbw ];// + c1over54 ;(D.f[dM0M])[kbw]; + real mfcba = (D.f[dP0M])[kb];//[kbe ];// + c1over54 ;(D.f[dP0M])[kb ];//kbe + real mfabc = (D.f[dM0P])[kw];//[ktw ];// + c1over54 ;(D.f[dM0P])[kw ];//ktw + real mfbcc = (D.f[d0PP])[k];//[ktn ];// + c1over54 ;(D.f[d0PP])[k ];//ktn + real mfbaa = (D.f[d0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[d0MM])[kbs]; + real mfbca = (D.f[d0PM])[kb];//[kbn ];// + c1over54 ;(D.f[d0PM])[kb ];//kbn + real mfbac = (D.f[d0MP])[ks];//[kts ];// + c1over54 ;(D.f[d0MP])[ks ];//kts + real mfbbb = (D.f[d000])[k];//[kzero];// + c8over27 ;(D.f[d000])[k ];//kzero + real mfccc = (D.f[dPPP])[k];//[ktne ];// + c1over216;(D.f[dPPP])[k ];//ktne + real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// + c1over216;(D.f[dMMP])[ksw];//ktsw + real mfcac = (D.f[dPMP])[ks];//[ktse ];// + c1over216;(D.f[dPMP])[ks ];//ktse + real mfacc = (D.f[dMPP])[kw];//[ktnw ];// + c1over216;(D.f[dMPP])[kw ];//ktnw + real mfcca = (D.f[dPPM])[kb];//[kbne ];// + c1over216;(D.f[dPPM])[kb ];//kbne + real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// + c1over216;(D.f[dMMM])[kbsw]; + real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// + c1over216;(D.f[dPMM])[kbs];//kbse + real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// + c1over216;(D.f[dMPM])[kbw];//kbnw //////////////////////////////////////////////////////////////////////////////////// real drho = ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + @@ -1242,33 +1242,33 @@ __global__ void K15CompressibleNavierStokes_Device(real omega, ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; mfbbb += drho - drhoPost; //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] - (D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] - (D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] - (D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] - (D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] - (D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] - (D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] - (D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] - (D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] - (D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] - (D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] - (D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] - (D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] - (D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] - (D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] - (D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] - (D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] - (D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] - (D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] - (D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] - (D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] - (D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] - (D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] - (D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] - (D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] - (D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] - (D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] + (D.f[dP00])[k] = mfabb;//(D.f[ dP00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ dP00 ])[k ] + (D.f[dM00])[kw] = mfcbb;//(D.f[ dM00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ dM00 ])[kw ] + (D.f[d0P0])[k] = mfbab;//(D.f[ d0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ d0P0 ])[k ] + (D.f[d0M0])[ks] = mfbcb;//(D.f[ d0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ d0M0 ])[ks ] + (D.f[d00P])[k] = mfbba;//(D.f[ d00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ d00P ])[k ] + (D.f[d00M])[kb] = mfbbc;//(D.f[ d00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ d00M ])[kb ] + (D.f[dPP0])[k] = mfaab;//(D.f[ dPP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ dPP0 ])[k ] + (D.f[dMM0])[ksw] = mfccb;//(D.f[ dMM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ dMM0 ])[ksw ] + (D.f[dPM0])[ks] = mfacb;//(D.f[ dPM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ dPM0 ])[ks ] + (D.f[dMP0])[kw] = mfcab;//(D.f[ dMP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ dMP0 ])[kw ] + (D.f[dP0P])[k] = mfaba;//(D.f[ dP0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ dP0P ])[k ] + (D.f[dM0M])[kbw] = mfcbc;//(D.f[ dM0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ dM0M ])[kbw ] + (D.f[dP0M])[kb] = mfabc;//(D.f[ dP0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ dP0M ])[kb ] + (D.f[dM0P])[kw] = mfcba;//(D.f[ dM0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ dM0P ])[kw ] + (D.f[d0PP])[k] = mfbaa;//(D.f[ d0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ d0PP ])[k ] + (D.f[d0MM])[kbs] = mfbcc;//(D.f[ d0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ d0MM ])[kbs ] + (D.f[d0PM])[kb] = mfbac;//(D.f[ d0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ d0PM ])[kb ] + (D.f[d0MP])[ks] = mfbca;//(D.f[ d0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ d0MP ])[ks ] + (D.f[d000])[k] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// - c8over27 ; (D.f[ d000])[k ] + (D.f[dPPP])[k] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ dPPP ])[k ] + (D.f[dPMP])[ks] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// - c1over216; (D.f[ dPMP ])[ks ] + (D.f[dPPM])[kb] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// - c1over216; (D.f[ dPPM ])[kb ] + (D.f[dPMM])[kbs] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// - c1over216; (D.f[ dPMM ])[kbs ] + (D.f[dMPP])[kw] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ dMPP ])[kw ] + (D.f[dMMP])[ksw] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ dMMP ])[ksw ] + (D.f[dMPM])[kbw] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ dMPM ])[kbw ] + (D.f[dMMM])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ dMMM ])[kbsw] //////////////////////////////////////////////////////////////////////////////////// } } diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes_Device.cuh b/src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes_Device.cuh similarity index 100% rename from src/gpu/VirtualFluids_GPU/Kernel/Compressible/FluidFlow/K15/K15CompressibleNavierStokes_Device.cuh rename to src/gpu/core/Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes_Device.cuh diff --git a/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokes.cu b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokes.cu new file mode 100644 index 0000000000000000000000000000000000000000..60d4a031451b73e1c4b8de1b317d6488d32e69e1 --- /dev/null +++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokes.cu @@ -0,0 +1,130 @@ +#include "K17CompressibleNavierStokes.h" + +#include <optional> +#include <stdexcept> + +#include <cuda.h> + +#include <logger/Logger.h> + +#include <lbm/collision/TurbulentViscosity.h> +#include <lbm/collision/K17CompressibleNavierStokes.h> + +#include "Kernel/KernelImp.h" +#include "Parameter/CudaStreamManager.h" +#include "Parameter/Parameter.h" +#include "LBM/GPUHelperFunctions/KernelUtilities.h" +#include "LBM/GPUHelperFunctions/RunCollision.cuh" + +template <vf::lbm::TurbulenceModel turbulenceModel> +std::shared_ptr<K17CompressibleNavierStokes<turbulenceModel>> +K17CompressibleNavierStokes<turbulenceModel>::getNewInstance(std::shared_ptr<Parameter> para, int level) +{ + return std::shared_ptr<K17CompressibleNavierStokes<turbulenceModel>>(new K17CompressibleNavierStokes(para, level)); +} + +vf::gpu::GPUCollisionParameter getCollisionParameter(const std::shared_ptr<Parameter>& para, int level, const uint* indices, + uint sizeIndices) +{ + vf::gpu::GPUCollisionParameter collisionParameter { para->getParD(level)->omega, + para->getParD(level)->neighborX, + para->getParD(level)->neighborY, + para->getParD(level)->neighborZ, + para->getParD(level)->distributions.f[0], + para->getParD(level)->rho, + para->getParD(level)->velocityX, + para->getParD(level)->velocityY, + para->getParD(level)->velocityZ, + para->getParD(level)->turbViscosity, + para->getSGSConstant(), + (int)para->getParD(level)->numberOfNodes, + vf::gpu::getForceFactor(level), + para->getForcesDev(), + para->getParD(level)->forceX_SP, + para->getParD(level)->forceY_SP, + para->getParD(level)->forceZ_SP, + para->getQuadricLimitersDev(), + para->getParD(level)->isEvenTimestep, + indices, + sizeIndices }; + + return collisionParameter; +} + +template <vf::lbm::TurbulenceModel turbulenceModel> +void K17CompressibleNavierStokes<turbulenceModel>::run() +{ + vf::gpu::GPUCollisionParameter kernelParameter = + getCollisionParameter(para, level, para->getParD(level)->taggedFluidNodeIndices[CollisionTemplate::Default], + para->getParD(level)->numberOfTaggedFluidNodes[CollisionTemplate::Default]); + + auto collision = [] __device__(vf::lbm::CollisionParameter & parameter, vf::lbm::MacroscopicValues & macroscopicValues, + vf::lbm::TurbulentViscosity & turbulentViscosity) { + return vf::lbm::runK17CompressibleNavierStokes<turbulenceModel>(parameter, macroscopicValues, turbulentViscosity); + }; + + vf::gpu::runCollision<decltype(collision), turbulenceModel, false, false><<<cudaGrid.grid, cudaGrid.threads>>>(collision, kernelParameter); + + getLastCudaError("K17CompressibleNavierStokesUnified execution failed"); +} + +template <vf::lbm::TurbulenceModel turbulenceModel> +void K17CompressibleNavierStokes<turbulenceModel>::runOnIndices(const unsigned int* indices, unsigned int size_indices, + CollisionTemplate collisionTemplate, + CudaStreamIndex streamIndex) +{ + cudaStream_t stream = para->getStreamManager()->getStream(streamIndex); + + auto collision = [] __device__(vf::lbm::CollisionParameter& parameter, vf::lbm::MacroscopicValues& macroscopicValues, vf::lbm::TurbulentViscosity& turbulentViscosity) { + return vf::lbm::runK17CompressibleNavierStokes<turbulenceModel>(parameter, macroscopicValues, turbulentViscosity); + }; + + switch (collisionTemplate) { + case CollisionTemplate::Default: { + vf::gpu::GPUCollisionParameter kernelParameter = getCollisionParameter(para, level, indices, size_indices); + vf::gpu::runCollision<decltype(collision), turbulenceModel, false, false><<<cudaGrid.grid, cudaGrid.threads, 0, stream>>>(collision, kernelParameter); + + break; + } + case CollisionTemplate::WriteMacroVars: { + vf::gpu::GPUCollisionParameter kernelParameter = getCollisionParameter(para, level, indices, size_indices); + vf::gpu::runCollision<decltype(collision), turbulenceModel, true, false><<<cudaGrid.grid, cudaGrid.threads, 0, stream>>>(collision, kernelParameter); + + break; + } + case CollisionTemplate::SubDomainBorder: + case CollisionTemplate::AllFeatures: { + vf::gpu::GPUCollisionParameter kernelParameter = getCollisionParameter(para, level, indices, size_indices); + vf::gpu::runCollision<decltype(collision), turbulenceModel, true, true><<<cudaGrid.grid, cudaGrid.threads, 0, stream>>>(collision, kernelParameter); + + break; + } + case CollisionTemplate::ApplyBodyForce: { + vf::gpu::GPUCollisionParameter kernelParameter = getCollisionParameter(para, level, indices, size_indices); + vf::gpu::runCollision<decltype(collision), turbulenceModel, false, true><<<cudaGrid.grid, cudaGrid.threads, 0, stream>>>(collision, kernelParameter); + + break; + } + default: + throw std::runtime_error("Invalid CollisionTemplate in CumulantK17::runOnIndices()"); + break; + } + + getLastCudaError("K17CompressibleNavierStokes_Device execution failed"); +} + +template <vf::lbm::TurbulenceModel turbulenceModel> +K17CompressibleNavierStokes<turbulenceModel>::K17CompressibleNavierStokes(std::shared_ptr<Parameter> para, int level) : KernelImp(para, level) +{ + myPreProcessorTypes.push_back(InitCompSP27); + + this->cudaGrid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); + this->kernelUsesFluidNodeIndices = true; + + VF_LOG_INFO("Using turbulence model: {}", turbulenceModel); +} + +template class K17CompressibleNavierStokes<vf::lbm::TurbulenceModel::AMD>; +template class K17CompressibleNavierStokes<vf::lbm::TurbulenceModel::Smagorinsky>; +template class K17CompressibleNavierStokes<vf::lbm::TurbulenceModel::QR>; +template class K17CompressibleNavierStokes<vf::lbm::TurbulenceModel::None>; diff --git a/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokes.h b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokes.h new file mode 100644 index 0000000000000000000000000000000000000000..376d6eab87760dcbd7d2c607c913c1a7bb8b911c --- /dev/null +++ b/src/gpu/core/Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokes.h @@ -0,0 +1,24 @@ +#ifndef GPU_K17CompressibleNavierStokes_H +#define GPU_K17CompressibleNavierStokes_H + +#include "Kernel/KernelImp.h" + +#include <lbm/collision/TurbulentViscosity.h> + +class Parameter; + +template <vf::lbm::TurbulenceModel turbulenceModel> +class K17CompressibleNavierStokes : public KernelImp +{ +public: + static std::shared_ptr<K17CompressibleNavierStokes<turbulenceModel>> getNewInstance(std::shared_ptr<Parameter> para, + int level); + void run() override; + void runOnIndices(const unsigned int* indices, unsigned int size_indices, CollisionTemplate collisionTemplate, + CudaStreamIndex streamIndex) override; + +private: + K17CompressibleNavierStokes(std::shared_ptr<Parameter> para, int level); +}; + +#endif diff --git a/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/F16/F16IncompressibleAdvectionDiffusion.cu b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/F16/F16IncompressibleAdvectionDiffusion.cu new file mode 100644 index 0000000000000000000000000000000000000000..de5bf40679472c586a6273554f17fa3d30074506 --- /dev/null +++ b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/F16/F16IncompressibleAdvectionDiffusion.cu @@ -0,0 +1,41 @@ +#include "F16IncompressibleAdvectionDiffusion.h" + +#include "F16IncompressibleAdvectionDiffusion_Device.cuh" +#include "Parameter/Parameter.h" +#include <cuda_helper/CudaGrid.h> + +std::shared_ptr<F16IncompressibleAdvectionDiffusion> F16IncompressibleAdvectionDiffusion::getNewInstance(std::shared_ptr<Parameter> para, int level) +{ + return std::shared_ptr<F16IncompressibleAdvectionDiffusion>(new F16IncompressibleAdvectionDiffusion(para, level)); +} + +void F16IncompressibleAdvectionDiffusion::run() +{ + vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParD(level)->numberofthreads, para->getParD(level)->numberOfNodes); + + F16IncompressibleAdvectionDiffusion_Device<<< grid.grid, grid.threads >>>( + para->getParD(level)->diffusivity, + para->getParD(level)->typeOfGridNode, + para->getParD(level)->neighborX, + para->getParD(level)->neighborY, + para->getParD(level)->neighborZ, + para->getParD(level)->distributions.f[0], + para->getParD(level)->distributionsAD.f[0], + para->getParD(level)->numberOfNodes, + para->getParD(level)->forcing, + para->getParD(level)->isEvenTimestep); + getLastCudaError("F16IncompressibleAdvectionDiffusion_Device execution failed"); +} + +F16IncompressibleAdvectionDiffusion::F16IncompressibleAdvectionDiffusion(std::shared_ptr<Parameter> para, int level) +{ + this->para = para; + this->level = level; + + myPreProcessorTypes.push_back(InitIncompAD27); + +} + +F16IncompressibleAdvectionDiffusion::F16IncompressibleAdvectionDiffusion() +{ +} diff --git a/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/F16/F16IncompressibleAdvectionDiffusion.h b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/F16/F16IncompressibleAdvectionDiffusion.h new file mode 100644 index 0000000000000000000000000000000000000000..e7ebfac181a4f1cbeca97dc9349ef6107560730d --- /dev/null +++ b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/F16/F16IncompressibleAdvectionDiffusion.h @@ -0,0 +1,17 @@ +#ifndef F16IncompressibleAdvectionDiffusion_H +#define F16IncompressibleAdvectionDiffusion_H + +#include "Kernel/AdvectionDiffusionKernel.h" + + +class F16IncompressibleAdvectionDiffusion : public AdvectionDiffusionKernel +{ +public: + static std::shared_ptr<F16IncompressibleAdvectionDiffusion> getNewInstance(std::shared_ptr<Parameter> para, int level); + void run(); + +private: + F16IncompressibleAdvectionDiffusion(); + F16IncompressibleAdvectionDiffusion(std::shared_ptr< Parameter> para, int level); +}; +#endif \ No newline at end of file diff --git a/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/F16/F16IncompressibleAdvectionDiffusion_Device.cu b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/F16/F16IncompressibleAdvectionDiffusion_Device.cu new file mode 100644 index 0000000000000000000000000000000000000000..07cbe4adbb623aff3fecca992de7b5eb9f080bf0 --- /dev/null +++ b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/F16/F16IncompressibleAdvectionDiffusion_Device.cu @@ -0,0 +1,475 @@ +#include "LBM/LB.h" +#include "lbm/constants/D3Q27.h" +#include <lbm/ChimeraTransformation.h> +#include <basics/constants/NumericConstants.h> + +using namespace vf::basics::constant; +using namespace vf::lbm; +using namespace vf::lbm::dir; +#include "math.h" + +__global__ void F16IncompressibleAdvectionDiffusion_Device( + real omegaDiffusivity, + uint* typeOfGridNode, + uint* neighborX, + uint* neighborY, + uint* neighborZ, + real* distributions, + real* distributionsAD, + unsigned long long numberOfLBnodes, + real* forces, + bool isEvenTimestep) +{ + ////////////////////////////////////////////////////////////////////////// + //! Cumulant K17 Kernel is based on \ref + //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> + //! and \ref + //! <a href="https://doi.org/10.1016/j.jcp.2017.07.004"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.07.004 ]</b></a> + //! + //! The cumulant kernel is executed in the following steps + //! + //////////////////////////////////////////////////////////////////////////////// + //! - Get node index coordinates from threadIdx, blockIdx, blockDim and gridDim. + //! + 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; + + ////////////////////////////////////////////////////////////////////////// + // run for all indices in size_Mat and fluid nodes + if ((k < numberOfLBnodes) && (typeOfGridNode[k] == GEO_FLUID)) + { + ////////////////////////////////////////////////////////////////////////// + //! - Read distributions: style of reading and writing the distributions from/to stored arrays dependent on timestep is based on the esoteric twist algorithm \ref + //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> + //! + Distributions27 dist; + if (isEvenTimestep) + { + dist.f[dP00] = &distributions[dP00 * numberOfLBnodes]; + dist.f[dM00] = &distributions[dM00 * numberOfLBnodes]; + dist.f[d0P0] = &distributions[d0P0 * numberOfLBnodes]; + dist.f[d0M0] = &distributions[d0M0 * numberOfLBnodes]; + dist.f[d00P] = &distributions[d00P * numberOfLBnodes]; + dist.f[d00M] = &distributions[d00M * numberOfLBnodes]; + dist.f[dPP0] = &distributions[dPP0 * numberOfLBnodes]; + dist.f[dMM0] = &distributions[dMM0 * numberOfLBnodes]; + dist.f[dPM0] = &distributions[dPM0 * numberOfLBnodes]; + dist.f[dMP0] = &distributions[dMP0 * numberOfLBnodes]; + dist.f[dP0P] = &distributions[dP0P * numberOfLBnodes]; + dist.f[dM0M] = &distributions[dM0M * numberOfLBnodes]; + dist.f[dP0M] = &distributions[dP0M * numberOfLBnodes]; + dist.f[dM0P] = &distributions[dM0P * numberOfLBnodes]; + dist.f[d0PP] = &distributions[d0PP * numberOfLBnodes]; + dist.f[d0MM] = &distributions[d0MM * numberOfLBnodes]; + dist.f[d0PM] = &distributions[d0PM * numberOfLBnodes]; + dist.f[d0MP] = &distributions[d0MP * numberOfLBnodes]; + dist.f[d000] = &distributions[d000 * numberOfLBnodes]; + dist.f[dPPP] = &distributions[dPPP * numberOfLBnodes]; + dist.f[dMMP] = &distributions[dMMP * numberOfLBnodes]; + dist.f[dPMP] = &distributions[dPMP * numberOfLBnodes]; + dist.f[dMPP] = &distributions[dMPP * numberOfLBnodes]; + dist.f[dPPM] = &distributions[dPPM * numberOfLBnodes]; + dist.f[dMMM] = &distributions[dMMM * numberOfLBnodes]; + dist.f[dPMM] = &distributions[dPMM * numberOfLBnodes]; + dist.f[dMPM] = &distributions[dMPM * numberOfLBnodes]; + } + else + { + dist.f[dM00] = &distributions[dP00 * numberOfLBnodes]; + dist.f[dP00] = &distributions[dM00 * numberOfLBnodes]; + dist.f[d0M0] = &distributions[d0P0 * numberOfLBnodes]; + dist.f[d0P0] = &distributions[d0M0 * numberOfLBnodes]; + dist.f[d00M] = &distributions[d00P * numberOfLBnodes]; + dist.f[d00P] = &distributions[d00M * numberOfLBnodes]; + dist.f[dMM0] = &distributions[dPP0 * numberOfLBnodes]; + dist.f[dPP0] = &distributions[dMM0 * numberOfLBnodes]; + dist.f[dMP0] = &distributions[dPM0 * numberOfLBnodes]; + dist.f[dPM0] = &distributions[dMP0 * numberOfLBnodes]; + dist.f[dM0M] = &distributions[dP0P * numberOfLBnodes]; + dist.f[dP0P] = &distributions[dM0M * numberOfLBnodes]; + dist.f[dM0P] = &distributions[dP0M * numberOfLBnodes]; + dist.f[dP0M] = &distributions[dM0P * numberOfLBnodes]; + dist.f[d0MM] = &distributions[d0PP * numberOfLBnodes]; + dist.f[d0PP] = &distributions[d0MM * numberOfLBnodes]; + dist.f[d0MP] = &distributions[d0PM * numberOfLBnodes]; + dist.f[d0PM] = &distributions[d0MP * numberOfLBnodes]; + dist.f[d000] = &distributions[d000 * numberOfLBnodes]; + dist.f[dMMM] = &distributions[dPPP * numberOfLBnodes]; + dist.f[dPPM] = &distributions[dMMP * numberOfLBnodes]; + dist.f[dMPM] = &distributions[dPMP * numberOfLBnodes]; + dist.f[dPMM] = &distributions[dMPP * numberOfLBnodes]; + dist.f[dMMP] = &distributions[dPPM * numberOfLBnodes]; + dist.f[dPPP] = &distributions[dMMM * numberOfLBnodes]; + dist.f[dMPP] = &distributions[dPMM * numberOfLBnodes]; + dist.f[dPMP] = &distributions[dMPM * numberOfLBnodes]; + } + //////////////////////////////////////////////////////////////////////////////// + Distributions27 distAD; + if (isEvenTimestep) + { + distAD.f[dP00] = &distributionsAD[dP00 * numberOfLBnodes]; + distAD.f[dM00] = &distributionsAD[dM00 * numberOfLBnodes]; + distAD.f[d0P0] = &distributionsAD[d0P0 * numberOfLBnodes]; + distAD.f[d0M0] = &distributionsAD[d0M0 * numberOfLBnodes]; + distAD.f[d00P] = &distributionsAD[d00P * numberOfLBnodes]; + distAD.f[d00M] = &distributionsAD[d00M * numberOfLBnodes]; + distAD.f[dPP0] = &distributionsAD[dPP0 * numberOfLBnodes]; + distAD.f[dMM0] = &distributionsAD[dMM0 * numberOfLBnodes]; + distAD.f[dPM0] = &distributionsAD[dPM0 * numberOfLBnodes]; + distAD.f[dMP0] = &distributionsAD[dMP0 * numberOfLBnodes]; + distAD.f[dP0P] = &distributionsAD[dP0P * numberOfLBnodes]; + distAD.f[dM0M] = &distributionsAD[dM0M * numberOfLBnodes]; + distAD.f[dP0M] = &distributionsAD[dP0M * numberOfLBnodes]; + distAD.f[dM0P] = &distributionsAD[dM0P * numberOfLBnodes]; + distAD.f[d0PP] = &distributionsAD[d0PP * numberOfLBnodes]; + distAD.f[d0MM] = &distributionsAD[d0MM * numberOfLBnodes]; + distAD.f[d0PM] = &distributionsAD[d0PM * numberOfLBnodes]; + distAD.f[d0MP] = &distributionsAD[d0MP * numberOfLBnodes]; + distAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes]; + distAD.f[dPPP] = &distributionsAD[dPPP * numberOfLBnodes]; + distAD.f[dMMP] = &distributionsAD[dMMP * numberOfLBnodes]; + distAD.f[dPMP] = &distributionsAD[dPMP * numberOfLBnodes]; + distAD.f[dMPP] = &distributionsAD[dMPP * numberOfLBnodes]; + distAD.f[dPPM] = &distributionsAD[dPPM * numberOfLBnodes]; + distAD.f[dMMM] = &distributionsAD[dMMM * numberOfLBnodes]; + distAD.f[dPMM] = &distributionsAD[dPMM * numberOfLBnodes]; + distAD.f[dMPM] = &distributionsAD[dMPM * numberOfLBnodes]; + } + else + { + distAD.f[dM00] = &distributionsAD[dP00 * numberOfLBnodes]; + distAD.f[dP00] = &distributionsAD[dM00 * numberOfLBnodes]; + distAD.f[d0M0] = &distributionsAD[d0P0 * numberOfLBnodes]; + distAD.f[d0P0] = &distributionsAD[d0M0 * numberOfLBnodes]; + distAD.f[d00M] = &distributionsAD[d00P * numberOfLBnodes]; + distAD.f[d00P] = &distributionsAD[d00M * numberOfLBnodes]; + distAD.f[dMM0] = &distributionsAD[dPP0 * numberOfLBnodes]; + distAD.f[dPP0] = &distributionsAD[dMM0 * numberOfLBnodes]; + distAD.f[dMP0] = &distributionsAD[dPM0 * numberOfLBnodes]; + distAD.f[dPM0] = &distributionsAD[dMP0 * numberOfLBnodes]; + distAD.f[dM0M] = &distributionsAD[dP0P * numberOfLBnodes]; + distAD.f[dP0P] = &distributionsAD[dM0M * numberOfLBnodes]; + distAD.f[dM0P] = &distributionsAD[dP0M * numberOfLBnodes]; + distAD.f[dP0M] = &distributionsAD[dM0P * numberOfLBnodes]; + distAD.f[d0MM] = &distributionsAD[d0PP * numberOfLBnodes]; + distAD.f[d0PP] = &distributionsAD[d0MM * numberOfLBnodes]; + distAD.f[d0MP] = &distributionsAD[d0PM * numberOfLBnodes]; + distAD.f[d0PM] = &distributionsAD[d0MP * numberOfLBnodes]; + distAD.f[d000] = &distributionsAD[d000 * numberOfLBnodes]; + distAD.f[dMMM] = &distributionsAD[dPPP * numberOfLBnodes]; + distAD.f[dPPM] = &distributionsAD[dMMP * numberOfLBnodes]; + distAD.f[dMPM] = &distributionsAD[dPMP * numberOfLBnodes]; + distAD.f[dPMM] = &distributionsAD[dMPP * numberOfLBnodes]; + distAD.f[dMMP] = &distributionsAD[dPPM * numberOfLBnodes]; + distAD.f[dPPP] = &distributionsAD[dMMM * numberOfLBnodes]; + distAD.f[dMPP] = &distributionsAD[dPMM * numberOfLBnodes]; + distAD.f[dPMP] = &distributionsAD[dMPM * numberOfLBnodes]; + } + //////////////////////////////////////////////////////////////////////////////// + //! - Set neighbor indices (necessary for indirect addressing) + uint kw = neighborX[k]; + uint ks = neighborY[k]; + uint kb = neighborZ[k]; + uint ksw = neighborY[kw]; + uint kbw = neighborZ[kw]; + uint kbs = neighborZ[ks]; + uint kbsw = neighborZ[ksw]; + //////////////////////////////////////////////////////////////////////////////////// + //! - Set local distributions Fluid + //! + real fcbb = (dist.f[dP00])[k]; + real fabb = (dist.f[dM00])[kw]; + real fbcb = (dist.f[d0P0])[k]; + real fbab = (dist.f[d0M0])[ks]; + real fbbc = (dist.f[d00P])[k]; + real fbba = (dist.f[d00M])[kb]; + real fccb = (dist.f[dPP0])[k]; + real faab = (dist.f[dMM0])[ksw]; + real fcab = (dist.f[dPM0])[ks]; + real facb = (dist.f[dMP0])[kw]; + real fcbc = (dist.f[dP0P])[k]; + real faba = (dist.f[dM0M])[kbw]; + real fcba = (dist.f[dP0M])[kb]; + real fabc = (dist.f[dM0P])[kw]; + real fbcc = (dist.f[d0PP])[k]; + real fbaa = (dist.f[d0MM])[kbs]; + real fbca = (dist.f[d0PM])[kb]; + real fbac = (dist.f[d0MP])[ks]; + real fbbb = (dist.f[d000])[k]; + real fccc = (dist.f[dPPP])[k]; + real faac = (dist.f[dMMP])[ksw]; + real fcac = (dist.f[dPMP])[ks]; + real facc = (dist.f[dMPP])[kw]; + real fcca = (dist.f[dPPM])[kb]; + real faaa = (dist.f[dMMM])[kbsw]; + real fcaa = (dist.f[dPMM])[kbs]; + real faca = (dist.f[dMPM])[kbw]; + //////////////////////////////////////////////////////////////////////////////////// + //! - Set local distributions Advection Diffusion + //! + real mfcbb = (distAD.f[dP00])[k]; + real mfabb = (distAD.f[dM00])[kw]; + real mfbcb = (distAD.f[d0P0])[k]; + real mfbab = (distAD.f[d0M0])[ks]; + real mfbbc = (distAD.f[d00P])[k]; + real mfbba = (distAD.f[d00M])[kb]; + real mfccb = (distAD.f[dPP0])[k]; + real mfaab = (distAD.f[dMM0])[ksw]; + real mfcab = (distAD.f[dPM0])[ks]; + real mfacb = (distAD.f[dMP0])[kw]; + real mfcbc = (distAD.f[dP0P])[k]; + real mfaba = (distAD.f[dM0M])[kbw]; + real mfcba = (distAD.f[dP0M])[kb]; + real mfabc = (distAD.f[dM0P])[kw]; + real mfbcc = (distAD.f[d0PP])[k]; + real mfbaa = (distAD.f[d0MM])[kbs]; + real mfbca = (distAD.f[d0PM])[kb]; + real mfbac = (distAD.f[d0MP])[ks]; + real mfbbb = (distAD.f[d000])[k]; + real mfccc = (distAD.f[dPPP])[k]; + real mfaac = (distAD.f[dMMP])[ksw]; + real mfcac = (distAD.f[dPMP])[ks]; + real mfacc = (distAD.f[dMPP])[kw]; + real mfcca = (distAD.f[dPPM])[kb]; + real mfaaa = (distAD.f[dMMM])[kbsw]; + real mfcaa = (distAD.f[dPMM])[kbs]; + real mfaca = (distAD.f[dMPM])[kbw]; + //////////////////////////////////////////////////////////////////////////////////// + //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref + //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> + //! + //////////////////////////////////////////////////////////////////////////////////// + // fluid component + real drhoFluid = + ((((fccc + faaa) + (faca + fcac)) + ((facc + fcaa) + (faac + fcca))) + + (((fbac + fbca) + (fbaa + fbcc)) + ((fabc + fcba) + (faba + fcbc)) + ((facb + fcab) + (faab + fccb))) + + ((fabb + fcbb) + (fbab + fbcb) + (fbba + fbbc))) + fbbb; + + real vvx = + ((((fccc - faaa) + (fcac - faca)) + ((fcaa - facc) + (fcca - faac))) + + (((fcba - fabc) + (fcbc - faba)) + ((fcab - facb) + (fccb - faab))) + + (fcbb - fabb)); + real vvy = + ((((fccc - faaa) + (faca - fcac)) + ((facc - fcaa) + (fcca - faac))) + + (((fbca - fbac) + (fbcc - fbaa)) + ((facb - fcab) + (fccb - faab))) + + (fbcb - fbab)); + real vvz = + ((((fccc - faaa) + (fcac - faca)) + ((facc - fcaa) + (faac - fcca))) + + (((fbac - fbca) + (fbcc - fbaa)) + ((fabc - fcba) + (fcbc - faba))) + + (fbbc - fbba)); + //////////////////////////////////////////////////////////////////////////////////// + // second component + real rho = + ((((mfccc + mfaaa) + (mfaca + mfcac)) + ((mfacc + mfcaa) + (mfaac + mfcca))) + + (((mfbac + mfbca) + (mfbaa + mfbcc)) + ((mfabc + mfcba) + (mfaba + mfcbc)) + ((mfacb + mfcab) + (mfaab + mfccb))) + + ((mfabb + mfcbb) + (mfbab + mfbcb) + (mfbba + mfbbc))) + mfbbb; + + //////////////////////////////////////////////////////////////////////////////////// + //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref + //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> + //! + real fx = forces[0]; + real fy = forces[1]; + real fz = -rho*forces[2]; + vvx += fx*c1o2; + vvy += fy*c1o2; + vvz += fz*c1o2; + //////////////////////////////////////////////////////////////////////////////////// + // calculate the square of velocities for this lattice node + real vx2 = vvx*vvx; + real vy2 = vvy*vvy; + real vz2 = vvz*vvz; + //////////////////////////////////////////////////////////////////////////////////// + //real omegaDiffusivity = c2o1 / (c6o1 * diffusivity + c1o1); + //////////////////////////////////////////////////////////////////////////////////// + //! - Chimera transform from distributions to central moments as defined in Eq. (43)-(45) in \ref + //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> + //! + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + forwardChimera(mfaaa, mfaab, mfaac, vvz, vz2); + forwardChimera(mfaba, mfabb, mfabc, vvz, vz2); + forwardChimera(mfaca, mfacb, mfacc, vvz, vz2); + forwardChimera(mfbaa, mfbab, mfbac, vvz, vz2); + forwardChimera(mfbba, mfbbb, mfbbc, vvz, vz2); + forwardChimera(mfbca, mfbcb, mfbcc, vvz, vz2); + forwardChimera(mfcaa, mfcab, mfcac, vvz, vz2); + forwardChimera(mfcba, mfcbb, mfcbc, vvz, vz2); + forwardChimera(mfcca, mfccb, mfccc, vvz, vz2); + + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + forwardChimera(mfaaa, mfaba, mfaca, vvy, vy2); + forwardChimera(mfaab, mfabb, mfacb, vvy, vy2); + forwardChimera(mfaac, mfabc, mfacc, vvy, vy2); + forwardChimera(mfbaa, mfbba, mfbca, vvy, vy2); + forwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); + forwardChimera(mfbac, mfbbc, mfbcc, vvy, vy2); + forwardChimera(mfcaa, mfcba, mfcca, vvy, vy2); + forwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); + forwardChimera(mfcac, mfcbc, mfccc, vvy, vy2); + + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + forwardChimera(mfaaa, mfbaa, mfcaa, vvx, vx2); + forwardChimera(mfaba, mfbba, mfcba, vvx, vx2); + forwardChimera(mfaca, mfbca, mfcca, vvx, vx2); + forwardChimera(mfaab, mfbab, mfcab, vvx, vx2); + forwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); + forwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); + forwardChimera(mfaac, mfbac, mfcac, vvx, vx2); + forwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); + forwardChimera(mfacc, mfbcc, mfccc, vvx, vx2); + + //////////////////////////////////////////////////////////////////////////////////// + //! - Factorized central moments for Advection Diffusion Equation - Eq. (15)-(16) in \ref + //! <a href="https://doi.org/10.1016/j.advwatres.2015.09.015"><b>[ X. Yang et al. (2016), DOI: 10.1016/j.advwatres.2015.09.015]</b></a> + //! + + // linearized orthogonalization of 3rd order central moments + real Mabc = mfabc - mfaba*c1o3; + real Mbca = mfbca - mfbaa*c1o3; + real Macb = mfacb - mfaab*c1o3; + real Mcba = mfcba - mfaba*c1o3; + real Mcab = mfcab - mfaab*c1o3; + real Mbac = mfbac - mfbaa*c1o3; + // linearized orthogonalization of 5th order central moments + real Mcbc = mfcbc - mfaba*c1o9; + real Mbcc = mfbcc - mfbaa*c1o9; + real Mccb = mfccb - mfaab*c1o9; + + // collision of 1st order moments + mfbaa *= c1o1 - omegaDiffusivity; + mfaba *= c1o1 - omegaDiffusivity; + mfaab *= c1o1 - omegaDiffusivity; + + // equilibration of 3rd order moments + Mabc = c0o1; + Mbca = c0o1; + Macb = c0o1; + Mcba = c0o1; + Mcab = c0o1; + Mbac = c0o1; + mfbbb = c0o1; + + // equilibration of 5th order moments + Mcbc = c0o1; + Mbcc = c0o1; + Mccb = c0o1; + + // equilibration of 2nd order moments + mfbba = c0o1; + mfbab = c0o1; + mfabb = c0o1; + + mfcaa = c1o3 * rho; + mfaca = c1o3 * rho; + mfaac = c1o3 * rho; + + // equilibration of 4th order moments + mfacc = c1o9 * rho; + mfcac = c1o9 * rho; + mfcca = c1o9 * rho; + + mfcbb = c0o1; + mfbcb = c0o1; + mfbbc = c0o1; + + // equilibration of 6th order moment + mfccc = c1o27 * rho; + + // from linearized orthogonalization 3rd order central moments to central moments + mfabc = Mabc + mfaba*c1o3; + mfbca = Mbca + mfbaa*c1o3; + mfacb = Macb + mfaab*c1o3; + mfcba = Mcba + mfaba*c1o3; + mfcab = Mcab + mfaab*c1o3; + mfbac = Mbac + mfbaa*c1o3; + + // from linearized orthogonalization 5th order central moments to central moments + mfcbc = Mcbc + mfaba*c1o9; + mfbcc = Mbcc + mfbaa*c1o9; + mfccb = Mccb + mfaab*c1o9; + + //////////////////////////////////////////////////////////////////////////////////// + //! - Chimera transform from central moments to distributions as defined in Eq. (88)-(96) in \ref + //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa.2015.05.001 ]</b></a> + //! + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + backwardChimera(mfaaa, mfbaa, mfcaa, vvx, vx2); + backwardChimera(mfaba, mfbba, mfcba, vvx, vx2); + backwardChimera(mfaca, mfbca, mfcca, vvx, vx2); + backwardChimera(mfaab, mfbab, mfcab, vvx, vx2); + backwardChimera(mfabb, mfbbb, mfcbb, vvx, vx2); + backwardChimera(mfacb, mfbcb, mfccb, vvx, vx2); + backwardChimera(mfaac, mfbac, mfcac, vvx, vx2); + backwardChimera(mfabc, mfbbc, mfcbc, vvx, vx2); + backwardChimera(mfacc, mfbcc, mfccc, vvx, vx2); + + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + backwardChimera(mfaaa, mfaba, mfaca, vvy, vy2); + backwardChimera(mfaab, mfabb, mfacb, vvy, vy2); + backwardChimera(mfaac, mfabc, mfacc, vvy, vy2); + backwardChimera(mfbaa, mfbba, mfbca, vvy, vy2); + backwardChimera(mfbab, mfbbb, mfbcb, vvy, vy2); + backwardChimera(mfbac, mfbbc, mfbcc, vvy, vy2); + backwardChimera(mfcaa, mfcba, mfcca, vvy, vy2); + backwardChimera(mfcab, mfcbb, mfccb, vvy, vy2); + backwardChimera(mfcac, mfcbc, mfccc, vvy, vy2); + + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + backwardChimera(mfaaa, mfaab, mfaac, vvz, vz2); + backwardChimera(mfaba, mfabb, mfabc, vvz, vz2); + backwardChimera(mfaca, mfacb, mfacc, vvz, vz2); + backwardChimera(mfbaa, mfbab, mfbac, vvz, vz2); + backwardChimera(mfbba, mfbbb, mfbbc, vvz, vz2); + backwardChimera(mfbca, mfbcb, mfbcc, vvz, vz2); + backwardChimera(mfcaa, mfcab, mfcac, vvz, vz2); + backwardChimera(mfcba, mfcbb, mfcbc, vvz, vz2); + backwardChimera(mfcca, mfccb, mfccc, vvz, vz2); + + //////////////////////////////////////////////////////////////////////////////////// + //! - Write distributions: style of reading and writing the distributions from/to + //! stored arrays dependent on timestep is based on the esoteric twist algorithm + //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> + //! + (distAD.f[dP00])[k ] = mfabb; + (distAD.f[dM00])[kw ] = mfcbb; + (distAD.f[d0P0])[k ] = mfbab; + (distAD.f[d0M0])[ks ] = mfbcb; + (distAD.f[d00P])[k ] = mfbba; + (distAD.f[d00M])[kb ] = mfbbc; + (distAD.f[dPP0])[k ] = mfaab; + (distAD.f[dMM0])[ksw ] = mfccb; + (distAD.f[dPM0])[ks ] = mfacb; + (distAD.f[dMP0])[kw ] = mfcab; + (distAD.f[dP0P])[k ] = mfaba; + (distAD.f[dM0M])[kbw ] = mfcbc; + (distAD.f[dP0M])[kb ] = mfabc; + (distAD.f[dM0P])[kw ] = mfcba; + (distAD.f[d0PP])[k ] = mfbaa; + (distAD.f[d0MM])[kbs ] = mfbcc; + (distAD.f[d0PM])[kb ] = mfbac; + (distAD.f[d0MP])[ks ] = mfbca; + (distAD.f[d000])[k ] = mfbbb; + (distAD.f[dPPP])[k ] = mfaaa; + (distAD.f[dPMP])[ks ] = mfaca; + (distAD.f[dPPM])[kb ] = mfaac; + (distAD.f[dPMM])[kbs ] = mfacc; + (distAD.f[dMPP])[kw ] = mfcaa; + (distAD.f[dMMP])[ksw ] = mfcca; + (distAD.f[dMPM])[kbw ] = mfcac; + (distAD.f[dMMM])[kbsw] = mfccc; + } +} +//////////////////////////////////////////////////////////////////////////////// + diff --git a/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/F16/F16IncompressibleAdvectionDiffusion_Device.cuh b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/F16/F16IncompressibleAdvectionDiffusion_Device.cuh new file mode 100644 index 0000000000000000000000000000000000000000..519fa3e5158a756a53b61800b9fb1bd3c0bf555f --- /dev/null +++ b/src/gpu/core/Kernel/Incompressible/AdvectionDiffusion/F16/F16IncompressibleAdvectionDiffusion_Device.cuh @@ -0,0 +1,18 @@ +#ifndef F16IncompressibleAdvectionDiffusion_Device_H +#define F16IncompressibleAdvectionDiffusion_Device_H + +#include <DataTypes.h> +#include <curand.h> + +__global__ void F16IncompressibleAdvectionDiffusion_Device(real diffusivity, + unsigned int* bcMatD, + unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + real* DDStart, + real* DD27, + unsigned long long numberOfLBnodes, + real* forces, + bool EvenOrOdd); + +#endif \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus.cu rename to src/gpu/core/Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus.cu diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus.h b/src/gpu/core/Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus.h rename to src/gpu/core/Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus.h diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus_Device.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus_Device.cu similarity index 77% rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus_Device.cu rename to src/gpu/core/Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus_Device.cu index 49764bc07bc910911dff0668105252f75d062205..626f33bae48e880a14734281c884a4e0b309fac1 100644 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus_Device.cu +++ b/src/gpu/core/Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus_Device.cu @@ -37,63 +37,63 @@ __global__ void B15IncompressibleNavierStokesBGKplus_Device(real omega, Distributions27 D; if (EvenOrOdd == true) { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; + D.f[dP00] = &DDStart[dP00 * size_Mat]; + D.f[dM00] = &DDStart[dM00 * size_Mat]; + D.f[d0P0] = &DDStart[d0P0 * size_Mat]; + D.f[d0M0] = &DDStart[d0M0 * size_Mat]; + D.f[d00P] = &DDStart[d00P * size_Mat]; + D.f[d00M] = &DDStart[d00M * size_Mat]; + D.f[dPP0] = &DDStart[dPP0 * size_Mat]; + D.f[dMM0] = &DDStart[dMM0 * size_Mat]; + D.f[dPM0] = &DDStart[dPM0 * size_Mat]; + D.f[dMP0] = &DDStart[dMP0 * size_Mat]; + D.f[dP0P] = &DDStart[dP0P * size_Mat]; + D.f[dM0M] = &DDStart[dM0M * size_Mat]; + D.f[dP0M] = &DDStart[dP0M * size_Mat]; + D.f[dM0P] = &DDStart[dM0P * size_Mat]; + D.f[d0PP] = &DDStart[d0PP * size_Mat]; + D.f[d0MM] = &DDStart[d0MM * size_Mat]; + D.f[d0PM] = &DDStart[d0PM * size_Mat]; + D.f[d0MP] = &DDStart[d0MP * size_Mat]; + D.f[d000] = &DDStart[d000 * size_Mat]; + D.f[dPPP] = &DDStart[dPPP * size_Mat]; + D.f[dMMP] = &DDStart[dMMP * size_Mat]; + D.f[dPMP] = &DDStart[dPMP * size_Mat]; + D.f[dMPP] = &DDStart[dMPP * size_Mat]; + D.f[dPPM] = &DDStart[dPPM * size_Mat]; + D.f[dMMM] = &DDStart[dMMM * size_Mat]; + D.f[dPMM] = &DDStart[dPMM * size_Mat]; + D.f[dMPM] = &DDStart[dMPM * size_Mat]; } else { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; + D.f[dM00] = &DDStart[dP00 * size_Mat]; + D.f[dP00] = &DDStart[dM00 * size_Mat]; + D.f[d0M0] = &DDStart[d0P0 * size_Mat]; + D.f[d0P0] = &DDStart[d0M0 * size_Mat]; + D.f[d00M] = &DDStart[d00P * size_Mat]; + D.f[d00P] = &DDStart[d00M * size_Mat]; + D.f[dMM0] = &DDStart[dPP0 * size_Mat]; + D.f[dPP0] = &DDStart[dMM0 * size_Mat]; + D.f[dMP0] = &DDStart[dPM0 * size_Mat]; + D.f[dPM0] = &DDStart[dMP0 * size_Mat]; + D.f[dM0M] = &DDStart[dP0P * size_Mat]; + D.f[dP0P] = &DDStart[dM0M * size_Mat]; + D.f[dM0P] = &DDStart[dP0M * size_Mat]; + D.f[dP0M] = &DDStart[dM0P * size_Mat]; + D.f[d0MM] = &DDStart[d0PP * size_Mat]; + D.f[d0PP] = &DDStart[d0MM * size_Mat]; + D.f[d0MP] = &DDStart[d0PM * size_Mat]; + D.f[d0PM] = &DDStart[d0MP * size_Mat]; + D.f[d000] = &DDStart[d000 * size_Mat]; + D.f[dMMM] = &DDStart[dPPP * size_Mat]; + D.f[dPPM] = &DDStart[dMMP * size_Mat]; + D.f[dMPM] = &DDStart[dPMP * size_Mat]; + D.f[dPMM] = &DDStart[dMPP * size_Mat]; + D.f[dMMP] = &DDStart[dPPM * size_Mat]; + D.f[dPPP] = &DDStart[dMMM * size_Mat]; + D.f[dMPP] = &DDStart[dPMM * size_Mat]; + D.f[dPMP] = &DDStart[dMPM * size_Mat]; } //////////////////////////////////////////////////////////////////////////////// @@ -126,33 +126,33 @@ __global__ void B15IncompressibleNavierStokesBGKplus_Device(real omega, //unsigned int ktne = k; unsigned int kbsw = neighborZ[ksw]; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke - real mfabb = (D.f[DIR_M00])[kw];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn - real mfbab = (D.f[DIR_0M0])[ks];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt - real mfbba = (D.f[DIR_00M])[kb];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse - real mfacb = (D.f[DIR_MP0])[kw];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw - real mfcbc = (D.f[DIR_P0P])[k];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe - real mfabc = (D.f[DIR_M0P])[kw];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw - real mfbcc = (D.f[DIR_0PP])[k];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn - real mfbac = (D.f[DIR_0MP])[ks];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts - real mfbbb = (D.f[DIR_000])[k];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero - real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw - real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse - real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw - real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw + real mfcbb = (D.f[dP00])[k];//[ke ];// + c2over27 ;(D.f[dP00])[k ];//ke + real mfabb = (D.f[dM00])[kw];//[kw ];// + c2over27 ;(D.f[dM00])[kw ]; + real mfbcb = (D.f[d0P0])[k];//[kn ];// + c2over27 ;(D.f[d0P0])[k ];//kn + real mfbab = (D.f[d0M0])[ks];//[ks ];// + c2over27 ;(D.f[d0M0])[ks ]; + real mfbbc = (D.f[d00P])[k];//[kt ];// + c2over27 ;(D.f[d00P])[k ];//kt + real mfbba = (D.f[d00M])[kb];//[kb ];// + c2over27 ;(D.f[d00M])[kb ]; + real mfccb = (D.f[dPP0])[k];//[kne ];// + c1over54 ;(D.f[dPP0])[k ];//kne + real mfaab = (D.f[dMM0])[ksw];//[ksw ];// + c1over54 ;(D.f[dMM0])[ksw]; + real mfcab = (D.f[dPM0])[ks];//[kse ];// + c1over54 ;(D.f[dPM0])[ks ];//kse + real mfacb = (D.f[dMP0])[kw];//[knw ];// + c1over54 ;(D.f[dMP0])[kw ];//knw + real mfcbc = (D.f[dP0P])[k];//[kte ];// + c1over54 ;(D.f[dP0P])[k ];//kte + real mfaba = (D.f[dM0M])[kbw];//[kbw ];// + c1over54 ;(D.f[dM0M])[kbw]; + real mfcba = (D.f[dP0M])[kb];//[kbe ];// + c1over54 ;(D.f[dP0M])[kb ];//kbe + real mfabc = (D.f[dM0P])[kw];//[ktw ];// + c1over54 ;(D.f[dM0P])[kw ];//ktw + real mfbcc = (D.f[d0PP])[k];//[ktn ];// + c1over54 ;(D.f[d0PP])[k ];//ktn + real mfbaa = (D.f[d0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[d0MM])[kbs]; + real mfbca = (D.f[d0PM])[kb];//[kbn ];// + c1over54 ;(D.f[d0PM])[kb ];//kbn + real mfbac = (D.f[d0MP])[ks];//[kts ];// + c1over54 ;(D.f[d0MP])[ks ];//kts + real mfbbb = (D.f[d000])[k];//[kzero];// + c8over27 ;(D.f[d000])[k ];//kzero + real mfccc = (D.f[dPPP])[k];//[ktne ];// + c1over216;(D.f[dPPP])[k ];//ktne + real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// + c1over216;(D.f[dMMP])[ksw];//ktsw + real mfcac = (D.f[dPMP])[ks];//[ktse ];// + c1over216;(D.f[dPMP])[ks ];//ktse + real mfacc = (D.f[dMPP])[kw];//[ktnw ];// + c1over216;(D.f[dMPP])[kw ];//ktnw + real mfcca = (D.f[dPPM])[kb];//[kbne ];// + c1over216;(D.f[dPPM])[kb ];//kbne + real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// + c1over216;(D.f[dMMM])[kbsw]; + real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// + c1over216;(D.f[dPMM])[kbs];//kbse + real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// + c1over216;(D.f[dMPM])[kbw];//kbnw //////////////////////////////////////////////////////////////////////////////////// //slow //real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + @@ -724,33 +724,33 @@ __global__ void B15IncompressibleNavierStokesBGKplus_Device(real omega, //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] - (D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] - (D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] - (D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] - (D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] - (D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] - (D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] - (D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] - (D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] - (D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] - (D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] - (D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] - (D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] - (D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] - (D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] - (D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] - (D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] - (D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] - (D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] - (D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] - (D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] - (D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] - (D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] - (D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] - (D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] - (D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] - (D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] + (D.f[dP00])[k] = mfabb;//(D.f[ dP00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ dP00 ])[k ] + (D.f[dM00])[kw] = mfcbb;//(D.f[ dM00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ dM00 ])[kw ] + (D.f[d0P0])[k] = mfbab;//(D.f[ d0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ d0P0 ])[k ] + (D.f[d0M0])[ks] = mfbcb;//(D.f[ d0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ d0M0 ])[ks ] + (D.f[d00P])[k] = mfbba;//(D.f[ d00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ d00P ])[k ] + (D.f[d00M])[kb] = mfbbc;//(D.f[ d00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ d00M ])[kb ] + (D.f[dPP0])[k] = mfaab;//(D.f[ dPP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ dPP0 ])[k ] + (D.f[dMM0])[ksw] = mfccb;//(D.f[ dMM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ dMM0 ])[ksw ] + (D.f[dPM0])[ks] = mfacb;//(D.f[ dPM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ dPM0 ])[ks ] + (D.f[dMP0])[kw] = mfcab;//(D.f[ dMP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ dMP0 ])[kw ] + (D.f[dP0P])[k] = mfaba;//(D.f[ dP0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ dP0P ])[k ] + (D.f[dM0M])[kbw] = mfcbc;//(D.f[ dM0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ dM0M ])[kbw ] + (D.f[dP0M])[kb] = mfabc;//(D.f[ dP0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ dP0M ])[kb ] + (D.f[dM0P])[kw] = mfcba;//(D.f[ dM0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ dM0P ])[kw ] + (D.f[d0PP])[k] = mfbaa;//(D.f[ d0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ d0PP ])[k ] + (D.f[d0MM])[kbs] = mfbcc;//(D.f[ d0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ d0MM ])[kbs ] + (D.f[d0PM])[kb] = mfbac;//(D.f[ d0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ d0PM ])[kb ] + (D.f[d0MP])[ks] = mfbca;//(D.f[ d0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ d0MP ])[ks ] + (D.f[d000])[k] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// - c8over27 ; (D.f[ d000])[k ] + (D.f[dPPP])[k] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ dPPP ])[k ] + (D.f[dPMP])[ks] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// - c1over216; (D.f[ dPMP ])[ks ] + (D.f[dPPM])[kb] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// - c1over216; (D.f[ dPPM ])[kb ] + (D.f[dPMM])[kbs] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// - c1over216; (D.f[ dPMM ])[kbs ] + (D.f[dMPP])[kw] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ dMPP ])[kw ] + (D.f[dMMP])[ksw] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ dMMP ])[ksw ] + (D.f[dMPM])[kbw] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ dMPM ])[kbw ] + (D.f[dMMM])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ dMMM ])[kbsw] //////////////////////////////////////////////////////////////////////////////////// } } diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus_Device.cuh b/src/gpu/core/Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus_Device.cuh similarity index 100% rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B15/B15IncompressibleNavierStokesBGKplus_Device.cuh rename to src/gpu/core/Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus_Device.cuh diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes.cu rename to src/gpu/core/Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes.cu diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes.h b/src/gpu/core/Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes.h rename to src/gpu/core/Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes.h diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes_Device.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes_Device.cu similarity index 61% rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes_Device.cu rename to src/gpu/core/Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes_Device.cu index 1d343eb3020816fe3114538a5362162e4a86169e..8c8197b815f0060d5612656617c1236d0e0b01fc 100644 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes_Device.cu +++ b/src/gpu/core/Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes_Device.cu @@ -37,63 +37,63 @@ __global__ void B92IncompressibleNavierStokes_Device(real omega, Distributions27 D; if (EvenOrOdd == true) { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; + D.f[dP00] = &DDStart[dP00 * size_Mat]; + D.f[dM00] = &DDStart[dM00 * size_Mat]; + D.f[d0P0] = &DDStart[d0P0 * size_Mat]; + D.f[d0M0] = &DDStart[d0M0 * size_Mat]; + D.f[d00P] = &DDStart[d00P * size_Mat]; + D.f[d00M] = &DDStart[d00M * size_Mat]; + D.f[dPP0] = &DDStart[dPP0 * size_Mat]; + D.f[dMM0] = &DDStart[dMM0 * size_Mat]; + D.f[dPM0] = &DDStart[dPM0 * size_Mat]; + D.f[dMP0] = &DDStart[dMP0 * size_Mat]; + D.f[dP0P] = &DDStart[dP0P * size_Mat]; + D.f[dM0M] = &DDStart[dM0M * size_Mat]; + D.f[dP0M] = &DDStart[dP0M * size_Mat]; + D.f[dM0P] = &DDStart[dM0P * size_Mat]; + D.f[d0PP] = &DDStart[d0PP * size_Mat]; + D.f[d0MM] = &DDStart[d0MM * size_Mat]; + D.f[d0PM] = &DDStart[d0PM * size_Mat]; + D.f[d0MP] = &DDStart[d0MP * size_Mat]; + D.f[d000] = &DDStart[d000 * size_Mat]; + D.f[dPPP] = &DDStart[dPPP * size_Mat]; + D.f[dMMP] = &DDStart[dMMP * size_Mat]; + D.f[dPMP] = &DDStart[dPMP * size_Mat]; + D.f[dMPP] = &DDStart[dMPP * size_Mat]; + D.f[dPPM] = &DDStart[dPPM * size_Mat]; + D.f[dMMM] = &DDStart[dMMM * size_Mat]; + D.f[dPMM] = &DDStart[dPMM * size_Mat]; + D.f[dMPM] = &DDStart[dMPM * size_Mat]; } else { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; + D.f[dM00] = &DDStart[dP00 * size_Mat]; + D.f[dP00] = &DDStart[dM00 * size_Mat]; + D.f[d0M0] = &DDStart[d0P0 * size_Mat]; + D.f[d0P0] = &DDStart[d0M0 * size_Mat]; + D.f[d00M] = &DDStart[d00P * size_Mat]; + D.f[d00P] = &DDStart[d00M * size_Mat]; + D.f[dMM0] = &DDStart[dPP0 * size_Mat]; + D.f[dPP0] = &DDStart[dMM0 * size_Mat]; + D.f[dMP0] = &DDStart[dPM0 * size_Mat]; + D.f[dPM0] = &DDStart[dMP0 * size_Mat]; + D.f[dM0M] = &DDStart[dP0P * size_Mat]; + D.f[dP0P] = &DDStart[dM0M * size_Mat]; + D.f[dM0P] = &DDStart[dP0M * size_Mat]; + D.f[dP0M] = &DDStart[dM0P * size_Mat]; + D.f[d0MM] = &DDStart[d0PP * size_Mat]; + D.f[d0PP] = &DDStart[d0MM * size_Mat]; + D.f[d0MP] = &DDStart[d0PM * size_Mat]; + D.f[d0PM] = &DDStart[d0MP * size_Mat]; + D.f[d000] = &DDStart[d000 * size_Mat]; + D.f[dMMM] = &DDStart[dPPP * size_Mat]; + D.f[dPPM] = &DDStart[dMMP * size_Mat]; + D.f[dMPM] = &DDStart[dPMP * size_Mat]; + D.f[dPMM] = &DDStart[dMPP * size_Mat]; + D.f[dMMP] = &DDStart[dPPM * size_Mat]; + D.f[dPPP] = &DDStart[dMMM * size_Mat]; + D.f[dMPP] = &DDStart[dPMM * size_Mat]; + D.f[dPMP] = &DDStart[dMPM * size_Mat]; } //////////////////////////////////////////////////////////////////////////////// @@ -126,33 +126,33 @@ __global__ void B92IncompressibleNavierStokes_Device(real omega, //unsigned int ktne = k; unsigned int kbsw = neighborZ[ksw]; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real fE = (D.f[DIR_P00])[k];//ke - real fW = (D.f[DIR_M00])[kw]; - real fN = (D.f[DIR_0P0])[k];//kn - real fS = (D.f[DIR_0M0])[ks]; - real fT = (D.f[DIR_00P])[k];//kt - real fB = (D.f[DIR_00M])[kb]; - real fNE = (D.f[DIR_PP0])[k];//kne - real fSW = (D.f[DIR_MM0])[ksw]; - real fSE = (D.f[DIR_PM0])[ks];//kse - real fNW = (D.f[DIR_MP0])[kw];//knw - real fTE = (D.f[DIR_P0P])[k];//kte - real fBW = (D.f[DIR_M0M])[kbw]; - real fBE = (D.f[DIR_P0M])[kb];//kbe - real fTW = (D.f[DIR_M0P])[kw];//ktw - real fTN = (D.f[DIR_0PP])[k];//ktn - real fBS = (D.f[DIR_0MM])[kbs]; - real fBN = (D.f[DIR_0PM])[kb];//kbn - real fTS = (D.f[DIR_0MP])[ks];//kts - real fZERO = (D.f[DIR_000])[k];//kzero - real fTNE = (D.f[DIR_PPP])[k];//ktne - real fTSW = (D.f[DIR_MMP])[ksw];//ktsw - real fTSE = (D.f[DIR_PMP])[ks];//ktse - real fTNW = (D.f[DIR_MPP])[kw];//ktnw - real fBNE = (D.f[DIR_PPM])[kb];//kbne - real fBSW = (D.f[DIR_MMM])[kbsw]; - real fBSE = (D.f[DIR_PMM])[kbs];//kbse - real fBNW = (D.f[DIR_MPM])[kbw];//kbnw + real fE = (D.f[dP00])[k];//ke + real fW = (D.f[dM00])[kw]; + real fN = (D.f[d0P0])[k];//kn + real fS = (D.f[d0M0])[ks]; + real fT = (D.f[d00P])[k];//kt + real fB = (D.f[d00M])[kb]; + real fNE = (D.f[dPP0])[k];//kne + real fSW = (D.f[dMM0])[ksw]; + real fSE = (D.f[dPM0])[ks];//kse + real fNW = (D.f[dMP0])[kw];//knw + real fTE = (D.f[dP0P])[k];//kte + real fBW = (D.f[dM0M])[kbw]; + real fBE = (D.f[dP0M])[kb];//kbe + real fTW = (D.f[dM0P])[kw];//ktw + real fTN = (D.f[d0PP])[k];//ktn + real fBS = (D.f[d0MM])[kbs]; + real fBN = (D.f[d0PM])[kb];//kbn + real fTS = (D.f[d0MP])[ks];//kts + real fZERO = (D.f[d000])[k];//kzero + real fTNE = (D.f[dPPP])[k];//ktne + real fTSW = (D.f[dMMP])[ksw];//ktsw + real fTSE = (D.f[dPMP])[ks];//ktse + real fTNW = (D.f[dMPP])[kw];//ktnw + real fBNE = (D.f[dPPM])[kb];//kbne + real fBSW = (D.f[dMMM])[kbsw]; + real fBSE = (D.f[dPMM])[kbs];//kbse + real fBNW = (D.f[dMPM])[kbw];//kbnw //////////////////////////////////////////////////////////////////////////////// @@ -206,33 +206,33 @@ __global__ void B92IncompressibleNavierStokes_Device(real omega, ////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = fW; - (D.f[DIR_M00])[kw] = fE; - (D.f[DIR_0P0])[k] = fS; - (D.f[DIR_0M0])[ks] = fN; - (D.f[DIR_00P])[k] = fB; - (D.f[DIR_00M])[kb] = fT; - (D.f[DIR_PP0])[k] = fSW; - (D.f[DIR_MM0])[ksw] = fNE; - (D.f[DIR_PM0])[ks] = fNW; - (D.f[DIR_MP0])[kw] = fSE; - (D.f[DIR_P0P])[k] = fBW; - (D.f[DIR_M0M])[kbw] = fTE; - (D.f[DIR_P0M])[kb] = fTW; - (D.f[DIR_M0P])[kw] = fBE; - (D.f[DIR_0PP])[k] = fBS; - (D.f[DIR_0MM])[kbs] = fTN; - (D.f[DIR_0PM])[kb] = fTS; - (D.f[DIR_0MP])[ks] = fBN; - (D.f[DIR_000])[k] = fZERO; - (D.f[DIR_PPP])[k] = fBSW; - (D.f[DIR_PMP])[ks] = fBNW; - (D.f[DIR_PPM])[kb] = fTSW; - (D.f[DIR_PMM])[kbs] = fTNW; - (D.f[DIR_MPP])[kw] = fBSE; - (D.f[DIR_MMP])[ksw] = fBNE; - (D.f[DIR_MPM])[kbw] = fTSE; - (D.f[DIR_MMM])[kbsw] = fTNE; + (D.f[dP00])[k] = fW; + (D.f[dM00])[kw] = fE; + (D.f[d0P0])[k] = fS; + (D.f[d0M0])[ks] = fN; + (D.f[d00P])[k] = fB; + (D.f[d00M])[kb] = fT; + (D.f[dPP0])[k] = fSW; + (D.f[dMM0])[ksw] = fNE; + (D.f[dPM0])[ks] = fNW; + (D.f[dMP0])[kw] = fSE; + (D.f[dP0P])[k] = fBW; + (D.f[dM0M])[kbw] = fTE; + (D.f[dP0M])[kb] = fTW; + (D.f[dM0P])[kw] = fBE; + (D.f[d0PP])[k] = fBS; + (D.f[d0MM])[kbs] = fTN; + (D.f[d0PM])[kb] = fTS; + (D.f[d0MP])[ks] = fBN; + (D.f[d000])[k] = fZERO; + (D.f[dPPP])[k] = fBSW; + (D.f[dPMP])[ks] = fBNW; + (D.f[dPPM])[kb] = fTSW; + (D.f[dPMM])[kbs] = fTNW; + (D.f[dMPP])[kw] = fBSE; + (D.f[dMMP])[ksw] = fBNE; + (D.f[dMPM])[kbw] = fTSE; + (D.f[dMMM])[kbsw] = fTNE; ////////////////////////////////////////////////////////////////////////// } } diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes_Device.cuh b/src/gpu/core/Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes_Device.cuh similarity index 100% rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/B92/B92IncompressibleNavierStokes_Device.cuh rename to src/gpu/core/Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes_Device.cuh diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes.cu rename to src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes.cu diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes.h b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes.h rename to src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes.h diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes_Device.cu b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes_Device.cu similarity index 85% rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes_Device.cu rename to src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes_Device.cu index 5b666eb73c7a19d472d26f2047b04462f83d0d23..4438d69ecd25ac21dc6f944f450cfa1b61e273e3 100644 --- a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes_Device.cu +++ b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes_Device.cu @@ -38,63 +38,63 @@ __global__ void K15IncompressibleNavierStokes_Device( Distributions27 D; if (EvenOrOdd == true) { - D.f[DIR_P00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_M00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_MPM * size_Mat]; + D.f[dP00] = &DDStart[dP00 * size_Mat]; + D.f[dM00] = &DDStart[dM00 * size_Mat]; + D.f[d0P0] = &DDStart[d0P0 * size_Mat]; + D.f[d0M0] = &DDStart[d0M0 * size_Mat]; + D.f[d00P] = &DDStart[d00P * size_Mat]; + D.f[d00M] = &DDStart[d00M * size_Mat]; + D.f[dPP0] = &DDStart[dPP0 * size_Mat]; + D.f[dMM0] = &DDStart[dMM0 * size_Mat]; + D.f[dPM0] = &DDStart[dPM0 * size_Mat]; + D.f[dMP0] = &DDStart[dMP0 * size_Mat]; + D.f[dP0P] = &DDStart[dP0P * size_Mat]; + D.f[dM0M] = &DDStart[dM0M * size_Mat]; + D.f[dP0M] = &DDStart[dP0M * size_Mat]; + D.f[dM0P] = &DDStart[dM0P * size_Mat]; + D.f[d0PP] = &DDStart[d0PP * size_Mat]; + D.f[d0MM] = &DDStart[d0MM * size_Mat]; + D.f[d0PM] = &DDStart[d0PM * size_Mat]; + D.f[d0MP] = &DDStart[d0MP * size_Mat]; + D.f[d000] = &DDStart[d000 * size_Mat]; + D.f[dPPP] = &DDStart[dPPP * size_Mat]; + D.f[dMMP] = &DDStart[dMMP * size_Mat]; + D.f[dPMP] = &DDStart[dPMP * size_Mat]; + D.f[dMPP] = &DDStart[dMPP * size_Mat]; + D.f[dPPM] = &DDStart[dPPM * size_Mat]; + D.f[dMMM] = &DDStart[dMMM * size_Mat]; + D.f[dPMM] = &DDStart[dPMM * size_Mat]; + D.f[dMPM] = &DDStart[dMPM * size_Mat]; } else { - D.f[DIR_M00] = &DDStart[DIR_P00 * size_Mat]; - D.f[DIR_P00] = &DDStart[DIR_M00 * size_Mat]; - D.f[DIR_0M0] = &DDStart[DIR_0P0 * size_Mat]; - D.f[DIR_0P0] = &DDStart[DIR_0M0 * size_Mat]; - D.f[DIR_00M] = &DDStart[DIR_00P * size_Mat]; - D.f[DIR_00P] = &DDStart[DIR_00M * size_Mat]; - D.f[DIR_MM0] = &DDStart[DIR_PP0 * size_Mat]; - D.f[DIR_PP0] = &DDStart[DIR_MM0 * size_Mat]; - D.f[DIR_MP0] = &DDStart[DIR_PM0 * size_Mat]; - D.f[DIR_PM0] = &DDStart[DIR_MP0 * size_Mat]; - D.f[DIR_M0M] = &DDStart[DIR_P0P * size_Mat]; - D.f[DIR_P0P] = &DDStart[DIR_M0M * size_Mat]; - D.f[DIR_M0P] = &DDStart[DIR_P0M * size_Mat]; - D.f[DIR_P0M] = &DDStart[DIR_M0P * size_Mat]; - D.f[DIR_0MM] = &DDStart[DIR_0PP * size_Mat]; - D.f[DIR_0PP] = &DDStart[DIR_0MM * size_Mat]; - D.f[DIR_0MP] = &DDStart[DIR_0PM * size_Mat]; - D.f[DIR_0PM] = &DDStart[DIR_0MP * size_Mat]; - D.f[DIR_000] = &DDStart[DIR_000 * size_Mat]; - D.f[DIR_MMM] = &DDStart[DIR_PPP * size_Mat]; - D.f[DIR_PPM] = &DDStart[DIR_MMP * size_Mat]; - D.f[DIR_MPM] = &DDStart[DIR_PMP * size_Mat]; - D.f[DIR_PMM] = &DDStart[DIR_MPP * size_Mat]; - D.f[DIR_MMP] = &DDStart[DIR_PPM * size_Mat]; - D.f[DIR_PPP] = &DDStart[DIR_MMM * size_Mat]; - D.f[DIR_MPP] = &DDStart[DIR_PMM * size_Mat]; - D.f[DIR_PMP] = &DDStart[DIR_MPM * size_Mat]; + D.f[dM00] = &DDStart[dP00 * size_Mat]; + D.f[dP00] = &DDStart[dM00 * size_Mat]; + D.f[d0M0] = &DDStart[d0P0 * size_Mat]; + D.f[d0P0] = &DDStart[d0M0 * size_Mat]; + D.f[d00M] = &DDStart[d00P * size_Mat]; + D.f[d00P] = &DDStart[d00M * size_Mat]; + D.f[dMM0] = &DDStart[dPP0 * size_Mat]; + D.f[dPP0] = &DDStart[dMM0 * size_Mat]; + D.f[dMP0] = &DDStart[dPM0 * size_Mat]; + D.f[dPM0] = &DDStart[dMP0 * size_Mat]; + D.f[dM0M] = &DDStart[dP0P * size_Mat]; + D.f[dP0P] = &DDStart[dM0M * size_Mat]; + D.f[dM0P] = &DDStart[dP0M * size_Mat]; + D.f[dP0M] = &DDStart[dM0P * size_Mat]; + D.f[d0MM] = &DDStart[d0PP * size_Mat]; + D.f[d0PP] = &DDStart[d0MM * size_Mat]; + D.f[d0MP] = &DDStart[d0PM * size_Mat]; + D.f[d0PM] = &DDStart[d0MP * size_Mat]; + D.f[d000] = &DDStart[d000 * size_Mat]; + D.f[dMMM] = &DDStart[dPPP * size_Mat]; + D.f[dPPM] = &DDStart[dMMP * size_Mat]; + D.f[dMPM] = &DDStart[dPMP * size_Mat]; + D.f[dPMM] = &DDStart[dMPP * size_Mat]; + D.f[dMMP] = &DDStart[dPPM * size_Mat]; + D.f[dPPP] = &DDStart[dMMM * size_Mat]; + D.f[dMPP] = &DDStart[dPMM * size_Mat]; + D.f[dPMP] = &DDStart[dMPM * size_Mat]; } //////////////////////////////////////////////////////////////////////////////// @@ -155,33 +155,33 @@ __global__ void K15IncompressibleNavierStokes_Device( //unsigned int ktne = k; //unsigned int kbsw = neighborZ[ksw]; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - real mfcbb = (D.f[DIR_P00])[k];//[ke ];// + c2over27 ;(D.f[DIR_P00])[k ];//ke - real mfabb = (D.f[DIR_M00])[kw];//[kw ];// + c2over27 ;(D.f[DIR_M00])[kw ]; - real mfbcb = (D.f[DIR_0P0])[k];//[kn ];// + c2over27 ;(D.f[DIR_0P0])[k ];//kn - real mfbab = (D.f[DIR_0M0])[ks];//[ks ];// + c2over27 ;(D.f[DIR_0M0])[ks ]; - real mfbbc = (D.f[DIR_00P])[k];//[kt ];// + c2over27 ;(D.f[DIR_00P])[k ];//kt - real mfbba = (D.f[DIR_00M])[kb];//[kb ];// + c2over27 ;(D.f[DIR_00M])[kb ]; - real mfccb = (D.f[DIR_PP0])[k];//[kne ];// + c1over54 ;(D.f[DIR_PP0])[k ];//kne - real mfaab = (D.f[DIR_MM0])[ksw];//[ksw ];// + c1over54 ;(D.f[DIR_MM0])[ksw]; - real mfcab = (D.f[DIR_PM0])[ks];//[kse ];// + c1over54 ;(D.f[DIR_PM0])[ks ];//kse - real mfacb = (D.f[DIR_MP0])[kw];//[knw ];// + c1over54 ;(D.f[DIR_MP0])[kw ];//knw - real mfcbc = (D.f[DIR_P0P])[k];//[kte ];// + c1over54 ;(D.f[DIR_P0P])[k ];//kte - real mfaba = (D.f[DIR_M0M])[kbw];//[kbw ];// + c1over54 ;(D.f[DIR_M0M])[kbw]; - real mfcba = (D.f[DIR_P0M])[kb];//[kbe ];// + c1over54 ;(D.f[DIR_P0M])[kb ];//kbe - real mfabc = (D.f[DIR_M0P])[kw];//[ktw ];// + c1over54 ;(D.f[DIR_M0P])[kw ];//ktw - real mfbcc = (D.f[DIR_0PP])[k];//[ktn ];// + c1over54 ;(D.f[DIR_0PP])[k ];//ktn - real mfbaa = (D.f[DIR_0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[DIR_0MM])[kbs]; - real mfbca = (D.f[DIR_0PM])[kb];//[kbn ];// + c1over54 ;(D.f[DIR_0PM])[kb ];//kbn - real mfbac = (D.f[DIR_0MP])[ks];//[kts ];// + c1over54 ;(D.f[DIR_0MP])[ks ];//kts - real mfbbb = (D.f[DIR_000])[k];//[kzero];// + c8over27 ;(D.f[DIR_000])[k ];//kzero - real mfccc = (D.f[DIR_PPP])[k];//[ktne ];// + c1over216;(D.f[DIR_PPP])[k ];//ktne - real mfaac = (D.f[DIR_MMP])[ksw];//[ktsw ];// + c1over216;(D.f[DIR_MMP])[ksw];//ktsw - real mfcac = (D.f[DIR_PMP])[ks];//[ktse ];// + c1over216;(D.f[DIR_PMP])[ks ];//ktse - real mfacc = (D.f[DIR_MPP])[kw];//[ktnw ];// + c1over216;(D.f[DIR_MPP])[kw ];//ktnw - real mfcca = (D.f[DIR_PPM])[kb];//[kbne ];// + c1over216;(D.f[DIR_PPM])[kb ];//kbne - real mfaaa = (D.f[DIR_MMM])[kbsw];//[kbsw ];// + c1over216;(D.f[DIR_MMM])[kbsw]; - real mfcaa = (D.f[DIR_PMM])[kbs];//[kbse ];// + c1over216;(D.f[DIR_PMM])[kbs];//kbse - real mfaca = (D.f[DIR_MPM])[kbw];//[kbnw ];// + c1over216;(D.f[DIR_MPM])[kbw];//kbnw + real mfcbb = (D.f[dP00])[k];//[ke ];// + c2over27 ;(D.f[dP00])[k ];//ke + real mfabb = (D.f[dM00])[kw];//[kw ];// + c2over27 ;(D.f[dM00])[kw ]; + real mfbcb = (D.f[d0P0])[k];//[kn ];// + c2over27 ;(D.f[d0P0])[k ];//kn + real mfbab = (D.f[d0M0])[ks];//[ks ];// + c2over27 ;(D.f[d0M0])[ks ]; + real mfbbc = (D.f[d00P])[k];//[kt ];// + c2over27 ;(D.f[d00P])[k ];//kt + real mfbba = (D.f[d00M])[kb];//[kb ];// + c2over27 ;(D.f[d00M])[kb ]; + real mfccb = (D.f[dPP0])[k];//[kne ];// + c1over54 ;(D.f[dPP0])[k ];//kne + real mfaab = (D.f[dMM0])[ksw];//[ksw ];// + c1over54 ;(D.f[dMM0])[ksw]; + real mfcab = (D.f[dPM0])[ks];//[kse ];// + c1over54 ;(D.f[dPM0])[ks ];//kse + real mfacb = (D.f[dMP0])[kw];//[knw ];// + c1over54 ;(D.f[dMP0])[kw ];//knw + real mfcbc = (D.f[dP0P])[k];//[kte ];// + c1over54 ;(D.f[dP0P])[k ];//kte + real mfaba = (D.f[dM0M])[kbw];//[kbw ];// + c1over54 ;(D.f[dM0M])[kbw]; + real mfcba = (D.f[dP0M])[kb];//[kbe ];// + c1over54 ;(D.f[dP0M])[kb ];//kbe + real mfabc = (D.f[dM0P])[kw];//[ktw ];// + c1over54 ;(D.f[dM0P])[kw ];//ktw + real mfbcc = (D.f[d0PP])[k];//[ktn ];// + c1over54 ;(D.f[d0PP])[k ];//ktn + real mfbaa = (D.f[d0MM])[kbs];//[kbs ];// + c1over54 ;(D.f[d0MM])[kbs]; + real mfbca = (D.f[d0PM])[kb];//[kbn ];// + c1over54 ;(D.f[d0PM])[kb ];//kbn + real mfbac = (D.f[d0MP])[ks];//[kts ];// + c1over54 ;(D.f[d0MP])[ks ];//kts + real mfbbb = (D.f[d000])[k];//[kzero];// + c8over27 ;(D.f[d000])[k ];//kzero + real mfccc = (D.f[dPPP])[k];//[ktne ];// + c1over216;(D.f[dPPP])[k ];//ktne + real mfaac = (D.f[dMMP])[ksw];//[ktsw ];// + c1over216;(D.f[dMMP])[ksw];//ktsw + real mfcac = (D.f[dPMP])[ks];//[ktse ];// + c1over216;(D.f[dPMP])[ks ];//ktse + real mfacc = (D.f[dMPP])[kw];//[ktnw ];// + c1over216;(D.f[dMPP])[kw ];//ktnw + real mfcca = (D.f[dPPM])[kb];//[kbne ];// + c1over216;(D.f[dPPM])[kb ];//kbne + real mfaaa = (D.f[dMMM])[kbsw];//[kbsw ];// + c1over216;(D.f[dMMM])[kbsw]; + real mfcaa = (D.f[dPMM])[kbs];//[kbse ];// + c1over216;(D.f[dPMM])[kbs];//kbse + real mfaca = (D.f[dMPM])[kbw];//[kbnw ];// + c1over216;(D.f[dMPM])[kbw];//kbnw //////////////////////////////////////////////////////////////////////////////////// //slow //real oMdrho = one - ((((mfccc+mfaaa) + (mfaca+mfcac)) + ((mfacc+mfcaa) + (mfaac+mfcca))) + @@ -1207,33 +1207,33 @@ __global__ void K15IncompressibleNavierStokes_Device( //////////////////////////////////////////////////////////////////////////////////// - (D.f[DIR_P00])[k] = mfabb;//(D.f[ DIR_P00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ DIR_P00 ])[k ] - (D.f[DIR_M00])[kw] = mfcbb;//(D.f[ DIR_M00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ DIR_M00 ])[kw ] - (D.f[DIR_0P0])[k] = mfbab;//(D.f[ DIR_0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ DIR_0P0 ])[k ] - (D.f[DIR_0M0])[ks] = mfbcb;//(D.f[ DIR_0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ DIR_0M0 ])[ks ] - (D.f[DIR_00P])[k] = mfbba;//(D.f[ DIR_00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ DIR_00P ])[k ] - (D.f[DIR_00M])[kb] = mfbbc;//(D.f[ DIR_00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ DIR_00M ])[kb ] - (D.f[DIR_PP0])[k] = mfaab;//(D.f[ DIR_PP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ DIR_PP0 ])[k ] - (D.f[DIR_MM0])[ksw] = mfccb;//(D.f[ DIR_MM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ DIR_MM0 ])[ksw ] - (D.f[DIR_PM0])[ks] = mfacb;//(D.f[ DIR_PM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ DIR_PM0 ])[ks ] - (D.f[DIR_MP0])[kw] = mfcab;//(D.f[ DIR_MP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ DIR_MP0 ])[kw ] - (D.f[DIR_P0P])[k] = mfaba;//(D.f[ DIR_P0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ DIR_P0P ])[k ] - (D.f[DIR_M0M])[kbw] = mfcbc;//(D.f[ DIR_M0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ DIR_M0M ])[kbw ] - (D.f[DIR_P0M])[kb] = mfabc;//(D.f[ DIR_P0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ DIR_P0M ])[kb ] - (D.f[DIR_M0P])[kw] = mfcba;//(D.f[ DIR_M0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ DIR_M0P ])[kw ] - (D.f[DIR_0PP])[k] = mfbaa;//(D.f[ DIR_0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ DIR_0PP ])[k ] - (D.f[DIR_0MM])[kbs] = mfbcc;//(D.f[ DIR_0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ DIR_0MM ])[kbs ] - (D.f[DIR_0PM])[kb] = mfbac;//(D.f[ DIR_0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ DIR_0PM ])[kb ] - (D.f[DIR_0MP])[ks] = mfbca;//(D.f[ DIR_0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ DIR_0MP ])[ks ] - (D.f[DIR_000])[k] = mfbbb;//(D.f[ DIR_000])[kzero] = mfbbb;// - c8over27 ; (D.f[ DIR_000])[k ] - (D.f[DIR_PPP])[k] = mfaaa;//(D.f[ DIR_PPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ DIR_PPP ])[k ] - (D.f[DIR_PMP])[ks] = mfaca;//(D.f[ DIR_PMP ])[ktse ] = mfaca;// - c1over216; (D.f[ DIR_PMP ])[ks ] - (D.f[DIR_PPM])[kb] = mfaac;//(D.f[ DIR_PPM ])[kbne ] = mfaac;// - c1over216; (D.f[ DIR_PPM ])[kb ] - (D.f[DIR_PMM])[kbs] = mfacc;//(D.f[ DIR_PMM ])[kbse ] = mfacc;// - c1over216; (D.f[ DIR_PMM ])[kbs ] - (D.f[DIR_MPP])[kw] = mfcaa;//(D.f[ DIR_MPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ DIR_MPP ])[kw ] - (D.f[DIR_MMP])[ksw] = mfcca;//(D.f[ DIR_MMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ DIR_MMP ])[ksw ] - (D.f[DIR_MPM])[kbw] = mfcac;//(D.f[ DIR_MPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ DIR_MPM ])[kbw ] - (D.f[DIR_MMM])[kbsw] = mfccc;//(D.f[ DIR_MMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ DIR_MMM ])[kbsw] + (D.f[dP00])[k] = mfabb;//(D.f[ dP00 ])[ke ] = mfabb;// - c2over27 ; (D.f[ dP00 ])[k ] + (D.f[dM00])[kw] = mfcbb;//(D.f[ dM00 ])[kw ] = mfcbb;// - c2over27 ; (D.f[ dM00 ])[kw ] + (D.f[d0P0])[k] = mfbab;//(D.f[ d0P0 ])[kn ] = mfbab;// - c2over27 ; (D.f[ d0P0 ])[k ] + (D.f[d0M0])[ks] = mfbcb;//(D.f[ d0M0 ])[ks ] = mfbcb;// - c2over27 ; (D.f[ d0M0 ])[ks ] + (D.f[d00P])[k] = mfbba;//(D.f[ d00P ])[kt ] = mfbba;// - c2over27 ; (D.f[ d00P ])[k ] + (D.f[d00M])[kb] = mfbbc;//(D.f[ d00M ])[kb ] = mfbbc;// - c2over27 ; (D.f[ d00M ])[kb ] + (D.f[dPP0])[k] = mfaab;//(D.f[ dPP0 ])[kne ] = mfaab;// - c1over54 ; (D.f[ dPP0 ])[k ] + (D.f[dMM0])[ksw] = mfccb;//(D.f[ dMM0 ])[ksw ] = mfccb;// - c1over54 ; (D.f[ dMM0 ])[ksw ] + (D.f[dPM0])[ks] = mfacb;//(D.f[ dPM0 ])[kse ] = mfacb;// - c1over54 ; (D.f[ dPM0 ])[ks ] + (D.f[dMP0])[kw] = mfcab;//(D.f[ dMP0 ])[knw ] = mfcab;// - c1over54 ; (D.f[ dMP0 ])[kw ] + (D.f[dP0P])[k] = mfaba;//(D.f[ dP0P ])[kte ] = mfaba;// - c1over54 ; (D.f[ dP0P ])[k ] + (D.f[dM0M])[kbw] = mfcbc;//(D.f[ dM0M ])[kbw ] = mfcbc;// - c1over54 ; (D.f[ dM0M ])[kbw ] + (D.f[dP0M])[kb] = mfabc;//(D.f[ dP0M ])[kbe ] = mfabc;// - c1over54 ; (D.f[ dP0M ])[kb ] + (D.f[dM0P])[kw] = mfcba;//(D.f[ dM0P ])[ktw ] = mfcba;// - c1over54 ; (D.f[ dM0P ])[kw ] + (D.f[d0PP])[k] = mfbaa;//(D.f[ d0PP ])[ktn ] = mfbaa;// - c1over54 ; (D.f[ d0PP ])[k ] + (D.f[d0MM])[kbs] = mfbcc;//(D.f[ d0MM ])[kbs ] = mfbcc;// - c1over54 ; (D.f[ d0MM ])[kbs ] + (D.f[d0PM])[kb] = mfbac;//(D.f[ d0PM ])[kbn ] = mfbac;// - c1over54 ; (D.f[ d0PM ])[kb ] + (D.f[d0MP])[ks] = mfbca;//(D.f[ d0MP ])[kts ] = mfbca;// - c1over54 ; (D.f[ d0MP ])[ks ] + (D.f[d000])[k] = mfbbb;//(D.f[ d000])[kzero] = mfbbb;// - c8over27 ; (D.f[ d000])[k ] + (D.f[dPPP])[k] = mfaaa;//(D.f[ dPPP ])[ktne ] = mfaaa;// - c1over216; (D.f[ dPPP ])[k ] + (D.f[dPMP])[ks] = mfaca;//(D.f[ dPMP ])[ktse ] = mfaca;// - c1over216; (D.f[ dPMP ])[ks ] + (D.f[dPPM])[kb] = mfaac;//(D.f[ dPPM ])[kbne ] = mfaac;// - c1over216; (D.f[ dPPM ])[kb ] + (D.f[dPMM])[kbs] = mfacc;//(D.f[ dPMM ])[kbse ] = mfacc;// - c1over216; (D.f[ dPMM ])[kbs ] + (D.f[dMPP])[kw] = mfcaa;//(D.f[ dMPP ])[ktnw ] = mfcaa;// - c1over216; (D.f[ dMPP ])[kw ] + (D.f[dMMP])[ksw] = mfcca;//(D.f[ dMMP ])[ktsw ] = mfcca;// - c1over216; (D.f[ dMMP ])[ksw ] + (D.f[dMPM])[kbw] = mfcac;//(D.f[ dMPM ])[kbnw ] = mfcac;// - c1over216; (D.f[ dMPM ])[kbw ] + (D.f[dMMM])[kbsw] = mfccc;//(D.f[ dMMM ])[kbsw ] = mfccc;// - c1over216; (D.f[ dMMM ])[kbsw] //////////////////////////////////////////////////////////////////////////////////// } } diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes_Device.cuh b/src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes_Device.cuh similarity index 100% rename from src/gpu/VirtualFluids_GPU/Kernel/Incompressible/FluidFlow/K15/K15IncompressibleNavierStokes_Device.cuh rename to src/gpu/core/Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes_Device.cuh diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernel.h b/src/gpu/core/Kernel/Kernel.h similarity index 88% rename from src/gpu/VirtualFluids_GPU/Kernel/Kernel.h rename to src/gpu/core/Kernel/Kernel.h index d83901a0f7d6a7df8120673a4b14371a6e935aef..bb944d6ed876a2fa6b6582eb2995cc20d1430d85 100644 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernel.h +++ b/src/gpu/core/Kernel/Kernel.h @@ -17,7 +17,6 @@ public: virtual void run() = 0; virtual void runOnIndices(const unsigned int *indices, unsigned int size_indices, CollisionTemplate collisionTemplate, CudaStreamIndex streamIdx=CudaStreamIndex::Legacy) = 0; - virtual bool checkParameter() = 0; virtual std::vector<PreProcessorType> getPreProcessorTypes() = 0; }; #endif diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactory.h b/src/gpu/core/Kernel/KernelFactory/KernelFactory.h similarity index 66% rename from src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactory.h rename to src/gpu/core/Kernel/KernelFactory/KernelFactory.h index 26c68f74a3650ea43261fdd66b567ecbd391cb10..05755f0eba9c0c0c0bd8fdbab2a2ce4f4590293b 100644 --- a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactory.h +++ b/src/gpu/core/Kernel/KernelFactory/KernelFactory.h @@ -6,19 +6,19 @@ #include <string> #include <vector> -#include "VirtualFluids_GPU_export.h" + class Kernel; -class ADKernel; +class AdvectionDiffusionKernel; class Parameter; class PorousMedia; -class VIRTUALFLUIDS_GPU_EXPORT KernelFactory +class KernelFactory { public: virtual ~KernelFactory() = default; virtual std::vector< std::shared_ptr< Kernel>> makeKernels(std::shared_ptr<Parameter> para) = 0; - virtual std::vector< std::shared_ptr< ADKernel>> makeAdvDifKernels(std::shared_ptr<Parameter> para) = 0; + virtual std::vector< std::shared_ptr< AdvectionDiffusionKernel>> makeAdvDifKernels(std::shared_ptr<Parameter> para) = 0; virtual void setPorousMedia(std::vector<std::shared_ptr<PorousMedia>> pm) = 0; }; diff --git a/src/gpu/core/Kernel/KernelFactory/KernelFactoryImp.cpp b/src/gpu/core/Kernel/KernelFactory/KernelFactoryImp.cpp new file mode 100644 index 0000000000000000000000000000000000000000..3430486b266a1e884dc8ec82b86b43dc97c38408 --- /dev/null +++ b/src/gpu/core/Kernel/KernelFactory/KernelFactoryImp.cpp @@ -0,0 +1,119 @@ +#include "KernelFactoryImp.h" + +#include <logger/Logger.h> + +#include "Parameter/Parameter.h" + +#include "Kernel/KernelTypes.h" + +//LBM kernel (compressible) +#include "Kernel/Compressible/NavierStokes/B92/B92CompressibleNavierStokes.h" +#include "Kernel/Compressible/NavierStokes/B15/B15CompressibleNavierStokesBGKplus.h" +#include "Kernel/Compressible/NavierStokes/K15/K15CompressibleNavierStokes.h" +#include "Kernel/Compressible/NavierStokes/K17/K17CompressibleNavierStokes.h" + +//LBM kernel (inkompressible) +#include "Kernel/Incompressible/NavierStokes/B92/B92IncompressibleNavierStokes.h" +#include "Kernel/Incompressible/NavierStokes/B15/B15IncompressibleNavierStokesBGKplus.h" +#include "Kernel/Incompressible/NavierStokes/K15/K15IncompressibleNavierStokes.h" + +//advection diffusion kernel (compressible) +#include "Kernel/Compressible/AdvectionDiffusion/F16/F16CompressibleAdvectionDiffusion.h" + +//advection diffusion kernel (incompressible) +#include "Kernel/Incompressible/AdvectionDiffusion/F16/F16IncompressibleAdvectionDiffusion.h" + +#include <lbm/collision/TurbulentViscosity.h> + +using namespace vf; + +std::vector<std::shared_ptr<Kernel>> KernelFactoryImp::makeKernels(std::shared_ptr<Parameter> para) +{ + std::vector< std::shared_ptr< Kernel>> kernels; + for (int level = 0; level <= para->getMaxLevel(); level++) + kernels.push_back(makeKernel(para, para->getMainKernel(), level)); + + if (para->getMaxLevel() > 0) + if (para->getMultiKernelOn()) + for (std::size_t i = 0; i < para->getMultiKernelLevel().size(); i++) + setKernelAtLevel(kernels, para, para->getMultiKernel().at(i), para->getMultiKernelLevel().at(i)); + return kernels; +} + +std::vector<std::shared_ptr<AdvectionDiffusionKernel>> KernelFactoryImp::makeAdvDifKernels(std::shared_ptr<Parameter> para) +{ + std::vector< std::shared_ptr< AdvectionDiffusionKernel>> aDKernels; + for (int level = 0; level <= para->getMaxLevel(); level++) + aDKernels.push_back(makeAdvDifKernel(para, para->getADKernel(), level)); + return aDKernels; +} + +void KernelFactoryImp::setPorousMedia(std::vector<std::shared_ptr<PorousMedia>> pm) +{ + this->pm = pm; +} + +void KernelFactoryImp::setKernelAtLevel(std::vector<std::shared_ptr<Kernel>> kernels, std::shared_ptr<Parameter> para, std::string kernel, int level) +{ + kernels.at(level) = makeKernel(para, kernel, level); +} + +std::shared_ptr<Kernel> KernelFactoryImp::makeKernel(std::shared_ptr<Parameter> para, std::string kernel, int level) +{ + VF_LOG_INFO("Instantiating Kernel: {}", kernel); + std::shared_ptr<KernelImp> newKernel; + + if (kernel == collisionKernel::compressible::BGK) { + newKernel = B92CompressibleNavierStokes::getNewInstance(para, level); // compressible + } else if (kernel == collisionKernel::compressible::BGKPlus) { + newKernel = B15CompressibleNavierStokesBGKplus::getNewInstance(para, level); + } else if (kernel == collisionKernel::compressible::K17CompressibleNavierStokes){ + switch(para->getTurbulenceModel()) + { + case lbm::TurbulenceModel::AMD: + newKernel = K17CompressibleNavierStokes<lbm::TurbulenceModel::AMD>::getNewInstance(para, level); + break; + case lbm::TurbulenceModel::Smagorinsky: + newKernel = K17CompressibleNavierStokes<lbm::TurbulenceModel::Smagorinsky>::getNewInstance(para, level); + break; + case lbm::TurbulenceModel::QR: + newKernel = K17CompressibleNavierStokes<lbm::TurbulenceModel::QR>::getNewInstance(para, level); + break; + case lbm::TurbulenceModel::None: + newKernel = K17CompressibleNavierStokes<lbm::TurbulenceModel::None>::getNewInstance(para, level); + break; + default: + throw std::runtime_error("Unknown turbulence model!"); + break; + } + } else if (kernel == collisionKernel::compressible::K15CompressibleNavierStokes) { + newKernel = K15CompressibleNavierStokes::getNewInstance(para, level); + } //=============== + else if ( kernel == collisionKernel::incompressible::BGK) { // incompressible + newKernel = B92IncompressibleNavierStokes::getNewInstance(para, level); // || + } else if (kernel == collisionKernel::incompressible::BGKPlus) { + newKernel = B15IncompressibleNavierStokesBGKplus::getNewInstance(para, level); + } else if (kernel == collisionKernel::incompressible::CumulantK15) { // /\ // + newKernel = K15IncompressibleNavierStokes::getNewInstance(para, level); // || + } //=============== + else { + throw std::runtime_error("KernelFactory does not know the KernelType."); + } + para->setKernelNeedsFluidNodeIndicesToRun(newKernel->getKernelUsesFluidNodeIndices()); + return newKernel; +} + +std::shared_ptr<AdvectionDiffusionKernel> KernelFactoryImp::makeAdvDifKernel(std::shared_ptr<Parameter> para, std::string kernel, int level) +{ + std::shared_ptr<AdvectionDiffusionKernel> newKernel; + + if (kernel == "ADComp27") { + newKernel = F16CompressibleAdvectionDiffusion::getNewInstance(para, level); + } else if (kernel == "ADIncomp27") { + newKernel = F16IncompressibleAdvectionDiffusion::getNewInstance(para, level); + } else { + throw std::runtime_error("KernelFactory does not know the KernelType."); + } + + return newKernel; +} diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h b/src/gpu/core/Kernel/KernelFactory/KernelFactoryImp.h similarity index 66% rename from src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h rename to src/gpu/core/Kernel/KernelFactory/KernelFactoryImp.h index 064e9fbddfce4ddc71195536bfd5c20cd88660ee..3f1539413f69c178c1cba68f42cb6121e235ea62 100644 --- a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h +++ b/src/gpu/core/Kernel/KernelFactory/KernelFactoryImp.h @@ -5,16 +5,16 @@ class PorousMedia; -class VIRTUALFLUIDS_GPU_EXPORT KernelFactoryImp : public KernelFactory +class KernelFactoryImp : public KernelFactory { public: std::vector< std::shared_ptr< Kernel>> makeKernels(std::shared_ptr<Parameter> para); - std::vector< std::shared_ptr< ADKernel>> makeAdvDifKernels(std::shared_ptr<Parameter> para); + std::vector< std::shared_ptr< AdvectionDiffusionKernel>> makeAdvDifKernels(std::shared_ptr<Parameter> para); void setPorousMedia(std::vector<std::shared_ptr<PorousMedia>> pm); std::shared_ptr<Kernel> makeKernel(std::shared_ptr<Parameter> para, std::string kernel, int level); - std::shared_ptr<ADKernel> makeAdvDifKernel(std::shared_ptr<Parameter> para, std::string kernel, int level); + std::shared_ptr<AdvectionDiffusionKernel> makeAdvDifKernel(std::shared_ptr<Parameter> para, std::string kernel, int level); void setKernelAtLevel(std::vector< std::shared_ptr<Kernel>> kernels, std::shared_ptr<Parameter> para, std::string kernel, int level); std::vector<std::shared_ptr<PorousMedia>> pm; diff --git a/src/gpu/VirtualFluids_GPU/Kernel/KernelImp.cpp b/src/gpu/core/Kernel/KernelImp.cpp similarity index 66% rename from src/gpu/VirtualFluids_GPU/Kernel/KernelImp.cpp rename to src/gpu/core/Kernel/KernelImp.cpp index 328cf8db260bc0092cb2081998961d1e9fb17233..aee14eb73fd5324980fb73827ab81f344e1d402c 100644 --- a/src/gpu/VirtualFluids_GPU/Kernel/KernelImp.cpp +++ b/src/gpu/core/Kernel/KernelImp.cpp @@ -2,28 +2,17 @@ #include "LBM/LB.h" -#include "Kernel/Utilities/CheckParameterStrategy/CheckParameterStrategy.h" - void KernelImp::runOnIndices(const unsigned int *indices, unsigned int size_indices, CollisionTemplate collisionTemplate, CudaStreamIndex streamIndex) { printf("Method not implemented for this Kernel \n"); } -bool KernelImp::checkParameter() { - return checkStrategy->checkParameter(para); -} - std::vector<PreProcessorType> KernelImp::getPreProcessorTypes() { return myPreProcessorTypes; } -void KernelImp::setCheckParameterStrategy(std::shared_ptr<CheckParameterStrategy> strategy) -{ - this->checkStrategy = strategy; -} - bool KernelImp::getKernelUsesFluidNodeIndices(){ return this->kernelUsesFluidNodeIndices; } diff --git a/src/gpu/VirtualFluids_GPU/Kernel/KernelImp.h b/src/gpu/core/Kernel/KernelImp.h similarity index 80% rename from src/gpu/VirtualFluids_GPU/Kernel/KernelImp.h rename to src/gpu/core/Kernel/KernelImp.h index 00d392c9e8ff7b8c55b75f50327946b0140a3d68..c3397dc7fa23a54334d10c328f6ca1cf9cfc03ee 100644 --- a/src/gpu/VirtualFluids_GPU/Kernel/KernelImp.h +++ b/src/gpu/core/Kernel/KernelImp.h @@ -9,7 +9,6 @@ #include <cuda_helper/CudaGrid.h> -class CheckParameterStrategy; class Parameter; class CudaStreamManager; class KernelImp : public Kernel @@ -18,10 +17,8 @@ public: virtual void run() = 0; virtual void runOnIndices(const unsigned int *indices, unsigned int size_indices, CollisionTemplate collisionTemplate, CudaStreamIndex streamIndex=CudaStreamIndex::Legacy); - bool checkParameter(); std::vector<PreProcessorType> getPreProcessorTypes(); - void setCheckParameterStrategy(std::shared_ptr<CheckParameterStrategy> strategy); bool getKernelUsesFluidNodeIndices(); protected: @@ -29,7 +26,6 @@ protected: KernelImp(); std::shared_ptr<Parameter> para; - std::shared_ptr<CheckParameterStrategy> checkStrategy; int level; std::vector<PreProcessorType> myPreProcessorTypes; vf::cuda::CudaGrid cudaGrid; diff --git a/src/gpu/core/Kernel/KernelTypes.h b/src/gpu/core/Kernel/KernelTypes.h new file mode 100644 index 0000000000000000000000000000000000000000..ebfa88a531bdc6110b00a00616b1a679f0aa09c5 --- /dev/null +++ b/src/gpu/core/Kernel/KernelTypes.h @@ -0,0 +1,17 @@ +#ifndef KERNEL_TYPES_H +#define KERNEL_TYPES_H + +namespace vf::collisionKernel::compressible { + static const std::string BGK = "BGKCompSP27"; + static const std::string BGKPlus = "BGKPlusCompSP27"; + static const std::string K17CompressibleNavierStokes = "K17CompressibleNavierStokes"; + static const std::string K15CompressibleNavierStokes = "K15CompressibleNavierStokes"; + } + +namespace vf::collisionKernel::incompressible { + static const std::string BGK = "BGKIncompSP27"; + static const std::string BGKPlus = "BGKPlusIncompSP27"; + static const std::string CumulantK15 = "CumulantK15Incomp"; +} + +#endif diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.cpp b/src/gpu/core/KernelManager/ADKernelManager.cpp similarity index 52% rename from src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.cpp rename to src/gpu/core/KernelManager/ADKernelManager.cpp index 34a0c589919058d4edd1969812c16e75941d28b4..0a531bd36eedbd0f90a1ef7f94aa29e5f1dd4ded 100644 --- a/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.cpp +++ b/src/gpu/core/KernelManager/ADKernelManager.cpp @@ -34,8 +34,9 @@ #include "GPU/CudaMemoryManager.h" #include "GPU/GPU_Interface.h" #include "Parameter/Parameter.h" +#include "Kernel/AdvectionDiffusionKernel.h" -ADKernelManager::ADKernelManager(SPtr<Parameter> parameter): para(parameter){} +ADKernelManager::ADKernelManager(SPtr<Parameter> parameter, std::vector<SPtr<AdvectionDiffusionKernel>>& adkernels): para(parameter), adkernels(adkernels){} void ADKernelManager::initAD(const int level) const { @@ -113,71 +114,7 @@ void ADKernelManager::setInitialNodeValuesAD(const int level, SPtr<CudaMemoryMan //////////////////////////////////////////////////////////////////////////////// void ADKernelManager::runADcollisionKernel(const int level)const { - if (para->getDiffMod() == 7) - { - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // incompressible - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // KernelADincomp7( - // para->getParD(level)->numberofthreads, - // para->getParD(level)->diffusivity, - // para->getParD(level)->typeOfGridNode, - // para->getParD(level)->neighborX, - // para->getParD(level)->neighborY, para->getParD(level)->neighborZ, - // para->getParD(level)->distributions.f[0], - // para->getParD(level)->distributionsAD7.f[0], - // para->getParD(level)->numberOfNodes, - // para->getParD(level)->isEvenTimestep); - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // compressible - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // KernelThS7( - // para->getParD(level)->numberofthreads, - // para->getParD(level)->diffusivity, - // para->getParD(level)->typeOfGridNode, - // para->getParD(level)->neighborX, - // para->getParD(level)->neighborY, - // para->getParD(level)->neighborZ, - // para->getParD(level)->distributions.f[0], - // para->getParD(level)->distributionsAD7.f[0], - // para->getParD(level)->numberOfNodes, - // para->getParD(level)->isEvenTimestep); - } - else if (para->getDiffMod() == 27) - { - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // incompressible - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // KernelADincomp27( - // para->getParD(level)->numberofthreads, - // para->getParD(level)->diffusivity, - // para->getParD(level)->typeOfGridNode, - // para->getParD(level)->neighborX, - // para->getParD(level)->neighborY, - // para->getParD(level)->neighborZ, - // para->getParD(level)->distributions.f[0], - // para->getParD(level)->distributionsAD27.f[0], - // para->getParD(level)->numberOfNodes, - // para->getParD(level)->isEvenTimestep); - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // compressible - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - FactorizedCentralMomentsAdvectionDiffusionDeviceKernel( - para->getParD(level)->numberofthreads, - para->getParD(level)->omegaDiffusivity, - para->getParD(level)->typeOfGridNode, - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level)->distributions.f[0], - para->getParD(level)->distributionsAD.f[0], - para->getParD(level)->numberOfNodes, - para->getParD(level)->forcing, - para->getParD(level)->isEvenTimestep); - } + adkernels[level]->run(); } void ADKernelManager::runADslipBCKernel(const int level) const{ @@ -203,45 +140,6 @@ void ADKernelManager::runADslipBCKernel(const int level) const{ void ADKernelManager::runADpressureBCKernel(const int level) const{ if (para->getParD(level)->TempPress.kTemp > 0){ - if (para->getDiffMod() == 7) { - // QADPressIncompDev7( - // para->getParD(level)->numberofthreads, - // para->getParD(level)->distributions.f[0], - // para->getParD(level)->distributionsAD7.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 - ////////////////////////////////////////////////////////////////////////// - QADPressDev7( - para->getParD(level)->numberofthreads, - para->getParD(level)->distributions.f[0], - para->getParD(level)->distributionsAD7.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); - - } else if (para->getDiffMod() == 27) { // QADPressIncompDev27( // para->getParD(level)->numberofthreads, // para->getParD(level)->distributions.f[0], @@ -278,51 +176,12 @@ void ADKernelManager::runADpressureBCKernel(const int level) const{ 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) { - if (para->getDiffMod() == 7) { - // QNoSlipADincompDev7( - // para->getParD(level)->numberofthreads, - // para->getParD(level)->distributions.f[0], - // para->getParD(level)->distributionsAD7.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 - ////////////////////////////////////////////////////////////////////////// - - QADDev7( - para->getParD(level)->numberofthreads, - para->getParD(level)->distributions.f[0], - para->getParD(level)->distributionsAD7.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); - - } else if (para->getDiffMod() == 27) { // QNoSlipADincompDev27( // para->getParD(level)->numberofthreads, // para->getParD(level)->distributions.f[0], @@ -358,53 +217,11 @@ void ADKernelManager::runADgeometryBCKernel(const int level) const para->getParD(level)->neighborZ, para->getParD(level)->numberOfNodes, para->getParD(level)->isEvenTimestep); - } } } void ADKernelManager::runADveloBCKernel(const int level) const{ if (para->getParD(level)->TempVel.kTemp > 0){ - if (para->getDiffMod() == 7) - { - // QADVeloIncompDev7( - // para->getParD(level)->numberofthreads, - // para->getParD(level)->distributions.f[0], - // para->getParD(level)->distributionsAD7.f[0], - // para->getParD(level)->TempVel.tempPulse, - // 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 - ////////////////////////////////////////////////////////////////////////// - - QADVelDev7( - para->getParD(level)->numberofthreads, - para->getParD(level)->distributions.f[0], - para->getParD(level)->distributionsAD7.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); - - } else if (para->getDiffMod() == 27) { // QADVeloIncompDev27( // para->getParD(level)->numberofthreads, // para->getParD(level)->distributions.f[0], @@ -442,48 +259,6 @@ void ADKernelManager::runADveloBCKernel(const int level) const{ para->getParD(level)->numberOfNodes, para->getParD(level)->isEvenTimestep); - ////////////////////////////////////////////////////////////////////////// - // W T G _ R U B - ////////////////////////////////////////////////////////////////////////// - // 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)->distributions.f[0], - // para->getParD(level)->distributionsAD27.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], - // para->getParD(level)->velocityBC.numberOfBCnodes, - // para->getParD(level)->omega, - // para->getParD(level)->neighborX, - // para->getParD(level)->neighborY, - // para->getParD(level)->neighborZ, - // para->getParD(level)->numberOfNodes, - // para->getParD(level)->isEvenTimestep); - // } - // else - // { - // QADVelDev27( - // 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)->velocityBC.k, - // para->getParD(level)->velocityBC.q27[0], - // para->getParD(level)->velocityBC.numberOfBCnodes, - // para->getParD(level)->omega, - // para->getParD(level)->neighborX, - // para->getParD(level)->neighborY, - // para->getParD(level)->neighborZ, - // para->getParD(level)->numberOfNodes, - // para->getParD(level)->isEvenTimestep); - // } - } } } diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.h b/src/gpu/core/KernelManager/ADKernelManager.h similarity index 92% rename from src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.h rename to src/gpu/core/KernelManager/ADKernelManager.h index d961452575b905acb96fbc1c30ff0d5e71af2722..46d818b04e3a2f3fc2b53d5deef249900d324faa 100644 --- a/src/gpu/VirtualFluids_GPU/KernelManager/ADKernelManager.h +++ b/src/gpu/core/KernelManager/ADKernelManager.h @@ -33,23 +33,26 @@ #ifndef ADVECTION_DIFFUSION_H #define ADVECTION_DIFFUSION_H -#include "DataTypes.h" -#include "PointerDefinitions.h" -#include "VirtualFluids_GPU_export.h" +#include <vector> + +#include <basics/DataTypes.h> +#include <basics/PointerDefinitions.h> + //! \brief Class forwarding for Parameter, CudaMemoryManager class Parameter; class CudaMemoryManager; +class AdvectionDiffusionKernel; //! \class ADKernelManager //! \brief manage the advection diffusion kernel calls -class VIRTUALFLUIDS_GPU_EXPORT ADKernelManager +class ADKernelManager { public: //! Class constructor //! \param parameter shared pointer to instance of class Parameter - ADKernelManager(SPtr<Parameter> parameter); + ADKernelManager(SPtr<Parameter> parameter, std::vector<SPtr<AdvectionDiffusionKernel>>& adkernels); //! \brief initialize the advection diffusion distributions void initAD(const int level) const; @@ -79,6 +82,7 @@ public: private: SPtr<Parameter> para; + std::vector<SPtr<AdvectionDiffusionKernel>> adkernels; }; #endif diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.cpp b/src/gpu/core/KernelManager/BCKernelManager.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.cpp rename to src/gpu/core/KernelManager/BCKernelManager.cpp diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.h b/src/gpu/core/KernelManager/BCKernelManager.h similarity index 98% rename from src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.h rename to src/gpu/core/KernelManager/BCKernelManager.h index 339100e6b5307e8e60f8d0846560bf89c6eea1a1..1961f25f4f9d6ca899d07158aaeeb7caab2b2738 100644 --- a/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManager.h +++ b/src/gpu/core/KernelManager/BCKernelManager.h @@ -38,8 +38,8 @@ #include <string> #include "LBM/LB.h" -#include "PointerDefinitions.h" -#include "VirtualFluids_GPU_export.h" +#include <basics/PointerDefinitions.h> + class CudaMemoryManager; @@ -54,7 +54,7 @@ using precursorBoundaryCondition = std::function<void(LBMSimulationParameter *, //! \class BCKernelManager //! \brief manage the cuda kernel calls to boundary conditions //! \details This class stores the boundary conditions and manages the calls to the boundary condition kernels. -class VIRTUALFLUIDS_GPU_EXPORT BCKernelManager +class BCKernelManager { public: //! Class constructor diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManagerTest.cpp b/src/gpu/core/KernelManager/BCKernelManagerTest.cpp similarity index 99% rename from src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManagerTest.cpp rename to src/gpu/core/KernelManager/BCKernelManagerTest.cpp index 6b429d2d9c03e546286d3d2b0ced3612c0a4649a..3cb6138ca203f70fb65dad44cb1d317c098cb3b2 100644 --- a/src/gpu/VirtualFluids_GPU/KernelManager/BCKernelManagerTest.cpp +++ b/src/gpu/core/KernelManager/BCKernelManagerTest.cpp @@ -5,7 +5,7 @@ #include "BCKernelManager.h" #include "Factories/BoundaryConditionFactory.h" #include "Parameter/Parameter.h" -#include "PointerDefinitions.h" +#include <basics/PointerDefinitions.h> class BCKernelManagerTest_BCsNotSpecified : public testing::Test { diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.cpp b/src/gpu/core/KernelManager/GridScalingKernelManager.cpp similarity index 87% rename from src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.cpp rename to src/gpu/core/KernelManager/GridScalingKernelManager.cpp index 229922b1ec1654e7ca664f9d19a7b7c6e264fd83..4c168389d189726b47ded9176b6ad27d84063881 100644 --- a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.cpp +++ b/src/gpu/core/KernelManager/GridScalingKernelManager.cpp @@ -258,52 +258,6 @@ void GridScalingKernelManager::runFineToCoarseKernelAD(const int level) const { //A D V E C T I O N D I F F U S I O N - if (para->getDiffMod() == 7) - { - // ScaleFCThS7( - // para->getParD(level)->distributions.f[0], - // para->getParD(level+1)->distributions.f[0], - // para->getParD(level)->distributionsAD7.f[0], - // para->getParD(level+1)->distributionsAD7.f[0], - // para->getParD(level)->neighborX, - // para->getParD(level)->neighborY, - // para->getParD(level)->neighborZ, - // para->getParD(level+1)->neighborX, - // para->getParD(level+1)->neighborY, - // para->getParD(level+1)->neighborZ, - // para->getParD(level)->numberOfNodes, - // para->getParD(level+1)->numberOfNodes, - // para->getParD(level)->isEvenTimestep, - // para->getParD(level)->intFC.ICellFCC, - // para->getParD(level)->intFC.ICellFCF, - // para->getParD(level)->K_FC, - // para->getParD(level)->vis, - // para->getParD(level)->diffusivity, - // para->getParD(level)->numberofthreads); - ScaleFCThSMG7( - para->getParD(level)->distributions.f[0], - para->getParD(level+1)->distributions.f[0], - para->getParD(level)->distributionsAD7.f[0], - para->getParD(level+1)->distributionsAD7.f[0], - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level+1)->neighborX, - para->getParD(level+1)->neighborY, - para->getParD(level+1)->neighborZ, - para->getParD(level)->numberOfNodes, - para->getParD(level+1)->numberOfNodes, - para->getParD(level)->isEvenTimestep, - para->getParD(level)->fineToCoarse.coarseCellIndices, - para->getParD(level)->fineToCoarse.fineCellIndices, - para->getParD(level)->fineToCoarse.numberOfCells, - para->getParD(level)->viscosity, - para->getParD(level)->diffusivity, - para->getParD(level)->numberofthreads, - para->getParD(level)->neighborFineToCoarse); - } - else if (para->getDiffMod() == 27) - { ScaleFCThS27( para->getParD(level)->distributions.f[0], para->getParD(level+1)->distributions.f[0], @@ -325,7 +279,6 @@ void GridScalingKernelManager::runFineToCoarseKernelAD(const int level) const para->getParD(level)->diffusivity, para->getParD(level)->numberofthreads, para->getParD(level)->neighborFineToCoarse); - } } void GridScalingKernelManager::runCoarseToFineKernelLB(const int level, InterpolationCells* coarseToFine, ICellNeigh &neighborFineToCoarse, CudaStreamIndex streamIndex) const @@ -526,53 +479,6 @@ void GridScalingKernelManager::runCoarseToFineKernelAD(const int level) const { // A D V E C T I O N D I F F U S I O N - if (para->getDiffMod() == 7) - { - // ScaleCFThS7( - // para->getParD(level)->distributions.f[0], - // para->getParD(level+1)->distributions.f[0], - // para->getParD(level)->distributionsAD7.f[0], - // para->getParD(level+1)->distributionsAD7.f[0], - // para->getParD(level)->neighborX, - // para->getParD(level)->neighborY, - // para->getParD(level)->neighborZ, - // para->getParD(level+1)->neighborX, - // para->getParD(level+1)->neighborY, - // para->getParD(level+1)->neighborZ, - // para->getParD(level)->numberOfNodes, - // para->getParD(level+1)->numberOfNodes, - // para->getParD(level)->isEvenTimestep, - // para->getParD(level)->intCF.ICellCFC, - // para->getParD(level)->intCF.ICellCFF, - // para->getParD(level)->K_CF, - // para->getParD(level)->vis, - // para->getParD(level+1)->diffusivity, - // para->getParD(level)->numberofthreads); - - ScaleCFThSMG7( - para->getParD(level)->distributions.f[0], - para->getParD(level+1)->distributions.f[0], - para->getParD(level)->distributionsAD7.f[0], - para->getParD(level+1)->distributionsAD7.f[0], - para->getParD(level)->neighborX, - para->getParD(level)->neighborY, - para->getParD(level)->neighborZ, - para->getParD(level+1)->neighborX, - para->getParD(level+1)->neighborY, - para->getParD(level+1)->neighborZ, - para->getParD(level)->numberOfNodes, - para->getParD(level+1)->numberOfNodes, - para->getParD(level)->isEvenTimestep, - para->getParD(level)->coarseToFine.coarseCellIndices, - para->getParD(level)->coarseToFine.fineCellIndices, - para->getParD(level)->coarseToFine.numberOfCells, - para->getParD(level)->viscosity, - para->getParD(level+1)->diffusivity, - para->getParD(level)->numberofthreads, - para->getParD(level)->neighborCoarseToFine); - } - else if (para->getDiffMod() == 27) - { ScaleCFThS27( para->getParD(level)->distributions.f[0], para->getParD(level+1)->distributions.f[0], @@ -594,5 +500,4 @@ void GridScalingKernelManager::runCoarseToFineKernelAD(const int level) const para->getParD(level+1)->diffusivity, para->getParD(level)->numberofthreads, para->getParD(level)->neighborCoarseToFine); - } } diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.h b/src/gpu/core/KernelManager/GridScalingKernelManager.h similarity index 97% rename from src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.h rename to src/gpu/core/KernelManager/GridScalingKernelManager.h index 0c24801506b9a19985d1a805b349d0b58e9bbf84..6bfafef8e3b20519b2ad7e6a267476f465a47ecf 100644 --- a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManager.h +++ b/src/gpu/core/KernelManager/GridScalingKernelManager.h @@ -34,8 +34,8 @@ #define GridScalingKernelManager_H #include "LBM/LB.h" -#include "PointerDefinitions.h" -#include "VirtualFluids_GPU_export.h" +#include <basics/PointerDefinitions.h> + #include <logger/Logger.h> #include <functional> #include <memory> @@ -53,7 +53,7 @@ using gridScaling = //! \class GridScalingKernelManager //! \brief manage the cuda kernel calls -class VIRTUALFLUIDS_GPU_EXPORT GridScalingKernelManager +class GridScalingKernelManager { public: //! Class constructor diff --git a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManagerTest.cpp b/src/gpu/core/KernelManager/GridScalingKernelManagerTest.cpp similarity index 98% rename from src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManagerTest.cpp rename to src/gpu/core/KernelManager/GridScalingKernelManagerTest.cpp index b86e167ca8d2f95897b1a87d4b850acbfbe8a1b3..6972cec264e9407f79641618cbe08a4077e70b6b 100644 --- a/src/gpu/VirtualFluids_GPU/KernelManager/GridScalingKernelManagerTest.cpp +++ b/src/gpu/core/KernelManager/GridScalingKernelManagerTest.cpp @@ -4,7 +4,7 @@ #include "GridScalingKernelManager.h" #include "Factories/GridScalingFactory.h" #include "Parameter/Parameter.h" -#include "PointerDefinitions.h" +#include <basics/PointerDefinitions.h> class GridScalingKernelManagerTest_Initialization : public testing::Test { diff --git a/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/ChimeraTransformation.h b/src/gpu/core/LBM/GPUHelperFunctions/ChimeraTransformation.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/ChimeraTransformation.h rename to src/gpu/core/LBM/GPUHelperFunctions/ChimeraTransformation.h diff --git a/src/gpu/core/LBM/GPUHelperFunctions/KernelUtilities.h b/src/gpu/core/LBM/GPUHelperFunctions/KernelUtilities.h new file mode 100644 index 0000000000000000000000000000000000000000..688c7afe84dd1a0d6c8446463191de7fb8d0bbf5 --- /dev/null +++ b/src/gpu/core/LBM/GPUHelperFunctions/KernelUtilities.h @@ -0,0 +1,393 @@ +//======================================================================================= +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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/>. +// +//! \file KernelUtilities.h +//! \ingroup LBM/GPUHelperFunctions +//! \author Martin Schoenherr, Anna Wellmann, Soeren Peters +//======================================================================================= +#ifndef GPU_DISTRIBUTION_HELPER_H +#define GPU_DISTRIBUTION_HELPER_H + +#include "LBM/LB.h" + +#include <array> +#include <cassert> +#include <optional> + +#include <cuda_runtime.h> + +#include <lbm/constants/D3Q27.h> + +#include <basics/constants/NumericConstants.h> + +using namespace vf::basics::constant; +using namespace vf::lbm::dir; + +namespace vf::gpu +{ + +inline real getForceFactor(int level) +{ + real factor = c1o1; + for (size_t i = 1; i <= level; i++) { + factor *= c2o1; + } + factor = 1 / factor; + return factor; +} + +__inline__ __device__ __host__ void getPointersToDistributions(Distributions27 &dist, real *distributionArray, const unsigned long long numberOfLBnodes, const bool isEvenTimestep) +{ + if (isEvenTimestep) { + dist.f[d000] = &distributionArray[d000 * numberOfLBnodes]; + dist.f[dP00] = &distributionArray[dP00 * numberOfLBnodes]; + dist.f[dM00] = &distributionArray[dM00 * numberOfLBnodes]; + dist.f[d0P0] = &distributionArray[d0P0 * numberOfLBnodes]; + dist.f[d0M0] = &distributionArray[d0M0 * numberOfLBnodes]; + dist.f[d00P] = &distributionArray[d00P * numberOfLBnodes]; + dist.f[d00M] = &distributionArray[d00M * numberOfLBnodes]; + dist.f[dPP0] = &distributionArray[dPP0 * numberOfLBnodes]; + dist.f[dMM0] = &distributionArray[dMM0 * numberOfLBnodes]; + dist.f[dPM0] = &distributionArray[dPM0 * numberOfLBnodes]; + dist.f[dMP0] = &distributionArray[dMP0 * numberOfLBnodes]; + dist.f[dP0P] = &distributionArray[dP0P * numberOfLBnodes]; + dist.f[dM0M] = &distributionArray[dM0M * numberOfLBnodes]; + dist.f[dP0M] = &distributionArray[dP0M * numberOfLBnodes]; + dist.f[dM0P] = &distributionArray[dM0P * numberOfLBnodes]; + dist.f[d0PP] = &distributionArray[d0PP * numberOfLBnodes]; + dist.f[d0MM] = &distributionArray[d0MM * numberOfLBnodes]; + dist.f[d0PM] = &distributionArray[d0PM * numberOfLBnodes]; + dist.f[d0MP] = &distributionArray[d0MP * numberOfLBnodes]; + dist.f[dPPP] = &distributionArray[dPPP * numberOfLBnodes]; + dist.f[dMMP] = &distributionArray[dMMP * numberOfLBnodes]; + dist.f[dPMP] = &distributionArray[dPMP * numberOfLBnodes]; + dist.f[dMPP] = &distributionArray[dMPP * numberOfLBnodes]; + dist.f[dPPM] = &distributionArray[dPPM * numberOfLBnodes]; + dist.f[dMMM] = &distributionArray[dMMM * numberOfLBnodes]; + dist.f[dPMM] = &distributionArray[dPMM * numberOfLBnodes]; + dist.f[dMPM] = &distributionArray[dMPM * numberOfLBnodes]; + } else { + dist.f[dM00] = &distributionArray[dP00 * numberOfLBnodes]; + dist.f[dP00] = &distributionArray[dM00 * numberOfLBnodes]; + dist.f[d0M0] = &distributionArray[d0P0 * numberOfLBnodes]; + dist.f[d0P0] = &distributionArray[d0M0 * numberOfLBnodes]; + dist.f[d00M] = &distributionArray[d00P * numberOfLBnodes]; + dist.f[d00P] = &distributionArray[d00M * numberOfLBnodes]; + dist.f[dMM0] = &distributionArray[dPP0 * numberOfLBnodes]; + dist.f[dPP0] = &distributionArray[dMM0 * numberOfLBnodes]; + dist.f[dMP0] = &distributionArray[dPM0 * numberOfLBnodes]; + dist.f[dPM0] = &distributionArray[dMP0 * numberOfLBnodes]; + dist.f[dM0M] = &distributionArray[dP0P * numberOfLBnodes]; + dist.f[dP0P] = &distributionArray[dM0M * numberOfLBnodes]; + dist.f[dM0P] = &distributionArray[dP0M * numberOfLBnodes]; + dist.f[dP0M] = &distributionArray[dM0P * numberOfLBnodes]; + dist.f[d0MM] = &distributionArray[d0PP * numberOfLBnodes]; + dist.f[d0PP] = &distributionArray[d0MM * numberOfLBnodes]; + dist.f[d0MP] = &distributionArray[d0PM * numberOfLBnodes]; + dist.f[d0PM] = &distributionArray[d0MP * numberOfLBnodes]; + dist.f[d000] = &distributionArray[d000 * numberOfLBnodes]; + dist.f[dPPP] = &distributionArray[dMMM * numberOfLBnodes]; + dist.f[dMMP] = &distributionArray[dPPM * numberOfLBnodes]; + dist.f[dPMP] = &distributionArray[dMPM * numberOfLBnodes]; + dist.f[dMPP] = &distributionArray[dPMM * numberOfLBnodes]; + dist.f[dPPM] = &distributionArray[dMMP * numberOfLBnodes]; + dist.f[dMMM] = &distributionArray[dPPP * numberOfLBnodes]; + dist.f[dPMM] = &distributionArray[dMPP * numberOfLBnodes]; + dist.f[dMPM] = &distributionArray[dPMP * numberOfLBnodes]; + } +} + +/** + * Getting references to the 27 directions. + * @params distributions 1D real* array containing all data (number of elements = 27 * matrix_size) + * @params matrix_size number of discretizations nodes + * @params isEvenTimestep: stored data dependent on timestep is based on the esoteric twist algorithm + * @return a data struct containing the addresses to the 27 directions within the 1D distribution array + */ +__inline__ __device__ __host__ DistributionReferences27 getDistributionReferences27(real* distributions, const unsigned long long numberOfLBnodes, const bool isEvenTimestep){ + DistributionReferences27 distribution_references; + getPointersToDistributions(distribution_references, distributions, numberOfLBnodes, isEvenTimestep); + return distribution_references; +} + +__inline__ __device__ void getPointersToSubgridDistances(SubgridDistances27& subgridD, real* subgridDistances, const unsigned int numberOfSubgridIndices) +{ + subgridD.q[dP00] = &subgridDistances[dP00 * numberOfSubgridIndices]; + subgridD.q[dM00] = &subgridDistances[dM00 * numberOfSubgridIndices]; + subgridD.q[d0P0] = &subgridDistances[d0P0 * numberOfSubgridIndices]; + subgridD.q[d0M0] = &subgridDistances[d0M0 * numberOfSubgridIndices]; + subgridD.q[d00P] = &subgridDistances[d00P * numberOfSubgridIndices]; + subgridD.q[d00M] = &subgridDistances[d00M * numberOfSubgridIndices]; + subgridD.q[dPP0] = &subgridDistances[dPP0 * numberOfSubgridIndices]; + subgridD.q[dMM0] = &subgridDistances[dMM0 * numberOfSubgridIndices]; + subgridD.q[dPM0] = &subgridDistances[dPM0 * numberOfSubgridIndices]; + subgridD.q[dMP0] = &subgridDistances[dMP0 * numberOfSubgridIndices]; + subgridD.q[dP0P] = &subgridDistances[dP0P * numberOfSubgridIndices]; + subgridD.q[dM0M] = &subgridDistances[dM0M * numberOfSubgridIndices]; + subgridD.q[dP0M] = &subgridDistances[dP0M * numberOfSubgridIndices]; + subgridD.q[dM0P] = &subgridDistances[dM0P * numberOfSubgridIndices]; + subgridD.q[d0PP] = &subgridDistances[d0PP * numberOfSubgridIndices]; + subgridD.q[d0MM] = &subgridDistances[d0MM * numberOfSubgridIndices]; + subgridD.q[d0PM] = &subgridDistances[d0PM * numberOfSubgridIndices]; + subgridD.q[d0MP] = &subgridDistances[d0MP * numberOfSubgridIndices]; + subgridD.q[d000] = &subgridDistances[d000 * numberOfSubgridIndices]; + subgridD.q[dPPP] = &subgridDistances[dPPP * numberOfSubgridIndices]; + subgridD.q[dMMP] = &subgridDistances[dMMP * numberOfSubgridIndices]; + subgridD.q[dPMP] = &subgridDistances[dPMP * numberOfSubgridIndices]; + subgridD.q[dMPP] = &subgridDistances[dMPP * numberOfSubgridIndices]; + subgridD.q[dPPM] = &subgridDistances[dPPM * numberOfSubgridIndices]; + subgridD.q[dMMM] = &subgridDistances[dMMM * numberOfSubgridIndices]; + subgridD.q[dPMM] = &subgridDistances[dPMM * numberOfSubgridIndices]; + subgridD.q[dMPM] = &subgridDistances[dMPM * numberOfSubgridIndices]; +} + +__inline__ __device__ real getEquilibriumForBC(const real& drho, const real& velocity, const real& cu_sq, const real weight) +{ + return weight * (drho + c9o2 * velocity * velocity * (c1o1 + drho) - cu_sq); +} + +__inline__ __device__ real getInterpolatedDistributionForVeloBC(const real& q, const real& f, const real& fInverse, const real& feq, + const real& omega, const real& velocity, const real weight) +{ + + return (c1o1-q) / (c1o1+q) * (f - fInverse + (f + fInverse - c2o1 * feq * omega) / (c1o1 - omega)) * c1o2 + + (q * (f + fInverse) - c6o1 * weight * velocity) / (c1o1 + q); +} + +__inline__ __device__ real getBounceBackDistributionForVeloBC( const real& f, + const real& velocity, const real weight) +{ + + return f - (c6o1 * weight * velocity); +} + +__inline__ __device__ real getInterpolatedDistributionForNoSlipBC(const real& q, const real& f, const real& fInverse, const real& feq, + const real& omega) +{ + + return (c1o1-q) / (c1o1+q) * (f - fInverse + (f + fInverse - c2o1 * feq * omega) / (c1o1 - omega)) * c1o2 + + (q * (f + fInverse)) / (c1o1 + q); +} + +__inline__ __device__ real getInterpolatedDistributionForNoSlipWithPressureBC(const real& q, const real& f, const real& fInverse, const real& feq, + const real& omega, const real& drho, const real weight) +{ + + return (c1o1-q) / (c1o1+q) * (f - fInverse + (f + fInverse - c2o1 * feq * omega) / (c1o1 - omega)) * c1o2 + + (q * (f + fInverse)) / (c1o1 + q) - weight * drho; +} + + +__inline__ __device__ real getInterpolatedDistributionForVeloWithPressureBC(const real& q, const real& f, const real& fInverse, const real& feq, + const real& omega, const real& drho, const real& velocity, const real weight) +{ + + return (c1o1-q) / (c1o1+q) * (f - fInverse + (f + fInverse - c2o1 * feq * omega) / (c1o1 - omega)) * c1o2 + + (q * (f + fInverse) - c6o1 * weight * velocity) / (c1o1 + q) - weight * drho; +} + +__inline__ __device__ unsigned int getNodeIndex() +{ + 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; + + return nx * (ny * z + y) + x; +} + +__inline__ __device__ bool isValidFluidNode(uint nodeType) +{ + return (nodeType == GEO_FLUID || nodeType == GEO_PM_0 || nodeType == GEO_PM_1 || nodeType == GEO_PM_2); +} + +struct ListIndices +{ + __device__ ListIndices() {}; + __device__ ListIndices(unsigned int index, const unsigned int* neighborX, const unsigned int* neighborY, + const unsigned int* neighborZ) + { + k_000 = index; + k_M00 = neighborX[k_000]; + k_0M0 = neighborY[k_000]; + k_00M = neighborZ[k_000]; + k_MM0 = neighborY[k_M00]; + k_M0M = neighborZ[k_M00]; + k_0MM = neighborZ[k_0M0]; + k_MMM = neighborZ[k_MM0]; + } + + unsigned int k_000 { 0 }; + unsigned int k_M00 { 0 }; + unsigned int k_0M0 { 0 }; + unsigned int k_00M { 0 }; + unsigned int k_MM0 { 0 }; + unsigned int k_M0M { 0 }; + unsigned int k_0MM { 0 }; + unsigned int k_MMM { 0 }; +}; + +//////////////////////////////////////////////////////////////////////////////////// +//! - Read distributions: style of reading and writing the distributions from/to +//! stored arrays dependent on timestep is based on the esoteric twist algorithm +//! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), +//! DOI:10.3390/computation5020019 ]</b></a> +__device__ __inline__ void getPreCollisionDistribution(real* local, const Distributions27& global, const ListIndices& indices) +{ + local[d000] = (global.f[d000])[indices.k_000]; + local[dP00] = (global.f[dP00])[indices.k_000]; + local[dM00] = (global.f[dM00])[indices.k_M00]; + local[d0P0] = (global.f[d0P0])[indices.k_000]; + local[d0M0] = (global.f[d0M0])[indices.k_0M0]; + local[d00P] = (global.f[d00P])[indices.k_000]; + local[d00M] = (global.f[d00M])[indices.k_00M]; + local[dPP0] = (global.f[dPP0])[indices.k_000]; + local[dMM0] = (global.f[dMM0])[indices.k_MM0]; + local[dPM0] = (global.f[dPM0])[indices.k_0M0]; + local[dMP0] = (global.f[dMP0])[indices.k_M00]; + local[dP0P] = (global.f[dP0P])[indices.k_000]; + local[dM0M] = (global.f[dM0M])[indices.k_M0M]; + local[dP0M] = (global.f[dP0M])[indices.k_00M]; + local[dM0P] = (global.f[dM0P])[indices.k_M00]; + local[d0PP] = (global.f[d0PP])[indices.k_000]; + local[d0MM] = (global.f[d0MM])[indices.k_0MM]; + local[d0PM] = (global.f[d0PM])[indices.k_00M]; + local[d0MP] = (global.f[d0MP])[indices.k_0M0]; + local[dPPP] = (global.f[dPPP])[indices.k_000]; + local[dMPP] = (global.f[dMPP])[indices.k_M00]; + local[dPMP] = (global.f[dPMP])[indices.k_0M0]; + local[dMMP] = (global.f[dMMP])[indices.k_MM0]; + local[dPPM] = (global.f[dPPM])[indices.k_00M]; + local[dMPM] = (global.f[dMPM])[indices.k_M0M]; + local[dPMM] = (global.f[dPMM])[indices.k_0MM]; + local[dMMM] = (global.f[dMMM])[indices.k_MMM]; +} + +__device__ __inline__ void getPostCollisionDistribution(real* local, const Distributions27& global, const ListIndices& indices) +{ + local[d000] = (global.f[d000])[indices.k_000]; + local[dP00] = (global.f[dP00])[indices.k_000]; + local[dM00] = (global.f[dM00])[indices.k_M00]; + local[d0P0] = (global.f[d0P0])[indices.k_000]; + local[d0M0] = (global.f[d0M0])[indices.k_0M0]; + local[d00P] = (global.f[d00P])[indices.k_000]; + local[d00M] = (global.f[d00M])[indices.k_00M]; + local[dPP0] = (global.f[dPP0])[indices.k_000]; + local[dMM0] = (global.f[dMM0])[indices.k_MM0]; + local[dPM0] = (global.f[dPM0])[indices.k_0M0]; + local[dMP0] = (global.f[dMP0])[indices.k_M00]; + local[dP0P] = (global.f[dP0P])[indices.k_000]; + local[dM0M] = (global.f[dM0M])[indices.k_M0M]; + local[dP0M] = (global.f[dP0M])[indices.k_00M]; + local[dM0P] = (global.f[dM0P])[indices.k_M00]; + local[d0PP] = (global.f[d0PP])[indices.k_000]; + local[d0MM] = (global.f[d0MM])[indices.k_0MM]; + local[d0PM] = (global.f[d0PM])[indices.k_00M]; + local[d0MP] = (global.f[d0MP])[indices.k_0M0]; + local[dPPP] = (global.f[dPPP])[indices.k_000]; + local[dMPP] = (global.f[dMPP])[indices.k_M00]; + local[dPMP] = (global.f[dPMP])[indices.k_0M0]; + local[dMMP] = (global.f[dMMP])[indices.k_MM0]; + local[dPPM] = (global.f[dPPM])[indices.k_00M]; + local[dMPM] = (global.f[dMPM])[indices.k_M0M]; + local[dPMM] = (global.f[dPMM])[indices.k_0MM]; + local[dMMM] = (global.f[dMMM])[indices.k_MMM]; +} + +//////////////////////////////////////////////////////////////////////////////////// +//! - Write distributions: style of reading and writing the distributions from/to +//! stored arrays dependent on timestep is based on the esoteric twist algorithm +//! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), +//! DOI:10.3390/computation5020019 ]</b></a> +__inline__ __device__ void setPreCollisionDistribution(Distributions27& global, const ListIndices& indices, const real* local) +{ + (global.f[d000])[indices.k_000] = local[d000]; + (global.f[dP00])[indices.k_000] = local[dP00]; + (global.f[dM00])[indices.k_M00] = local[dM00]; + (global.f[d0P0])[indices.k_000] = local[d0P0]; + (global.f[d0M0])[indices.k_0M0] = local[d0M0]; + (global.f[d00P])[indices.k_000] = local[d00P]; + (global.f[d00M])[indices.k_00M] = local[d00M]; + (global.f[dPP0])[indices.k_000] = local[dPP0]; + (global.f[dMM0])[indices.k_MM0] = local[dMM0]; + (global.f[dPM0])[indices.k_0M0] = local[dPM0]; + (global.f[dMP0])[indices.k_M00] = local[dMP0]; + (global.f[dP0P])[indices.k_000] = local[dP0P]; + (global.f[dM0M])[indices.k_M0M] = local[dM0M]; + (global.f[dP0M])[indices.k_00M] = local[dP0M]; + (global.f[dM0P])[indices.k_M00] = local[dM0P]; + (global.f[d0PP])[indices.k_000] = local[d0PP]; + (global.f[d0MM])[indices.k_0MM] = local[d0MM]; + (global.f[d0PM])[indices.k_00M] = local[d0PM]; + (global.f[d0MP])[indices.k_0M0] = local[d0MP]; + (global.f[dPPP])[indices.k_000] = local[dPPP]; + (global.f[dMPP])[indices.k_M00] = local[dMPP]; + (global.f[dPMP])[indices.k_0M0] = local[dPMP]; + (global.f[dMMP])[indices.k_MM0] = local[dMMP]; + (global.f[dPPM])[indices.k_00M] = local[dPPM]; + (global.f[dMPM])[indices.k_M0M] = local[dMPM]; + (global.f[dPMM])[indices.k_0MM] = local[dPMM]; + (global.f[dMMM])[indices.k_MMM] = local[dMMM]; +} + +__inline__ __device__ void setPostCollisionDistribution(Distributions27& global, const ListIndices& indices, const real* local) +{ + (global.f[d000])[indices.k_000] = local[d000]; + (global.f[dP00])[indices.k_000] = local[dM00]; + (global.f[dM00])[indices.k_M00] = local[dP00]; + (global.f[d0P0])[indices.k_000] = local[d0M0]; + (global.f[d0M0])[indices.k_0M0] = local[d0P0]; + (global.f[d00P])[indices.k_000] = local[d00M]; + (global.f[d00M])[indices.k_00M] = local[d00P]; + (global.f[dPP0])[indices.k_000] = local[dMM0]; + (global.f[dMM0])[indices.k_MM0] = local[dPP0]; + (global.f[dPM0])[indices.k_0M0] = local[dMP0]; + (global.f[dMP0])[indices.k_M00] = local[dPM0]; + (global.f[dP0P])[indices.k_000] = local[dM0M]; + (global.f[dM0M])[indices.k_M0M] = local[dP0P]; + (global.f[dP0M])[indices.k_00M] = local[dM0P]; + (global.f[dM0P])[indices.k_M00] = local[dP0M]; + (global.f[d0PP])[indices.k_000] = local[d0MM]; + (global.f[d0MM])[indices.k_0MM] = local[d0PP]; + (global.f[d0PM])[indices.k_00M] = local[d0MP]; + (global.f[d0MP])[indices.k_0M0] = local[d0PM]; + (global.f[dPPP])[indices.k_000] = local[dMMM]; + (global.f[dMPP])[indices.k_M00] = local[dPMM]; + (global.f[dPMP])[indices.k_0M0] = local[dMPM]; + (global.f[dMMP])[indices.k_MM0] = local[dPPM]; + (global.f[dPPM])[indices.k_00M] = local[dMMP]; + (global.f[dMPM])[indices.k_M0M] = local[dPMP]; + (global.f[dPMM])[indices.k_0MM] = local[dMPP]; + (global.f[dMMM])[indices.k_MMM] = local[dPPP]; +} + +} + +#endif diff --git a/src/gpu/core/LBM/GPUHelperFunctions/KernelUtilitiesTests.cpp b/src/gpu/core/LBM/GPUHelperFunctions/KernelUtilitiesTests.cpp new file mode 100644 index 0000000000000000000000000000000000000000..24c690ba4dfaef64665b24ab35a8211b7bd8f52d --- /dev/null +++ b/src/gpu/core/LBM/GPUHelperFunctions/KernelUtilitiesTests.cpp @@ -0,0 +1,87 @@ +#include <gmock/gmock.h> + +#include <basics/tests/testUtilities.h> + +#include "KernelUtilities.h" + +#include <lbm/constants/D3Q27.h> + +using namespace vf::lbm::dir; + +TEST(DistributionHelperTests, getPointerToDistribution_WhenEvenTimeStep_ShouldBeEqualToInput) +{ + real distributions_in[27]; + for (int i = 0; i < 27; i++) + distributions_in[i] = i; + const uint size_Mat = 1; + const bool isEvenTimeStep = true; + + Distributions27 distribution_out = vf::gpu::getDistributionReferences27(distributions_in, size_Mat, isEvenTimeStep); + + EXPECT_THAT(*distribution_out.f[dP00], RealEq(distributions_in[dP00])); + EXPECT_THAT(*distribution_out.f[dM00], RealEq(distributions_in[dM00])); + EXPECT_THAT(*distribution_out.f[d0P0], RealEq(distributions_in[d0P0])); + EXPECT_THAT(*distribution_out.f[d0M0], RealEq(distributions_in[d0M0])); + EXPECT_THAT(*distribution_out.f[d00P], RealEq(distributions_in[d00P])); + EXPECT_THAT(*distribution_out.f[d00M], RealEq(distributions_in[d00M])); + EXPECT_THAT(*distribution_out.f[dPP0], RealEq(distributions_in[dPP0])); + EXPECT_THAT(*distribution_out.f[dMM0], RealEq(distributions_in[dMM0])); + EXPECT_THAT(*distribution_out.f[dPM0], RealEq(distributions_in[dPM0])); + EXPECT_THAT(*distribution_out.f[dMP0], RealEq(distributions_in[dMP0])); + EXPECT_THAT(*distribution_out.f[dP0P], RealEq(distributions_in[dP0P])); + EXPECT_THAT(*distribution_out.f[dM0M], RealEq(distributions_in[dM0M])); + EXPECT_THAT(*distribution_out.f[dP0M], RealEq(distributions_in[dP0M])); + EXPECT_THAT(*distribution_out.f[dM0P], RealEq(distributions_in[dM0P])); + EXPECT_THAT(*distribution_out.f[d0PP], RealEq(distributions_in[d0PP])); + EXPECT_THAT(*distribution_out.f[d0MM], RealEq(distributions_in[d0MM])); + EXPECT_THAT(*distribution_out.f[d0PM], RealEq(distributions_in[d0PM])); + EXPECT_THAT(*distribution_out.f[d0MP], RealEq(distributions_in[d0MP])); + EXPECT_THAT(*distribution_out.f[d000], RealEq(distributions_in[d000])); + EXPECT_THAT(*distribution_out.f[dPPP], RealEq(distributions_in[dPPP])); + EXPECT_THAT(*distribution_out.f[dMMP], RealEq(distributions_in[dMMP])); + EXPECT_THAT(*distribution_out.f[dPMP], RealEq(distributions_in[dPMP])); + EXPECT_THAT(*distribution_out.f[dMPP], RealEq(distributions_in[dMPP])); + EXPECT_THAT(*distribution_out.f[dPPM], RealEq(distributions_in[dPPM])); + EXPECT_THAT(*distribution_out.f[dMMM], RealEq(distributions_in[dMMM])); + EXPECT_THAT(*distribution_out.f[dPMM], RealEq(distributions_in[dPMM])); + EXPECT_THAT(*distribution_out.f[dMPM], RealEq(distributions_in[dMPM])); +} + +TEST(DistributionHelperTests, getPointerToDistribution_WhenOddTimeStep_ShouldBeSwapped) +{ + real distributions_in[27]; + for (int i = 0; i < 27; i++) + distributions_in[i] = i; + const int size_Mat = 1; + const bool isEvenTimeStep = false; + + Distributions27 distribution_out = vf::gpu::getDistributionReferences27(distributions_in, size_Mat, isEvenTimeStep); + + EXPECT_THAT(*distribution_out.f[dM00], RealEq(distributions_in[dP00])); + EXPECT_THAT(*distribution_out.f[dP00], RealEq(distributions_in[dM00])); + EXPECT_THAT(*distribution_out.f[d0M0], RealEq(distributions_in[d0P0])); + EXPECT_THAT(*distribution_out.f[d0P0], RealEq(distributions_in[d0M0])); + EXPECT_THAT(*distribution_out.f[d00M], RealEq(distributions_in[d00P])); + EXPECT_THAT(*distribution_out.f[d00P], RealEq(distributions_in[d00M])); + EXPECT_THAT(*distribution_out.f[dMM0], RealEq(distributions_in[dPP0])); + EXPECT_THAT(*distribution_out.f[dPP0], RealEq(distributions_in[dMM0])); + EXPECT_THAT(*distribution_out.f[dMP0], RealEq(distributions_in[dPM0])); + EXPECT_THAT(*distribution_out.f[dPM0], RealEq(distributions_in[dMP0])); + EXPECT_THAT(*distribution_out.f[dM0M], RealEq(distributions_in[dP0P])); + EXPECT_THAT(*distribution_out.f[dP0P], RealEq(distributions_in[dM0M])); + EXPECT_THAT(*distribution_out.f[dM0P], RealEq(distributions_in[dP0M])); + EXPECT_THAT(*distribution_out.f[dP0M], RealEq(distributions_in[dM0P])); + EXPECT_THAT(*distribution_out.f[d0MM], RealEq(distributions_in[d0PP])); + EXPECT_THAT(*distribution_out.f[d0PP], RealEq(distributions_in[d0MM])); + EXPECT_THAT(*distribution_out.f[d0MP], RealEq(distributions_in[d0PM])); + EXPECT_THAT(*distribution_out.f[d0PM], RealEq(distributions_in[d0MP])); + EXPECT_THAT(*distribution_out.f[d000], RealEq(distributions_in[d000])); + EXPECT_THAT(*distribution_out.f[dMMM], RealEq(distributions_in[dPPP])); + EXPECT_THAT(*distribution_out.f[dPPM], RealEq(distributions_in[dMMP])); + EXPECT_THAT(*distribution_out.f[dMPM], RealEq(distributions_in[dPMP])); + EXPECT_THAT(*distribution_out.f[dPMM], RealEq(distributions_in[dMPP])); + EXPECT_THAT(*distribution_out.f[dMMP], RealEq(distributions_in[dPPM])); + EXPECT_THAT(*distribution_out.f[dPPP], RealEq(distributions_in[dMMM])); + EXPECT_THAT(*distribution_out.f[dMPP], RealEq(distributions_in[dPMM])); + EXPECT_THAT(*distribution_out.f[dPMP], RealEq(distributions_in[dMPM])); +} diff --git a/src/gpu/core/LBM/GPUHelperFunctions/RunCollision.cuh b/src/gpu/core/LBM/GPUHelperFunctions/RunCollision.cuh new file mode 100644 index 0000000000000000000000000000000000000000..063fa2a709704fa4131443399c96838bb546ee09 --- /dev/null +++ b/src/gpu/core/LBM/GPUHelperFunctions/RunCollision.cuh @@ -0,0 +1,114 @@ +#ifndef GPU_RUNCOLLISIONKERNEL_CUH +#define GPU_RUNCOLLISIONKERNEL_CUH + +#include <cuda_runtime.h> + +#include <basics/DataTypes.h> + +#include <lbm/collision/CollisionParameter.h> +#include <lbm/collision/TurbulentViscosity.h> + +#include "LBM/GPUHelperFunctions/KernelUtilities.h" + +namespace vf::gpu +{ + +struct GPUCollisionParameter +{ + real omega; + unsigned int* neighborX; + unsigned int* neighborY; + unsigned int* neighborZ; + real* distributions; + real* rho; + real* vx; + real* vy; + real* vz; + real* turbulentViscosity; + real SGSconstant; + int numberOfLBnodes; + real forceFactor; + real* forces; + real* bodyForceX; + real* bodyForceY; + real* bodyForceZ; + real* quadricLimiters; + bool isEvenTimestep; + const uint* fluidNodeIndices; + uint numberOfFluidNodes; +}; + +template <typename CollisionFunctor, vf::lbm::TurbulenceModel turbulenceModel, bool writeMacroscopicVariables, bool applyBodyForce> +__global__ void runCollision(CollisionFunctor collision, GPUCollisionParameter collisionParameter) +{ + const unsigned nodeIndex = getNodeIndex(); + + if (nodeIndex >= collisionParameter.numberOfFluidNodes) + return; + + const unsigned k_000 = collisionParameter.fluidNodeIndices[nodeIndex]; + + vf::lbm::CollisionParameter para; + para.omega = collisionParameter.omega; + para.quadricLimiter = collisionParameter.quadricLimiters; + + if (applyBodyForce) { + para.forceX = (collisionParameter.forces[0] + collisionParameter.bodyForceX[k_000]) * c1o2 * collisionParameter.forceFactor; + para.forceY = (collisionParameter.forces[1] + collisionParameter.bodyForceY[k_000]) * c1o2 * collisionParameter.forceFactor; + para.forceZ = (collisionParameter.forces[2] + collisionParameter.bodyForceZ[k_000]) * c1o2 * collisionParameter.forceFactor; + + // Reset body force. To be used when not using round-off correction. + collisionParameter.bodyForceX[k_000] = c0o1; + collisionParameter.bodyForceY[k_000] = c0o1; + collisionParameter.bodyForceZ[k_000] = c0o1; + + //////////////////////////////////////////////////////////////////////////////////// + //!> Round-off correction + //! + //!> Similar to Kahan summation algorithm (https://en.wikipedia.org/wiki/Kahan_summation_algorithm) + //!> Essentially computes the round-off error of the applied force and adds it in the next time step as a compensation. + //!> Seems to be necesseary at very high Re boundary layers, where the forcing and velocity can + //!> differ by several orders of magnitude. + //!> \note 16/05/2022: Testing, still ongoing! + //! + // bodyForceX[k_000] = (acc_x-(vvx-vx))*factor*c2o1; + // bodyForceY[k_000] = (acc_y-(vvy-vy))*factor*c2o1; + // bodyForceZ[k_000] = (acc_z-(vvz-vz))*factor*c2o1; + } else { + para.forceX = collisionParameter.forces[0] * c1o2 * collisionParameter.forceFactor; + para.forceY = collisionParameter.forces[1] * c1o2 * collisionParameter.forceFactor; + para.forceZ = collisionParameter.forces[2] * c1o2 * collisionParameter.forceFactor; + } + + vf::lbm::TurbulentViscosity turbulentViscosity; + if (turbulenceModel != vf::lbm::TurbulenceModel::None) { + turbulentViscosity.value = collisionParameter.turbulentViscosity[k_000]; + turbulentViscosity.SGSconstant = collisionParameter.SGSconstant; + } + + Distributions27 dist; + getPointersToDistributions(dist, collisionParameter.distributions, collisionParameter.numberOfLBnodes, + collisionParameter.isEvenTimestep); + + ListIndices listIndices(k_000, collisionParameter.neighborX, collisionParameter.neighborY, collisionParameter.neighborZ); + + getPreCollisionDistribution(para.distribution, dist, listIndices); + + vf::lbm::MacroscopicValues macroscopicValues; + collision(para, macroscopicValues, turbulentViscosity); + + if (writeMacroscopicVariables || turbulenceModel == vf::lbm::TurbulenceModel::AMD) { + collisionParameter.vx[k_000] = macroscopicValues.vx; + collisionParameter.vy[k_000] = macroscopicValues.vy; + collisionParameter.vz[k_000] = macroscopicValues.vz; + collisionParameter.rho[k_000] = macroscopicValues.rho; + } + if (turbulenceModel != vf::lbm::TurbulenceModel::None) + collisionParameter.turbulentViscosity[k_000] = turbulentViscosity.value; + + setPostCollisionDistribution(dist, listIndices, para.distribution); +} + +} // namespace vf::gpu + +#endif diff --git a/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/ScalingUtilities.h b/src/gpu/core/LBM/GPUHelperFunctions/ScalingUtilities.h similarity index 84% rename from src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/ScalingUtilities.h rename to src/gpu/core/LBM/GPUHelperFunctions/ScalingUtilities.h index 606f6b38b4f50ebc621cce23f05c2d54091934f9..e6e47492b93f7c4cec68f068887d0aef644bfb9d 100644 --- a/src/gpu/VirtualFluids_GPU/LBM/GPUHelperFunctions/ScalingUtilities.h +++ b/src/gpu/core/LBM/GPUHelperFunctions/ScalingUtilities.h @@ -38,10 +38,10 @@ #include <basics/constants/NumericConstants.h> #include <lbm/constants/D3Q27.h> -#include <lbm/KernelParameter.h> #include <basics/DataTypes.h> -#include <lbm/refinement/Coefficients.h> +#include <lbm/interpolation/InterpolationCoefficients.h> +#include <lbm/collision/TurbulentViscosity.h> using namespace vf::basics::constant; using namespace vf::lbm::dir; @@ -95,11 +95,11 @@ template<bool hasTurbulentViscosity> __device__ void calculateMomentSet( indices.k_0MM = k_base_0MM; indices.k_MMM = k_base_MMM; - omega_ = hasTurbulentViscosity ? calculateOmega(omega, turbulentViscosity[indices.k_000]) : omega; + omega_ = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omega, turbulentViscosity[indices.k_000]) : omega; real f_fine[27]; - read(f_fine, distFine, indices); + getPreCollisionDistribution(f_fine, distFine, indices); momentsSet.calculateMMM(f_fine, omega_); ////////////////////////////////////////////////////////////////////////// @@ -115,9 +115,9 @@ template<bool hasTurbulentViscosity> __device__ void calculateMomentSet( indices.k_0MM = neighborZ[indices.k_0MM]; indices.k_MMM = neighborZ[indices.k_MMM]; - omega_ = hasTurbulentViscosity ? calculateOmega(omega, turbulentViscosity[indices.k_000]) : omega; + omega_ = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omega, turbulentViscosity[indices.k_000]) : omega; - read(f_fine, distFine, indices); + getPreCollisionDistribution(f_fine, distFine, indices); momentsSet.calculateMMP(f_fine, omega_); ////////////////////////////////////////////////////////////////////////// @@ -133,9 +133,9 @@ template<bool hasTurbulentViscosity> __device__ void calculateMomentSet( indices.k_0MM = indices.k_MMM; indices.k_MMM = neighborX[indices.k_MMM]; - omega_ = hasTurbulentViscosity ? calculateOmega(omega, turbulentViscosity[indices.k_000]) : omega; + omega_ = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omega, turbulentViscosity[indices.k_000]) : omega; - read(f_fine, distFine, indices); + getPreCollisionDistribution(f_fine, distFine, indices); momentsSet.calculatePMP(f_fine, omega_); ////////////////////////////////////////////////////////////////////////// @@ -151,9 +151,9 @@ template<bool hasTurbulentViscosity> __device__ void calculateMomentSet( indices.k_0M0 = k_base_MM0; indices.k_MM0 = neighborX[k_base_MM0]; - omega_ = hasTurbulentViscosity ? calculateOmega(omega, turbulentViscosity[indices.k_000]) : omega; + omega_ = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omega, turbulentViscosity[indices.k_000]) : omega; - read(f_fine, distFine, indices); + getPreCollisionDistribution(f_fine, distFine, indices); momentsSet.calculatePMM(f_fine, omega_); ////////////////////////////////////////////////////////////////////////// @@ -179,9 +179,9 @@ template<bool hasTurbulentViscosity> __device__ void calculateMomentSet( indices.k_0MM = k_base_0MM; indices.k_MMM = k_base_MMM; - omega_ = hasTurbulentViscosity ? calculateOmega(omega, turbulentViscosity[indices.k_000]) : omega; + omega_ = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omega, turbulentViscosity[indices.k_000]) : omega; - read(f_fine, distFine, indices); + getPreCollisionDistribution(f_fine, distFine, indices); momentsSet.calculateMPM(f_fine, omega_); ////////////////////////////////////////////////////////////////////////// @@ -197,9 +197,9 @@ template<bool hasTurbulentViscosity> __device__ void calculateMomentSet( indices.k_0MM = neighborZ[indices.k_0MM]; indices.k_MMM = neighborZ[indices.k_MMM]; - omega_ = hasTurbulentViscosity ? calculateOmega(omega, turbulentViscosity[indices.k_000]) : omega; + omega_ = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omega, turbulentViscosity[indices.k_000]) : omega; - read(f_fine, distFine, indices); + getPreCollisionDistribution(f_fine, distFine, indices); momentsSet.calculateMPP(f_fine, omega_); ////////////////////////////////////////////////////////////////////////// @@ -215,9 +215,9 @@ template<bool hasTurbulentViscosity> __device__ void calculateMomentSet( indices.k_0MM = indices.k_MMM; indices.k_MMM = neighborX[indices.k_MMM]; - omega_ = hasTurbulentViscosity ? calculateOmega(omega, turbulentViscosity[indices.k_000]) : omega; + omega_ = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omega, turbulentViscosity[indices.k_000]) : omega; - read(f_fine, distFine, indices); + getPreCollisionDistribution(f_fine, distFine, indices); momentsSet.calculatePPP(f_fine, omega_); ////////////////////////////////////////////////////////////////////////// @@ -233,9 +233,9 @@ template<bool hasTurbulentViscosity> __device__ void calculateMomentSet( indices.k_0M0 = k_base_MM0; indices.k_MM0 = neighborX[k_base_MM0]; - omega_ = hasTurbulentViscosity ? calculateOmega(omega, turbulentViscosity[indices.k_000]) : omega; + omega_ = hasTurbulentViscosity ? vf::lbm::calculateOmegaWithturbulentViscosity(omega, turbulentViscosity[indices.k_000]) : omega; - read(f_fine, distFine, indices); + getPreCollisionDistribution(f_fine, distFine, indices); momentsSet.calculatePPM(f_fine, omega_); } diff --git a/src/gpu/VirtualFluids_GPU/LBM/LB.h b/src/gpu/core/LBM/LB.h similarity index 94% rename from src/gpu/VirtualFluids_GPU/LBM/LB.h rename to src/gpu/core/LBM/LB.h index 5da2a2a82c59d9a70e26849d4ee413b7c6e8f1d3..8cef301f55ceccfa3842d35464b9c9dfbe63885e 100644 --- a/src/gpu/VirtualFluids_GPU/LBM/LB.h +++ b/src/gpu/core/LBM/LB.h @@ -70,24 +70,11 @@ #define INTERFACE_B 5 -#include "DataTypes.h" +#include <basics/DataTypes.h> #include <string> #include <vector> -//! \brief An enumeration for selecting a turbulence model -enum class TurbulenceModel { - //! - Smagorinsky - Smagorinsky, - //! - AMD (Anisotropic Minimum Dissipation) model, see e.g. Rozema et al., Phys. Fluids 27, 085107 (2015), https://doi.org/10.1063/1.4928700 - AMD, - //! - QR model by Verstappen - QR, - //! - TODO: move the WALE model here from the old kernels - //WALE - //! - No turbulence model - None -}; //! \brief An enumeration for selecting a template of the collision kernel (CumulantK17) enum class CollisionTemplate { diff --git a/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp b/src/gpu/core/LBM/Simulation.cpp similarity index 89% rename from src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp rename to src/gpu/core/LBM/Simulation.cpp index eb4e4f7bec0a23d4658825f26c26bdb637cb0c58..6a597ca881943084df948a7b2f9ae60982331ee9 100644 --- a/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp +++ b/src/gpu/core/LBM/Simulation.cpp @@ -41,7 +41,6 @@ #include "Calculation/CalcMedian.h" #include "Calculation/CalcTurbulenceIntensity.h" #include "Calculation/ForceCalculations.h" -#include "Calculation/PorousMedia.h" ////////////////////////////////////////////////////////////////////////// #include "Output/Timer.h" #include "Output/FileWriter.h" @@ -50,10 +49,10 @@ ////////////////////////////////////////////////////////////////////////// #include "DataStructureInitializer/GridProvider.h" #include "Output/DataWriter.h" -#include "Kernel/Utilities/KernelFactory/KernelFactory.h" +#include "Kernel/KernelFactory/KernelFactory.h" #include "PreProcessor/PreProcessorFactory/PreProcessorFactory.h" #include "PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h" -#include "Kernel/Utilities/KernelFactory/KernelFactoryImp.h" +#include "Kernel/KernelFactory/KernelFactoryImp.h" #include "Kernel/Kernel.h" #include "TurbulenceModels/TurbulenceModelFactory.h" @@ -100,11 +99,10 @@ void Simulation::init(GridProvider &gridProvider, BoundaryConditionFactory *bcFa gridProvider.setBoundingBox(); para->setRe(para->getVelocity() * (real)1.0 / para->getViscosity()); - para->setlimitOfNodesForVTK(30000000); // max 30 Million nodes per VTK file if (para->getDoRestart()) para->setStartTurn(para->getTimeDoRestart()); else - para->setStartTurn((unsigned int)0); // 100000 + para->setStartTurn((unsigned int)0); restart_object = std::make_shared<ASCIIRestartObject>(); @@ -247,15 +245,6 @@ void Simulation::init(GridProvider &gridProvider, BoundaryConditionFactory *bcFa readMeasurePoints(para.get(), cudaMemoryManager.get()); } - ////////////////////////////////////////////////////////////////////////// - // Porous Media - ////////////////////////////////////////////////////////////////////////// - if (para->getSimulatePorousMedia()) { - VF_LOG_INFO("define area(s) of porous media"); - porousMedia(); - kernelFactory->setPorousMedia(pm); - } - ////////////////////////////////////////////////////////////////////////// // enSightGold ////////////////////////////////////////////////////////////////////////// @@ -362,7 +351,7 @@ void Simulation::init(GridProvider &gridProvider, BoundaryConditionFactory *bcFa ////////////////////////////////////////////////////////////////////////// // Init UpdateGrid ////////////////////////////////////////////////////////////////////////// - this->updateGrid27 = std::make_unique<UpdateGrid27>(para, communicator, cudaMemoryManager, pm, kernels, bcFactory, tmFactory, scalingFactory); + this->updateGrid27 = std::make_unique<UpdateGrid27>(para, communicator, cudaMemoryManager, kernels, adKernels, bcFactory, tmFactory, scalingFactory); ////////////////////////////////////////////////////////////////////////// // Write Initialized Files @@ -697,7 +686,7 @@ void Simulation::calculateTimestep(uint timestep) // File IO //////////////////////////////////////////////////////////////////////////////// //communicator->startTimer(); - if(para->getTimestepOut()>0 && timestep%para->getTimestepOut()==0 && timestep>para->getTimestepStartOut()) + if(para->getTimestepOut()>0 && timestep%para->getTimestepOut()==0 && timestep>=para->getTimestepStartOut()) { ////////////////////////////////////////////////////////////////////////////////// //if (para->getParD(0)->evenOrOdd==true) para->getParD(0)->evenOrOdd=false; @@ -838,23 +827,8 @@ void Simulation::readAndWriteFiles(uint timestep) if (this->enstrophyAnalyzer) this->enstrophyAnalyzer->writeToFile(fname); } ////////////////////////////////////////////////////////////////////////// - if (para->getDiffOn()==true) + if (para->getDiffOn()) { - if (para->getDiffMod() == 7) - { - CalcMacThS7( para->getParD(lev)->concentration, - para->getParD(lev)->typeOfGridNode, - para->getParD(lev)->neighborX, - para->getParD(lev)->neighborY, - para->getParD(lev)->neighborZ, - para->getParD(lev)->numberOfNodes, - para->getParD(lev)->numberofthreads, - para->getParD(lev)->distributionsAD7.f[0], - para->getParD(lev)->isEvenTimestep); - getLastCudaError("CalcMacTh7 execution failed"); - } - else if (para->getDiffMod() == 27) - { CalcConcentration27( para->getParD(lev)->numberofthreads, para->getParD(lev)->concentration, @@ -865,7 +839,6 @@ void Simulation::readAndWriteFiles(uint timestep) para->getParD(lev)->numberOfNodes, para->getParD(lev)->distributionsAD.f[0], para->getParD(lev)->isEvenTimestep); - } cudaMemoryManager->cudaCopyConcentrationDeviceToHost(lev); //cudaMemoryCopy(para->getParH(lev)->Conc, para->getParD(lev)->Conc, para->getParH(lev)->mem_size_real_SP , cudaMemcpyDeviceToHost); } @@ -983,140 +956,6 @@ void Simulation::readAndWriteFiles(uint timestep) //////////////////////////////////////////////////////////////////////// } -void Simulation::porousMedia() -{ - double porosity, darcySI, forchheimerSI; - double dxLBM = 0.00390625; - double dtLBM = 0.00000658; - unsigned int level, geo; - double startX, startY, startZ, endX, endY, endZ; - ////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////// - ////Test = porous media 0 - //porosity = 0.7; - //darcySI = 137.36; //[1/s] - //forchheimerSI = 1037.8; //[1/m] - //level = para->getFine(); - //geo = GEO_PM_0; - //startX = 20.0; - //startY = 0.0; - //startZ = 0.0; - //endX = 40.0; - //endY = 22.0; - //endZ = 22.0; - //pm[0] = new PorousMedia(porosity, geo, darcySI, forchheimerSI, dxLBM, dtLBM, level); - //pm[0]->setStartCoordinates(startX, startY, startZ); - //pm[0]->setEndCoordinates(endX, endY, endZ); - //pm[0]->setResistanceLBM(); - //definePMarea(pm[0]); - //////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - //Kondensator = porous media 0 - porosity = 0.7; - darcySI = 137.36; //[1/s] - forchheimerSI = 1037.8; //[1/m] - level = para->getFine(); - geo = GEO_PM_0; - startX = -0.715882; - startY = -0.260942; - startZ = -0.031321; - endX = -0.692484; - endY = 0.277833; - endZ = 0.360379; - pm.push_back(std::shared_ptr<PorousMedia>(new PorousMedia(porosity, geo, darcySI, forchheimerSI, dxLBM, dtLBM, level))); - int n = (int)pm.size() - 1; - pm.at(n)->setStartCoordinates(startX, startY, startZ); - pm.at(n)->setEndCoordinates(endX, endY, endZ); - pm.at(n)->setResistanceLBM(); - definePMarea(pm.at(n)); - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - //NT-Kuehler = porous media 1 - porosity = 0.6; - darcySI = 149.98; //[1/s] - forchheimerSI = 960.57; //[1/m] - level = para->getFine(); - geo = GEO_PM_1; - startX = -0.696146; - startY = -0.32426; - startZ = -0.0421345; - endX = -0.651847; - endY = 0.324822; - endZ = 0.057098; - pm.push_back(std::shared_ptr<PorousMedia>(new PorousMedia(porosity, geo, darcySI, forchheimerSI, dxLBM, dtLBM, level))); - n = (int)pm.size() - 1; - pm.at(n)->setStartCoordinates(startX, startY, startZ); - pm.at(n)->setEndCoordinates(endX, endY, endZ); - pm.at(n)->setResistanceLBM(); - definePMarea(pm.at(n)); - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - //Wasserkuehler = porous media 2 - porosity = 0.6; - darcySI = 148.69; //[1/s] - forchheimerSI = 629.45; //[1/m] - level = para->getFine(); - geo = GEO_PM_2; - startX = -0.692681; - startY = -0.324954; - startZ = 0.0789429; - endX = -0.657262; - endY = 0.32538; - endZ = 0.400974; - pm.push_back(std::shared_ptr<PorousMedia>(new PorousMedia(porosity, geo, darcySI, forchheimerSI, dxLBM, dtLBM, level))); - n = (int)pm.size() - 1; - pm.at(n)->setStartCoordinates(startX, startY, startZ); - pm.at(n)->setEndCoordinates(endX, endY, endZ); - pm.at(n)->setResistanceLBM(); - definePMarea(pm.at(n)); - ////////////////////////////////////////////////////////////////////////// - -} - -void Simulation::definePMarea(std::shared_ptr<PorousMedia>& pMedia) -{ - unsigned int counter = 0; - unsigned int level = pMedia->getLevelPM(); - std::vector< unsigned int > nodeIDsPorousMedia; - VF_LOG_INFO("definePMarea....find nodes"); - - for (unsigned int i = 0; i < para->getParH(level)->numberOfNodes; i++) - { - if (((para->getParH(level)->coordinateX[i] >= pMedia->getStartX()) && (para->getParH(level)->coordinateX[i] <= pMedia->getEndX())) && - ((para->getParH(level)->coordinateY[i] >= pMedia->getStartY()) && (para->getParH(level)->coordinateY[i] <= pMedia->getEndY())) && - ((para->getParH(level)->coordinateZ[i] >= pMedia->getStartZ()) && (para->getParH(level)->coordinateZ[i] <= pMedia->getEndZ())) ) - { - if (para->getParH(level)->typeOfGridNode[i] >= GEO_FLUID) - { - para->getParH(level)->typeOfGridNode[i] = pMedia->getGeoID(); - nodeIDsPorousMedia.push_back(i); - counter++; - } - } - } - - VF_LOG_INFO("definePMarea....cuda copy SP"); - cudaMemoryManager->cudaCopySP(level); - pMedia->setSizePM(counter); - VF_LOG_INFO("definePMarea....cuda alloc PM"); - cudaMemoryManager->cudaAllocPorousMedia(pMedia.get(), level); - unsigned int *tpmArrayIDs = pMedia->getHostNodeIDsPM(); - - VF_LOG_INFO("definePMarea....copy vector to array"); - for (unsigned int j = 0; j < pMedia->getSizePM(); j++) - { - tpmArrayIDs[j] = nodeIDsPorousMedia[j]; - } - - pMedia->setHostNodeIDsPM(tpmArrayIDs); - VF_LOG_INFO("definePMarea....cuda copy PM"); - cudaMemoryManager->cudaCopyPorousMedia(pMedia.get(), level); -} - Simulation::~Simulation() { // Cuda Streams diff --git a/src/gpu/VirtualFluids_GPU/LBM/Simulation.h b/src/gpu/core/LBM/Simulation.h similarity index 93% rename from src/gpu/VirtualFluids_GPU/LBM/Simulation.h rename to src/gpu/core/LBM/Simulation.h index 146ab4cf6aebe395bff695f3e99aa7b6b1e776d3..331c4cecfee53b87b65f1918fb38c7145b74dde8 100644 --- a/src/gpu/VirtualFluids_GPU/LBM/Simulation.h +++ b/src/gpu/core/LBM/Simulation.h @@ -17,12 +17,11 @@ class Communicator; class CudaMemoryManager; class Parameter; class GridProvider; -class PorousMedia; class RestartObject; class ForceCalculations; class DataWriter; class Kernel; -class ADKernel; +class AdvectionDiffusionKernel; class KernelFactory; class PreProcessor; class PreProcessorFactory; @@ -60,8 +59,6 @@ public: private: void init(GridProvider &gridProvider, BoundaryConditionFactory *bcFactory, SPtr<TurbulenceModelFactory> tmFactory, GridScalingFactory *scalingFactory); void allocNeighborsOffsetsScalesAndBoundaries(GridProvider& gridProvider); - void porousMedia(); - void definePMarea(std::shared_ptr<PorousMedia>& pm); void readAndWriteFiles(uint timestep); std::unique_ptr<KernelFactory> kernelFactory; @@ -83,7 +80,7 @@ private: std::shared_ptr<DataWriter> dataWriter; std::shared_ptr<CudaMemoryManager> cudaMemoryManager; std::vector < SPtr< Kernel>> kernels; - std::vector < SPtr< ADKernel>> adKernels; + std::vector < SPtr< AdvectionDiffusionKernel>> adKernels; std::shared_ptr<PreProcessor> preProcessor; SPtr<TurbulenceModelFactory> tmFactory; @@ -99,11 +96,6 @@ private: //Forcing Calculation std::shared_ptr<ForceCalculations> forceCalculator; - //Porous Media - std::vector<std::shared_ptr<PorousMedia>> pm; - //PorousMedia* pm0; - //PorousMedia* pm1; - //PorousMedia* pm2; // TODO: https://git.rz.tu-bs.de/irmb/VirtualFluids_dev/-/issues/29 //KQ - Schlaff diff --git a/src/gpu/VirtualFluids_GPU/Output/AnalysisData.hpp b/src/gpu/core/Output/AnalysisData.hpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Output/AnalysisData.hpp rename to src/gpu/core/Output/AnalysisData.hpp diff --git a/src/gpu/VirtualFluids_GPU/Output/ClogWriter.cpp b/src/gpu/core/Output/ClogWriter.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Output/ClogWriter.cpp rename to src/gpu/core/Output/ClogWriter.cpp diff --git a/src/gpu/VirtualFluids_GPU/Output/ClogWriter.h b/src/gpu/core/Output/ClogWriter.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Output/ClogWriter.h rename to src/gpu/core/Output/ClogWriter.h diff --git a/src/gpu/VirtualFluids_GPU/Output/DataWriter.h b/src/gpu/core/Output/DataWriter.h similarity index 88% rename from src/gpu/VirtualFluids_GPU/Output/DataWriter.h rename to src/gpu/core/Output/DataWriter.h index 67a50867c1ef957c2e80b338f8597262508c468d..51bc38565803c4393665943d1159884a47246ba7 100644 --- a/src/gpu/VirtualFluids_GPU/Output/DataWriter.h +++ b/src/gpu/core/Output/DataWriter.h @@ -1,8 +1,8 @@ #ifndef DATA_WRITER_H #define DATA_WRITER_H -#include "PointerDefinitions.h" -#include "DataTypes.h" +#include <basics/PointerDefinitions.h> +#include <basics/DataTypes.h> #include <memory> #include <vector> diff --git a/src/gpu/VirtualFluids_GPU/Output/DistributionDebugInspector.cu b/src/gpu/core/Output/DistributionDebugInspector.cu similarity index 85% rename from src/gpu/VirtualFluids_GPU/Output/DistributionDebugInspector.cu rename to src/gpu/core/Output/DistributionDebugInspector.cu index df6b2e6623977331bf4b64f2ea798deb7700020f..0515cb1547ee17cc5b46e9b7bacd80a6e1ab3a8c 100644 --- a/src/gpu/VirtualFluids_GPU/Output/DistributionDebugInspector.cu +++ b/src/gpu/core/Output/DistributionDebugInspector.cu @@ -94,33 +94,33 @@ __global__ void printFs( //////////////////////////////////////////////////////////////////////////////////// //! - Set local distributions //! - real f_000 = (dist.f[DIR_000])[k_000]; - real f_P00 = (dist.f[DIR_P00])[k_000]; - real f_M00 = (dist.f[DIR_M00])[k_M00]; - real f_0P0 = (dist.f[DIR_0P0])[k_000]; - real f_0M0 = (dist.f[DIR_0M0])[k_0M0]; - real f_00P = (dist.f[DIR_00P])[k_000]; - real f_00M = (dist.f[DIR_00M])[k_00M]; - real f_PP0 = (dist.f[DIR_PP0])[k_000]; - real f_MM0 = (dist.f[DIR_MM0])[k_MM0]; - real f_PM0 = (dist.f[DIR_PM0])[k_0M0]; - real f_MP0 = (dist.f[DIR_MP0])[k_M00]; - real f_P0P = (dist.f[DIR_P0P])[k_000]; - real f_M0M = (dist.f[DIR_M0M])[k_M0M]; - real f_P0M = (dist.f[DIR_P0M])[k_00M]; - real f_M0P = (dist.f[DIR_M0P])[k_M00]; - real f_0PP = (dist.f[DIR_0PP])[k_000]; - real f_0MM = (dist.f[DIR_0MM])[k_0MM]; - real f_0PM = (dist.f[DIR_0PM])[k_00M]; - real f_0MP = (dist.f[DIR_0MP])[k_0M0]; - real f_PPP = (dist.f[DIR_PPP])[k_000]; - real f_MPP = (dist.f[DIR_MPP])[k_M00]; - real f_PMP = (dist.f[DIR_PMP])[k_0M0]; - real f_MMP = (dist.f[DIR_MMP])[k_MM0]; - real f_PPM = (dist.f[DIR_PPM])[k_00M]; - real f_MPM = (dist.f[DIR_MPM])[k_M0M]; - real f_PMM = (dist.f[DIR_PMM])[k_0MM]; - real f_MMM = (dist.f[DIR_MMM])[k_MMM]; + real f_000 = (dist.f[d000])[k_000]; + real f_P00 = (dist.f[dP00])[k_000]; + real f_M00 = (dist.f[dM00])[k_M00]; + real f_0P0 = (dist.f[d0P0])[k_000]; + real f_0M0 = (dist.f[d0M0])[k_0M0]; + real f_00P = (dist.f[d00P])[k_000]; + real f_00M = (dist.f[d00M])[k_00M]; + real f_PP0 = (dist.f[dPP0])[k_000]; + real f_MM0 = (dist.f[dMM0])[k_MM0]; + real f_PM0 = (dist.f[dPM0])[k_0M0]; + real f_MP0 = (dist.f[dMP0])[k_M00]; + real f_P0P = (dist.f[dP0P])[k_000]; + real f_M0M = (dist.f[dM0M])[k_M0M]; + real f_P0M = (dist.f[dP0M])[k_00M]; + real f_M0P = (dist.f[dM0P])[k_M00]; + real f_0PP = (dist.f[d0PP])[k_000]; + real f_0MM = (dist.f[d0MM])[k_0MM]; + real f_0PM = (dist.f[d0PM])[k_00M]; + real f_0MP = (dist.f[d0MP])[k_0M0]; + real f_PPP = (dist.f[dPPP])[k_000]; + real f_MPP = (dist.f[dMPP])[k_M00]; + real f_PMP = (dist.f[dPMP])[k_0M0]; + real f_MMP = (dist.f[dMMP])[k_MM0]; + real f_PPM = (dist.f[dPPM])[k_00M]; + real f_MPM = (dist.f[dMPM])[k_M0M]; + real f_PMM = (dist.f[dPMM])[k_0MM]; + real f_MMM = (dist.f[dMMM])[k_MMM]; real drho = ((((f_PPP + f_MMM) + (f_MPM + f_PMP)) + ((f_MPP + f_PMM) + (f_MMP + f_PPM))) + (((f_0MP + f_0PM) + (f_0MM + f_0PP)) + ((f_M0P + f_P0M) + (f_M0M + f_P0P)) + diff --git a/src/gpu/VirtualFluids_GPU/Output/DistributionDebugInspector.h b/src/gpu/core/Output/DistributionDebugInspector.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Output/DistributionDebugInspector.h rename to src/gpu/core/Output/DistributionDebugInspector.h diff --git a/src/gpu/VirtualFluids_GPU/Output/EdgeNodeDebugWriter.hpp b/src/gpu/core/Output/EdgeNodeDebugWriter.hpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Output/EdgeNodeDebugWriter.hpp rename to src/gpu/core/Output/EdgeNodeDebugWriter.hpp diff --git a/src/gpu/core/Output/FilePartCalculator.cpp b/src/gpu/core/Output/FilePartCalculator.cpp new file mode 100644 index 0000000000000000000000000000000000000000..3e4e1353b8174273cc8dababba044561141df763 --- /dev/null +++ b/src/gpu/core/Output/FilePartCalculator.cpp @@ -0,0 +1,23 @@ +#include "FilePartCalculator.h" +#include <stdexcept> + +uint FilePartCalculator::calculateNumberOfNodesInPart(uint numberOfNodes, uint indexOfFilePart) +{ + uint indexOfLastFilePart = FilePartCalculator::calculateNumberOfParts(numberOfNodes) - 1; + + if (indexOfFilePart > indexOfLastFilePart) + throw std::runtime_error("The number of nodes for a non-existing part can not be calculated"); + if (indexOfFilePart == indexOfLastFilePart) + return numberOfNodes - (indexOfFilePart * FilePartCalculator::limitOfNodesForVTK); + return FilePartCalculator::limitOfNodesForVTK; +} + +uint FilePartCalculator::calculateNumberOfParts(uint numberOfNodes) +{ + return numberOfNodes / FilePartCalculator::limitOfNodesForVTK + 1; +} + +uint FilePartCalculator::calculateStartingPostionOfPart(uint indexOfPart) +{ + return indexOfPart * FilePartCalculator::limitOfNodesForVTK; +} diff --git a/src/gpu/core/Output/FilePartCalculator.h b/src/gpu/core/Output/FilePartCalculator.h new file mode 100644 index 0000000000000000000000000000000000000000..f0eaf4d5dc4b716edd29a3fbb663287f5b117872 --- /dev/null +++ b/src/gpu/core/Output/FilePartCalculator.h @@ -0,0 +1,23 @@ +#ifndef FILE_PART_CALCULATOR +#define FILE_PART_CALCULATOR + +#include <basics/DataTypes.h> + +//! \brief calculations needed for writing the simulation's output into multiple file parts +//! \details To prevent output files from becoming to large, they are split into multiple part files. For this process some +//! calculations are needed. +class FilePartCalculator +{ +public: + //! \brief calculate how many output vtk-files are created for one timestep of the given grid level + static uint calculateNumberOfParts(uint numberOfNodes); + //! \brief calculate how many grid nodes are written to the file with the given index + static uint calculateNumberOfNodesInPart(uint numberOfNodes, uint indexOfFilePart); + //! \returns index of the first node in this file part + static uint calculateStartingPostionOfPart(uint indexOfPart); + + //! \brief limits how many grid nodes are written into a single vtk file + static const uint limitOfNodesForVTK = 30e6; // max 30 million nodes per VTK file +}; + +#endif diff --git a/src/gpu/core/Output/FilePartCalculatorTest.cpp b/src/gpu/core/Output/FilePartCalculatorTest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c85e0ce2bb0f318b457e00a109e24fbed0a93aca --- /dev/null +++ b/src/gpu/core/Output/FilePartCalculatorTest.cpp @@ -0,0 +1,36 @@ +#include "FilePartCalculator.h" +#include "gpu/core/Utilities/testUtilitiesGPU.h" +#include <gmock/gmock.h> + +TEST(FilePartCalculatorTest, calculateNumberOfParts) +{ + EXPECT_THAT(FilePartCalculator::calculateNumberOfParts(FilePartCalculator::limitOfNodesForVTK * 2), testing::Eq(3)); + + EXPECT_THAT(FilePartCalculator::calculateNumberOfParts(FilePartCalculator::limitOfNodesForVTK), testing::Eq(2)); + + EXPECT_THAT(FilePartCalculator::calculateNumberOfParts( FilePartCalculator::limitOfNodesForVTK - 1), testing::Eq(1)); + + EXPECT_THAT(FilePartCalculator::calculateNumberOfParts(1), testing::Eq(1)); +} + +TEST(FilePartCalculatorTest, calculateNumberOfNodesInPart) +{ + uint part = 0; + EXPECT_THAT(FilePartCalculator::calculateNumberOfNodesInPart(FilePartCalculator::limitOfNodesForVTK + 13, part), + FilePartCalculator::limitOfNodesForVTK); + + part = 1; + EXPECT_THAT(FilePartCalculator::calculateNumberOfNodesInPart(FilePartCalculator::limitOfNodesForVTK + 13, part), 13); + + part = 2; + EXPECT_THROW(FilePartCalculator::calculateNumberOfNodesInPart(FilePartCalculator::limitOfNodesForVTK + 13, part), std::runtime_error); +} + +TEST(FilePartCalculatorTest, getStartingPostionOfPart) +{ + uint part = 0; + EXPECT_THAT(FilePartCalculator::calculateStartingPostionOfPart(part), 0); + + part = 1; + EXPECT_THAT(FilePartCalculator::calculateStartingPostionOfPart(part), FilePartCalculator::limitOfNodesForVTK); +} diff --git a/src/gpu/VirtualFluids_GPU/Output/FileWriter.cpp b/src/gpu/core/Output/FileWriter.cpp similarity index 67% rename from src/gpu/VirtualFluids_GPU/Output/FileWriter.cpp rename to src/gpu/core/Output/FileWriter.cpp index 9d4173b22a458f089d6ba96618dafeb6b89cbca0..773bd58fafc63c4aad324605b0babde2a0acaac5 100644 --- a/src/gpu/VirtualFluids_GPU/Output/FileWriter.cpp +++ b/src/gpu/core/Output/FileWriter.cpp @@ -13,34 +13,30 @@ #include <sstream> #include <cmath> -#include <StringUtilities/StringUtil.h> +#include <basics/StringUtilities/StringUtil.h> +#include <basics/writer/WbWriterVtkXmlBinary.h> #include "Parameter/Parameter.h" #include "GPU/CudaMemoryManager.h" +#include "WriterUtilities.h" +#include "FilePartCalculator.h" #include "LBM/LB.h" #include "lbm/constants/D3Q27.h" -#include <basics/writer/WbWriterVtkXmlBinary.h> - -std::string makePartFileNameEnding(int level, int ID, int part, int timestep) -{ - return "_lev_" + StringUtil::toString<int>(level) + "_ID_" + StringUtil::toString<int>(ID) + "_Part_" + StringUtil::toString<int>(part) + "_t_" + StringUtil::toString<int>(timestep) + ".vtk"; -} - std::string makeCollectionFileNameEnding(int ID, int timestep) { return "_ID_" + StringUtil::toString<int>(ID) + "_t_" + StringUtil::toString<int>(timestep) + ".vtk"; } -std::string makePartFileName(const std::string &prefix, int level, int ID, int part, int timestep) +std::string makePartFileName(const std::string &prefix, uint level, int ID, int part, int timestep) { - return prefix + "_bin" + makePartFileNameEnding(level, ID, part, timestep); + return prefix + "_bin" + WriterUtilities::makePartFileNameEnding(level, ID, part, timestep); } -std::string makeMedianPartFileName(const std::string &prefix, int level, int ID, int part, int timestep) +std::string makeMedianPartFileName(const std::string &prefix, uint level, int ID, int part, int timestep) { - return prefix + "_bin_median" + makePartFileNameEnding(level, ID, part, timestep); + return prefix + "_bin_median" + WriterUtilities::makePartFileNameEnding(level, ID, part, timestep); } @@ -92,7 +88,7 @@ void FileWriter::writeTimestep(std::shared_ptr<Parameter> para, unsigned int tim void FileWriter::writeTimestep(std::shared_ptr<Parameter> para, unsigned int timestep, int level) { - const unsigned int numberOfParts = (uint)para->getParH(level)->numberOfNodes / para->getLimitOfNodesForVTK() + 1; + const unsigned int numberOfParts = FilePartCalculator::calculateNumberOfParts(para->getParH(level)->numberOfNodes); std::vector<std::string> fnames; std::vector<std::string> fnamesMed; @@ -117,13 +113,6 @@ void FileWriter::writeTimestep(std::shared_ptr<Parameter> para, unsigned int tim } } -bool FileWriter::isPeriodicCell(std::shared_ptr<Parameter> para, int level, unsigned int number2, unsigned int number1, unsigned int number3, unsigned int number5) -{ - return (para->getParH(level)->coordinateX[number2] < para->getParH(level)->coordinateX[number1]) || - (para->getParH(level)->coordinateY[number3] < para->getParH(level)->coordinateY[number1]) || - (para->getParH(level)->coordinateZ[number5] < para->getParH(level)->coordinateZ[number1]); -} - std::vector<std::string> FileWriter::getNodeDataNames(std::shared_ptr<Parameter> para) { @@ -177,7 +166,7 @@ std::vector<std::string> FileWriter::getMedianNodeDataNames(std::shared_ptr<Para return nodeDataNames; } -std::string VIRTUALFLUIDS_GPU_EXPORT FileWriter::writeCollectionFile(std::shared_ptr<Parameter> para, unsigned int timestep) +std::string FileWriter::writeCollectionFile(std::shared_ptr<Parameter> para, unsigned int timestep) { std::string filename = makeCollectionFileName(para->getFName(), para->getMyProcessID(), timestep); auto nodeDataNames = this->getNodeDataNames(para); @@ -187,7 +176,7 @@ std::string VIRTUALFLUIDS_GPU_EXPORT FileWriter::writeCollectionFile(std::shared return pFileName; } -std::string VIRTUALFLUIDS_GPU_EXPORT FileWriter::writeCollectionFileMedian(std::shared_ptr<Parameter> para, unsigned int timestep) +std::string FileWriter::writeCollectionFileMedian(std::shared_ptr<Parameter> para, unsigned int timestep) { std::string filename = makeMedianCollectionFileName(para->getFName(), para->getMyProcessID(), timestep); std::vector<std::string> nodeDataNames = getMedianNodeDataNames(para); @@ -224,9 +213,11 @@ std::vector<std::string> FileWriter::writeUnstructuredGridLT(std::shared_ptr<Par uint firstTurbulenceNode = dataIndex; if (para->getCalcTurbulenceIntensity()) dataIndex += 6; - unsigned int number1, number2, number3, number4, number5, number6, number7, number8; - uint dn1, dn2, dn3, dn4, dn5, dn6, dn7, dn8; - bool neighborsAreFluid; + + std::array<uint, 8> indicesOfOct; + std::array<uint, 8> relativePosInPart; + uint relPosInPart; + bool allNodesValid; unsigned int startPosition; unsigned int endPosition; unsigned int sizeOfNodes; @@ -234,13 +225,11 @@ std::vector<std::string> FileWriter::writeUnstructuredGridLT(std::shared_ptr<Par for (unsigned int part = 0; part < fname.size(); part++) { - if (((part + 1)*para->getLimitOfNodesForVTK()) > (uint)para->getParH(level)->numberOfNodes) - sizeOfNodes = (uint)para->getParH(level)->numberOfNodes - (part * para->getLimitOfNodesForVTK()); - else - sizeOfNodes = para->getLimitOfNodesForVTK(); + const LBMSimulationParameter& parH = para->getParHostAsReference(level); + sizeOfNodes = FilePartCalculator::calculateNumberOfNodesInPart(parH.numberOfNodes, part); ////////////////////////////////////////////////////////////////////////// - startPosition = part * para->getLimitOfNodesForVTK(); + startPosition = FilePartCalculator::calculateStartingPostionOfPart(part); endPosition = startPosition + sizeOfNodes; ////////////////////////////////////////////////////////////////////////// cells.clear(); @@ -249,90 +238,63 @@ std::vector<std::string> FileWriter::writeUnstructuredGridLT(std::shared_ptr<Par nodeData[i].resize(sizeOfNodes); ////////////////////////////////////////////////////////////////////////// - for (unsigned int pos = startPosition; pos < endPosition; pos++) - { - if (para->getParH(level)->typeOfGridNode[pos] == GEO_FLUID) - { - + for (unsigned int pos = startPosition; pos < endPosition; pos++) { + if (parH.typeOfGridNode[pos] == GEO_FLUID) { ////////////////////////////////////////////////////////////////////////// - double x1 = para->getParH(level)->coordinateX[pos]; - double x2 = para->getParH(level)->coordinateY[pos]; - double x3 = para->getParH(level)->coordinateZ[pos]; + double x1 = parH.coordinateX[pos]; + double x2 = parH.coordinateY[pos]; + double x3 = parH.coordinateZ[pos]; ////////////////////////////////////////////////////////////////////////// - number1 = pos; - dn1 = pos - startPosition; - neighborsAreFluid = true; + relPosInPart = pos - startPosition; ////////////////////////////////////////////////////////////////////////// - nodes[dn1] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3))); - nodeData[0][dn1] = (double)para->getParH(level)->pressure[pos] / (double)3.0 * (double)para->getDensityRatio() * (double)para->getVelocityRatio() * (double)para->getVelocityRatio(); - nodeData[1][dn1] = (double)para->getParH(level)->rho[pos] / (double)3.0 * (double)para->getDensityRatio() * (double)para->getVelocityRatio() * (double)para->getVelocityRatio(); - nodeData[2][dn1] = (double)para->getParH(level)->velocityX[pos] * (double)para->getVelocityRatio(); - nodeData[3][dn1] = (double)para->getParH(level)->velocityY[pos] * (double)para->getVelocityRatio(); - nodeData[4][dn1] = (double)para->getParH(level)->velocityZ[pos] * (double)para->getVelocityRatio(); - nodeData[5][dn1] = (double)para->getParH(level)->typeOfGridNode[pos]; + nodes[relPosInPart] = (makeUbTuple((float)(x1), (float)(x2), (float)(x3))); + nodeData[0][relPosInPart] = (double)parH.pressure[pos] / (double)3.0 * (double)para->getDensityRatio() * (double)para->getVelocityRatio() * (double)para->getVelocityRatio(); + nodeData[1][relPosInPart] = (double)parH.rho[pos] / (double)3.0 * (double)para->getDensityRatio() * (double)para->getVelocityRatio() * (double)para->getVelocityRatio(); + nodeData[2][relPosInPart] = (double)parH.velocityX[pos] * (double)para->getVelocityRatio(); + nodeData[3][relPosInPart] = (double)parH.velocityY[pos] * (double)para->getVelocityRatio(); + nodeData[4][relPosInPart] = (double)parH.velocityZ[pos] * (double)para->getVelocityRatio(); + nodeData[5][relPosInPart] = (double)parH.typeOfGridNode[pos]; if(para->getDiffOn()) - nodeData[firstConcNode][dn1] = (double)para->getParH(level)->concentration[pos]; + nodeData[firstConcNode][relPosInPart] = (double)parH.concentration[pos]; if(para->getIsBodyForce()) { - nodeData[firstBodyForceNode ][dn1] = (double)para->getParH(level)->forceX_SP[pos] * (double)para->getScaledForceRatio(level); - nodeData[firstBodyForceNode + 1][dn1] = (double)para->getParH(level)->forceY_SP[pos] * (double)para->getScaledForceRatio(level); - nodeData[firstBodyForceNode + 2][dn1] = (double)para->getParH(level)->forceZ_SP[pos] * (double)para->getScaledForceRatio(level); + nodeData[firstBodyForceNode ][relPosInPart] = (double)parH.forceX_SP[pos] * (double)para->getScaledForceRatio(level); + nodeData[firstBodyForceNode + 1][relPosInPart] = (double)parH.forceY_SP[pos] * (double)para->getScaledForceRatio(level); + nodeData[firstBodyForceNode + 2][relPosInPart] = (double)parH.forceZ_SP[pos] * (double)para->getScaledForceRatio(level); } if(para->getUseTurbulentViscosity()) { - nodeData[firstNutNode][dn1] = (double)para->getParH(level)->turbViscosity[pos] * (double)para->getScaledViscosityRatio(level); + nodeData[firstNutNode][relPosInPart] = (double)parH.turbViscosity[pos] * (double)para->getScaledViscosityRatio(level); } if (para->getCalcTurbulenceIntensity()) { - nodeData[firstTurbulenceNode ][dn1] = (double)para->getParH(level)->vxx[pos]; - nodeData[firstTurbulenceNode + 1][dn1] = (double)para->getParH(level)->vyy[pos]; - nodeData[firstTurbulenceNode + 2][dn1] = (double)para->getParH(level)->vzz[pos]; - nodeData[firstTurbulenceNode + 3][dn1] = (double)para->getParH(level)->vxy[pos]; - nodeData[firstTurbulenceNode + 4][dn1] = (double)para->getParH(level)->vxz[pos]; - nodeData[firstTurbulenceNode + 5][dn1] = (double)para->getParH(level)->vyz[pos]; + nodeData[firstTurbulenceNode ][relPosInPart] = (double)parH.vxx[pos]; + nodeData[firstTurbulenceNode + 1][relPosInPart] = (double)parH.vyy[pos]; + nodeData[firstTurbulenceNode + 2][relPosInPart] = (double)parH.vzz[pos]; + nodeData[firstTurbulenceNode + 3][relPosInPart] = (double)parH.vxy[pos]; + nodeData[firstTurbulenceNode + 4][relPosInPart] = (double)parH.vxz[pos]; + nodeData[firstTurbulenceNode + 5][relPosInPart] = (double)parH.vyz[pos]; } ////////////////////////////////////////////////////////////////////////// - number2 = para->getParH(level)->neighborX[number1]; - number3 = para->getParH(level)->neighborY[number2]; - number4 = para->getParH(level)->neighborY[number1]; - number5 = para->getParH(level)->neighborZ[number1]; - number6 = para->getParH(level)->neighborZ[number2]; - number7 = para->getParH(level)->neighborZ[number3]; - number8 = para->getParH(level)->neighborZ[number4]; - ////////////////////////////////////////////////////////////////////////// - if (para->getParH(level)->typeOfGridNode[number2] != GEO_FLUID || - para->getParH(level)->typeOfGridNode[number3] != GEO_FLUID || - para->getParH(level)->typeOfGridNode[number4] != GEO_FLUID || - para->getParH(level)->typeOfGridNode[number5] != GEO_FLUID || - para->getParH(level)->typeOfGridNode[number6] != GEO_FLUID || - para->getParH(level)->typeOfGridNode[number7] != GEO_FLUID || - para->getParH(level)->typeOfGridNode[number8] != GEO_FLUID) neighborsAreFluid = false; - ////////////////////////////////////////////////////////////////////////// - if (number2 > endPosition || - number3 > endPosition || - number4 > endPosition || - number5 > endPosition || - number6 > endPosition || - number7 > endPosition || - number8 > endPosition) neighborsAreFluid = false; - ////////////////////////////////////////////////////////////////////////// - dn2 = number2 - startPosition; - dn3 = number3 - startPosition; - dn4 = number4 - startPosition; - dn5 = number5 - startPosition; - dn6 = number6 - startPosition; - dn7 = number7 - startPosition; - dn8 = number8 - startPosition; - ////////////////////////////////////////////////////////////////////////// - if (isPeriodicCell(para, level, number2, number1, number3, number5)) + + WriterUtilities::getIndicesOfAllNodesInOct(indicesOfOct, pos, para->getParHostAsReference(level)); + + if (WriterUtilities::isPeriodicCell(parH, indicesOfOct[0], indicesOfOct[6])) { continue; + } + ////////////////////////////////////////////////////////////////////////// - if (neighborsAreFluid) - cells.push_back(makeUbTuple(dn1, dn2, dn3, dn4, dn5, dn6, dn7, dn8)); + allNodesValid = WriterUtilities::areAllNodesInOctValidForWriting(indicesOfOct, parH, endPosition); + + ////////////////////////////////////////////////////////////////////////// + if (allNodesValid) { + WriterUtilities::calculateRelativeNodeIndexInPart(relativePosInPart, indicesOfOct, startPosition); + cells.push_back(makeUbTupleFromArray(relativePosInPart)); + } } } outFNames.push_back( WbWriterVtkXmlBinary::getInstance()->writeOctsWithNodeData(fname[part], nodes, cells, nodeDataNames, nodeData) ); @@ -363,16 +325,9 @@ std::vector<std::string> FileWriter::writeUnstructuredGridMedianLT(std::shared_p { //printf("\n test in if I... \n"); ////////////////////////////////////////////////////////////////////////// - if (((part + 1) * para->getLimitOfNodesForVTK()) > (uint)para->getParH(level)->numberOfNodes) - { - sizeOfNodes = (uint)para->getParH(level)->numberOfNodes - (part * para->getLimitOfNodesForVTK()); - } - else - { - sizeOfNodes = para->getLimitOfNodesForVTK(); - } + sizeOfNodes = FilePartCalculator::calculateNumberOfNodesInPart(para->getParH(level)->numberOfNodes, part); ////////////////////////////////////////////////////////////////////////// - startPosition = part * para->getLimitOfNodesForVTK(); + startPosition = FilePartCalculator::calculateStartingPostionOfPart(part); endPosition = startPosition + sizeOfNodes; ////////////////////////////////////////////////////////////////////////// cells.clear(); @@ -436,7 +391,7 @@ std::vector<std::string> FileWriter::writeUnstructuredGridMedianLT(std::shared_p dn7 = number7 - startPosition; dn8 = number8 - startPosition; ////////////////////////////////////////////////////////////////////////// - if (isPeriodicCell(para, level, number2, number1, number3, number5)) + if (WriterUtilities::isPeriodicCell(para->getParHostAsReference(level), number1, number7)) continue; ////////////////////////////////////////////////////////////////////////// if (neighborsFluid == true) cells.push_back(makeUbTuple(dn1, dn2, dn3, dn4, dn5, dn6, dn7, dn8)); diff --git a/src/gpu/VirtualFluids_GPU/Output/FileWriter.h b/src/gpu/core/Output/FileWriter.h similarity index 90% rename from src/gpu/VirtualFluids_GPU/Output/FileWriter.h rename to src/gpu/core/Output/FileWriter.h index c30e33b171563a612e224fd08fd1e4ee68b8fea8..0024ea5aa8d10d2d3f6b06873c88a3cfd36db09c 100644 --- a/src/gpu/VirtualFluids_GPU/Output/FileWriter.h +++ b/src/gpu/core/Output/FileWriter.h @@ -23,7 +23,6 @@ private: std::vector<std::string> writeUnstructuredGridLT(std::shared_ptr<Parameter> para, int level, std::vector<std::string> &fname); std::vector<std::string> writeUnstructuredGridMedianLT(std::shared_ptr<Parameter> para, int level, std::vector<std::string >& fname); - bool isPeriodicCell(std::shared_ptr<Parameter> para, int level, unsigned int number2, unsigned int number1, unsigned int number3, unsigned int number5); std::string writeCollectionFile( std::shared_ptr<Parameter> para, unsigned int timestep ); diff --git a/src/gpu/VirtualFluids_GPU/Output/InterfaceDebugWriter.hpp b/src/gpu/core/Output/InterfaceDebugWriter.hpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Output/InterfaceDebugWriter.hpp rename to src/gpu/core/Output/InterfaceDebugWriter.hpp diff --git a/src/gpu/VirtualFluids_GPU/Output/MeasurePointWriter.hpp b/src/gpu/core/Output/MeasurePointWriter.hpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Output/MeasurePointWriter.hpp rename to src/gpu/core/Output/MeasurePointWriter.hpp diff --git a/src/gpu/VirtualFluids_GPU/Output/NeighborDebugWriter.hpp b/src/gpu/core/Output/NeighborDebugWriter.hpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Output/NeighborDebugWriter.hpp rename to src/gpu/core/Output/NeighborDebugWriter.hpp diff --git a/src/gpu/VirtualFluids_GPU/Output/NeighborDebugWriterTest.cpp b/src/gpu/core/Output/NeighborDebugWriterTest.cpp similarity index 96% rename from src/gpu/VirtualFluids_GPU/Output/NeighborDebugWriterTest.cpp rename to src/gpu/core/Output/NeighborDebugWriterTest.cpp index a19ed3d723f28998f5d27cd15ebf4bab8ba061c4..b4b449a13c645bf5e7316f72dacb8470d080cbb3 100644 --- a/src/gpu/VirtualFluids_GPU/Output/NeighborDebugWriterTest.cpp +++ b/src/gpu/core/Output/NeighborDebugWriterTest.cpp @@ -1,6 +1,6 @@ #include <gmock/gmock.h> #include "NeighborDebugWriter.hpp" -#include "gpu/VirtualFluids_GPU/Utilities/testUtilitiesGPU.h" +#include "gpu/core/Utilities/testUtilitiesGPU.h" class WbWriterSpy : public WbWriter { @@ -38,7 +38,7 @@ protected: const int level = 0; const unsigned long long numberOfNodes = 3; - const uint direction = vf::lbm::dir::DIR_P00; // x + const uint direction = vf::lbm::dir::dP00; // x std::unique_ptr<LBMSimulationParameter> parH = std::make_unique<LBMSimulationParameter>(); WbWriterSpy writerSpy; std::vector<uint> typeOfGridNode; diff --git a/src/gpu/VirtualFluids_GPU/Output/OffsetWriter.hpp b/src/gpu/core/Output/OffsetWriter.hpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Output/OffsetWriter.hpp rename to src/gpu/core/Output/OffsetWriter.hpp diff --git a/src/gpu/VirtualFluids_GPU/Output/PosVecIntWriter.hpp b/src/gpu/core/Output/PosVecIntWriter.hpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Output/PosVecIntWriter.hpp rename to src/gpu/core/Output/PosVecIntWriter.hpp diff --git a/src/gpu/VirtualFluids_GPU/Output/PosWriter.hpp b/src/gpu/core/Output/PosWriter.hpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Output/PosWriter.hpp rename to src/gpu/core/Output/PosWriter.hpp diff --git a/src/gpu/VirtualFluids_GPU/Output/QDebugVtkWriter.hpp b/src/gpu/core/Output/QDebugVtkWriter.hpp similarity index 95% rename from src/gpu/VirtualFluids_GPU/Output/QDebugVtkWriter.hpp rename to src/gpu/core/Output/QDebugVtkWriter.hpp index 5448db1329885ca542c951b3d068f3ab48fe502c..30ffe603ab2d6c8f3e3edd469f2e9d0bc85cfab1 100644 --- a/src/gpu/VirtualFluids_GPU/Output/QDebugVtkWriter.hpp +++ b/src/gpu/core/Output/QDebugVtkWriter.hpp @@ -11,9 +11,9 @@ #include <logger/Logger.h> #include "gpu/GridGenerator/grid/NodeValues.h" -#include "gpu/VirtualFluids_GPU/LBM/LB.h" -#include "gpu/VirtualFluids_GPU/Parameter/Parameter.h" -#include "gpu/VirtualFluids_GPU/Utilities/FindNeighbors.h" +#include "gpu/core/LBM/LB.h" +#include "gpu/core/Parameter/Parameter.h" +#include "gpu/core/Utilities/FindNeighbors.h" namespace QDebugVtkWriter { diff --git a/src/gpu/VirtualFluids_GPU/Output/QDebugVtkWriterTest.cpp b/src/gpu/core/Output/QDebugVtkWriterTest.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Output/QDebugVtkWriterTest.cpp rename to src/gpu/core/Output/QDebugVtkWriterTest.cpp diff --git a/src/gpu/VirtualFluids_GPU/Output/QDebugWriter.hpp b/src/gpu/core/Output/QDebugWriter.hpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Output/QDebugWriter.hpp rename to src/gpu/core/Output/QDebugWriter.hpp diff --git a/src/gpu/VirtualFluids_GPU/Output/TimeStepTimer.cpp b/src/gpu/core/Output/TimeStepTimer.cpp similarity index 99% rename from src/gpu/VirtualFluids_GPU/Output/TimeStepTimer.cpp rename to src/gpu/core/Output/TimeStepTimer.cpp index 979c4349a084342a897a0269ffb86a3714065e96..9c7edb0bf02cff0b076648c2fbf665d0ffdd4aa8 100644 --- a/src/gpu/VirtualFluids_GPU/Output/TimeStepTimer.cpp +++ b/src/gpu/core/Output/TimeStepTimer.cpp @@ -1,6 +1,6 @@ #include "helper_cuda.h" #include <cuda_runtime.h> -#include "DataTypes.h" +#include <basics/DataTypes.h> #include "UbScheduler.h" #include "Parameter/Parameter.h" diff --git a/src/gpu/VirtualFluids_GPU/Output/TimeStepTimer.h b/src/gpu/core/Output/TimeStepTimer.h similarity index 98% rename from src/gpu/VirtualFluids_GPU/Output/TimeStepTimer.h rename to src/gpu/core/Output/TimeStepTimer.h index 41bb9eba7ba09ddb092e644894eca0fde71fa27b..350a7d1e72b2a50f28abcdd2f6cc0e455cdd633e 100644 --- a/src/gpu/VirtualFluids_GPU/Output/TimeStepTimer.h +++ b/src/gpu/core/Output/TimeStepTimer.h @@ -3,7 +3,7 @@ #include "helper_cuda.h" #include <cuda_runtime.h> -#include "DataTypes.h" +#include <basics/DataTypes.h> #include "UbScheduler.h" #include "Parameter/Parameter.h" diff --git a/src/gpu/VirtualFluids_GPU/Output/Timer.cpp b/src/gpu/core/Output/Timer.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Output/Timer.cpp rename to src/gpu/core/Output/Timer.cpp diff --git a/src/gpu/VirtualFluids_GPU/Output/Timer.h b/src/gpu/core/Output/Timer.h similarity index 96% rename from src/gpu/VirtualFluids_GPU/Output/Timer.h rename to src/gpu/core/Output/Timer.h index fd76c66703c2a60d9aed26365f415fe3c93e7e1f..e586dd6881bbe0275758a516a7127b46a8b21bae 100644 --- a/src/gpu/VirtualFluids_GPU/Output/Timer.h +++ b/src/gpu/core/Output/Timer.h @@ -2,7 +2,7 @@ #define TIMER_H #include <cuda_runtime.h> -#include "DataTypes.h" +#include <basics/DataTypes.h> #include "Parameter/Parameter.h" #include <logger/Logger.h> diff --git a/src/gpu/VirtualFluids_GPU/Output/UnstructuredGridWriter.hpp b/src/gpu/core/Output/UnstructuredGridWriter.hpp similarity index 96% rename from src/gpu/VirtualFluids_GPU/Output/UnstructuredGridWriter.hpp rename to src/gpu/core/Output/UnstructuredGridWriter.hpp index 5d5548ba7e64a23152126446e3c438da1c7e7653..b86ed947879d94740f30668a9d53c4181d956ebf 100644 --- a/src/gpu/VirtualFluids_GPU/Output/UnstructuredGridWriter.hpp +++ b/src/gpu/core/Output/UnstructuredGridWriter.hpp @@ -14,8 +14,6 @@ #include <basics/writer/WbWriterVtkXmlASCII.h> #include <basics/utilities/UbTuple.h> -//using namespace std; - namespace UnstructuredGridWriter { void writeUnstructuredGrid(Parameter* para, int level, std::string& fname, std::string& filenameVec2) @@ -195,22 +193,17 @@ namespace UnstructuredGridWriter for (unsigned int part=0; part < fname.size(); part++) { vxmax = 0; - //printf("\n test in if I... \n"); - ////////////////////////////////////////////////////////////////////////// - if ( ((part+1)*para->getLimitOfNodesForVTK()) > (uint)para->getParH(level)->numberOfNodes) - { - sizeOfNodes = (uint)para->getParH(level)->numberOfNodes - (part * para->getLimitOfNodesForVTK()); - } - else - { - sizeOfNodes = para->getLimitOfNodesForVTK(); - } - ////////////////////////////////////////////////////////////////////////// - startpos = part * para->getLimitOfNodesForVTK(); - endpos = startpos + sizeOfNodes; - ////////////////////////////////////////////////////////////////////////// - cells.clear(); - nodes.resize(sizeOfNodes); + // printf("\n test in if I... \n"); + ////////////////////////////////////////////////////////////////////////// + + sizeOfNodes = FilePartCalculator::calculateNumberOfNodesInPart(para->getParH(level)->numberOfNodes); + + ////////////////////////////////////////////////////////////////////////// + startpos = FilePartCalculator::calculateStartingPostionOfPart(part); + endpos = startpos + sizeOfNodes; + ////////////////////////////////////////////////////////////////////////// + cells.clear(); + nodes.resize(sizeOfNodes); nodedata[0].resize(sizeOfNodes); nodedata[1].resize(sizeOfNodes); nodedata[2].resize(sizeOfNodes); @@ -340,16 +333,11 @@ namespace UnstructuredGridWriter vxmax = 0; //printf("\n test in if I... \n"); ////////////////////////////////////////////////////////////////////////// - if (((part + 1) * para->getLimitOfNodesForVTK()) > (uint)para->getParH(level)->numberOfNodes) - { - sizeOfNodes = (uint)para->getParH(level)->numberOfNodes - (part * para->getLimitOfNodesForVTK()); - } - else - { - sizeOfNodes = para->getLimitOfNodesForVTK(); - } - ////////////////////////////////////////////////////////////////////////// - startpos = part * para->getLimitOfNodesForVTK(); + + sizeOfNodes = FilePartCalculator::calculateNumberOfNodesInPart(para->getParH(level)->numberOfNodes); + + ////////////////////////////////////////////////////////////////////////// + startpos = FilePartCalculator::calculateStartingPostionOfPart(part); endpos = startpos + sizeOfNodes; ////////////////////////////////////////////////////////////////////////// cells.clear(); @@ -479,16 +467,9 @@ namespace UnstructuredGridWriter vxmax = 0; //printf("\n test in if I... \n"); ////////////////////////////////////////////////////////////////////////// - if (((part + 1) * para->getLimitOfNodesForVTK()) > (uint)para->getParH(level)->numberOfNodes) - { - sizeOfNodes = (uint)para->getParH(level)->numberOfNodes - (part * para->getLimitOfNodesForVTK()); - } - else - { - sizeOfNodes = para->getLimitOfNodesForVTK(); - } + sizeOfNodes = FilePartCalculator::calculateNumberOfNodesInPart(para->getParH(level)->numberOfNodes); ////////////////////////////////////////////////////////////////////////// - startpos = part * para->getLimitOfNodesForVTK(); + startpos = FilePartCalculator::calculateStartingPostionOfPart(part); endpos = startpos + sizeOfNodes; ////////////////////////////////////////////////////////////////////////// cells.clear(); @@ -628,16 +609,9 @@ namespace UnstructuredGridWriter vxmax = 0; //printf("\n test in if I... \n"); ////////////////////////////////////////////////////////////////////////// - if (((part + 1) * para->getLimitOfNodesForVTK()) > (uint)para->getParH(level)->numberOfNodes) - { - sizeOfNodes = (uint)para->getParH(level)->numberOfNodes - (part * para->getLimitOfNodesForVTK()); - } - else - { - sizeOfNodes = para->getLimitOfNodesForVTK(); - } + sizeOfNodes = FilePartCalculator::calculateNumberOfNodesInPart(para->getParH(level)->numberOfNodes); ////////////////////////////////////////////////////////////////////////// - startpos = part * para->getLimitOfNodesForVTK(); + startpos = FilePartCalculator::calculateStartingPostionOfPart(part); endpos = startpos + sizeOfNodes; ////////////////////////////////////////////////////////////////////////// cells.clear(); @@ -771,16 +745,9 @@ namespace UnstructuredGridWriter vxmax = 0; //printf("\n test in if I... \n"); ////////////////////////////////////////////////////////////////////////// - if (((part + 1) * para->getLimitOfNodesForVTK()) > (uint)para->getParH(level)->numberOfNodes) - { - sizeOfNodes = (uint)para->getParH(level)->numberOfNodes - (part * para->getLimitOfNodesForVTK()); - } - else - { - sizeOfNodes = para->getLimitOfNodesForVTK(); - } - ////////////////////////////////////////////////////////////////////////// - startpos = part * para->getLimitOfNodesForVTK(); + sizeOfNodes = FilePartCalculator::calculateNumberOfNodesInPart(para->getParH(level)->numberOfNodes); + ////////////////////////////////////////////////////////////////////////// + startpos = FilePartCalculator::calculateStartingPostionOfPart(part); endpos = startpos + sizeOfNodes; ////////////////////////////////////////////////////////////////////////// cells.clear(); @@ -1342,18 +1309,14 @@ namespace UnstructuredGridWriter vxmax = 0; //printf("\n test in if I... \n"); ////////////////////////////////////////////////////////////////////////// - if ( ((part+1)*para->getLimitOfNodesForVTK()) > (uint)para->getParH(level)->numberOfNodes) - { - sizeOfNodes = (uint)para->getParH(level)->numberOfNodes - (part * para->getLimitOfNodesForVTK()); - } - else - { - sizeOfNodes = para->getLimitOfNodesForVTK(); - } - ////////////////////////////////////////////////////////////////////////// - startpos = part * para->getLimitOfNodesForVTK(); - endpos = startpos + sizeOfNodes; - ////////////////////////////////////////////////////////////////////////// + + sizeOfNodes = FilePartCalculator::calculateNumberOfNodesInPart(para->getParH(level)->numberOfNodes); + + ////////////////////////////////////////////////////////////////////////// + startpos = FilePartCalculator::calculateStartingPostionOfPart(part); + endpos = startpos + sizeOfNodes; + + ////////////////////////////////////////////////////////////////////////// cells.clear(); nodes.resize(sizeOfNodes); nodedata[0].resize(sizeOfNodes); @@ -1465,16 +1428,9 @@ namespace UnstructuredGridWriter vxmax = 0; //printf("\n test in if I... \n"); ////////////////////////////////////////////////////////////////////////// - if (((part + 1) * para->getLimitOfNodesForVTK()) > (uint)para->getParH(level)->numberOfNodes) - { - sizeOfNodes = (uint)para->getParH(level)->numberOfNodes - (part * para->getLimitOfNodesForVTK()); - } - else - { - sizeOfNodes = para->getLimitOfNodesForVTK(); - } + sizeOfNodes = FilePartCalculator::calculateNumberOfNodesInPart(para->getParH(level)->numberOfNodes); ////////////////////////////////////////////////////////////////////////// - startpos = part * para->getLimitOfNodesForVTK(); + startpos = FilePartCalculator::calculateStartingPostionOfPart(part); endpos = startpos + sizeOfNodes; ////////////////////////////////////////////////////////////////////////// cells.clear(); @@ -1595,16 +1551,9 @@ namespace UnstructuredGridWriter vxmax = 0; //printf("\n test in if I... \n"); ////////////////////////////////////////////////////////////////////////// - if (((part + 1) * para->getLimitOfNodesForVTK()) > (uint)para->getParH(level)->numberOfNodes) - { - sizeOfNodes = (uint)para->getParH(level)->numberOfNodes - (part * para->getLimitOfNodesForVTK()); - } - else - { - sizeOfNodes = para->getLimitOfNodesForVTK(); - } + sizeOfNodes = FilePartCalculator::calculateNumberOfNodesInPart(para->getParH(level)->numberOfNodes); ////////////////////////////////////////////////////////////////////////// - startpos = part * para->getLimitOfNodesForVTK(); + startpos = FilePartCalculator::calculateStartingPostionOfPart(part); endpos = startpos + sizeOfNodes; ////////////////////////////////////////////////////////////////////////// cells.clear(); @@ -1975,16 +1924,9 @@ namespace UnstructuredGridWriter vxmax = 0; //printf("\n test in if I... \n"); ////////////////////////////////////////////////////////////////////////// - if (((part + 1) * para->getLimitOfNodesForVTK()) > (uint)para->getParH(level)->numberOfNodes) - { - sizeOfNodes = (uint)para->getParH(level)->numberOfNodes - (part * para->getLimitOfNodesForVTK()); - } - else - { - sizeOfNodes = para->getLimitOfNodesForVTK(); - } + sizeOfNodes = FilePartCalculator::calculateNumberOfNodesInPart(para->getParH(level)->numberOfNodes); ////////////////////////////////////////////////////////////////////////// - startpos = part * para->getLimitOfNodesForVTK(); + startpos = FilePartCalculator::calculateStartingPostionOfPart(part); endpos = startpos + sizeOfNodes; ////////////////////////////////////////////////////////////////////////// cells.clear(); @@ -2080,16 +2022,9 @@ namespace UnstructuredGridWriter vxmax = 0; //printf("\n test in if I... \n"); ////////////////////////////////////////////////////////////////////////// - if (((part + 1) * para->getLimitOfNodesForVTK()) > (uint)para->getParH(level)->numberOfNodes) - { - sizeOfNodes = (uint)para->getParH(level)->numberOfNodes - (part * para->getLimitOfNodesForVTK()); - } - else - { - sizeOfNodes = para->getLimitOfNodesForVTK(); - } + sizeOfNodes = FilePartCalculator::calculateNumberOfNodesInPart(para->getParH(level)->numberOfNodes); ////////////////////////////////////////////////////////////////////////// - startpos = part * para->getLimitOfNodesForVTK(); + startpos = FilePartCalculator::calculateStartingPostionOfPart(part); endpos = startpos + sizeOfNodes; ////////////////////////////////////////////////////////////////////////// cells.clear(); @@ -2192,16 +2127,9 @@ namespace UnstructuredGridWriter vxmax = 0; //printf("\n test in if I... \n"); ////////////////////////////////////////////////////////////////////////// - if (((part + 1) * para->getLimitOfNodesForVTK()) > (uint)para->getParH(level)->numberOfNodes) - { - sizeOfNodes = (uint)para->getParH(level)->numberOfNodes - (part * para->getLimitOfNodesForVTK()); - } - else - { - sizeOfNodes = para->getLimitOfNodesForVTK(); - } + sizeOfNodes = FilePartCalculator::calculateNumberOfNodesInPart(para->getParH(level)->numberOfNodes); ////////////////////////////////////////////////////////////////////////// - startpos = part * para->getLimitOfNodesForVTK(); + startpos = FilePartCalculator::calculateStartingPostionOfPart(part); endpos = startpos + sizeOfNodes; ////////////////////////////////////////////////////////////////////////// cells.clear(); diff --git a/src/gpu/VirtualFluids_GPU/Output/VeloASCIIWriter.hpp b/src/gpu/core/Output/VeloASCIIWriter.hpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Output/VeloASCIIWriter.hpp rename to src/gpu/core/Output/VeloASCIIWriter.hpp diff --git a/src/gpu/VirtualFluids_GPU/Output/VtkSGWriter.hpp b/src/gpu/core/Output/VtkSGWriter.hpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Output/VtkSGWriter.hpp rename to src/gpu/core/Output/VtkSGWriter.hpp diff --git a/src/gpu/core/Output/WriterUtilities.cpp b/src/gpu/core/Output/WriterUtilities.cpp new file mode 100644 index 0000000000000000000000000000000000000000..9752eb923ac8eb58850018f21697f9a32119f775 --- /dev/null +++ b/src/gpu/core/Output/WriterUtilities.cpp @@ -0,0 +1,53 @@ +#include "WriterUtilities.h" +#include "Parameter/Parameter.h" +#include <basics/StringUtilities/StringUtil.h> + +std::string WriterUtilities::makePartFileNameEnding(uint level, int ID, int part, int timestep) +{ + return "_lev_" + StringUtil::toString<int>(level) + "_ID_" + StringUtil::toString<int>(ID) + "_Part_" + + StringUtil::toString<int>(part) + "_t_" + StringUtil::toString<int>(timestep) + ".vtk"; +} + +bool WriterUtilities::isPeriodicCell(const LBMSimulationParameter& parH, unsigned int baseNodeOfCell, + unsigned int otherNodeInCell) +{ + // perform periodicity check by calculating the length of the grid cell's space diagonal + const real distance = sqrt( + pow(parH.coordinateX[otherNodeInCell] - parH.coordinateX[baseNodeOfCell], 2.) + + pow(parH.coordinateY[otherNodeInCell] - parH.coordinateY[baseNodeOfCell], 2.) + + pow(parH.coordinateZ[otherNodeInCell] - parH.coordinateZ[baseNodeOfCell], 2.)); + return distance > 1.01 * sqrt(3 * pow(parH.gridSpacing, 2.)); +} + +void WriterUtilities::getIndicesOfAllNodesInOct(std::array<uint, 8>& nodeIndices, uint baseNodeOfOct, + const LBMSimulationParameter& parH) +{ + nodeIndices[0] = baseNodeOfOct; + nodeIndices[1] = parH.neighborX[nodeIndices[0]]; + nodeIndices[2] = parH.neighborY[nodeIndices[1]]; + nodeIndices[3] = parH.neighborY[nodeIndices[0]]; + nodeIndices[4] = parH.neighborZ[nodeIndices[0]]; + nodeIndices[5] = parH.neighborZ[nodeIndices[1]]; + nodeIndices[6] = parH.neighborZ[nodeIndices[2]]; + nodeIndices[7] = parH.neighborZ[nodeIndices[3]]; +} + +void WriterUtilities::calculateRelativeNodeIndexInPart(std::array<uint, 8>& relativePositionInPart, + const std::array<uint, 8>& indicesOfOct, uint startPositionOfPart) +{ + for (size_t i = 0; i < relativePositionInPart.size(); i++) { + relativePositionInPart[i] = indicesOfOct[i] - startPositionOfPart; + } +} + +bool WriterUtilities::areAllNodesInOctValidForWriting(const std::array<uint, 8>& indicesOfOct, + const LBMSimulationParameter& parH, uint endPositionOfPart) +{ + const bool neighborsAreFluid = std::all_of(indicesOfOct.begin(), indicesOfOct.end(), + [&](uint index) { return parH.typeOfGridNode[index] == GEO_FLUID; }); + + const bool neighborIsOutOfPart = + (std::any_of(indicesOfOct.begin(), indicesOfOct.end(), [&](uint index) { return index > endPositionOfPart; })); + + return neighborsAreFluid && !neighborIsOutOfPart; +} diff --git a/src/gpu/core/Output/WriterUtilities.h b/src/gpu/core/Output/WriterUtilities.h new file mode 100644 index 0000000000000000000000000000000000000000..56bc756ddc26aa4090b1249d891640af7f8c909c --- /dev/null +++ b/src/gpu/core/Output/WriterUtilities.h @@ -0,0 +1,39 @@ +#ifndef WRITER_UTILITIES +#define WRITER_UTILITIES + +#include <array> + +#include <basics/DataTypes.h> + +class Parameter; +struct LBMSimulationParameter; + +class WriterUtilities +{ +public: + //! \brief check whether a grid cell is part of a periodic boundary condition + //! \param baseNodeOfCell is the index of one node of the grid cell + //! \param otherNodeInCell is the index of the node which is not on the same face of the grid cell as the base node (i.e. + //! it is on the other end of the space diagonal) + static bool isPeriodicCell(const LBMSimulationParameter& parH, unsigned int baseNodeOfCell, + unsigned int otherNodeInCell); + + //! \brief use the neighbor relations to find the indices of all nodes in an oct cell + static void getIndicesOfAllNodesInOct(std::array<uint, 8>& nodeIndices, uint baseNodeOfOct, + const LBMSimulationParameter& parH); + + //! \brief calculate the node index relative to the start position of the part + static void calculateRelativeNodeIndexInPart(std::array<uint, 8>& relativePositionInPart, + const std::array<uint, 8>& indicesOfOct, uint startPositionOfPart); + + //! \brief check if all nodes in an oct are valid to be written into an output file + //! \details to be valid the nodes need to be: 1. have the type GEO_FLUID, 2. not be outside the current file part + //! \param endPositionOfPart specifies the index of the last node in the current file part + static bool areAllNodesInOctValidForWriting(const std::array<uint, 8>& indicesOfOct, const LBMSimulationParameter& parH, + uint endPositionOfPart); + + //! \brief create the ending of the file name for a file part + static std::string makePartFileNameEnding(uint level, int processID, int part, int timestep); +}; + +#endif diff --git a/src/gpu/core/Output/WriterUtilitiesTest.cpp b/src/gpu/core/Output/WriterUtilitiesTest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..2989abcf6194144d5d5ea9527977571916f7234a --- /dev/null +++ b/src/gpu/core/Output/WriterUtilitiesTest.cpp @@ -0,0 +1,216 @@ + +#include "WriterUtilities.h" +#include "gpu/core/Utilities/testUtilitiesGPU.h" +#include <gmock/gmock.h> +#include <numeric> + +class WriterUtilitiesPeriodicCellTest : public testing::Test +{ +protected: + LBMSimulationParameter parH = LBMSimulationParameter(); + const uint level = 0; + const uint baseNodeIndex = 0; + const uint otherNodeIndex = 1; + std::array<real, 2> coordinates = {0.0, 1.0}; + + void SetUp() override + { + // create a domain with only three layers of nodes + // nodes are at the coordinates 0.0, 1.0 and 2.0 + + parH.gridSpacing = 1.0; + + parH.coordinateX = new real[2]; + parH.coordinateY = new real[2]; + parH.coordinateZ = new real[2]; + + parH.coordinateX[baseNodeIndex] = coordinates[baseNodeIndex]; + parH.coordinateY[baseNodeIndex] = coordinates[baseNodeIndex]; + parH.coordinateZ[baseNodeIndex] = coordinates[baseNodeIndex]; + parH.coordinateX[otherNodeIndex] = coordinates[otherNodeIndex]; + parH.coordinateY[otherNodeIndex] = coordinates[otherNodeIndex]; + parH.coordinateZ[otherNodeIndex] = coordinates[otherNodeIndex]; + } + + void TearDown() override + { + delete[] parH.coordinateX; + delete[] parH.coordinateY; + delete[] parH.coordinateZ; + } +}; + +TEST_F(WriterUtilitiesPeriodicCellTest, cellIsNotPeriodic) +{ + EXPECT_FALSE(WriterUtilities::isPeriodicCell(parH, baseNodeIndex, otherNodeIndex)); + EXPECT_FALSE(WriterUtilities::isPeriodicCell(parH, otherNodeIndex, baseNodeIndex)); +} + +TEST_F(WriterUtilitiesPeriodicCellTest, cellIsPeriodicInX) +{ + parH.coordinateX[1] = 2.0; + EXPECT_TRUE(WriterUtilities::isPeriodicCell(parH, baseNodeIndex, otherNodeIndex)); + EXPECT_TRUE(WriterUtilities::isPeriodicCell(parH, otherNodeIndex, baseNodeIndex)); +} + +TEST_F(WriterUtilitiesPeriodicCellTest, cellIsPeriodicInY) +{ + parH.coordinateY[1] = 2.0; + EXPECT_TRUE(WriterUtilities::isPeriodicCell(parH, baseNodeIndex, otherNodeIndex)); + EXPECT_TRUE(WriterUtilities::isPeriodicCell(parH, otherNodeIndex, baseNodeIndex)); +} + +TEST_F(WriterUtilitiesPeriodicCellTest, cellIsPeriodicInZ) +{ + parH.coordinateZ[1] = 2.0; + EXPECT_TRUE(WriterUtilities::isPeriodicCell(parH, baseNodeIndex, otherNodeIndex)); + EXPECT_TRUE(WriterUtilities::isPeriodicCell(parH, otherNodeIndex, baseNodeIndex)); +} +TEST_F(WriterUtilitiesPeriodicCellTest, cellIsPeriodicInXY) +{ + parH.coordinateX[1] = 2.0; + parH.coordinateY[1] = 2.0; + EXPECT_TRUE(WriterUtilities::isPeriodicCell(parH, baseNodeIndex, otherNodeIndex)); + EXPECT_TRUE(WriterUtilities::isPeriodicCell(parH, otherNodeIndex, baseNodeIndex)); +} + +TEST_F(WriterUtilitiesPeriodicCellTest, cellIsPeriodicInXZ) +{ + parH.coordinateX[1] = 2.0; + parH.coordinateZ[1] = 2.0; + EXPECT_TRUE(WriterUtilities::isPeriodicCell(parH, baseNodeIndex, otherNodeIndex)); + EXPECT_TRUE(WriterUtilities::isPeriodicCell(parH, otherNodeIndex, baseNodeIndex)); +} + +TEST_F(WriterUtilitiesPeriodicCellTest, cellIsPeriodicInYZ) +{ + parH.coordinateY[1] = 2.0; + parH.coordinateZ[1] = 2.0; + EXPECT_TRUE(WriterUtilities::isPeriodicCell(parH, baseNodeIndex, otherNodeIndex)); + EXPECT_TRUE(WriterUtilities::isPeriodicCell(parH, otherNodeIndex, baseNodeIndex)); +} + +TEST_F(WriterUtilitiesPeriodicCellTest, cellIsPeriodicInXYZ) +{ + parH.coordinateX[1] = 2.0; + parH.coordinateY[1] = 2.0; + parH.coordinateZ[1] = 2.0; + EXPECT_TRUE(WriterUtilities::isPeriodicCell(parH, baseNodeIndex, otherNodeIndex)); + EXPECT_TRUE(WriterUtilities::isPeriodicCell(parH, otherNodeIndex, baseNodeIndex)); +} + +class WriterUtilitiesNeighborOctTest : public testing::Test +{ + static void setUpNeighborsNeighborsForOct(LBMSimulationParameter& parH, const std::array<uint, 8>& nodeIndices) + { + // node indices: MMM, PMM, PPM, MPM, + // MMP, PMP, PPP, MPP + + for (uint i = 0; i < (uint)nodeIndices.size(); i++) { + const uint currentNodeIndex = nodeIndices[i]; + if (i < 4) + parH.neighborZ[currentNodeIndex] = nodeIndices[i + 4]; + else + parH.neighborZ[currentNodeIndex] = 99; + + if (i == 0 || i == 4) + parH.neighborY[currentNodeIndex] = nodeIndices[i + 3]; + else if (i == 1 || i == 5) + parH.neighborY[currentNodeIndex] = nodeIndices[i + 1]; + else + parH.neighborY[currentNodeIndex] = 999; + + if (i == 0 || i == 4) + parH.neighborX[currentNodeIndex] = nodeIndices[i + 1]; + else if (i == 3 || i == 7) + parH.neighborX[currentNodeIndex] = nodeIndices[i - 1]; + else + parH.neighborX[currentNodeIndex] = 9999; + } + } + +public: + LBMSimulationParameter parH = LBMSimulationParameter(); + std::array<uint, 8> nodeIndices; + + void SetUp() override + { + // set up some node indices from 0 to 7 + std::iota(nodeIndices.begin(), nodeIndices.end(), 0); + std::reverse(nodeIndices.begin(), nodeIndices.end()); + + parH.neighborX = new uint[8]; + parH.neighborY = new uint[8]; + parH.neighborZ = new uint[8]; + setUpNeighborsNeighborsForOct(parH, nodeIndices); + } + + void TearDown() override + { + delete[] parH.neighborX; + delete[] parH.neighborY; + delete[] parH.neighborZ; + } +}; + +TEST_F(WriterUtilitiesNeighborOctTest, getIndicesOfAllNodesInOct) +{ + std::array<uint, 8> resultingNodeIndices; + WriterUtilities::getIndicesOfAllNodesInOct(resultingNodeIndices, nodeIndices[0], parH); + for (uint i = 0; i < 8; i++) + EXPECT_THAT(resultingNodeIndices[i], testing::Eq(nodeIndices[i])) << "for index i = " << i << " in nodeIndices"; +} + +TEST(WriterUtilitiesTest, calculateRelativeNodeIndexInPart) +{ + std::array<uint, 8> indicesOfOct = { 10, 12, 14, 16, 20, 22, 24, 26 }; + uint startPositionOfPart = 10; + std::array<uint, 8> expected = { 0, 2, 4, 6, 10, 12, 14, 16 }; + + std::array<uint, 8> result; + WriterUtilities::calculateRelativeNodeIndexInPart(result, indicesOfOct, startPositionOfPart); + EXPECT_THAT(result, testing::Eq(expected)); +} + +class WriterUtilitiesTestNodeValidity : public testing::Test +{ +protected: + LBMSimulationParameter parH = LBMSimulationParameter(); + std::array<uint, 8> nodeIndices; + std::array<uint, 8> typeOfGridNode; + + void SetUp() override + { + // set up node indices from 0 to 7 + std::iota(nodeIndices.begin(), nodeIndices.end(), 0); + + std::fill(typeOfGridNode.begin(), typeOfGridNode.end(), GEO_FLUID); + parH.typeOfGridNode = typeOfGridNode.data(); + } +}; + +TEST_F(WriterUtilitiesTestNodeValidity, allNodesInOctValidForWriting) +{ + uint endPositionOfPart = 7; + EXPECT_TRUE(WriterUtilities::areAllNodesInOctValidForWriting(nodeIndices, parH, endPositionOfPart)); +} + +TEST_F(WriterUtilitiesTestNodeValidity, areAllNodesInOctValidForWriting_NodeOutOfPart) +{ + uint endPositionOfPart = 6; + EXPECT_FALSE(WriterUtilities::areAllNodesInOctValidForWriting(nodeIndices, parH, endPositionOfPart)); +} + +TEST_F(WriterUtilitiesTestNodeValidity, areAllNodesInOctValidForWriting_NonFluidNode) +{ + uint endPositionOfPart = 7; + typeOfGridNode[0] = GEO_SOLID; + EXPECT_FALSE(WriterUtilities::areAllNodesInOctValidForWriting(nodeIndices, parH, endPositionOfPart)); +} + +TEST_F(WriterUtilitiesTestNodeValidity, areAllNodesInOctValidForWriting_NonFluidNodeAtEnd) +{ + uint endPositionOfPart = 7; + typeOfGridNode[7] = GEO_SOLID; + EXPECT_FALSE(WriterUtilities::areAllNodesInOctValidForWriting(nodeIndices, parH, endPositionOfPart)); +} diff --git a/src/gpu/VirtualFluids_GPU/Output/interfaceWriter.hpp b/src/gpu/core/Output/interfaceWriter.hpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Output/interfaceWriter.hpp rename to src/gpu/core/Output/interfaceWriter.hpp diff --git a/src/gpu/VirtualFluids_GPU/Output/kFullWriter.hpp b/src/gpu/core/Output/kFullWriter.hpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Output/kFullWriter.hpp rename to src/gpu/core/Output/kFullWriter.hpp diff --git a/src/gpu/VirtualFluids_GPU/Parameter/CudaStreamManager.cpp b/src/gpu/core/Parameter/CudaStreamManager.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Parameter/CudaStreamManager.cpp rename to src/gpu/core/Parameter/CudaStreamManager.cpp diff --git a/src/gpu/VirtualFluids_GPU/Parameter/CudaStreamManager.h b/src/gpu/core/Parameter/CudaStreamManager.h similarity index 99% rename from src/gpu/VirtualFluids_GPU/Parameter/CudaStreamManager.h rename to src/gpu/core/Parameter/CudaStreamManager.h index 98032ef16adebf56f10d8ed5e9c04bbf517876c3..35d6b462c949b7d43aeb0bdd61e4fc185eab25ad 100644 --- a/src/gpu/VirtualFluids_GPU/Parameter/CudaStreamManager.h +++ b/src/gpu/core/Parameter/CudaStreamManager.h @@ -33,7 +33,7 @@ #include <map> #include <cuda.h> #include <cuda_runtime.h> -#include "DataTypes.h" +#include <basics/DataTypes.h> enum class CudaStreamIndex { diff --git a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.cpp b/src/gpu/core/Parameter/EdgeNodeFinder.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.cpp rename to src/gpu/core/Parameter/EdgeNodeFinder.cpp diff --git a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.h b/src/gpu/core/Parameter/EdgeNodeFinder.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinder.h rename to src/gpu/core/Parameter/EdgeNodeFinder.h diff --git a/src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinderTest.cpp b/src/gpu/core/Parameter/EdgeNodeFinderTest.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Parameter/EdgeNodeFinderTest.cpp rename to src/gpu/core/Parameter/EdgeNodeFinderTest.cpp diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp b/src/gpu/core/Parameter/Parameter.cpp similarity index 98% rename from src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp rename to src/gpu/core/Parameter/Parameter.cpp index 746029baf8cfdc7529b3150e97e6a1efb7ba18ab..8caa85360c9d8053dfbf88eecad3dc7aca151e52 100644 --- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp +++ b/src/gpu/core/Parameter/Parameter.cpp @@ -130,15 +130,9 @@ void Parameter::readConfigData(const vf::basics::ConfigurationFile &configData) if (configData.contains("UseMeasurePoints")) this->setUseMeasurePoints(configData.getValue<bool>("UseMeasurePoints")); ////////////////////////////////////////////////////////////////////////// - if (configData.contains("UseWale")) - this->setUseWale(configData.getValue<bool>("UseWale")); - ////////////////////////////////////////////////////////////////////////// if (configData.contains("UseInitNeq")) this->setUseInitNeq(configData.getValue<bool>("UseInitNeq")); ////////////////////////////////////////////////////////////////////////// - if (configData.contains("SimulatePorousMedia")) - this->setSimulatePorousMedia(configData.getValue<bool>("SimulatePorousMedia")); - ////////////////////////////////////////////////////////////////////////// if (configData.contains("D3Qxx")) this->setD3Qxx(configData.getValue<int>("D3Qxx")); ////////////////////////////////////////////////////////////////////////// @@ -174,9 +168,6 @@ void Parameter::readConfigData(const vf::basics::ConfigurationFile &configData) if (configData.contains("DiffOn")) this->setDiffOn(configData.getValue<bool>("DiffOn")); ////////////////////////////////////////////////////////////////////////// - if (configData.contains("DiffMod")) - this->setDiffMod(configData.getValue<int>("DiffMod")); - ////////////////////////////////////////////////////////////////////////// if (configData.contains("Diffusivity")) this->setDiffusivity(configData.getValue<real>("Diffusivity")); ////////////////////////////////////////////////////////////////////////// @@ -599,7 +590,7 @@ void Parameter::initLBMSimulationParameter() void Parameter::checkParameterValidityCumulantK17() const { - if (this->mainKernel != vf::CollisionKernel::Compressible::K17CompressibleNavierStokes) + if (this->mainKernel != vf::collisionKernel::compressible::K17CompressibleNavierStokes) return; const real viscosity = this->parH[maxlevel]->viscosity; @@ -664,10 +655,6 @@ void Parameter::setOutputCount(unsigned int outputCount) { this->outputCount = outputCount; } -void Parameter::setlimitOfNodesForVTK(unsigned int limitOfNodesForVTK) -{ - this->limitOfNodesForVTK = limitOfNodesForVTK; -} void Parameter::setStartTurn(unsigned int inStartTurn) { startTurn = inStartTurn; @@ -680,10 +667,6 @@ void Parameter::setCompOn(bool isComp) { compOn = isComp; } -void Parameter::setDiffMod(int DiffMod) -{ - diffMod = DiffMod; -} void Parameter::setD3Qxx(int d3qxx) { this->D3Qxx = d3qxx; @@ -994,21 +977,11 @@ void Parameter::setUseInitNeq(bool useInitNeq) { this->isInitNeq = useInitNeq; } -void Parameter::setSimulatePorousMedia(bool simulatePorousMedia) -{ - this->simulatePorousMedia = simulatePorousMedia; -} void Parameter::setUseTurbulentViscosity(bool useTurbulentViscosity) { this->isTurbulentViscosity = useTurbulentViscosity; } -void Parameter::setUseWale(bool useWale) -{ - this->isWale = useWale; - if (useWale) - setUseTurbulentViscosity(true); -} -void Parameter::setTurbulenceModel(TurbulenceModel turbulenceModel) +void Parameter::setTurbulenceModel(vf::lbm::TurbulenceModel turbulenceModel) { this->turbulenceModel = turbulenceModel; } @@ -1638,7 +1611,7 @@ void Parameter::setOutflowBoundaryNormalZ(std::string outflowNormalZ) void Parameter::configureMainKernel(std::string kernel) { this->mainKernel = kernel; - if (kernel == vf::CollisionKernel::Compressible::K17CompressibleNavierStokes) + if (kernel == vf::collisionKernel::compressible::K17CompressibleNavierStokes) this->kernelNeedsFluidNodeIndicesToRun = true; } void Parameter::setMultiKernelOn(bool isOn) @@ -1721,10 +1694,6 @@ unsigned int Parameter::getOutputCount() { return this->outputCount; } -unsigned int Parameter::getLimitOfNodesForVTK() -{ - return this->limitOfNodesForVTK; -} unsigned int Parameter::getStartTurn() { return startTurn; @@ -1738,6 +1707,16 @@ std::shared_ptr<LBMSimulationParameter> Parameter::getParH(int level) return parH[level]; } +LBMSimulationParameter& Parameter::getParDeviceAsReference(int level) const +{ + return *parD[level]; +} + +LBMSimulationParameter& Parameter::getParHostAsReference(int level) const +{ + return *parH[level]; +} + const std::vector<std::shared_ptr<LBMSimulationParameter>> &Parameter::getParHallLevels() { return parH; @@ -1767,11 +1746,11 @@ unsigned int Parameter::getSizeMat(int level) //{ // return parH[level]->mem_size_real_yz; //} -int Parameter::getFine() +int Parameter::getFine() const { return fine; } -int Parameter::getCoarse() +int Parameter::getCoarse() const { return coarse; } @@ -1799,10 +1778,6 @@ bool Parameter::getCompOn() { return compOn; } -int Parameter::getDiffMod() -{ - return diffMod; -} int Parameter::getFactorNZ() { return factor_gridNZ; @@ -2379,11 +2354,7 @@ bool Parameter::getUseMeasurePoints() { return this->isMeasurePoints; } -bool Parameter::getUseWale() -{ - return this->isWale; -} -TurbulenceModel Parameter::getTurbulenceModel() +vf::lbm::TurbulenceModel Parameter::getTurbulenceModel() { return this->turbulenceModel; } @@ -2411,10 +2382,6 @@ bool Parameter::getUseInitNeq() { return this->isInitNeq; } -bool Parameter::getSimulatePorousMedia() -{ - return this->simulatePorousMedia; -} bool Parameter::getIsF3() { diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h b/src/gpu/core/Parameter/Parameter.h similarity index 98% rename from src/gpu/VirtualFluids_GPU/Parameter/Parameter.h rename to src/gpu/core/Parameter/Parameter.h index 739b07cbaca6ce8aedb1c030d179f192fe15e228..d2c3fa9cc28050a28e54f0686efe81effce24f75 100644 --- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h +++ b/src/gpu/core/Parameter/Parameter.h @@ -43,9 +43,11 @@ #include "LBM/LB.h" #include "PreCollisionInteractor/PreCollisionInteractor.h" #include "TurbulenceModels/TurbulenceModelFactory.h" -#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h" +#include "gpu/core/Kernel/KernelTypes.h" + +#include <lbm/collision/TurbulentViscosity.h> + -#include "VirtualFluids_GPU_export.h" struct curandStateXORWOW; using curandState = struct curandStateXORWOW; @@ -321,7 +323,6 @@ struct LBMSimulationParameter { // turbulent viscosity /// real *turbViscosity; - real *gSij, *gSDij, *gDxvx, *gDyvx, *gDzvx, *gDxvy, *gDyvy, *gDzvy, *gDxvz, *gDyvz, *gDzvz; // DebugInformation // turbulence intensity // real *vx_mean, *vy_mean, *vz_mean; // means @@ -445,14 +446,14 @@ struct LBMSimulationParameter { // testRoundoffError Distributions27 kDistTestRE; - + real gridSpacing; ////////////////////////////////////////////////////////////////////////// }; //! \brief Class for LBM-parameter management -class VIRTUALFLUIDS_GPU_EXPORT Parameter +class Parameter { public: Parameter(); @@ -468,6 +469,9 @@ public: //! \brief Pointer to instance of LBMSimulationParameter - stored on Device (GPU) std::shared_ptr<LBMSimulationParameter> getParD(int level); + LBMSimulationParameter& getParHostAsReference(int level) const; + LBMSimulationParameter& getParDeviceAsReference(int level) const; + const std::vector<std::shared_ptr<LBMSimulationParameter>>& getParHallLevels(); const std::vector<std::shared_ptr<LBMSimulationParameter>>& getParDallLevels(); @@ -481,11 +485,9 @@ public: void setAngularVelocity(real inAngVel); void setStepEnsight(unsigned int step); void setOutputCount(unsigned int outputCount); - void setlimitOfNodesForVTK(unsigned int limitOfNodesForVTK); void setStartTurn(unsigned int inStartTurn); void setDiffOn(bool isDiff); void setCompOn(bool isComp); - void setDiffMod(int DiffMod); void setDiffusivity(real Diffusivity); void setD3Qxx(int d3qxx); void setMaxLevel(int numberOfLevels); @@ -601,13 +603,11 @@ public: void setIsCp(bool isCp); void setConcFile(bool concFile); void setUseMeasurePoints(bool useMeasurePoints); - void setUseWale(bool useWale); - void setTurbulenceModel(TurbulenceModel turbulenceModel); + void setTurbulenceModel(vf::lbm::TurbulenceModel turbulenceModel); void setUseTurbulentViscosity(bool useTurbulentViscosity); void setSGSConstant(real SGSConstant); void setHasWallModelMonitor(bool hasWallModelMonitor); void setUseInitNeq(bool useInitNeq); - void setSimulatePorousMedia(bool simulatePorousMedia); void setIsF3(bool isF3); void setIsBodyForce(bool isBodyForce); void setclockCycleForMP(real clockCycleForMP); @@ -701,7 +701,6 @@ public: real getEndXHotWall(); unsigned int getStepEnsight(); unsigned int getOutputCount(); - unsigned int getLimitOfNodesForVTK(); unsigned int getStartTurn(); bool getEvenOrOdd(int level); bool getDiffOn(); @@ -716,13 +715,12 @@ public: bool getWriteVeloASCIIfiles(); bool getCalcPlaneConc(); //! \returns index of finest level - int getFine(); + int getFine() const; //! \returns index of coarsest level - int getCoarse(); + int getCoarse() const; int getParticleBasicLevel(); int getParticleInitLevel(); int getNumberOfParticles(); - int getDiffMod(); int getFactorNZ(); int getD3Qxx(); //! \returns the maximum level of grid refinement @@ -895,13 +893,11 @@ public: bool getCalcHighOrderMoments(); bool getConcFile(); bool getUseMeasurePoints(); - bool getUseWale(); - TurbulenceModel getTurbulenceModel(); + vf::lbm::TurbulenceModel getTurbulenceModel(); bool getUseTurbulentViscosity(); real getSGSConstant(); bool getHasWallModelMonitor(); bool getUseInitNeq(); - bool getSimulatePorousMedia(); bool getIsF3(); bool getIsBodyForce(); double getMemsizeGPU(); @@ -1015,15 +1011,12 @@ private: bool isHighOrderMoments{ false }; bool calcMedian{ false }; bool isConc{ false }; - bool isWale{ false }; bool isTurbulentViscosity{ false }; bool isMeasurePoints{ false }; bool isInitNeq{ false }; bool isGeoNormal, isInflowNormal, isOutflowNormal; bool hasWallModelMonitor{ false }; - bool simulatePorousMedia{ false }; - int diffMod{ 27 }; //! \property maximum level of grid refinement int maxlevel{ 0 }; int coarse{ 0 }; @@ -1035,8 +1028,7 @@ private: int maxdev{ 1 }; double memsizeGPU; - - uint limitOfNodesForVTK; + uint outputCount; uint timestep; uint tDoCheckPoint{ 0 }; @@ -1082,11 +1074,11 @@ private: std::string concentration; std::string geomNormalX, geomNormalY, geomNormalZ, inflowNormalX, inflowNormalY, inflowNormalZ, outflowNormalX, outflowNormalY, outflowNormalZ; - TurbulenceModel turbulenceModel{ TurbulenceModel::None }; + vf::lbm::TurbulenceModel turbulenceModel{ vf::lbm::TurbulenceModel::None }; // Kernel - std::string mainKernel{ vf::CollisionKernel::Compressible::K17CompressibleNavierStokes }; + std::string mainKernel{ vf::collisionKernel::compressible::K17CompressibleNavierStokes }; bool multiKernelOn{ false }; std::vector<int> multiKernelLevel; std::vector<std::string> multiKernel; diff --git a/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp b/src/gpu/core/Parameter/ParameterTest.cpp similarity index 97% rename from src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp rename to src/gpu/core/Parameter/ParameterTest.cpp index 2eee0f7f2e88ee3315e6c80fe6e7827141979a80..6210c510b84bcbe0c90987a2e463eafa94eb4311 100644 --- a/src/gpu/VirtualFluids_GPU/Parameter/ParameterTest.cpp +++ b/src/gpu/core/Parameter/ParameterTest.cpp @@ -6,7 +6,7 @@ #include "LBM/Simulation.h" #include "Parameter.h" -#include "PointerDefinitions.h" +#include <basics/PointerDefinitions.h> #include "basics/config/ConfigurationFile.h" #include "DataStructureInitializer/GridReaderGenerator/GridGenerator.h" @@ -14,7 +14,7 @@ #include "Factories/GridScalingFactory.h" #include "GPU/CudaMemoryManager.h" #include "gpu/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h" -#include "VirtualFluids_GPU/Kernel/Utilities/KernelTypes.h" +#include "gpu/core/Kernel/KernelTypes.h" #include <parallel/Communicator.h> @@ -65,9 +65,7 @@ TEST(ParameterTest, check_all_Parameter_CanBePassedToConstructor) EXPECT_THAT(para.getCalcPlaneConc(), testing::Eq(true)); EXPECT_THAT(para.getConcFile(), testing::Eq(true)); EXPECT_THAT(para.getUseMeasurePoints(), testing::Eq(true)); - EXPECT_THAT(para.getUseWale(), testing::Eq(true)); EXPECT_THAT(para.getUseInitNeq(), testing::Eq(true)); - EXPECT_THAT(para.getSimulatePorousMedia(), testing::Eq(true)); EXPECT_THAT(para.getD3Qxx(), testing::Eq(99)); EXPECT_THAT(para.getTimestepEnd(), testing::Eq(33)); @@ -81,7 +79,6 @@ TEST(ParameterTest, check_all_Parameter_CanBePassedToConstructor) EXPECT_THAT(para.getPressOutZ(), testing::Eq(28)); EXPECT_THAT(para.getDiffOn(), testing::Eq(true)); - EXPECT_THAT(para.getDiffMod(), testing::Eq(99)); EXPECT_THAT(para.getDiffusivity(), RealEq(1.11)); EXPECT_THAT(para.getTemperatureInit(), RealEq(2.22)); EXPECT_THAT(para.getTemperatureBC(), RealEq(3.33)); @@ -272,7 +269,7 @@ TEST_F(ParameterTestCumulantK17, CumulantK17_VelocityIsTooHigh_expectWarning) { para.setVelocityLB(0.11); - para.configureMainKernel(vf::CollisionKernel::Compressible::K17CompressibleNavierStokes); + para.configureMainKernel(vf::collisionKernel::compressible::K17CompressibleNavierStokes); testing::internal::CaptureStdout(); para.initLBMSimulationParameter(); diff --git a/src/gpu/VirtualFluids_GPU/Parameter/parameterTest.cfg b/src/gpu/core/Parameter/parameterTest.cfg similarity index 99% rename from src/gpu/VirtualFluids_GPU/Parameter/parameterTest.cfg rename to src/gpu/core/Parameter/parameterTest.cfg index 097c6e6ccbec37c0f30de45ba444f33ff756cbdb..6277f4f4cd22cf9f5428b0fb13851957eee04399 100644 --- a/src/gpu/VirtualFluids_GPU/Parameter/parameterTest.cfg +++ b/src/gpu/core/Parameter/parameterTest.cfg @@ -18,7 +18,6 @@ writeVeloASCIIfiles = true calcPlaneConc = true UseConcFile = true UseMeasurePoints = true -UseWale = true UseInitNeq = true SimulatePorousMedia = true diff --git a/src/gpu/VirtualFluids_GPU/Parameter/parameterTest_emptyfile.cfg b/src/gpu/core/Parameter/parameterTest_emptyfile.cfg similarity index 100% rename from src/gpu/VirtualFluids_GPU/Parameter/parameterTest_emptyfile.cfg rename to src/gpu/core/Parameter/parameterTest_emptyfile.cfg diff --git a/src/gpu/VirtualFluids_GPU/Particles/Particles.cpp b/src/gpu/core/Particles/Particles.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Particles/Particles.cpp rename to src/gpu/core/Particles/Particles.cpp diff --git a/src/gpu/VirtualFluids_GPU/Particles/Particles.h b/src/gpu/core/Particles/Particles.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Particles/Particles.h rename to src/gpu/core/Particles/Particles.h diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.cu b/src/gpu/core/PreCollisionInteractor/ActuatorFarm.cu similarity index 99% rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.cu rename to src/gpu/core/PreCollisionInteractor/ActuatorFarm.cu index c09e58d9dd664e7b513131ffa1bdb548eb35a244..fac6b3cb70c8bb2694f89e886b9192dfeed86782 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.cu +++ b/src/gpu/core/PreCollisionInteractor/ActuatorFarm.cu @@ -42,7 +42,7 @@ #include <basics/constants/NumericConstants.h> #include <basics/writer/WbWriterVtkXmlBinary.h> -#include "VirtualFluids_GPU/GPU/GeometryUtils.h" +#include "gpu/core/GPU/GeometryUtils.h" #include "LBM/GPUHelperFunctions/KernelUtilities.h" #include "Parameter/Parameter.h" #include "Parameter/CudaStreamManager.h" diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h b/src/gpu/core/PreCollisionInteractor/ActuatorFarm.h similarity index 99% rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h rename to src/gpu/core/PreCollisionInteractor/ActuatorFarm.h index c71bb9407e686ce14a957d120f233958359f243d..74f23f3e6a4dc9e3e798ca13aa3632171d0e3bd0 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarm.h +++ b/src/gpu/core/PreCollisionInteractor/ActuatorFarm.h @@ -2,7 +2,7 @@ #define ActuatorFarm_H #include "PreCollisionInteractor.h" -#include "PointerDefinitions.h" +#include <basics/PointerDefinitions.h> #include "basics/constants/NumericConstants.h" #include <stdexcept> diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarmInlines.h b/src/gpu/core/PreCollisionInteractor/ActuatorFarmInlines.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarmInlines.h rename to src/gpu/core/PreCollisionInteractor/ActuatorFarmInlines.h diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarmInlinesTest.cpp b/src/gpu/core/PreCollisionInteractor/ActuatorFarmInlinesTest.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/ActuatorFarmInlinesTest.cpp rename to src/gpu/core/PreCollisionInteractor/ActuatorFarmInlinesTest.cpp diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h b/src/gpu/core/PreCollisionInteractor/PreCollisionInteractor.h similarity index 83% rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h rename to src/gpu/core/PreCollisionInteractor/PreCollisionInteractor.h index 90c434bd60e623175d5c8bfbbf23fa41f01e8a37..65149ed8b52404cb54a5cfba29120ca56fd7bf50 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PreCollisionInteractor.h +++ b/src/gpu/core/PreCollisionInteractor/PreCollisionInteractor.h @@ -4,9 +4,9 @@ #include <string> #include <vector> -#include "DataTypes.h" -#include "PointerDefinitions.h" -#include "VirtualFluids_GPU_export.h" +#include <basics/DataTypes.h> +#include <basics/PointerDefinitions.h> + #include <cassert> @@ -14,7 +14,7 @@ class Parameter; class GridProvider; class CudaMemoryManager; -class VIRTUALFLUIDS_GPU_EXPORT PreCollisionInteractor +class PreCollisionInteractor { protected: diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PrecursorWriter.cu b/src/gpu/core/PreCollisionInteractor/PrecursorWriter.cu similarity index 97% rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PrecursorWriter.cu rename to src/gpu/core/PreCollisionInteractor/PrecursorWriter.cu index ca1ed594829682ad94b98a59349e082bf3b315a4..d1099b8d42ec14f2a4001b18f7b9fceecf660704 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PrecursorWriter.cu +++ b/src/gpu/core/PreCollisionInteractor/PrecursorWriter.cu @@ -44,6 +44,7 @@ #include "Parameter/Parameter.h" #include "DataStructureInitializer/GridProvider.h" #include "GPU/CudaMemoryManager.h" +#include "Output/FilePartCalculator.h" using namespace vf::lbm::dir; using namespace vf::gpu; @@ -129,15 +130,15 @@ __global__ void fillArrayDistributions( uint numberOfPrecursorNodes, //////////////////////////////////////////////////////////////////////////////////// //! - Get local distributions in PX directions //! - precursorData[linearIdx(PrecP00, nodeIndex, numberOfPrecursorNodes)] = (dist.f[DIR_P00])[k_000]; - precursorData[linearIdx(PrecPP0, nodeIndex, numberOfPrecursorNodes)] = (dist.f[DIR_PP0])[k_000]; - precursorData[linearIdx(PrecPM0, nodeIndex, numberOfPrecursorNodes)] = (dist.f[DIR_PM0])[k_0M0]; - precursorData[linearIdx(PrecP0P, nodeIndex, numberOfPrecursorNodes)] = (dist.f[DIR_P0P])[k_000]; - precursorData[linearIdx(PrecP0M, nodeIndex, numberOfPrecursorNodes)] = (dist.f[DIR_P0M])[k_00M]; - precursorData[linearIdx(PrecPPP, nodeIndex, numberOfPrecursorNodes)] = (dist.f[DIR_PPP])[k_000]; - precursorData[linearIdx(PrecPMP, nodeIndex, numberOfPrecursorNodes)] = (dist.f[DIR_PMP])[k_0M0]; - precursorData[linearIdx(PrecPPM, nodeIndex, numberOfPrecursorNodes)] = (dist.f[DIR_PPM])[k_00M]; - precursorData[linearIdx(PrecPMM, nodeIndex, numberOfPrecursorNodes)] = (dist.f[DIR_PMM])[k_0MM]; + precursorData[linearIdx(PrecP00, nodeIndex, numberOfPrecursorNodes)] = (dist.f[dP00])[k_000]; + precursorData[linearIdx(PrecPP0, nodeIndex, numberOfPrecursorNodes)] = (dist.f[dPP0])[k_000]; + precursorData[linearIdx(PrecPM0, nodeIndex, numberOfPrecursorNodes)] = (dist.f[dPM0])[k_0M0]; + precursorData[linearIdx(PrecP0P, nodeIndex, numberOfPrecursorNodes)] = (dist.f[dP0P])[k_000]; + precursorData[linearIdx(PrecP0M, nodeIndex, numberOfPrecursorNodes)] = (dist.f[dP0M])[k_00M]; + precursorData[linearIdx(PrecPPP, nodeIndex, numberOfPrecursorNodes)] = (dist.f[dPPP])[k_000]; + precursorData[linearIdx(PrecPMP, nodeIndex, numberOfPrecursorNodes)] = (dist.f[dPMP])[k_0M0]; + precursorData[linearIdx(PrecPPM, nodeIndex, numberOfPrecursorNodes)] = (dist.f[dPPM])[k_00M]; + precursorData[linearIdx(PrecPMM, nodeIndex, numberOfPrecursorNodes)] = (dist.f[dPMM])[k_0MM]; } @@ -208,7 +209,7 @@ void PrecursorWriter::init(Parameter* para, GridProvider* gridProvider, CudaMemo precursorStructs[level]->origin = makeUbTuple(lowestY, lowestZ); precursorStructs[level]->extent = makeUbTuple(0, ny-1, 0, nz-1); precursorStructs[level]->numberOfPointsInData = ny*nz; - precursorStructs[level]->numberOfTimestepsPerFile = min(para->getLimitOfNodesForVTK()/(ny*nz), maxtimestepsPerFile); + precursorStructs[level]->numberOfTimestepsPerFile = min(FilePartCalculator::limitOfNodesForVTK/(ny*nz), maxtimestepsPerFile); precursorStructs[level]->numberOfFilesWritten = 0; precursorStructs[level]->numberOfTimestepsBuffered = 0; diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PrecursorWriter.h b/src/gpu/core/PreCollisionInteractor/PrecursorWriter.h similarity index 99% rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PrecursorWriter.h rename to src/gpu/core/PreCollisionInteractor/PrecursorWriter.h index 264023b58ba6db46b50f6a85b334c530864a0b8f..1419aec6d9a4303ea211a49c83842c209ceaa3b1 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/PrecursorWriter.h +++ b/src/gpu/core/PreCollisionInteractor/PrecursorWriter.h @@ -45,7 +45,7 @@ #include <string> #include <vector> #include <future> -#include "PointerDefinitions.h" +#include <basics/PointerDefinitions.h> #include "Logger.h" class Parameter; diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlanarAverageProbe.cu b/src/gpu/core/PreCollisionInteractor/Probes/PlanarAverageProbe.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlanarAverageProbe.cu rename to src/gpu/core/PreCollisionInteractor/Probes/PlanarAverageProbe.cu diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlanarAverageProbe.h b/src/gpu/core/PreCollisionInteractor/Probes/PlanarAverageProbe.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlanarAverageProbe.h rename to src/gpu/core/PreCollisionInteractor/Probes/PlanarAverageProbe.h diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.cu b/src/gpu/core/PreCollisionInteractor/Probes/PlaneProbe.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.cu rename to src/gpu/core/PreCollisionInteractor/Probes/PlaneProbe.cu diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.h b/src/gpu/core/PreCollisionInteractor/Probes/PlaneProbe.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PlaneProbe.h rename to src/gpu/core/PreCollisionInteractor/Probes/PlaneProbe.h diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.cu b/src/gpu/core/PreCollisionInteractor/Probes/PointProbe.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.cu rename to src/gpu/core/PreCollisionInteractor/Probes/PointProbe.cu diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.h b/src/gpu/core/PreCollisionInteractor/Probes/PointProbe.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/PointProbe.h rename to src/gpu/core/PreCollisionInteractor/Probes/PointProbe.h diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu b/src/gpu/core/PreCollisionInteractor/Probes/Probe.cu similarity index 97% rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu rename to src/gpu/core/PreCollisionInteractor/Probes/Probe.cu index 2be8743bb28e45234533cb63673a9aebd6b0cf10..0bed2fff2e9861950a502cc7cc5017ee63ad4f36 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.cu +++ b/src/gpu/core/PreCollisionInteractor/Probes/Probe.cu @@ -36,7 +36,7 @@ #include <cuda_runtime.h> #include <helper_cuda.h> -#include "VirtualFluids_GPU/GPU/GeometryUtils.h" +#include "gpu/core/GPU/GeometryUtils.h" #include <basics/constants/NumericConstants.h> #include "basics/writer/WbWriterVtkXmlBinary.h" #include <StringUtilities/StringUtil.h> @@ -44,6 +44,7 @@ #include "Parameter/Parameter.h" #include "DataStructureInitializer/GridProvider.h" #include "GPU/CudaMemoryManager.h" +#include "Output/FilePartCalculator.h" using namespace vf::basics::constant; @@ -418,7 +419,7 @@ void Probe::write(Parameter* para, int level, int t) { int t_write = this->fileNameLU ? t: t/this->tOut; - const uint numberOfParts = this->getProbeStruct(level)->nPoints / para->getLimitOfNodesForVTK() + 1; + const uint numberOfParts = this->getProbeStruct(level)->nPoints / FilePartCalculator::limitOfNodesForVTK + 1; std::vector<std::string> fnames; for (uint i = 1; i <= numberOfParts; i++) @@ -432,7 +433,7 @@ void Probe::write(Parameter* para, int level, int t) void Probe::writeParallelFile(Parameter* para, int t) { int t_write = this->fileNameLU ? t: t/this->tOut; - std::string filename = this->outputPath + "/" + this->makeParallelFileName(para->getMyProcessID(), t_write); + std::string filename = this->outputPath + this->makeParallelFileName(para->getMyProcessID(), t_write); std::vector<std::string> nodedatanames = this->getVarNames(); std::vector<std::string> cellNames; @@ -444,7 +445,7 @@ void Probe::writeParallelFile(Parameter* para, int t) void Probe::writeGridFile(Parameter* para, int level, int t, uint part) { - std::string fname = this->outputPath + "/" + this->makeGridFileName(level, para->getMyProcessID(), t, part); + std::string fname = this->outputPath + this->makeGridFileName(level, para->getMyProcessID(), t, part); std::vector< UbTupleFloat3 > nodes; std::vector< std::string > nodedatanames = this->getVarNames(); @@ -453,8 +454,8 @@ void Probe::writeGridFile(Parameter* para, int level, int t, uint part) SPtr<ProbeStruct> probeStruct = this->getProbeStruct(level); - uint startpos = (part-1) * para->getLimitOfNodesForVTK(); - uint sizeOfNodes = min(para->getLimitOfNodesForVTK(), probeStruct->nPoints - startpos); + uint startpos = (part-1) * FilePartCalculator::limitOfNodesForVTK; + uint sizeOfNodes = min(FilePartCalculator::limitOfNodesForVTK, probeStruct->nPoints - startpos); uint endpos = startpos + sizeOfNodes; ////////////////////////////////////////////////////////////////////////// @@ -513,10 +514,10 @@ t0 point1.quant1 point2.quant1 ... point1.quant2 point2.quant2 ... t1 point1.quant1 point2.quant1 ... point1.quant2 point2.quant2 ... */ auto probeStruct = this->getProbeStruct(level); - std::string fname = this->outputPath + "/" + this->makeTimeseriesFileName(level, para->getMyProcessID()); + std::string fname = this->outputPath + this->makeTimeseriesFileName(level, para->getMyProcessID()); std::ofstream out(fname.c_str(), std::ios::out | std::ios::binary); - if(!out.is_open()) throw std::runtime_error("Could not open timeseries file!"); + if(!out.is_open()) throw std::runtime_error("Could not open timeseries file " + fname + "!"); out << "TimeseriesOutput \n"; out << "Quantities: "; diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h b/src/gpu/core/PreCollisionInteractor/Probes/Probe.h similarity index 98% rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h rename to src/gpu/core/PreCollisionInteractor/Probes/Probe.h index c4ec985beb2b5aa4313ac0a92866a75351f630fa..4836a1102cd16df7ea373a36f8d67384c0392d5f 100644 --- a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/Probe.h +++ b/src/gpu/core/PreCollisionInteractor/Probes/Probe.h @@ -48,7 +48,7 @@ #include <cuda.h> #include "PreCollisionInteractor/PreCollisionInteractor.h" -#include "PointerDefinitions.h" +#include <basics/PointerDefinitions.h> #include "WbWriterVtkXmlBinary.h" //======================================================================================= @@ -149,19 +149,19 @@ public: const bool _hasDeviceQuantityArray, const bool _outputTimeSeries ): probeName(_probeName), - outputPath(_outputPath), + outputPath(_outputPath + (_outputPath.back() == '/' ? "" : "/")), tStartAvg(_tStartAvg), tStartTmpAveraging(_tStartTmpAvg), tAvg(_tAvg), tStartOut(_tStartOut), tOut(_tOut), hasDeviceQuantityArray(_hasDeviceQuantityArray), - outputTimeSeries(_outputTimeSeries), + outputTimeSeries(_outputTimeSeries), PreCollisionInteractor() { if (tStartOut < tStartAvg) throw std::runtime_error("Probe: tStartOut must be larger than tStartAvg!"); } - + void init(Parameter* para, GridProvider* gridProvider, CudaMemoryManager* cudaMemoryManager) override; void interact(Parameter* para, CudaMemoryManager* cudaMemoryManager, int level, uint t) override; void free(Parameter* para, CudaMemoryManager* cudaMemoryManager) override; diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.cu b/src/gpu/core/PreCollisionInteractor/Probes/WallModelProbe.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.cu rename to src/gpu/core/PreCollisionInteractor/Probes/WallModelProbe.cu diff --git a/src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.h b/src/gpu/core/PreCollisionInteractor/Probes/WallModelProbe.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreCollisionInteractor/Probes/WallModelProbe.h rename to src/gpu/core/PreCollisionInteractor/Probes/WallModelProbe.h diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessor.h b/src/gpu/core/PreProcessor/PreProcessor.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessor.h rename to src/gpu/core/PreProcessor/PreProcessor.h diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactory.h b/src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactory.h similarity index 81% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactory.h rename to src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactory.h index 80413722b0266d19daae03eb3d0a539b95c62507..8a7c30b62b7a2efdb27f40f86a6430ccc8c76437 100644 --- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactory.h +++ b/src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactory.h @@ -6,12 +6,12 @@ #include <memory> #include <vector> -#include "VirtualFluids_GPU_export.h" + class PreProcessor; class Parameter; -class VIRTUALFLUIDS_GPU_EXPORT PreProcessorFactory +class PreProcessorFactory { public: virtual ~PreProcessorFactory() = default; diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.cpp b/src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.cpp rename to src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.cpp diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h b/src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h similarity index 83% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h rename to src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h index e61c8e442f0d90cc16fc4125402265787fc1ed38..43ab0ccbf38462f260e3518112b2a8fb5e398985 100644 --- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h +++ b/src/gpu/core/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h @@ -5,7 +5,7 @@ class PreProcessorStrategy; -class VIRTUALFLUIDS_GPU_EXPORT PreProcessorFactoryImp : public PreProcessorFactory +class PreProcessorFactoryImp : public PreProcessorFactory { public: std::shared_ptr<PreProcessor> makePreProcessor(std::vector<PreProcessorType> preProcessorTypes, std::shared_ptr<Parameter> para); diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorImp.cpp b/src/gpu/core/PreProcessor/PreProcessorImp.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorImp.cpp rename to src/gpu/core/PreProcessor/PreProcessorImp.cpp diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorImp.h b/src/gpu/core/PreProcessor/PreProcessorImp.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorImp.h rename to src/gpu/core/PreProcessor/PreProcessorImp.h diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27.cu rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27.cu diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27.h b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27.h rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27.h diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cu new file mode 100644 index 0000000000000000000000000000000000000000..69576864681d00d33451c68324fe86ae299713ac --- /dev/null +++ b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cu @@ -0,0 +1,200 @@ +#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 LB_Init_Comp_AD_27(unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned int* geoD, + real* Conc, + real* ux, + real* uy, + real* uz, + unsigned int size_Mat, + real* DD27, + bool EvenOrOdd) +{ + //////////////////////////////////////////////////////////////////////////////// + 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<size_Mat) + { + //////////////////////////////////////////////////////////////////////////////// + unsigned int BC; + BC = geoD[k]; + + if (BC != GEO_SOLID && BC != GEO_VOID) + { + Distributions27 D27; + if (EvenOrOdd == true) + { + D27.f[dP00] = &DD27[dP00 *size_Mat]; + D27.f[dM00] = &DD27[dM00 *size_Mat]; + D27.f[d0P0] = &DD27[d0P0 *size_Mat]; + D27.f[d0M0] = &DD27[d0M0 *size_Mat]; + D27.f[d00P] = &DD27[d00P *size_Mat]; + D27.f[d00M] = &DD27[d00M *size_Mat]; + D27.f[dPP0] = &DD27[dPP0 *size_Mat]; + D27.f[dMM0] = &DD27[dMM0 *size_Mat]; + D27.f[dPM0] = &DD27[dPM0 *size_Mat]; + D27.f[dMP0] = &DD27[dMP0 *size_Mat]; + D27.f[dP0P] = &DD27[dP0P *size_Mat]; + D27.f[dM0M] = &DD27[dM0M *size_Mat]; + D27.f[dP0M] = &DD27[dP0M *size_Mat]; + D27.f[dM0P] = &DD27[dM0P *size_Mat]; + D27.f[d0PP] = &DD27[d0PP *size_Mat]; + D27.f[d0MM] = &DD27[d0MM *size_Mat]; + D27.f[d0PM] = &DD27[d0PM *size_Mat]; + D27.f[d0MP] = &DD27[d0MP *size_Mat]; + D27.f[d000] = &DD27[d000*size_Mat]; + D27.f[dPPP] = &DD27[dPPP *size_Mat]; + D27.f[dMMP] = &DD27[dMMP *size_Mat]; + D27.f[dPMP] = &DD27[dPMP *size_Mat]; + D27.f[dMPP] = &DD27[dMPP *size_Mat]; + D27.f[dPPM] = &DD27[dPPM *size_Mat]; + D27.f[dMMM] = &DD27[dMMM *size_Mat]; + D27.f[dPMM]= &DD27[dPMM *size_Mat]; + D27.f[dMPM]= &DD27[dMPM *size_Mat]; + } + else + { + D27.f[dM00] = &DD27[dP00 *size_Mat]; + D27.f[dP00] = &DD27[dM00 *size_Mat]; + D27.f[d0M0] = &DD27[d0P0 *size_Mat]; + D27.f[d0P0] = &DD27[d0M0 *size_Mat]; + D27.f[d00M] = &DD27[d00P *size_Mat]; + D27.f[d00P] = &DD27[d00M *size_Mat]; + D27.f[dMM0] = &DD27[dPP0 *size_Mat]; + D27.f[dPP0] = &DD27[dMM0 *size_Mat]; + D27.f[dMP0] = &DD27[dPM0 *size_Mat]; + D27.f[dPM0] = &DD27[dMP0 *size_Mat]; + D27.f[dM0M] = &DD27[dP0P *size_Mat]; + D27.f[dP0P] = &DD27[dM0M *size_Mat]; + D27.f[dM0P] = &DD27[dP0M *size_Mat]; + D27.f[dP0M] = &DD27[dM0P *size_Mat]; + D27.f[d0MM] = &DD27[d0PP *size_Mat]; + D27.f[d0PP] = &DD27[d0MM *size_Mat]; + D27.f[d0MP] = &DD27[d0PM *size_Mat]; + D27.f[d0PM] = &DD27[d0MP *size_Mat]; + D27.f[d000] = &DD27[d000*size_Mat]; + D27.f[dMMM] = &DD27[dPPP *size_Mat]; + D27.f[dPPM] = &DD27[dMMP *size_Mat]; + D27.f[dMPM]= &DD27[dPMP *size_Mat]; + D27.f[dPMM]= &DD27[dMPP *size_Mat]; + D27.f[dMMP] = &DD27[dPPM *size_Mat]; + D27.f[dPPP] = &DD27[dMMM *size_Mat]; + D27.f[dMPP] = &DD27[dPMM *size_Mat]; + D27.f[dPMP] = &DD27[dMPM *size_Mat]; + } + ////////////////////////////////////////////////////////////////////////// + real ConcD = Conc[k]; + real vx1 = ux[k]; + real vx2 = uy[k]; + real vx3 = uz[k]; + //real lambdaD = -three + sqrt(three); + //real Diffusivity = c1o20; + //real Lam = -(c1o2+one/lambdaD); + //real nue_d = Lam/three; + //real ae = Diffusivity/nue_d - one; + //real ux_sq = vx1 * vx1; + //real uy_sq = vx2 * vx2; + //real uz_sq = vx3 * vx3; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //D3Q7 + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //index + //unsigned int kzero= k; + //unsigned int ke = k; + //unsigned int kw = neighborX[k]; + //unsigned int kn = k; + //unsigned int ks = neighborY[k]; + //unsigned int kt = k; + //unsigned int kb = neighborZ[k]; + ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //(D7.f[0])[kzero] = ConcD*(c1o3*(ae*(-three))-(ux_sq+uy_sq+uz_sq)); + //(D7.f[1])[ke ] = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)+vx1*c1o2); + //(D7.f[2])[kw ] = ConcD*(c1o6*(ae+one)+c1o2*(ux_sq)-vx1*c1o2); + //(D7.f[3])[kn ] = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)+vx2*c1o2); + //(D7.f[4])[ks ] = ConcD*(c1o6*(ae+one)+c1o2*(uy_sq)-vx2*c1o2); + //(D7.f[5])[kt ] = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)+vx3*c1o2); + //(D7.f[6])[kb ] = ConcD*(c1o6*(ae+one)+c1o2*(uz_sq)-vx3*c1o2); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //D3Q27 + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //index + unsigned int kzero = k; + unsigned int ke = k; + unsigned int kw = neighborX[k]; + unsigned int kn = k; + unsigned int ks = neighborY[k]; + unsigned int kt = k; + unsigned int kb = neighborZ[k]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = k; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = k; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = k; + 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 = k; + unsigned int kbsw = neighborZ[ksw]; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real cu_sq = c3o2*(vx1*vx1 + vx2*vx2 + vx3*vx3); + + (D27.f[d000])[kzero] = c8o27* ConcD*(c1o1 - cu_sq); + (D27.f[dP00])[ke] = c2o27* ConcD*(c1o1 + c3o1*(vx1)+c9o2*(vx1)*(vx1)-cu_sq); + (D27.f[dM00])[kw] = c2o27* ConcD*(c1o1 + c3o1*(-vx1) + c9o2*(-vx1)*(-vx1) - cu_sq); + (D27.f[d0P0])[kn] = c2o27* ConcD*(c1o1 + c3o1*(vx2)+c9o2*(vx2)*(vx2)-cu_sq); + (D27.f[d0M0])[ks] = c2o27* ConcD*(c1o1 + c3o1*(-vx2) + c9o2*(-vx2)*(-vx2) - cu_sq); + (D27.f[d00P])[kt] = c2o27* ConcD*(c1o1 + c3o1*(vx3)+c9o2*(vx3)*(vx3)-cu_sq); + (D27.f[d00M])[kb] = c2o27* ConcD*(c1o1 + c3o1*(-vx3) + c9o2*(-vx3)*(-vx3) - cu_sq); + (D27.f[dPP0])[kne] = c1o54* ConcD*(c1o1 + c3o1*(vx1 + vx2) + c9o2*(vx1 + vx2)*(vx1 + vx2) - cu_sq); + (D27.f[dMM0])[ksw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 - vx2) + c9o2*(-vx1 - vx2)*(-vx1 - vx2) - cu_sq); + (D27.f[dPM0])[kse] = c1o54* ConcD*(c1o1 + c3o1*(vx1 - vx2) + c9o2*(vx1 - vx2)*(vx1 - vx2) - cu_sq); + (D27.f[dMP0])[knw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 + vx2) + c9o2*(-vx1 + vx2)*(-vx1 + vx2) - cu_sq); + (D27.f[dP0P])[kte] = c1o54* ConcD*(c1o1 + c3o1*(vx1 + vx3) + c9o2*(vx1 + vx3)*(vx1 + vx3) - cu_sq); + (D27.f[dM0M])[kbw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 - vx3) + c9o2*(-vx1 - vx3)*(-vx1 - vx3) - cu_sq); + (D27.f[dP0M])[kbe] = c1o54* ConcD*(c1o1 + c3o1*(vx1 - vx3) + c9o2*(vx1 - vx3)*(vx1 - vx3) - cu_sq); + (D27.f[dM0P])[ktw] = c1o54* ConcD*(c1o1 + c3o1*(-vx1 + vx3) + c9o2*(-vx1 + vx3)*(-vx1 + vx3) - cu_sq); + (D27.f[d0PP])[ktn] = c1o54* ConcD*(c1o1 + c3o1*(vx2 + vx3) + c9o2*(vx2 + vx3)*(vx2 + vx3) - cu_sq); + (D27.f[d0MM])[kbs] = c1o54* ConcD*(c1o1 + c3o1*(-vx2 - vx3) + c9o2*(-vx2 - vx3)*(-vx2 - vx3) - cu_sq); + (D27.f[d0PM])[kbn] = c1o54* ConcD*(c1o1 + c3o1*(vx2 - vx3) + c9o2*(vx2 - vx3)*(vx2 - vx3) - cu_sq); + (D27.f[d0MP])[kts] = c1o54* ConcD*(c1o1 + c3o1*(-vx2 + vx3) + c9o2*(-vx2 + vx3)*(-vx2 + vx3) - cu_sq); + (D27.f[dPPP])[ktne] = c1o216*ConcD*(c1o1 + c3o1*(vx1 + vx2 + vx3) + c9o2*(vx1 + vx2 + vx3)*(vx1 + vx2 + vx3) - cu_sq); + (D27.f[dMMM])[kbsw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 - vx2 - vx3) + c9o2*(-vx1 - vx2 - vx3)*(-vx1 - vx2 - vx3) - cu_sq); + (D27.f[dPPM])[kbne] = c1o216*ConcD*(c1o1 + c3o1*(vx1 + vx2 - vx3) + c9o2*(vx1 + vx2 - vx3)*(vx1 + vx2 - vx3) - cu_sq); + (D27.f[dMMP])[ktsw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 - vx2 + vx3) + c9o2*(-vx1 - vx2 + vx3)*(-vx1 - vx2 + vx3) - cu_sq); + (D27.f[dPMP])[ktse] = c1o216*ConcD*(c1o1 + c3o1*(vx1 - vx2 + vx3) + c9o2*(vx1 - vx2 + vx3)*(vx1 - vx2 + vx3) - cu_sq); + (D27.f[dMPM])[kbnw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 + vx2 - vx3) + c9o2*(-vx1 + vx2 - vx3)*(-vx1 + vx2 - vx3) - cu_sq); + (D27.f[dPMM])[kbse] = c1o216*ConcD*(c1o1 + c3o1*(vx1 - vx2 - vx3) + c9o2*(vx1 - vx2 - vx3)*(vx1 - vx2 - vx3) - cu_sq); + (D27.f[dMPP])[ktnw] = c1o216*ConcD*(c1o1 + c3o1*(-vx1 + vx2 + vx3) + c9o2*(-vx1 + vx2 + vx3)*(-vx1 + vx2 + vx3) - cu_sq); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + } + } +} diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cuh b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cuh similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cuh rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD27/InitCompAD27_Device.cuh diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7.cu rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7.cu diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7.h b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7.h rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7.h diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cu rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cu diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cuh b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cuh similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cuh rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompAD7/InitCompAD7_Device.cuh diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27.cu rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27.cu diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27.h b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27.h rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27.h diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cu new file mode 100644 index 0000000000000000000000000000000000000000..92725eea736985443a8ba8caeeda002fa1ac7bdd --- /dev/null +++ b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cu @@ -0,0 +1,466 @@ +#include "LBM/LB.h" +#include "lbm/constants/D3Q27.h" +#include <basics/constants/NumericConstants.h> + +using namespace vf::basics::constant; +using namespace vf::lbm::dir; +#include "math.h" + +#include <stdio.h> + +__global__ void LB_Init_Comp_SP_27(unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned int* geoD, + real* rho, + real* ux, + real* uy, + real* uz, + unsigned int size_Mat, + real* DD, + bool EvenOrOdd) +{ + //////////////////////////////////////////////////////////////////////////////// + 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<size_Mat) + { + //////////////////////////////////////////////////////////////////////////////// + unsigned int BC; + BC = geoD[k]; + + if( BC != GEO_SOLID && BC != GEO_VOID) + { + Distributions27 D; + if (EvenOrOdd==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[dMMM ] = &DD[dPPP *size_Mat]; + D.f[dPPM ] = &DD[dMMP *size_Mat]; + D.f[dMPM ] = &DD[dPMP *size_Mat]; + D.f[dPMM ] = &DD[dMPP *size_Mat]; + D.f[dMMP ] = &DD[dPPM *size_Mat]; + D.f[dPPP ] = &DD[dMMM *size_Mat]; + D.f[dMPP ] = &DD[dPMM *size_Mat]; + D.f[dPMP ] = &DD[dMPM *size_Mat]; + } + ////////////////////////////////////////////////////////////////////////// + real drho = rho[k];//0.0f;// + real vx1 = ux[k]; //0.0f;// + real vx2 = uy[k]; //0.0f;// + real vx3 = uz[k]; //0.0f;// + ////////////////////////////////////////////////////////////////////////// + //index + ////////////////////////////////////////////////////////////////////////// + unsigned int kzero= k; + unsigned int ke = k; + unsigned int kw = neighborX[k]; + unsigned int kn = k; + unsigned int ks = neighborY[k]; + unsigned int kt = k; + unsigned int kb = neighborZ[k]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = k; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = k; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = k; + 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 = k; + unsigned int kbsw = neighborZ[ksw]; + ////////////////////////////////////////////////////////////////////////// + real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); + + (D.f[d000])[kzero] = c8o27* (drho-cu_sq*(c1o1+drho)); + (D.f[dP00 ])[ke ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq)); + (D.f[dM00 ])[kw ] = c2o27* (drho+ (c1o1+drho) * (c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq)); + (D.f[d0P0 ])[kn ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq)); + (D.f[d0M0 ])[ks ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq)); + (D.f[d00P ])[kt ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq)); + (D.f[d00M ])[kb ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq)); + (D.f[dPP0 ])[kne ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); + (D.f[dMM0 ])[ksw ] = c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); + (D.f[dPM0 ])[kse ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); + (D.f[dMP0 ])[knw ] = c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); + (D.f[dP0P ])[kte ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); + (D.f[dM0M ])[kbw ] = c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); + (D.f[dP0M ])[kbe ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); + (D.f[dM0P ])[ktw ] = c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); + (D.f[d0PP ])[ktn ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); + (D.f[d0MM ])[kbs ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); + (D.f[d0PM ])[kbn ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); + (D.f[d0MP ])[kts ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); + (D.f[dPPP ])[ktne ] = c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); + (D.f[dMMM ])[kbsw ] = c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); + (D.f[dPPM ])[kbne ] = c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); + (D.f[dMMP ])[ktsw ] = c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); + (D.f[dPMP ])[ktse ] = c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); + (D.f[dMPM ])[kbnw ] = c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); + (D.f[dPMM ])[kbse ] = c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); + (D.f[dMPP ])[ktnw ] = c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); + } + } +} + + + + + + + + + + +//////////////////////////////////////////////////////////////////////////////// +__global__ void LB_Init_Comp_Neq_SP_27( unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned int* neighborWSB, + unsigned int* geoD, + real* rho, + real* ux, + real* uy, + real* uz, + unsigned int size_Mat, + real* DD, + real omega, + bool EvenOrOdd) +{ + //////////////////////////////////////////////////////////////////////////////// + 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<size_Mat) + { + //////////////////////////////////////////////////////////////////////////////// + unsigned int BC; + BC = geoD[k]; + + if( BC != GEO_SOLID && BC != GEO_VOID) + { + Distributions27 D; + if (EvenOrOdd==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[dMMM ] = &DD[dPPP *size_Mat]; + D.f[dPPM ] = &DD[dMMP *size_Mat]; + D.f[dMPM ] = &DD[dPMP *size_Mat]; + D.f[dPMM ] = &DD[dMPP *size_Mat]; + D.f[dMMP ] = &DD[dPPM *size_Mat]; + D.f[dPPP ] = &DD[dMMM *size_Mat]; + D.f[dMPP ] = &DD[dPMM *size_Mat]; + D.f[dPMP ] = &DD[dMPM *size_Mat]; + } + ////////////////////////////////////////////////////////////////////////// + real drho = rho[k];//0.0f;// + real vx1 = ux[k]; //0.0f;// + real vx2 = uy[k]; //0.0f;// + real vx3 = uz[k]; //0.0f;// + ////////////////////////////////////////////////////////////////////////// + //index + ////////////////////////////////////////////////////////////////////////// + unsigned int kzero= k; + unsigned int ke = k; + unsigned int kw = neighborX[k]; + unsigned int kn = k; + unsigned int ks = neighborY[k]; + unsigned int kt = k; + unsigned int kb = neighborZ[k]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = k; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = k; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = k; + 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 = k; + unsigned int kbsw = neighborZ[ksw]; + ////////////////////////////////////////////////////////////////////////////// + //neighbor index + uint kPx = neighborX[k]; + uint kPy = neighborY[k]; + uint kPz = neighborZ[k]; + uint kMxyz = neighborWSB[k]; + uint kMx = neighborZ[neighborY[kMxyz]]; + uint kMy = neighborZ[neighborX[kMxyz]]; + uint kMz = neighborY[neighborX[kMxyz]]; + ////////////////////////////////////////////////////////////////////////// + //getVeloX// + real vx1NeighborPx = ux[kPx]; + real vx1NeighborMx = ux[kMx]; + real vx1NeighborPy = ux[kPy]; + real vx1NeighborMy = ux[kMy]; + real vx1NeighborPz = ux[kPz]; + real vx1NeighborMz = ux[kMz]; + //getVeloY// + real vx2NeighborPx = uy[kPx]; + real vx2NeighborMx = uy[kMx]; + real vx2NeighborPy = uy[kPy]; + real vx2NeighborMy = uy[kMy]; + real vx2NeighborPz = uy[kPz]; + real vx2NeighborMz = uy[kMz]; + //getVeloZ// + real vx3NeighborPx = uz[kPx]; + real vx3NeighborMx = uz[kMx]; + real vx3NeighborPy = uz[kPy]; + real vx3NeighborMy = uz[kMy]; + real vx3NeighborPz = uz[kPz]; + real vx3NeighborMz = uz[kMz]; + ////////////////////////////////////////////////////////////////////////// + + real dvx1dx = (vx1NeighborPx - vx1NeighborMx) / c2o1; + real dvx1dy = (vx1NeighborPy - vx1NeighborMy) / c2o1; + real dvx1dz = (vx1NeighborPz - vx1NeighborMz) / c2o1; + + real dvx2dx = (vx2NeighborPx - vx2NeighborMx) / c2o1; + real dvx2dy = (vx2NeighborPy - vx2NeighborMy) / c2o1; + real dvx2dz = (vx2NeighborPz - vx2NeighborMz) / c2o1; + + real dvx3dx = (vx3NeighborPx - vx3NeighborMx) / c2o1; + real dvx3dy = (vx3NeighborPy - vx3NeighborMy) / c2o1; + real dvx3dz = (vx3NeighborPz - vx3NeighborMz) / c2o1; + + ////////////////////////////////////////////////////////////////////////// + + // the following code is copy and pasted from VirtualFluidsVisitors/InitDistributionsBlockVisitor.cpp + // i.e. Konstantins code + + real ax = dvx1dx; + real ay = dvx1dy; + real az = dvx1dz; + + real bx = dvx2dx; + real by = dvx2dy; + real bz = dvx2dz; + + real cx = dvx3dx; + real cy = dvx3dy; + real cz = dvx3dz; + + real eps_new = c1o1; + real op = c1o1; + real o = omega; + + real f_E = eps_new *((5.*ax*o + 5.*by*o + 5.*cz*o - 8.*ax*op + 4.*by*op + 4.*cz*op)/(54.*o*op)); + + real f_N = f_E + eps_new *((2.*(ax - by))/(9.*o)); + real f_T = f_E + eps_new *((2.*(ax - cz))/(9.*o)); + real f_NE = eps_new *(-(5.*cz*o + 3.*(ay + bx)*op - 2.*cz*op + ax*(5.*o + op) + by*(5.*o + op))/(54.*o*op)); + real f_SE = f_NE + eps_new *(( ay + bx )/(9.*o)); + real f_TE = eps_new *(-(5.*cz*o + by*(5.*o - 2.*op) + 3.*(az + cx)*op + cz*op + ax*(5.*o + op))/(54.*o*op)); + real f_BE = f_TE + eps_new *(( az + cx )/(9.*o)); + real f_TN = eps_new *(-(5.*ax*o + 5.*by*o + 5.*cz*o - 2.*ax*op + by*op + 3.*bz*op + 3.*cy*op + cz*op)/(54.*o*op)); + real f_BN = f_TN + eps_new *(( bz + cy )/(9.*o)); + real f_ZERO = eps_new *((5.*(ax + by + cz))/(9.*op)); + real f_TNE = eps_new *(-(ay + az + bx + bz + cx + cy)/(72.*o)); + real f_TSW = - f_TNE - eps_new *((ay + bx)/(36.*o)); + real f_TSE = - f_TNE - eps_new *((az + cx)/(36.*o)); + real f_TNW = - f_TNE - eps_new *((bz + cy)/(36.*o)); + + ////////////////////////////////////////////////////////////////////////// + real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); + + (D.f[d000])[kzero] = c8o27* (drho-cu_sq*(c1o1+drho)); + (D.f[dP00 ])[ke ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq)); + (D.f[dM00 ])[kw ] = c2o27* (drho+ (c1o1+drho) * (c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq)); + (D.f[d0P0 ])[kn ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq)); + (D.f[d0M0 ])[ks ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq)); + (D.f[d00P ])[kt ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq)); + (D.f[d00M ])[kb ] = c2o27* (drho+ (c1o1+drho) * (c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq)); + (D.f[dPP0 ])[kne ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq)); + (D.f[dMM0 ])[ksw ] = c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq)); + (D.f[dPM0 ])[kse ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq)); + (D.f[dMP0 ])[knw ] = c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq)); + (D.f[dP0P ])[kte ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq)); + (D.f[dM0M ])[kbw ] = c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq)); + (D.f[dP0M ])[kbe ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq)); + (D.f[dM0P ])[ktw ] = c1o54* (drho+ (c1o1+drho) * (c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq)); + (D.f[d0PP ])[ktn ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq)); + (D.f[d0MM ])[kbs ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq)); + (D.f[d0PM ])[kbn ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq)); + (D.f[d0MP ])[kts ] = c1o54* (drho+ (c1o1+drho) * (c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq)); + (D.f[dPPP ])[ktne ] = c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq)); + (D.f[dMMM ])[kbsw ] = c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq)); + (D.f[dPPM ])[kbne ] = c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq)); + (D.f[dMMP ])[ktsw ] = c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq)); + (D.f[dPMP ])[ktse ] = c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq)); + (D.f[dMPM ])[kbnw ] = c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq)); + (D.f[dPMM ])[kbse ] = c1o216*(drho+ (c1o1+drho) * (c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq)); + (D.f[dMPP ])[ktnw ] = c1o216*(drho+ (c1o1+drho) * (c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq)); + + ////////////////////////////////////////////////////////////////////////// + + (D.f[d000])[kzero] += (c1o1+drho) * f_ZERO; + (D.f[dP00 ])[ke ] += (c1o1+drho) * f_E ; + (D.f[dM00 ])[kw ] += (c1o1+drho) * f_E ; + (D.f[d0P0 ])[kn ] += (c1o1+drho) * f_N ; + (D.f[d0M0 ])[ks ] += (c1o1+drho) * f_N ; + (D.f[d00P ])[kt ] += (c1o1+drho) * f_T ; + (D.f[d00M ])[kb ] += (c1o1+drho) * f_T ; + (D.f[dPP0 ])[kne ] += (c1o1+drho) * f_NE ; + (D.f[dMM0 ])[ksw ] += (c1o1+drho) * f_NE ; + (D.f[dPM0 ])[kse ] += (c1o1+drho) * f_SE ; + (D.f[dMP0 ])[knw ] += (c1o1+drho) * f_SE ; + (D.f[dP0P ])[kte ] += (c1o1+drho) * f_TE ; + (D.f[dM0M ])[kbw ] += (c1o1+drho) * f_TE ; + (D.f[dP0M ])[kbe ] += (c1o1+drho) * f_BE ; + (D.f[dM0P ])[ktw ] += (c1o1+drho) * f_BE ; + (D.f[d0PP ])[ktn ] += (c1o1+drho) * f_TN ; + (D.f[d0MM ])[kbs ] += (c1o1+drho) * f_TN ; + (D.f[d0PM ])[kbn ] += (c1o1+drho) * f_BN ; + (D.f[d0MP ])[kts ] += (c1o1+drho) * f_BN ; + (D.f[dPPP ])[ktne ] += (c1o1+drho) * f_TNE ; + (D.f[dMMM ])[kbsw ] += (c1o1+drho) * f_TNE ; + (D.f[dPPM ])[kbne ] += (c1o1+drho) * f_TSW ; + (D.f[dMMP ])[ktsw ] += (c1o1+drho) * f_TSW ; + (D.f[dPMP ])[ktse ] += (c1o1+drho) * f_TSE ; + (D.f[dMPM ])[kbnw ] += (c1o1+drho) * f_TSE ; + (D.f[dPMM ])[kbse ] += (c1o1+drho) * f_TNW ; + (D.f[dMPP ])[ktnw ] += (c1o1+drho) * f_TNW ; + + ////////////////////////////////////////////////////////////////////////// + } + else + { + ////////////////////////////////////////////////////////////////////////// + Distributions27 D; + D.f[d000] = &DD[d000*size_Mat]; + ////////////////////////////////////////////////////////////////////////// + (D.f[d000])[k] = c96o1; + ////////////////////////////////////////////////////////////////////////// + } + } +} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cuh b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cuh similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cuh rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitCompSP27/InitCompSP27_Device.cuh diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitF3/InitF3.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3.cu rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitF3/InitF3.cu diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3.h b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitF3/InitF3.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3.h rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitF3/InitF3.h diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cu similarity index 68% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cu rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cu index 349bfda9824483bf08d09f267d5fc4b0f6a13ac1..76e81ae844298a44df1dc55937e83b590d43d1d3 100644 --- a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cu +++ b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cu @@ -41,21 +41,21 @@ __global__ void LB_Init_F3(unsigned int* neighborX, Distributions6 D; if (EvenOrOdd == true) { - D.g[DIR_P00] = &G6[DIR_P00 *size_Mat]; - D.g[DIR_M00] = &G6[DIR_M00 *size_Mat]; - D.g[DIR_0P0] = &G6[DIR_0P0 *size_Mat]; - D.g[DIR_0M0] = &G6[DIR_0M0 *size_Mat]; - D.g[DIR_00P] = &G6[DIR_00P *size_Mat]; - D.g[DIR_00M] = &G6[DIR_00M *size_Mat]; + D.g[dP00] = &G6[dP00 *size_Mat]; + D.g[dM00] = &G6[dM00 *size_Mat]; + D.g[d0P0] = &G6[d0P0 *size_Mat]; + D.g[d0M0] = &G6[d0M0 *size_Mat]; + D.g[d00P] = &G6[d00P *size_Mat]; + D.g[d00M] = &G6[d00M *size_Mat]; } else { - D.g[DIR_M00] = &G6[DIR_P00 *size_Mat]; - D.g[DIR_P00] = &G6[DIR_M00 *size_Mat]; - D.g[DIR_0M0] = &G6[DIR_0P0 *size_Mat]; - D.g[DIR_0P0] = &G6[DIR_0M0 *size_Mat]; - D.g[DIR_00M] = &G6[DIR_00P *size_Mat]; - D.g[DIR_00P] = &G6[DIR_00M *size_Mat]; + D.g[dM00] = &G6[dP00 *size_Mat]; + D.g[dP00] = &G6[dM00 *size_Mat]; + D.g[d0M0] = &G6[d0P0 *size_Mat]; + D.g[d0P0] = &G6[d0M0 *size_Mat]; + D.g[d00M] = &G6[d00P *size_Mat]; + D.g[d00P] = &G6[d00M *size_Mat]; } ////////////////////////////////////////////////////////////////////////// //index @@ -69,12 +69,12 @@ __global__ void LB_Init_F3(unsigned int* neighborX, unsigned int kb = neighborZ[k]; ////////////////////////////////////////////////////////////////////////// - (D.g[DIR_P00])[ke] = 0.0f; - (D.g[DIR_M00])[kw] = 0.0f; - (D.g[DIR_0P0])[kn] = 0.0f; - (D.g[DIR_0M0])[ks] = 0.0f; - (D.g[DIR_00P])[kt] = 0.0f; - (D.g[DIR_00M])[kb] = 0.0f; + (D.g[dP00])[ke] = 0.0f; + (D.g[dM00])[kw] = 0.0f; + (D.g[d0P0])[kn] = 0.0f; + (D.g[d0M0])[ks] = 0.0f; + (D.g[d00P])[kt] = 0.0f; + (D.g[d00M])[kb] = 0.0f; } } } \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cuh b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cuh similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cuh rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitF3/InitF3_Device.cuh diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27.cu rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27.cu diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27.h b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27.h rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27.h diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cu new file mode 100644 index 0000000000000000000000000000000000000000..1b7a5cf350dd9ee2272856a910e8c780c5cfbd78 --- /dev/null +++ b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cu @@ -0,0 +1,173 @@ +#include "LBM/LB.h" +#include "lbm/constants/D3Q27.h" +#include <basics/constants/NumericConstants.h> + +using namespace vf::basics::constant; +using namespace vf::lbm::dir; +#include "math.h" + +__global__ void LB_Init_Incomp_AD_27(unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned int* geoD, + real* Conc, + real* ux, + real* uy, + real* uz, + unsigned int size_Mat, + real* DD27, + bool EvenOrOdd) +{ + //////////////////////////////////////////////////////////////////////////////// + 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<size_Mat) + { + //////////////////////////////////////////////////////////////////////////////// + unsigned int BC; + BC = geoD[k]; + + if( BC != GEO_SOLID && BC != GEO_VOID) + { + Distributions27 D27; + if (EvenOrOdd==true) + { + D27.f[dP00 ] = &DD27[dP00 *size_Mat]; + D27.f[dM00 ] = &DD27[dM00 *size_Mat]; + D27.f[d0P0 ] = &DD27[d0P0 *size_Mat]; + D27.f[d0M0 ] = &DD27[d0M0 *size_Mat]; + D27.f[d00P ] = &DD27[d00P *size_Mat]; + D27.f[d00M ] = &DD27[d00M *size_Mat]; + D27.f[dPP0 ] = &DD27[dPP0 *size_Mat]; + D27.f[dMM0 ] = &DD27[dMM0 *size_Mat]; + D27.f[dPM0 ] = &DD27[dPM0 *size_Mat]; + D27.f[dMP0 ] = &DD27[dMP0 *size_Mat]; + D27.f[dP0P ] = &DD27[dP0P *size_Mat]; + D27.f[dM0M ] = &DD27[dM0M *size_Mat]; + D27.f[dP0M ] = &DD27[dP0M *size_Mat]; + D27.f[dM0P ] = &DD27[dM0P *size_Mat]; + D27.f[d0PP ] = &DD27[d0PP *size_Mat]; + D27.f[d0MM ] = &DD27[d0MM *size_Mat]; + D27.f[d0PM ] = &DD27[d0PM *size_Mat]; + D27.f[d0MP ] = &DD27[d0MP *size_Mat]; + D27.f[d000] = &DD27[d000*size_Mat]; + D27.f[dPPP ] = &DD27[dPPP *size_Mat]; + D27.f[dMMP ] = &DD27[dMMP *size_Mat]; + D27.f[dPMP ] = &DD27[dPMP *size_Mat]; + D27.f[dMPP ] = &DD27[dMPP *size_Mat]; + D27.f[dPPM ] = &DD27[dPPM *size_Mat]; + D27.f[dMMM ] = &DD27[dMMM *size_Mat]; + D27.f[dPMM ] = &DD27[dPMM *size_Mat]; + D27.f[dMPM ] = &DD27[dMPM *size_Mat]; + } + else + { + D27.f[dM00 ] = &DD27[dP00 *size_Mat]; + D27.f[dP00 ] = &DD27[dM00 *size_Mat]; + D27.f[d0M0 ] = &DD27[d0P0 *size_Mat]; + D27.f[d0P0 ] = &DD27[d0M0 *size_Mat]; + D27.f[d00M ] = &DD27[d00P *size_Mat]; + D27.f[d00P ] = &DD27[d00M *size_Mat]; + D27.f[dMM0 ] = &DD27[dPP0 *size_Mat]; + D27.f[dPP0 ] = &DD27[dMM0 *size_Mat]; + D27.f[dMP0 ] = &DD27[dPM0 *size_Mat]; + D27.f[dPM0 ] = &DD27[dMP0 *size_Mat]; + D27.f[dM0M ] = &DD27[dP0P *size_Mat]; + D27.f[dP0P ] = &DD27[dM0M *size_Mat]; + D27.f[dM0P ] = &DD27[dP0M *size_Mat]; + D27.f[dP0M ] = &DD27[dM0P *size_Mat]; + D27.f[d0MM ] = &DD27[d0PP *size_Mat]; + D27.f[d0PP ] = &DD27[d0MM *size_Mat]; + D27.f[d0MP ] = &DD27[d0PM *size_Mat]; + D27.f[d0PM ] = &DD27[d0MP *size_Mat]; + D27.f[d000] = &DD27[d000*size_Mat]; + D27.f[dMMM ] = &DD27[dPPP *size_Mat]; + D27.f[dPPM ] = &DD27[dMMP *size_Mat]; + D27.f[dMPM ] = &DD27[dPMP *size_Mat]; + D27.f[dPMM ] = &DD27[dMPP *size_Mat]; + D27.f[dMMP ] = &DD27[dPPM *size_Mat]; + D27.f[dPPP ] = &DD27[dMMM *size_Mat]; + D27.f[dMPP ] = &DD27[dPMM *size_Mat]; + D27.f[dPMP ] = &DD27[dMPM *size_Mat]; + } + ////////////////////////////////////////////////////////////////////////// + real ConcD = Conc[k]; + real vx1 = ux[k]; + real vx2 = uy[k]; + real vx3 = uz[k]; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //D3Q27 + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //index + unsigned int kzero= k; + unsigned int ke = k; + unsigned int kw = neighborX[k]; + unsigned int kn = k; + unsigned int ks = neighborY[k]; + unsigned int kt = k; + unsigned int kb = neighborZ[k]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = k; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = k; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = k; + 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 = k; + unsigned int kbsw = neighborZ[ksw]; + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); + + (D27.f[d000])[kzero] = c8o27* ConcD*(c1o1-cu_sq); + (D27.f[dP00 ])[ke ] = c2o27* ConcD*(c1o1+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); + (D27.f[dM00 ])[kw ] = c2o27* ConcD*(c1o1+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); + (D27.f[d0P0 ])[kn ] = c2o27* ConcD*(c1o1+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); + (D27.f[d0M0 ])[ks ] = c2o27* ConcD*(c1o1+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); + (D27.f[d00P ])[kt ] = c2o27* ConcD*(c1o1+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); + (D27.f[d00M ])[kb ] = c2o27* ConcD*(c1o1+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); + (D27.f[dPP0 ])[kne ] = c1o54* ConcD*(c1o1+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); + (D27.f[dMM0 ])[ksw ] = c1o54* ConcD*(c1o1+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); + (D27.f[dPM0 ])[kse ] = c1o54* ConcD*(c1o1+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); + (D27.f[dMP0 ])[knw ] = c1o54* ConcD*(c1o1+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); + (D27.f[dP0P ])[kte ] = c1o54* ConcD*(c1o1+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); + (D27.f[dM0M ])[kbw ] = c1o54* ConcD*(c1o1+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); + (D27.f[dP0M ])[kbe ] = c1o54* ConcD*(c1o1+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); + (D27.f[dM0P ])[ktw ] = c1o54* ConcD*(c1o1+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); + (D27.f[d0PP ])[ktn ] = c1o54* ConcD*(c1o1+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); + (D27.f[d0MM ])[kbs ] = c1o54* ConcD*(c1o1+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); + (D27.f[d0PM ])[kbn ] = c1o54* ConcD*(c1o1+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); + (D27.f[d0MP ])[kts ] = c1o54* ConcD*(c1o1+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); + (D27.f[dPPP ])[ktne ] = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); + (D27.f[dMMM ])[kbsw ] = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); + (D27.f[dPPM ])[kbne ] = c1o216*ConcD*(c1o1+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); + (D27.f[dMMP ])[ktsw ] = c1o216*ConcD*(c1o1+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); + (D27.f[dPMP ])[ktse ] = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); + (D27.f[dMPM ])[kbnw ] = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); + (D27.f[dPMM ])[kbse ] = c1o216*ConcD*(c1o1+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); + (D27.f[dMPP ])[ktnw ] = c1o216*ConcD*(c1o1+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + } + } +} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cuh b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cuh similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cuh rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD27/InitIncompAD27_Device.cuh diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7.cu rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7.cu diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7.h b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7.h rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7.h diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cu rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cu diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cuh b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cuh similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cuh rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitIncompAD7/InitIncompAD7_Device.cuh diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27.cu similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27.cu rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27.cu diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27.h b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27.h rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27.h diff --git a/src/gpu/core/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cu b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cu new file mode 100644 index 0000000000000000000000000000000000000000..c050a9e69b9c902e05a549a89ae816dd392b177a --- /dev/null +++ b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cu @@ -0,0 +1,177 @@ +#include "LBM/LB.h" +#include "lbm/constants/D3Q27.h" +#include <basics/constants/NumericConstants.h> + +using namespace vf::basics::constant; +using namespace vf::lbm::dir; +#include "math.h" + +__global__ void LB_Init_SP_27(unsigned int* neighborX, + unsigned int* neighborY, + unsigned int* neighborZ, + unsigned int* geoD, + real* rho, + real* ux, + real* uy, + real* uz, + unsigned int size_Mat, + real* DD, + bool EvenOrOdd) +{ + //////////////////////////////////////////////////////////////////////////////// + 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<size_Mat) + { + //////////////////////////////////////////////////////////////////////////////// + unsigned int BC; + BC = geoD[k]; + + if( BC != GEO_SOLID && BC != GEO_VOID) + { + Distributions27 D; + if (EvenOrOdd==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[dMMM ] = &DD[dPPP *size_Mat]; + D.f[dPPM ] = &DD[dMMP *size_Mat]; + D.f[dMPM ] = &DD[dPMP *size_Mat]; + D.f[dPMM ] = &DD[dMPP *size_Mat]; + D.f[dMMP ] = &DD[dPPM *size_Mat]; + D.f[dPPP ] = &DD[dMMM *size_Mat]; + D.f[dMPP ] = &DD[dPMM *size_Mat]; + D.f[dPMP ] = &DD[dMPM *size_Mat]; + } + ////////////////////////////////////////////////////////////////////////// + real drho = rho[k];//0.0f;// + real vx1 = ux[k]; //0.0f;// + real vx2 = uy[k]; //0.0f;// + real vx3 = uz[k]; //0.0f;// + ////////////////////////////////////////////////////////////////////////// + //index + ////////////////////////////////////////////////////////////////////////// + unsigned int kzero= k; + unsigned int ke = k; + unsigned int kw = neighborX[k]; + unsigned int kn = k; + unsigned int ks = neighborY[k]; + unsigned int kt = k; + unsigned int kb = neighborZ[k]; + unsigned int ksw = neighborY[kw]; + unsigned int kne = k; + unsigned int kse = ks; + unsigned int knw = kw; + unsigned int kbw = neighborZ[kw]; + unsigned int kte = k; + unsigned int kbe = kb; + unsigned int ktw = kw; + unsigned int kbs = neighborZ[ks]; + unsigned int ktn = k; + 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 = k; + unsigned int kbsw = neighborZ[ksw]; + ////////////////////////////////////////////////////////////////////////// + real cu_sq=c3o2*(vx1*vx1+vx2*vx2+vx3*vx3); + + (D.f[d000])[kzero] = c8o27* (drho-cu_sq); + (D.f[dP00 ])[ke ] = c2o27* (drho+c3o1*( vx1 )+c9o2*( vx1 )*( vx1 )-cu_sq); + (D.f[dM00 ])[kw ] = c2o27* (drho+c3o1*(-vx1 )+c9o2*(-vx1 )*(-vx1 )-cu_sq); + (D.f[d0P0 ])[kn ] = c2o27* (drho+c3o1*( vx2 )+c9o2*( vx2 )*( vx2 )-cu_sq); + (D.f[d0M0 ])[ks ] = c2o27* (drho+c3o1*( -vx2 )+c9o2*( -vx2 )*( -vx2 )-cu_sq); + (D.f[d00P ])[kt ] = c2o27* (drho+c3o1*( vx3)+c9o2*( vx3)*( vx3)-cu_sq); + (D.f[d00M ])[kb ] = c2o27* (drho+c3o1*( -vx3)+c9o2*( -vx3)*( -vx3)-cu_sq); + (D.f[dPP0 ])[kne ] = c1o54* (drho+c3o1*( vx1+vx2 )+c9o2*( vx1+vx2 )*( vx1+vx2 )-cu_sq); + (D.f[dMM0 ])[ksw ] = c1o54* (drho+c3o1*(-vx1-vx2 )+c9o2*(-vx1-vx2 )*(-vx1-vx2 )-cu_sq); + (D.f[dPM0 ])[kse ] = c1o54* (drho+c3o1*( vx1-vx2 )+c9o2*( vx1-vx2 )*( vx1-vx2 )-cu_sq); + (D.f[dMP0 ])[knw ] = c1o54* (drho+c3o1*(-vx1+vx2 )+c9o2*(-vx1+vx2 )*(-vx1+vx2 )-cu_sq); + (D.f[dP0P ])[kte ] = c1o54* (drho+c3o1*( vx1 +vx3)+c9o2*( vx1 +vx3)*( vx1 +vx3)-cu_sq); + (D.f[dM0M ])[kbw ] = c1o54* (drho+c3o1*(-vx1 -vx3)+c9o2*(-vx1 -vx3)*(-vx1 -vx3)-cu_sq); + (D.f[dP0M ])[kbe ] = c1o54* (drho+c3o1*( vx1 -vx3)+c9o2*( vx1 -vx3)*( vx1 -vx3)-cu_sq); + (D.f[dM0P ])[ktw ] = c1o54* (drho+c3o1*(-vx1 +vx3)+c9o2*(-vx1 +vx3)*(-vx1 +vx3)-cu_sq); + (D.f[d0PP ])[ktn ] = c1o54* (drho+c3o1*( vx2+vx3)+c9o2*( vx2+vx3)*( vx2+vx3)-cu_sq); + (D.f[d0MM ])[kbs ] = c1o54* (drho+c3o1*( -vx2-vx3)+c9o2*( -vx2-vx3)*( -vx2-vx3)-cu_sq); + (D.f[d0PM ])[kbn ] = c1o54* (drho+c3o1*( vx2-vx3)+c9o2*( vx2-vx3)*( vx2-vx3)-cu_sq); + (D.f[d0MP ])[kts ] = c1o54* (drho+c3o1*( -vx2+vx3)+c9o2*( -vx2+vx3)*( -vx2+vx3)-cu_sq); + (D.f[dPPP ])[ktne ] = c1o216*(drho+c3o1*( vx1+vx2+vx3)+c9o2*( vx1+vx2+vx3)*( vx1+vx2+vx3)-cu_sq); + (D.f[dMMM ])[kbsw ] = c1o216*(drho+c3o1*(-vx1-vx2-vx3)+c9o2*(-vx1-vx2-vx3)*(-vx1-vx2-vx3)-cu_sq); + (D.f[dPPM ])[kbne ] = c1o216*(drho+c3o1*( vx1+vx2-vx3)+c9o2*( vx1+vx2-vx3)*( vx1+vx2-vx3)-cu_sq); + (D.f[dMMP ])[ktsw ] = c1o216*(drho+c3o1*(-vx1-vx2+vx3)+c9o2*(-vx1-vx2+vx3)*(-vx1-vx2+vx3)-cu_sq); + (D.f[dPMP ])[ktse ] = c1o216*(drho+c3o1*( vx1-vx2+vx3)+c9o2*( vx1-vx2+vx3)*( vx1-vx2+vx3)-cu_sq); + (D.f[dMPM ])[kbnw ] = c1o216*(drho+c3o1*(-vx1+vx2-vx3)+c9o2*(-vx1+vx2-vx3)*(-vx1+vx2-vx3)-cu_sq); + (D.f[dPMM ])[kbse ] = c1o216*(drho+c3o1*( vx1-vx2-vx3)+c9o2*( vx1-vx2-vx3)*( vx1-vx2-vx3)-cu_sq); + (D.f[dMPP ])[ktnw ] = c1o216*(drho+c3o1*(-vx1+vx2+vx3)+c9o2*(-vx1+vx2+vx3)*(-vx1+vx2+vx3)-cu_sq); + } + else + { + ////////////////////////////////////////////////////////////////////////// + Distributions27 D; + D.f[d000] = &DD[d000*size_Mat]; + ////////////////////////////////////////////////////////////////////////// + (D.f[d000])[k] = c96o1; + ////////////////////////////////////////////////////////////////////////// + } + } +} \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cuh b/src/gpu/core/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cuh similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cuh rename to src/gpu/core/PreProcessor/PreProcessorStrategy/InitSP27/InitSP27_Device.cuh diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/PreProcessorStrategy.h b/src/gpu/core/PreProcessor/PreProcessorStrategy/PreProcessorStrategy.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorStrategy/PreProcessorStrategy.h rename to src/gpu/core/PreProcessor/PreProcessorStrategy/PreProcessorStrategy.h diff --git a/src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorType.h b/src/gpu/core/PreProcessor/PreProcessorType.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/PreProcessor/PreProcessorType.h rename to src/gpu/core/PreProcessor/PreProcessorType.h diff --git a/src/gpu/VirtualFluids_GPU/Restart/RestartObject.cpp b/src/gpu/core/Restart/RestartObject.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Restart/RestartObject.cpp rename to src/gpu/core/Restart/RestartObject.cpp diff --git a/src/gpu/VirtualFluids_GPU/Restart/RestartObject.h b/src/gpu/core/Restart/RestartObject.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Restart/RestartObject.h rename to src/gpu/core/Restart/RestartObject.h diff --git a/src/gpu/VirtualFluids_GPU/Restart/RestartObjectTests.cpp b/src/gpu/core/Restart/RestartObjectTests.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Restart/RestartObjectTests.cpp rename to src/gpu/core/Restart/RestartObjectTests.cpp diff --git a/src/gpu/VirtualFluids_GPU/Temperature/FindQTemp.cpp b/src/gpu/core/Temperature/FindQTemp.cpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Temperature/FindQTemp.cpp rename to src/gpu/core/Temperature/FindQTemp.cpp diff --git a/src/gpu/VirtualFluids_GPU/Temperature/FindQTemp.h b/src/gpu/core/Temperature/FindQTemp.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Temperature/FindQTemp.h rename to src/gpu/core/Temperature/FindQTemp.h diff --git a/src/gpu/VirtualFluids_GPU/Temperature/FindTemperature.cpp b/src/gpu/core/Temperature/FindTemperature.cpp similarity index 63% rename from src/gpu/VirtualFluids_GPU/Temperature/FindTemperature.cpp rename to src/gpu/core/Temperature/FindTemperature.cpp index a4f6a01f83bd914e6ba7123a10387a463d90e84d..6883a720a557c125c399e15ef1d7631a0a03969b 100644 --- a/src/gpu/VirtualFluids_GPU/Temperature/FindTemperature.cpp +++ b/src/gpu/core/Temperature/FindTemperature.cpp @@ -20,37 +20,6 @@ void initTemperatur(Parameter* para, CudaMemoryManager* cudaMemoryManager, int l cudaMemoryManager->cudaCopyConcentrationHostToDevice(lev); - if (para->getDiffMod() == 7) - { - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - para->getParD(lev)->isEvenTimestep = false; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //InitThS7(); - getLastCudaError("Kernel execution failed"); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - para->getParD(lev)->isEvenTimestep = true; - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - //InitThS7(); - getLastCudaError("Kernel execution failed"); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - CalcMacThS7(para->getParD(lev)->concentration, - para->getParD(lev)->typeOfGridNode, - para->getParD(lev)->neighborX, - para->getParD(lev)->neighborY, - para->getParD(lev)->neighborZ, - para->getParD(lev)->numberOfNodes, - para->getParD(lev)->numberofthreads, - para->getParD(lev)->distributionsAD7.f[0], - para->getParD(lev)->isEvenTimestep); - getLastCudaError("CalcMacSP27 execution failed"); - //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - } - else if (para->getDiffMod() == 27) - { //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// para->getParD(lev)->isEvenTimestep = false; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -77,7 +46,6 @@ void initTemperatur(Parameter* para, CudaMemoryManager* cudaMemoryManager, int l para->getParD(lev)->distributionsAD.f[0], para->getParD(lev)->isEvenTimestep); //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - } cudaMemoryManager->cudaCopyConcentrationDeviceToHost(lev); } diff --git a/src/gpu/VirtualFluids_GPU/Temperature/FindTemperature.h b/src/gpu/core/Temperature/FindTemperature.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Temperature/FindTemperature.h rename to src/gpu/core/Temperature/FindTemperature.h diff --git a/src/gpu/VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.cpp b/src/gpu/core/TurbulenceModels/TurbulenceModelFactory.cpp similarity index 89% rename from src/gpu/VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.cpp rename to src/gpu/core/TurbulenceModels/TurbulenceModelFactory.cpp index 980a199b03710ac91310d26424c20c7371f1097d..b17c05890ea440a3c6bad39e4770bbf4ddd73c96 100644 --- a/src/gpu/VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.cpp +++ b/src/gpu/core/TurbulenceModels/TurbulenceModelFactory.cpp @@ -38,14 +38,14 @@ #include <variant> -void TurbulenceModelFactory::setTurbulenceModel(TurbulenceModel _turbulenceModel) +void TurbulenceModelFactory::setTurbulenceModel(vf::lbm::TurbulenceModel _turbulenceModel) { this->turbulenceModel = _turbulenceModel; para->setTurbulenceModel(_turbulenceModel); - if(this->turbulenceModel != TurbulenceModel::None) para->setUseTurbulentViscosity(true); + if(this->turbulenceModel != vf::lbm::TurbulenceModel::None) para->setUseTurbulentViscosity(true); switch (this->turbulenceModel) { - case TurbulenceModel::AMD: + case vf::lbm::TurbulenceModel::AMD: this->turbulenceModelKernel = calcTurbulentViscosityAMD; break; default: @@ -64,10 +64,10 @@ void TurbulenceModelFactory::readConfigFile(const vf::basics::ConfigurationFile { std::string config = configData.getValue<std::string>("TurbulenceModel"); - if (config == "Smagorinsky") this->setTurbulenceModel( TurbulenceModel::Smagorinsky ); - else if (config == "AMD") this->setTurbulenceModel( TurbulenceModel::AMD ); - else if (config == "QR" ) this->setTurbulenceModel( TurbulenceModel::QR ); - else if (config == "None") this->setTurbulenceModel( TurbulenceModel::None ); + if (config == "Smagorinsky") this->setTurbulenceModel( vf::lbm::TurbulenceModel::Smagorinsky ); + else if (config == "AMD") this->setTurbulenceModel( vf::lbm::TurbulenceModel::AMD ); + else if (config == "QR" ) this->setTurbulenceModel( vf::lbm::TurbulenceModel::QR ); + else if (config == "None") this->setTurbulenceModel( vf::lbm::TurbulenceModel::None ); else std::runtime_error("TurbulenceModelFactory: Invalid turbulence model!"); VF_LOG_INFO("Turbulence model: {}", config); diff --git a/src/gpu/VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.h b/src/gpu/core/TurbulenceModels/TurbulenceModelFactory.h similarity index 89% rename from src/gpu/VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.h rename to src/gpu/core/TurbulenceModels/TurbulenceModelFactory.h index e71c8ed5f7be016a4a800b83cfb3252ee6b8246e..63ab3570734a4f9967fb0a8ad60aa811a7f50515 100644 --- a/src/gpu/VirtualFluids_GPU/TurbulenceModels/TurbulenceModelFactory.h +++ b/src/gpu/core/TurbulenceModels/TurbulenceModelFactory.h @@ -37,12 +37,13 @@ #include <map> #include <string> #include <variant> +#include <memory> #include "LBM/LB.h" -#include "Parameter/Parameter.h" - #include <basics/config/ConfigurationFile.h> +#include <lbm/collision/TurbulentViscosity.h> + class Parameter; using TurbulenceModelKernel = std::function<void(Parameter *, int )>; @@ -51,9 +52,9 @@ class TurbulenceModelFactory { public: - TurbulenceModelFactory(SPtr<Parameter> parameter): para(parameter) {} + TurbulenceModelFactory(std::shared_ptr<Parameter> parameter): para(parameter) {} - void setTurbulenceModel(TurbulenceModel _turbulenceModel); + void setTurbulenceModel(vf::lbm::TurbulenceModel _turbulenceModel); void setModelConstant(real modelConstant); @@ -62,9 +63,9 @@ public: void runTurbulenceModelKernel(const int level) const; private: - TurbulenceModel turbulenceModel = TurbulenceModel::None; + vf::lbm::TurbulenceModel turbulenceModel = vf::lbm::TurbulenceModel::None; TurbulenceModelKernel turbulenceModelKernel = nullptr; - SPtr<Parameter> para; + std::shared_ptr<Parameter> para; }; diff --git a/src/gpu/VirtualFluids_GPU/Utilities/Buffer2D.hpp b/src/gpu/core/Utilities/Buffer2D.hpp similarity index 100% rename from src/gpu/VirtualFluids_GPU/Utilities/Buffer2D.hpp rename to src/gpu/core/Utilities/Buffer2D.hpp diff --git a/src/gpu/core/Utilities/FindNeighbors.h b/src/gpu/core/Utilities/FindNeighbors.h new file mode 100644 index 0000000000000000000000000000000000000000..0e0a9b5691b03a567821f684c40fb1a20bf2d232 --- /dev/null +++ b/src/gpu/core/Utilities/FindNeighbors.h @@ -0,0 +1,76 @@ +#ifndef FIND_NEIGHBORS_H +#define FIND_NEIGHBORS_H + +#include <map> + +#include "Parameter/Parameter.h" +#include "lbm/constants/D3Q27.h" + +using namespace vf::lbm::dir; + +struct countersForPointerChasing +{ + uint counterInverse; + uint counterX; + uint counterY; + uint counterZ; +}; + +const std::map<const size_t, const countersForPointerChasing> mapForPointerChasing = +{ + {d000, countersForPointerChasing{0, 0, 0, 0}}, + {dP00, countersForPointerChasing{0, 1, 0, 0}}, + {dM00, countersForPointerChasing{1, 0, 1, 1}}, + {d0P0, countersForPointerChasing{0, 0, 1, 0}}, + {d0M0, countersForPointerChasing{1, 1, 0, 1}}, + {d00P, countersForPointerChasing{0, 0, 0, 1}}, + {d00M, countersForPointerChasing{1, 1, 1, 0}}, + + {dPP0, countersForPointerChasing{0, 1, 1, 0}}, + {dMM0, countersForPointerChasing{1, 0, 0, 1}}, + {dPM0, countersForPointerChasing{1, 2, 0, 1}}, + {dMP0, countersForPointerChasing{1, 0, 2, 1}}, + {dP0P, countersForPointerChasing{0, 1, 0, 1}}, + {dM0M, countersForPointerChasing{1, 0, 1, 0}}, + {dP0M, countersForPointerChasing{1, 2, 1, 0}}, + {dM0P, countersForPointerChasing{1, 0, 1, 2}}, + {d0PP, countersForPointerChasing{0, 0, 1, 1}}, + {d0MM, countersForPointerChasing{1, 1, 0, 0}}, + {d0PM, countersForPointerChasing{1, 1, 2, 0}}, + {d0MP, countersForPointerChasing{1, 1, 0, 2}}, + + {dPPP, countersForPointerChasing{0, 1, 1, 1}}, + {dMPP, countersForPointerChasing{1, 0, 2, 2}}, + {dPMP, countersForPointerChasing{1, 2, 0, 2}}, + {dMMP, countersForPointerChasing{1, 0, 0, 2}}, + {dPPM, countersForPointerChasing{1, 2, 2, 0}}, + {dMPM, countersForPointerChasing{1, 0, 2, 0}}, + {dPMM, countersForPointerChasing{1, 2, 0, 0}}, + {dMMM, countersForPointerChasing{1, 0, 0, 0}} +}; + +// Only use for fluid nodes! +inline uint getNeighborIndex(LBMSimulationParameter* parH, const uint position, const int direction) +{ + uint nodeIndex = position; + + if (mapForPointerChasing.at(direction).counterInverse != 0) { + nodeIndex = parH->neighborInverse[nodeIndex]; + } + + for (uint x = 0; x < mapForPointerChasing.at(direction).counterX; x++) { + nodeIndex = parH->neighborX[nodeIndex]; + } + + for (uint y = 0; y < mapForPointerChasing.at(direction).counterY; y++) { + nodeIndex = parH->neighborY[nodeIndex]; + } + + for (uint z = 0; z < mapForPointerChasing.at(direction).counterZ; z++) { + nodeIndex = parH->neighborZ[nodeIndex]; + } + + return nodeIndex; +} + +#endif diff --git a/src/gpu/VirtualFluids_GPU/Utilities/testUtilitiesGPU.h b/src/gpu/core/Utilities/testUtilitiesGPU.h similarity index 100% rename from src/gpu/VirtualFluids_GPU/Utilities/testUtilitiesGPU.h rename to src/gpu/core/Utilities/testUtilitiesGPU.h diff --git a/src/lbm/BGK.cpp b/src/lbm/BGK.cpp deleted file mode 100644 index b59572293e3ffd8f15e8edc864b2993e48b00296..0000000000000000000000000000000000000000 --- a/src/lbm/BGK.cpp +++ /dev/null @@ -1,135 +0,0 @@ -#include "BGK.h" - - -#include <basics/DataTypes.h> -#include <basics/constants/NumericConstants.h> - -#include "constants/D3Q27.h" -#include "MacroscopicQuantities.h" - -namespace vf::lbm -{ - -using namespace vf::basics::constant; - - - -__host__ __device__ void bgk(KernelParameter parameter) -{ - auto& distribution = parameter.distribution; - const auto omega = parameter.omega; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Read distributions: style of reading and writing the distributions from/to - //! stored arrays dependent on timestep is based on the esoteric twist algorithm - //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> - //! - real mfcbb = distribution.f[dir::PZZ]; - real mfabb = distribution.f[dir::MZZ]; - real mfbcb = distribution.f[dir::ZPZ]; - real mfbab = distribution.f[dir::ZMZ]; - real mfbbc = distribution.f[dir::ZZP]; - real mfbba = distribution.f[dir::ZZM]; - real mfccb = distribution.f[dir::PPZ]; - real mfaab = distribution.f[dir::MMZ]; - real mfcab = distribution.f[dir::PMZ]; - real mfacb = distribution.f[dir::MPZ]; - real mfcbc = distribution.f[dir::PZP]; - real mfaba = distribution.f[dir::MZM]; - real mfcba = distribution.f[dir::PZM]; - real mfabc = distribution.f[dir::MZP]; - real mfbcc = distribution.f[dir::ZPP]; - real mfbaa = distribution.f[dir::ZMM]; - real mfbca = distribution.f[dir::ZPM]; - real mfbac = distribution.f[dir::ZMP]; - real mfccc = distribution.f[dir::PPP]; - real mfacc = distribution.f[dir::MPP]; - real mfcac = distribution.f[dir::PMP]; - real mfaac = distribution.f[dir::MMP]; - real mfcca = distribution.f[dir::PPM]; - real mfaca = distribution.f[dir::MPM]; - real mfcaa = distribution.f[dir::PMM]; - real mfaaa = distribution.f[dir::MMM]; - real mfbbb = distribution.f[dir::ZZZ]; - - - //////////////////////////////////////////////////////////////////////////////////// - //! - Acquire macroscopic quantities - const real drho = getDensity(distribution.f); - const real rho = c1o1 + drho; - const real OOrho = c1o1 / (c1o1 + drho); - - const real vvx = getIncompressibleVelocityX1(distribution.f) * OOrho; - const real vvy = getIncompressibleVelocityX2(distribution.f) * OOrho; - const real vvz = getIncompressibleVelocityX3(distribution.f) * OOrho; - - - //////////////////////////////////////////////////////////////////////////////////// - //! - BGK computation - const real cusq = c3o2*(vvx*vvx + vvy*vvy + vvz*vvz); - - mfbbb = mfbbb *(c1o1 + (-omega)) - (-omega)* c8o27* (drho - rho * cusq); - mfcbb = mfcbb *(c1o1 + (-omega)) - (-omega)* c2o27* (drho + rho * (c3o1*(vvx)+c9o2*(vvx)*(vvx)-cusq)); - mfabb = mfabb *(c1o1 + (-omega)) - (-omega)* c2o27* (drho + rho * (c3o1*(-vvx) + c9o2*(-vvx)*(-vvx) - cusq)); - mfbcb = mfbcb *(c1o1 + (-omega)) - (-omega)* c2o27* (drho + rho * (c3o1*(vvy)+c9o2*(vvy)*(vvy)-cusq)); - mfbab = mfbab *(c1o1 + (-omega)) - (-omega)* c2o27* (drho + rho * (c3o1*(-vvy) + c9o2*(-vvy)*(-vvy) - cusq)); - mfbbc = mfbbc *(c1o1 + (-omega)) - (-omega)* c2o27* (drho + rho * (c3o1*(vvz)+c9o2*(vvz)*(vvz)-cusq)); - mfbba = mfbba *(c1o1 + (-omega)) - (-omega)* c2o27* (drho + rho * (c3o1*(-vvz) + c9o2*(-vvz)*(-vvz) - cusq)); - mfccb = mfccb *(c1o1 + (-omega)) - (-omega)* c1o54* (drho + rho * (c3o1*(vvx + vvy) + c9o2*(vvx + vvy)*(vvx + vvy) - cusq)); - mfaab = mfaab *(c1o1 + (-omega)) - (-omega)* c1o54* (drho + rho * (c3o1*(-vvx - vvy) + c9o2*(-vvx - vvy)*(-vvx - vvy) - cusq)); - mfcab = mfcab *(c1o1 + (-omega)) - (-omega)* c1o54* (drho + rho * (c3o1*(vvx - vvy) + c9o2*(vvx - vvy)*(vvx - vvy) - cusq)); - mfacb = mfacb *(c1o1 + (-omega)) - (-omega)* c1o54* (drho + rho * (c3o1*(-vvx + vvy) + c9o2*(-vvx + vvy)*(-vvx + vvy) - cusq)); - mfcbc = mfcbc *(c1o1 + (-omega)) - (-omega)* c1o54* (drho + rho * (c3o1*(vvx + vvz) + c9o2*(vvx + vvz)*(vvx + vvz) - cusq)); - mfaba = mfaba *(c1o1 + (-omega)) - (-omega)* c1o54* (drho + rho * (c3o1*(-vvx - vvz) + c9o2*(-vvx - vvz)*(-vvx - vvz) - cusq)); - mfcba = mfcba *(c1o1 + (-omega)) - (-omega)* c1o54* (drho + rho * (c3o1*(vvx - vvz) + c9o2*(vvx - vvz)*(vvx - vvz) - cusq)); - mfabc = mfabc *(c1o1 + (-omega)) - (-omega)* c1o54* (drho + rho * (c3o1*(-vvx + vvz) + c9o2*(-vvx + vvz)*(-vvx + vvz) - cusq)); - mfbcc = mfbcc *(c1o1 + (-omega)) - (-omega)* c1o54* (drho + rho * (c3o1*(vvy + vvz) + c9o2*(vvy + vvz)*(vvy + vvz) - cusq)); - mfbaa = mfbaa *(c1o1 + (-omega)) - (-omega)* c1o54* (drho + rho * (c3o1*(-vvy - vvz) + c9o2*(-vvy - vvz)*(-vvy - vvz) - cusq)); - mfbca = mfbca *(c1o1 + (-omega)) - (-omega)* c1o54* (drho + rho * (c3o1*(vvy - vvz) + c9o2*(vvy - vvz)*(vvy - vvz) - cusq)); - mfbac = mfbac *(c1o1 + (-omega)) - (-omega)* c1o54* (drho + rho * (c3o1*(-vvy + vvz) + c9o2*(-vvy + vvz)*(-vvy + vvz) - cusq)); - mfccc = mfccc *(c1o1 + (-omega)) - (-omega)* c1o216*(drho + rho * (c3o1*(vvx + vvy + vvz) + c9o2*(vvx + vvy + vvz)*(vvx + vvy + vvz) - cusq)); - mfaaa = mfaaa *(c1o1 + (-omega)) - (-omega)* c1o216*(drho + rho * (c3o1*(-vvx - vvy - vvz) + c9o2*(-vvx - vvy - vvz)*(-vvx - vvy - vvz) - cusq)); - mfcca = mfcca *(c1o1 + (-omega)) - (-omega)* c1o216*(drho + rho * (c3o1*(vvx + vvy - vvz) + c9o2*(vvx + vvy - vvz)*(vvx + vvy - vvz) - cusq)); - mfaac = mfaac *(c1o1 + (-omega)) - (-omega)* c1o216*(drho + rho * (c3o1*(-vvx - vvy + vvz) + c9o2*(-vvx - vvy + vvz)*(-vvx - vvy + vvz) - cusq)); - mfcac = mfcac *(c1o1 + (-omega)) - (-omega)* c1o216*(drho + rho * (c3o1*(vvx - vvy + vvz) + c9o2*(vvx - vvy + vvz)*(vvx - vvy + vvz) - cusq)); - mfaca = mfaca *(c1o1 + (-omega)) - (-omega)* c1o216*(drho + rho * (c3o1*(-vvx + vvy - vvz) + c9o2*(-vvx + vvy - vvz)*(-vvx + vvy - vvz) - cusq)); - mfcaa = mfcaa *(c1o1 + (-omega)) - (-omega)* c1o216*(drho + rho * (c3o1*(vvx - vvy - vvz) + c9o2*(vvx - vvy - vvz)*(vvx - vvy - vvz) - cusq)); - mfacc = mfacc *(c1o1 + (-omega)) - (-omega)* c1o216*(drho + rho * (c3o1*(-vvx + vvy + vvz) + c9o2*(-vvx + vvy + vvz)*(-vvx + vvy + vvz) - cusq)); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Write distributions: style of reading and writing the distributions from/to - //! stored arrays dependent on timestep is based on the esoteric twist algorithm - //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> - //! - distribution.f[dir::MZZ] = mfcbb; - distribution.f[dir::PZZ] = mfabb; - distribution.f[dir::ZMZ] = mfbcb; - distribution.f[dir::ZPZ] = mfbab; - distribution.f[dir::ZZM] = mfbbc; - distribution.f[dir::ZZP] = mfbba; - distribution.f[dir::MMZ] = mfccb; - distribution.f[dir::PPZ] = mfaab; - distribution.f[dir::MPZ] = mfcab; - distribution.f[dir::PMZ] = mfacb; - distribution.f[dir::MZM] = mfcbc; - distribution.f[dir::PZP] = mfaba; - distribution.f[dir::MZP] = mfcba; - distribution.f[dir::PZM] = mfabc; - distribution.f[dir::ZMM] = mfbcc; - distribution.f[dir::ZPP] = mfbaa; - distribution.f[dir::ZMP] = mfbca; - distribution.f[dir::ZPM] = mfbac; - distribution.f[dir::MMM] = mfccc; - distribution.f[dir::PMM] = mfacc; - distribution.f[dir::MPM] = mfcac; - distribution.f[dir::PPM] = mfaac; - distribution.f[dir::MMP] = mfcca; - distribution.f[dir::PMP] = mfaca; - distribution.f[dir::MPP] = mfcaa; - distribution.f[dir::PPP] = mfaaa; - distribution.f[dir::ZZZ] = mfbbb; -} - - -} - diff --git a/src/lbm/BGK.h b/src/lbm/BGK.h deleted file mode 100644 index 6cde85013dd92472022bbf7b93bc73e7940049a1..0000000000000000000000000000000000000000 --- a/src/lbm/BGK.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef LBM_BGK_H -#define LBM_BGK_H - -#ifndef __host__ -#define __host__ -#endif -#ifndef __device__ -#define __device__ -#endif - -#include <basics/DataTypes.h> - -#include "KernelParameter.h" - -namespace vf -{ -namespace lbm -{ - -__host__ __device__ void bgk(KernelParameter parameter); - -} -} -#endif diff --git a/src/lbm/CMakeLists.txt b/src/lbm/CMakeLists.txt index 52ab3d78710c8551475307463334c9d1d0baf36f..73a98aed61ab05bfaee065e60480bac6f41d262f 100644 --- a/src/lbm/CMakeLists.txt +++ b/src/lbm/CMakeLists.txt @@ -3,10 +3,6 @@ vf_add_library(PUBLIC_LINK basics) if(BUILD_VF_GPU) set_target_properties(lbm PROPERTIES CUDA_SEPARABLE_COMPILATION ON POSITION_INDEPENDENT_CODE ON) - - set_source_files_properties(KernelParameter.cpp PROPERTIES LANGUAGE CUDA) - set_source_files_properties(CumulantChimera.cpp PROPERTIES LANGUAGE CUDA) - set_source_files_properties(BGK.cpp PROPERTIES LANGUAGE CUDA) endif() vf_add_tests() \ No newline at end of file diff --git a/src/lbm/ChimeraTests.cpp b/src/lbm/ChimeraTests.cpp index 01abbe82764c276f53a4cdd479d333536199c3a9..4e0370c60a5d2ead900b562390acec0646cf8400 100644 --- a/src/lbm/ChimeraTests.cpp +++ b/src/lbm/ChimeraTests.cpp @@ -1,6 +1,6 @@ #include <gmock/gmock.h> -#include "Chimera.h" +#include "ChimeraTransformation.h" #ifdef VF_DOUBLE_ACCURACY #define REAL_EQ(a) testing::DoubleEq(a) diff --git a/src/lbm/Chimera.h b/src/lbm/ChimeraTransformation.h similarity index 100% rename from src/lbm/Chimera.h rename to src/lbm/ChimeraTransformation.h diff --git a/src/lbm/CumulantChimera.cpp b/src/lbm/CumulantChimera.cpp deleted file mode 100644 index f1257c4e579b36f868f3476282e79d44291750b1..0000000000000000000000000000000000000000 --- a/src/lbm/CumulantChimera.cpp +++ /dev/null @@ -1,448 +0,0 @@ - -#include <cmath> - -#include <basics/DataTypes.h> -#include <basics/constants/NumericConstants.h> - -#include "constants/D3Q27.h" -#include "CumulantChimera.h" -#include "Chimera.h" -#include "MacroscopicQuantities.h" - -namespace vf::lbm -{ - -using namespace vf::basics::constant; - - -//////////////////////////////////////////////////////////////////////////////////// -//! - Setting relaxation rates for non-hydrodynamic cumulants (default values). Variable names and equations according to -//! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05 040 ]</b></a> -//! => [NAME IN PAPER]=[NAME IN CODE]=[DEFAULT VALUE]. -//! - Trace of second order cumulants \f$ C_{200}+C_{020}+C_{002} \f$ used to adjust bulk viscosity:\f$\omega_2=OxxPyyPzz=1.0 \f$. -//! - Third order cumulants \f$ C_{120}+C_{102}, C_{210}+C_{012}, C_{201}+C_{021} \f$: \f$ \omega_3=OxyyPxzz \f$ set according to Eq. (111) with simplifications assuming \f$ \omega_2=1.0\f$. -//! - Third order cumulants \f$ C_{120}-C_{102}, C_{210}-C_{012}, C_{201}-C_{021} \f$: \f$ \omega_4 = OxyyMxzz \f$ set according to Eq. (112) with simplifications assuming \f$ \omega_2 = 1.0\f$. -//! - Third order cumulants \f$ C_{111} \f$: \f$ \omega_5 = Oxyz \f$ set according to Eq. (113) with simplifications assuming \f$ \omega_2 = 1.0\f$ (modify for different bulk viscosity). -//! - Fourth order cumulants \f$ C_{220}, C_{202}, C_{022}, C_{211}, C_{121}, C_{112} \f$: for simplification all set to the same default value \f$ \omega_6=\omega_7=\omega_8=O4=1.0 \f$. -//! - Fifth order cumulants \f$ C_{221}, C_{212}, C_{122}\f$: \f$\omega_9=O5=1.0\f$. -//! - Sixth order cumulant \f$ C_{222}\f$: \f$\omega_{10}=O6=1.0\f$. -////////////////////////////////////////////////////////////////////////// -__host__ __device__ void setRelaxationRatesK17(real omega, real &OxxPyyPzz, real &OxyyPxzz, real &OxyyMxzz, real &Oxyz, - real &O4, real &O5, real &O6) -{ - OxxPyyPzz = c1o1; - - OxyyPxzz = c8o1 * (-c2o1 + omega) * (c1o1 + c2o1 * omega) / (-c8o1 - c14o1 * omega + c7o1 * omega * omega); - OxyyMxzz = c8o1 * (-c2o1 + omega) * (-c7o1 + c4o1 * omega) / (c56o1 - c50o1 * omega + c9o1 * omega * omega); - Oxyz = c24o1 * (-c2o1 + omega) * (-c2o1 - c7o1 * omega + c3o1 * omega * omega) / - (c48o1 + c152o1 * omega - c130o1 * omega * omega + c29o1 * omega * omega * omega); - - O4 = c1o1; - - O5 = c1o1; - - O6 = c1o1; -} - - -__host__ __device__ void setRelaxationRatesK15(real omega, real &OxxPyyPzz, real &OxyyPxzz, real &OxyyMxzz, real &Oxyz, - real &O4, real &O5, real &O6) -{ - OxxPyyPzz = c1o1; - - OxyyPxzz = c1o1; - OxyyMxzz = c1o1; - Oxyz = c1o1; - - O4 = c1o1; - - O5 = c1o1; - - O6 = c1o1; -} - -////////////////////////////////////////////////////////////////////////// -//! Cumulant K17 Kernel is based on \ref -//! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 ]</b></a> -//! and \ref -//! <a href="https://doi.org/10.1016/j.jcp.2017.07.004"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.07.004 ]</b></a> -////////////////////////////////////////////////////////////////////////// -__host__ __device__ void cumulantChimera(KernelParameter parameter, RelaxationRatesFunctor setRelaxationRates) -{ - auto& distribution = parameter.distribution; - const auto omega = parameter.omega; - const auto* forces = parameter.forces; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Read distributions: style of reading and writing the distributions from/to - //! stored arrays dependent on timestep is based on the esoteric twist algorithm - //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> - //! - real mfcbb = distribution.f[dir::PZZ]; - real mfabb = distribution.f[dir::MZZ]; - real mfbcb = distribution.f[dir::ZPZ]; - real mfbab = distribution.f[dir::ZMZ]; - real mfbbc = distribution.f[dir::ZZP]; - real mfbba = distribution.f[dir::ZZM]; - real mfccb = distribution.f[dir::PPZ]; - real mfaab = distribution.f[dir::MMZ]; - real mfcab = distribution.f[dir::PMZ]; - real mfacb = distribution.f[dir::MPZ]; - real mfcbc = distribution.f[dir::PZP]; - real mfaba = distribution.f[dir::MZM]; - real mfcba = distribution.f[dir::PZM]; - real mfabc = distribution.f[dir::MZP]; - real mfbcc = distribution.f[dir::ZPP]; - real mfbaa = distribution.f[dir::ZMM]; - real mfbca = distribution.f[dir::ZPM]; - real mfbac = distribution.f[dir::ZMP]; - real mfccc = distribution.f[dir::PPP]; - real mfacc = distribution.f[dir::MPP]; - real mfcac = distribution.f[dir::PMP]; - real mfaac = distribution.f[dir::MMP]; - real mfcca = distribution.f[dir::PPM]; - real mfaca = distribution.f[dir::MPM]; - real mfcaa = distribution.f[dir::PMM]; - real mfaaa = distribution.f[dir::MMM]; - real mfbbb = distribution.f[dir::ZZZ]; - - - const real drho = getDensity(distribution.f); - const real OOrho = c1o1 / (c1o1 + drho); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa 2015.05.001 ]</b></a> - //! - const real vvx = getIncompressibleVelocityX1(distribution.f) * OOrho + forces[0] * c1o2; - const real vvy = getIncompressibleVelocityX2(distribution.f) * OOrho + forces[0] * c1o2; - const real vvz = getIncompressibleVelocityX3(distribution.f) * OOrho + forces[0] * c1o2; - - //////////////////////////////////////////////////////////////////////////////////// - // calculate the square of velocities for this lattice node - const real vx2 = vvx*vvx; - const real vy2 = vvy*vvy; - const real vz2 = vvz*vvz; - - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa 2015.05.001 ]</b></a> - //! see also Eq. (6)-(14) in \ref - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05 040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - vf::lbm::forwardInverseChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36); - vf::lbm::forwardInverseChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9); - vf::lbm::forwardInverseChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36); - vf::lbm::forwardInverseChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9); - vf::lbm::forwardInverseChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9); - vf::lbm::forwardInverseChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9); - vf::lbm::forwardInverseChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36); - vf::lbm::forwardInverseChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9); - vf::lbm::forwardInverseChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36); - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - vf::lbm::forwardInverseChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6); - vf::lbm::forwardChimera( mfaab, mfabb, mfacb, vvy, vy2); - vf::lbm::forwardInverseChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18); - vf::lbm::forwardInverseChimeraWithK(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3); - vf::lbm::forwardChimera( mfbab, mfbbb, mfbcb, vvy, vy2); - vf::lbm::forwardInverseChimeraWithK(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9); - vf::lbm::forwardInverseChimeraWithK(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6); - vf::lbm::forwardChimera( mfcab, mfcbb, mfccb, vvy, vy2); - vf::lbm::forwardInverseChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18); - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - vf::lbm::forwardInverseChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1); - vf::lbm::forwardChimera( mfaba, mfbba, mfcba, vvx, vx2); - vf::lbm::forwardInverseChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3); - vf::lbm::forwardChimera( mfaab, mfbab, mfcab, vvx, vx2); - vf::lbm::forwardChimera( mfabb, mfbbb, mfcbb, vvx, vx2); - vf::lbm::forwardChimera( mfacb, mfbcb, mfccb, vvx, vx2); - vf::lbm::forwardInverseChimeraWithK(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3); - vf::lbm::forwardChimera( mfabc, mfbbc, mfcbc, vvx, vx2); - vf::lbm::forwardInverseChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c3o1, c1o9); - - //////////////////////////////////////////////////////////////////////////////////// - //! - Setting relaxation rates for non-hydrodynamic cumulants (default values). Variable names and equations - real OxxPyyPzz; - real OxyyPxzz; - real OxyyMxzz; - real Oxyz; - real O4; - real O5; - real O6; - - setRelaxationRates(omega, OxxPyyPzz, OxyyPxzz, OxyyMxzz, Oxyz, O4, O5, O6); - - //////////////////////////////////////////////////////////////////////////////////// - //! - A and B: parameters for fourth order convergence of the diffusion term according to Eq. (115) and (116) - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05 040 ]</b></a> - //! with simplifications assuming \f$ \omega_2 = 1.0 \f$ (modify for different bulk viscosity). - //! - const real A = (c4o1 + c2o1*omega - c3o1*omega*omega) / (c2o1 - c7o1*omega + c5o1*omega*omega); - const real B = (c4o1 + c28o1*omega - c14o1*omega*omega) / (c6o1 - c21o1*omega + c15o1*omega*omega); - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute cumulants from central moments according to Eq. (20)-(23) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05 040 ]</b></a> - //! - //////////////////////////////////////////////////////////// - //4. - real CUMcbb = mfcbb - ((mfcaa + c1o3) * mfabb + c2o1 * mfbba * mfbab) * OOrho; - real CUMbcb = mfbcb - ((mfaca + c1o3) * mfbab + c2o1 * mfbba * mfabb) * OOrho; - real CUMbbc = mfbbc - ((mfaac + c1o3) * mfbba + c2o1 * mfbab * mfabb) * OOrho; - real CUMcca = mfcca - (((mfcaa * mfaca + c2o1 * mfbba * mfbba) + c1o3 * (mfcaa + mfaca)) * OOrho - c1o9*(drho * OOrho)); - real CUMcac = mfcac - (((mfcaa * mfaac + c2o1 * mfbab * mfbab) + c1o3 * (mfcaa + mfaac)) * OOrho - c1o9*(drho * OOrho)); - real CUMacc = mfacc - (((mfaac * mfaca + c2o1 * mfabb * mfabb) + c1o3 * (mfaac + mfaca)) * OOrho - c1o9*(drho * OOrho)); - //////////////////////////////////////////////////////////// - //5. - real CUMbcc = mfbcc - ((mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + c1o3 * (mfbca + mfbac)) * OOrho; - real CUMcbc = mfcbc - ((mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + c1o3 * (mfcba + mfabc)) * OOrho; - real CUMccb = mfccb - ((mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + c1o3 * (mfacb + mfcab)) * OOrho; - //////////////////////////////////////////////////////////// - //6. - real CUMccc = mfccc + ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) * OOrho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) * OOrho * OOrho - - c1o3 * (mfacc + mfcac + mfcca) * OOrho - - c1o9 * (mfcaa + mfaca + mfaac) * OOrho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) * OOrho * OOrho * c2o3 - + c1o27*((drho * drho - drho) * OOrho * OOrho)); - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute linear combinations of second and third order cumulants - //! - //////////////////////////////////////////////////////////// - //2. - real mxxPyyPzz = mfcaa + mfaca + mfaac; - real mxxMyy = mfcaa - mfaca; - real mxxMzz = mfcaa - mfaac; - //////////////////////////////////////////////////////////// - //3. - real mxxyPyzz = mfcba + mfabc; - real mxxyMyzz = mfcba - mfabc; - real mxxzPyyz = mfcab + mfacb; - real mxxzMyyz = mfcab - mfacb; - real mxyyPxzz = mfbca + mfbac; - real mxyyMxzz = mfbca - mfbac; - //////////////////////////////////////////////////////////////////////////////////// - //incl. correction - //////////////////////////////////////////////////////////// - //! - Compute velocity gradients from second order cumulants according to Eq. (27)-(32) - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05 040 ]</b></a> - //! Further explanations of the correction in viscosity in Appendix H of - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa 2015.05.001 ]</b></a> - //! Note that the division by rho is omitted here as we need rho times the gradients later. - //! - const real Dxy = -c3o1*omega*mfbba; - const real Dxz = -c3o1*omega*mfbab; - const real Dyz = -c3o1*omega*mfabb; - const real dxux = c1o2 * (-omega) *(mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (mfaaa - mxxPyyPzz); - const real dyuy = dxux + omega * c3o2 * mxxMyy; - const real dzuz = dxux + omega * c3o2 * mxxMzz; - //////////////////////////////////////////////////////////// - //! - Relaxation of second order cumulants with correction terms according to Eq. (33)-(35) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05 040 ]</b></a> - //! - mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); - mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); - mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); - //////////////////////////////////////////////////////////////////////////////////// - ////no correction - //mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz); - //mxxMyy += -(-omega) * (-mxxMyy); - //mxxMzz += -(-omega) * (-mxxMzz); - ////////////////////////////////////////////////////////////////////////// - mfabb += omega * (-mfabb); - mfbab += omega * (-mfbab); - mfbba += omega * (-mfbba); - //////////////////////////////////////////////////////////////////////////////////// - //relax - ////////////////////////////////////////////////////////////////////////// - // incl. limiter - //! Set relaxation limiters for third order cumulants to default value \f$ \lambda=0.001 \f$ according to section 6 in \ref - //! - Relaxation of third order cumulants including limiter according to Eq. (116)-(123) - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05 040 ]</b></a> - //! - - const real qudricLimitP = c1o100; - const real qudricLimitM = c1o100; - const real qudricLimitD = c1o100; - - real wadjust = Oxyz + (c1o1 - Oxyz)*abs_internal(mfbbb) / (abs_internal(mfbbb) + qudricLimitD); - mfbbb += wadjust * (-mfbbb); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs_internal(mxxyPyzz) / (abs_internal(mxxyPyzz) + qudricLimitP); - mxxyPyzz += wadjust * (-mxxyPyzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs_internal(mxxyMyzz) / (abs_internal(mxxyMyzz) + qudricLimitM); - mxxyMyzz += wadjust * (-mxxyMyzz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs_internal(mxxzPyyz) / (abs_internal(mxxzPyyz) + qudricLimitP); - mxxzPyyz += wadjust * (-mxxzPyyz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs_internal(mxxzMyyz) / (abs_internal(mxxzMyyz) + qudricLimitM); - mxxzMyyz += wadjust * (-mxxzMyyz); - wadjust = OxyyPxzz + (c1o1 - OxyyPxzz)*abs_internal(mxyyPxzz) / (abs_internal(mxyyPxzz) + qudricLimitP); - mxyyPxzz += wadjust * (-mxyyPxzz); - wadjust = OxyyMxzz + (c1o1 - OxyyMxzz)*abs_internal(mxyyMxzz) / (abs_internal(mxyyMxzz) + qudricLimitM); - mxyyMxzz += wadjust * (-mxyyMxzz); - ////////////////////////////////////////////////////////////////////////// - // no limiter - //mfbbb += OxyyMxzz * (-mfbbb); - //mxxyPyzz += OxyyPxzz * (-mxxyPyzz); - //mxxyMyzz += OxyyMxzz * (-mxxyMyzz); - //mxxzPyyz += OxyyPxzz * (-mxxzPyyz); - //mxxzMyyz += OxyyMxzz * (-mxxzMyyz); - //mxyyPxzz += OxyyPxzz * (-mxyyPxzz); - //mxyyMxzz += OxyyMxzz * (-mxyyMxzz); - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute inverse linear combinations of second and third order cumulants - //! - mfcaa = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); - mfaca = c1o3 * (-c2o1* mxxMyy + mxxMzz + mxxPyyPzz); - mfaac = c1o3 * (mxxMyy - c2o1* mxxMzz + mxxPyyPzz); - mfcba = ( mxxyMyzz + mxxyPyzz) * c1o2; - mfabc = (-mxxyMyzz + mxxyPyzz) * c1o2; - mfcab = ( mxxzMyyz + mxxzPyyz) * c1o2; - mfacb = (-mxxzMyyz + mxxzPyyz) * c1o2; - mfbca = ( mxyyMxzz + mxyyPxzz) * c1o2; - mfbac = (-mxyyMxzz + mxyyPxzz) * c1o2; - ////////////////////////////////////////////////////////////////////////// - ////////////////////////////////////////////////////////////////////////// - //4. - // no limiter - //! - Relax fourth order cumulants to modified equilibrium for fourth order convergence of diffusion according to Eq. (43)-(48) - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05 040 ]</b></a> - //! - CUMacc = -O4*(c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMacc); - CUMcac = -O4*(c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * A + (c1o1 - O4) * (CUMcac); - CUMcca = -O4*(c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * A + (c1o1 - O4) * (CUMcca); - CUMbbc = -O4*(c1o1 / omega - c1o2) * Dxy * c1o3 * B + (c1o1 - O4) * (CUMbbc); - CUMbcb = -O4*(c1o1 / omega - c1o2) * Dxz * c1o3 * B + (c1o1 - O4) * (CUMbcb); - CUMcbb = -O4*(c1o1 / omega - c1o2) * Dyz * c1o3 * B + (c1o1 - O4) * (CUMcbb); - ////////////////////////////////////////////////////////////////////////// - //5. - CUMbcc += O5 * (-CUMbcc); - CUMcbc += O5 * (-CUMcbc); - CUMccb += O5 * (-CUMccb); - ////////////////////////////////////////////////////////////////////////// - //6. - CUMccc += O6 * (-CUMccc); - //////////////////////////////////////////////////////////////////////////////////// - //! - Compute central moments from post collision cumulants according to Eq. (53)-(56) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05 040 ]</b></a> - //! - ////////////////////////////////////////////////////////////////////////// - //4. - mfcbb = CUMcbb + c1o3*((c3o1*mfcaa + c1o1) * mfabb + c6o1 * mfbba * mfbab) * OOrho; - mfbcb = CUMbcb + c1o3*((c3o1*mfaca + c1o1) * mfbab + c6o1 * mfbba * mfabb) * OOrho; - mfbbc = CUMbbc + c1o3*((c3o1*mfaac + c1o1) * mfbba + c6o1 * mfbab * mfabb) * OOrho; - mfcca = CUMcca + (((mfcaa * mfaca + c2o1 * mfbba * mfbba)*c9o1 + c3o1 * (mfcaa + mfaca)) * OOrho - (drho * OOrho))*c1o9; - mfcac = CUMcac + (((mfcaa * mfaac + c2o1 * mfbab * mfbab)*c9o1 + c3o1 * (mfcaa + mfaac)) * OOrho - (drho * OOrho))*c1o9; - mfacc = CUMacc + (((mfaac * mfaca + c2o1 * mfabb * mfabb)*c9o1 + c3o1 * (mfaac + mfaca)) * OOrho - (drho * OOrho))*c1o9; - ////////////////////////////////////////////////////////////////////////// - //5. - mfbcc = CUMbcc + c1o3 *(c3o1*(mfaac * mfbca + mfaca * mfbac + c4o1 * mfabb * mfbbb + c2o1 * (mfbab * mfacb + mfbba * mfabc)) + (mfbca + mfbac)) * OOrho; - mfcbc = CUMcbc + c1o3 *(c3o1*(mfaac * mfcba + mfcaa * mfabc + c4o1 * mfbab * mfbbb + c2o1 * (mfabb * mfcab + mfbba * mfbac)) + (mfcba + mfabc)) * OOrho; - mfccb = CUMccb + c1o3 *(c3o1*(mfcaa * mfacb + mfaca * mfcab + c4o1 * mfbba * mfbbb + c2o1 * (mfbab * mfbca + mfabb * mfcba)) + (mfacb + mfcab)) * OOrho; - ////////////////////////////////////////////////////////////////////////// - //6. - mfccc = CUMccc - ((-c4o1 * mfbbb * mfbbb - - (mfcaa * mfacc + mfaca * mfcac + mfaac * mfcca) - - c4o1 * (mfabb * mfcbb + mfbab * mfbcb + mfbba * mfbbc) - - c2o1 * (mfbca * mfbac + mfcba * mfabc + mfcab * mfacb)) * OOrho - + (c4o1 * (mfbab * mfbab * mfaca + mfabb * mfabb * mfcaa + mfbba * mfbba * mfaac) - + c2o1 * (mfcaa * mfaca * mfaac) - + c16o1 * mfbba * mfbab * mfabb) * OOrho * OOrho - - c1o3 * (mfacc + mfcac + mfcca) * OOrho - - c1o9 * (mfcaa + mfaca + mfaac) * OOrho - + (c2o1 * (mfbab * mfbab + mfabb * mfabb + mfbba * mfbba) - + (mfaac * mfaca + mfaac * mfcaa + mfaca * mfcaa) + c1o3 *(mfaac + mfaca + mfcaa)) * OOrho * OOrho * c2o3 - + c1o27*((drho * drho - drho) * OOrho * OOrho)); - //////////////////////////////////////////////////////////////////////////////////// - //! - Add acceleration (body force) to first order cumulants according to Eq. (85)-(87) in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa 2015.05.001 ]</b></a> - //! - mfbaa = -mfbaa; - mfaba = -mfaba; - mfaab = -mfaab; - //////////////////////////////////////////////////////////////////////////////////// - //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in - //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa 2015.05.001 ]</b></a> - //! see also Eq. (88)-(96) in - //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05 040 ]</b></a> - //! - //////////////////////////////////////////////////////////////////////////////////// - // X - Dir - vf::lbm::backwardInverseChimeraWithK(mfaaa, mfbaa, mfcaa, vvx, vx2, c1o1, c1o1); - vf::lbm::backwardChimera( mfaba, mfbba, mfcba, vvx, vx2); - vf::lbm::backwardInverseChimeraWithK(mfaca, mfbca, mfcca, vvx, vx2, c3o1, c1o3); - vf::lbm::backwardChimera( mfaab, mfbab, mfcab, vvx, vx2); - vf::lbm::backwardChimera( mfabb, mfbbb, mfcbb, vvx, vx2); - vf::lbm::backwardChimera( mfacb, mfbcb, mfccb, vvx, vx2); - vf::lbm::backwardInverseChimeraWithK(mfaac, mfbac, mfcac, vvx, vx2, c3o1, c1o3); - vf::lbm::backwardChimera( mfabc, mfbbc, mfcbc, vvx, vx2); - vf::lbm::backwardInverseChimeraWithK(mfacc, mfbcc, mfccc, vvx, vx2, c9o1, c1o9); - //////////////////////////////////////////////////////////////////////////////////// - // Y - Dir - vf::lbm::backwardInverseChimeraWithK(mfaaa, mfaba, mfaca, vvy, vy2, c6o1, c1o6); - vf::lbm::backwardChimera( mfaab, mfabb, mfacb, vvy, vy2); - vf::lbm::backwardInverseChimeraWithK(mfaac, mfabc, mfacc, vvy, vy2, c18o1, c1o18); - vf::lbm::backwardInverseChimeraWithK(mfbaa, mfbba, mfbca, vvy, vy2, c3o2, c2o3); - vf::lbm::backwardChimera( mfbab, mfbbb, mfbcb, vvy, vy2); - vf::lbm::backwardInverseChimeraWithK(mfbac, mfbbc, mfbcc, vvy, vy2, c9o2, c2o9); - vf::lbm::backwardInverseChimeraWithK(mfcaa, mfcba, mfcca, vvy, vy2, c6o1, c1o6); - vf::lbm::backwardChimera( mfcab, mfcbb, mfccb, vvy, vy2); - vf::lbm::backwardInverseChimeraWithK(mfcac, mfcbc, mfccc, vvy, vy2, c18o1, c1o18); - //////////////////////////////////////////////////////////////////////////////////// - // Z - Dir - vf::lbm::backwardInverseChimeraWithK(mfaaa, mfaab, mfaac, vvz, vz2, c36o1, c1o36); - vf::lbm::backwardInverseChimeraWithK(mfaba, mfabb, mfabc, vvz, vz2, c9o1, c1o9); - vf::lbm::backwardInverseChimeraWithK(mfaca, mfacb, mfacc, vvz, vz2, c36o1, c1o36); - vf::lbm::backwardInverseChimeraWithK(mfbaa, mfbab, mfbac, vvz, vz2, c9o1, c1o9); - vf::lbm::backwardInverseChimeraWithK(mfbba, mfbbb, mfbbc, vvz, vz2, c9o4, c4o9); - vf::lbm::backwardInverseChimeraWithK(mfbca, mfbcb, mfbcc, vvz, vz2, c9o1, c1o9); - vf::lbm::backwardInverseChimeraWithK(mfcaa, mfcab, mfcac, vvz, vz2, c36o1, c1o36); - vf::lbm::backwardInverseChimeraWithK(mfcba, mfcbb, mfcbc, vvz, vz2, c9o1, c1o9); - vf::lbm::backwardInverseChimeraWithK(mfcca, mfccb, mfccc, vvz, vz2, c36o1, c1o36); - - - //////////////////////////////////////////////////////////////////////////////////// - //! - Write distributions: style of reading and writing the distributions from/to - //! stored arrays dependent on timestep is based on the esoteric twist algorithm - //! <a href="https://doi.org/10.3390/computation5020019"><b>[ M. Geier et al. (2017), DOI:10.3390/computation5020019 ]</b></a> - //! - distribution.f[dir::MZZ] = mfcbb; - distribution.f[dir::PZZ] = mfabb; - distribution.f[dir::ZMZ] = mfbcb; - distribution.f[dir::ZPZ] = mfbab; - distribution.f[dir::ZZM] = mfbbc; - distribution.f[dir::ZZP] = mfbba; - distribution.f[dir::MMZ] = mfccb; - distribution.f[dir::PPZ] = mfaab; - distribution.f[dir::MPZ] = mfcab; - distribution.f[dir::PMZ] = mfacb; - distribution.f[dir::MZM] = mfcbc; - distribution.f[dir::PZP] = mfaba; - distribution.f[dir::MZP] = mfcba; - distribution.f[dir::PZM] = mfabc; - distribution.f[dir::ZMM] = mfbcc; - distribution.f[dir::ZPP] = mfbaa; - distribution.f[dir::ZMP] = mfbca; - distribution.f[dir::ZPM] = mfbac; - distribution.f[dir::MMM] = mfccc; - distribution.f[dir::PMM] = mfacc; - distribution.f[dir::MPM] = mfcac; - distribution.f[dir::PPM] = mfaac; - distribution.f[dir::MMP] = mfcca; - distribution.f[dir::PMP] = mfaca; - distribution.f[dir::MPP] = mfcaa; - distribution.f[dir::PPP] = mfaaa; - distribution.f[dir::ZZZ] = mfbbb; -} - - -} - diff --git a/src/lbm/CumulantChimera.h b/src/lbm/CumulantChimera.h deleted file mode 100644 index c30a0c07912953cff45e3734c0b60fa7a03acd53..0000000000000000000000000000000000000000 --- a/src/lbm/CumulantChimera.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef LBM_CUMULANT_CHIMERA_H -#define LBM_CUMULANT_CHIMERA_H - -#ifndef __host__ -#define __host__ -#endif -#ifndef __device__ -#define __device__ -#endif - -#include <basics/DataTypes.h> - -#include "KernelParameter.h" - -namespace vf -{ -namespace lbm -{ - -__host__ __device__ void setRelaxationRatesK17(real omega, real &OxxPyyPzz, real &OxyyPxzz, real &OxyyMxzz, real &Oxyz, - real &O4, real &O5, real &O6); - -__host__ __device__ void setRelaxationRatesK15(real omega, real &OxxPyyPzz, real &OxyyPxzz, real &OxyyMxzz, real &Oxyz, - real &O4, real &O5, real &O6); - -using RelaxationRatesFunctor = void(*)(real omega, real &OxxPyyPzz, real &OxyyPxzz, real &OxyyMxzz, real &Oxyz, - real &O4, real &O5, real &O6); - - -__host__ __device__ void cumulantChimera(KernelParameter parameter, RelaxationRatesFunctor setRelaxationRates); - -} -} -#endif diff --git a/src/lbm/KernelParameter.cpp b/src/lbm/KernelParameter.cpp deleted file mode 100644 index 7bf5a369d0e5d4e673d79dcb30bc22fc2c330e68..0000000000000000000000000000000000000000 --- a/src/lbm/KernelParameter.cpp +++ /dev/null @@ -1,27 +0,0 @@ -#include "KernelParameter.h" - -#include <cmath> - -#include "MacroscopicQuantities.h" - - -namespace vf::lbm -{ - - -inline __host__ __device__ real Distribution27::getDensity_() const -{ - return getDensity(f); -} - -__host__ __device__ real abs_internal(real value) -{ -#ifdef __CUDA_ARCH__ - return ::abs(value); -#else - return std::abs(value); -#endif -} - - -} diff --git a/src/lbm/KernelParameter.h b/src/lbm/KernelParameter.h deleted file mode 100644 index 9c07524226a40aaa9e2c65e7ab028b07aec62ddc..0000000000000000000000000000000000000000 --- a/src/lbm/KernelParameter.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef LBM_KERNEL_PARAMETER_H -#define LBM_KERNEL_PARAMETER_H - -#ifndef __host__ -#define __host__ -#endif -#ifndef __device__ -#define __device__ -#endif - -#include <basics/DataTypes.h> - - -namespace vf::lbm -{ - -struct Distribution27 -{ - real f[27]; - - __host__ __device__ real getDensity_() const; -}; - - -__host__ __device__ real abs_internal(real value); - - -struct KernelParameter -{ - Distribution27& distribution; - real omega; - real* forces; -}; - - -} - -#endif diff --git a/src/lbm/MacroscopicQuantities.h b/src/lbm/MacroscopicQuantities.h index e1b066a104874a95701ff3a77f6747884c5a54d7..a81de110dcd7f53264546209a8ea0f3c0333aef9 100644 --- a/src/lbm/MacroscopicQuantities.h +++ b/src/lbm/MacroscopicQuantities.h @@ -21,13 +21,15 @@ namespace vf::lbm //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), DOI:10.1016/j.camwa 2015.05.001 ]</b></a> //! - inline __host__ __device__ real getDensity(const real *const &f /*[27]*/) { - return ((f[dir::DIR_PPP] + f[dir::DIR_MMM]) + (f[dir::DIR_PMP] + f[dir::DIR_MPM])) + ((f[dir::DIR_PMM] + f[dir::DIR_MPP]) + (f[dir::DIR_MMP] + f[dir::DIR_PPM])) + - (((f[dir::DIR_PP0] + f[dir::DIR_MM0]) + (f[dir::DIR_PM0] + f[dir::DIR_MP0])) + ((f[dir::DIR_P0P] + f[dir::DIR_M0M]) + (f[dir::DIR_P0M] + f[dir::DIR_M0P])) + - ((f[dir::DIR_0PM] + f[dir::DIR_0MP]) + (f[dir::DIR_0PP] + f[dir::DIR_0MM]))) + - ((f[dir::DIR_P00] + f[dir::DIR_M00]) + (f[dir::DIR_0P0] + f[dir::DIR_0M0]) + (f[dir::DIR_00P] + f[dir::DIR_00M])) + f[dir::DIR_000]; + return ((((f[dir::dPPP] + f[dir::dMMM]) + (f[dir::dMPM] + f[dir::dPMP])) + + ((f[dir::dMPP] + f[dir::dPMM]) + (f[dir::dMMP] + f[dir::dPPM]))) + + (((f[dir::d0MP] + f[dir::d0PM]) + (f[dir::d0MM] + f[dir::d0PP])) + + ((f[dir::dM0P] + f[dir::dP0M]) + (f[dir::dM0M] + f[dir::dP0P])) + + ((f[dir::dMP0] + f[dir::dPM0]) + (f[dir::dMM0] + f[dir::dPP0]))) + + f[dir::d000]) + + ((f[dir::dM00] + f[dir::dP00]) + (f[dir::d0M0] + f[dir::d0P0]) + (f[dir::d00M] + f[dir::d00P])); } /* @@ -35,22 +37,20 @@ inline __host__ __device__ real getDensity(const real *const &f /*[27]*/) */ inline __host__ __device__ real getIncompressibleVelocityX1(const real *const &f /*[27]*/) { - return ((((f[dir::DIR_PPP] - f[dir::DIR_MMM]) + (f[dir::DIR_PMP] - f[dir::DIR_MPM])) + ((f[dir::DIR_PMM] - f[dir::DIR_MPP]) + (f[dir::DIR_PPM] - f[dir::DIR_MMP]))) + - (((f[dir::DIR_P0M] - f[dir::DIR_M0P]) + (f[dir::DIR_P0P] - f[dir::DIR_M0M])) + ((f[dir::DIR_PM0] - f[dir::DIR_MP0]) + (f[dir::DIR_PP0] - f[dir::DIR_MM0]))) + (f[dir::DIR_P00] - f[dir::DIR_M00])); + return ((((f[dir::dPPP] - f[dir::dMMM]) + (f[dir::dPMP] - f[dir::dMPM])) + ((f[dir::dPMM] - f[dir::dMPP]) + (f[dir::dPPM] - f[dir::dMMP]))) + + (((f[dir::dP0M] - f[dir::dM0P]) + (f[dir::dP0P] - f[dir::dM0M])) + ((f[dir::dPM0] - f[dir::dMP0]) + (f[dir::dPP0] - f[dir::dMM0]))) + (f[dir::dP00] - f[dir::dM00])); } - inline __host__ __device__ real getIncompressibleVelocityX2(const real *const &f /*[27]*/) { - return ((((f[dir::DIR_PPP] - f[dir::DIR_MMM]) + (f[dir::DIR_MPM] - f[dir::DIR_PMP])) + ((f[dir::DIR_MPP] - f[dir::DIR_PMM]) + (f[dir::DIR_PPM] - f[dir::DIR_MMP]))) + - (((f[dir::DIR_0PM] - f[dir::DIR_0MP]) + (f[dir::DIR_0PP] - f[dir::DIR_0MM])) + ((f[dir::DIR_MP0] - f[dir::DIR_PM0]) + (f[dir::DIR_PP0] - f[dir::DIR_MM0]))) + (f[dir::DIR_0P0] - f[dir::DIR_0M0])); + return ((((f[dir::dPPP] - f[dir::dMMM]) + (f[dir::dMPM] - f[dir::dPMP])) + ((f[dir::dMPP] - f[dir::dPMM]) + (f[dir::dPPM] - f[dir::dMMP]))) + + (((f[dir::d0PM] - f[dir::d0MP]) + (f[dir::d0PP] - f[dir::d0MM])) + ((f[dir::dMP0] - f[dir::dPM0]) + (f[dir::dPP0] - f[dir::dMM0]))) + (f[dir::d0P0] - f[dir::d0M0])); } - inline __host__ __device__ real getIncompressibleVelocityX3(const real *const &f /*[27]*/) { - return ((((f[dir::DIR_PPP] - f[dir::DIR_MMM]) + (f[dir::DIR_PMP] - f[dir::DIR_MPM])) + ((f[dir::DIR_MPP] - f[dir::DIR_PMM]) + (f[dir::DIR_MMP] - f[dir::DIR_PPM]))) + - (((f[dir::DIR_0MP] - f[dir::DIR_0PM]) + (f[dir::DIR_0PP] - f[dir::DIR_0MM])) + ((f[dir::DIR_M0P] - f[dir::DIR_P0M]) + (f[dir::DIR_P0P] - f[dir::DIR_M0M]))) + (f[dir::DIR_00P] - f[dir::DIR_00M])); + return ((((f[dir::dPPP] - f[dir::dMMM]) + (f[dir::dPMP] - f[dir::dMPM])) + ((f[dir::dMPP] - f[dir::dPMM]) + (f[dir::dMMP] - f[dir::dPPM]))) + + (((f[dir::d0MP] - f[dir::d0PM]) + (f[dir::d0PP] - f[dir::d0MM])) + ((f[dir::dM0P] - f[dir::dP0M]) + (f[dir::dP0P] - f[dir::dM0M]))) + (f[dir::d00P] - f[dir::d00M])); } inline __host__ __device__ void getIncompressibleMacroscopicValues(const real *const &f /*[27]*/, real &rho, real &vx1, real &vx2, real &vx3) @@ -107,12 +107,12 @@ inline __host__ __device__ void getCompressibleMacroscopicValues(const real *con */ inline __host__ __device__ real getPressure(const real *const &f27, const real& rho, const real& vx, const real& vy, const real& vz) { - return (f27[dir::DIR_P00] + f27[dir::DIR_M00] + f27[dir::DIR_0P0] + f27[dir::DIR_0M0] + f27[dir::DIR_00P] + f27[dir::DIR_00M] + - basics::constant::c2o1 * (f27[dir::DIR_PP0] + f27[dir::DIR_MM0] + f27[dir::DIR_PM0] + f27[dir::DIR_MP0] + f27[dir::DIR_P0P] + - f27[dir::DIR_M0M] + f27[dir::DIR_P0M] + f27[dir::DIR_M0P] + f27[dir::DIR_0PP] + f27[dir::DIR_0MM] + - f27[dir::DIR_0PM] + f27[dir::DIR_0MP]) + - basics::constant::c3o1 * (f27[dir::DIR_PPP] + f27[dir::DIR_MMP] + f27[dir::DIR_PMP] + f27[dir::DIR_MPP] + - f27[dir::DIR_PPM] + f27[dir::DIR_MMM] + f27[dir::DIR_PMM] + f27[dir::DIR_MPM]) - + return (f27[dir::dP00] + f27[dir::dM00] + f27[dir::d0P0] + f27[dir::d0M0] + f27[dir::d00P] + f27[dir::d00M] + + basics::constant::c2o1 * (f27[dir::dPP0] + f27[dir::dMM0] + f27[dir::dPM0] + f27[dir::dMP0] + f27[dir::dP0P] + + f27[dir::dM0M] + f27[dir::dP0M] + f27[dir::dM0P] + f27[dir::d0PP] + f27[dir::d0MM] + + f27[dir::d0PM] + f27[dir::d0MP]) + + basics::constant::c3o1 * (f27[dir::dPPP] + f27[dir::dMMP] + f27[dir::dPMP] + f27[dir::dMPP] + + f27[dir::dPPM] + f27[dir::dMMM] + f27[dir::dPMM] + f27[dir::dMPM]) - rho - (vx * vx + vy * vy + vz * vz) * (basics::constant::c1o1 + rho)) * basics::constant::c1o2 + rho; // times zero for incompressible case // Attention: op defined directly to op = 1 ; ^^^^(1.0/op-0.5)=0.5 diff --git a/src/lbm/MacroscopicQuantitiesTests.cpp b/src/lbm/MacroscopicQuantitiesTests.cpp index b39387ae7ac741cc4dc36b4c58de4bad43052793..246c3370e48225c2b31b6d89d0bc6314e18975da 100644 --- a/src/lbm/MacroscopicQuantitiesTests.cpp +++ b/src/lbm/MacroscopicQuantitiesTests.cpp @@ -47,7 +47,7 @@ TEST_F(MacroscopicQuantitiesTest, whenFsAreEqual_velocityInEachDirectionShouldBe TEST_F(MacroscopicQuantitiesTest, givenAllFsAreOne_when_Eis2_velocityInX1ShouldBeOne) { - f[dir::DIR_P00] = 2.; + f[dir::dP00] = 2.; const double velocityX1 = getIncompressibleVelocityX1(f.data()); const double velocityX2 = getIncompressibleVelocityX2(f.data()); @@ -64,7 +64,7 @@ TEST_F(MacroscopicQuantitiesTest, givenAllFsAreOne_when_Eis2_velocityInX1ShouldB TEST_F(MacroscopicQuantitiesTest, givenAllFsAreOne_when_Nis2_velocityInX2ShouldBeOne) { - f[dir::DIR_0P0] = 2.; + f[dir::d0P0] = 2.; const double velocity = getIncompressibleVelocityX2(f.data()); @@ -75,7 +75,7 @@ TEST_F(MacroscopicQuantitiesTest, givenAllFsAreOne_when_Nis2_velocityInX2ShouldB TEST_F(MacroscopicQuantitiesTest, givenAllFsAreOne_when_Tis2_velocityInX3ShouldBeOne) { - f[dir::DIR_00P] = 2.; + f[dir::d00P] = 2.; const double velocity = getIncompressibleVelocityX3(f.data()); @@ -85,7 +85,7 @@ TEST_F(MacroscopicQuantitiesTest, givenAllFsAreOne_when_Tis2_velocityInX3ShouldB TEST_F(MacroscopicQuantitiesTest, givenAllFsAreOne_checkCompressibleValues) { - f[dir::DIR_P00] = 2.; + f[dir::dP00] = 2.; real rho{0}, vx1{0}, vx2{0}, vx3{0}; getCompressibleMacroscopicValues(f.data(), rho, vx1, vx2, vx3); diff --git a/src/lbm/collision/CollisionParameter.h b/src/lbm/collision/CollisionParameter.h new file mode 100644 index 0000000000000000000000000000000000000000..1f358f32f5bcf6116ade856442e2a6c1fe1627a1 --- /dev/null +++ b/src/lbm/collision/CollisionParameter.h @@ -0,0 +1,35 @@ +#ifndef LBM_KERNEL_PARAMETER_H +#define LBM_KERNEL_PARAMETER_H + +#include <basics/DataTypes.h> + +namespace vf::lbm +{ + +struct CollisionParameter +{ + real distribution[27]; + real omega; + real* quadricLimiter; + real forceX; + real forceY; + real forceZ; +}; + +struct TurbulentViscosity +{ + real SGSconstant; + real value { 0. }; +}; + +struct MacroscopicValues +{ + real vx { 0. }; + real vy { 0. }; + real vz { 0. }; + real rho { 0. }; +}; + +} // namespace vf::lbm + +#endif diff --git a/src/lbm/collision/K17CompressibleNavierStokes.h b/src/lbm/collision/K17CompressibleNavierStokes.h new file mode 100644 index 0000000000000000000000000000000000000000..a0a4b9dcd70582952b4b77c6db2a7866b82186bc --- /dev/null +++ b/src/lbm/collision/K17CompressibleNavierStokes.h @@ -0,0 +1,589 @@ + +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ +// \ | | | | |_____ | \_/ | | | | |_/ / _____ | +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// +// 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/>. +// +//! \file CumlantK17_Device.cu +//! \author Anna Wellmann, Martin Schönherr, Henry Korb, Henrik Asmuth +//! \date 05/12/2022 +//! \brief Kernel for CumulantK17 including different turbulence models and options for local body forces and writing +//! macroscopic variables +//! +//! CumulantK17 kernel using chimera transformations and quartic limiters as present in Geier et al. (2017). Additional +//! options are three different eddy-viscosity turbulence models (Smagorinsky, AMD, QR) that can be set via the template +//! parameter turbulenceModel (with default TurbulenceModel::None). The kernel is executed separately for each subset of +//! fluid node indices with a different tag CollisionTemplate. For each subset, only the locally required options are +//! switched on ( \param writeMacroscopicVariables and/or \param applyBodyForce) in order to minimize memory accesses. The +//! default refers to the plain cumlant kernel (CollisionTemplate::Default). Nodes are added to subsets (taggedFluidNodes) in +//! Simulation::init using a corresponding tag with different values of CollisionTemplate. These subsets are provided by the +//! utilized PostCollisionInteractiors depending on they specific requirements (e.g. writeMacroscopicVariables for probes). + +//======================================================================================= +#include <basics/constants/NumericConstants.h> + +#include "lbm/constants/D3Q27.h" + +#include "ChimeraTransformation.h" + +#include "TurbulentViscosity.h" + +#include "MacroscopicQuantities.h" + +#include "CollisionParameter.h" + +#ifndef __host__ +#define __host__ +#endif +#ifndef __device__ +#define __device__ +#endif + +#ifdef __CUDACC__ +#define KERNEL_ABS abs +#else +#include <cmath> +#define KERNEL_ABS std::abs +#endif + +using namespace vf::basics::constant; +using namespace vf::lbm::dir; + +namespace vf::lbm +{ + +////////////////////////////////////////////////////////////////////////// +//! Cumulant K17 Kernel is based on \ref +//! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 +//! ]</b></a> and \ref <a href="https://doi.org/10.1016/j.jcp.2017.07.004"><b>[ M. Geier et al. (2017), +//! DOI:10.1016/j.jcp.2017.07.004 ]</b></a> +//////////////////////////////////////////////////////////////////////////////// +template <TurbulenceModel turbulenceModel> +__host__ __device__ void runK17CompressibleNavierStokes(CollisionParameter& parameter, MacroscopicValues& macroscopicValues, TurbulentViscosity& turbulentViscosity) +{ + auto& distribution = parameter.distribution; + + real& f000 = distribution[d000]; + real& fP00 = distribution[dP00]; + real& fM00 = distribution[dM00]; + real& f0P0 = distribution[d0P0]; + real& f0M0 = distribution[d0M0]; + real& f00P = distribution[d00P]; + real& f00M = distribution[d00M]; + real& fPP0 = distribution[dPP0]; + real& fMM0 = distribution[dMM0]; + real& fPM0 = distribution[dPM0]; + real& fMP0 = distribution[dMP0]; + real& fP0P = distribution[dP0P]; + real& fM0M = distribution[dM0M]; + real& fP0M = distribution[dP0M]; + real& fM0P = distribution[dM0P]; + real& f0PP = distribution[d0PP]; + real& f0MM = distribution[d0MM]; + real& f0PM = distribution[d0PM]; + real& f0MP = distribution[d0MP]; + real& fPPP = distribution[dPPP]; + real& fMPP = distribution[dMPP]; + real& fPMP = distribution[dPMP]; + real& fMMP = distribution[dMMP]; + real& fPPM = distribution[dPPM]; + real& fMPM = distribution[dMPM]; + real& fPMM = distribution[dPMM]; + real& fMMM = distribution[dMMM]; + + //////////////////////////////////////////////////////////////////////////////////// + //! - Define aliases to use the same variable for the moments (m's): + //! + real& m111 = f000; + real& m211 = fP00; + real& m011 = fM00; + real& m121 = f0P0; + real& m101 = f0M0; + real& m112 = f00P; + real& m110 = f00M; + real& m221 = fPP0; + real& m001 = fMM0; + real& m201 = fPM0; + real& m021 = fMP0; + real& m212 = fP0P; + real& m010 = fM0M; + real& m210 = fP0M; + real& m012 = fM0P; + real& m122 = f0PP; + real& m100 = f0MM; + real& m120 = f0PM; + real& m102 = f0MP; + real& m222 = fPPP; + real& m022 = fMPP; + real& m202 = fPMP; + real& m002 = fMMP; + real& m220 = fPPM; + real& m020 = fMPM; + real& m200 = fPMM; + real& m000 = fMMM; + + //////////////////////////////////////////////////////(unsigned long)////////////////////////////// + //! - Calculate density and velocity using pyramid summation for low round-off errors as in Eq. (J1)-(J3) \ref + //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), + //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> + //! + real drho, oneOverRho, vvx, vvy, vvz; + getCompressibleMacroscopicValues(distribution, drho, oneOverRho, vvx, vvy, vvz); + + //////////////////////////////////////////////////////////////////////////////////// + //! - Add half of the acceleration (body force) to the velocity as in Eq. (42) \ref + //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), + //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> + //! + vvx += parameter.forceX; + vvy += parameter.forceY; + vvz += parameter.forceZ; + + //////////////////////////////////////////////////////////////////////////////////// + // calculate the square of velocities for this lattice node + real vx2 = vvx * vvx; + real vy2 = vvy * vvy; + real vz2 = vvz * vvz; + //////////////////////////////////////////////////////////////////////////////////// + //! - Set relaxation limiters for third order cumulants to default value \f$ \lambda=0.001 \f$ according to + //! section 6 in \ref <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), + //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> + //! + real quadricLimitP = parameter.quadricLimiter[0]; + real quadricLimitM = parameter.quadricLimiter[1]; + real quadricLimitD = parameter.quadricLimiter[2]; + //////////////////////////////////////////////////////////////////////////////////// + //! - Chimera transform from well conditioned distributions to central moments as defined in Appendix J in \ref + //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), + //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> see also Eq. (6)-(14) in \ref <a + //! href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 + //! ]</b></a> + //! + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + forwardInverseChimeraWithK(fMMM, fMM0, fMMP, vvz, vz2, c36o1, c1o36); + forwardInverseChimeraWithK(fM0M, fM00, fM0P, vvz, vz2, c9o1, c1o9); + forwardInverseChimeraWithK(fMPM, fMP0, fMPP, vvz, vz2, c36o1, c1o36); + forwardInverseChimeraWithK(f0MM, f0M0, f0MP, vvz, vz2, c9o1, c1o9); + forwardInverseChimeraWithK(f00M, f000, f00P, vvz, vz2, c9o4, c4o9); + forwardInverseChimeraWithK(f0PM, f0P0, f0PP, vvz, vz2, c9o1, c1o9); + forwardInverseChimeraWithK(fPMM, fPM0, fPMP, vvz, vz2, c36o1, c1o36); + forwardInverseChimeraWithK(fP0M, fP00, fP0P, vvz, vz2, c9o1, c1o9); + forwardInverseChimeraWithK(fPPM, fPP0, fPPP, vvz, vz2, c36o1, c1o36); + + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + forwardInverseChimeraWithK(fMMM, fM0M, fMPM, vvy, vy2, c6o1, c1o6); + forwardChimera( fMM0, fM00, fMP0, vvy, vy2); + forwardInverseChimeraWithK(fMMP, fM0P, fMPP, vvy, vy2, c18o1, c1o18); + forwardInverseChimeraWithK(f0MM, f00M, f0PM, vvy, vy2, c3o2, c2o3); + forwardChimera( f0M0, f000, f0P0, vvy, vy2); + forwardInverseChimeraWithK(f0MP, f00P, f0PP, vvy, vy2, c9o2, c2o9); + forwardInverseChimeraWithK(fPMM, fP0M, fPPM, vvy, vy2, c6o1, c1o6); + forwardChimera( fPM0, fP00, fPP0, vvy, vy2); + forwardInverseChimeraWithK(fPMP, fP0P, fPPP, vvy, vy2, c18o1, c1o18); + + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + forwardInverseChimeraWithK(fMMM, f0MM, fPMM, vvx, vx2, c1o1, c1o1); + forwardChimera( fM0M, f00M, fP0M, vvx, vx2); + forwardInverseChimeraWithK(fMPM, f0PM, fPPM, vvx, vx2, c3o1, c1o3); + forwardChimera( fMM0, f0M0, fPM0, vvx, vx2); + forwardChimera( fM00, f000, fP00, vvx, vx2); + forwardChimera( fMP0, f0P0, fPP0, vvx, vx2); + forwardInverseChimeraWithK(fMMP, f0MP, fPMP, vvx, vx2, c3o1, c1o3); + forwardChimera( fM0P, f00P, fP0P, vvx, vx2); + forwardInverseChimeraWithK(fMPP, f0PP, fPPP, vvx, vx2, c3o1, c1o9); + + //////////////////////////////////////////////////////////////////////////////////// + //! - Setting relaxation rates for non-hydrodynamic cumulants (default values). Variable names and equations + //! according to <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), + //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> + //! => [NAME IN PAPER]=[NAME IN CODE]=[DEFAULT VALUE]. + //! - Trace of second order cumulants \f$ C{200}+C{020}+C{002} \f$ used to adjust bulk + //! viscosity:\f$\omega2=OxxPyyPzz=1.0 \f$. + //! - Third order cumulants \f$ C{120}+C{102}, C{210}+C{012}, C{201}+C{021} \f$: \f$ \omega3=OxyyPxzz + //! \f$ set according to Eq. (111) with simplifications assuming \f$ \omega2=1.0\f$. + //! - Third order cumulants \f$ C{120}-C{102}, C{210}-C{012}, C{201}-C{021} \f$: \f$ \omega4 = OxyyMxzz + //! \f$ set according to Eq. (112) with simplifications assuming \f$ \omega2 = 1.0\f$. + //! - Third order cumulants \f$ C{111} \f$: \f$ \omega5 = Oxyz \f$ set according to Eq. (113) with + //! simplifications assuming \f$ \omega2 = 1.0\f$ (modify for different bulk viscosity). + //! - Fourth order cumulants \f$ C{220}, C{202}, C{022}, C{211}, C{121}, C{112} \f$: for simplification + //! all set to the same default value \f$ \omega6=\omega7=\omega8=O4=1.0 \f$. + //! - Fifth order cumulants \f$ C{221}, C{212}, C{122}\f$: \f$\omega9=O5=1.0\f$. + //! - Sixth order cumulant \f$ C{222}\f$: \f$\omega{10}=O6=1.0\f$. + //! + //////////////////////////////////////////////////////////////////////////////////// + //! - Calculate modified omega with turbulent viscosity + //! + const real omega = turbulenceModel == TurbulenceModel::None ? parameter.omega : vf::lbm::calculateOmegaWithturbulentViscosity(parameter.omega, turbulentViscosity.value); + //////////////////////////////////////////////////////////// + // 2. + real OxxPyyPzz = c1o1; + //////////////////////////////////////////////////////////// + // 3. + real OxyyPxzz = c8o1 * (-c2o1 + omega) * (c1o1 + c2o1 * omega) / (-c8o1 - c14o1 * omega + c7o1 * omega * omega); + real OxyyMxzz = + c8o1 * (-c2o1 + omega) * (-c7o1 + c4o1 * omega) / (c56o1 - c50o1 * omega + c9o1 * omega * omega); + real Oxyz = c24o1 * (-c2o1 + omega) * (-c2o1 - c7o1 * omega + c3o1 * omega * omega) / + (c48o1 + c152o1 * omega - c130o1 * omega * omega + c29o1 * omega * omega * omega); + //////////////////////////////////////////////////////////// + // 4. + real O4 = c1o1; + //////////////////////////////////////////////////////////// + // 5. + real O5 = c1o1; + //////////////////////////////////////////////////////////// + // 6. + real O6 = c1o1; + + //////////////////////////////////////////////////////////////////////////////////// + //! - A and d00M: parameters for fourth order convergence of the diffusion term according to Eq. (115) and (116) + //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), + //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> with simplifications assuming \f$ \omega_2 = 1.0 \f$ (modify for + //! different bulk viscosity). + //! + real factorA = (c4o1 + c2o1 * omega - c3o1 * omega * omega) / (c2o1 - c7o1 * omega + c5o1 * omega * omega); + real factorB = (c4o1 + c28o1 * omega - c14o1 * omega * omega) / (c6o1 - c21o1 * omega + c15o1 * omega * omega); + + //////////////////////////////////////////////////////////////////////////////////// + //! - Compute cumulants from central moments according to Eq. (20)-(23) in + //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), + //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> + //! + //////////////////////////////////////////////////////////// + // 4. + real cm211 = m211 - ((m200 + c1o3) * m011 + c2o1 * m110 * m101) * oneOverRho; + real cm121 = m121 - ((m020 + c1o3) * m101 + c2o1 * m110 * m011) * oneOverRho; + real cm112 = m112 - ((m002 + c1o3) * m110 + c2o1 * m101 * m011) * oneOverRho; + + real cm220 = m220 - (((m200 * m020 + c2o1 * m110 * m110) + c1o3 * (m200 + m020)) * oneOverRho - c1o9 * (drho * oneOverRho)); + real cm202 = m202 - (((m200 * m002 + c2o1 * m101 * m101) + c1o3 * (m200 + m002)) * oneOverRho - c1o9 * (drho * oneOverRho)); + real cm022 = m022 - (((m002 * m020 + c2o1 * m011 * m011) + c1o3 * (m002 + m020)) * oneOverRho - c1o9 * (drho * oneOverRho)); + //////////////////////////////////////////////////////////// + // 5. + real cm122 = + m122 - ((m002 * m120 + m020 * m102 + c4o1 * m011 * m111 + c2o1 * (m101 * m021 + m110 * m012)) + + c1o3 * (m120 + m102)) * + oneOverRho; + real cm212 = + m212 - ((m002 * m210 + m200 * m012 + c4o1 * m101 * m111 + c2o1 * (m011 * m201 + m110 * m102)) + + c1o3 * (m210 + m012)) * + oneOverRho; + real cm221 = + m221 - ((m200 * m021 + m020 * m201 + c4o1 * m110 * m111 + c2o1 * (m101 * m120 + m011 * m210)) + + c1o3 * (m021 + m201)) * + oneOverRho; + //////////////////////////////////////////////////////////// + // 6. + real cm222 = m222 + ((-c4o1 * m111 * m111 - (m200 * m022 + m020 * m202 + m002 * m220) - + c4o1 * (m011 * m211 + m101 * m121 + m110 * m112) - + c2o1 * (m120 * m102 + m210 * m012 + m201 * m021)) * + oneOverRho + + (c4o1 * (m101 * m101 * m020 + m011 * m011 * m200 + m110 * m110 * m002) + + c2o1 * (m200 * m020 * m002) + c16o1 * m110 * m101 * m011) * + oneOverRho * oneOverRho - + c1o3 * (m022 + m202 + m220) * oneOverRho - c1o9 * (m200 + m020 + m002) * oneOverRho + + (c2o1 * (m101 * m101 + m011 * m011 + m110 * m110) + + (m002 * m020 + m002 * m200 + m020 * m200) + c1o3 * (m002 + m020 + m200)) * + oneOverRho * oneOverRho * c2o3 + + c1o27 * ((drho * drho - drho) * oneOverRho * oneOverRho)); + + //////////////////////////////////////////////////////////////////////////////////// + //! - Compute linear combinations of second and third order cumulants + //! + //////////////////////////////////////////////////////////// + // 2. + real mxxPyyPzz = m200 + m020 + m002; + real mxxMyy = m200 - m020; + real mxxMzz = m200 - m002; + //////////////////////////////////////////////////////////// + // 3. + real mxxyPyzz = m210 + m012; + real mxxyMyzz = m210 - m012; + + real mxxzPyyz = m201 + m021; + real mxxzMyyz = m201 - m021; + + real mxyyPxzz = m120 + m102; + real mxyyMxzz = m120 - m102; + + //////////////////////////////////////////////////////////////////////////////////// + // incl. correction + //////////////////////////////////////////////////////////// + //! - Compute velocity gradients from second order cumulants according to Eq. (27)-(32) + //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), + //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> Further explanations of the correction in viscosity in Appendix H of + //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), + //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> Note that the division by rho is omitted here as we need rho times + //! the gradients later. + //! + real Dxy = -c3o1 * omega * m110; + real Dxz = -c3o1 * omega * m101; + real Dyz = -c3o1 * omega * m011; + real dxux = c1o2 * (-omega) * (mxxMyy + mxxMzz) + c1o2 * OxxPyyPzz * (m000 - mxxPyyPzz); + real dyuy = dxux + omega * c3o2 * mxxMyy; + real dzuz = dxux + omega * c3o2 * mxxMzz; + + //////////////////////////////////////////////////////////////////////////////////// + switch (turbulenceModel) { + case TurbulenceModel::None: + case TurbulenceModel::AMD: // AMD is computed in separate kernel + break; + case TurbulenceModel::Smagorinsky: + turbulentViscosity.value = + calcTurbulentViscositySmagorinsky(turbulentViscosity.SGSconstant, dxux, dyuy, dzuz, Dxy, Dxz, Dyz); + break; + case TurbulenceModel::QR: + turbulentViscosity.value = + calcTurbulentViscosityQR(turbulentViscosity.SGSconstant, dxux, dyuy, dzuz, Dxy, Dxz, Dyz); + break; + default: + break; + } + //////////////////////////////////////////////////////////// + //! - Relaxation of second order cumulants with correction terms according to Eq. (33)-(35) in + //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), + //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> + //! + mxxPyyPzz += OxxPyyPzz * (m000 - mxxPyyPzz) - c3o1 * (c1o1 - c1o2 * OxxPyyPzz) * (vx2 * dxux + vy2 * dyuy + vz2 * dzuz); + mxxMyy += omega * (-mxxMyy) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vy2 * dyuy); + mxxMzz += omega * (-mxxMzz) - c3o1 * (c1o1 + c1o2 * (-omega)) * (vx2 * dxux - vz2 * dzuz); + + //////////////////////////////////////////////////////////////////////////////////// + ////no correction + // mxxPyyPzz += OxxPyyPzz*(mfaaa - mxxPyyPzz); + // mxxMyy += -(-omega) * (-mxxMyy); + // mxxMzz += -(-omega) * (-mxxMzz); + ////////////////////////////////////////////////////////////////////////// + m011 += omega * (-m011); + m101 += omega * (-m101); + m110 += omega * (-m110); + + //////////////////////////////////////////////////////////////////////////////////// + // relax + ////////////////////////////////////////////////////////////////////////// + // incl. limiter + //! - Relaxation of third order cumulants including limiter according to Eq. (116)-(123) + //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), + //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> + //! + real wadjust = Oxyz + (c1o1 - Oxyz) * KERNEL_ABS(m111) / (KERNEL_ABS(m111) + quadricLimitD); + m111 += wadjust * (-m111); + wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * KERNEL_ABS(mxxyPyzz) / (KERNEL_ABS(mxxyPyzz) + quadricLimitP); + mxxyPyzz += wadjust * (-mxxyPyzz); + wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * KERNEL_ABS(mxxyMyzz) / (KERNEL_ABS(mxxyMyzz) + quadricLimitM); + mxxyMyzz += wadjust * (-mxxyMyzz); + wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * KERNEL_ABS(mxxzPyyz) / (KERNEL_ABS(mxxzPyyz) + quadricLimitP); + mxxzPyyz += wadjust * (-mxxzPyyz); + wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * KERNEL_ABS(mxxzMyyz) / (KERNEL_ABS(mxxzMyyz) + quadricLimitM); + mxxzMyyz += wadjust * (-mxxzMyyz); + wadjust = OxyyPxzz + (c1o1 - OxyyPxzz) * KERNEL_ABS(mxyyPxzz) / (KERNEL_ABS(mxyyPxzz) + quadricLimitP); + mxyyPxzz += wadjust * (-mxyyPxzz); + wadjust = OxyyMxzz + (c1o1 - OxyyMxzz) * KERNEL_ABS(mxyyMxzz) / (KERNEL_ABS(mxyyMxzz) + quadricLimitM); + mxyyMxzz += wadjust * (-mxyyMxzz); + ////////////////////////////////////////////////////////////////////////// + // no limiter + // mfbbb += OxyyMxzz * (-mfbbb); + // mxxyPyzz += OxyyPxzz * (-mxxyPyzz); + // mxxyMyzz += OxyyMxzz * (-mxxyMyzz); + // mxxzPyyz += OxyyPxzz * (-mxxzPyyz); + // mxxzMyyz += OxyyMxzz * (-mxxzMyyz); + // mxyyPxzz += OxyyPxzz * (-mxyyPxzz); + // mxyyMxzz += OxyyMxzz * (-mxyyMxzz); + + //////////////////////////////////////////////////////////////////////////////////// + //! - Compute inverse linear combinations of second and third order cumulants + //! + m200 = c1o3 * (mxxMyy + mxxMzz + mxxPyyPzz); + m020 = c1o3 * (-c2o1 * mxxMyy + mxxMzz + mxxPyyPzz); + m002 = c1o3 * (mxxMyy - c2o1 * mxxMzz + mxxPyyPzz); + + m210 = ( mxxyMyzz + mxxyPyzz) * c1o2; + m012 = (-mxxyMyzz + mxxyPyzz) * c1o2; + m201 = ( mxxzMyyz + mxxzPyyz) * c1o2; + m021 = (-mxxzMyyz + mxxzPyyz) * c1o2; + m120 = ( mxyyMxzz + mxyyPxzz) * c1o2; + m102 = (-mxyyMxzz + mxyyPxzz) * c1o2; + ////////////////////////////////////////////////////////////////////////// + + ////////////////////////////////////////////////////////////////////////// + // 4. + // no limiter + //! - Relax fourth order cumulants to modified equilibrium for fourth order convergence of diffusion according + //! to Eq. (43)-(48) <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), + //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> + //! + cm022 = -O4 * (c1o1 / omega - c1o2) * (dyuy + dzuz) * c2o3 * factorA + (c1o1 - O4) * (cm022); + cm202 = -O4 * (c1o1 / omega - c1o2) * (dxux + dzuz) * c2o3 * factorA + (c1o1 - O4) * (cm202); + cm220 = -O4 * (c1o1 / omega - c1o2) * (dyuy + dxux) * c2o3 * factorA + (c1o1 - O4) * (cm220); + cm112 = -O4 * (c1o1 / omega - c1o2) * Dxy * c1o3 * factorB + (c1o1 - O4) * (cm112); + cm121 = -O4 * (c1o1 / omega - c1o2) * Dxz * c1o3 * factorB + (c1o1 - O4) * (cm121); + cm211 = -O4 * (c1o1 / omega - c1o2) * Dyz * c1o3 * factorB + (c1o1 - O4) * (cm211); + + + ////////////////////////////////////////////////////////////////////////// + // 5. + cm122 += O5 * (-cm122); + cm212 += O5 * (-cm212); + cm221 += O5 * (-cm221); + + ////////////////////////////////////////////////////////////////////////// + // 6. + cm222 += O6 * (-cm222); + + //////////////////////////////////////////////////////////////////////////////////// + //! - Compute central moments from post collision cumulants according to Eq. (53)-(56) in + //! <a href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), + //! DOI:10.1016/j.jcp.2017.05.040 ]</b></a> + //! + + ////////////////////////////////////////////////////////////////////////// + // 4. + m211 = cm211 + c1o3 * ((c3o1 * m200 + c1o1) * m011 + c6o1 * m110 * m101) * oneOverRho; + m121 = cm121 + c1o3 * ((c3o1 * m020 + c1o1) * m101 + c6o1 * m110 * m011) * oneOverRho; + m112 = cm112 + c1o3 * ((c3o1 * m002 + c1o1) * m110 + c6o1 * m101 * m011) * oneOverRho; + + m220 = + cm220 + (((m200 * m020 + c2o1 * m110 * m110) * c9o1 + c3o1 * (m200 + m020)) * oneOverRho - (drho * oneOverRho)) * c1o9; + m202 = + cm202 + (((m200 * m002 + c2o1 * m101 * m101) * c9o1 + c3o1 * (m200 + m002)) * oneOverRho - (drho * oneOverRho)) * c1o9; + m022 = + cm022 + (((m002 * m020 + c2o1 * m011 * m011) * c9o1 + c3o1 * (m002 + m020)) * oneOverRho - (drho * oneOverRho)) * c1o9; + + ////////////////////////////////////////////////////////////////////////// + // 5. + m122 = cm122 + c1o3 * + (c3o1 * (m002 * m120 + m020 * m102 + c4o1 * m011 * m111 + c2o1 * (m101 * m021 + m110 * m012)) + + (m120 + m102)) * oneOverRho; + m212 = cm212 + c1o3 * + (c3o1 * (m002 * m210 + m200 * m012 + c4o1 * m101 * m111 + c2o1 * (m011 * m201 + m110 * m102)) + + (m210 + m012)) * oneOverRho; + m221 = cm221 + c1o3 * + (c3o1 * (m200 * m021 + m020 * m201 + c4o1 * m110 * m111 + c2o1 * (m101 * m120 + m011 * m210)) + + (m021 + m201)) * oneOverRho; + + ////////////////////////////////////////////////////////////////////////// + // 6. + m222 = cm222 - ((-c4o1 * m111 * m111 - (m200 * m022 + m020 * m202 + m002 * m220) - + c4o1 * (m011 * m211 + m101 * m121 + m110 * m112) - + c2o1 * (m120 * m102 + m210 * m012 + m201 * m021)) * + oneOverRho + + (c4o1 * (m101 * m101 * m020 + m011 * m011 * m200 + m110 * m110 * m002) + + c2o1 * (m200 * m020 * m002) + c16o1 * m110 * m101 * m011) * + oneOverRho * oneOverRho - + c1o3 * (m022 + m202 + m220) * oneOverRho - c1o9 * (m200 + m020 + m002) * oneOverRho + + (c2o1 * (m101 * m101 + m011 * m011 + m110 * m110) + + (m002 * m020 + m002 * m200 + m020 * m200) + c1o3 * (m002 + m020 + m200)) * + oneOverRho * oneOverRho * c2o3 + + c1o27 * ((drho * drho - drho) * oneOverRho * oneOverRho)); + + //////////////////////////////////////////////////////////////////////////////////// + //! - Add acceleration (body force) to first order cumulants according to Eq. (85)-(87) in + //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), + //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> + //! + m100 = -m100; + m010 = -m010; + m001 = -m001; + + //////////////////////////////////////////////////////////////////////////////////// + //! - Chimera transform from central moments to well conditioned distributions as defined in Appendix J in + //! <a href="https://doi.org/10.1016/j.camwa.2015.05.001"><b>[ M. Geier et al. (2015), + //! DOI:10.1016/j.camwa.2015.05.001 ]</b></a> see also Eq. (88)-(96) in <a + //! href="https://doi.org/10.1016/j.jcp.2017.05.040"><b>[ M. Geier et al. (2017), DOI:10.1016/j.jcp.2017.05.040 + //! ]</b></a> + //! + //////////////////////////////////////////////////////////////////////////////////// + // X - Dir + backwardInverseChimeraWithK(m000, m100, m200, vvx, vx2, c1o1, c1o1); + backwardChimera( m010, m110, m210, vvx, vx2); + backwardInverseChimeraWithK(m020, m120, m220, vvx, vx2, c3o1, c1o3); + backwardChimera( m001, m101, m201, vvx, vx2); + backwardChimera( m011, m111, m211, vvx, vx2); + backwardChimera( m021, m121, m221, vvx, vx2); + backwardInverseChimeraWithK(m002, m102, m202, vvx, vx2, c3o1, c1o3); + backwardChimera( m012, m112, m212, vvx, vx2); + backwardInverseChimeraWithK(m022, m122, m222, vvx, vx2, c9o1, c1o9); + + //////////////////////////////////////////////////////////////////////////////////// + // Y - Dir + backwardInverseChimeraWithK(m000, m010, m020, vvy, vy2, c6o1, c1o6); + backwardChimera( m001, m011, m021, vvy, vy2); + backwardInverseChimeraWithK(m002, m012, m022, vvy, vy2, c18o1, c1o18); + backwardInverseChimeraWithK(m100, m110, m120, vvy, vy2, c3o2, c2o3); + backwardChimera( m101, m111, m121, vvy, vy2); + backwardInverseChimeraWithK(m102, m112, m122, vvy, vy2, c9o2, c2o9); + backwardInverseChimeraWithK(m200, m210, m220, vvy, vy2, c6o1, c1o6); + backwardChimera( m201, m211, m221, vvy, vy2); + backwardInverseChimeraWithK(m202, m212, m222, vvy, vy2, c18o1, c1o18); + + //////////////////////////////////////////////////////////////////////////////////// + // Z - Dir + backwardInverseChimeraWithK(m000, m001, m002, vvz, vz2, c36o1, c1o36); + backwardInverseChimeraWithK(m010, m011, m012, vvz, vz2, c9o1, c1o9); + backwardInverseChimeraWithK(m020, m021, m022, vvz, vz2, c36o1, c1o36); + backwardInverseChimeraWithK(m100, m101, m102, vvz, vz2, c9o1, c1o9); + backwardInverseChimeraWithK(m110, m111, m112, vvz, vz2, c9o4, c4o9); + backwardInverseChimeraWithK(m120, m121, m122, vvz, vz2, c9o1, c1o9); + backwardInverseChimeraWithK(m200, m201, m202, vvz, vz2, c36o1, c1o36); + backwardInverseChimeraWithK(m210, m211, m212, vvz, vz2, c9o1, c1o9); + backwardInverseChimeraWithK(m220, m221, m222, vvz, vz2, c36o1, c1o36); + + distribution[dP00] = fP00; + distribution[dM00] = fM00; + distribution[d0P0] = f0P0; + distribution[d0M0] = f0M0; + distribution[d00P] = f00P; + distribution[d00M] = f00M; + distribution[dPP0] = fPP0; + distribution[dMM0] = fMM0; + distribution[dPM0] = fPM0; + distribution[dMP0] = fMP0; + distribution[dP0P] = fP0P; + distribution[dM0M] = fM0M; + distribution[dP0M] = fP0M; + distribution[dM0P] = fM0P; + distribution[d0PP] = f0PP; + distribution[d0MM] = f0MM; + distribution[d0PM] = f0PM; + distribution[d0MP] = f0MP; + distribution[d000] = f000; + distribution[dPPP] = fPPP; + distribution[dPMP] = fPMP; + distribution[dPPM] = fPPM; + distribution[dPMM] = fPMM; + distribution[dMPP] = fMPP; + distribution[dMMP] = fMMP; + distribution[dMPM] = fMPM; + distribution[dMMM] = fMMM; + + macroscopicValues.rho = drho; + macroscopicValues.vx = vvx; + macroscopicValues.vy = vvy; + macroscopicValues.vz = vvz; +} + +} // namespace vf::lbm diff --git a/src/gpu/VirtualFluids_GPU/GPU/TurbulentViscosityInlines.cuh b/src/lbm/collision/TurbulentViscosity.h similarity index 57% rename from src/gpu/VirtualFluids_GPU/GPU/TurbulentViscosityInlines.cuh rename to src/lbm/collision/TurbulentViscosity.h index ebf67339b65782a5c10c1b756c3fe5e06c3977d1..13962b37f3b795ec9abee220af5e38c2e5106b2b 100644 --- a/src/gpu/VirtualFluids_GPU/GPU/TurbulentViscosityInlines.cuh +++ b/src/lbm/collision/TurbulentViscosity.h @@ -34,28 +34,62 @@ #ifndef TURBULENT_VISCOSITY_INLINES_CUH_ #define TURBULENT_VISCOSITY_INLINES_CUH_ -#include <cuda.h> -#include <cuda_runtime.h> +#ifndef __host__ +#define __host__ +#endif +#ifndef __device__ +#define __device__ +#endif -#include "LBM/LB.h" +#include <basics/DataTypes.h> #include <basics/constants/NumericConstants.h> using namespace vf::basics::constant; -__inline__ __device__ real calcTurbulentViscositySmagorinsky(real Cs, real dxux, real dyuy, real dzuz, real Dxy, real Dxz , real Dyz) +namespace vf::lbm { - return Cs*Cs * sqrt( c2o1 * ( dxux*dxux + dyuy*dyuy + dzuz*dzuz ) + Dxy*Dxy + Dxz*Dxz + Dyz*Dyz ); + +//! \brief An enumeration for selecting a turbulence model +enum class TurbulenceModel { + //! - Smagorinsky + Smagorinsky, + //! - AMD (Anisotropic Minimum Dissipation) model, see e.g. Rozema et al., Phys. Fluids 27, 085107 (2015), + //! https://doi.org/10.1063/1.4928700 + AMD, + //! - QR model by Verstappen + QR, + //! - No turbulence model + None +}; + +inline __host__ __device__ real calcTurbulentViscositySmagorinsky(real Cs, real dxux, real dyuy, real dzuz, real Dxy, real Dxz, + real Dyz) +{ + return Cs * Cs * sqrt(c2o1 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + Dxy * Dxy + Dxz * Dxz + Dyz * Dyz); +} + +template <typename T> +__host__ __device__ T max( T a, T b ) +{ + return ( a > b ) ? a : b; } -__inline__ __device__ real calcTurbulentViscosityQR(real C, real dxux, real dyuy, real dzuz, real Dxy, real Dxz , real Dyz) +inline __host__ __device__ real calcTurbulentViscosityQR(real C, real dxux, real dyuy, real dzuz, real Dxy, real Dxz, real Dyz) { - // ! Verstappen's QR model - //! Second invariant of the strain-rate tensor - real Q = c1o2*( dxux*dxux + dyuy*dyuy + dzuz*dzuz ) + c1o4*( Dxy*Dxy + Dxz*Dxz + Dyz*Dyz); - //! Third invariant of the strain-rate tensor (determinant) - // real R = - dxux*dyuy*dzuz - c1o4*( Dxy*Dxz*Dyz + dxux*Dyz*Dyz + dyuy*Dxz*Dxz + dzuz*Dxy*Dxy ); - real R = - dxux*dyuy*dzuz + c1o4*( -Dxy*Dxz*Dyz + dxux*Dyz*Dyz + dyuy*Dxz*Dxz + dzuz*Dxy*Dxy ); - return C * max(R, c0o1) / Q; + // ! Verstappen's QR model + //! Second invariant of the strain-rate tensor + real Q = c1o2 * (dxux * dxux + dyuy * dyuy + dzuz * dzuz) + c1o4 * (Dxy * Dxy + Dxz * Dxz + Dyz * Dyz); + //! Third invariant of the strain-rate tensor (determinant) + // real R = - dxux*dyuy*dzuz - c1o4*( Dxy*Dxz*Dyz + dxux*Dyz*Dyz + dyuy*Dxz*Dxz + dzuz*Dxy*Dxy ); + real R = -dxux * dyuy * dzuz + c1o4 * (-Dxy * Dxz * Dyz + dxux * Dyz * Dyz + dyuy * Dxz * Dxz + dzuz * Dxy * Dxy); + return C * max(R, c0o1) / Q; } -#endif //TURBULENT_VISCOSITY_H_e \ No newline at end of file +inline __host__ __device__ real calculateOmegaWithturbulentViscosity(real omega, real turbulenceViscosity) +{ + return omega / (c1o1 + c3o1 * omega * turbulenceViscosity); +} + +} // namespace vf::lbm + +#endif //TURBULENT_VISCOSITY_H diff --git a/src/lbm/constants/D3Q27.h b/src/lbm/constants/D3Q27.h index b6c05eae921ae66b43999ff01977f7a674ce505f..292af239e333b79d118150f0cfee5477e895d200 100644 --- a/src/lbm/constants/D3Q27.h +++ b/src/lbm/constants/D3Q27.h @@ -1,223 +1,68 @@ #ifndef LBM_D3Q27_H #define LBM_D3Q27_H -#include <map> -#include "basics/DataTypes.h" +#include <basics/DataTypes.h> namespace vf::lbm::dir { - static constexpr size_t STARTDIR = 0; static constexpr size_t ENDDIR = 26; - -// used in the CPU and the GPU version -static constexpr size_t DIR_000 = 0; -static constexpr size_t DIR_P00 = 1; -static constexpr size_t DIR_M00 = 2; -static constexpr size_t DIR_0P0 = 3; -static constexpr size_t DIR_0M0 = 4; -static constexpr size_t DIR_00P = 5; -static constexpr size_t DIR_00M = 6; -static constexpr size_t DIR_PP0 = 7; -static constexpr size_t DIR_MM0 = 8; -static constexpr size_t DIR_PM0 = 9; -static constexpr size_t DIR_MP0 = 10; -static constexpr size_t DIR_P0P = 11; -static constexpr size_t DIR_M0M = 12; -static constexpr size_t DIR_P0M = 13; -static constexpr size_t DIR_M0P = 14; -static constexpr size_t DIR_0PP = 15; -static constexpr size_t DIR_0MM = 16; -static constexpr size_t DIR_0PM = 17; -static constexpr size_t DIR_0MP = 18; -static constexpr size_t DIR_PPP = 19; -static constexpr size_t DIR_MPP = 20; -static constexpr size_t DIR_PMP = 21; -static constexpr size_t DIR_MMP = 22; -static constexpr size_t DIR_PPM = 23; -static constexpr size_t DIR_MPM = 24; -static constexpr size_t DIR_PMM = 25; -static constexpr size_t DIR_MMM = 26; - -static constexpr size_t INV_P00 = DIR_M00; -static constexpr size_t INV_M00 = DIR_P00; -static constexpr size_t INV_0P0 = DIR_0M0; -static constexpr size_t INV_0M0 = DIR_0P0; -static constexpr size_t INV_00P = DIR_00M; -static constexpr size_t INV_00M = DIR_00P; -static constexpr size_t INV_PP0 = DIR_MM0; -static constexpr size_t INV_MM0 = DIR_PP0; -static constexpr size_t INV_PM0 = DIR_MP0; -static constexpr size_t INV_MP0 = DIR_PM0; -static constexpr size_t INV_P0P = DIR_M0M; -static constexpr size_t INV_M0M = DIR_P0P; -static constexpr size_t INV_P0M = DIR_M0P; -static constexpr size_t INV_M0P = DIR_P0M; -static constexpr size_t INV_0PP = DIR_0MM; -static constexpr size_t INV_0MM = DIR_0PP; -static constexpr size_t INV_0PM = DIR_0MP; -static constexpr size_t INV_0MP = DIR_0PM; -static constexpr size_t INV_PPP = DIR_MMM; -static constexpr size_t INV_MPP = DIR_PMM; -static constexpr size_t INV_PMP = DIR_MPM; -static constexpr size_t INV_MMP = DIR_PPM; -static constexpr size_t INV_PPM = DIR_MMP; -static constexpr size_t INV_MPM = DIR_PMP; -static constexpr size_t INV_PMM = DIR_MPP; -static constexpr size_t INV_MMM = DIR_PPP; - -static constexpr size_t SGD_P00 = 0; -static constexpr size_t SGD_M00 = 1; -static constexpr size_t SGD_0P0 = 2; -static constexpr size_t SGD_0M0 = 3; -static constexpr size_t SGD_00P = 4; -static constexpr size_t SGD_00M = 5; -static constexpr size_t SGD_PP0 = 6; -static constexpr size_t SGD_MM0 = 7; -static constexpr size_t SGD_PM0 = 8; -static constexpr size_t SGD_MP0 = 9; -static constexpr size_t SGD_P0P = 10; -static constexpr size_t SGD_M0M = 11; -static constexpr size_t SGD_P0M = 12; -static constexpr size_t SGD_M0P = 13; -static constexpr size_t SGD_0PP = 14; -static constexpr size_t SGD_0MM = 15; -static constexpr size_t SGD_0PM = 16; -static constexpr size_t SGD_0MP = 17; -static constexpr size_t SGD_PPP = 18; -static constexpr size_t SGD_MPP = 19; -static constexpr size_t SGD_PMP = 20; -static constexpr size_t SGD_MMP = 21; -static constexpr size_t SGD_PPM = 22; -static constexpr size_t SGD_MPM = 23; -static constexpr size_t SGD_PMM = 24; -static constexpr size_t SGD_MMM = 25; - -struct countersForPointerChasing{ - uint counterInverse; - uint counterX; - uint counterY; - uint counterZ; -}; - -const std::map<const size_t, const countersForPointerChasing> mapForPointerChasing = -{ - {DIR_000, countersForPointerChasing{0, 0, 0, 0}}, - {DIR_P00, countersForPointerChasing{0, 1, 0, 0}}, - {DIR_M00, countersForPointerChasing{1, 0, 1, 1}}, - {DIR_0P0, countersForPointerChasing{0, 0, 1, 0}}, - {DIR_0M0, countersForPointerChasing{1, 1, 0, 1}}, - {DIR_00P, countersForPointerChasing{0, 0, 0, 1}}, - {DIR_00M, countersForPointerChasing{1, 1, 1, 0}}, - - {DIR_PP0, countersForPointerChasing{0, 1, 1, 0}}, - {DIR_MM0, countersForPointerChasing{1, 0, 0, 1}}, - {DIR_PM0, countersForPointerChasing{1, 2, 0, 1}}, - {DIR_MP0, countersForPointerChasing{1, 0, 2, 1}}, - {DIR_P0P, countersForPointerChasing{0, 1, 0, 1}}, - {DIR_M0M, countersForPointerChasing{1, 0, 1, 0}}, - {DIR_P0M, countersForPointerChasing{1, 2, 1, 0}}, - {DIR_M0P, countersForPointerChasing{1, 0, 1, 2}}, - {DIR_0PP, countersForPointerChasing{0, 0, 1, 1}}, - {DIR_0MM, countersForPointerChasing{1, 1, 0, 0}}, - {DIR_0PM, countersForPointerChasing{1, 1, 2, 0}}, - {DIR_0MP, countersForPointerChasing{1, 1, 0, 2}}, - - {DIR_PPP, countersForPointerChasing{0, 1, 1, 1}}, - {DIR_MPP, countersForPointerChasing{1, 0, 2, 2}}, - {DIR_PMP, countersForPointerChasing{1, 2, 0, 2}}, - {DIR_MMP, countersForPointerChasing{1, 0, 0, 2}}, - {DIR_PPM, countersForPointerChasing{1, 2, 2, 0}}, - {DIR_MPM, countersForPointerChasing{1, 0, 2, 0}}, - {DIR_PMM, countersForPointerChasing{1, 2, 0, 0}}, - {DIR_MMM, countersForPointerChasing{1, 0, 0, 0}} -}; - - - -// used in the CPU version -// static constexpr int INV_P00 = DIR_M00; -// static constexpr int INV_M00 = DIR_P00; -// static constexpr int INV_0P0 = DIR_0M0; -// static constexpr int INV_0M0 = DIR_0P0; -// static constexpr int INV_00P = DIR_00M; -// static constexpr int INV_00M = DIR_00P; -// static constexpr int INV_PP0 = DIR_MM0; -// static constexpr int INV_MM0 = DIR_PP0; -// static constexpr int INV_PM0 = DIR_MP0; -// static constexpr int INV_MP0 = DIR_PM0; -// static constexpr int INV_P0P = DIR_M0M; -// static constexpr int INV_M0M = DIR_P0P; -// static constexpr int INV_P0M = DIR_M0P; -// static constexpr int INV_M0P = DIR_P0M; -// static constexpr int INV_0PP = DIR_0MM; -// static constexpr int INV_0MM = DIR_0PP; -// static constexpr int INV_0PM = DIR_0MP; -// static constexpr int INV_0MP = DIR_0PM; -// static constexpr int INV_PPP = DIR_MMM; -// static constexpr int INV_MPP = DIR_PMM; -// static constexpr int INV_PMP = DIR_MPM; -// static constexpr int INV_MMP = DIR_PPM; -// static constexpr int INV_PPM = DIR_MMP; -// static constexpr int INV_MPM = DIR_PMP; -// static constexpr int INV_PMM = DIR_MPP; -// static constexpr int INV_MMM = DIR_PPP; - -// static constexpr int SGD_P00 = 0; -// static constexpr int SGD_M00 = 1; -// static constexpr int SGD_0P0 = 2; -// static constexpr int SGD_0M0 = 3; -// static constexpr int SGD_00P = 4; -// static constexpr int SGD_00M = 5; -// static constexpr int SGD_PP0 = 6; -// static constexpr int SGD_MM0 = 7; -// static constexpr int SGD_PM0 = 8; -// static constexpr int SGD_MP0 = 9; -// static constexpr int SGD_P0P = 10; -// static constexpr int SGD_M0M = 11; -// static constexpr int SGD_P0M = 12; -// static constexpr int SGD_M0P = 13; -// static constexpr int SGD_0PP = 14; -// static constexpr int SGD_0MM = 15; -// static constexpr int SGD_0PM = 16; -// static constexpr int SGD_0MP = 17; -// static constexpr int SGD_PPP = 18; -// static constexpr int SGD_MPP = 19; -// static constexpr int SGD_PMP = 20; -// static constexpr int SGD_MMP = 21; -// static constexpr int SGD_PPM = 22; -// static constexpr int SGD_MPM = 23; -// static constexpr int SGD_PMM = 24; -// static constexpr int SGD_MMM = 25; - - -// DEPRECATED -static constexpr int ZZZ = DIR_000; -static constexpr int PZZ = DIR_P00; -static constexpr int MZZ = DIR_M00; -static constexpr int ZPZ = DIR_0P0; -static constexpr int ZMZ = DIR_0M0; -static constexpr int ZZP = DIR_00P; -static constexpr int ZZM = DIR_00M; -static constexpr int PPZ = DIR_PP0; -static constexpr int MMZ = DIR_MM0; -static constexpr int PMZ = DIR_PM0; -static constexpr int MPZ = DIR_MP0; -static constexpr int PZP = DIR_P0P; -static constexpr int MZM = DIR_M0M; -static constexpr int PZM = DIR_P0M; -static constexpr int MZP = DIR_M0P; -static constexpr int ZPP = DIR_0PP; -static constexpr int ZMM = DIR_0MM; -static constexpr int ZPM = DIR_0PM; -static constexpr int ZMP = DIR_0MP; -static constexpr int PPP = DIR_PPP; -static constexpr int MPP = DIR_MPP; -static constexpr int PMP = DIR_PMP; -static constexpr int MMP = DIR_MMP; -static constexpr int PPM = DIR_PPM; -static constexpr int MPM = DIR_MPM; -static constexpr int PMM = DIR_PMM; -static constexpr int MMM = DIR_MMM; -} +static constexpr size_t NUMBER_Of_DIRECTIONS = ENDDIR + 1; + +static constexpr size_t d000 = 0; +static constexpr size_t dP00 = 1; +static constexpr size_t dM00 = 2; +static constexpr size_t d0P0 = 3; +static constexpr size_t d0M0 = 4; +static constexpr size_t d00P = 5; +static constexpr size_t d00M = 6; +static constexpr size_t dPP0 = 7; +static constexpr size_t dMM0 = 8; +static constexpr size_t dPM0 = 9; +static constexpr size_t dMP0 = 10; +static constexpr size_t dP0P = 11; +static constexpr size_t dM0M = 12; +static constexpr size_t dP0M = 13; +static constexpr size_t dM0P = 14; +static constexpr size_t d0PP = 15; +static constexpr size_t d0MM = 16; +static constexpr size_t d0PM = 17; +static constexpr size_t d0MP = 18; +static constexpr size_t dPPP = 19; +static constexpr size_t dMPP = 20; +static constexpr size_t dPMP = 21; +static constexpr size_t dMMP = 22; +static constexpr size_t dPPM = 23; +static constexpr size_t dMPM = 24; +static constexpr size_t dPMM = 25; +static constexpr size_t dMMM = 26; + +static constexpr size_t iP00 = dM00; +static constexpr size_t iM00 = dP00; +static constexpr size_t i0P0 = d0M0; +static constexpr size_t i0M0 = d0P0; +static constexpr size_t i00P = d00M; +static constexpr size_t i00M = d00P; +static constexpr size_t iPP0 = dMM0; +static constexpr size_t iMM0 = dPP0; +static constexpr size_t iPM0 = dMP0; +static constexpr size_t iMP0 = dPM0; +static constexpr size_t iP0P = dM0M; +static constexpr size_t iM0M = dP0P; +static constexpr size_t iP0M = dM0P; +static constexpr size_t iM0P = dP0M; +static constexpr size_t i0PP = d0MM; +static constexpr size_t i0MM = d0PP; +static constexpr size_t i0PM = d0MP; +static constexpr size_t i0MP = d0PM; +static constexpr size_t iPPP = dMMM; +static constexpr size_t iMPP = dPMM; +static constexpr size_t iPMP = dMPM; +static constexpr size_t iMMP = dPPM; +static constexpr size_t iPPM = dMMP; +static constexpr size_t iMPM = dPMP; +static constexpr size_t iPMM = dMPP; +static constexpr size_t iMMM = dPPP; + +} // namespace vf::lbm::dir #endif diff --git a/src/lbm/dummy.cpp b/src/lbm/dummy.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/lbm/refinement/Coefficients.h b/src/lbm/interpolation/InterpolationCoefficients.h similarity index 92% rename from src/lbm/refinement/Coefficients.h rename to src/lbm/interpolation/InterpolationCoefficients.h index 78790f758f597a49caaad5e719641cf3df08afca..0fccc721e108d2323b79a235cccb44fe2a0c4776 100644 --- a/src/lbm/refinement/Coefficients.h +++ b/src/lbm/interpolation/InterpolationCoefficients.h @@ -1,28 +1,28 @@ //======================================================================================= -// ____ ____ __ ______ __________ __ __ __ __ -// \ \ | | | | | _ \ |___ ___| | | | | / \ | | -// \ \ | | | | | |_) | | | | | | | / \ | | -// \ \ | | | | | _ / | | | | | | / /\ \ | | -// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ -// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| -// \ \ | | ________________________________________________________________ -// \ \ | | | ______________________________________________________________| -// \ \| | | | __ __ __ __ ______ _______ -// \ | | |_____ | | | | | | | | | _ \ / _____) -// \ | | _____| | | | | | | | | | | \ \ \_______ +// ____ ____ __ ______ __________ __ __ __ __ +// \ \ | | | | | _ \ |___ ___| | | | | / \ | | +// \ \ | | | | | |_) | | | | | | | / \ | | +// \ \ | | | | | _ / | | | | | | / /\ \ | | +// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____ +// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______| +// \ \ | | ________________________________________________________________ +// \ \ | | | ______________________________________________________________| +// \ \| | | | __ __ __ __ ______ _______ +// \ | | |_____ | | | | | | | | | _ \ / _____) +// \ | | _____| | | | | | | | | | | \ \ \_______ // \ | | | | |_____ | \_/ | | | | |_/ / _____ | -// \ _____| |__| |________| \_______/ |__| |______/ (_______/ +// \ _____| |__| |________| \_______/ |__| |______/ (_______/ // -// This file is part of VirtualFluids. VirtualFluids is free software: you can +// 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 +// 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 +// +// 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/>. // @@ -37,14 +37,12 @@ #define __device__ #endif +#include <basics/constants/NumericConstants.h> #include "lbm/constants/D3Q27.h" -#include <basics/constants/NumericConstants.h> -#include "lbm/KernelParameter.h" #include "lbm/MacroscopicQuantities.h" - using namespace vf::basics::constant; using namespace vf::lbm::dir; @@ -52,15 +50,14 @@ namespace vf::lbm { // The Coefficients struct needs be created like this: -// Coefficients coeffs; // MomentsOnSourceNodeSet momentsSet; // momentsSet.calculatePPP(f, omega); // ... and so on -// Coefficients coeffs; +// InterpolationCoefficients coeffs; // momentsSet.calculateCoefficients(coeffs); // Coefficients of the interpolation polynomial -struct Coefficients +struct InterpolationCoefficients { real a000, a100, a010, a001, a200, a020, a002, a110, a101, a011; real b000, b100, b010, b001, b200, b020, b002, b110, b101, b011; @@ -70,9 +67,8 @@ struct Coefficients real LaplaceRho; }; - // Private struct - is only used within the MomentsOnSourceNodeSet -struct MomentsOnSourceNode +struct MomentsOnSourceNode { real drho; real velocityX; @@ -84,35 +80,35 @@ struct MomentsOnSourceNode real kxxMyyFromfcNEQ; real kxxMzzFromfcNEQ; - __host__ __device__ void calculate(const real* const f, const real omega) + __host__ __device__ void calculate(const real *const f, const real omega) { - // const real f_000 = f[dir::DIR_000]; - const real fP00 = f[dir::DIR_P00]; - const real fM00 = f[dir::DIR_M00]; - const real f0P0 = f[dir::DIR_0P0]; - const real f0M0 = f[dir::DIR_0M0]; - const real f00P = f[dir::DIR_00P]; - const real f00M = f[dir::DIR_00M]; - const real fPP0 = f[dir::DIR_PP0]; - const real fMM0 = f[dir::DIR_MM0]; - const real fPM0 = f[dir::DIR_PM0]; - const real fMP0 = f[dir::DIR_MP0]; - const real fP0P = f[dir::DIR_P0P]; - const real fM0M = f[dir::DIR_M0M]; - const real fP0M = f[dir::DIR_P0M]; - const real fM0P = f[dir::DIR_M0P]; - const real f0PP = f[dir::DIR_0PP]; - const real f0MM = f[dir::DIR_0MM]; - const real f0PM = f[dir::DIR_0PM]; - const real f0MP = f[dir::DIR_0MP]; - const real fPPP = f[dir::DIR_PPP]; - const real fMPP = f[dir::DIR_MPP]; - const real fPMP = f[dir::DIR_PMP]; - const real fMMP = f[dir::DIR_MMP]; - const real fPPM = f[dir::DIR_PPM]; - const real fMPM = f[dir::DIR_MPM]; - const real fPMM = f[dir::DIR_PMM]; - const real fMMM = f[dir::DIR_MMM]; + // const real f_000 = f[dir::d000]; + const real fP00 = f[dir::dP00]; + const real fM00 = f[dir::dM00]; + const real f0P0 = f[dir::d0P0]; + const real f0M0 = f[dir::d0M0]; + const real f00P = f[dir::d00P]; + const real f00M = f[dir::d00M]; + const real fPP0 = f[dir::dPP0]; + const real fMM0 = f[dir::dMM0]; + const real fPM0 = f[dir::dPM0]; + const real fMP0 = f[dir::dMP0]; + const real fP0P = f[dir::dP0P]; + const real fM0M = f[dir::dM0M]; + const real fP0M = f[dir::dP0M]; + const real fM0P = f[dir::dM0P]; + const real f0PP = f[dir::d0PP]; + const real f0MM = f[dir::d0MM]; + const real f0PM = f[dir::d0PM]; + const real f0MP = f[dir::d0MP]; + const real fPPP = f[dir::dPPP]; + const real fMPP = f[dir::dMPP]; + const real fPMP = f[dir::dPMP]; + const real fMMP = f[dir::dMMP]; + const real fPPM = f[dir::dPPM]; + const real fMPM = f[dir::dMPM]; + const real fPMM = f[dir::dPMM]; + const real fMMM = f[dir::dMMM]; real oneOverRho; getCompressibleMacroscopicValues(f, this->drho, oneOverRho, this->velocityX, this->velocityY, this->velocityZ); @@ -199,7 +195,8 @@ public: momentsMMM.calculate(f, omega); } - __host__ __device__ void calculateCoefficients(Coefficients &coefficients, real xoff, real yoff, real zoff) const + __host__ __device__ void calculateCoefficients(InterpolationCoefficients &coefficients, real xoff, real yoff, + real zoff) const { real& a000 = coefficients.a000; real& b000 = coefficients.b000; @@ -431,6 +428,6 @@ public: }; -} +} // namespace vf::lbm #endif diff --git a/src/lbm/refinement/InterpolationCF.h b/src/lbm/refinement/InterpolationCF.h index 82b8df256ce8ebecdc37e202e0dbe763331a1a65..49f91fdc6a7b5c8760b99a651b8affbf39d85172 100644 --- a/src/lbm/refinement/InterpolationCF.h +++ b/src/lbm/refinement/InterpolationCF.h @@ -41,10 +41,9 @@ #include "lbm/constants/D3Q27.h" -#include "lbm/KernelParameter.h" -#include "lbm/Chimera.h" +#include "lbm/ChimeraTransformation.h" -#include "lbm/refinement/Coefficients.h" +#include "lbm/interpolation/InterpolationCoefficients.h" using namespace vf::basics::constant; using namespace vf::lbm::dir; @@ -52,7 +51,7 @@ using namespace vf::lbm::dir; namespace vf::lbm { -inline __host__ __device__ void interpolateCF(real* const f, const real& omegaF, const real& epsnew, const Coefficients &coefficients, const real& x, const real& y, const real& z) +inline __host__ __device__ void interpolateCF(real* const f, const real& omegaF, const real& epsnew, const InterpolationCoefficients &coefficients, const real& x, const real& y, const real& z) { const real useNEQ = c1o1; @@ -274,33 +273,33 @@ inline __host__ __device__ void interpolateCF(real* const f, const real& omegaF, backwardInverseChimeraWithK(m210, m211, m212, vvz, vzsq, c9o1, c1o9); backwardInverseChimeraWithK(m220, m221, m222, vvz, vzsq, c36o1, c1o36); - f[DIR_000] = f000; - f[DIR_P00] = fP00; - f[DIR_M00] = fM00; - f[DIR_0P0] = f0P0; - f[DIR_0M0] = f0M0; - f[DIR_00P] = f00P; - f[DIR_00M] = f00M; - f[DIR_PP0] = fPP0; - f[DIR_MM0] = fMM0; - f[DIR_PM0] = fPM0; - f[DIR_MP0] = fMP0; - f[DIR_P0P] = fP0P; - f[DIR_M0M] = fM0M; - f[DIR_P0M] = fP0M; - f[DIR_M0P] = fM0P; - f[DIR_0PP] = f0PP; - f[DIR_0MM] = f0MM; - f[DIR_0PM] = f0PM; - f[DIR_0MP] = f0MP; - f[DIR_PPP] = fPPP; - f[DIR_MPP] = fMPP; - f[DIR_PMP] = fPMP; - f[DIR_MMP] = fMMP; - f[DIR_PPM] = fPPM; - f[DIR_MPM] = fMPM; - f[DIR_PMM] = fPMM; - f[DIR_MMM] = fMMM; + f[dir::d000] = f000; + f[dP00] = fP00; + f[dM00] = fM00; + f[d0P0] = f0P0; + f[d0M0] = f0M0; + f[d00P] = f00P; + f[d00M] = f00M; + f[dPP0] = fPP0; + f[dMM0] = fMM0; + f[dPM0] = fPM0; + f[dMP0] = fMP0; + f[dP0P] = fP0P; + f[dM0M] = fM0M; + f[dP0M] = fP0M; + f[dM0P] = fM0P; + f[d0PP] = f0PP; + f[d0MM] = f0MM; + f[d0PM] = f0PM; + f[d0MP] = f0MP; + f[dPPP] = fPPP; + f[dMPP] = fMPP; + f[dPMP] = fPMP; + f[dMMP] = fMMP; + f[dPPM] = fPPM; + f[dMPM] = fMPM; + f[dPMM] = fPMM; + f[dMMM] = fMMM; } diff --git a/src/lbm/refinement/InterpolationFC.h b/src/lbm/refinement/InterpolationFC.h index f3e6384476033880c40b4b6f4c73890ba1e33ae7..4f27978df257b641514c8486f39769eaef71fa3d 100644 --- a/src/lbm/refinement/InterpolationFC.h +++ b/src/lbm/refinement/InterpolationFC.h @@ -40,10 +40,9 @@ #include <basics/constants/NumericConstants.h> #include "lbm/constants/D3Q27.h" -#include "lbm/KernelParameter.h" -#include "lbm/Chimera.h" +#include "lbm/ChimeraTransformation.h" -#include "lbm/refinement/Coefficients.h" +#include "lbm/interpolation/InterpolationCoefficients.h" using namespace vf::basics::constant; using namespace vf::lbm::dir; @@ -51,7 +50,7 @@ using namespace vf::lbm::dir; namespace vf::lbm { -inline __host__ __device__ void interpolateFC(real* const f, const real epsnew, const real omegaC, const Coefficients& coefficients) +inline __host__ __device__ void interpolateFC(real* const f, const real epsnew, const real omegaC, const InterpolationCoefficients& coefficients) { const real kxyAverage = c0o1; @@ -231,33 +230,33 @@ inline __host__ __device__ void interpolateFC(real* const f, const real epsnew, backwardInverseChimeraWithK(m210, m211, m212, vvz, vzsq, c9o1, c1o9); backwardInverseChimeraWithK(m220, m221, m222, vvz, vzsq, c36o1, c1o36); - f[DIR_000] = f000; - f[DIR_P00] = fP00; - f[DIR_M00] = fM00; - f[DIR_0P0] = f0P0; - f[DIR_0M0] = f0M0; - f[DIR_00P] = f00P; - f[DIR_00M] = f00M; - f[DIR_PP0] = fPP0; - f[DIR_MM0] = fMM0; - f[DIR_PM0] = fPM0; - f[DIR_MP0] = fMP0; - f[DIR_P0P] = fP0P; - f[DIR_M0M] = fM0M; - f[DIR_P0M] = fP0M; - f[DIR_M0P] = fM0P; - f[DIR_0PP] = f0PP; - f[DIR_0MM] = f0MM; - f[DIR_0PM] = f0PM; - f[DIR_0MP] = f0MP; - f[DIR_PPP] = fPPP; - f[DIR_MPP] = fMPP; - f[DIR_PMP] = fPMP; - f[DIR_MMP] = fMMP; - f[DIR_PPM] = fPPM; - f[DIR_MPM] = fMPM; - f[DIR_PMM] = fPMM; - f[DIR_MMM] = fMMM; + f[d000] = f000; + f[dP00] = fP00; + f[dM00] = fM00; + f[d0P0] = f0P0; + f[d0M0] = f0M0; + f[d00P] = f00P; + f[d00M] = f00M; + f[dPP0] = fPP0; + f[dMM0] = fMM0; + f[dPM0] = fPM0; + f[dMP0] = fMP0; + f[dP0P] = fP0P; + f[dM0M] = fM0M; + f[dP0M] = fP0M; + f[dM0P] = fM0P; + f[d0PP] = f0PP; + f[d0MM] = f0MM; + f[d0PM] = f0PM; + f[d0MP] = f0MP; + f[dPPP] = fPPP; + f[dMPP] = fMPP; + f[dPMP] = fPMP; + f[dMMP] = fMMP; + f[dPPM] = fPPM; + f[dMPM] = fMPM; + f[dPMM] = fPMM; + f[dMMM] = fMMM; } } diff --git a/src/logger/Logger.h b/src/logger/Logger.h index f3c41c0e3bfb8aa12c94677040273fdaaaff64a3..01c84b4315c668d318d0d71432731f378d602e91 100644 --- a/src/logger/Logger.h +++ b/src/logger/Logger.h @@ -37,7 +37,7 @@ // spdlog supports 5 log level, which can be changed at runtime e.g.: // spdlog::set_level(spdlog::level::debug) // The default log level is set to trace. Supported levels: trace < debug < info < warning < critical -// +// // The logging is realized in 3 different log sinks: // 1. colored console output // 2. a daily log file diff --git a/utilities/DirRename.py b/utilities/DirRename.py index 2d0bd0541c5b86b1ca9746b8e7e6beb2cc7ef005..61c74923051f4a2a7cdb4b02d1e7f9a5bdb31156 100644 --- a/utilities/DirRename.py +++ b/utilities/DirRename.py @@ -12,7 +12,7 @@ fin = open(filename, "rt") #read file contents to string data = fin.read() #replace all occurrences of the required string -data = data.replace('[REST]','[DIR_000]') +data = data.replace('[REST]','[d000]') data = data.replace('[TNE]', '[DIR_PPP]') data = data.replace('[TNW]', '[DIR_MPP]') data = data.replace('[TSE]', '[DIR_PMP]') @@ -45,16 +45,16 @@ data = data.replace('[TN]', '[DIR_0PP]') data = data.replace('[BS]', '[DIR_0MM]') data = data.replace('[BN]', '[DIR_0PM]') data = data.replace('[TS]', '[DIR_0MP]') -data = data.replace('[E]', '[DIR_P00]') -data = data.replace('[W]', '[DIR_M00]') +data = data.replace('[E]', '[dP00]') +data = data.replace('[W]', '[dM00]') data = data.replace('[N]', '[DIR_0P0]') data = data.replace('[S]', '[DIR_0M0]') data = data.replace('[T]', '[DIR_00P]') data = data.replace('[B]', '[DIR_00M]') -# data = data.replace('[REST]','[DIR_000]') -# data = data.replace('[E ]', '[DIR_P00]') -# data = data.replace('[W ]', '[DIR_M00]') +# data = data.replace('[REST]','[d000]') +# data = data.replace('[E ]', '[dP00]') +# data = data.replace('[W ]', '[dM00]') # data = data.replace('[N ]', '[DIR_0P0]') # data = data.replace('[S ]', '[DIR_0M0]') # data = data.replace('[T ]', '[DIR_00P]') @@ -80,9 +80,9 @@ data = data.replace('[B]', '[DIR_00M]') # data = data.replace('[BSE]', '[DIR_PMM]') # data = data.replace('[BSW]', '[DIR_MMM]') -# data = data.replace('D3Q27System::REST','[DIR_000]') -# data = data.replace('D3Q27System::E', '[DIR_P00]') -# data = data.replace('D3Q27System::W', '[DIR_M00]') +# data = data.replace('D3Q27System::REST','[d000]') +# data = data.replace('D3Q27System::E', '[dP00]') +# data = data.replace('D3Q27System::W', '[dM00]') # data = data.replace('D3Q27System::N', '[DIR_0P0]') # data = data.replace('D3Q27System::S', '[DIR_0M0]') # data = data.replace('D3Q27System::T', '[DIR_00P]') @@ -108,7 +108,7 @@ data = data.replace('[B]', '[DIR_00M]') # data = data.replace('D3Q27System::BSE', '[DIR_PMM]') # data = data.replace('D3Q27System::BSW', '[DIR_MMM]') -# data = data.replace('REST)','DIR_000)') +# data = data.replace('REST)','d000)') # data = data.replace('TNE)', 'DIR_PPP)') # data = data.replace('TNW)', 'DIR_MPP)') # data = data.replace('TSE)', 'DIR_PMP)') @@ -129,14 +129,14 @@ data = data.replace('[B]', '[DIR_00M]') # data = data.replace('BS)', 'DIR_0MM)') # data = data.replace('BN)', 'DIR_0PM)') # data = data.replace('TS)', 'DIR_0MP)') -# data = data.replace('E)', 'DIR_P00)') -# data = data.replace('W)', 'DIR_M00)') +# data = data.replace('E)', 'dP00)') +# data = data.replace('W)', 'dM00)') # data = data.replace('N)', 'DIR_0P0)') # data = data.replace('S)', 'DIR_0M0)') # data = data.replace('T)', 'DIR_00P)') # data = data.replace('B)', 'DIR_00M)') -# data = data.replace('REST','DIR_000') +# data = data.replace('REST','d000') # data = data.replace('TNE', 'DIR_PPP') # data = data.replace('TNW', 'DIR_MPP') # data = data.replace('TSE', 'DIR_PMP') @@ -157,8 +157,8 @@ data = data.replace('[B]', '[DIR_00M]') # data = data.replace('BS', 'DIR_0MM') # data = data.replace('BN', 'DIR_0PM') # data = data.replace('TS', 'DIR_0MP') -# data = data.replace('E', 'DIR_P00') -# data = data.replace('W', 'DIR_M00') +# data = data.replace('E', 'dP00') +# data = data.replace('W', 'dM00') # data = data.replace('N', 'DIR_0P0') # data = data.replace('S', 'DIR_0M0') # data = data.replace('T', 'DIR_00P') diff --git a/utilities/ci-regression-tests/regression-tests-ci.yml.j2 b/utilities/ci-regression-tests/regression-tests-ci.yml.j2 index f162ff0c855130ffb8f2cc1c391a62360577b82a..b4643c9fbe96f04644b9e688b420ac0f23c88a34 100644 --- a/utilities/ci-regression-tests/regression-tests-ci.yml.j2 +++ b/utilities/ci-regression-tests/regression-tests-ci.yml.j2 @@ -16,6 +16,12 @@ stages: - chmod +x ./regression-tests/* - pip install fieldcompare + artifacts: + expire_in: 1 hrs + paths: + - output/ + when: on_failure + {% for regression_test in regression_tests %} run-regression-test-{{ regression_test }}: extends: .regression-test