Peano
Loading...
Searching...
No Matches
fem.py
Go to the documentation of this file.
1# This file is part of the Peano multigrid project. For conditions of
2# distribution and use, please see the copyright notice at www.peano-framework.org
3
4
5import os, sys
6import argparse
7import peano4.api
8import multigrid
9
10print( """
11
12Peano 4 multigrid solver using Discontinuous Galerkin and PETSc
13
14@author 2022 Sean Baccas, Dmitry Nikolaenko, Tobias Weinzierl
15
16""")
17
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()
27
28
29project = multigrid.petsc.api.Project(project_name = "CollocatedFEM",
30 namespace = [ "benchmarks", "multigrid", "petsc", "poisson" ]
31 )
32
33
34matrices = multigrid.api.matrixgenerators.DLinear(dimensions = args.dimensions,
35 unknowns_per_vertex_dof = args.upv,
36 poly_degree = 1
37 )
38
39solver = multigrid.petsc.api.solvers.CollocatedLowOrderDiscretisation(name = "CollocatedPoisson",
40 unknowns = args.upv,
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,
48 )
49
50project.add_solver( solver )
51
52#
53# Configure build
54#
55if args.mode=="release":
56 build_mode = peano4.api.output.CompileMode.RELEASE
57if args.mode=="stats":
58 build_mode = peano4.api.output.CompileMode.STATS
59if args.mode=="asserts":
60 build_mode = peano4.api.output.CompileMode.ASSERTS
61if args.mode=="trace":
62 build_mode = peano4.api.output.CompileMode.TRACE
63
64cube_size = 1.0
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) ],
69)
70
71
72project.set_load_balancing( "toolbox::loadbalancing::strategies::RecursiveSubdivision", "new ::exahype2::LoadBalancingConfiguration()" )
73project.set_Peano4_installation( args.peanodir, build_mode )
74
75
76#
77# Generate code and then copy cpp file over main
78#
79peano4_project = project.generate_Peano4_project(args.verbose)
80peano4_project.generate()
81
82os.system( "make clean" )
83if args.j>0:
84 os.system( "make -j{}".format(args.j) )
85else:
86 os.system( "make -j" )
87
88print("Done")