Skip to content

Commit 995dce0

Browse files
committed
misc: Separate more files
1 parent d389d93 commit 995dce0

10 files changed

Lines changed: 81 additions & 70 deletions

File tree

devito/ir/iet/algorithms.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
Section, HaloSpot, ExpressionBundle)
55
from devito.tools import timed_pass
66
from devito.petsc.types import MetaData
7-
from devito.petsc.iet.utils import petsc_iet_mapper
7+
from devito.petsc.iet.nodes import petsc_iet_mapper
88

99
__all__ = ['iet_build']
1010

devito/petsc/iet/callback_builder.py

Lines changed: 35 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,11 @@
1010
from devito.tools import filter_ordered
1111

1212
from devito.petsc.iet.nodes import PETScCallable, MatShellSetOp
13-
from devito.petsc.iet.utils import (petsc_call, zero_vector,
14-
dereference_funcs, void,
15-
insert_vals, add_vals, get_user_struct_fields)
13+
from devito.petsc.iet.utils import (petsc_call, void, get_user_struct_fields)
1614
from devito.petsc.types import DMCast, MainUserStruct, CallbackUserStruct
1715
from devito.petsc.iet.object_builder import objs
1816
from devito.petsc.types.macros import petsc_func_begin_user
17+
from devito.petsc.types.strings import InsertMode
1918

2019

2120
class BaseCallback:
@@ -228,11 +227,11 @@ def _create_matvec_body(self, body, jacobian):
228227

229228
global_to_local_begin = petsc_call(
230229
'DMGlobalToLocalBegin', [dmda, objs['X'],
231-
insert_vals, xlocal]
230+
InsertMode.insert_values, xlocal]
232231
)
233232

234233
global_to_local_end = petsc_call('DMGlobalToLocalEnd', [
235-
dmda, objs['X'], insert_vals, xlocal
234+
dmda, objs['X'], InsertMode.insert_values, xlocal
236235
])
237236

238237
dm_get_local_yvec = petsc_call(
@@ -262,11 +261,11 @@ def _create_matvec_body(self, body, jacobian):
262261
)
263262

264263
dm_local_to_global_begin = petsc_call('DMLocalToGlobalBegin', [
265-
dmda, ylocal, add_vals, objs['Y']
264+
dmda, ylocal, InsertMode.add_values, objs['Y']
266265
])
267266

268267
dm_local_to_global_end = petsc_call('DMLocalToGlobalEnd', [
269-
dmda, ylocal, add_vals, objs['Y']
268+
dmda, ylocal, InsertMode.add_values, objs['Y']
270269
])
271270

272271
dm_restore_local_xvec = petsc_call(
@@ -375,11 +374,11 @@ def _create_formfunc_body(self, body):
375374

376375
global_to_local_begin = petsc_call(
377376
'DMGlobalToLocalBegin', [dmda, objs['X'],
378-
insert_vals, objs['xloc']]
377+
InsertMode.insert_values, objs['xloc']]
379378
)
380379

381380
global_to_local_end = petsc_call('DMGlobalToLocalEnd', [
382-
dmda, objs['X'], insert_vals, objs['xloc']
381+
dmda, objs['X'], InsertMode.insert_values, objs['xloc']
383382
])
384383

385384
dm_get_local_yvec = petsc_call(
@@ -407,11 +406,11 @@ def _create_formfunc_body(self, body):
407406
)
408407

409408
dm_local_to_global_begin = petsc_call('DMLocalToGlobalBegin', [
410-
dmda, objs['floc'], add_vals, objs['F']
409+
dmda, objs['floc'], InsertMode.add_values, objs['F']
411410
])
412411

413412
dm_local_to_global_end = petsc_call('DMLocalToGlobalEnd', [
414-
dmda, objs['floc'], add_vals, objs['F']
413+
dmda, objs['floc'], InsertMode.add_values, objs['F']
415414
])
416415

417416
dm_restore_local_xvec = petsc_call(
@@ -492,11 +491,11 @@ def _create_form_rhs_body(self, body):
492491

493492
dm_global_to_local_begin = petsc_call(
494493
'DMGlobalToLocalBegin', [dmda, objs['B'],
495-
insert_vals, sobjs['blocal']]
494+
InsertMode.insert_values, sobjs['blocal']]
496495
)
497496

498497
dm_global_to_local_end = petsc_call('DMGlobalToLocalEnd', [
499-
dmda, objs['B'], insert_vals,
498+
dmda, objs['B'], InsertMode.insert_values,
500499
sobjs['blocal']
501500
])
502501

@@ -520,12 +519,12 @@ def _create_form_rhs_body(self, body):
520519
)
521520

522521
dm_local_to_global_begin = petsc_call('DMLocalToGlobalBegin', [
523-
dmda, sobjs['blocal'], insert_vals,
522+
dmda, sobjs['blocal'], InsertMode.insert_values,
524523
objs['B']
525524
])
526525

