Chaste
Release::2018.1
|
#include <AbstractFunctionalCalculator.hpp>
Public Member Functions | |
virtual | ~AbstractFunctionalCalculator () |
double | Calculate (AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM > &rMesh, Vec solution) |
double | CalculateOnElement (Element< ELEMENT_DIM, SPACE_DIM > &rElement) |
Private Member Functions | |
virtual double | GetIntegrand (ChastePoint< SPACE_DIM > &rX, c_vector< double, PROBLEM_DIM > &rU, c_matrix< double, PROBLEM_DIM, SPACE_DIM > &rGradU)=0 |
virtual bool | ShouldSkipThisElement (Element< ELEMENT_DIM, SPACE_DIM > &rElement) |
Private Attributes | |
ReplicatableVector | mSolutionReplicated |
This is an abstract class for computing user-defined integral-based functionals of a solution on the mesh. The user needs to define GetIntegrand() in the concrete class, and this class can then be used to compute the integral of f(x,u,grad_u) over the mesh, where x is position, u is the solution at x (possibly with multiple components, for which PROBLEM_DIM>1), grad_u the gradient of u and f the integrand as defined in the concrete class.
Note linear basis functions are the default, but that the functional may be non-polynomial. The order of integration used is the highest degree available (3rd order Gaussian quadrature)
Definition at line 58 of file AbstractFunctionalCalculator.hpp.
|
inlinevirtual |
Destructor.
Definition at line 89 of file AbstractFunctionalCalculator.hpp.
double AbstractFunctionalCalculator< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::Calculate | ( | AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM > & | rMesh, |
Vec | solution | ||
) |
Note that, in parallel, this method uses a collective reduction step and should therefore always be called collectively.
rMesh | The mesh |
solution | The solution vector |
Definition at line 184 of file AbstractFunctionalCalculator.hpp.
References AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::CalculateDesignatedOwnershipOfElement(), EXCEPTION, AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetElementIteratorBegin(), AbstractTetrahedralMesh< ELEMENT_DIM, SPACE_DIM >::GetElementIteratorEnd(), AbstractMesh< ELEMENT_DIM, SPACE_DIM >::GetNumNodes(), and PetscTools::ReplicateException().
double AbstractFunctionalCalculator< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::CalculateOnElement | ( | Element< ELEMENT_DIM, SPACE_DIM > & | rElement | ) |
rElement | The element |
NOTE: This assumes that the Jacobian is constant on an element, ie no curvilinear bases were used for position
Definition at line 118 of file AbstractFunctionalCalculator.hpp.
References AbstractTetrahedralElement< ELEMENT_DIM, SPACE_DIM >::CalculateInverseJacobian(), LinearBasisFunction< ELEMENT_DIM >::ComputeBasisFunctions(), LinearBasisFunction< ELEMENT_DIM >::ComputeTransformedBasisFunctionDerivatives(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNode(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNodeGlobalIndex(), AbstractElement< ELEMENT_DIM, SPACE_DIM >::GetNumNodes(), GaussianQuadratureRule< ELEMENT_DIM >::GetNumQuadPoints(), GaussianQuadratureRule< ELEMENT_DIM >::GetWeight(), ChastePoint< DIM >::rGetLocation(), and GaussianQuadratureRule< ELEMENT_DIM >::rGetQuadPoint().
|
privatepure virtual |
rX | The point in space |
rU | The unknown as a vector, u(i) = u_i |
rGradU | The gradient of the unknown as a matrix, rGradU(i,j) = d(u_i)/d(X_j) |
Implemented in PseudoEcgCalculator< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >.
|
privatevirtual |
Whether we should not calculate the functional on this element for any reason
rElement | the element of interest |
Reimplemented in PseudoEcgCalculator< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >.
Definition at line 221 of file AbstractFunctionalCalculator.hpp.
|
private |
Replicated store of the solution vector.
Definition at line 63 of file AbstractFunctionalCalculator.hpp.