From: Roy Stogner <roystgnr@ic...>  20050120 21:58:10

I just realized that the behavior of nodes "changing identities" depending on whether they're edge, face, corner, or interior has another consequence: System::project_vector only handles mesh coarsening correctly for Lagrange elements: setting a coarse edge DoF to the value of a fine corner DoF probably won't work for anything else. I'm not sure how to fix that. From a mathematical perspective, the local L2 projection that we're using to go from coarse to fine meshes is an exact projection whenever the function space restricted to the fine child elements contains the entire function space from the coarse parent element, but if we were to use a projection to go from fine to coarse elements, the results couldn't be exact, and different elements sharing the same DoF might have different ideas about what its new value should be. We could just go with the projection result from whatever the first element we come across says (and since we're coarsening anyway, we have to expect to lose some accuracy), but it seems like there should be a better way. From a practical perspective there's a more immediate problem. I'm not even sure how to form a projection matrix. When refining, you have access to both child and parent elements; when coarsening, though, aren't the child elements already deleted by the time you project to the new mesh? Could we refine just one element at a time (ignoring level mismatch constraints), use the new children immediately for integration, then coarsen again?  Roy Stogner 