On 1 Feb 2019, at 15:49, Matthew Knepley <knepley@gmail.com> wrote:
On Fri, Feb 1, 2019 at 4:55 AM Lawrence Mitchell <wencel@gmail.com> wrote: Dear Peter,
On 1 Feb 2019, at 09:35, Ham, David A <david.ham@imperial.ac.uk> wrote:
Dear Peter,
We don’t have nodal evaluation for arbitrary finite elements. The interpolation operator (both interpolate and Function.at) works for spaces with point evaluation nodes i.e. CG and DG so you can rig up a hack by interpolating the RT field into the spanning DG field (which is lossless), interpolating that into a spanning DG field on the new mesh (you can get the coordinates to interpolate at by interpolating the coordinate field into the corresponding vector DG space), and then finally projecting from the DG space down to RT. This is effectively a variant on: https://www.firedrakeproject.org/interpolation.html#interpolation-from-exter...
In addition to doing this, if you have a mesh hierarchy, then the interpolation between meshes in the mesh hierarchy is supported for all elements. For those that are not point-evaluation, it is a little ugly right now: we hope to make it simpler in the future. But you can do this:
Hi Lawrence,
Is there something wrong with the way I do interpolation? Namely, I point locate the quadrature points for the dual basis vectors from the target mesh in the source mesh. I admit that this is not conservative like supermesh, but it should work for every element and be first order accurate (I think). I cannot see why its any harder to do this than the DG route since they both require point location between meshes.
Basically that is exactly what one needs to do: eat the basis functions with the dual basis. However, FIAT only offers an interface for that on the reference cell. This is fine for affine-mapped elements, but for piola-mapped ones you need to add in appropriate pushfowards/pullbacks of the source mesh basis functions into the target mesh. So it's a little uglier. We don't have a good interface to do this cleanly, so have punted for the last while. Lawrence