/** * @file stencil.cpp * @author Julian Iseringhausen * @date Mon Apr 18 12:25:05 2011 * * @brief VMG::Stencil * */ #ifdef HAVE_CONFIG_H #include #endif #ifdef HAVE_MPI #include #endif #include "base/stencil.hpp" #include "comm/comm.hpp" #include "grid/grid.hpp" #include "grid/tempgrid.hpp" #include "mg.hpp" using namespace VMG; void Stencil::Apply(Grid& grid) const { Grid::iterator grid_iter; Stencil::iterator stencil_iter; TempGrid& temp = *MG::GetTempGrid(); temp.SetProperties(grid); MG::GetComm()->CommToGhosts(grid); for (grid_iter=grid.Iterators().Local().Begin(); grid_iter!=grid.Iterators().Local().End(); ++grid_iter) { temp(*grid_iter) = diag * grid.GetVal(*grid_iter); for (stencil_iter=disp.begin(); stencil_iter!=disp.end(); ++stencil_iter) temp(*grid_iter) += stencil_iter->Val() * grid.GetVal(*grid_iter + stencil_iter->Disp()); } grid.SetGrid(temp); }