Dear all,

I am currently implementing an Eigenstrain solver. For this purpose I have 
currently defined an FESystem via

FESystem<3> fe(FE_Q<3>(1), 3);

with the FEValuesExtractors

constFEValuesExtractors::Vector displacements(0);

The DoFs are subsequently distributed using the regular

DoFHandler<3> dof_handler(triangulation);
dof_handler.distribute_dofs(fe);

At the moment I have a function which computes the eigenstrain at a given 
point

class EigenstrainFunction : public TensorFunction<2, 3>
{
public:
    virtual Tensor<2, 3> value(const Point<3> &p) const {
        Tensor<2, 3> eigenstrain;
       
        // some rather expensive computation

        return plastic_eigenstrain;
    }
};

and during the assembly of my right hand side this function gets called at 
the quadrature points.
So far so good.

But now I would like to have the eigenstrain in my VTK output as well, 
exactly as the program "sees" it, i.e. in a way that the values at the 
quadrature points are preserved.
To my understanding the correct way to do this is to use one of the 
VectorTools::project routines to get respective values at the degrees of 
freedom.
Unfortunately the eigenstrain does not have any corresponding degrees of 
freedom.
And projecting the values would again lead to an evaluation of this rather 
expensive function at the exact same quadrature points that I have already 
done an evaluation on.

What is the most elegant solution to this problem under the constraint, 
that the function should only be called once per quadrature point?

Options that come to mind, which I am absolutely not sure about whether 
they are even feasible:


   - As my eigenstrain matrix is symmetric I could pack it into two 
   solution vectors and reuse the DoFHandler from the 3 component displacement 
   to get the projected components, then use them in the assembly of the right 
   hand side to interpolate their values at the quadrature points using the 
   shape functions.
   - I could set up another FESystem
   FESystem<3> elasticity_element(FE_Q<3>(1), 3);
   FESystem<3> eigenstrain_element(FE_Q<3>(1), 6);
   FESystem<3> fe(elasticity_element, 1, eigenstrain_element, 1);
   but could I then use FEValuesExtractors::SymmetricTensor on the 
   eigenstrain element? And could I only project my function onto the 
   eigenstrain element?

Best regards,

Dominik

-- 
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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to