Hi Luca, I've finally got to the point where I am implimenting the contact element that needs the covariant base vectors and their gradients.
So I create an arbitrary point on the boundary cell face, create a quadrature rule at that point and use it in conjunction with a FEFaceValues object to get the normal, shape functions etc. at that point (BTW. I'm working in space dim 3). In all, the UpdateFlags that I use are: update_values | update_gradients | update_quadrature_points | update_normal_vectors | update_jacobians | update_jacobian_grads I'm able to get some data such as the correct face normal, however I've noticed that the jacobian tensor (and its gradient and inverse) that you directed me towards do not get filled with any data - all zero's on output. After some testing, I found that this information exists only for cells, and not for faces . I looked at the mapping classes and it appears that they do not store the information for the tensors if called on a face. Whats the easiest way to solve this issue? Is the best (and only?) way to change the fill_fe_face_values and compute_fill_face methods? If so, can one just copy the necessary lines from the equivalent cell calculations, or do you think the calculations would change slightly when done on a face? Or am I just plain wrong in my implementation? Thanks very much in advance for the help. Best regards, Jean-Paul On 2 February 2010 14:45, Luca Heltai <[email protected]> wrote: > Those you can obtain by the gradient of the transformation on the > surface (namely, the Jacobian). If you open the source code of > FEValues and look at the way the normals are computed, you will see > that they use the Jacobian. You can obtain this information by setting > the appropriate flags in the FEFaceValues class, and then calling > > fe_v.jacobians(0) > > which will give you the vectors you are looking for. > > Luca. > > On Tue, Feb 2, 2010 at 12:50 PM, Jean-Paul Pelteret > <[email protected]> wrote: > > On 2 February 2010 13:49, Jean-Paul Pelteret <[email protected]> > wrote: > >> Hi Luca, > >> > >> Yes thanks, that is partially what I'm looking for. That would allow > >> me to get the normal at any point on the face. However, I'm also > >> looking for the two tangential (covariant base) vectors that, when > >> operated on by a cross-product, give the normal vector. Any ideas? > >> > >> J-P > >> > >> On 2 February 2010 13:37, Luca Heltai <[email protected]> wrote: > >>> I'm not sure I understand what you need, but assuming I do, this is > >>> how I'd do what I think that you want to do. :) > >>> > >>> 1. express your arbitrary point in reference coordinates on the face > >>> (you can do this by transforming your real point back to the reference > >>> cell, then project it to the face of interest) > >>> 2. construct a quadrature formula that contains the given point and > >>> 1.0 as a weight > >>> 3. construct a FEFaceValues object with the given quadrature formula > >>> and all the flags you need. > >>> > >>> I hope this clarify things a bit, if not, I might have not understood > >>> what you needed... > >>> > >>> Luca. > >>> > >>> If the point is truly arbitrary, then you have to > >>> > >>> On Tue, Feb 2, 2010 at 12:20 PM, Jean-Paul Pelteret > >>> <[email protected]> wrote: > >>>> Hi all, > >>>> > >>>> I'm currently working on a contact formulation for solid mechanics, > >>>> and it requires that I'm able to get information at an arbitrary point > >>>> on a boundary face on a cell. In particular, I need to get the > >>>> convected bases at this point (one of them will be the outward normal > >>>> to the face at the point, while the others, when mapped back to the > >>>> reference cell, will give the other two isoparametric basis vectors). > >>>> I see that there is a tool in the mapping class, namely > >>>> Mapping::transform, that potentially caters for this but requires > >>>> input information ( const InternalDataBase &internal) that I don't > >>>> think one has access to through a public interface in either the > >>>> mapping or fe_values classes. > >>>> > >>>> Is there any function that I can use to get what I need or am I > >>>> missing something obvious regarding the function I've described above? > >>>> > >>>> Thanks in advance for the help. > >>>> Best regards, > >>>> Jean-Paul > >>>> _______________________________________________ > >>>> dealii mailing list http://poisson.dealii.org/mailman/listinfo/dealii > >>>> > >>> > >> > > >
_______________________________________________ dealii mailing list http://poisson.dealii.org/mailman/listinfo/dealii
