Files
LBPM/cpu/MixedGradient.cpp
Thomas Ramstad 23189f5577 Clang format (#55)
Run clang-format on modules of code
2021-11-08 22:58:37 +01:00

52 lines
2.1 KiB
C++

/* Implement Mixed Gradient (Lee et al. JCP 2016)*/
extern "C" void ScaLBL_D3Q19_MixedGradient(int *Map, double *Phi,
double *Gradient, int start,
int finish, int Np, int Nx, int Ny,
int Nz) {
static int D3Q19[18][3] = {{1, 0, 0}, {-1, 0, 0}, {0, 1, 0}, {0, -1, 0},
{0, 0, 1}, {0, 0, -1}, {1, 1, 0}, {-1, -1, 0},
{1, -1, 0}, {-1, 1, 0}, {1, 0, 1}, {-1, 0, -1},
{1, 0, -1}, {-1, 0, 1}, {0, 1, 1}, {0, -1, -1},
{0, 1, -1}, {0, -1, 1}};
int i, j, k, n;
int np, np2, nm; // neighbors
double v, vp, vp2, vm; // values at neighbors
double grad;
for (int idx = start; idx < finish; idx++) {
n = Map[idx]; // layout in regular array
//.......Back out the 3-D indices for node n..............
k = n / (Nx * Ny);
j = (n - Nx * Ny * k) / Nx;
i = n - Nx * Ny * k - Nx * j;
v = Phi[n];
grad = 0.0;
for (int q = 0; q < 6; q++) {
int iqx = D3Q19[q][0];
int iqy = D3Q19[q][1];
int iqz = D3Q19[q][2];
np = (k + iqz) * Nx * Ny + (j + iqy) * Nx + i + iqx;
np2 = (k + 2 * iqz) * Nx * Ny + (j + 2 * iqy) * Nx + i + 2 * iqx;
nm = (k - iqz) * Nx * Ny + (j - iqy) * Nx + i - iqx;
vp = Phi[np];
vp2 = Phi[np2];
vm = Phi[nm];
grad += 0.25 * (5.0 * vp - vp2 - 3.0 * v - vm);
}
for (int q = 6; q < 18; q++) {
int iqx = D3Q19[q][0];
int iqy = D3Q19[q][1];
int iqz = D3Q19[q][2];
np = (k + iqz) * Nx * Ny + (j + iqy) * Nx + i + iqx;
np2 = (k + 2 * iqz) * Nx * Ny + (j + 2 * iqy) * Nx + i + 2 * iqx;
nm = (k - iqz) * Nx * Ny + (j - iqy) * Nx + i - iqx;
vp = Phi[np];
vp2 = Phi[np2];
vm = Phi[nm];
grad += 0.125 * (5.0 * vp - vp2 - 3.0 * v - vm);
}
Gradient[n] = grad;
}
}