"BlockedDiscreteOperator" in Bempp-cl?

Dear Bempp-cl team,

when attempting to port my code to bempp-cl, I found that the “bempp.api.BlockedDiscreteOperator” functionality is not directly implemented in the new version.

Do you have a recommendation on how to implement custom block operators without this function?

Thank you very much in advance for your help.


Hi Jörg,

The bempp-cl library has similar functionality as bempp v3 for blocked operators but with slightly different syntax.

If we have

grid = bempp.api.shapes.regular_sphere(1)
space = bempp.api.function_space(grid, "DP", 0)
sl_op = bempp.api.operators.boundary.laplace.single_layer(space, space, space)
sl_wf = sl_op.weak_form()

a continous operator sl_op and a discrete operator sl_wf one can form blocked operators in two ways.

First, one can assembly a continuous blocked operator as

block_op = bempp.api.BlockedOperator(2,2)
block_op[0,0] = sl_op
block_op[1,1] = sl_op

and then calculate its weak form as block_op.weak_form().

Second, one can assemble a discrete blocked operator as

block_wf = bempp.api.assembly.blocked_operator.BlockedDiscreteOperator([[sl_wf, sl_wf],[sl_wf, sl_wf]])

where you need to pass a list of lists with discrete operators.


1 Like

Thank you Elwin, this has fixed the problem.