1010from devito .tools import filter_ordered
1111
1212from 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 )
1614from devito .petsc .types import DMCast , MainUserStruct , CallbackUserStruct
1715from devito .petsc .iet .object_builder import objs
1816from devito .petsc .types .macros import petsc_func_begin_user
17+ from devito .petsc .types .strings import InsertMode
1918
2019
2120class 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 ])
0 commit comments