On 4/16/21 11:36 AM, John Smith wrote:
However, the FE_Nedelec is different. It implements edge elements. They are vector-based. That is, functions are represented by a superposition of vector-valued shape functions:

\vec{A} = \sum u_i vec{N}_i .

Therefore, the output of the "value" method in “class CustomFunction : public Function” must be vector-valued. Three components in a three-dimensional space.  Otherwise, there is no point in interpolation.

This kind of vectorial approximations is a bread-and-butter topic in magnetics. See, for example, equation (7) in:

https://ieeexplore.ieee.org/document/497322 <https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fieeexplore.ieee.org%2Fdocument%2F497322&data=04%7C01%7CWolfgang.Bangerth%40colostate.edu%7Cf7f578c8c6fc44890c3308d900fe30ef%7Cafb58802ff7a4bb1ab21367ff2ecfc8b%7C0%7C1%7C637541914012798794%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000&sdata=tJVhiTO272UFKlS0mWzTCrVp1VzPV3zbr2I16KxHkFI%3D&reserved=0>

In short, the source, i.e the current vector potential, must be projected on the space spanned by the vector-valued shape functions. Otherwise, the simulation is numerically unstable. The last, from my experience, is definitely true.

I think you already found your solution, but just for clarity: When we use the term "interpolation", we typically ask for (scalar) coefficients U_i so that

  u_h(x_j) = sum U_i \phi_i(x_j)  =  g(x_j)

where g is given and x_j are the node points. The problem is that for the Nedelec element, this is not always possible: Not all possible vectors g(x_j) can be represented. This makes sense because if you have N node points in 3d, then you have N scalar coefficients U_i, but you have 3N components of the values g(x_j).

One way to deal with this is to associate a vector, let's say y_j with every node point x_j, and require that

  y_j \cdot u_h(x_j) = sum U_i y_j \cdot \phi_i(x_j)  =  y_j \cdot g(x_j)

These y_j could, for example, be the tangential direction associated with the shape function phi_j. One *could* call this a variation of the term "interpolation", but it is not what VectorTools::interpolate() implements. It would probably not be terribly difficult to implement this kind of function, however!

Best
 W.



--
------------------------------------------------------------------------
Wolfgang Bangerth          email:                 bange...@colostate.edu
                           www: http://www.math.colostate.edu/~bangerth/

--
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see 
https://groups.google.com/d/forum/dealii?hl=en
--- You received this message because you are subscribed to the Google Groups "deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to dealii+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/dealii/567f6646-df23-8c97-f210-87fd5a74e3ae%40colostate.edu.

Reply via email to