← Back to team overview

dolfin team mailing list archive

Additions to assembler interface

 

As part of assembling systems on overlapping meshes (for Nitsche type
methods), my student Andre Massing is calling the regular DOLFIN
assemble function for part of the domain and then calling a special
purpose assembler (currently residing in a branch called dolfin-olm)
for terms that are not supported by the regular assembler.

For this to work out well, I'd like to propose the following changes
to the assembler:

1. Make the assemble_cells, assemble_exterior/interior_facets public

We need to access these separately.

2. Add options for controlling if and how we call A.apply()

A.apply() calls PETSc MatAssemblyBegin/End with MAT_FINAL_ASSEMBLY.
This makes it *very* expensive for us since we need to switch between
inserting and adding values to the matrix. We need to instead use the
option MAT_FLUSH_ASSEMBLY. It would further be useful to have an
option of not calling A.apply() at all.

I'm not sure how this should be handled in the GenericTensor interface
since Trilinos does not seem to have a corresponding option.

A first step would be to just add a boolean option to the assembler:

  call_apply=false

Then we could manually flush the values in between calls.

Opinions?

--
Anders


Follow ups