Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 0759b72a authored by Laurent FACQ's avatar Laurent FACQ
Browse files

Add solveAgainLaplacian() for multiple RHS solve with same matrix

parent e1959074
No related branches found
No related tags found
No related merge requests found
...@@ -64,6 +64,7 @@ virtual void addRHSValue(int row, double val) = 0; ...@@ -64,6 +64,7 @@ virtual void addRHSValue(int row, double val) = 0;
virtual double getRHSValue(const int row) = 0; virtual double getRHSValue(const int row) = 0;
virtual void zeroRHS() = 0; virtual void zeroRHS() = 0;
virtual double solveLaplacian() = 0; virtual double solveLaplacian() = 0;
virtual double solveAgainLaplacian() = 0;
virtual std::vector<double> getSolution() = 0; virtual std::vector<double> getSolution() = 0;
virtual std::vector<double> error() = 0; virtual std::vector<double> error() = 0;
virtual void dumpMatrix() = 0; virtual void dumpMatrix() = 0;
......
...@@ -37,8 +37,6 @@ void LaplacianPetsc::zeroMatrix() ...@@ -37,8 +37,6 @@ void LaplacianPetsc::zeroMatrix()
double LaplacianPetsc::solveLaplacian() double LaplacianPetsc::solveLaplacian()
{ {
PetscInt nbIteration;
PetscReal norm;
PetscBool assembled; PetscBool assembled;
if (!MatAssembled(_LaplacianMatrix,&assembled)) { if (!MatAssembled(_LaplacianMatrix,&assembled)) {
...@@ -46,8 +44,6 @@ double LaplacianPetsc::solveLaplacian() ...@@ -46,8 +44,6 @@ double LaplacianPetsc::solveLaplacian()
MatAssemblyEnd(_LaplacianMatrix, MAT_FINAL_ASSEMBLY); MatAssemblyEnd(_LaplacianMatrix, MAT_FINAL_ASSEMBLY);
} }
VecAssemblyBegin(_RHS);
VecAssemblyEnd(_RHS);
VecDuplicate(_RHS, &_dum); VecDuplicate(_RHS, &_dum);
KSPSetOperators(_ksp, _LaplacianMatrix, _LaplacianMatrix); KSPSetOperators(_ksp, _LaplacianMatrix, _LaplacianMatrix);
...@@ -62,6 +58,18 @@ double LaplacianPetsc::solveLaplacian() ...@@ -62,6 +58,18 @@ double LaplacianPetsc::solveLaplacian()
MatSetNullSpace(_LaplacianMatrix, _nullsp); MatSetNullSpace(_LaplacianMatrix, _nullsp);
} }
} }
return LaplacianPetsc::solveAgainLaplacian();
}
double LaplacianPetsc::solveAgainLaplacian()
{
PetscInt nbIteration;
PetscReal norm;
VecAssemblyBegin(_RHS);
VecAssemblyEnd(_RHS);
KSPSolve(_ksp, _RHS, _dum); KSPSolve(_ksp, _RHS, _dum);
KSPGetIterationNumber(_ksp, &nbIteration); KSPGetIterationNumber(_ksp, &nbIteration);
KSPGetResidualNorm(_ksp, &norm); KSPGetResidualNorm(_ksp, &norm);
......
...@@ -111,6 +111,13 @@ void dumpRHS(); ...@@ -111,6 +111,13 @@ void dumpRHS();
*/ */
double solveLaplacian(); double solveLaplacian();
/**
* @brief Solve again the LaplacianPetsc (same system, different RHS)
*
* @brief[out] return residual norm
*/
double solveAgainLaplacian();
/** /**
* @brief get Solution converted in std::vector * @brief get Solution converted in std::vector
*/ */
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment