#pragma once #include struct SmagorinskyBgkCollideO { using call_tag = tag::call_by_cell_id; template __device__ static void apply(descriptor::D2Q9, S f_curr[9], S f_next[9], std::size_t gid, T tau, T smagorinsky) { T x0 = f_curr[1] + f_curr[2]; T x1 = f_curr[3] + f_curr[6]; T x2 = x0 + x1 + f_curr[0] + f_curr[4] + f_curr[5] + f_curr[7] + f_curr[8]; T x3 = f_curr[0] - f_curr[8]; T x4 = T{1} / (x2); T x5 = T{72.0000000000000}*f_curr[2]; T x6 = T{72.0000000000000}*f_curr[6]; T rho = x2; T x31 = T{4.00000000000000}*rho; T x40 = T{2.00000000000000}*rho; T u_0 = -x4*(x0 + x3 - f_curr[6] - f_curr[7]); T x7 = T{6.00000000000000}*u_0; T x8 = -x7; T x15 = u_0*u_0; T x16 = T{3.00000000000000}*x15; T x17 = -x16; T x27 = x16 + T{-2.00000000000000}; T u_1 = -x4*(x1 + x3 - f_curr[2] - f_curr[5]); T x9 = u_0 - u_1; T x10 = T{9.00000000000000}*(x9*x9); T x11 = u_1*u_1; T x12 = T{3.00000000000000}*x11; T x13 = T{2.00000000000000} - x12; T x14 = T{6.00000000000000}*u_1; T x18 = x14 + x17; T x19 = x13 + x18; T x20 = x10 + x19 + x8; T x21 = rho*x20; T x22 = x10 + x13 - x14 + x17 + x7; T x23 = rho*x22; T x24 = u_0 + u_1; T x25 = T{9.00000000000000}*(x24*x24); T x26 = x19 + x25 + x7; T x28 = x12 + x27; T x29 = x14 - x25 + x28 + x7; T x30 = rho*x26 - rho*x29 - T{72.0000000000000}*f_curr[0] - T{72.0000000000000}*f_curr[8]; T x32 = x13 + T{6.00000000000000}*x15; T x33 = x32 + x8; T x34 = x32 + x7; T x35 = x21 + x23 + x30 - x5 - x6; T x36 = T{6.00000000000000}*x11; T x37 = x14 + x27 - x36; T x38 = x18 + x36 + T{2.00000000000000}; T x39 = T{1} / (tau + sqrt(T{0.707106781186548}*(smagorinsky*smagorinsky)*sqrt((-x21 - x23 + x30 + x5 + x6)*(-x21 - x23 + x30 + x5 + x6) + T{0.500000000000000}*((x31*x33 + x31*x34 + x35 - 72*f_curr[1] - 72*f_curr[7])*(x31*x33 + x31*x34 + x35 - 72*f_curr[1] - 72*f_curr[7])) + T{0.500000000000000}*((-x31*x37 + x31*x38 + x35 - 72*f_curr[3] - 72*f_curr[5])*(-x31*x37 + x31*x38 + x35 - 72*f_curr[3] - 72*f_curr[5]))) + tau*tau)); f_next[0] = -T{0.0138888888888889}*x39*(x29*x40 + T{144.000000000000}*f_curr[0]) + f_curr[0]; f_next[1] = T{0.0555555555555556}*x39*(x33*x40 - T{36.0000000000000}*f_curr[1]) + f_curr[1]; f_next[2] = T{0.0138888888888889}*x39*(x20*x40 - T{144.000000000000}*f_curr[2]) + f_curr[2]; f_next[3] = -T{0.0555555555555556}*x39*(x37*x40 + T{36.0000000000000}*f_curr[3]) + f_curr[3]; f_next[4] = -T{0.111111111111111}*x39*(T{4.00000000000000}*rho*x28 + T{18.0000000000000}*f_curr[4]) + f_curr[4]; f_next[5] = T{0.0555555555555556}*x39*(x38*x40 - T{36.0000000000000}*f_curr[5]) + f_curr[5]; f_next[6] = T{0.0138888888888889}*x39*(x22*x40 - T{144.000000000000}*f_curr[6]) + f_curr[6]; f_next[7] = T{0.0555555555555556}*x39*(x34*x40 - T{36.0000000000000}*f_curr[7]) + f_curr[7]; f_next[8] = T{0.0138888888888889}*x39*(x26*x40 - T{144.000000000000}*f_curr[8]) + f_curr[8]; } template __device__ static void apply(descriptor::D3Q19, S f_curr[19], S f_next[19], std::size_t gid, T tau, T smagorinsky) { T x0 = f_curr[10] + f_curr[13] + f_curr[17]; T x1 = f_curr[14] + f_curr[5] + f_curr[6]; T x2 = f_curr[1] + f_curr[2] + f_curr[4]; T x3 = x0 + x1 + x2 + f_curr[0] + f_curr[11] + f_curr[12] + f_curr[15] + f_curr[16] + f_curr[18] + f_curr[3] + f_curr[7] + f_curr[8] + f_curr[9]; T x4 = -f_curr[11] + f_curr[7]; T x5 = -f_curr[15] + f_curr[3]; T x6 = T{1} / (x3); T x7 = f_curr[0] - f_curr[18]; T x8 = T{72.0000000000000}*f_curr[5]; T x9 = T{72.0000000000000}*f_curr[13]; T x43 = T{72.0000000000000}*f_curr[1]; T x44 = T{72.0000000000000}*f_curr[17]; T x63 = T{72.0000000000000}*f_curr[4]; T x64 = T{72.0000000000000}*f_curr[14]; T rho = x3; T x77 = T{2.00000000000000}*rho; T x95 = T{2.00000000000000}*rho; T u_0 = x6*(x0 + x4 + x5 - f_curr[1] - f_curr[5] - f_curr[8]); T x12 = -u_0; T x14 = T{6.00000000000000}*u_0; T x17 = u_0*u_0; T x18 = T{3.00000000000000}*x17; T x26 = -x14; T x35 = T{2.00000000000000} - x18; T x78 = T{6.00000000000000}*x17; T u_1 = x6*(x1 + x4 + x7 - f_curr[12] - f_curr[13] - f_curr[4]); T x10 = T{6.00000000000000}*u_1; T x11 = -x10; T x13 = x12 + u_1; T x19 = u_1*u_1; T x20 = T{3.00000000000000}*x19; T x21 = x18 + x20 + T{-2.00000000000000}; T x27 = -u_1; T x28 = x27 + u_0; T x32 = u_0 + u_1; T x33 = T{9.00000000000000}*(x32*x32); T x34 = -x20; T x36 = x34 + x35; T x85 = T{6.00000000000000}*x19; T u_2 = x6*(x2 + x5 + x7 - f_curr[14] - f_curr[16] - f_curr[17]); T x15 = u_2*u_2; T x16 = T{3.00000000000000}*x15; T x22 = x16 + x21; T x23 = x14 + x22; T x24 = x11 + x23 - T{9.00000000000000}*x13*x13; T x25 = rho*x24; T x29 = x10 + x22; T x30 = x26 + x29 - T{9.00000000000000}*x28*x28; T x31 = rho*x30; T x37 = -x16; T x38 = x10 + x37; T x39 = x14 + x33 + x36 + x38; T x40 = x14 + x29 - x33; T x41 = rho*x39 - rho*x40 - T{72.0000000000000}*f_curr[11] - T{72.0000000000000}*f_curr[7]; T x42 = x25 + x31 + x41 + x8 + x9; T x45 = T{6.00000000000000}*u_2; T x46 = -x45; T x47 = x12 + u_2; T x48 = x23 + x46 - T{9.00000000000000}*x47*x47; T x49 = rho*x48; T x50 = -u_2; T x51 = x50 + u_0; T x52 = x22 + x45; T x53 = x26 + x52 - T{9.00000000000000}*x51*x51; T x54 = rho*x53; T x55 = u_0 + u_2; T x56 = T{9.00000000000000}*(x55*x55); T x57 = x36 + x45; T x58 = x14 + x37; T x59 = x56 + x57 + x58; T x60 = x14 + x52 - x56; T x61 = rho*x59 - rho*x60 - T{72.0000000000000}*f_curr[15] - T{72.0000000000000}*f_curr[3]; T x62 = x43 + x44 + x49 + x54 + x61; T x65 = x27 + u_2; T x66 = x29 + x46 - T{9.00000000000000}*x65*x65; T x67 = rho*x66; T x68 = x50 + u_1; T x69 = x11 + x52 - T{9.00000000000000}*x68*x68; T x70 = rho*x69; T x71 = u_1 + u_2; T x72 = T{9.00000000000000}*(x71*x71); T x73 = x38 + x57 + x72; T x74 = x29 + x45 - x72; T x75 = rho*x73 - rho*x74 - T{72.0000000000000}*f_curr[0] - T{72.0000000000000}*f_curr[18]; T x76 = x63 + x64 + x67 + x70 + x75; T x79 = x16 + T{-2.00000000000000}; T x80 = x14 + x20 - x78 + x79; T x81 = x34 + x58 + x78 + T{2.00000000000000}; T x82 = -x43 - x44 - x49 - x54 + x61; T x83 = -x25 - x31 + x41 - x8 - x9; T x84 = -x77*x80 + x77*x81 + x82 + x83 - T{72.0000000000000}*f_curr[10] - T{72.0000000000000}*f_curr[8]; T x86 = x10 + x18 + x79 - x85; T x87 = x35 + x38 + x85; T x88 = -x63 - x64 - x67 - x70 + x75; T x89 = -x77*x86 + x77*x87 + x83 + x88 - T{72.0000000000000}*f_curr[12] - T{72.0000000000000}*f_curr[6]; T x90 = T{6.00000000000000}*x15; T x91 = x21 + x45 - x90; T x92 = x57 + x90; T x93 = -x77*x91 + x77*x92 + x82 + x88 - T{72.0000000000000}*f_curr[16] - T{72.0000000000000}*f_curr[2]; T x94 = T{1} / (tau + sqrt(T{0.707106781186548}*(smagorinsky*smagorinsky)*sqrt(x42*x42 + x62*x62 + x76*x76 + T{0.500000000000000}*(x84*x84) + T{0.500000000000000}*(x89*x89) + T{0.500000000000000}*(x93*x93)) + tau*tau)); f_next[0] = T{0.0138888888888889}*x94*(x73*x95 - T{144.000000000000}*f_curr[0]) + f_curr[0]; f_next[1] = -T{0.0138888888888889}*x94*(x48*x95 + T{144.000000000000}*f_curr[1]) + f_curr[1]; f_next[2] = T{0.0277777777777778}*x94*(x92*x95 - T{72.0000000000000}*f_curr[2]) + f_curr[2]; f_next[3] = T{0.0138888888888889}*x94*(x59*x95 - T{144.000000000000}*f_curr[3]) + f_curr[3]; f_next[4] = -T{0.0138888888888889}*x94*(x66*x95 + T{144.000000000000}*f_curr[4]) + f_curr[4]; f_next[5] = -T{0.0138888888888889}*x94*(x24*x95 + T{144.000000000000}*f_curr[5]) + f_curr[5]; f_next[6] = T{0.0277777777777778}*x94*(x87*x95 - T{72.0000000000000}*f_curr[6]) + f_curr[6]; f_next[7] = T{0.0138888888888889}*x94*(x39*x95 - T{144.000000000000}*f_curr[7]) + f_curr[7]; f_next[8] = -T{0.0277777777777778}*x94*(x80*x95 + T{72.0000000000000}*f_curr[8]) + f_curr[8]; f_next[9] = -T{0.166666666666667}*x94*(x22*x95 + T{12.0000000000000}*f_curr[9]) + f_curr[9]; f_next[10] = T{0.0277777777777778}*x94*(x81*x95 - T{72.0000000000000}*f_curr[10]) + f_curr[10]; f_next[11] = -T{0.0138888888888889}*x94*(x40*x95 + T{144.000000000000}*f_curr[11]) + f_curr[11]; f_next[12] = -T{0.0277777777777778}*x94*(x86*x95 + T{72.0000000000000}*f_curr[12]) + f_curr[12]; f_next[13] = -T{0.0138888888888889}*x94*(x30*x95 + T{144.000000000000}*f_curr[13]) + f_curr[13]; f_next[14] = -T{0.0138888888888889}*x94*(x69*x95 + T{144.000000000000}*f_curr[14]) + f_curr[14]; f_next[15] = -T{0.0138888888888889}*x94*(x60*x95 + T{144.000000000000}*f_curr[15]) + f_curr[15]; f_next[16] = -T{0.0277777777777778}*x94*(x91*x95 + T{72.0000000000000}*f_curr[16]) + f_curr[16]; f_next[17] = -T{0.0138888888888889}*x94*(x53*x95 + T{144.000000000000}*f_curr[17]) + f_curr[17]; f_next[18] = -T{0.0138888888888889}*x94*(x74*x95 + T{144.000000000000}*f_curr[18]) + f_curr[18]; } };