Peano
Loading...
Searching...
No Matches
poisson.py
Go to the documentation of this file.
1"""
2
3FOR NOW, WE FIX THE NUMBER OF DOFS TO BE THE SAME AS
4THE NUMBER OF GAUSSIAN POINTS
5
6
7"""
8
9
10import os, sys
11import argparse
12import peano4.api
13import petsc
14from matrices import DgGenerator
15
16print( """
17
18Peano 4 multigrid solver using PETSc
19
20@author 2022 Sean Baccas, Dmitry Nikolaenko, Tobias Weinzierl
21
22""")
23
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()
34
35#generate matrices using file next door
36matrices = DgGenerator(args.dimensions,
37 args.degree,
38 args.unknowns_per_cell_dof)
39
40project = petsc.Project(project_name = "DG",
41 namespace = [ "benchmarks", "multigrid", "petsc", "DG" ]
42 )
43
44
45solver = petsc.solvers.DiscontinuousGalerkinDiscretisation("Poisson",
46 args.degree,
47 args.dimensions,
48 args.unknowns_per_cell_dof,
49 args.meshsize,
50 args.meshsize,
51 matrices.getCellCellMassMatrix(),
52 matrices.getCellCellSystemMatrix(),
53 matrices.getCellToFaceMatrix(),
54 matrices.getFaceFaceMatrix(),
55 )
56
57project.add_solver( solver )
58
59#
60# Configure build
61#
62if args.mode=="release":
63 build_mode = peano4.api.output.CompileMode.RELEASE
64if args.mode=="stats":
65 build_mode = peano4.api.output.CompileMode.STATS
66if args.mode=="asserts":
67 build_mode = peano4.api.output.CompileMode.ASSERTS
68
69cube_size = 1.0
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) ],
74)
75
76
77project.set_load_balancing( "toolbox::loadbalancing::strategies::RecursiveSubdivision", "new ::exahype2::LoadBalancingConfiguration()" )
78project.set_Peano4_installation( args.peanodir, build_mode )
79
80
81#
82# Generate code and then copy cpp file over main
83#
84peano4_project = project.generate_Peano4_project(args.verbose)
85peano4_project.generate()
86
87os.system( "make clean" )
88if args.j>0:
89 os.system( "make -j{}".format(args.j) )
90else:
91 os.system( "make -j" )
92
93print("Done")
use this class to pre-generate matrices to be used in Peano as far as possible.
Definition matrices.py:8