← Back to team overview

dolfin team mailing list archive

Re: Assembler interface

 



Anders Logg wrote:
On Thu, Oct 23, 2008 at 05:39:18PM +0200, Martin Sandve Alnæs wrote:
2008/10/23 Garth N. Wells <gnw20@xxxxxxxxx>:

Anders Logg wrote:
On Thu, Oct 23, 2008 at 05:24:54PM +0200, Anders Logg wrote:
Now that we have removed DofMapSet, how should the general assembly
interface look? We have lots of simple assemble() functions and they
all end up calling the main function which is

  void assemble(GenericTensor& A,
                const ufc::form& form,
                const Array<Function*>& coefficients,
                const DofMapSet& dof_map_set,
                const MeshFunction<uint>* cell_domains,
                const MeshFunction<uint>* exterior_facet_domains,
                const MeshFunction<uint>* interior_facet_domains,
                bool reset_tensor = true);

One option would be

  void assemble(GenericTensor& A,
                const ufc::form& form,
                const std::vector<std::tr1::shared_ptr<FunctionSpace> > function_spaces,
                const std::vector<std::tr1::shared_ptr<Function> > coefficients,
                const MeshFunction<uint>* cell_domains,
                const MeshFunction<uint>* exterior_facet_domains,
                const MeshFunction<uint>* interior_facet_domains,
                bool reset_tensor = true);
I meant

    void assemble(GenericTensor& A,
                  const ufc::form& form,
                  const std::vector<FunctionSpace&> function_spaces,
                  const std::vector<Function&> coefficients,
                  const MeshFunction<uint>* cell_domains,
                  const MeshFunction<uint>* exterior_facet_domains,
                  const MeshFunction<uint>* interior_facet_domains,
                  bool reset_tensor = true);

That look better.

Why is

  const std::vector<FunctionSpace&> function_spaces

required in the assembler?

Garth
For initialized DofMaps.

Another option is to just require the user to construct dolfin::Form
objects with ufc::form and dolfin::FunctionSpaces.

That would simplify things. I would prefer that, but it would mean
that the Assembler is not able to operate on ufc:: objects, only their
DOLFIN wrapper, but the Assembler requires wrapping of the
ufc::dof_map anyway.


This would simplify things more than I originally anticipated since Form uses shared pointers to FunctionSpaces and Functions, and I would prefer to to pass shared pointers to assembly functions since they don't own anything anyway.

Garth



------------------------------------------------------------------------

_______________________________________________
DOLFIN-dev mailing list
DOLFIN-dev@xxxxxxxxxx
http://www.fenics.org/mailman/listinfo/dolfin-dev



References