#include #include #include #include #include #include #define __device__ #define __global__ #define __forceinline__ inline #define __constant__ #define LATTICE_D2Q9 0 #define LATTICE_D3Q19 1 #define LATTICE_MODEL 0 #define DIM 2 #define NQ 9 #define NX 8 #define NY 8 #define NZ 1 #define NT 1 #define USE_LES 0 #define RHO 1.0f #ifndef COLLISION_MODEL #define COLLISION_MODEL 0 #endif #define OMEGA_COLLISION_MIN .001f #define OMEGA_COLLISION_MAX 1.99f struct Idx {unsigned x=0,y=0,z=0;}threadIdx,blockIdx,blockDim; struct Params{float omega=1.25f,fx=0,fy=0;}d_params; inline float atomicAdd(float*p,float v){*p+=v;return *p;} inline int obs_force_index(int,int){return 0;} inline int obs_torque_index(int,int){return 0;} #include "core/flags.cuh" #include "core/descriptors.cuh" #include "core/precision.cuh" #include "core/layout.cuh" #include "operators/macro.cuh" #include "operators/collision_srt.cuh" #include "operators/collision_trt.cuh" #include "operators/collision_mrt.cuh" #include "operators/forcing_guo.cuh" #include "operators/helpers.cuh" #include "streaming/esopull_single_buffer.cuh" #include "streaming/esopull_semantic_helpers.cuh" #include "boundary/bounce_back.cuh" #include "boundary/curved_boundary.cuh" #include "step/esopull_sync.cu" #define U0 .03f #define OBS_BODY_SLOT_FLOATS 7 #define __launch_bounds__(...) inline int obs_sensor_index(int,int){return 0;} #include "boundary/inlet_outlet.cuh" #include "streaming/pull_double_buffer.cuh" #include "step/one_step_double.cu" #include "step/one_step_esopull.cu" #include "step/aux_kernels.cu" #include "step/init_flow.cu" #include #include void close(float a,float b,float tol=3e-7f) { if(fabsf(a-b)>tol) {fprintf(stderr,"got %.9g expected %.9g\n",a,b); abort();} } int main() { float fi[NX*NY*NQ],before[NX*NY*NQ],f[NQ],physical[NQ],staged[6*NX+2*NY*NQ]; // Nonuniform populations: exact same-time address inverse, both parities. for(unsigned long t=0;t<4;t++) { for(int i=0;i=NY)continue; const float* donor=staged+6*NX+(side*NY+n)*NQ; unsigned long k=linear_index(side?NX-2:1,n); for(unsigned i=0;i