#include "nstencil_half_bin_3d_newton_ssa.h"
using namespace LAMMPS_NS;
NStencilHalfBin3dNewtonSSA::NStencilHalfBin3dNewtonSSA(LAMMPS *lmp) :
NStencilSSA(lmp) {}
void NStencilHalfBin3dNewtonSSA::create()
{
int i,j,k,pos = 0;
nstencil_ssa[0] = 0;
stencilxyz[pos][0] = 0;
stencilxyz[pos][1] = 0;
stencilxyz[pos][2] = 0;
stencil[pos++] = 0;
for (k = 0; k <= sz; k++)
for (j = 0; j <= sy; j++)
for (i = 0; i <= sx; i++)
if (k > 0 || j > 0 || i > 0) if (bin_distance(i,j,k) < cutneighmaxsq) {
stencilxyz[pos][0] = i;
stencilxyz[pos][1] = j;
stencilxyz[pos][2] = k;
stencil[pos++] = k*mbiny*mbinx + j*mbinx + i;
}
nstencil_ssa[1] = pos;
for (k = 0; k <= sz; k++)
for (j = 1; j <= sy; j++)
for (i = -sx; i < 0; i++)
if (bin_distance(i,j,k) < cutneighmaxsq) {
stencilxyz[pos][0] = i;
stencilxyz[pos][1] = j;
stencilxyz[pos][2] = k;
stencil[pos++] = k*mbiny*mbinx + j*mbinx + i;
}
nstencil_ssa[2] = pos;
for (k = 1; k <= sz; k++)
for (j = -sy; j < 0; j++)
for (i = 0; i <= sx; i++)
if (bin_distance(i,j,k) < cutneighmaxsq) {
stencilxyz[pos][0] = i;
stencilxyz[pos][1] = j;
stencilxyz[pos][2] = k;
stencil[pos++] = k*mbiny*mbinx + j*mbinx + i;
}
nstencil_ssa[3] = pos;
for (k = 1; k <= sz; k++)
for (j = -sy; j <= 0; j++)
for (i = -sx; i < 0; i++)
if (bin_distance(i,j,k) < cutneighmaxsq) {
stencilxyz[pos][0] = i;
stencilxyz[pos][1] = j;
stencilxyz[pos][2] = k;
stencil[pos++] = k*mbiny*mbinx + j*mbinx + i;
}
nstencil_ssa[4] = pos; for (k = -sz; k < 0; k++)
for (j = 0; j <= sy; j++)
for (i = 0; i <= sx; i++)
if (bin_distance(i,j,k) < cutneighmaxsq) {
stencilxyz[pos][0] = i;
stencilxyz[pos][1] = j;
stencilxyz[pos][2] = k;
stencil[pos++] = k*mbiny*mbinx + j*mbinx + i;
}
for (k = -sz; k < 0; k++)
for (j = 1; j <= sy; j++)
for (i = -sx; i < 0; i++)
if (bin_distance(i,j,k) < cutneighmaxsq) {
stencilxyz[pos][0] = i;
stencilxyz[pos][1] = j;
stencilxyz[pos][2] = k;
stencil[pos++] = k*mbiny*mbinx + j*mbinx + i;
}
for (k = -sz; k <= 0; k++)
for (j = -sy; j < 0; j++)
for (i = 0; i <= sx; i++)
if (bin_distance(i,j,k) < cutneighmaxsq) {
stencilxyz[pos][0] = i;
stencilxyz[pos][1] = j;
stencilxyz[pos][2] = k;
stencil[pos++] = k*mbiny*mbinx + j*mbinx + i;
}
for (k = -sz; k <= 0; k++)
for (j = -sy; j <= 0; j++)
for (i = -sx; i < 0; i++)
if (bin_distance(i,j,k) < cutneighmaxsq) {
stencilxyz[pos][0] = i;
stencilxyz[pos][1] = j;
stencilxyz[pos][2] = k;
stencil[pos++] = k*mbiny*mbinx + j*mbinx + i;
}
nstencil = pos; }