3FOR NOW, WE FIX THE NUMBER OF DOFS TO BE THE SAME AS
4THE NUMBER OF GAUSSIAN POINTS
14from matrices
import DgGenerator
18Peano 4 multigrid solver using PETSc
20@author 2022 Sean Baccas, Dmitry Nikolaenko, Tobias Weinzierl
24parser = argparse.ArgumentParser(description=
'Multigrid - Poisson solver')
25parser.add_argument(
"-j",
"--parallel-builds", dest=
"j", type=int, default=-1, help=
"Parallel builds" )
26parser.add_argument(
"-pd",
"--peano-dir", dest=
"peanodir", default=
"../../../../", help=
"Peano4 directory" )
27parser.add_argument(
"-v",
"--verbose", dest=
"verbose", action=
"store_true", default=
False, help=
"Verbose")
28parser.add_argument(
"-d",
"--dimensions", dest=
"dimensions", type=int, default=2, help=
"Dimensions")
29parser.add_argument(
"-deg",
"--degree", dest=
"degree", type=int, default=1, help=
"Polynomial degree")
30parser.add_argument(
"-upcd",
"--unknowns_per_cell_dof",dest=
"unknowns_per_cell_dof", type=int, default=1, help=
"Unknowns per cell dof")
31parser.add_argument(
"-meshsize",
"--meshsize", dest=
"meshsize", default=0.1, help=
"Mesh size")
32parser.add_argument(
"-m",
"--mode", dest=
"mode", choices=[
"release",
"stats",
"asserts"], required=
True, help=
"Pick build type" )
33args = parser.parse_args()
38 args.unknowns_per_cell_dof)
40project = petsc.Project(project_name =
"DG",
41 namespace = [
"benchmarks",
"multigrid",
"petsc",
"DG" ]
45solver = petsc.solvers.DiscontinuousGalerkinDiscretisation(
"Poisson",
48 args.unknowns_per_cell_dof,
51 matrices.getCellCellMassMatrix(),
52 matrices.getCellCellSystemMatrix(),
53 matrices.getCellToFaceMatrix(),
54 matrices.getFaceFaceMatrix(),
57project.add_solver( solver )
62if args.mode==
"release":
63 build_mode = peano4.api.output.CompileMode.RELEASE
65 build_mode = peano4.api.output.CompileMode.STATS
66if args.mode==
"asserts":
67 build_mode = peano4.api.output.CompileMode.ASSERTS
70project.set_global_simulation_parameters(
71 dimensions = args.dimensions,
72 offset = [ 0.0
for _
in range(args.dimensions) ],
73 domain_size = [ cube_size
for _
in range(args.dimensions) ],
77project.set_load_balancing(
"toolbox::loadbalancing::strategies::RecursiveSubdivision",
"new ::exahype2::LoadBalancingConfiguration()" )
78project.set_Peano4_installation( args.peanodir, build_mode )
84peano4_project = project.generate_Peano4_project(args.verbose)
85peano4_project.generate()
87os.system(
"make clean" )
89 os.system(
"make -j{}".format(args.j) )
91 os.system(
"make -j" )
use this class to pre-generate matrices to be used in Peano as far as possible.