source: src/smoother/gs.cpp@ b3075a

Last change on this file since b3075a was a72216, checked in by Olaf Lenz <olenz@…>, 13 years ago

Fixed permissions.

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

  • Property mode set to 100644
File size: 2.0 KB
RevLine 
[fcf7f6]1/*
2 * vmg - a versatile multigrid solver
3 * Copyright (C) 2012 Institute for Numerical Simulation, University of Bonn
4 *
5 * vmg is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * vmg is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
[48b662]19/**
20 * @file gs.cpp
21 * @author Julian Iseringhausen <isering@ins.uni-bonn.de>
22 * @date Mon Apr 18 13:07:44 2011
23 *
24 * @brief Gauss-Seidel method
25 *
26 */
27
28#ifdef HAVE_CONFIG_H
29#include <config.h>
30#endif
31
32#include <cassert>
33
34#include "base/discretization.hpp"
35#include "base/stencil.hpp"
[894a5f]36#include "comm/comm.hpp"
[48b662]37#include "grid/multigrid.hpp"
38#include "smoother/gs.hpp"
39#include "mg.hpp"
40
41using namespace VMG;
42
43void GaussSeidel::Compute(Grid& sol, Grid& rhs)
44{
[dfed1c]45#ifdef DEBUG_MATRIX_CHECKS
[48b662]46 sol.IsConsistent();
47 rhs.IsConsistent();
48 sol.IsCompatible(rhs);
49#endif
50
[dfed1c]51 Grid::iterator grid_iter;
52 Stencil::iterator stencil_iter;
[48b662]53 vmg_float temp;
54
55 const Stencil& A = MG::GetDiscretization()->GetStencil();
56 const vmg_float prefactor_inv = 1.0 / MG::GetDiscretization()->OperatorPrefactor(sol);
57 const vmg_float diag_inv = 1.0 / A.GetDiag();
58
[894a5f]59 MG::GetComm()->CommToGhosts(sol);
60
[dfed1c]61 for (grid_iter = rhs.Iterators().Local().Begin(); grid_iter != rhs.Iterators().Local().End(); ++grid_iter) {
[48b662]62
[4571da]63 temp = prefactor_inv * rhs.GetVal(*grid_iter);
[48b662]64
[dfed1c]65 for (stencil_iter=A.begin(); stencil_iter!=A.end(); ++stencil_iter)
66 temp -= stencil_iter->Val() * sol.GetVal(*grid_iter + stencil_iter->Disp());
[48b662]67
[dfed1c]68 sol(*grid_iter) = temp * diag_inv;
[48b662]69
[dfed1c]70 }
[48b662]71}
Note: See TracBrowser for help on using the repository browser.