/** # MWE: second row of ghost cells is wrong with neumann conditions */ #define BGHOSTS 2 /** This minimum working example show that the command lines `s[left] = neumann(a)` followed by `boundary ({s})` imposes the same value in the first and second row of ghost cells. */ int main() { init_grid (4); output_cells (stdout); scalar s[]; s[left] = neumann(1.); foreach() s[] = 0.; boundary ({s}); foreach() fprintf (stderr, "%g %g %g\n", x, y, s[]); foreach_boundary(left) for (int i = -2; i < 0; i++) fprintf (stderr, "%g %g %g\n", x + i*Delta, y, s[i]); } /** # Outputs In the second row of cells, the value of `s` should be 0.5 instead of 0.25. This comes from the definition of the neuman command in [common.h](src/common.h): ~~~bash @define neumann(x) (Delta*(x) + val(_s,0,0,0)) ~~~ which does not distinguish the first and second row of ghost cells and I do not see how to do it. I didn't find where `boundary()` is defined and I don't know how to test if we are in the first or second row of ghost cells. ~~~gnuplot Second row of ghost cells is wrong blue="#5082DC" set terminal @PNG enhanced size 640,640 font ",8" set output 'boundary.png' unset key unset border unset tics unset xlabel unset ylabel set size ratio -1 plot 'out' w l lc rgb "#7F7F7F", \ 'log' u 1:2:3 with labels tc rgb blue ~~~ */