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 MixedGenerator
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=3, 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 = MixedGenerator(args.dimensions,
37 args.degree,
38 args.unknowns_per_cell_dof,
39 args.unknowns_per_cell_dof - 1) #for now, keep this as one less
40
41project = petsc.Project(project_name = "Mixed",
42 namespace = [ "benchmarks", "multigrid", "petsc", "mp" ]
43 )
44
45
46solver = petsc.solvers.MixedDiscontinuousGalerkinDiscretisation("Poisson",
47 args.degree,
48 args.dimensions,
49 args.unknowns_per_cell_dof,
50 args.meshsize,
51 args.meshsize,
52 matrices.getCellCellMassMatrix(), #12x12
53 matrices.getCellCellSystemMatrix(), #12x12
54 #for now, we leave this as 32x12
55 matrices.getCellToFaceMatrix(), #32x12
56 matrices.getFaceFaceMatrix(), #8x8
57 )
58
59project.add_solver( solver )
60
61#
62# Configure build
63#
64if args.mode=="release":
65 build_mode = peano4.api.output.CompileMode.RELEASE
66if args.mode=="stats":
67 build_mode = peano4.api.output.CompileMode.STATS
68if args.mode=="asserts":
69 build_mode = peano4.api.output.CompileMode.ASSERTS
70
71cube_size = 1.0
72project.set_global_simulation_parameters(
73 dimensions = args.dimensions,
74 offset = [ 0.0 for _ in range(args.dimensions) ],
75 domain_size = [ cube_size for _ in range(args.dimensions) ],
76)
77
78
79project.set_load_balancing( "toolbox::loadbalancing::strategies::RecursiveSubdivision", "new ::exahype2::LoadBalancingConfiguration()" )
80project.set_Peano4_installation( args.peanodir, build_mode )
81
82
83#
84# Generate code and then copy cpp file over main
85#
86peano4_project = project.generate_Peano4_project(args.verbose)
87peano4_project.generate()
88
89os.system( "make clean" )
90if args.j>0:
91 os.system( "make -j{}".format(args.j) )
92else:
93 os.system( "make -j" )
94
95print("Done")