diff --git a/src/VirtualFluids_GPU/GPU/WaleCumulant27.cu b/src/VirtualFluids_GPU/GPU/WaleCumulant27.cu index bca475dc3a1b7fb75abf2d484180aaa33ef2c685..87ed76a9996efe80d34c7027e09203eb877c3564 100644 --- a/src/VirtualFluids_GPU/GPU/WaleCumulant27.cu +++ b/src/VirtualFluids_GPU/GPU/WaleCumulant27.cu @@ -181,176 +181,249 @@ extern "C" __global__ void LB_Kernel_Wale_Cum_One_Comp_SP_27(real omega_in, { ///////////// Wale Model /////////////// //neighbor index - unsigned int kPx = neighborX[k]; - unsigned int kPy = neighborY[k]; - unsigned int kPz = neighborZ[k]; + 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]]; - //no wale at the boundary nodes - if ((bcMatD[kPx] == GEO_FLUID) && (bcMatD[kPy] == GEO_FLUID) && (bcMatD[kPz] == GEO_FLUID) && - (bcMatD[kMx] == GEO_FLUID) && (bcMatD[kMy] == GEO_FLUID) && (bcMatD[kMz] == GEO_FLUID)) + 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 = zero; + real dyvx = zero; + real dzvx = zero; + real dxvy = zero; + real dyvy = zero; + real dzvy = zero; + real dxvz = zero; + real dyvz = zero; + real dzvz = zero; + real SumSd = zero; + real SumS = zero; + ////////////////////////////////////////////////////////////////////////////// + //no central differences at the boundary nodes + //Dx + if (bcMatD[kPx] != GEO_FLUID) { - //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]; - //partial Div vx in x, y, z// - real dxvx = (veloXNeighborPx - veloXNeighborMx) / two; //deltaX * two?? - real dyvx = (veloXNeighborPy - veloXNeighborMy) / two; //deltaX * two?? - real dzvx = (veloXNeighborPz - veloXNeighborMz) / two; //deltaX * two?? - //partial Div vy in x, y, z// - real dxvy = (veloYNeighborPx - veloYNeighborMx) / two; //deltaX * two?? - real dyvy = (veloYNeighborPy - veloYNeighborMy) / two; //deltaX * two?? - real dzvy = (veloYNeighborPz - veloYNeighborMz) / two; //deltaX * two?? - //partial Div vz in x, y, z// - real dxvz = (veloZNeighborPx - veloZNeighborMx) / two; //deltaX * two?? - real dyvz = (veloZNeighborPy - veloZNeighborMy) / two; //deltaX * two?? - real dzvz = (veloZNeighborPz - veloZNeighborMz) / two; //deltaX * two?? - //SumSd - - 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); - real Sd32 = c1o2 * (g32sq + g23sq); - real Sd33 = c1o2 * (g33sq + g33sq) - c1o3 * gkk; - - real 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 - real SumS = - ((dxvx * dxvx) + - (dyvy * dyvy) + - (dzvz * dzvz)) + + 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) / two; + dxvy = (veloYNeighborPx - veloYNeighborMx) / two; + dxvz = (veloZNeighborPx - veloZNeighborMx) / two; + } + //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) / two; + dyvy = (veloYNeighborPy - veloYNeighborMy) / two; + dyvz = (veloZNeighborPy - veloZNeighborMy) / two; + } + //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) / two; + dzvy = (veloYNeighborPz - veloYNeighborMz) / two; + dzvz = (veloZNeighborPz - veloZNeighborMz) / two; + } + ////////////////////////////////////////////////////////////////////////////// + ////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)) + + ((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 * one; - ///////////////////////////////// - //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)); - } + //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 * one; + ///////////////////////////////// + //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(((real)pow((double)SumSsq, 0.5) / ((real)pow((double)SumSDsq, 0.25) + c10eM10)), 5.0) + one); //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; @@ -1361,13 +1434,13 @@ extern "C" __global__ void LB_Kernel_Wale_Cum_AA2016_Comp_SP_27( real omega_in, { ///////////// Wale Model /////////////// //neighbor index - unsigned int kPx = neighborX[k]; - unsigned int kPy = neighborY[k]; - unsigned int kPz = neighborZ[k]; + 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]]; + 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]; @@ -1389,18 +1462,95 @@ extern "C" __global__ void LB_Kernel_Wale_Cum_AA2016_Comp_SP_27( real omega_in, real veloZNeighborMy = veloZ[kMy]; real veloZNeighborPz = veloZ[kPz]; real veloZNeighborMz = veloZ[kMz]; - //partial Div vx in x, y, z// - real dxvx = (veloXNeighborPx - veloXNeighborMx) / two; //deltaX * two?? - real dyvx = (veloXNeighborPy - veloXNeighborMy) / two; //deltaX * two?? - real dzvx = (veloXNeighborPz - veloXNeighborMz) / two; //deltaX * two?? - //partial Div vy in x, y, z// - real dxvy = (veloYNeighborPx - veloYNeighborMx) / two; //deltaX * two?? - real dyvy = (veloYNeighborPy - veloYNeighborMy) / two; //deltaX * two?? - real dzvy = (veloYNeighborPz - veloYNeighborMz) / two; //deltaX * two?? - //partial Div vz in x, y, z// - real dxvz = (veloZNeighborPx - veloZNeighborMx) / two; //deltaX * two?? - real dyvz = (veloZNeighborPy - veloZNeighborMy) / two; //deltaX * two?? - real dzvz = (veloZNeighborPz - veloZNeighborMz) / two; //deltaX * two?? + //getVeloLocal// + real veloLocalX = veloX[k]; + real veloLocalY = veloY[k]; + real veloLocalZ = veloZ[k]; + + ////////////////////////////////////////////////////////////////////////////// + real dxvx = zero; + real dyvx = zero; + real dzvx = zero; + real dxvy = zero; + real dyvy = zero; + real dzvy = zero; + real dxvz = zero; + real dyvz = zero; + real dzvz = zero; + real SumSd = zero; + real SumS = zero; + ////////////////////////////////////////////////////////////////////////////// + //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) / two; + dxvy = (veloYNeighborPx - veloYNeighborMx) / two; + dxvz = (veloZNeighborPx - veloZNeighborMx) / two; + } + //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) / two; + dyvy = (veloYNeighborPy - veloYNeighborMy) / two; + dyvz = (veloZNeighborPy - veloZNeighborMy) / two; + } + //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) / two; + dzvy = (veloYNeighborPz - veloYNeighborMz) / two; + dzvz = (veloZNeighborPz - veloZNeighborMz) / two; + } + ////////////////////////////////////////////////////////////////////////////// + ////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; @@ -1437,7 +1587,7 @@ extern "C" __global__ void LB_Kernel_Wale_Cum_AA2016_Comp_SP_27( real omega_in, real Sd32 = c1o2 * (g32sq + g23sq); // ==Sd23 real Sd33 = c1o2 * (g33sq + g33sq) - c1o3 * gkk; - real SumSd = Sd11*Sd11 + Sd12*Sd12 + Sd13*Sd13 + Sd21*Sd21 + Sd22*Sd22 + Sd23*Sd23 + Sd31*Sd31 + Sd32*Sd32 + Sd33*Sd33; + SumSd = Sd11*Sd11 + Sd12*Sd12 + Sd13*Sd13 + Sd21*Sd21 + Sd22*Sd22 + Sd23*Sd23 + Sd31*Sd31 + Sd32*Sd32 + Sd33*Sd33; @@ -1497,7 +1647,7 @@ extern "C" __global__ void LB_Kernel_Wale_Cum_AA2016_Comp_SP_27( real omega_in, // c1o2 * powf(dyvx + dxvy, two) + // c1o2 * powf(dzvx + dxvz, two) + // c1o2 * powf(dyvz + dzvy, two); //powf - real SumS = + SumS = ((dxvx * dxvx) + (dyvy * dyvy) + (dzvz * dzvz)) + @@ -1512,7 +1662,7 @@ extern "C" __global__ void LB_Kernel_Wale_Cum_AA2016_Comp_SP_27( real omega_in, // c1o2 * pow(dzvx + dxvz, two) + // c1o2 * pow(dyvz + dzvy, two); //pow //nu turbulent - real coefficient = 0.325; //0.55; // + real coefficient = 0.5; //0.325; // real delta = coefficient * one; ///////////////////////////////// //real SumSsq = SumS * SumS; @@ -1521,10 +1671,12 @@ extern "C" __global__ void LB_Kernel_Wale_Cum_AA2016_Comp_SP_27( real omega_in, 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)); + //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(((real)pow((double)SumSsq, 0.5) / ((real)pow((double)SumSDsq, 0.25) + c10eM10)), 5.0) + one); //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; @@ -3760,7 +3912,7 @@ extern "C" __global__ void LB_Kernel_Wale_Cum_AA2016_Debug_Comp_SP_27( // c1o2 * pow(dzvx + dxvz, two) + // c1o2 * pow(dyvz + dzvy, two); //pow //nu turbulent - real coefficient = 0.325; //0.55; // + real coefficient = 0.55; //0.325; // real delta = coefficient * one; ///////////////////////////////// //real SumSsq = SumS * SumS; @@ -3769,10 +3921,12 @@ extern "C" __global__ void LB_Kernel_Wale_Cum_AA2016_Debug_Comp_SP_27( 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)); + //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(((real)pow((double)SumSsq, 0.5) / ((real)pow((double)SumSDsq, 0.25) + c10eM10)), 5.0) + one); //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; diff --git a/src/VirtualFluids_GPU/GPU/constant.h b/src/VirtualFluids_GPU/GPU/constant.h index 9be22508531cfcb76359191a683e84126124a21f..0836fd15f709ce0f52535250273eaf5c3358af31 100644 --- a/src/VirtualFluids_GPU/GPU/constant.h +++ b/src/VirtualFluids_GPU/GPU/constant.h @@ -108,7 +108,11 @@ #define c367 367.0 #define Op0000002 0.0000002 -#define smallSingle 0.0000000002f +#define c10eM30 1e-30 +#define c10eM10 1e-10 +#define smallSingle 0.0000000002 +#endif + #else #define c1o2 0.5f #define c3o2 1.5f @@ -213,83 +217,8 @@ #define c367 367.0f #define Op0000002 0.0000002f +#define c10eM30 1e-30 +#define c10eM10 1e-10 #define smallSingle 0.0000000002f #endif - - - - - -//__constant__ real c1o2 = 0.5 ; -//__constant__ real c3o2 = 1.5 ; -//__constant__ real c1o3 = 0.333333333333333 ; -//__constant__ real c2o3 = 0.666666666666667 ; -//__constant__ real c1o4 = 0.25 ; -//__constant__ real c1o6 = 0.166666666666667 ; -//__constant__ real c1o8 = 0.125 ; -//__constant__ real c1o9 = 0.111111111111111 ; -//__constant__ real c2o9 = 0.222222222222222 ; -//__constant__ real c4o9 = 0.444444444444444 ; -//__constant__ real c1o10 = 0.1 ; -//__constant__ real c1o12 = 0.083333333333333 ; -//__constant__ real c1o16 = 0.0625 ; -//__constant__ real c3o16 = 0.1875 ; -//__constant__ real c9o16 = 0.5625 ; -//__constant__ real c1o18 = 0.055555555555556 ; -//__constant__ real c1o20 = 0.05 ; -//__constant__ real c19o20 = 0.95 ; -//__constant__ real c21o20 = 1.05 ; -//__constant__ real c1o24 = 0.041666666666667 ; -//__constant__ real c1o27 = 0.037037037037037 ; -//__constant__ real c4o32 = 0.125 ; -//__constant__ real c1o36 = 0.027777777777778 ; -//__constant__ real c1o48 = 0.020833333333333 ; -//__constant__ real c1o64 = 0.015625 ; -//__constant__ real c3o64 = 0.046875 ; -//__constant__ real c9o64 = 0.140625 ; -//__constant__ real c27o64 = 0.421875 ; -//__constant__ real c1o72 = 0.013888888888889 ; -//__constant__ real c8over27 = 0.296296296296296 ; -//__constant__ real c2over27 = 0.074074074074074 ; -//__constant__ real c1over54 = 0.018518518518519 ; -//__constant__ real c1o100 = 0.01 ; -//__constant__ real c99o100 = 0.99 ; -//__constant__ real c1over126 = 0.007936507936508 ; -//__constant__ real c1over216 = 0.004629629629630 ; -//__constant__ real c9over2 = 4.5 ; -// -//__constant__ real zero = 0. ; -//__constant__ real one = 1. ; -//__constant__ real two = 2. ; -//__constant__ real three = 3. ; -//__constant__ real four = 4. ; -//__constant__ real five = 5. ; -//__constant__ real six = 6. ; -//__constant__ real eight = 8. ; -//__constant__ real nine = 9. ; -//__constant__ real ten = 10. ; -//__constant__ real eleven = 11. ; -//__constant__ real twelve = 12. ; -//__constant__ real fourteen = 14. ; -//__constant__ real sixteen = 16. ; -//__constant__ real seventeen = 17. ; -//__constant__ real eighteen = 18. ; -//__constant__ real twentyseven = 27. ; -//__constant__ real thirty = 30. ; -//__constant__ real thirtytwo = 32. ; -//__constant__ real thirtythree = 33. ; -//__constant__ real thirtyfour = 34. ; -//__constant__ real thirtysix = 36. ; -//__constant__ real fortytwo = 42. ; -//__constant__ real fiftyfour = 54. ; -//__constant__ real sixtyfour = 64. ; -//__constant__ real sixtysix = 66. ; -//__constant__ real sixtyeight = 68. ; -//__constant__ real seventytwo = 72. ; -//__constant__ real eightyfour = 84. ; -//__constant__ real ninetysix = 96. ; -// -//__constant__ real Op0000002 = 0.0000002 ; - -#endif \ No newline at end of file