Peano
Loading...
Searching...
No Matches
cg-multigrid-single-threaded.py
Go to the documentation of this file.
1import os, sys
2import argparse
3import peano4.api
4import numpy as np
5import mghype
6
7print( """
8
9Peano 4 multigrid solver using Continuous Galerkin
10
11@author 2022 Sean Baccas, Dmitry Nikolaenko, Tobias Weinzierl
12
13""")
14
15parser = argparse.ArgumentParser(description='Multigrid - Poisson solver')
16parser.add_argument("-j", "--parallel-builds", dest="j", type=int, default=-1, help="Parallel builds" )
17parser.add_argument("-pt", "--plot-sweep", dest="plot_after_each_mesh_sweep", action="store_true", default=False, help="Plot after each timestep. By default (False) we plot after initialisation and at the end" )
18parser.add_argument("-pd", "--peano-dir", dest="peanodir", default="../../../../", help="Peano4 directory" )
19parser.add_argument("-v", "--verbose", dest="verbose", action="store_true", default=False, help="Verbose")
20parser.add_argument("-d", "--dimensions", dest="dimensions", type=int, default=2, help="Dimensions")
21parser.add_argument("-c", "--coarse-level", dest="coarsest_level", type=int, default=0, help="coarsest_level")
22parser.add_argument("-meshsize", "--meshsize", dest="meshsize", default=0.3, help="Mesh size")
23parser.add_argument("-m", "--mode", dest="mode", choices=["release","stats","asserts", "trace"], required=True, help="Pick build type" )
24args = parser.parse_args()
25
26project = mghype.matrixfree.api.Project( project_name = "CollocatedMG",
27 namespace = [ "tests", "multigrid", "matrixfree", "poisson" ]
28 )
29
30
32 dimensions = args.dimensions,
33 poly_degree = 1,
34 unknowns_per_node = 1
35)
36
38 dimensions = args.dimensions,
39 unknowns_per_node = 1
40)
41
43
44system_matrix, system_matrix_scaling = finest_level_matrices.get_cell_system_matrix_for_laplacian()
45mass_matrix, mass_matrix_scaling = finest_level_matrices.get_cell_mass_matrix()
46
47correction_matrix, correction_matrix_scaling = correction_equation_matrices.get_cell_mass_matrix()
48
49solver = mghype.matrixfree.solvers.api.CollocatedMGSingleThreaded("CollocatedMG",
50 1,
51 args.dimensions,
52 args.meshsize,
53 args.meshsize,
54 local_assembly_matrix = system_matrix,
55 local_assembly_matrix_scaling=system_matrix_scaling,
56 mass_matrix = mass_matrix,
57 mass_matrix_scaling = mass_matrix_scaling,
58 correction_matrix = correction_matrix,
59 correction_matrix_scaling = correction_matrix_scaling,
60 solver_tolerance=0.01,
61 pre_smoothing_steps =5,
62 post_smoothing_steps=5,
63 restriction_matrix=intergridOperators.restriction(),
64 prolongation_matrix=intergridOperators.prolongation(),
65 descend_order=0,
66 coarsest_level=args.coarsest_level
67 )
68
69project.add_solver(solver)
70
71#
72# Configure build
73#
74if args.mode=="release":
75 build_mode = peano4.api.output.CompileMode.RELEASE
76if args.mode=="stats":
77 build_mode = peano4.api.output.CompileMode.STATS
78if args.mode=="asserts":
79 build_mode = peano4.api.output.CompileMode.ASSERTS
80if args.mode=="trace":
81 build_mode = peano4.api.output.CompileMode.TRACE
82
83cube_size = 1.0
84project.set_global_simulation_parameters(
85 dimensions = args.dimensions,
86 offset = [ 0.0 for _ in range(args.dimensions) ],
87 domain_size = [ cube_size for _ in range(args.dimensions) ],
88 plot_after_each_mesh_sweep = args.plot_after_each_mesh_sweep,
89 max_iterations = 2000
90)
91
92'''
93The first attempt to parallelise this code was a failure. So we comment out the load balancing.
94'''
95# project.set_load_balancing( "toolbox::loadbalancing::strategies::SpreadOutOnceGridStagnates", "new ::exahype2::LoadBalancingConfiguration(0.9, 0, false, 8, 50)" )
96
97project.set_Peano4_installation( args.peanodir, build_mode )
98
99peano4_project = project.generate_Peano4_project(args.verbose)
100peano4_project.output.makefile.add_cpp_file( "Scenario.cpp" )
101peano4_project.generate()
102
103os.system( "make clean" )
104if args.j>0:
105 os.system( "make -j{}".format(args.j) )
106else:
107 os.system( "make -j$(nproc --all)" )
108
109print("Done")
110
Using normalised identity matrix instead of the mass matrix.
Simple matrix generator for continuous d-linear finite elements.
Definition DLinear.py:10
Class to produce restriction/prolongation matrices for multigrid tasks.