diff options
| author | Adrian Kummerlaender | 2021-05-17 00:15:33 +0200 | 
|---|---|---|
| committer | Adrian Kummerlaender | 2021-05-17 00:15:33 +0200 | 
| commit | 4ec94c97879aafef15f7663135745e4ba61e62cf (patch) | |
| tree | 322ae3f003892513f529842ff0b3fd100573b680 /tangle/LLBM/kernel/bouzidi.h | |
| download | LiterateLB-4ec94c97879aafef15f7663135745e4ba61e62cf.tar LiterateLB-4ec94c97879aafef15f7663135745e4ba61e62cf.tar.gz LiterateLB-4ec94c97879aafef15f7663135745e4ba61e62cf.tar.bz2 LiterateLB-4ec94c97879aafef15f7663135745e4ba61e62cf.tar.lz LiterateLB-4ec94c97879aafef15f7663135745e4ba61e62cf.tar.xz LiterateLB-4ec94c97879aafef15f7663135745e4ba61e62cf.tar.zst LiterateLB-4ec94c97879aafef15f7663135745e4ba61e62cf.zip  | |
Extract first public LiterateLB version
Diffstat (limited to 'tangle/LLBM/kernel/bouzidi.h')
| -rw-r--r-- | tangle/LLBM/kernel/bouzidi.h | 39 | 
1 files changed, 39 insertions, 0 deletions
diff --git a/tangle/LLBM/kernel/bouzidi.h b/tangle/LLBM/kernel/bouzidi.h new file mode 100644 index 0000000..b1abd2c --- /dev/null +++ b/tangle/LLBM/kernel/bouzidi.h @@ -0,0 +1,39 @@ +#pragma once +#include <LLBM/call_tag.h> +#include <LLBM/lattice.h> + +template <typename S> +struct BouzidiConfig { +  std::size_t* boundary; // boundary cell to be interpolated +  std::size_t* solid;    // adjacent solid cell +  std::size_t* fluid;    // adjacent fluid cell +  S* distance;           // precomputed distance factor q +  S* correction;         // correction for moving walls +  pop_index_t* missing;  // population to be reconstructed +}; + +struct BouzidiO { + +using call_tag = tag::call_by_list_index; + +template <typename T, typename S, typename DESCRIPTOR> +__device__ static void apply( +    LatticeView<DESCRIPTOR,S> lattice +  , std::size_t index +  , std::size_t count +  , BouzidiConfig<S> config +) { +  pop_index_t& iPop = config.missing[index]; +  pop_index_t  jPop = descriptor::opposite<DESCRIPTOR>(iPop); +  pop_index_t  kPop = config.boundary[index] == config.fluid[index] ? iPop : jPop; + +  S f_bound_j = *lattice.pop(jPop, config.boundary[index]); +  S f_fluid_j = *lattice.pop(kPop, config.fluid[index]); +  S* f_next_i =  lattice.pop(iPop, config.solid[index]); + +  *f_next_i = config.distance[index] * f_bound_j +            + (1. - config.distance[index]) * f_fluid_j +            + config.correction[index]; +} + +};  | 
