CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Running, Solving & CFD (https://www.cfd-online.com/Forums/openfoam-solving/)
-   -   What exactly smoother is in OpenFOAM's matrix solver (https://www.cfd-online.com/Forums/openfoam-solving/187255-what-exactly-smoother-openfoams-matrix-solver.html)

chengdi May 2, 2017 11:23

What exactly smoother is in OpenFOAM's matrix solver
 
Hi, everyone

I am reading the code of matrix solvers of OpenFOAM, however, I found the implementation of smoothSolver is difficult to understand because the so-called smoother cannot be found in math textbooks and internet.

Could anyone give me some hint on what exactly smoother is and how a smoothSolver works?

arjun May 2, 2017 11:27

Smoother is another name for sparse linear solver like Jacobi, Gauss Seidel and all.

It is called smoother because we do not use this to solve the linear system but rather quickly remove some part of error.

Other than Jacobi, openfoam also uses ILU based smoother.

chengdi May 7, 2017 06:22

Thanks, I just figured out that "smooth" means to smooth out some "spikes" in residual and decrease the residual. And the smoothSolver is just a class of iterative solver in which the iterative steps are implemented in "smoother". Comparing with Krylov-type solver, I think smoothSolver may need diagoal dominance as a sufficent condtion to work effectively.

fetc95 February 7, 2021 18:40

Interested too
 
Quote:

Originally Posted by chengdi (Post 647380)
Hi, everyone

I am reading the code of matrix solvers of OpenFOAM, however, I found the implementation of smoothSolver is difficult to understand because the so-called smoother cannot be found in math textbooks and internet.

Could anyone give me some hint on what exactly smoother is and how a smoothSolver works?

Hello.

I am interested this problem too. I do not pretend on fully correct interpretation but searching the code of different smoothers in smoothSolver class I concluded that this class contains the Gauss-Seidel and Jacobi methods and their variations. Concretely, the key word "GaussSeidel" or "symGaussSeidel", etc. sets the Gauss-Seidel method to solve the linear equations. If we look file GaussSeidel.C we find the code which coincides with description of the Gauss-Seidel method in Wikipedia. However, smoothers like "DIC" or "DILU" are seemed to set the Jacobi method to solve the linear equations, but the code does not coincide with classical description of Jacobi method. In Jacobi method, the solution of the system

Ax=\left(L+D+U\right)x=b

is found iteratively as follows

x^{new}=B x^{old} + g (1)

where B - is some operator, g - is some vector depending on the right part of the linear system. I believe that in DIC and DILU smoothers the solution is obtained as (1). In classical Jacobi method we have

B = -D^{-1}\left( L+U \right) = -D^{-1}\left( A-D \right)
g = D^{-1}b

But in the code of DIC and DILU smoothers I cannot find that, so it seems that operator B and vector g are obtained in some other way.


All times are GMT -4. The time now is 13:31.