Ignore:
Timestamp:
Nov 22, 2011, 9:22:10 PM (14 years ago)
Author:
Julian Iseringhausen <isering@…>
Children:
facba0
Parents:
66f24d
Message:

Major vmg update.

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

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/smoother/gsrb.cpp

    r66f24d rdfed1c  
    1313
    1414#include "base/discretization.hpp"
     15#include "base/timer.hpp"
    1516#include "base/stencil.hpp"
     17#include "comm/comm.hpp"
    1618#include "grid/grid.hpp"
    1719#include "smoother/gsrb.hpp"
     
    2123void GaussSeidelRB::Compute(Grid& sol, Grid& rhs)
    2224{
    23 #ifdef DEBUG
     25#ifdef DEBUG_MATRIX_CHECKS
    2426  sol.IsConsistent();
    2527  rhs.IsConsistent();
     28#endif
     29
     30#ifdef DEBUG
    2631  sol.IsCompatible(rhs);
    2732#endif
    2833
    29   int i,j,k;
     34  Timer::Start("SmootherWithoutCommunication");
     35
     36  Index i;
    3037  vmg_float temp;
    3138  const Stencil& A = MG::GetDiscretization()->GetStencil();
    3239  const vmg_float prefactor_inv = 1.0 / MG::GetDiscretization()->OperatorPrefactor(sol);
    3340  const vmg_float diag_inv = 1.0 / A.GetDiag();
     41  const int off = rhs.Global().BeginLocal().Sum() - rhs.Local().HasHalo1().Sum();
    3442
    35   for (i=rhs.Local().Begin().X(); i<rhs.Local().End().X(); i++)
    36     for (j=rhs.Local().Begin().Y(); j<rhs.Local().End().Y(); j++)
    37       for (k=rhs.Local().Begin().Z() + ((i+j+1) % 2); k<rhs.Local().End().Z(); k+=2) {
     43  for (i.X()=rhs.Local().Begin().X(); i.X()<rhs.Local().End().X(); ++i.X())
     44    for (i.Y()=rhs.Local().Begin().Y(); i.Y()<rhs.Local().End().Y(); ++i.Y())
     45      for (i.Z()=rhs.Local().Begin().Z() + ((i.X()+i.Y()+off+1) % 2); i.Z()<rhs.Local().End().Z(); i.Z()+=2) {
    3846
    39         temp = prefactor_inv * rhs.GetCorrectedVal(i,j,k);
     47        temp = prefactor_inv * rhs.GetCorrectedVal(i);
    4048
    41         for (Stencil::iterator iter=A.begin(); iter!=A.end(); iter++)
    42           temp -= iter->val * sol.GetVal(i+iter->m, j+iter->n, k+iter->o);
     49        for (Stencil::iterator iter=A.begin(); iter!=A.end(); ++iter)
     50          temp -= iter->Val() * sol.GetVal(i + iter->Disp());
    4351
    44         sol(i, j, k) = temp * diag_inv;
     52        sol(i) = temp * diag_inv;
    4553
    4654      }
    4755
    48   for (i=rhs.Local().Begin().X(); i<rhs.Local().End().X(); i++)
    49     for (j=rhs.Local().Begin().Y(); j<rhs.Local().End().Y(); j++)
    50       for (k=rhs.Local().Begin().Z() + ((i+j) % 2); k<rhs.Local().End().Z(); k+=2) {
     56  Timer::Stop("SmootherWithoutCommunication");
    5157
    52         temp = prefactor_inv * rhs.GetCorrectedVal(i,j,k);
     58  MG::GetComm()->CommToGhosts(sol);
    5359
    54         for (Stencil::iterator iter=A.begin(); iter!=A.end(); iter++)
    55           temp -= iter->val * sol.GetVal(i+iter->m, j+iter->n, k+iter->o);
     60  Timer::Start("SmootherWithoutCommunication");
    5661
    57         sol(i, j, k) = temp * diag_inv;
     62  for (i.X()=rhs.Local().Begin().X(); i.X()<rhs.Local().End().X(); ++i.X())
     63    for (i.Y()=rhs.Local().Begin().Y(); i.Y()<rhs.Local().End().Y(); ++i.Y())
     64      for (i.Z()=rhs.Local().Begin().Z() + ((i.X()+i.Y()+off) % 2); i.Z()<rhs.Local().End().Z(); i.Z()+=2) {
     65
     66        temp = prefactor_inv * rhs.GetCorrectedVal(i);
     67
     68        for (Stencil::iterator iter=A.begin(); iter!=A.end(); ++iter)
     69          temp -= iter->Val() * sol.GetVal(i + iter->Disp());
     70
     71        sol(i) = temp * diag_inv;
    5872
    5973      }
     74
     75  Timer::Stop("SmootherWithoutCommunication");
    6076}
Note: See TracChangeset for help on using the changeset viewer.