# What exactly smoother is in OpenFOAM's matrix solver

 Register Blogs Members List Search Today's Posts Mark Forums Read

 May 2, 2017, 12:23 What exactly smoother is in OpenFOAM's matrix solver #1 Member   Di Cheng Join Date: May 2010 Location: Beijing, China Posts: 47 Rep Power: 15 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?

 May 2, 2017, 12:27 #2 Senior Member   Arjun Join Date: Mar 2009 Location: Nurenberg, Germany Posts: 1,249 Rep Power: 31 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. keepfit, minh khang, tonnykz and 2 others like this.

 May 7, 2017, 07:22 #3 Member   Di Cheng Join Date: May 2010 Location: Beijing, China Posts: 47 Rep Power: 15 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. minh khang, tonnykz, TommyM and 2 others like this.

February 7, 2021, 19:40
Interested too
#4
New Member

Russian Federation
Join Date: Apr 2020
Posts: 18
Rep Power: 5
Quote:
 Originally Posted by chengdi 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

is found iteratively as follows

(1)

where - is some operator, - 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

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.

 Tags openfoam, smoother