On Sat, 25 Apr 2009, Anders Logg wrote:

> On Wed, Apr 22, 2009 at 05:28:30PM -0400, Shawn Walker wrote:
>> Here is the changeset that adds a `higher_order_coordinates' variable for
>> storing higher order mesh data.  This is a very minor change so please
>> push this.
>>
>> A changeset for DOLFIN is coming immediately after this.
>>
>> - Shawn
>
> I'm not sure what to do about this. It's problematic to add
> experimental work to UFC since it must be stable. In particular, any
> small change to ufc.h means that all forms must be recompiled
> everywhere for everyone.

I see...

> So before we make a change to UFC, we need to know exactly what we
> need. Which also means I can't import your DOLFIN patch since it
> depends on the UFC patch.
>
> I see you've added
>
>    double** higher_order_coordinates;
>
> to ufc::cell. This is analogous to what is now implemented in
> MeshGeometry and the mesh XML format so I think it's good.
>
> The question is what other information we need. As it works now (for
> the standard ufc::cell), UFC code generated by a form compiler knows
> what to expect from for a ufc::cell argument. If higher order mappings
> should work the same way, then the generated code and thus the form
> compilers need to know which mapping should be used and also the
> length of higher_order_coordinates. Is this what you were thinking?

Yes, that is what I was thinking.  There needs to be some variable that 
stores the number of DoF's used to represent the geometry.  And I also 
think there should be a string with the "name" of the mapping.  That way 
there can be an error check, because presumably FFC will `assume' a type 
of mapping (based on user input).

For the stuff I did in MeshGeometry, I plan on going back and making a 
single struct variable that has all the pertinent higher order mesh 
variables together.  Depending on what is needed in ufc::cell, the same 
thing may be in order.

> Before we do much more about it, more people need to weigh in on it as
> it affects DOLFIN, UFC, SyFi and FFC.

ok.  I say you need:

1.  higher order vertex data that is already in the PROPER
     order/numbering. 
2.  the number of higher order vertices.
3.  a string identifying the type of map i.e. "P2_Lagrange".
4.  AND a boolean variable stating whether the cell is affine or not (i.e. 
straight or curved).  This is useful because then the tabulate_tensor 
routines can have a switch between the standard code, and the probably 
more complicated curved element code.  Remember, in most cases, only the 
boundary triangles need to be curved; the interior elements can be 
straight (IN MOST CASES).

And I would probably put this into a single struct.  I don't think a whole 
separate class is necessary.  But I am open to suggestions.

I hope people comment on this.  This effects many things besides the 
matrix assembly.  It affects interpolation, computing the facet normal, 
etc...

- Shawn
_______________________________________________
DOLFIN-dev mailing list
[email protected]
http://www.fenics.org/mailman/listinfo/dolfin-dev

Reply via email to