Perfect. This is exactly what I was looking for. Thanks, Wolfgang. > On Aug 14, 2019, at 4:58 PM, Wolfgang Bangerth <bange...@colostate.edu> wrote: > > On 8/13/19 5:34 PM, Shiva Rudraraju wrote: >> Thanks for the pointer, Vivek. I did check the usual locations, >> including fe_values.h, but couldn’t locate the exact implementation of >> the computation for the hessian in the real cell coordinates. (Should >> involve the product of shape function hessians in reference coordinates, >> and multiplication with a whole lot of inverse Jacobean terms.) >> >> Still looking for its exact implementation ….. as I am curious about the >> computational cost of this implementation. > > The various finite element implementations provide the Hessian matrices > on the reference cell, and these then need to be mapped to the real > cell. For example, for the usual Q(k) elements, the Hessians on the > reference cell are pre-computed once at the very beginning (when the > get_data() function is called by FEValues) and the transformation > happens in fe_poly.templates.h in the function FE_Poly::fill_fe_values() > in this piece of code: > > if (flags & update_hessians && cell_similarity != > CellSimilarity::translation) > { > for (unsigned int k = 0; k < this->dofs_per_cell; ++k) > mapping.transform(make_array_view(fe_data.shape_hessians, k), > mapping_covariant_gradient, > mapping_internal, > make_array_view(output_data.shape_hessians, k)); > > for (unsigned int k = 0; k < this->dofs_per_cell; ++k) > for (unsigned int i = 0; i < quadrature.size(); ++i) > for (unsigned int j = 0; j < spacedim; ++j) > output_data.shape_hessians[k][i] -= > mapping_data.jacobian_pushed_forward_grads[i][j] * > output_data.shape_gradients[k][i][j]; > } > > This accounts for the fact that the Hessian in real space has two parts, > one that corresponds to the gradient of the Jacobian on the reference > cell, plus one that is transforming the Jacobian with the gradient of > the second derivative of the transformation implied by the mapping. > > The function transform() is implemented by the individual mappings, but > in the case of the most common mappings, you'll find it in > mapping_q_generic.cc -- you just have to pick out the correct one of the > many versions of the function. > > Best > Wolfgang > > -- > ------------------------------------------------------------------------ > 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 a topic in the Google > Groups "deal.II User Group" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/dealii/bZ4fUiY43io/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > dealii+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/dealii/be333681-9516-fe3e-867d-8376ede97720%40colostate.edu.
-- 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/25140E73-0965-42FA-BBF3-64B3F362CC4E%40umich.edu.