527526
dm_local_to_global_end = petsc_call('DMLocalToGlobalEnd', [
528-
dmda, sobjs['blocal'], insert_vals,
527+
dmda, sobjs['blocal'], InsertMode.insert_values,
529528
objs['B']
530529
])
531530

@@ -825,11 +824,11 @@ def _whole_formfunc_body(self, body):
825824

826825
global_to_local_begin = petsc_call(
827826
'DMGlobalToLocalBegin', [dmda, objs['X'],
828-
insert_vals, objs['xloc']]
827+
InsertMode.insert_values, objs['xloc']]
829828
)
830829

831830
global_to_local_end = petsc_call('DMGlobalToLocalEnd', [
832-
dmda, objs['X'], insert_vals, objs['xloc']
831+
dmda, objs['X'], InsertMode.insert_values, objs['xloc']
833832
])
834833

835834
dm_get_local_yvec = petsc_call(
@@ -857,11 +856,11 @@ def _whole_formfunc_body(self, body):
857856
)
858857

859858
dm_local_to_global_begin = petsc_call('DMLocalToGlobalBegin', [
860-
dmda, objs['floc'], add_vals, objs['F']
859+
dmda, objs['floc'], InsertMode.add_values, objs['F']
861860
])
862861

863862
dm_local_to_global_end = petsc_call('DMLocalToGlobalEnd', [
864-
dmda, objs['floc'], add_vals, objs['F']
863+
dmda, objs['floc'], InsertMode.add_values, objs['F']
865864
])
866865

867866
dm_restore_local_xvec = petsc_call(
@@ -1104,3 +1103,20 @@ def populate_matrix_context(efuncs):
11041103
name, body, objs['err'],
11051104
parameters=[objs['ljacctx'], objs['Subdms'], objs['Fields']]
11061105
)
1106+
1107+
1108+
def dereference_funcs(struct, fields):
1109+
"""
1110+
Dereference AbstractFunctions from a struct.
1111+
"""
1112+
return tuple(
1113+
[Dereference(i, struct) for i in
1114+
fields if isinstance(i.function, AbstractFunction)]
1115+
)
1116+
1117+
1118+
def zero_vector(vec):
1119+
"""
1120+
Set all entries of a PETSc vector to zero.
1121+
"""
1122+
return petsc_call('VecSet', [vec, 0.0])

devito/petsc/iet/nodes.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,8 @@ def callback_form(self):
2929

3030
class PETScCall(Call):
3131
pass
32+
33+
34+
# Mapping special Eq operations to their corresponding IET Expression subclass types.
35+
# These operations correspond to subclasses of Eq utilised within PETScSolve.
36+
petsc_iet_mapper = {OpPetsc: PetscMetaData}

devito/petsc/iet/pre_solver.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
from devito.symbolics import (Byref, FieldFromPointer, VOID,
55
FieldFromComposite, Null)
66

7-
from devito.petsc.iet.nodes import FormFunctionCallback, MatShellSetOp
8-
from devito.petsc.iet.utils import petsc_call, void, petsc_call_mpi
7+
from devito.petsc.iet.nodes import FormFunctionCallback, MatShellSetOp, PETScCall
8+
from devito.petsc.iet.utils import petsc_call
99

1010

1111
def make_core_petsc_calls(objs, comm):
@@ -331,3 +331,10 @@ def _setup(self):
331331
create_submats) + \
332332
tuple(deref_dms) + tuple(xglobals) + tuple(xlocals) + (BlankLine,)
333333
return coupled_setup
334+
335+
336+
def petsc_call_mpi(specific_call, call_args):
337+
return PETScCall('PetscCallMPI', [PETScCall(specific_call, arguments=call_args)])
338+
339+
340+
void = 'void'

devito/petsc/iet/run_solver.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
from devito.symbolics import (Byref, Null)
77

88
from devito.petsc.iet.nodes import PetscMetaData
9-
from devito.petsc.iet.utils import petsc_call, insert_vals, sreverse, sforward
9+
from devito.petsc.types.strings import InsertMode, ScatterMode
10+
from devito.petsc.iet.utils import petsc_call
1011

1112

1213
class Solver:
@@ -44,7 +45,7 @@ def _execute_solve(self):
4445
initguess_call = None
4546

4647
dm_local_to_global_x = petsc_call(
47-
'DMLocalToGlobal', [dmda, sobjs['xlocal'], insert_vals,
48+
'DMLocalToGlobal', [dmda, sobjs['xlocal'], InsertMode.insert_values,
4849
sobjs['xglobal']]
4950
)
5051

@@ -53,7 +54,7 @@ def _execute_solve(self):
5354
)
5455

5556
dm_global_to_local_x = petsc_call('DMGlobalToLocal', [
56-
dmda, sobjs['xglobal'], insert_vals, sobjs['xlocal']]
57+
dmda, sobjs['xglobal'], InsertMode.insert_values, sobjs['xlocal']]
5758
)
5859

