DirichletBC is MPI blocking

Issue #582 wontfix
Øyvind Evju created an issue

The interface for DirichletBC.apply is MPI blocking. I propose extending the functionality with a non-blocking apply_local method, which does not call assembly-routines on vector or matrices.

This is useful when a set of different DirichletBC are to be applied, with each only living on a subset of processors, e.g.:

bcs = [<list of N DirichletBC instances>]

for bc in bcs:
    bc.apply(A,x) # Waiting on all processes before continuing

An alternative could be:

for bc in bcs:
    bc.apply_local(A,x)

A.apply("insert") # Here is the first block
x.apply("insert")

I'm sketching up some changes to this, and will provide results on a test case on >100 cores to see if there are any improvements.

Comments (2)

  1. Prof Garth Wells

    Discussion concluded this isn't possible. Plus, using SystemAssembler avoids the whole issue anyway.

  2. Log in to comment