12Peano 4 multigrid solver using Discontinuous Galerkin and PETSc
14@author 2022 Sean Baccas, Dmitry Nikolaenko, Tobias Weinzierl
18parser = argparse.ArgumentParser(description=
'Multigrid - Poisson solver')
19parser.add_argument(
"-j",
"--parallel-builds", dest=
"j", type=int, default=-1, help=
"Parallel builds" )
20parser.add_argument(
"-pd",
"--peano-dir", dest=
"peanodir", default=
"../../../../", help=
"Peano4 directory" )
21parser.add_argument(
"-v",
"--verbose", dest=
"verbose", action=
"store_true", default=
False, help=
"Verbose")
22parser.add_argument(
"-d",
"--dimensions", dest=
"dimensions", type=int, default=2, help=
"Dimensions")
23parser.add_argument(
"-upv",
"--unknowns_per_vertex",dest=
"upv", type=int, default=1, help=
"Unknowns per vertex")
24parser.add_argument(
"-meshsize",
"--meshsize", dest=
"meshsize", default=0.3, help=
"Mesh size")
25parser.add_argument(
"-m",
"--mode", dest=
"mode", choices=[
"release",
"stats",
"asserts",
"trace"], required=
True, help=
"Pick build type" )
26args = parser.parse_args()
29project = multigrid.petsc.api.Project(project_name =
"CollocatedFEM",
30 namespace = [
"benchmarks",
"multigrid",
"petsc",
"poisson" ]
34matrices = multigrid.api.matrixgenerators.DLinear(dimensions = args.dimensions,
35 unknowns_per_vertex_dof = args.upv,
39solver = multigrid.petsc.api.solvers.CollocatedLowOrderDiscretisation(name =
"CollocatedPoisson",
41 dimensions = args.dimensions,
42 min_h = args.meshsize,
43 max_h = args.meshsize,
44 cell_lhs_matrix = matrices.get_cell_system_matrix_for_laplacian(),
45 cell_rhs_matrix = matrices.get_cell_identity_matrix(),
46 cell_lhs_matrix_scaling = -2,
47 cell_rhs_matrix_scaling = args.dimensions,
50project.add_solver( solver )
55if args.mode==
"release":
56 build_mode = peano4.api.output.CompileMode.RELEASE
58 build_mode = peano4.api.output.CompileMode.STATS
59if args.mode==
"asserts":
60 build_mode = peano4.api.output.CompileMode.ASSERTS
62 build_mode = peano4.api.output.CompileMode.TRACE
65project.set_global_simulation_parameters(
66 dimensions = args.dimensions,
67 offset = [ 0.0
for _
in range(args.dimensions) ],
68 domain_size = [ cube_size
for _
in range(args.dimensions) ],
72project.set_load_balancing(
"toolbox::loadbalancing::strategies::RecursiveSubdivision",
"new ::exahype2::LoadBalancingConfiguration()" )
73project.set_Peano4_installation( args.peanodir, build_mode )
79peano4_project = project.generate_Peano4_project(args.verbose)
80peano4_project.generate()
82os.system(
"make clean" )
84 os.system(
"make -j{}".format(args.j) )
86 os.system(
"make -j" )