Would you actually do something like:
system.addVariableGroup()? Or would VariableGroups be automatically
created based on the types of variables that have been added? It would be
great if it were the second one... that way, all of this is not a
user-facing API... but really just an optimization under the hood.
This is sounding _really_ good!
Derek
On Thu, Dec 6, 2012 at 10:57 AM, Kirk, Benjamin (JSC-EG311) <
benjamin.kir...@nasa.gov> wrote:
> On Dec 5, 2012, at 4:00 PM, Derek Gaston <fried...@gmail.com> wrote:
>
> > We also have other users solving with 20-200 variables of the same
> > kind (again, usually first or second order Lagrange) but they might
> > also have 1-4 variables of another kind (like cubic hermites) mixed in
> > - but not always.
>
> OK, based on this and Saurabh's feedback it is clear going straight to the
> type (2) optimizations, while more difficult, is the way to go.
>
> I'm going to focus on the DOF indexing part of this for now and then do
> the block matrix support later. Note the block matrix support will still
> only be restricted to when all the variables in a system are of the same
> type, though.
>
> To support the general case of multiple variables of different types
> (Derek's 20 linear lagrange + 4 cubic hermites, for example) I'm proposing
> we introduce the construct "VariableGroup", which is just like the current
> Variable except it supports an arbitrary number of variables with the same
> finite element approximation type and subdomain restriction.
>
> So to implement a system of Derek's type that would be two variable groups.
>
> To take advantage of this at the DofObject level, the DOF indexing will
> need to loop quickest within the variable groups. This is because the
> DofObject does not know anything about the topology of the mesh or
> anything. So the DOF index offset between two variables within a
> VariableGroup should not depend on the number of elements in the mesh in
> any way.
>
> Specifically, to number DOFs efficiently will require something like this:
>
> for each VariableGroup
> for each Node
> for each Variable in the VariableGroup
> for each Component in the Variable
> …
> …
> …
> for each Element
> for each Variable in the VariableGroup
> for each Component in the Variable
> …
> …
> …
> …
>
> When we only have one Variable per VariableGroup this is exactly the
> indexing we currently get (without --node_major_dofs, anyway). With
> multiple Variables in a VariableGroup, however, the indexing and resulting
> sparse matrix ordering will be different.
>
> -Ben
>
>
------------------------------------------------------------------------------
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d
_______________________________________________
Libmesh-devel mailing list
Libmesh-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-devel