Hello, my question fits well in this chat, I am also calculating traction vectors but using linear theory.
I apply a pressure load on some faces of my body. During assembly of course this is considered as a neumann boundary condition. The direction of my pressure load is equal to the normal vectors of that faces. When my computation is finished I am recomputing the traction vector on the same faces where I prescribed it during assembly, i.e. on the qps of the faces I am computing the following: cauchy_stress_tensor*Normal_vector, where the cauchy_stress_tensor is computed by the consitutive relation for linear theory. So I don't have to distinguish between material and spatial configuartion by making small strain assumptions. My problem is that the prescribed traction in the assembly routine is not the same as computed afterwards, there are deviations up to 5-10%. But they should actually be the same, should they? It would be great to get that confirmed, so that I have a starting point for finding possible error sources. Best Simon Am Di., 11. Mai 2021 um 12:10 Uhr schrieb Alex Cumberworth < alexandercumberwo...@gmail.com>: > > Hi Jean-Paul, > > Thanks for your response. The spatial normal vectors are now correct. It > seems my lack of grounding in differential geometry was the culprit here. > > However, the integrated forces are still not as I expect, but I think this > is a separate issue, so I will create a new thread. > > Best, > Alex > On Tuesday, May 4, 2021 at 6:58:33 p.m. UTC+2 Jean-Paul Pelteret wrote: > >> Hi Alex, >> >> Well, the one thing that I can clearly identify as being problematic is >> that the normal vector does not transform with the deformation gradient >> (directly), but rather with its cofactor. This is what Nanson’s formula for >> the transformation of surface areas tell us. We actually have a function >> that does this transformation, namely >> Physics::Transformations::nansons_formula() >> <https://dealii.org/current/doxygen/deal.II/namespacePhysics_1_1Transformations.html#aa82925b742c3708f625a48a7abc440bc> >> . >> Maybe you could try to use that and see if you get the result that you’re >> looking for. >> >> Best, >> Jean-Paul >> >> On 4. May 2021, at 12:36, Alex Cumberworth <alexanderc...@gmail.com> >> wrote: >> >> Hello, >> >> I would like to calculate traction/stress vectors for the deformed >> configuration. I have solved for a non-linear elasticity problem and am >> dealing with the Green-Lagrange strain tensor and the second Piola-Kirchoff >> stress tensor. I thought the simplest way to get the traction vectors would >> be to first calculate them in the material reference frame (by calculating >> the stress tensor and applying it to normal vectors in the material >> reference), and then using a pushforward operation (by applying the >> deformation gradient) to produce the stress vectors in the spatial >> reference frame (and also dividing by the determinant of the deformation >> vector to take care of the change in area). >> >> However, the results do not appear as expected. To understand what was >> going on, I first decided to apply the pushforward operation to the normal >> vectors. I used the following code to carry this out. >> >> template <int dim> >> class SpatialNormalVectorPostprocess: public DataPostprocessorVector<dim> >> { >> public: >> SpatialNormalVectorPostprocess(); >> virtual void evaluate_vector_field( >> const DataPostprocessorInputs::Vector<dim>& input_data, >> std::vector<Vector<double>>& computed_quantities) const; >> }; >> >> template <int dim> >> SpatialNormalVectorPostprocess<dim>::SpatialNormalVectorPostprocess(): >> DataPostprocessorVector<dim>( >> "spatial_normal", >> update_gradients | update_normal_vectors) {} >> >> template <int dim> >> void SpatialNormalVectorPostprocess<dim>::evaluate_vector_field( >> const DataPostprocessorInputs::Vector<dim>& input_data, >> std::vector<Vector<double>>& computed_quantities) const { >> >> for (unsigned int i {0}; i != input_data.normals.size(); i++) { >> Tensor<2, dim, double> grad_u {}; >> Tensor<2, dim, double> identity_tensor {}; >> for (unsigned int d {0}; d != dim; d++) { >> grad_u[d] = input_data.solution_gradients[i][d]; >> identity_tensor[d][d] = 1; >> } >> const Tensor<2, dim, double> deformation_grad { >> grad_u + identity_tensor}; >> const Tensor<1, dim, double> material_normal_vector { >> input_data.normals[i]}; >> const Tensor<1, dim, double> spatial_normal_vector_t { >> deformation_grad * material_normal_vector}; >> Vector<double> spatial_normal_vector(dim); >> for (unsigned int d {0}; d != dim; d++) { >> spatial_normal_vector[d] = spatial_normal_vector_t[d]; >> } >> computed_quantities[i] = spatial_normal_vector; >> } >> } >> >> However, as seen below, the resulting vectors are not normal to the >> surfaces: >> >> <ring_push-forward-spatial-normal-vector.png> >> >> Contrast this with if I instead update the mesh and directly output the >> normal vectors: >> >> <ring_mesh-move-spatial-normal-vector.png> >> >> Any input would be greatly appreciated. >> >> Best wishes, >> Alex >> >> -- >> 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+un...@googlegroups.com. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/dealii/2e3fcd85-f799-419b-b66b-097513328f46n%40googlegroups.com >> <https://groups.google.com/d/msgid/dealii/2e3fcd85-f799-419b-b66b-097513328f46n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> <ring_mesh-move-spatial-normal-vector.png> >> <ring_push-forward-spatial-normal-vector.png> >> >> >> -- > 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/f4a19a25-3820-4c91-9c57-92e6bedfdebcn%40googlegroups.com > <https://groups.google.com/d/msgid/dealii/f4a19a25-3820-4c91-9c57-92e6bedfdebcn%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- 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/CAM50jEvKyNKHMU8kRSY4hid8dShdm86zBNAr9DuL50YXbdw7CA%40mail.gmail.com.