source: src/smoother/gs.cpp@ dfed1c

Last change on this file since dfed1c was dfed1c, checked in by Julian Iseringhausen <isering@…>, 14 years ago

Major vmg update.

git-svn-id: https://svn.version.fz-juelich.de/scafacos/trunk@1136 5161e1c8-67bf-11de-9fd5-51895aff932f

  • Property mode set to 100644
File size: 1.2 KB
Line 
1/**
2 * @file gs.cpp
3 * @author Julian Iseringhausen <isering@ins.uni-bonn.de>
4 * @date Mon Apr 18 13:07:44 2011
5 *
6 * @brief Gauss-Seidel method
7 *
8 */
9
10#ifdef HAVE_CONFIG_H
11#include <config.h>
12#endif
13
14#include <cassert>
15
16#include "base/discretization.hpp"
17#include "base/stencil.hpp"
18#include "grid/multigrid.hpp"
19#include "smoother/gs.hpp"
20#include "mg.hpp"
21
22using namespace VMG;
23
24void GaussSeidel::Compute(Grid& sol, Grid& rhs)
25{
26#ifdef DEBUG_MATRIX_CHECKS
27 sol.IsConsistent();
28 rhs.IsConsistent();
29 sol.IsCompatible(rhs);
30#endif
31
32 Grid::iterator grid_iter;
33 Stencil::iterator stencil_iter;
34 vmg_float temp;
35
36 const Stencil& A = MG::GetDiscretization()->GetStencil();
37 const vmg_float prefactor_inv = 1.0 / MG::GetDiscretization()->OperatorPrefactor(sol);
38 const vmg_float diag_inv = 1.0 / A.GetDiag();
39
40 for (grid_iter = rhs.Iterators().Local().Begin(); grid_iter != rhs.Iterators().Local().End(); ++grid_iter) {
41
42 temp = prefactor_inv * rhs.GetCorrectedVal(*grid_iter);
43
44 for (stencil_iter=A.begin(); stencil_iter!=A.end(); ++stencil_iter)
45 temp -= stencil_iter->Val() * sol.GetVal(*grid_iter + stencil_iter->Disp());
46
47 sol(*grid_iter) = temp * diag_inv;
48
49 }
50}
Note: See TracBrowser for help on using the repository browser.