Open dbeurle opened 6 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:
};
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.
Could include, but it may have poor performance compared to SPR.
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:
basic_mesh
implements a method to determine if a node is attached to the element O(N)shape_function
needs to return the polynomial basis for a given element ([1, x, y, xy]
)gradient_recovery
classQ: 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:
};
Average quadrature point values and report a single value. It might be better to differentiate between nodal and element values for output with VTK.
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?