> 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 <[EMAIL PROTECTED]>: >>>> On Mon, Jun 16, 2008 at 10:10:32PM +0200, Martin Sandve Alnæs wrote: >>>>> 2008/6/16 Anders Logg <[EMAIL PROTECTED]>: >>>>>> On Mon, Jun 16, 2008 at 09:46:23PM +0200, Martin Sandve Alnæs wrote: >>>>>>> 2008/6/16 Anders Logg <[EMAIL PROTECTED]>: >>>>>>>> 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 >> [email protected] >> http://www.fenics.org/mailman/listinfo/dolfin-dev > > > _______________________________________________ > DOLFIN-dev mailing list > [email protected] > http://www.fenics.org/mailman/listinfo/dolfin-dev > _______________________________________________ DOLFIN-dev mailing list [email protected] http://www.fenics.org/mailman/listinfo/dolfin-dev
