7 int neigh::dirstep(int dir)
10 for(int idir=0; idir<dir; idir++) step*=len[idir];
14 neigh::neigh(const int& dimension, ...)
17 len = new int[dimension];
20 va_start(length, dimension);
21 for(int idim=0; idim < dimension; idim++) {
22 len[idim] = va_arg(length, int);
27 nfield = new int[totsize*2*dimension];
29 for( int ipos=0; ipos<totsize; ipos++ )
30 for( int idir=0; idir<2*dimension; idir++) {
31 if( idir < dimension ) { // positive direction
32 if ( ( ipos/dirstep(idir%dimension) ) % len[idir%dimension] == len[idir%dimension]-1 )
33 nfield[ipos*2*dimension + idir] = ipos - dirstep(idir%dimension)*(len[idir%dimension]-1);
35 nfield[ipos*2*dimension + idir] = ipos + dirstep(idir%dimension);
37 else { // negative direction
38 if ( ( ipos/dirstep(idir%dimension) ) % len[idir%dimension] == 0 )
39 nfield[ipos*2*dimension + idir] = ipos + dirstep(idir%dimension)*(len[idir%dimension]-1);
41 nfield[ipos*2*dimension + idir] = ipos - dirstep(idir%dimension);