/** * @file gsrb.cpp * @author Julian Iseringhausen * @date Mon Apr 18 13:08:20 2011 * * @brief Gauss-Seidel Red Black method * */ #ifdef HAVE_CONFIG_H #include #endif #include "base/discretization.hpp" #include "base/stencil.hpp" #include "grid/grid.hpp" #include "smoother/gsrb.hpp" using namespace VMG; void GaussSeidelRB::Compute(Grid& sol, Grid& rhs) { #ifdef DEBUG sol.IsConsistent(); rhs.IsConsistent(); sol.IsCompatible(rhs); #endif int i,j,k; vmg_float temp; const Stencil& A = MG::GetDiscretization()->GetStencil(); const vmg_float prefactor_inv = 1.0 / MG::GetDiscretization()->OperatorPrefactor(sol); const vmg_float diag_inv = 1.0 / A.GetDiag(); for (i=rhs.Local().Begin().X(); ival * sol.GetVal(i+iter->m, j+iter->n, k+iter->o); sol(i, j, k) = temp * diag_inv; } for (i=rhs.Local().Begin().X(); ival * sol.GetVal(i+iter->m, j+iter->n, k+iter->o); sol(i, j, k) = temp * diag_inv; } }