← Back to team overview

dolfin team mailing list archive

Re: DofMapSet design

 

> It would be useful to lay out a plan for tackling DofMaps. Getting this
> right is the key to parallel assembly, assembly optimisations and
> applying Dirichlet boundary conditions by eliminating Dirichlet dofs
> from the global system.
>

I think I will look at the Dirichlet conditions in a little while, since I
like symmetric matrices. I think I will enforce the bc at element level so
the assemble function
will need to take in bc.
A = assemble(form, mesh, bc)
or for systems
A = assemble([form00, form01, form10, form11], mesh, [bc0, bc1])
or something similar.

The element-level-wise elimination should be easy enough
to extend to parallel systems.


Kent


> I'm happy to take a look, but I'll need some time because I've lost my
> overview of DofMaps. If someone else is already on top of it, I'd be
> happy to provide feedback.
>
> Garth
>
>
> Anders Logg wrote:
>> On Mon, Jun 16, 2008 at 10:45:18PM +0200, Martin Sandve Alnæs wrote:
>>> 2008/6/16 Anders Logg <logg@xxxxxxxxx>:
>>>> On Mon, Jun 16, 2008 at 10:10:32PM +0200, Martin Sandve Alnæs wrote:
>>>>> 2008/6/16 Anders Logg <logg@xxxxxxxxx>:
>>>>>> On Mon, Jun 16, 2008 at 09:46:23PM +0200, Martin Sandve Alnæs wrote:
>>>>>>> 2008/6/16 Anders Logg <logg@xxxxxxxxx>:
>>>>>>>> On Mon, Jun 16, 2008 at 07:06:20PM +0200, Martin Sandve Alnæs
>>>>>>>> wrote:
>>>>>>>>> I think DofMapSet should be independent of the form it was
>>>>>>>>> initialized with.
>>>>>>>>> I believe the sharing of a single set of dofmaps among different
>>>>>>>>> forms is one
>>>>>>>>> of the key tasks of this class, and that the vector with form
>>>>>>>>> argument dofmaps
>>>>>>>>> should rather be obtained on demand:
>>>>>>>> Agree.
>>>>>>>>
>>>>>>>>>   // Get vector of dofmaps (possibly not unique) for each
>>>>>>>>> argument of form
>>>>>>>>>   dofmapvector = dofmapset.getDofMaps(form);
>>>>>>>> What does this function do?
>>>>>>> Gets a vector<DofMap*> with length equal to form.rank() +
>>>>>>> form.num_coefficients(),
>>>>>>> where each DofMap* is the same if the signature is the same.
>>>>>>> In other words, constructs and returns what is currently a member:
>>>>>>>
>>>>>>>     // Array of dof maps for current form
>>>>>>>     std::vector<DofMap*> dof_map_set;
>>>>>>>
>>>>>>> but on the fly for a given form such that DofMapSet isn't
>>>>>>> associated with any particular form.
>>>>>> ok, now I understand what you mean. But I would suggest
>>>>>>
>>>>>>  DofMap& dof_map = dofmapset.extractDofMap(form, i);
>>>>> Agree, that was the second function I suggested.
>>>> ok.
>>>>
>>>>>> Or are we going to pass around Arrays of DofMaps?
>>>>> It was just a convenience function to replace the existing
>>>>> functionality, but this functionality should probably rather
>>>>> be in UFC or something.
>>>> DofMapSet? Perhaps, but that would mean putting *functionality* into
>>>> UFC which we haven't done so far (except the Python boilerplate).
>>> I'm just guessing here, I imagine the vector of dofmaps for a form
>>> is only used in the context of assembly, and then they can be
>>> picked out together with other data in UFC. You or Garth put
>>> this vector<DofMap*> in DofMapSet in the first place, feel free
>>> to decide where to have it :)
>>
>> It's also used in assemble.py for things like initializing Functions,
>> but I think this can be greatly enhanced once the DofMapSet is not
>> tied to a particular form.
>>
>>
>>
>> ------------------------------------------------------------------------
>>
>> _______________________________________________
>> DOLFIN-dev mailing list
>> DOLFIN-dev@xxxxxxxxxx
>> http://www.fenics.org/mailman/listinfo/dolfin-dev
>
>
> _______________________________________________
> DOLFIN-dev mailing list
> DOLFIN-dev@xxxxxxxxxx
> http://www.fenics.org/mailman/listinfo/dolfin-dev
>




Follow ups

References