From 64cbd339d887ebe13a2ab4a5147b5daf339d14ec Mon Sep 17 00:00:00 2001
From: Carl-Martin Pfeiler <carl-martin.pfeiler@asc.tuwien.ac.at>
Date: Wed, 17 Apr 2019 15:01:37 +0200
Subject: [PATCH] removed all preconditioning realizations except MultiLevel

---
 .../_details/interfaces/tpsPreconditioner.py  | 42 ++++---------------
 1 file changed, 8 insertions(+), 34 deletions(-)

diff --git a/integrators/_details/interfaces/tpsPreconditioner.py b/integrators/_details/interfaces/tpsPreconditioner.py
index bb12755..c8df2a7 100644
--- a/integrators/_details/interfaces/tpsPreconditioner.py
+++ b/integrators/_details/interfaces/tpsPreconditioner.py
@@ -118,23 +118,10 @@ class TPSPreconditioner(_preconditionerInterface._PreconditionerInterface):
 
     self._Compute_Q()
 
-    # trying ML, SPLU, CG preconditioner, ML as default
-    # (CG not working well for h << lex)
-    # it seems ML faster, but SPLU less iterations
-    # way faster than true inverse, especially for large NV
-    opt = "ml" # "ml", "splu"
-    if opt == "ml":
-      ml = pyamg.ruge_stuben_solver(A)
-      pre = ml.aspreconditioner()
-      pre1D = lambda z: pre * z
-    elif opt == "splu":
-      cgs = pyamg.coarse_grid_solver("splu")
-      pre1D = lambda z: cgs(A, z)
-    elif opt == "cg":
-      metaPre = 1.0 / A.diagonal()
-      metaP = lambda x: metaPre*x
-      P = scipy.sparse.linalg.LinearOperator(A.shape, matvec=metaP)
-      pre1D = lambda z: scipy.sparse.linalg.cg(A, z, tol=self._solvetol/10, M=P)[0]
+    # realize "inverse" of stationary part via multilevel solver
+    ml = pyamg.ruge_stuben_solver(A)
+    pre = ml.aspreconditioner()
+    pre1D = lambda z: pre * z
   
     self._prePractical = lambda y: np.concatenate((
       pre1D(y[:y.size//3]), pre1D(y[y.size//3:2*y.size//3]), pre1D(y[2*y.size//3:])))
@@ -161,23 +148,10 @@ class TPSPreconditioner(_preconditionerInterface._PreconditionerInterface):
       A = self._A_stat_precond[:self._A_stat_precond.shape[0]//3 \
         , :self._A_stat_precond.shape[0]//3]
 
-    # trying ML, SPLU, CG preconditioner, ML as default
-    # (CG not working well for h << lex)
-    # it seems ML faster, but SPLU less iterations
-    # way faster than true inverse, especially for large NV
-    opt = "ml" # "ml", "splu"
-    if opt == "ml":
-      ml = pyamg.ruge_stuben_solver(A)
-      pre = ml.aspreconditioner()
-      pre1D = lambda z: pre * z
-    elif opt == "splu":
-      cgs = pyamg.coarse_grid_solver("splu")
-      pre1D = lambda z: cgs(A, z)
-    elif opt == "cg":
-      metaPre = 1.0 / A.diagonal()
-      MetaPre = lambda x: metaPre * x
-      P = scipy.sparse.linalg.LinearOperator(A.shape, matvec=MetaPre)
-      pre1D = lambda z: scipy.sparse.linalg.cg(A, z, tol=self._solvetol/10, M=P)[0]
+    # realize "inverse" of stationary part via multilevel solver
+    ml = pyamg.ruge_stuben_solver(A)
+    pre = ml.aspreconditioner()
+    pre1D = lambda z: pre * z
 
     stationary2D = lambda x: \
       np.vstack((pre1D(x[0::2]), pre1D(x[1::2]))).reshape((-1,),order='F')
-- 
GitLab