OK, so I've got a simple version of this working.

I've attached a patch, as well as some new files for the instantiation of FEScalar (I sent this earlier, but didn't zip it up, so it didn't make it under the 40kb limit)

Some notes:
- As a first cut, I used lots of hacks in dof_map.h that will only work in serial - I used Roy's idea of letting the Order of SCALAR indicate how many scalar variables we want -- I guess then it would be good to make sure that we only add one SCALAR to a system, but I haven't done that yet... - I didn't (yet) make any changes to the sparsity pattern, so adding to the last row(s) and column(s) of the matrix will be slow - Plotting the SCALAR variables gives garbage at the moment, although I guess it should be easy to change GMVIO etc to plot the constant value of the SCALAR

I've attached a test example (lagrange_mult.C) for this functionality, using a Lagrange multiplier to solve a pure (homogeneous) Neumann problem, and enforcing that \int_\Omega u \dx = 5.

- Dave



Roy Stogner wrote:

On Sat, 18 Apr 2009, David Knezevic wrote:

So, I'd really like to add this system.add_variable(foo,SCALAR)
functionality to libMesh. I've been poking around the library, but I'm
not really sure how to get started, so I could definitely use some
pointers...

It seems to me that the important details for this are in DofMap, for
storing and retrieving the dof index of the scalar variable, as well as
for setting the sparsity pattern/number of non-zeros...?

That's right.

Some thoughts I've had are:

- Add a new enum SCALAR to FEFamily (or alternatively, a new enum SCALAR
to Order)?

FEFamily.  The Order would then specify how many scalars to add.

Maybe next write an FE<SCALAR> specialization?  Something that acted
sort of like a discontinuous monomial element?  That might help
avoiding the need to add special cases to a lot of loops in the
library later.

- Short circuit all the loops over elements for DOF counting in DofMap
for SCALAR variables,

If the FE<SCALAR> claimed to have zero dofs per element, DofMap would
basically skip right over it... but I'm not sure that's an intuitive
behavior; this might be a loop you really do want a special case on.

and instead store the dof index of each SCALAR variable in a vector
in DofMap?

Right.

- However, I can't see where in the code one should compute the dof
index of a SCALAR variable in the first place?

That's all in dof_map.C.

- Ben, regarding setting the nonzero count and the number of rows that
you mentioned; where is this controlled? In SparsityPattern?

In SparseMatrix, I believe, although the code to build the sparsity
pattern is in DofMap.
---
Roy


Attachment: extra_dof_stuff.tar.gz
Description: GNU Zip compressed data

------------------------------------------------------------------------------
Stay on top of everything new and different, both inside and 
around Java (TM) technology - register by April 22, and save
$200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco.
300 plus technical and hands-on sessions. Register today. 
Use priority code J9JMT32. http://p.sf.net/sfu/p
_______________________________________________
Libmesh-devel mailing list
Libmesh-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-devel

Reply via email to