*** Wartungsfenster jeden ersten Mittwoch vormittag im Monat ***

Skip to content
Snippets Groups Projects
Commit 44f153b6 authored by Innerberger, Michael's avatar Innerberger, Michael
Browse files

Add construction method for solvers

parent 416f0b06
Branches
Tags
No related merge requests found
......@@ -4,7 +4,7 @@
% ******************************************************************************
%% parameters
nDofsMax = 1e6;
nDofsMax = 1e4;
theta = 0.5;
pmax = 4;
......@@ -31,7 +31,7 @@ for p = 3:pmax
%% set up solver and operator for nested iteration
P = FeProlongation(fes);
solver = JacobiPcgSolver(fes, blf);
solver = chooseIterativeSolver(fes, blf, 'pcg', 'jacobi');
solver.tol = 1e-8;
solver.maxIter = 100;
......
......@@ -36,7 +36,7 @@ lfG.qrf = QuadratureRule.ofOrder(2*p);
%% set up solver and lifting operator for nested iteration
P = LoFeProlongation(fes);
solver = AdditiveSchwartzPcg(P);
solver = chooseIterativeSolver(fes, blf, 'pcg', 'additiveSchwarz');
solver.tol = 1e-8;
solver.maxIter = 1000;
......
......@@ -38,7 +38,7 @@ lfG.qrf = QuadratureRule.ofOrder(2*p);
%% set up solver and lifting operator for nested iteration
P = FeProlongation(fes);
solver = OptimalLocalMGSolver(fes, blf);
solver = chooseIterativeSolver(fes, blf, 'multigrid');
solver.tol = 1e-6;
solver.maxIter = 100;
......
......@@ -32,7 +32,7 @@ for p = 1:pmax
%% set up solver and operator for nested iteration
P = FeProlongation(fes);
solver = OptimalLocalMGSolver(fes, blf);
solver = chooseIterativeSolver(fes, blf, 'multigrid', 'lowOrderVcycle');
solver.tol = 1e-8;
solver.maxIter = 100;
......
% chooseIterativeSolver Return suitable subclass of IterativeSolver.
function solver = chooseIterativeSolver(fes, blf, class, variant)
arguments
fes FeSpace
blf BilinearForm
class (1,1) string {mustBeMember(class, ["cg", "pcg", "multigrid"])}
variant (1,1) string {mustBeMember(variant, [ "", ...
"jacobi", "additiveSchwarz", ...
"lowOrderVcycle", "highOrderVcycle"])} = ""
end
switch class
% non-preconditioned CG
case "cg"
solver = CgSolver();
% preconditioned CG family
case "pcg"
switch variant
case "jacobi"
solver = JacobiPcgSolver(fes, blf);
case {"", "additiveSchwarz"}
solver = AdditiveSchwartzPcg(fes, blf);
otherwise
error('No PCG variant %s!', variant)
end
% geometric multigrid family
case "multigrid"
switch variant
case {"", "lowOrderVcycle"}
solver = OptimalLocalMGSolver(fes, blf);
case "highOrderVcycle"
solver = OptimalLocalMGSolver1pp(fes, blf);
otherwise
error('No multigrid variant %s!', variant)
end
% default
otherwise
error('No iterative solver of class %s!', class)
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment