dbeurle / neon

A finite element code
Other
12 stars 8 forks source link

Gradient recovery options #77

Open dbeurle opened 6 years ago

dbeurle commented 6 years ago

See 'A Framework for Finite Strain Elastoplasticity Based on Maximum Plastic Dissipation and the Multiplicative Decomposition, Part II'. This leads to a nice linear solve based on a diagonalised mass matrix rather than the average of the nodal values. Perhaps we can offer both methods?

dbeurle commented 5 years ago

An interface is required to perform the general extrapolation of the internal variables (whatever type they may be) to the nodal points. The following methods should be included:

class gradient_recovery
{
public:

protected:
};

Local extrapolation and averaging

Use the extrapolation matrix built from the following components:

and performs the extrapolation of the value at the quadrature point to the nodal point through a matrix multiplication of the values at each quadrature point. A gather step is required and the insertion count needs to be kept for averaging purposes.

L2 projection

Could include, but it may have poor performance compared to SPR.

Super-convergent patch recovery

The super-convergent patch recovery method is a global projection operator to recovery gradient values (or scalar components) from particular super-convergent locations in an element to the nodal points for post-processing.

Here we need to perform a series of small linear solves for each nodal point by gathering the neighbouring elements:

Q: How to include global operator -> will need to pass a std::vector<submesh> to the class to have the global view.

class superconvergent_patch_recovery
{
public:
    void extrapolate(std::vector<submesh> const& submeshes);

protected:
};

Constant element

Average quadrature point values and report a single value. It might be better to differentiate between nodal and element values for output with VTK.