Skip to content

Commit 739d181

Browse files
committed
refinement instead of nvars for PETSc
1 parent e72a7cd commit 739d181

File tree

4 files changed

+17
-10
lines changed

4 files changed

+17
-10
lines changed

pySDC/implementations/problem_classes/HeatEquation_2D_PETSc_forced.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,26 +39,28 @@ def __init__(self, problem_params, dtype_u=petsc_data, dtype_f=rhs_imex_petsc_da
3939
if 'sol_maxiter' not in problem_params:
4040
problem_params['sol_maxiter'] = None
4141

42-
essential_keys = ['nvars', 'nu', 'freq', 'comm']
42+
essential_keys = ['cnvars', 'nu', 'freq', 'comm', 'refine']
4343
for key in essential_keys:
4444
if key not in problem_params:
4545
msg = 'need %s to instantiate problem, only got %s' % (key, str(problem_params.keys()))
4646
raise ParameterError(msg)
4747

4848
# make sure parameters have the correct form
49-
if len(problem_params['nvars']) != 2:
50-
raise ProblemError('this is a 2d example, got %s' % problem_params['nvars'])
49+
if len(problem_params['cnvars']) != 2:
50+
raise ProblemError('this is a 2d example, got %s' % problem_params['cnvars'])
5151

5252
# create DMDA object which will be used for all grid operations
53-
da = PETSc.DMDA().create([problem_params['nvars'][0], problem_params['nvars'][1]], stencil_width=1,
53+
da = PETSc.DMDA().create([problem_params['cnvars'][0], problem_params['cnvars'][1]], stencil_width=1,
5454
comm=problem_params['comm'])
55+
for _ in range(problem_params['refine']):
56+
da = da.refine()
5557

5658
# invoke super init, passing number of dofs, dtype_u and dtype_f
5759
super(heat2d_petsc_forced, self).__init__(init=da, dtype_u=dtype_u, dtype_f=dtype_f, params=problem_params)
5860

5961
# compute dx, dy and get local ranges
60-
self.dx = 1.0 / (self.params.nvars[0] - 1)
61-
self.dy = 1.0 / (self.params.nvars[1] - 1)
62+
self.dx = 1.0 / (self.init.getSizes()[0] - 1)
63+
self.dy = 1.0 / (self.init.getSizes()[1] - 1)
6264
(self.xs, self.xe), (self.ys, self.ye) = self.init.getRanges()
6365

6466
# compute discretization matrix A and identity

pySDC/playgrounds/PETSc/playground_data.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ def main():
1212
dx = 1.0/(n - 1)
1313
dy = dx
1414
comm= PETSc.COMM_WORLD
15-
da = PETSc.DMDA().create([n, n], dof=2, stencil_width=1, comm=comm)
15+
da = PETSc.DMDA().create([n, n], dof=1, stencil_width=1, comm=comm)
16+
dar = da.refine()
17+
print(dar.getSizes())
18+
exit()
1619

1720
rank = PETSc.COMM_WORLD.getRank()
1821
# comm=

pySDC/projects/TOMS/pySDC_with_PETSc.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ def main():
6060
problem_params = dict()
6161
problem_params['nu'] = 1.0 # diffusion coefficient
6262
problem_params['freq'] = 2 # frequency for the test value
63-
problem_params['nvars'] = [(129, 129), (65, 65)] # number of degrees of freedom for each level
63+
problem_params['cnvars'] = [(257, 257)] # number of degrees of freedom on coarse level
64+
problem_params['refine'] = [1, 0] # number of refinements
6465
problem_params['comm'] = space_comm # pass space-communicator to problem class
6566
problem_params['sol_tol'] = 1E-10 # set tolerance to PETSc' linear solver
6667

@@ -76,7 +77,7 @@ def main():
7677

7778
# initialize controller parameters
7879
controller_params = dict()
79-
controller_params['logger_level'] = 30 if space_rank == 0 else 99 # set level depending on rank
80+
controller_params['logger_level'] = 20 if space_rank == 0 else 99 # set level depending on rank
8081
controller_params['dump_setup'] = False
8182

8283
# fill description dictionary for easy step instantiation

pySDC/tutorial/step_7/C_pySDC_with_PETSc.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ def main():
5555
problem_params = dict()
5656
problem_params['nu'] = 1.0 # diffusion coefficient
5757
problem_params['freq'] = 2 # frequency for the test value
58-
problem_params['nvars'] = [(129, 129), (65, 65)] # number of degrees of freedom for each level
58+
problem_params['cnvars'] = [(65, 65)] # number of degrees of freedom for the coarsest level
59+
problem_params['refine'] = [1, 0] # number of refinements
5960
problem_params['comm'] = space_comm # pass space-communicator to problem class
6061
problem_params['sol_tol'] = 1E-12 # set tolerance to PETSc' linear solver
6162

0 commit comments

Comments
 (0)