Memosa-FVM  0.2
SpikeSolver Class Reference

#include <SpikeSolver.h>

Inheritance diagram for SpikeSolver:
Collaboration diagram for SpikeSolver:

Public Member Functions

 SpikeSolver (const SpikeStorage &spike_storage)
 
virtual ~SpikeSolver ()
 
virtual MFRPtr solve (LinearSystem &ls)
 
virtual void cleanup ()
 
virtual void smooth (LinearSystem &ls)
 
 DEFINE_TYPENAME ("SpikeSolver")
 
- Public Member Functions inherited from LinearSolver
 LinearSolver ()
 

Private Member Functions

void doSweeps (LinearSystem &ls, const int nSweeps)
 
 SpikeSolver (const SpikeSolver &)
 

Private Attributes

const SpikeStorage_spikeStorage
 

Additional Inherited Members

- Public Attributes inherited from LinearSolver
int nMaxIterations
 
int verbosity
 
double relativeTolerance
 
double absoluteTolerance
 

Detailed Description

Solve a linear system using Jacobi iterations

Definition at line 21 of file SpikeSolver.h.

Constructor & Destructor Documentation

SpikeSolver::SpikeSolver ( const SpikeStorage spike_storage)

Definition at line 16 of file SpikeSolver.cpp.

References logCtor.

16  :
17 _spikeStorage(spike_storage)
18 {
19  logCtor();
20 
21 }
#define logCtor()
Definition: RLogInterface.h:26
const SpikeStorage & _spikeStorage
Definition: SpikeSolver.h:36
SpikeSolver::~SpikeSolver ( )
virtual

Definition at line 23 of file SpikeSolver.cpp.

References logDtor.

24 {
25  logDtor();
26 }
#define logDtor()
Definition: RLogInterface.h:33
SpikeSolver::SpikeSolver ( const SpikeSolver )
private

Member Function Documentation

void SpikeSolver::cleanup ( )
virtual

Implements LinearSolver.

Definition at line 44 of file SpikeSolver.cpp.

45 {
46 }
SpikeSolver::DEFINE_TYPENAME ( "SpikeSolver"  )
void SpikeSolver::doSweeps ( LinearSystem ls,
const int  nSweeps 
)
private

Definition at line 29 of file SpikeSolver.cpp.

References _spikeStorage, LinearSystem::getB(), LinearSystem::getDelta(), LinearSystem::getMatrix(), LinearSystem::getResidual(), and MultiFieldMatrix::spikeSolve().

Referenced by smooth(), and solve().

30 {
31  const MultiFieldMatrix& m = ls.getMatrix();
32  MultiField& delta = ls.getDelta();
33  const MultiField& b = ls.getB();
34  MultiField& r = ls.getResidual();
35 
36  for(int i=0; i<nSweeps; i++)
37  {
38  m.spikeSolve(delta,b,r,_spikeStorage);
39  }
40 }
MultiField & getResidual()
Definition: LinearSystem.h:35
MultiField & getDelta()
Definition: LinearSystem.h:34
virtual void spikeSolve(IContainer &xB, const IContainer &bB, IContainer &tempB, const SpikeStorage &spike_storage) const
const SpikeStorage & _spikeStorage
Definition: SpikeSolver.h:36
MultiField & getB()
Definition: LinearSystem.h:33
MultiFieldMatrix & getMatrix()
Definition: LinearSystem.h:37
void SpikeSolver::smooth ( LinearSystem ls)
virtual

Implements LinearSolver.

Definition at line 100 of file SpikeSolver.cpp.

References doSweeps().

101 {
102  doSweeps(ls,1);
103 }
void doSweeps(LinearSystem &ls, const int nSweeps)
Definition: SpikeSolver.cpp:29
MFRPtr SpikeSolver::solve ( LinearSystem ls)
virtual

Implements LinearSolver.

Definition at line 49 of file SpikeSolver.cpp.

References LinearSolver::absoluteTolerance, MultiFieldMatrix::computeResidual(), doSweeps(), LinearSystem::getB(), LinearSystem::getDelta(), LinearSystem::getMatrix(), MultiField::getOneNorm(), LinearSystem::getResidual(), LinearSolver::nMaxIterations, LinearSolver::relativeTolerance, and LinearSolver::verbosity.

50 {
52  ls.getB(),
53  ls.getResidual());
54  MFRPtr rNorm0(ls.getResidual().getOneNorm());
55 
56 #ifdef FVM_PARALLEL
57  if (verbosity >0 && MPI::COMM_WORLD.Get_rank() == 0 )
58  cout << "0: " << *rNorm0 << "procID = " << MPI::COMM_WORLD.Get_rank() << endl;
59 #endif
60 
61 #ifndef FVM_PARALLEL
62  if ( verbosity > 0 )
63  cout << "0: " << *rNorm0 << endl;
64 #endif
65 
66  if (*rNorm0 < absoluteTolerance )
67  return rNorm0;
68 
69  for(int i=1; i<nMaxIterations; i++)
70  {
71  doSweeps(ls,1);
72 
74  ls.getB(),
75  ls.getResidual());
76  MFRPtr rNorm(ls.getResidual().getOneNorm());
77  MFRPtr normRatio((*rNorm)/(*rNorm0));
78 
79 #ifndef FVM_PARALLEL
80  if (verbosity >0 )
81  cout << i << ": " << *rNorm << endl;
82 #endif
83 
84 
85 #ifdef FVM_PARALLEL
86  if (*rNorm < absoluteTolerance || *normRatio < relativeTolerance || i == nMaxIterations-1)
87  if (verbosity >0 && MPI::COMM_WORLD.Get_rank() == 0 )
88  cout <<i << ": " << "procID = " << MPI::COMM_WORLD.Get_rank() << *rNorm << endl;
89 #endif
90 
91  if (*rNorm < absoluteTolerance || *normRatio < relativeTolerance)
92  break;
93 
94  }
95  return rNorm0;
96 }
void doSweeps(LinearSystem &ls, const int nSweeps)
Definition: SpikeSolver.cpp:29
MultiField & getResidual()
Definition: LinearSystem.h:35
MultiField & getDelta()
Definition: LinearSystem.h:34
int nMaxIterations
Definition: LinearSolver.h:31
shared_ptr< MultiFieldReduction > getOneNorm() const
Definition: MultiField.cpp:216
double relativeTolerance
Definition: LinearSolver.h:33
virtual void computeResidual(const IContainer &xB, const IContainer &bB, IContainer &rB) const
double absoluteTolerance
Definition: LinearSolver.h:34
MultiField & getB()
Definition: LinearSystem.h:33
shared_ptr< MultiFieldReduction > MFRPtr
MultiFieldMatrix & getMatrix()
Definition: LinearSystem.h:37

Member Data Documentation

const SpikeStorage& SpikeSolver::_spikeStorage
private

Definition at line 36 of file SpikeSolver.h.

Referenced by doSweeps().


The documentation for this class was generated from the following files: