Memosa-FVM  0.2
LinearSystem Class Reference

#include <LinearSystem.h>

Collaboration diagram for LinearSystem:

Public Member Functions

 LinearSystem ()
 
virtual ~LinearSystem ()
 
void initAssembly ()
 
void initSolve ()
 
void postSolve ()
 
void updateSolution ()
 
shared_ptr< LinearSystemcreateCoarse (const int groupSize, const double weightRatioThreshold)
 
MultiFieldgetX ()
 
MultiFieldgetB ()
 
MultiFieldgetDelta ()
 
MultiFieldgetResidual ()
 
MultiFieldMatrixgetMatrix ()
 
MultiFieldgetCoarseIndex ()
 
shared_ptr< MultiFieldgetDeltaPtr ()
 
shared_ptr< MultiFieldgetBPtr ()
 
void replaceDelta (shared_ptr< MultiField > newDelta)
 
void replaceB (shared_ptr< MultiField > newB)
 
void replaceResidual (shared_ptr< MultiField > newR)
 
void setCoarseningField (const Field &f)
 

Public Attributes

bool isSymmetric
 

Private Attributes

MultiFieldMatrix _matrix
 
shared_ptr< MultiField_x
 
shared_ptr< MultiField_b
 
shared_ptr< MultiField_delta
 
shared_ptr< MultiField_residual
 
MultiField _coarseIndex
 
const Field_coarseningField
 
shared_ptr< MultiField_xAux
 
shared_ptr< MultiField_bAux
 
shared_ptr< MultiField_deltaAux
 
shared_ptr< MultiField_residualAux
 

Friends

class LinearSystemMerger
 

Detailed Description

Definition at line 11 of file LinearSystem.h.

Constructor & Destructor Documentation

LinearSystem::LinearSystem ( )

Definition at line 13 of file LinearSystem.cpp.

Referenced by createCoarse().

13  :
14  isSymmetric(false),
15  _x(new MultiField()),
16  _b(),
17  _delta(),
18  _residual(),
19  _coarseIndex(),
21 {}
shared_ptr< MultiField > _delta
Definition: LinearSystem.h:56
shared_ptr< MultiField > _b
Definition: LinearSystem.h:55
shared_ptr< MultiField > _x
Definition: LinearSystem.h:54
shared_ptr< MultiField > _residual
Definition: LinearSystem.h:57
MultiField _coarseIndex
Definition: LinearSystem.h:58
const Field * _coarseningField
Definition: LinearSystem.h:59
bool isSymmetric
Definition: LinearSystem.h:50
LinearSystem::~LinearSystem ( )
virtual

Definition at line 23 of file LinearSystem.cpp.

24 {
25 
26 
27 }

Member Function Documentation

shared_ptr< LinearSystem > LinearSystem::createCoarse ( const int  groupSize,
const double  weightRatioThreshold 
)

we create only one entry in coarseIndex for each StorageSite even if the site is present in multiple fine ArrayIndices of x. If a coarseningField is specified we will use that otherwise the first one gets used

coarsen the matrices corresponding to the fieldIndices we have selected and then sync ghost cell values. This process will fill up the coarseSizes and coarseGhostSizes variables in the matrix as well create the mappers

now we have the coarse indices, sizes, sites, mappers and * connectivities computed for the fieldIndices we * selected. Before we can create coarse matrices we need to * set these for the other fieldIndices since the matrices of * course need to be created for all the fine matrices * present

Definition at line 67 of file LinearSystem.cpp.

References _b, MultiFieldMatrix::_coarseGatherMaps, MultiFieldMatrix::_coarseGhostSizes, _coarseIndex, MultiFieldMatrix::_coarseMatrices, _coarseningField, MultiFieldMatrix::_coarseScatterMaps, MultiFieldMatrix::_coarseSites, MultiFieldMatrix::_coarseSizes, MultiFieldMatrix::_coarseToFineMappings, _matrix, MultiField::addArray(), MultiFieldMatrix::createCoarseConnectivity(), MultiFieldMatrix::createCoarseMatrices(), MultiFieldMatrix::createCoarsening(), MultiFieldMatrix::createCoarseToFineMapping(), MultiField::getArrayPtr(), StorageSite::getCount(), StorageSite::getGatherMap(), StorageSite::getGatherProcID(), ArrayBase::getLength(), StorageSite::getScatterMap(), StorageSite::getScatterProcID(), StorageSite::getTag(), MultiFieldMatrix::hasMatrix(), LinearSystem(), MultiField::sync(), MultiFieldMatrix::syncGhostCoarsening(), and MultiField::zero().

Referenced by AMG::createCoarseLevels().

68 {
69 
70  shared_ptr<LinearSystem> coarseLS(new LinearSystem());
79  // keep track of which fieldIndex was used for coarsening each site
80  map<const StorageSite*, const Field *> sitesCoarsenedWithField;
81 
82 
83  const MultiField::ArrayIndexList& arrayIndices = _b->getArrayIndices();
84  foreach(MultiField::ArrayIndex ai,arrayIndices)
85  {
86  const Field *fieldIndex = ai.first;
87  const StorageSite *site = ai.second;
88 
89  if (!_coarseningField || fieldIndex == _coarseningField)
90  {
91  if (sitesCoarsenedWithField.find(site) == sitesCoarsenedWithField.end())
92  {
93  sitesCoarsenedWithField[site] = fieldIndex;
94  const ArrayBase& bi = (*_b)[ai];
95  shared_ptr<Array<int> > cIndex(new Array<int>(bi.getLength()));
96  _coarseIndex.addArray(ai,cIndex);
97 
98  }
99  }
100 
101  }
102 
111  _matrix.createCoarsening(_coarseIndex,groupSize,weightRatioThreshold);
112 
113  _coarseIndex.sync();
114 
115 
117 
118 
119  // we can now create the coarse sites for each fine site
120  foreach(MultiField::ArrayIndex k,arrayIndices)
121  {
122  // we will only have entries for indices which were selected to be coarsened
123  if (_matrix._coarseSizes.find(k) != _matrix._coarseSizes.end())
124  {
125  int selfSize = _matrix._coarseSizes[k];
126  int ghostSize = _matrix._coarseGhostSizes[k];
127  _matrix._coarseSites[k] =
128  shared_ptr<StorageSite>(new StorageSite(selfSize,ghostSize));
129  }
130  }
131 
132  // set the mappers in the newly created coarse sites
133  foreach(MultiField::ArrayIndex k,arrayIndices)
134  {
135  if (_matrix._coarseSites.find(k) != _matrix._coarseSites.end())
136  {
137  const StorageSite& fineSite = *k.second;
138 
139  StorageSite& coarseSite = *_matrix._coarseSites[k];
140 
141  const StorageSite::ScatterMap& fineScatterMap = fineSite.getScatterMap();
142  StorageSite::ScatterMap& coarseScatterMap = coarseSite.getScatterMap();
143 
144  foreach(const StorageSite::ScatterMap::value_type& pos, fineScatterMap)
145  {
146  const StorageSite& fineOSite = *pos.first;
147  MultiField::ArrayIndex kO(k.first,&fineOSite);
148 
149 
150 #ifdef FVM_PARALLEL
151  // the ghost site will not have its corresponding coarse
152  // site created yet so we create it here
153  if (_matrix._coarseSites.find(kO) == _matrix._coarseSites.end())
154  {
155  shared_ptr<StorageSite> ghostSite
156  (new StorageSite(-1));
157  ghostSite->setGatherProcID ( fineOSite.getGatherProcID() );
158  ghostSite->setScatterProcID( fineOSite.getScatterProcID() );
159  ghostSite->setTag( fineOSite.getTag() );
160  _matrix._coarseSites[kO] = ghostSite;
161  }
162 #endif
163  const StorageSite& coarseOSite = *_matrix._coarseSites[kO];
164  MultiFieldMatrix::SSPair sskey(&fineSite,&fineOSite);
165  coarseScatterMap[&coarseOSite] = _matrix._coarseScatterMaps[sskey];
166  }
167 
168  const StorageSite::GatherMap& fineGatherMap = fineSite.getGatherMap();
169  StorageSite::GatherMap& coarseGatherMap = coarseSite.getGatherMap();
170  foreach(const StorageSite::GatherMap::value_type& pos, fineGatherMap)
171  {
172  const StorageSite& fineOSite = *pos.first;
173  MultiField::ArrayIndex kO(k.first,&fineOSite);
174  const StorageSite& coarseOSite = *_matrix._coarseSites[kO];
175  MultiFieldMatrix::SSPair sskey(&fineSite,&fineOSite);
176 
177 
178  coarseGatherMap[&coarseOSite] = _matrix._coarseGatherMaps[sskey];
179  }
180 
181 
182  }
183  }
184 
185  // create the connectivities for the coarse matrices
187 
197  foreach(MultiField::ArrayIndex k,arrayIndices)
198  {
199  const StorageSite *site = k.second;
200  if (_matrix._coarseSites.find(k) == _matrix._coarseSites.end())
201  {
202  const Field* fieldIndexUsedForCoarsening = sitesCoarsenedWithField[site];
203  MultiField::ArrayIndex indexCoarsened(fieldIndexUsedForCoarsening,site);
204  _coarseIndex.addArray(k, _coarseIndex.getArrayPtr(indexCoarsened));
205  _matrix._coarseSizes[k] = _matrix._coarseSizes[indexCoarsened];
206  _matrix._coarseGhostSizes[k] = _matrix._coarseGhostSizes[indexCoarsened];
207  _matrix._coarseSites[k] = _matrix._coarseSites[indexCoarsened];
209  }
210  }
211 
214  foreach(MultiField::ArrayIndex fineRowIndex,arrayIndices)
215  {
216  MultiField::ArrayIndex coarseRowIndex (fineRowIndex.first,
217  _matrix._coarseSites[fineRowIndex].get());
218  foreach(MultiField::ArrayIndex fineColIndex,arrayIndices)
219  {
220  MultiFieldMatrix::EntryIndex fineEntryIndex(fineRowIndex,fineColIndex);
221  if (_matrix.hasMatrix(fineRowIndex,fineColIndex))
222  {
223  MultiField::ArrayIndex coarseColIndex(fineColIndex.first,
224  _matrix._coarseSites[fineColIndex].get());
225  MultiFieldMatrix::EntryIndex coarseEntryIndex(coarseRowIndex,coarseColIndex);
226  coarseLS->_matrix._matrices[coarseEntryIndex] =
227  _matrix._coarseMatrices[fineEntryIndex];
228  }
229  }
230  }
231 
232  coarseLS->_b = shared_ptr<MultiField>(new MultiField());
233 
234  foreach(MultiField::ArrayIndex k,arrayIndices)
235  {
236  const StorageSite& coarseSite = *_matrix._coarseSites[k];
237  MultiField::ArrayIndex coarseIndex(k.first,&coarseSite);
238  coarseLS->_b->addArray(coarseIndex, (*_b)[k].newSizedClone(coarseSite.getCount()));
239  }
240 
241  coarseLS->_b->zero();
242  coarseLS->_delta = dynamic_pointer_cast<MultiField>(coarseLS->_b->newClone());
243  coarseLS->_delta->zero();
244  coarseLS->_residual = dynamic_pointer_cast<MultiField>(coarseLS->_b->newClone());
245  coarseLS->_residual->zero();
246 
247  return coarseLS;
248 }
MatrixSizeMap _coarseGhostSizes
virtual int getLength() const =0
void createCoarseToFineMapping(const MultiField &coarseIndexField)
void createCoarseConnectivity(MultiField &coarseIndex)
Definition: Field.h:14
shared_ptr< MultiField > _b
Definition: LinearSystem.h:55
bool hasMatrix(const Index &rowIndex, const Index &colIndex) const
void createCoarsening(MultiField &coarseIndex, const int groupSize, const double weightRatioThreshold)
shared_ptr< ArrayBase > getArrayPtr(const ArrayIndex &)
Definition: MultiField.cpp:67
CoarseToFineMappingMap _coarseToFineMappings
virtual void zero()
Definition: MultiField.cpp:115
StorageSiteMap _coarseSites
int getTag() const
Definition: StorageSite.h:84
pair< const Field *, const StorageSite * > ArrayIndex
Definition: MultiField.h:21
int getScatterProcID() const
Definition: StorageSite.h:82
int getGatherProcID() const
Definition: StorageSite.h:83
MatrixMap _coarseMatrices
vector< ArrayIndex > ArrayIndexList
Definition: MultiField.h:24
void createCoarseMatrices(MultiField &coarseIndex)
MultiField _coarseIndex
Definition: LinearSystem.h:58
const ScatterMap & getScatterMap() const
Definition: StorageSite.h:58
MatrixMappersMap _coarseGatherMaps
map< const StorageSite *, shared_ptr< Array< int > > > ScatterMap
Definition: StorageSite.h:23
MatrixMappersMap _coarseScatterMaps
MultiFieldMatrix _matrix
Definition: LinearSystem.h:53
const GatherMap & getGatherMap() const
Definition: StorageSite.h:59
int getCount() const
Definition: StorageSite.h:39
map< const StorageSite *, shared_ptr< Array< int > > > GatherMap
Definition: StorageSite.h:24
void addArray(const ArrayIndex &aIndex, shared_ptr< ArrayBase > a)
Definition: MultiField.cpp:270
const Field * _coarseningField
Definition: LinearSystem.h:59
pair< Index, Index > EntryIndex
void syncGhostCoarsening(MultiField &coarseIndexField)
MatrixSizeMap _coarseSizes
void sync()
Definition: MultiField.cpp:489
pair< const StorageSite *, const StorageSite * > SSPair
MultiField& LinearSystem::getB ( )
inline

Definition at line 33 of file LinearSystem.h.

References _b.

Referenced by StructureModel< T >::Impl::advanceExplicit(), StructureModel< T >::Impl::applyBC(), AMG::cycle(), LinearizeInterfaceJumpUnconnected< X, Diag, OffDiag >::discretize(), ILU0Solver::doSweeps(), JacobiSolver::doSweeps(), SpikeSolver::doSweeps(), AMG::doSweeps(), ThermalModel< T >::Impl::dumpMatrix(), VacancyModel< T >::Impl::dumpMatrix(), PlateModel< T >::Impl::dumpMatrix(), ThermalModel< T >::Impl::linearize(), FractureModel< T >::Impl::linearize(), VacancyModel< T >::Impl::linearize(), SpeciesModel< T >::Impl::linearize(), ElectricModel< T >::Impl::linearizeChargeTransport(), FlowModel< T >::Impl::linearizeContinuity(), PlateModel< T >::Impl::linearizeDeformation(), StructureModel< T >::Impl::linearizeDeformation(), KeModel< T >::Impl::linearizedissipation(), ElectricModel< T >::Impl::linearizeElectroStatics(), KeModel< T >::Impl::linearizeenergy(), KineticModel< T >::linearizeKineticModel(), FlowModel< T >::Impl::linearizeMomentum(), BatteryModel< T >::Impl::linearizePC(), BatteryModel< T >::Impl::linearizePC_Thermal(), PhononModel< T >::linearizePhononModel(), BatteryModel< T >::Impl::linearizePotential(), BatteryModel< T >::Impl::linearizeSpecies(), BatteryModel< T >::Impl::linearizeThermal(), BatteryModel< T >::Impl::printMatrixElementsOnFace(), ILU0Solver::solve(), JacobiSolver::solve(), BCGStab::solve(), CG::solve(), SpikeSolver::solve(), DirectSolver::solve(), and AMG::solve().

33 {return *_b;}
shared_ptr< MultiField > _b
Definition: LinearSystem.h:55
shared_ptr<MultiField> LinearSystem::getBPtr ( )
inline

Definition at line 42 of file LinearSystem.h.

References _b.

Referenced by BCGStab::solve(), and CG::solve().

42 {return _b;}
shared_ptr< MultiField > _b
Definition: LinearSystem.h:55
MultiField& LinearSystem::getCoarseIndex ( )
inline

Definition at line 39 of file LinearSystem.h.

References _coarseIndex.

Referenced by AMG::cycle().

39 {return _coarseIndex;}
MultiField _coarseIndex
Definition: LinearSystem.h:58
shared_ptr<MultiField> LinearSystem::getDeltaPtr ( )
inline

Definition at line 41 of file LinearSystem.h.

References _delta.

Referenced by BCGStab::solve(), and CG::solve().

41 {return _delta;}
shared_ptr< MultiField > _delta
Definition: LinearSystem.h:56
MultiFieldMatrix& LinearSystem::getMatrix ( )
inline

Definition at line 37 of file LinearSystem.h.

References _matrix.

Referenced by StructureModel< T >::Impl::advanceExplicit(), StructureModel< T >::Impl::applyBC(), AMG::createCoarseLevels(), AMG::cycle(), LinearizeInterfaceJumpUnconnected< X, Diag, OffDiag >::discretize(), JacobiSolver::doSweeps(), ILU0Solver::doSweeps(), SpikeSolver::doSweeps(), AMG::doSweeps(), ThermalModel< T >::Impl::dumpMatrix(), VacancyModel< T >::Impl::dumpMatrix(), PlateModel< T >::Impl::dumpMatrix(), ElectricModel< T >::Impl::initChargeTransportLinearization(), FlowModel< T >::Impl::initContinuityLinearization(), PlateModel< T >::Impl::initDeformationLinearization(), StructureModel< T >::Impl::initDeformationLinearization(), ElectricModel< T >::Impl::initElectroStaticsLinearization(), KineticModel< T >::initKineticModelLinearization(), ThermalModel< T >::Impl::initLinearization(), FractureModel< T >::Impl::initLinearization(), VacancyModel< T >::Impl::initLinearization(), SpeciesModel< T >::Impl::initLinearization(), KeModel< T >::Impl::initLinearization(), KeModel< T >::Impl::initLinearizationk(), FlowModel< T >::Impl::initMomentumLinearization(), BatteryModel< T >::Impl::initPCLinearization(), PhononModel< T >::initPhononModelLinearization(), BatteryModel< T >::Impl::initPotentialLinearization(), BatteryModel< T >::Impl::initSpeciesLinearization(), BatteryModel< T >::Impl::initThermalLinearization(), ThermalModel< T >::Impl::linearize(), FractureModel< T >::Impl::linearize(), VacancyModel< T >::Impl::linearize(), SpeciesModel< T >::Impl::linearize(), ElectricModel< T >::Impl::linearizeChargeTransport(), FlowModel< T >::Impl::linearizeContinuity(), PlateModel< T >::Impl::linearizeDeformation(), StructureModel< T >::Impl::linearizeDeformation(), KeModel< T >::Impl::linearizedissipation(), ElectricModel< T >::Impl::linearizeElectroStatics(), KeModel< T >::Impl::linearizeenergy(), KineticModel< T >::linearizeKineticModel(), FlowModel< T >::Impl::linearizeMomentum(), BatteryModel< T >::Impl::linearizePC(), BatteryModel< T >::Impl::linearizePC_Thermal(), PhononModel< T >::linearizePhononModel(), BatteryModel< T >::Impl::linearizePotential(), BatteryModel< T >::Impl::linearizeSpecies(), BatteryModel< T >::Impl::linearizeThermal(), FlowModel< T >::Impl::postContinuitySolve(), BatteryModel< T >::Impl::printMatrixElementsOnFace(), JacobiSolver::solve(), ILU0Solver::solve(), CG::solve(), BCGStab::solve(), SpikeSolver::solve(), DirectSolver::solve(), AMG::solve(), and FlowModel< T >::Impl::solveMomentum().

37 {return _matrix;}
MultiFieldMatrix _matrix
Definition: LinearSystem.h:53
MultiField& LinearSystem::getX ( )
inline

Definition at line 32 of file LinearSystem.h.

References _x.

Referenced by StructureModel< T >::Impl::advanceExplicit(), StructureModel< T >::Impl::applyBC(), LinearizeInterfaceJumpUnconnected< X, Diag, OffDiag >::discretize(), ElectricModel< T >::Impl::initChargeTransportLinearization(), FlowModel< T >::Impl::initContinuityLinearization(), PlateModel< T >::Impl::initDeformationLinearization(), StructureModel< T >::Impl::initDeformationLinearization(), ElectricModel< T >::Impl::initElectroStaticsLinearization(), KineticModel< T >::initKineticModelLinearization(), ThermalModel< T >::Impl::initLinearization(), FractureModel< T >::Impl::initLinearization(), VacancyModel< T >::Impl::initLinearization(), SpeciesModel< T >::Impl::initLinearization(), KeModel< T >::Impl::initLinearization(), KeModel< T >::Impl::initLinearizationk(), FlowModel< T >::Impl::initMomentumLinearization(), BatteryModel< T >::Impl::initPCLinearization(), PhononModel< T >::initPhononModelLinearization(), BatteryModel< T >::Impl::initPotentialLinearization(), BatteryModel< T >::Impl::initSpeciesLinearization(), BatteryModel< T >::Impl::initThermalLinearization(), ThermalModel< T >::Impl::linearize(), FractureModel< T >::Impl::linearize(), VacancyModel< T >::Impl::linearize(), SpeciesModel< T >::Impl::linearize(), ElectricModel< T >::Impl::linearizeChargeTransport(), FlowModel< T >::Impl::linearizeContinuity(), PlateModel< T >::Impl::linearizeDeformation(), StructureModel< T >::Impl::linearizeDeformation(), KeModel< T >::Impl::linearizedissipation(), ElectricModel< T >::Impl::linearizeElectroStatics(), KeModel< T >::Impl::linearizeenergy(), KineticModel< T >::linearizeKineticModel(), FlowModel< T >::Impl::linearizeMomentum(), BatteryModel< T >::Impl::linearizePC(), BatteryModel< T >::Impl::linearizePC_Thermal(), PhononModel< T >::linearizePhononModel(), BatteryModel< T >::Impl::linearizePotential(), BatteryModel< T >::Impl::linearizeSpecies(), BatteryModel< T >::Impl::linearizeThermal(), and BatteryModel< T >::Impl::printMatrixElementsOnFace().

32 {return *_x;}
shared_ptr< MultiField > _x
Definition: LinearSystem.h:54
void LinearSystem::initSolve ( )

Definition at line 40 of file LinearSystem.cpp.

References _b, _bAux, _delta, _deltaAux, _matrix, _residual, _residualAux, _x, _xAux, Matrix::eliminateBoundaryEquations(), MultiFieldMatrix::getMatrix(), MultiFieldMatrix::hasMatrix(), and Matrix::isInvertible().

Referenced by FractureModel< T >::Impl::advance(), ThermalModel< T >::Impl::advance(), VacancyModel< T >::Impl::advance(), PhononModel< T >::advance(), SpeciesModel< T >::Impl::advance(), KeModel< T >::Impl::advance(), KineticModel< T >::advance(), BatteryModel< T >::Impl::advanceCoupled(), BatteryModel< T >::Impl::advancePotential(), BatteryModel< T >::Impl::advanceSpecies(), BatteryModel< T >::Impl::advanceThermal(), ThermalModel< T >::Impl::dumpMatrix(), VacancyModel< T >::Impl::dumpMatrix(), PlateModel< T >::Impl::dumpMatrix(), ElectricModel< T >::Impl::solveChargeTransport(), PlateModel< T >::Impl::solveDeformation(), StructureModel< T >::Impl::solveDeformation(), ElectricModel< T >::Impl::solveElectroStatics(), and FlowModel< T >::Impl::solveMomentum().

41 {
42  _delta = dynamic_pointer_cast<MultiField>(_x->newClone());
43  _residual = dynamic_pointer_cast<MultiField>(_x->newClone());
44  _delta->zero();
45  _residual->zero();
46 
47 
48  MultiField::ArrayIndexList indicesToRemove;
49 
50  const MultiField::ArrayIndexList& arrayIndices = _b->getArrayIndices();
51  foreach(MultiField::ArrayIndex i, arrayIndices)
52  {
53  if (!_matrix.hasMatrix(i,i) || _matrix.getMatrix(i,i).isInvertible())
54  indicesToRemove.push_back(i);
55  else
57  }
58 
59  _xAux = _x->extract(indicesToRemove);
60  _bAux = _b->extract(indicesToRemove);
61  _deltaAux = _delta->extract(indicesToRemove);
62  _residualAux = _residual->extract(indicesToRemove);
63 
64 }
shared_ptr< MultiField > _delta
Definition: LinearSystem.h:56
Matrix & getMatrix(const Index &rowIndex, const Index &colIndex)
shared_ptr< MultiField > _b
Definition: LinearSystem.h:55
bool hasMatrix(const Index &rowIndex, const Index &colIndex) const
shared_ptr< MultiField > _x
Definition: LinearSystem.h:54
shared_ptr< MultiField > _residual
Definition: LinearSystem.h:57
shared_ptr< MultiField > _bAux
Definition: LinearSystem.h:61
pair< const Field *, const StorageSite * > ArrayIndex
Definition: MultiField.h:21
shared_ptr< MultiField > _residualAux
Definition: LinearSystem.h:63
vector< ArrayIndex > ArrayIndexList
Definition: MultiField.h:24
virtual bool isInvertible()
Definition: Matrix.h:73
shared_ptr< MultiField > _xAux
Definition: LinearSystem.h:60
MultiFieldMatrix _matrix
Definition: LinearSystem.h:53
virtual void eliminateBoundaryEquations(IContainer &xB)
Definition: Matrix.h:50
shared_ptr< MultiField > _deltaAux
Definition: LinearSystem.h:62
void LinearSystem::postSolve ( )

Definition at line 250 of file LinearSystem.cpp.

References _b, _bAux, _delta, _deltaAux, _matrix, _residual, _residualAux, _x, _xAux, and MultiFieldMatrix::solveBoundary().

Referenced by FractureModel< T >::Impl::advance(), ThermalModel< T >::Impl::advance(), VacancyModel< T >::Impl::advance(), PhononModel< T >::advance(), SpeciesModel< T >::Impl::advance(), KeModel< T >::Impl::advance(), KineticModel< T >::advance(), BatteryModel< T >::Impl::advanceCoupled(), StructureModel< T >::Impl::advanceExplicit(), BatteryModel< T >::Impl::advancePotential(), BatteryModel< T >::Impl::advanceSpecies(), BatteryModel< T >::Impl::advanceThermal(), ElectricModel< T >::Impl::solveChargeTransport(), PlateModel< T >::Impl::solveDeformation(), StructureModel< T >::Impl::solveDeformation(), ElectricModel< T >::Impl::solveElectroStatics(), and FlowModel< T >::Impl::solveMomentum().

251 {
253 
254  if (_xAux)
255  {
256  _x->merge(*_xAux);
257  _b->merge(*_bAux);
258  _delta->merge(*_deltaAux);
259  _residual->merge(*_residualAux);
260 
262  }
263 }
shared_ptr< MultiField > _delta
Definition: LinearSystem.h:56
shared_ptr< MultiField > _b
Definition: LinearSystem.h:55
shared_ptr< MultiField > _x
Definition: LinearSystem.h:54
shared_ptr< MultiField > _residual
Definition: LinearSystem.h:57
shared_ptr< MultiField > _bAux
Definition: LinearSystem.h:61
shared_ptr< MultiField > _residualAux
Definition: LinearSystem.h:63
shared_ptr< MultiField > _xAux
Definition: LinearSystem.h:60
MultiFieldMatrix _matrix
Definition: LinearSystem.h:53
shared_ptr< MultiField > _deltaAux
Definition: LinearSystem.h:62
virtual void solveBoundary(IContainer &xB, const IContainer &bB, IContainer &temp) const
void LinearSystem::replaceB ( shared_ptr< MultiField newB)
inline

Definition at line 45 of file LinearSystem.h.

References _b.

Referenced by BCGStab::solve(), and CG::solve().

45 {_b=newB;}
shared_ptr< MultiField > _b
Definition: LinearSystem.h:55
void LinearSystem::replaceDelta ( shared_ptr< MultiField newDelta)
inline

Definition at line 44 of file LinearSystem.h.

References _delta.

Referenced by BCGStab::solve(), and CG::solve().

44 {_delta=newDelta;}
shared_ptr< MultiField > _delta
Definition: LinearSystem.h:56
void LinearSystem::replaceResidual ( shared_ptr< MultiField newR)
inline

Definition at line 46 of file LinearSystem.h.

References _residual.

46 {_residual=newR;}
shared_ptr< MultiField > _residual
Definition: LinearSystem.h:57
void LinearSystem::setCoarseningField ( const Field f)
inline

Definition at line 48 of file LinearSystem.h.

References _coarseningField.

48 {_coarseningField=&f;}
const Field * _coarseningField
Definition: LinearSystem.h:59

Friends And Related Function Documentation

friend class LinearSystemMerger
friend

Definition at line 15 of file LinearSystem.h.

Member Data Documentation

shared_ptr<MultiField> LinearSystem::_b
private

Definition at line 55 of file LinearSystem.h.

Referenced by createCoarse(), getB(), getBPtr(), initAssembly(), initSolve(), postSolve(), and replaceB().

shared_ptr<MultiField> LinearSystem::_bAux
private

Definition at line 61 of file LinearSystem.h.

Referenced by initSolve(), and postSolve().

MultiField LinearSystem::_coarseIndex
private

Definition at line 58 of file LinearSystem.h.

Referenced by createCoarse(), and getCoarseIndex().

const Field* LinearSystem::_coarseningField
private

Definition at line 59 of file LinearSystem.h.

Referenced by createCoarse(), and setCoarseningField().

shared_ptr<MultiField> LinearSystem::_delta
private

Definition at line 56 of file LinearSystem.h.

Referenced by getDelta(), getDeltaPtr(), initSolve(), postSolve(), replaceDelta(), and updateSolution().

shared_ptr<MultiField> LinearSystem::_deltaAux
private

Definition at line 62 of file LinearSystem.h.

Referenced by initSolve(), and postSolve().

MultiFieldMatrix LinearSystem::_matrix
private

Definition at line 53 of file LinearSystem.h.

Referenced by createCoarse(), getMatrix(), initAssembly(), initSolve(), and postSolve().

shared_ptr<MultiField> LinearSystem::_residual
private

Definition at line 57 of file LinearSystem.h.

Referenced by getResidual(), initSolve(), postSolve(), and replaceResidual().

shared_ptr<MultiField> LinearSystem::_residualAux
private

Definition at line 63 of file LinearSystem.h.

Referenced by initSolve(), and postSolve().

shared_ptr<MultiField> LinearSystem::_x
private

Definition at line 54 of file LinearSystem.h.

Referenced by getX(), initAssembly(), initSolve(), postSolve(), and updateSolution().

shared_ptr<MultiField> LinearSystem::_xAux
private

Definition at line 60 of file LinearSystem.h.

Referenced by initSolve(), and postSolve().

bool LinearSystem::isSymmetric

Definition at line 50 of file LinearSystem.h.

Referenced by AMG::createCoarseLevels(), and AMG::cycle().


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