Peano
Loading...
Searching...
No Matches
poisson.py
Go to the documentation of this file.
1"""
2
3 Simple Poisson solver on the unit cube.
4
5"""
6
7
8import os, sys
9import argparse
10import peano4
11import petsc
12
13print( """
14
15Peano 4 multigrid solver using PETSc
16
17@author 2022 Sean Baccas, Dmitry Nikolaenko, Tobias Weinzierl
18
19""")
20
21parser = argparse.ArgumentParser(description='Multigrid - Poisson solver')
22parser.add_argument("-j", "--parallel-builds", dest="j", type=int, default=-1, help="Parallel builds" )
23parser.add_argument("-pd", "--peano-dir", dest="peanodir", default="../../../../", help="Peano4 directory" )
24parser.add_argument("-v", "--verbose", dest="verbose", action="store_true", default=False, help="Verbose")
25parser.add_argument("-d", "--dimensions", dest="dimensions", default=2, help="Dimensions")
26parser.add_argument("-meshsize", "--meshsize", dest="meshsize", default=0.01, help="Mesh size")
27parser.add_argument("-m", "--mode", dest="mode", choices=["release","stats","asserts"], required=True, help="Pick build type" )
28args = parser.parse_args()
29
30#add a 9 point stencil which will
31#be passed to PETSc at matrix initialisation stage
32stencil=[
33 [-1/3, -1/3, -1/3],
34 [-1/3, 8/3, -1/3],
35 [-1/3, -1/3, -1/3]
36]
37
38project = petsc.Project(project_name = "Poisson",
39 namespace = [ "benchmarks", "multigrid", "petsc", "poisson" ]
40 )
41
42
43solver = petsc.solvers.CollocatedLowOrderDiscretisation("Poisson",
44 1,
45 args.meshsize,
46 args.meshsize,
47 stencil
48 )
49
50project.add_solver( solver )
51
52#
53# Configure build
54#
55if args.mode=="release":
56 build_mode = peano4.output.CompileMode.Release
57if args.mode=="stats":
58 build_mode = peano4.output.CompileMode.Stats
59if args.mode=="asserts":
60 build_mode = peano4.output.CompileMode.Asserts
61
62cube_size = 1.0
63project.set_global_simulation_parameters(
64 dimensions = args.dimensions,
65 offset = [ 0.0 for _ in range(args.dimensions) ],
66 domain_size = [ cube_size for _ in range(args.dimensions) ],
67)
68
69
70project.set_load_balancing( "toolbox::loadbalancing::strategies::RecursiveSubdivision", "new ::exahype2::LoadBalancingConfiguration()" )
71project.set_Peano4_installation( args.peanodir, build_mode )
72
73
74#
75# Generate code and then copy cpp file over main
76#
77peano4_project = project.generate_Peano4_project(args.verbose)
78peano4_project.generate()
79
80os.system( "make clean" )
81if args.j>0:
82 os.system( "make -j{}".format(args.j) )
83else:
84 os.system( "make -j" )
85
86print("Done")