5960
vec_reset_array = self.time_dependence.reset_array(target)
@@ -113,35 +114,35 @@ def _execute_solve(self):
113114
self.time_dependence.place_array(t),
114115
petsc_call(
115116
'DMLocalToGlobal',
116-
[dm, target_xloc, insert_vals, target_xglob]
117+
[dm, target_xloc, InsertMode.insert_values, target_xglob]
117118
),
118119
petsc_call(
119120
'VecScatterCreate',
120121
[xglob, field, target_xglob, Null, Byref(s)]
121122
),
122123
petsc_call(
123124
'VecScatterBegin',
124-
[s, target_xglob, xglob, insert_vals, sreverse]
125+
[s, target_xglob, xglob, InsertMode.insert_values, ScatterMode.scatter_reverse]
125126
),
126127
petsc_call(
127128
'VecScatterEnd',
128-
[s, target_xglob, xglob, insert_vals, sreverse]
129+
[s, target_xglob, xglob, InsertMode.insert_values, ScatterMode.scatter_reverse]
129130
),
130131
BlankLine,
131132
)
132133

133134
post_solve += (
134135
petsc_call(
135136
'VecScatterBegin',
136-
[s, xglob, target_xglob, insert_vals, sforward]
137+
[s, xglob, target_xglob, InsertMode.insert_values, ScatterMode.scatter_forward]
137138
),
138139
petsc_call(
139140
'VecScatterEnd',
140-
[s, xglob, target_xglob, insert_vals, sforward]
141+
[s, xglob, target_xglob, InsertMode.insert_values, ScatterMode.scatter_forward]
141142
),
142143
petsc_call(
143144
'DMGlobalToLocal',
144-
[dm, target_xglob, insert_vals, target_xloc]
145+
[dm, target_xglob, InsertMode.insert_values, target_xloc]
145146
)
146147
)
147148

devito/petsc/iet/utils.py

Lines changed: 2 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,13 @@
1-
from devito.ir.equations import OpPetsc
2-
from devito.ir.iet import Dereference, FindSymbols
3-
from devito.types.basic import AbstractFunction
1+
from devito.ir.iet import FindSymbols
42
from devito.types import Temp, TempArray
53

6-
from devito.petsc.iet.nodes import PetscMetaData, PETScCall
4+
from devito.petsc.iet.nodes import PETScCall
75

86

97
def petsc_call(specific_call, call_args):
108
return PETScCall('PetscCall', [PETScCall(specific_call, arguments=call_args)])
119

1210

13-
def petsc_call_mpi(specific_call, call_args):
14-
return PETScCall('PetscCallMPI', [PETScCall(specific_call, arguments=call_args)])
15-
16-
17-
def zero_vector(vec):
18-
"""
19-
Set all entries of a PETSc vector to zero.
20-
"""
21-
return petsc_call('VecSet', [vec, 0.0])
22-
23-
24-
def dereference_funcs(struct, fields):
25-
"""
26-
Dereference AbstractFunctions from a struct.
27-
"""
28-
return tuple(
29-
[Dereference(i, struct) for i in
30-
fields if isinstance(i.function, AbstractFunction)]
31-
)
32-
33-
3411
def get_user_struct_fields(iet):
3512
fields = [f.function for f in FindSymbols('basics').visit(iet)]
3613
from devito.types.basic import LocalType
@@ -40,15 +17,3 @@ def get_user_struct_fields(iet):
4017
f for f in fields if not (f.is_Dimension and not (f.is_Time or f.is_Modulo))
4118
]
4219
return fields
43-
44-
45-
# Mapping special Eq operations to their corresponding IET Expression subclass types.
46-
# These operations correspond to subclasses of Eq utilised within PETScSolve.
47-
petsc_iet_mapper = {OpPetsc: PetscMetaData}
48-
49-
50-
void = 'void'
51-
insert_vals = 'INSERT_VALUES'
52-
add_vals = 'ADD_VALUES'
53-
sreverse = 'SCATTER_REVERSE'
54-
sforward = 'SCATTER_FORWARD'

devito/petsc/types/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from .array import * # noqa
2-
from .types import * # noqa
2+
from .metadata import * # noqa
33
from .object import * # noqa
44
from .equation import * # noqa
55
from .macros import * # noqa
6+
from .modes import * # noqa

devito/petsc/types/macros.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import cgen as c
22

3-
43
# TODO: Don't use c.Line here?
54
petsc_func_begin_user = c.Line('PetscFunctionBeginUser;')

devito/petsc/types/modes.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
2+
class InsertMode:
3+
"""
4+
How the entries are combined with the current values in the vectors or matrices.
5+
Reference - https://petsc.org/main/manualpages/Sys/InsertMode/
6+
"""
7+
insert_values = 'INSERT_VALUES'
8+
add_values = 'ADD_VALUES'
9+
10+
11+
class ScatterMode:
12+
"""
13+
Determines the direction of a scatter in `VecScatterBegin()` and `VecScatterEnd()`.
14+
Reference - https://petsc.org/release/manualpages/Vec/ScatterMode/
15+
"""
16+
scatter_reverse = 'SCATTER_REVERSE'
17+
scatter_forward = 'SCATTER_FORWARD'

0 commit comments

Comments
 (0)