Class for refineable QPVDElement elements. More...
#include <refineable_solid_elements.h>
Public Member Functions | |
RefineableQPVDElement () | |
Constructor: More... | |
void | rebuild_from_sons (Mesh *&mesh_pt) |
Empty rebuild from sons, no need to reconstruct anything here. More... | |
unsigned | nvertex_node () const |
Number of vertex nodes in the element. More... | |
Node * | vertex_node_pt (const unsigned &j) const |
Pointer to the j-th vertex node in the element. More... | |
unsigned | nrecovery_order () |
Order of recovery shape functions for Z2 error estimation: Same order as shape functions. More... | |
void | further_setup_hanging_nodes () |
No additional hanging node procedures are required for the solid elements. More... | |
Public Member Functions inherited from oomph::QPVDElement< DIM, NNODE_1D > | |
QPVDElement () | |
Constructor, there are no internal data points. More... | |
void | output (std::ostream &outfile) |
Output function. More... | |
void | output (std::ostream &outfile, const unsigned &n_plot) |
Output function. More... | |
void | output (FILE *file_pt) |
C-style output function. More... | |
void | output (FILE *file_pt, const unsigned &n_plot) |
C-style output function. More... | |
Public Member Functions inherited from oomph::PVDEquations< DIM > | |
PVDEquations () | |
Constructor. More... | |
void | get_stress (const Vector< double > &s, DenseMatrix< double > &sigma) |
Return the 2nd Piola Kirchoff stress tensor, as calculated from the constitutive law at specified local coordinate. More... | |
void | fill_in_contribution_to_residuals (Vector< double > &residuals) |
Fill in the residuals for the solid equations (the discretised principle of virtual displacements) More... | |
void | fill_in_contribution_to_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian) |
Fill in contribution to Jacobian (either by FD or analytically, control this via evaluate_jacobian_by_fd() More... | |
void | extended_output (std::ostream &outfile, const unsigned &n_plot) |
Output: x,y,[z],xi0,xi1,[xi2],gamma and the strain and stress components. More... | |
Public Member Functions inherited from oomph::PVDEquationsBase< DIM > | |
PVDEquationsBase () | |
Constructor: Set null pointers for constitutive law and for isotropic growth function. Set physical parameter values to default values, enable inertia and set body force to zero. Default evaluation of Jacobian: analytically rather than by FD. More... | |
ConstitutiveLaw *& | constitutive_law_pt () |
Return the constitutive law pointer. More... | |
const double & | lambda_sq () const |
Access function for timescale ratio (nondim density) More... | |
double *& | lambda_sq_pt () |
Access function for pointer to timescale ratio (nondim density) More... | |
IsotropicGrowthFctPt & | isotropic_growth_fct_pt () |
Access function: Pointer to isotropic growth function. More... | |
PrestressFctPt & | prestress_fct_pt () |
Access function: Pointer to pre-stress function. More... | |
IsotropicGrowthFctPt | isotropic_growth_fct_pt () const |
Access function: Pointer to isotropic growth function (const version) More... | |
BodyForceFctPt & | body_force_fct_pt () |
Access function: Pointer to body force function. More... | |
BodyForceFctPt | body_force_fct_pt () const |
Access function: Pointer to body force function (const version) More... | |
void | enable_inertia () |
Switch on solid inertia. More... | |
void | disable_inertia () |
Switch off solid inertia. More... | |
bool | is_inertia_enabled () const |
Access function to flag that switches inertia on/off (const version) More... | |
virtual unsigned | npres_solid () const |
Return the number of solid pressure degrees of freedom Default is that there are no solid pressures. More... | |
virtual int | solid_p_local_eqn (const unsigned &i) const |
Return the local degree of freedom associated with the i-th solid pressure. Default is that there are none. More... | |
virtual int | solid_p_nodal_index () const |
Return the index at which the solid pressure is stored if it is stored at the nodes. If not stored at the nodes this will return a negative number. More... | |
virtual void | pin_elemental_redundant_nodal_solid_pressures () |
Pin the element's redundant solid pressures (needed for refinement) More... | |
void | get_strain (const Vector< double > &s, DenseMatrix< double > &strain) const |
Return the strain tensor. More... | |
void | get_energy (double &pot_en, double &kin_en) |
Get potential (strain) and kinetic energy. More... | |
void | get_deformed_covariant_basis_vectors (const Vector< double > &s, DenseMatrix< double > &def_covariant_basis) |
Return the deformed covariant basis vectors at specified local coordinate: def_covariant_basis(i,j) is the j-th component of the i-th basis vector. More... | |
void | get_principal_stress (const Vector< double > &s, DenseMatrix< double > &principal_stress_vector, Vector< double > &principal_stress) |
Compute principal stress vectors and (scalar) principal stresses at specified local coordinate. principal_stress_vector(i,j) is the j-th component of the i-th principal stress vector. More... | |
virtual void | get_isotropic_growth (const unsigned &ipt, const Vector< double > &s, const Vector< double > &xi, double &gamma) const |
Evaluate isotropic growth function at Lagrangian coordinate xi and/or local coordinate s. (returns 1, i.e. no growth, if no function pointer has been set) This function is virtual to allow overloading in multi-physics problems where the growth function might be determined by another system of equations. More... | |
void | body_force (const Vector< double > &xi, Vector< double > &b) const |
Evaluate body force at Lagrangian coordinate xi at present time (returns zero vector if no body force function pointer has been set) More... | |
unsigned | ndof_types () const |
returns the number of DOF types associated with this element. More... | |
void | get_dof_numbers_for_unknowns (std::list< std::pair< unsigned long, unsigned >> &dof_lookup_list) const |
Create a list of pairs for all unknowns in this element, so that the first entry in each pair contains the global equation number of the unknown, while the second one contains the number of the "DOF" that this unknown is associated with. (Function can obviously only be called if the equation numbering scheme has been set up.) E.g. in a 3D problem there are 3 types of DOF: 0 - x displacement 1 - y displacement 2 - z displacement. More... | |
void | enable_evaluate_jacobian_by_fd () |
Set Jacobian to be evaluated by FD? Else: Analytically. More... | |
void | disable_evaluate_jacobian_by_fd () |
Set Jacobian to be evaluated analytically Else: by FD. More... | |
bool | is_jacobian_evaluated_by_fd () const |
Return the flag indicating whether the jacobian is evaluated by fd. More... | |
double | prestress (const unsigned &i, const unsigned &j, const Vector< double > xi) |
Return (i,j)-th component of second Piola Kirchhoff membrane prestress at Lagrangian coordinate xi. More... | |
Public Member Functions inherited from oomph::SolidFiniteElement | |
void | set_lagrangian_dimension (const unsigned &lagrangian_dimension) |
Set the lagrangian dimension of the element — the number of lagrangian coordinates stored at the nodes in the element. More... | |
virtual bool | has_internal_solid_data () |
Return whether there is internal solid data (e.g. discontinuous solid pressure). At present, this is used to report an error in setting initial conditions for ElasticProblems which can't handle such cases. The default is false. More... | |
SolidFiniteElement () | |
Constructor: Set defaults. More... | |
virtual | ~SolidFiniteElement () |
Destructor to clean up any allocated memory. More... | |
SolidFiniteElement (const SolidFiniteElement &)=delete | |
Broken copy constructor. More... | |
double | zeta_nodal (const unsigned &n, const unsigned &k, const unsigned &i) const |
In a SolidFiniteElement, the "global" intrinsic coordinate of the element when viewed as part of a compound geometric object (a Mesh) is, by default, the Lagrangian coordinate Note the assumption here is that we are always using isoparameteric elements in which the lagrangian coordinate is interpolated by the same shape functions as the eulerian coordinate. More... | |
virtual void | get_x_and_xi (const Vector< double > &s, Vector< double > &x_fe, Vector< double > &x, Vector< double > &xi_fe, Vector< double > &xi) const |
Eulerian and Lagrangian coordinates as function of the local coordinates: The Eulerian position is returned in FE-interpolated form (x_fe ) and then in the form obtained from the "current" MacroElement representation (if it exists – if not, x is the same as x_fe ). This allows the Domain/MacroElement- based representation to be used to apply displacement boundary conditions exactly. Ditto for the Lagrangian coordinates returned in xi_fe and xi. (Broken virtual – overload in specific geometric element class if you want to use this functionality.) More... | |
virtual void | set_macro_elem_pt (MacroElement *macro_elem_pt) |
Set pointer to MacroElement – overloads generic version and uses the MacroElement also as the default for the "undeformed" configuration. This assignment must be overwritten with set_undeformed_macro_elem_pt(...) if the deformation of the solid body is driven by a deformation of the "current" Domain/MacroElement representation of it's boundary. Can be overloaded in derived classes to perform additional tasks. More... | |
virtual void | set_macro_elem_pt (MacroElement *macro_elem_pt, MacroElement *undeformed_macro_elem_pt) |
Set pointers to "current" and "undeformed" MacroElements. Can be overloaded in derived classes to perform additional tasks. More... | |
void | set_undeformed_macro_elem_pt (MacroElement *undeformed_macro_elem_pt) |
Set pointer to "undeformed" macro element. Can be overloaded in derived classes to perform additional tasks. More... | |
MacroElement * | undeformed_macro_elem_pt () |
Access function to pointer to "undeformed" macro element. More... | |
double | dshape_lagrangian (const Vector< double > &s, Shape &psi, DShape &dpsidxi) const |
Calculate shape functions and derivatives w.r.t. Lagrangian coordinates at local coordinate s. Returns the Jacobian of the mapping from Lagrangian to local coordinates. More... | |
virtual double | dshape_lagrangian_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsidxi) const |
Return the geometric shape functions and also first derivatives w.r.t. Lagrangian coordinates at ipt-th integration point. More... | |
double | d2shape_lagrangian (const Vector< double > &s, Shape &psi, DShape &dpsidxi, DShape &d2psidxi) const |
Compute the geometric shape functions and also first and second derivatives w.r.t. Lagrangian coordinates at local coordinate s; Returns Jacobian of mapping from Lagrangian to local coordinates. Numbering: 1D: d2pidxi(i,0) = 2D: d2psidxi(i,0) = d2psidxi(i,1) = d2psidxi(i,2) = 3D: d2psidxi(i,0) = d2psidxi(i,1) = d2psidxi(i,2) = d2psidxi(i,3) = d2psidxi(i,4) = d2psidxi(i,5) = . More... | |
virtual double | d2shape_lagrangian_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsidxi, DShape &d2psidxi) const |
Return the geometric shape functions and also first and second derivatives w.r.t. Lagrangian coordinates at the ipt-th integration point. Returns Jacobian of mapping from Lagrangian to local coordinates. Numbering: 1D: d2pidxi(i,0) = 2D: d2psidxi(i,0) = d2psidxi(i,1) = d2psidxi(i,2) = 3D: d2psidxi(i,0) = d2psidxi(i,1) = d2psidxi(i,2) = d2psidxi(i,3) = d2psidxi(i,4) = d2psidxi(i,5) = . More... | |
unsigned | lagrangian_dimension () const |
Return the number of Lagrangian coordinates that the element requires at all nodes. This is by default the elemental dimension. If we ever need any other case, it can be implemented. More... | |
unsigned | nnodal_lagrangian_type () const |
Return the number of types of (generalised) nodal Lagrangian coordinates required to interpolate the Lagrangian coordinates in the element. (E.g. 1 for Lagrange-type elements; 2 for Hermite beam elements; 4 for Hermite shell elements). Default value is 1. Needs to be overloaded for any other element. More... | |
Node * | construct_node (const unsigned &n) |
Construct the local node n and return a pointer to it. More... | |
Node * | construct_node (const unsigned &n, TimeStepper *const &time_stepper_pt) |
Construct the local node n and return a pointer to it. Additionally, create storage for ‘history’ values as required by timestepper. More... | |
Node * | construct_boundary_node (const unsigned &n) |
Construct the local node n and return a pointer to it. in the case when it is a boundary node; that is it MAY be located on a Mesh boundary. More... | |
Node * | construct_boundary_node (const unsigned &n, TimeStepper *const &time_stepper_pt) |
Construct the local node n and return a pointer to it, in the case when the node MAY be located on a boundary. Additionally, create storage for ‘history’ values as required by timestepper. More... | |
virtual void | assign_all_generic_local_eqn_numbers (const bool &store_local_dof_pt) |
Overload assign_all_generic_local_equation numbers to include the data associated with solid dofs. It remains virtual so that it can be overloaded by RefineableSolidElements. If the boolean argument is true then the degrees of freedom are stored in Dof_pt. More... | |
void | describe_local_dofs (std::ostream &out, const std::string ¤t_string) const |
Function to describe the local dofs of the element. The ostream specifies the output stream to which the description is written; the string stores the currently assembled output that is ultimately written to the output stream by Data::describe_dofs(...); it is typically built up incrementally as we descend through the call hierarchy of this function when called from Problem::describe_dofs(...) More... | |
double | raw_lagrangian_position (const unsigned &n, const unsigned &i) const |
Return i-th Lagrangian coordinate at local node n without using the hanging representation. More... | |
double | raw_lagrangian_position_gen (const unsigned &n, const unsigned &k, const unsigned &i) const |
Return Generalised Lagrangian coordinate at local node n. ‘Direction’ i, ‘Type’ k. Does not use the hanging node representation. More... | |
double | lagrangian_position (const unsigned &n, const unsigned &i) const |
Return i-th Lagrangian coordinate at local node n. More... | |
double | lagrangian_position_gen (const unsigned &n, const unsigned &k, const unsigned &i) const |
Return Generalised Lagrangian coordinate at local node n. ‘Direction’ i, ‘Type’ k. More... | |
virtual double | interpolated_xi (const Vector< double > &s, const unsigned &i) const |
Return i-th FE-interpolated Lagrangian coordinate xi[i] at local coordinate s. More... | |
virtual void | interpolated_xi (const Vector< double > &s, Vector< double > &xi) const |
Compute FE interpolated Lagrangian coordinate vector xi[] at local coordinate s as Vector. More... | |
virtual void | interpolated_dxids (const Vector< double > &s, DenseMatrix< double > &dxids) const |
Compute derivatives of FE-interpolated Lagrangian coordinates xi with respect to local coordinates: dxids[i][j]=dxi_i/ds_j. More... | |
virtual void | J_lagrangian (const Vector< double > &s) const |
Return the Jacobian of mapping from local to Lagrangian coordinates at local position s. NOT YET IMPLEMENTED. More... | |
virtual double | J_lagrangian_at_knot (const unsigned &ipt) const |
Return the Jacobian of the mapping from local to Lagrangian coordinates at the ipt-th integration point. NOT YET IMPLEMENTED. More... | |
SolidInitialCondition *& | solid_ic_pt () |
Pointer to object that describes the initial condition. More... | |
void | enable_solve_for_consistent_newmark_accel () |
Set to alter the problem being solved when assigning the initial conditions for time-dependent problems: solve for the history value that corresponds to the acceleration in the Newmark scheme by demanding that the PDE is satisifed at the initial time. In this case the Jacobian is replaced by the mass matrix. More... | |
void | disable_solve_for_consistent_newmark_accel () |
Set to reset the problem being solved to be the standard problem. More... | |
MultiplierFctPt & | multiplier_fct_pt () |
Access function: Pointer to multiplicator function for assignment of consistent assignement of initial conditions for Newmark scheme. More... | |
MultiplierFctPt | multiplier_fct_pt () const |
Access function: Pointer to multiplicator function for assignment of consistent assignement of initial conditions for Newmark scheme (const version) More... | |
virtual void | get_residuals_for_solid_ic (Vector< double > &residuals) |
Compute the residuals for the setup of an initial condition. The global equations are: More... | |
void | fill_in_residuals_for_solid_ic (Vector< double > &residuals) |
Fill in the residuals for the setup of an initial condition. The global equations are: More... | |
void | fill_in_jacobian_for_solid_ic (Vector< double > &residuals, DenseMatrix< double > &jacobian) |
Fill in the residuals and Jacobian for the setup of an initial condition. The global equations are: More... | |
void | fill_in_jacobian_for_newmark_accel (DenseMatrix< double > &jacobian) |
Fill in the contributions of the Jacobian matrix for the consistent assignment of the initial "accelerations" in Newmark scheme. In this case the Jacobian is the mass matrix. More... | |
void | compute_norm (double &el_norm) |
Calculate the L2 norm of the displacement u=R-r to overload the compute_norm function in the GeneralisedElement base class. More... | |
int | position_local_eqn (const unsigned &n, const unsigned &k, const unsigned &j) const |
Access function that returns the local equation number that corresponds to the j-th coordinate of the k-th position-type at the n-th local node. More... | |
Public Member Functions inherited from oomph::FiniteElement | |
void | set_dimension (const unsigned &dim) |
Set the dimension of the element and initially set the dimension of the nodes to be the same as the dimension of the element. More... | |
void | set_nodal_dimension (const unsigned &nodal_dim) |
Set the dimension of the nodes in the element. This will typically only be required when constructing FaceElements or in beam and shell type elements where a lower dimensional surface is embedded in a higher dimensional space. More... | |
void | set_nnodal_position_type (const unsigned &nposition_type) |
Set the number of types required to interpolate the coordinate. More... | |
void | set_n_node (const unsigned &n) |
Set the number of nodes in the element to n, by resizing the storage for pointers to the Node objects. More... | |
int | nodal_local_eqn (const unsigned &n, const unsigned &i) const |
Return the local equation number corresponding to the i-th value at the n-th local node. More... | |
double | dJ_eulerian_at_knot (const unsigned &ipt, Shape &psi, DenseMatrix< double > &djacobian_dX) const |
Compute the geometric shape functions (psi) at integration point ipt. Return the determinant of the jacobian of the mapping (detJ). Additionally calculate the derivatives of "detJ" w.r.t. the nodal coordinates. More... | |
FiniteElement () | |
Constructor. More... | |
virtual | ~FiniteElement () |
The destructor cleans up the static memory allocated for shape function storage. Internal and external data get wiped by the GeneralisedElement destructor; nodes get killed in mesh destructor. More... | |
FiniteElement (const FiniteElement &)=delete | |
Broken copy constructor. More... | |
virtual bool | local_coord_is_valid (const Vector< double > &s) |
Broken assignment operator. More... | |
virtual void | move_local_coord_back_into_element (Vector< double > &s) const |
Adjust local coordinates so that they're located inside the element. More... | |
void | get_centre_of_gravity_and_max_radius_in_terms_of_zeta (Vector< double > &cog, double &max_radius) const |
Compute centre of gravity of all nodes and radius of node that is furthest from it. Used to assess approximately if a point is likely to be contained with an element in locate_zeta-like operations. More... | |
virtual void | local_coordinate_of_node (const unsigned &j, Vector< double > &s) const |
Get local coordinates of node j in the element; vector sets its own size (broken virtual) More... | |
virtual void | local_fraction_of_node (const unsigned &j, Vector< double > &s_fraction) |
Get the local fraction of the node j in the element A dumb, but correct default implementation is provided. More... | |
virtual double | local_one_d_fraction_of_node (const unsigned &n1d, const unsigned &i) |
Get the local fraction of any node in the n-th position in a one dimensional expansion along the i-th local coordinate. More... | |
MacroElement * | macro_elem_pt () |
Access function to pointer to macro element. More... | |
void | get_x (const Vector< double > &s, Vector< double > &x) const |
Global coordinates as function of local coordinates. Either via FE representation or via macro-element (if Macro_elem_pt!=0) More... | |
void | get_x (const unsigned &t, const Vector< double > &s, Vector< double > &x) |
Global coordinates as function of local coordinates at previous time "level" t (t=0: present; t>0: previous). Either via FE representation of QElement or via macro-element (if Macro_elem_pt!=0). More... | |
virtual void | get_x_from_macro_element (const Vector< double > &s, Vector< double > &x) const |
Global coordinates as function of local coordinates using macro element representation. (Broken virtual — this must be overloaded in specific geometric element classes) More... | |
virtual void | get_x_from_macro_element (const unsigned &t, const Vector< double > &s, Vector< double > &x) |
Global coordinates as function of local coordinates at previous time "level" t (t=0: present; t>0: previous). using macro element representation (Broken virtual – overload in specific geometric element class if you want to use this functionality.) More... | |
virtual void | set_integration_scheme (Integral *const &integral_pt) |
Set the spatial integration scheme. More... | |
Integral *const & | integral_pt () const |
Return the pointer to the integration scheme (const version) More... | |
virtual void | shape (const Vector< double > &s, Shape &psi) const =0 |
Calculate the geometric shape functions at local coordinate s. This function must be overloaded for each specific geometric element. More... | |
virtual void | shape_at_knot (const unsigned &ipt, Shape &psi) const |
Return the geometric shape function at the ipt-th integration point. More... | |
virtual void | dshape_local (const Vector< double > &s, Shape &psi, DShape &dpsids) const |
Function to compute the geometric shape functions and derivatives w.r.t. local coordinates at local coordinate s. This function must be overloaded for each specific geometric element. (Broken virtual function — specifies the interface) More... | |
virtual void | dshape_local_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsids) const |
Return the geometric shape function and its derivative w.r.t. the local coordinates at the ipt-th integration point. More... | |
virtual void | d2shape_local (const Vector< double > &s, Shape &psi, DShape &dpsids, DShape &d2psids) const |
Function to compute the geometric shape functions and also first and second derivatives w.r.t. local coordinates at local coordinate s. This function must be overloaded for each specific geometric element (if required). (Broken virtual function — specifies the interface). Numbering: 1D: d2psids(i,0) = 2D: d2psids(i,0) = d2psids(i,1) = d2psids(i,2) = 3D: d2psids(i,0) = d2psids(i,1) = d2psids(i,2) = d2psids(i,3) = d2psids(i,4) = d2psids(i,5) = . More... | |
virtual void | d2shape_local_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsids, DShape &d2psids) const |
Return the geometric shape function and its first and second derivatives w.r.t. the local coordinates at the ipt-th integration point. Numbering: 1D: d2psids(i,0) = 2D: d2psids(i,0) = d2psids(i,1) = d2psids(i,2) = 3D: d2psids(i,0) = d2psids(i,1) = d2psids(i,2) = d2psids(i,3) = d2psids(i,4) = d2psids(i,5) = . More... | |
virtual double | J_eulerian (const Vector< double > &s) const |
Return the Jacobian of mapping from local to global coordinates at local position s. More... | |
virtual double | J_eulerian_at_knot (const unsigned &ipt) const |
Return the Jacobian of the mapping from local to global coordinates at the ipt-th integration point. More... | |
void | check_J_eulerian_at_knots (bool &passed) const |
Check that Jacobian of mapping between local and Eulerian coordinates at all integration points is positive. More... | |
void | check_jacobian (const double &jacobian) const |
Helper function used to check for singular or negative Jacobians in the transform from local to global or Lagrangian coordinates. More... | |
double | dshape_eulerian (const Vector< double > &s, Shape &psi, DShape &dpsidx) const |
Compute the geometric shape functions and also first derivatives w.r.t. global coordinates at local coordinate s; Returns Jacobian of mapping from global to local coordinates. More... | |
virtual double | dshape_eulerian_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsidx) const |
Return the geometric shape functions and also first derivatives w.r.t. global coordinates at the ipt-th integration point. More... | |
virtual double | dshape_eulerian_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsi, DenseMatrix< double > &djacobian_dX, RankFourTensor< double > &d_dpsidx_dX) const |
Compute the geometric shape functions (psi) and first derivatives w.r.t. global coordinates (dpsidx) at the ipt-th integration point. Return the determinant of the jacobian of the mapping (detJ). Additionally calculate the derivatives of both "detJ" and "dpsidx" w.r.t. the nodal coordinates. More... | |
double | d2shape_eulerian (const Vector< double > &s, Shape &psi, DShape &dpsidx, DShape &d2psidx) const |
Compute the geometric shape functions and also first and second derivatives w.r.t. global coordinates at local coordinate s; Returns Jacobian of mapping from global to local coordinates. Numbering: 1D: d2psidx(i,0) = 2D: d2psidx(i,0) = d2psidx(i,1) = d2psidx(i,2) = 3D: d2psidx(i,0) = d2psidx(i,1) = d2psidx(i,2) = d2psidx(i,3) = d2psidx(i,4) = d2psidx(i,5) = . More... | |
virtual double | d2shape_eulerian_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsidx, DShape &d2psidx) const |
Return the geometric shape functions and also first and second derivatives w.r.t. global coordinates at ipt-th integration point. Numbering: 1D: d2psidx(i,0) = 2D: d2psidx(i,0) = d2psidx(i,1) = d2psidx(i,2) = 3D: d2psidx(i,0) = d2psidx(i,1) = d2psidx(i,2) = d2psidx(i,3) = d2psidx(i,4) = d2psidx(i,5) = . More... | |
virtual void | describe_nodal_local_dofs (std::ostream &out, const std::string ¤t_string) const |
Function to describe the local dofs of the element[s]. The ostream specifies the output stream to which the description is written; the string stores the currently assembled output that is ultimately written to the output stream by Data::describe_dofs(...); it is typically built up incrementally as we descend through the call hierarchy of this function when called from Problem::describe_dofs(...) More... | |
Node *& | node_pt (const unsigned &n) |
Return a pointer to the local node n. More... | |
Node *const & | node_pt (const unsigned &n) const |
Return a pointer to the local node n (const version) More... | |
unsigned | nnode () const |
Return the number of nodes. More... | |
virtual unsigned | nnode_1d () const |
Return the number of nodes along one edge of the element Default is to return zero — must be overloaded by geometric elements. More... | |
double | raw_nodal_position (const unsigned &n, const unsigned &i) const |
Return the i-th coordinate at local node n. Do not use the hanging node representation. NOTE: Moved to cc file because of a possible compiler bug in gcc (yes, really!). The move to the cc file avoids inlining which appears to cause problems (only) when compiled with gcc and -O3; offensive "illegal read" is in optimised-out section of code and data that is allegedly illegal is readily readable (by other means) just before this function is called so I can't really see how we could possibly be responsible for this... More... | |
double | raw_nodal_position (const unsigned &t, const unsigned &n, const unsigned &i) const |
Return the i-th coordinate at local node n, at time level t (t=0: present; t>0: previous time level). Do not use the hanging node representation. More... | |
double | raw_dnodal_position_dt (const unsigned &n, const unsigned &i) const |
Return the i-th component of nodal velocity: dx/dt at local node n. Do not use the hanging node representation. More... | |
double | raw_dnodal_position_dt (const unsigned &n, const unsigned &j, const unsigned &i) const |
Return the i-th component of j-th derivative of nodal position: d^jx/dt^j at node n. Do not use the hanging node representation. More... | |
double | raw_nodal_position_gen (const unsigned &n, const unsigned &k, const unsigned &i) const |
Return the value of the k-th type of the i-th positional variable at the local node n. Do not use the hanging node representation. More... | |
double | raw_nodal_position_gen (const unsigned &t, const unsigned &n, const unsigned &k, const unsigned &i) const |
Return the generalised nodal position (type k, i-th variable) at previous timesteps at local node n. Do not use the hanging node representation. More... | |
double | raw_dnodal_position_gen_dt (const unsigned &n, const unsigned &k, const unsigned &i) const |
i-th component of time derivative (velocity) of the generalised position, dx(k,i)/dt at local node n. ‘Type’: k; Coordinate direction: i. Do not use the hanging node representation. More... | |
double | raw_dnodal_position_gen_dt (const unsigned &j, const unsigned &n, const unsigned &k, const unsigned &i) const |
i-th component of j-th time derivative of the generalised position, dx(k,i)/dt at local node n. ‘Type’: k; Coordinate direction: i. Do not use the hanging node representation. More... | |
double | nodal_position (const unsigned &n, const unsigned &i) const |
Return the i-th coordinate at local node n. If the node is hanging, the appropriate interpolation is handled by the position function in the Node class. More... | |
double | nodal_position (const unsigned &t, const unsigned &n, const unsigned &i) const |
Return the i-th coordinate at local node n, at time level t (t=0: present; t>0: previous time level) Returns suitably interpolated version for hanging nodes. More... | |
double | dnodal_position_dt (const unsigned &n, const unsigned &i) const |
Return the i-th component of nodal velocity: dx/dt at local node n. More... | |
double | dnodal_position_dt (const unsigned &n, const unsigned &j, const unsigned &i) const |
Return the i-th component of j-th derivative of nodal position: d^jx/dt^j at node n. More... | |
double | nodal_position_gen (const unsigned &n, const unsigned &k, const unsigned &i) const |
Return the value of the k-th type of the i-th positional variable at the local node n. More... | |
double | nodal_position_gen (const unsigned &t, const unsigned &n, const unsigned &k, const unsigned &i) const |
Return the generalised nodal position (type k, i-th variable) at previous timesteps at local node n. More... | |
double | dnodal_position_gen_dt (const unsigned &n, const unsigned &k, const unsigned &i) const |
i-th component of time derivative (velocity) of the generalised position, dx(k,i)/dt at local node n. ‘Type’: k; Coordinate direction: i. More... | |
double | dnodal_position_gen_dt (const unsigned &j, const unsigned &n, const unsigned &k, const unsigned &i) const |
i-th component of j-th time derivative of the generalised position, dx(k,i)/dt at local node n. ‘Type’: k; Coordinate direction: i. More... | |
virtual void | disable_ALE () |
This is an empty function that establishes a uniform interface for all (derived) elements that involve time-derivatives. Such elements are/should be implemented in ALE form to allow mesh motions. The additional expense associated with the computation of the mesh velocities is, of course, superfluous if the elements are used in problems in which the mesh is stationary. This function should therefore be overloaded in all derived elements that are formulated in ALE form to suppress the computation of the mesh velocities. The user disables the ALE functionality at his/her own risk! If the mesh does move after all, then the results will be wrong. Here we simply issue a warning message stating that the empty function has been called. More... | |
virtual void | enable_ALE () |
(Re-)enable ALE, i.e. take possible mesh motion into account when evaluating the time-derivative. This function is empty and simply establishes a common interface for all derived elements that are formulated in ALE form. More... | |
virtual unsigned | required_nvalue (const unsigned &n) const |
Number of values that must be stored at local node n by the element. The default is 0, until over-ridden by a particular element. For example, a Poisson equation requires only one value to be stored at each node; 2D Navier–Stokes equations require two values (velocity components) to be stored at each Node (provided that the pressure interpolation is discontinuous). More... | |
unsigned | nnodal_position_type () const |
Return the number of coordinate types that the element requires to interpolate the geometry between the nodes. For Lagrange elements it is 1. More... | |
bool | has_hanging_nodes () const |
Return boolean to indicate if any of the element's nodes are geometrically hanging. More... | |
unsigned | nodal_dimension () const |
Return the required Eulerian dimension of the nodes in this element. More... | |
int | get_node_number (Node *const &node_pt) const |
Return the number of the node *node_pt if this node is in the element, else return -1;. More... | |
virtual Node * | get_node_at_local_coordinate (const Vector< double > &s) const |
If there is a node at this local coordinate, return the pointer to the node. More... | |
double | raw_nodal_value (const unsigned &n, const unsigned &i) const |
Return the i-th value stored at local node n but do NOT take hanging nodes into account. More... | |
double | raw_nodal_value (const unsigned &t, const unsigned &n, const unsigned &i) const |
Return the i-th value stored at local node n, at time level t (t=0: present; t>0 previous timesteps), but do NOT take hanging nodes into account. More... | |
double | nodal_value (const unsigned &n, const unsigned &i) const |
Return the i-th value stored at local node n. Produces suitably interpolated values for hanging nodes. More... | |
double | nodal_value (const unsigned &t, const unsigned &n, const unsigned &i) const |
Return the i-th value stored at local node n, at time level t (t=0: present; t>0 previous timesteps). Produces suitably interpolated values for hanging nodes. More... | |
unsigned | dim () const |
Return the spatial dimension of the element, i.e. the number of local coordinates required to parametrise its geometry. More... | |
virtual ElementGeometry::ElementGeometry | element_geometry () const |
Return the geometry type of the element (either Q or T usually). More... | |
virtual double | interpolated_x (const Vector< double > &s, const unsigned &i) const |
Return FE interpolated coordinate x[i] at local coordinate s. More... | |
virtual double | interpolated_x (const unsigned &t, const Vector< double > &s, const unsigned &i) const |
Return FE interpolated coordinate x[i] at local coordinate s at previous timestep t (t=0: present; t>0: previous timestep) More... | |
virtual void | interpolated_x (const Vector< double > &s, Vector< double > &x) const |
Return FE interpolated position x[] at local coordinate s as Vector. More... | |
virtual void | interpolated_x (const unsigned &t, const Vector< double > &s, Vector< double > &x) const |
Return FE interpolated position x[] at local coordinate s at previous timestep t as Vector (t=0: present; t>0: previous timestep) More... | |
virtual double | interpolated_dxdt (const Vector< double > &s, const unsigned &i, const unsigned &t) |
Return t-th time-derivative of the i-th FE-interpolated Eulerian coordinate at local coordinate s. More... | |
virtual void | interpolated_dxdt (const Vector< double > &s, const unsigned &t, Vector< double > &dxdt) |
Compte t-th time-derivative of the FE-interpolated Eulerian coordinate vector at local coordinate s. More... | |
void | position (const Vector< double > &zeta, Vector< double > &r) const |
Return the parametrised position of the FiniteElement in its incarnation as a GeomObject, r(zeta). The position is given by the Eulerian coordinate and the intrinsic coordinate (zeta) is the local coordinate of the element (s). More... | |
void | position (const unsigned &t, const Vector< double > &zeta, Vector< double > &r) const |
Return the parametrised position of the FiniteElement in its GeomObject incarnation: r(zeta). The position is given by the Eulerian coordinate and the intrinsic coordinate (zeta) is the local coordinate of the element (s) This version of the function returns the position as a function of time t=0: current time; t>0: previous timestep. Works for t=0 but needs to be overloaded if genuine time-dependence is required. More... | |
void | dposition_dt (const Vector< double > &zeta, const unsigned &t, Vector< double > &drdt) |
Return the t-th time derivative of the parametrised position of the FiniteElement in its GeomObject incarnation: . Call the t-th time derivative of the FE-interpolated Eulerian coordinate. More... | |
void | interpolated_zeta (const Vector< double > &s, Vector< double > &zeta) const |
Calculate the interpolated value of zeta, the intrinsic coordinate of the element when viewed as a compound geometric object within a Mesh as a function of the local coordinate of the element, s. The default assumption is the zeta is interpolated using the shape functions of the element with the values given by zeta_nodal(). A MacroElement representation of the intrinsic coordinate parametrised by the local coordinate s is used if available. Choosing the MacroElement representation of zeta (Eulerian x by default) allows a correspondence to be established between elements on different Meshes covering the same curvilinear domain in cases where one element is much coarser than the other. More... | |
void | locate_zeta (const Vector< double > &zeta, GeomObject *&geom_object_pt, Vector< double > &s, const bool &use_coordinate_as_initial_guess=false) |
For a given value of zeta, the "global" intrinsic coordinate of a mesh of FiniteElements represented as a compound geometric object, find the local coordinate in this element that corresponds to the requested value of zeta. If zeta cannot be located in this element, geom_object_pt is set to NULL. If zeta is located in this element, we return its "this" pointer. By default don't use any value passed in to the local coordinate s as the initial guess in the Newton method. More... | |
virtual void | node_update () |
Update the positions of all nodes in the element using each node update function. The default implementation may be overloaded so that more efficient versions can be written. More... | |
virtual double | s_min () const |
Min value of local coordinate. More... | |
virtual double | s_max () const |
Max. value of local coordinate. More... | |
double | size () const |
Calculate the size of the element (length, area, volume,...) in Eulerian computational coordinates. Use suitably overloaded compute_physical_size() function to compute the actual size (taking into account factors such as 2pi or radii the integrand) – such function can only be implemented on an equation-by-equation basis. More... | |
virtual double | compute_physical_size () const |
Broken virtual function to compute the actual size (taking into account factors such as 2pi or radii the integrand) – such function can only be implemented on an equation-by-equation basis. More... | |
virtual void | point_output_data (const Vector< double > &s, Vector< double > &data) |
Virtual function to write the double precision numbers that appear in a single line of output into the data vector. Empty virtual, can be overloaded for specific elements; used e.g. by LineVisualiser. More... | |
void | point_output (std::ostream &outfile, const Vector< double > &s) |
Output solution (as defined by point_output_data()) at local cordinates s. More... | |
virtual unsigned | nplot_points_paraview (const unsigned &nplot) const |
Return the number of actual plot points for paraview plot with parameter nplot. Broken virtual; can be overloaded in specific elements. More... | |
virtual unsigned | nsub_elements_paraview (const unsigned &nplot) const |
Return the number of local sub-elements for paraview plot with parameter nplot. Broken virtual; can be overloaded in specific elements. More... | |
void | output_paraview (std::ofstream &file_out, const unsigned &nplot) const |
Paraview output – this outputs the coordinates at the plot points (for parameter nplot) to specified output file. More... | |
virtual void | write_paraview_output_offset_information (std::ofstream &file_out, const unsigned &nplot, unsigned &counter) const |
Fill in the offset information for paraview plot. Broken virtual. Needs to be implemented for each new geometric element type; see http://www.vtk.org/VTK/img/file-formats.pdf. More... | |
virtual void | write_paraview_type (std::ofstream &file_out, const unsigned &nplot) const |
Return the paraview element type. Broken virtual. Needs to be implemented for each new geometric element type; see http://www.vtk.org/VTK/img/file-formats.pdf. More... | |
virtual void | write_paraview_offsets (std::ofstream &file_out, const unsigned &nplot, unsigned &offset_sum) const |
Return the offsets for the paraview sub-elements. Broken virtual. Needs to be implemented for each new geometric element type; see http://www.vtk.org/VTK/img/file-formats.pdf. More... | |
virtual unsigned | nscalar_paraview () const |
Number of scalars/fields output by this element. Broken virtual. Needs to be implemented for each new specific element type. More... | |
virtual void | scalar_value_paraview (std::ofstream &file_out, const unsigned &i, const unsigned &nplot) const |
Write values of the i-th scalar field at the plot points. Broken virtual. Needs to be implemented for each new specific element type. More... | |
virtual void | scalar_value_fct_paraview (std::ofstream &file_out, const unsigned &i, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt) const |
Write values of the i-th scalar field at the plot points. Broken virtual. Needs to be implemented for each new specific element type. More... | |
virtual void | scalar_value_fct_paraview (std::ofstream &file_out, const unsigned &i, const unsigned &nplot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt) const |
Write values of the i-th scalar field at the plot points. Broken virtual. Needs to be implemented for each new specific element type. More... | |
virtual std::string | scalar_name_paraview (const unsigned &i) const |
Name of the i-th scalar field. Default implementation returns V1 for the first one, V2 for the second etc. Can (should!) be overloaded with more meaningful names in specific elements. More... | |
virtual void | output (const unsigned &t, std::ostream &outfile, const unsigned &n_plot) const |
Output the element data at time step t. This is const because it is newly added and so can be done easily. Really all the output(...) functions should be const! More... | |
virtual void | output_fct (std::ostream &outfile, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt) |
Output an exact solution over the element. More... | |
virtual void | output_fct (std::ostream &outfile, const unsigned &n_plot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt) |
Output a time-dependent exact solution over the element. More... | |
virtual void | output_fct (std::ostream &outfile, const unsigned &n_plot, const double &time, const SolutionFunctorBase &exact_soln) const |
Output a time-dependent exact solution over the element. More... | |
virtual void | get_s_plot (const unsigned &i, const unsigned &nplot, Vector< double > &s, const bool &shifted_to_interior=false) const |
Get cector of local coordinates of plot point i (when plotting nplot points in each "coordinate direction"). Generally these plot points will be uniformly spaced across the element. The optional final boolean flag (default: false) allows them to be shifted inwards to avoid duplication of plot point points between elements – useful when they are used in locate_zeta, say. More... | |
virtual std::string | tecplot_zone_string (const unsigned &nplot) const |
Return string for tecplot zone header (when plotting nplot points in each "coordinate direction") More... | |
virtual void | write_tecplot_zone_footer (std::ostream &outfile, const unsigned &nplot) const |
Add tecplot zone "footer" to output stream (when plotting nplot points in each "coordinate direction"). Empty by default – can be used, e.g., to add FE connectivity lists to elements that need it. More... | |
virtual void | write_tecplot_zone_footer (FILE *file_pt, const unsigned &nplot) const |
Add tecplot zone "footer" to C-style output. (when plotting nplot points in each "coordinate direction"). Empty by default – can be used, e.g., to add FE connectivity lists to elements that need it. More... | |
virtual unsigned | nplot_points (const unsigned &nplot) const |
Return total number of plot points (when plotting nplot points in each "coordinate direction") More... | |
virtual void | compute_error (FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm) |
Calculate the norm of the error and that of the exact solution. More... | |
virtual void | compute_error (FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm) |
Calculate the norm of the error and that of the exact solution. More... | |
virtual void | compute_error (FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, Vector< double > &error, Vector< double > &norm) |
Given the exact solution this function calculates the norm of the error and that of the exact solution. Version with vectors of norms and errors so that different variables' norms and errors can be returned individually. More... | |
virtual void | compute_error (FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, Vector< double > &error, Vector< double > &norm) |
Given the exact solution this function calculates the norm of the error and that of the exact solution. Version with vectors of norms and errors so that different variables' norms and errors can be returned individually. More... | |
virtual void | compute_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm) |
Plot the error when compared against a given exact solution . Also calculates the norm of the error and that of the exact solution. More... | |
virtual void | compute_error (std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm) |
Plot the error when compared against a given time-dependent exact solution . Also calculates the norm of the error and that of the exact solution. More... | |
virtual void | compute_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, Vector< double > &error, Vector< double > &norm) |
Plot the error when compared against a given exact solution . Also calculates the norm of the error and that of the exact solution. The version with vectors of norms and errors so that different variables' norms and errors can be returned individually. More... | |
virtual void | compute_error (std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, Vector< double > &error, Vector< double > &norm) |
Plot the error when compared against a given time-dependent exact solution . Also calculates the norm of the error and that of the exact solution. The version with vectors of norms and errors so that different variables' norms and errors can be returned individually. More... | |
virtual void | compute_abs_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error) |
Plot the error when compared against a given exact solution . Also calculates the maximum absolute error. More... | |
void | integrate_fct (FiniteElement::SteadyExactSolutionFctPt integrand_fct_pt, Vector< double > &integral) |
Evaluate integral of a Vector-valued function over the element. More... | |
void | integrate_fct (FiniteElement::UnsteadyExactSolutionFctPt integrand_fct_pt, const double &time, Vector< double > &integral) |
Evaluate integral of a Vector-valued, time-dependent function over the element. More... | |
virtual void | build_face_element (const int &face_index, FaceElement *face_element_pt) |
Function for building a lower dimensional FaceElement on the specified face of the FiniteElement. The arguments are the index of the face, an integer whose value depends on the particular element type, and a pointer to the FaceElement. More... | |
virtual unsigned | self_test () |
Self-test: Check inversion of element & do self-test for GeneralisedElement. Return 0 if OK. More... | |
virtual unsigned | get_bulk_node_number (const int &face_index, const unsigned &i) const |
Get the number of the ith node on face face_index (in the bulk node vector). More... | |
virtual int | face_outer_unit_normal_sign (const int &face_index) const |
Get the sign of the outer unit normal on the face given by face_index. More... | |
virtual unsigned | nnode_on_face () const |
void | face_node_number_error_check (const unsigned &i) const |
Range check for face node numbers. More... | |
virtual CoordinateMappingFctPt | face_to_bulk_coordinate_fct_pt (const int &face_index) const |
Get a pointer to the function mapping face coordinates to bulk coordinates. More... | |
virtual BulkCoordinateDerivativesFctPt | bulk_coordinate_derivatives_fct_pt (const int &face_index) const |
Get a pointer to the derivative of the mapping from face to bulk coordinates. More... | |
Public Member Functions inherited from oomph::GeneralisedElement | |
GeneralisedElement() | GeneralisedElement (const GeneralisedElement &)=delete |
Constructor: Initialise all pointers and all values to zero. More... | |
void | operator= (const GeneralisedElement &)=delete |
Broken assignment operator. More... | |
Data *& | internal_data_pt (const unsigned &i) |
Return a pointer to i-th internal data object. More... | |
Data *const & | internal_data_pt (const unsigned &i) const |
Return a pointer to i-th internal data object (const version) More... | |
Data *& | external_data_pt (const unsigned &i) |
Return a pointer to i-th external data object. More... | |
Data *const & | external_data_pt (const unsigned &i) const |
Return a pointer to i-th external data object (const version) More... | |
unsigned long | eqn_number (const unsigned &ieqn_local) const |
Return the global equation number corresponding to the ieqn_local-th local equation number. More... | |
int | local_eqn_number (const unsigned long &ieqn_global) const |
Return the local equation number corresponding to the ieqn_global-th global equation number. Returns minus one (-1) if there is no local degree of freedom corresponding to the chosen global equation number. More... | |
unsigned | add_external_data (Data *const &data_pt, const bool &fd=true) |
Add a (pointer to an) external data object to the element and return its index (i.e. the index required to obtain it from the access function external_data_pt(...) . The optional boolean flag indicates whether the data should be included in the general finite-difference loop when calculating the jacobian. The default value is true, i.e. the data will be included in the finite-differencing. More... | |
bool | external_data_fd (const unsigned &i) const |
Return the status of the boolean flag indicating whether the external data is included in the finite difference loop. More... | |
void | exclude_external_data_fd (const unsigned &i) |
Set the boolean flag to exclude the external datum from the the finite difference loop when computing the jacobian matrix. More... | |
void | include_external_data_fd (const unsigned &i) |
Set the boolean flag to include the external datum in the the finite difference loop when computing the jacobian matrix. More... | |
void | flush_external_data () |
Flush all external data. More... | |
void | flush_external_data (Data *const &data_pt) |
Flush the object addressed by data_pt from the external data array. More... | |
unsigned | ninternal_data () const |
Return the number of internal data objects. More... | |
unsigned | nexternal_data () const |
Return the number of external data objects. More... | |
unsigned | ndof () const |
Return the number of equations/dofs in the element. More... | |
void | dof_vector (const unsigned &t, Vector< double > &dof) |
Return the vector of dof values at time level t. More... | |
void | dof_pt_vector (Vector< double * > &dof_pt) |
Return the vector of pointers to dof values. More... | |
void | set_internal_data_time_stepper (const unsigned &i, TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data) |
Set the timestepper associated with the i-th internal data object. More... | |
void | assign_internal_eqn_numbers (unsigned long &global_number, Vector< double * > &Dof_pt) |
Assign the global equation numbers to the internal Data. The arguments are the current highest global equation number (which will be incremented) and a Vector of pointers to the global variables (to which any unpinned values in the internal Data are added). More... | |
void | describe_dofs (std::ostream &out, const std::string ¤t_string) const |
Function to describe the dofs of the element. The ostream specifies the output stream to which the description is written; the string stores the currently assembled output that is ultimately written to the output stream by Data::describe_dofs(...); it is typically built up incrementally as we descend through the call hierarchy of this function when called from Problem::describe_dofs(...) More... | |
void | add_internal_value_pt_to_map (std::map< unsigned, double * > &map_of_value_pt) |
Add pointers to the internal data values to map indexed by the global equation number. More... | |
void | add_internal_data_values_to_vector (Vector< double > &vector_of_values) |
Add all internal data and time history values to the vector in the internal storage order. More... | |
void | read_internal_data_values_from_vector (const Vector< double > &vector_of_values, unsigned &index) |
Read all internal data and time history values from the vector starting from index. On return the index will be set to the value at the end of the data that has been read in. More... | |
void | add_internal_eqn_numbers_to_vector (Vector< long > &vector_of_eqn_numbers) |
Add all equation numbers associated with internal data to the vector in the internal storage order. More... | |
void | read_internal_eqn_numbers_from_vector (const Vector< long > &vector_of_eqn_numbers, unsigned &index) |
Read all equation numbers associated with internal data from the vector starting from index. On return the index will be set to the value at the end of the data that has been read in. More... | |
virtual void | assign_local_eqn_numbers (const bool &store_local_dof_pt) |
Setup the arrays of local equation numbers for the element. If the optional boolean argument is true, then pointers to the associated degrees of freedom are stored locally in the array Dof_pt. More... | |
virtual void | complete_setup_of_dependencies () |
Complete the setup of any additional dependencies that the element may have. Empty virtual function that may be overloaded for specific derived elements. Used, e.g., for elements with algebraic node update functions to determine the "geometric
Data", i.e. the Data that affects the element's shape. This function is called (for all elements) at the very beginning of the equation numbering procedure to ensure that all dependencies are accounted for. More... | |
virtual void | get_residuals (Vector< double > &residuals) |
Calculate the vector of residuals of the equations in the element. By default initialise the vector to zero and then call the fill_in_contribution_to_residuals() function. Note that this entire function can be overloaded if desired. More... | |
virtual void | get_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian) |
Calculate the elemental Jacobian matrix "d equation / d
variable". More... | |
virtual void | get_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &mass_matrix) |
Calculate the residuals and the elemental "mass" matrix, the matrix that multiplies the time derivative terms in a problem. More... | |
virtual void | get_jacobian_and_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix) |
Calculate the residuals and jacobian and elemental "mass" matrix, the matrix that multiplies the time derivative terms. More... | |
virtual void | get_dresiduals_dparameter (double *const ¶meter_pt, Vector< double > &dres_dparam) |
Calculate the derivatives of the residuals with respect to a parameter. More... | |
virtual void | get_djacobian_dparameter (double *const ¶meter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam) |
Calculate the derivatives of the elemental Jacobian matrix and residuals with respect to a parameter. More... | |
virtual void | get_djacobian_and_dmass_matrix_dparameter (double *const ¶meter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam, DenseMatrix< double > &dmass_matrix_dparam) |
Calculate the derivatives of the elemental Jacobian matrix mass matrix and residuals with respect to a parameter. More... | |
virtual void | get_hessian_vector_products (Vector< double > const &Y, DenseMatrix< double > const &C, DenseMatrix< double > &product) |
Calculate the product of the Hessian (derivative of Jacobian with respect to all variables) an eigenvector, Y, and other specified vectors, C (d(J_{ij})/d u_{k}) Y_{j} C_{k}. More... | |
virtual void | get_inner_products (Vector< std::pair< unsigned, unsigned >> const &history_index, Vector< double > &inner_product) |
Return the vector of inner product of the given pairs of history values. More... | |
virtual void | get_inner_product_vectors (Vector< unsigned > const &history_index, Vector< Vector< double >> &inner_product_vector) |
Compute the vectors that when taken as a dot product with other history values give the inner product over the element. More... | |
virtual void | compute_norm (Vector< double > &norm) |
Compute norm of solution – broken virtual can be overloaded by element writer to implement whatever norm is desired for the specific element. More... | |
void | set_halo (const unsigned &non_halo_proc_ID) |
Label the element as halo and specify processor that holds non-halo counterpart. More... | |
void | set_nonhalo () |
Label the element as not being a halo. More... | |
bool | is_halo () const |
Is this element a halo? More... | |
int | non_halo_proc_ID () |
ID of processor ID that holds non-halo counterpart of halo element; negative if not a halo. More... | |
void | set_must_be_kept_as_halo () |
Insist that this element be kept as a halo element during a distribute? More... | |
void | unset_must_be_kept_as_halo () |
Do not insist that this element be kept as a halo element during distribution. More... | |
bool | must_be_kept_as_halo () const |
Test whether the element must be kept as a halo element. More... | |
Public Member Functions inherited from oomph::GeomObject | |
GeomObject () | |
Default constructor. More... | |
GeomObject (const unsigned &ndim) | |
Constructor: Pass dimension of geometric object (# of Eulerian coords = # of Lagrangian coords; no time history available/needed) More... | |
GeomObject (const unsigned &nlagrangian, const unsigned &ndim) | |
Constructor: pass # of Eulerian and Lagrangian coordinates. No time history available/needed. More... | |
GeomObject (const unsigned &nlagrangian, const unsigned &ndim, TimeStepper *time_stepper_pt) | |
Constructor: pass # of Eulerian and Lagrangian coordinates and pointer to time-stepper which is used to handle the position at previous timesteps and allows the evaluation of veloc/acceleration etc. in cases where the GeomData varies with time. More... | |
GeomObject (const GeomObject &dummy)=delete | |
Broken copy constructor. More... | |
void | operator= (const GeomObject &)=delete |
Broken assignment operator. More... | |
virtual | ~GeomObject () |
(Empty) destructor More... | |
unsigned | nlagrangian () const |
Access function to # of Lagrangian coordinates. More... | |
unsigned | ndim () const |
Access function to # of Eulerian coordinates. More... | |
void | set_nlagrangian_and_ndim (const unsigned &n_lagrangian, const unsigned &n_dim) |
Set # of Lagrangian and Eulerian coordinates. More... | |
TimeStepper *& | time_stepper_pt () |
Access function for pointer to time stepper: Null if object is not time-dependent. More... | |
TimeStepper * | time_stepper_pt () const |
Access function for pointer to time stepper: Null if object is not time-dependent. Const version. More... | |
virtual void | position (const double &t, const Vector< double > &zeta, Vector< double > &r) const |
Parametrised position on object: r(zeta). Evaluated at the continuous time value, t. More... | |
virtual void | dposition (const Vector< double > &zeta, DenseMatrix< double > &drdzeta) const |
Derivative of position Vector w.r.t. to coordinates: = drdzeta(alpha,i). Evaluated at current time. More... | |
virtual void | d2position (const Vector< double > &zeta, RankThreeTensor< double > &ddrdzeta) const |
2nd derivative of position Vector w.r.t. to coordinates: = ddrdzeta(alpha,beta,i). Evaluated at current time. More... | |
virtual void | d2position (const Vector< double > &zeta, Vector< double > &r, DenseMatrix< double > &drdzeta, RankThreeTensor< double > &ddrdzeta) const |
Posn Vector and its 1st & 2nd derivatives w.r.t. to coordinates: = drdzeta(alpha,i). = ddrdzeta(alpha,beta,i). Evaluated at current time. More... | |
Public Member Functions inherited from oomph::RefineablePVDEquations< DIM > | |
RefineablePVDEquations () | |
Constructor. More... | |
void | fill_in_generic_contribution_to_residuals_pvd (Vector< double > &residuals, DenseMatrix< double > &jacobian, const unsigned &flag) |
Call the residuals including hanging node cases. More... | |
void | get_interpolated_values (const unsigned &t, const Vector< double > &s, Vector< double > &values) |
No values are interpolated in this element (pure solid) More... | |
void | get_interpolated_values (const Vector< double > &s, Vector< double > &values) |
No values are interpolated in this element (pure solid) More... | |
unsigned | num_Z2_flux_terms () |
Number of 'flux' terms for Z2 error estimation. More... | |
void | get_Z2_flux (const Vector< double > &s, Vector< double > &flux) |
Get 'flux' for Z2 error recovery: Upper triangular entries in strain tensor. More... | |
unsigned | ncont_interpolated_values () const |
Number of continuously interpolated values: 0 (pure solid problem) More... | |
virtual Node * | solid_pressure_node_pt (const unsigned &l) |
void | further_build () |
Further build function, pass the pointers down to the sons. More... | |
Public Member Functions inherited from oomph::RefineableSolidElement | |
RefineableSolidElement () | |
Constructor. More... | |
virtual | ~RefineableSolidElement () |
Virtual Destructor, delete any allocated storage. More... | |
void | assign_solid_local_eqn_numbers (const bool &store_local_dof_pt) |
Overload the local equation numbers for Data stored as part of solid nodes to include hanging node data. More... | |
unsigned | ngeom_data () const |
The number of geometric data affecting a RefineableSolidFiniteElement is the positional Data of all non-hanging nodes plus the geometric Data of all distinct master nodes. Recomputed on the fly. More... | |
Data * | geom_data_pt (const unsigned &j) |
Return pointer to the j-th Data item that the object's shape depends on: Positional data of non-hanging nodes and positional data of master nodes. Recomputed on the fly. More... | |
void | identify_geometric_data (std::set< Data * > &geometric_data_pt) |
Specify Data that affects the geometry of the element by adding the position Data to the set that's passed in. (This functionality is required in FSI problems; set is used to avoid double counting). Refineable version includes hanging nodes. More... | |
void | fill_in_jacobian_from_solid_position_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian) |
Compute element residual Vector and element Jacobian matrix corresponding to the solid positions. Overloaded version to take the hanging nodes into account. More... | |
bool | is_undeformed_macro_element_used_for_new_lagrangian_coords () const |
Return the flag deciding if the Lagrangian coordinates of newly-created interior SolidNodes are to be determined by the father element's undeformed MacroElement representation (if it has one). Default: False as it means that, following a refinement an element is no longer in equilbrium (as the Lagrangian coordinate is determined differently from the Eulerian one). However, basing the Lagrangian coordinates on the undeformed MacroElement can be more stable numerically and for steady problems it's not a big deal either way as the difference between the two formulations only matters at finite resolution so we have no right to say that one is "more
correct" than the other... More... | |
void | enable_use_of_undeformed_macro_element_for_new_lagrangian_coords () |
Set the flag deciding if the Lagrangian coordinates of newly-created interior SolidNodes are to be determined by the father element's undeformed MacroElement representation (if it has one). More... | |
void | disable_use_of_undeformed_macro_element_for_new_lagrangian_coords () |
Unset the flag deciding if the Lagrangian coordinates of newly-created interior SolidNodes are to be determined by the father element's undeformed MacroElement representation (if it has one). More... | |
DenseMatrix< int > & | local_position_hang_eqn (Node *const &node_pt) |
Access the local equation number of of hanging node variables associated with nodal positions. The function returns a dense matrix that contains all the local equation numbers corresponding to the positional degrees of freedom. More... | |
Public Member Functions inherited from oomph::RefineableElement | |
RefineableElement () | |
Constructor, calls the FiniteElement constructor and initialises the member data. More... | |
virtual | ~RefineableElement () |
Destructor, delete the allocated storage for the hanging equations. More... | |
RefineableElement (const RefineableElement &)=delete | |
Broken copy constructor. More... | |
void | operator= (const RefineableElement &)=delete |
Broken assignment operator. More... | |
Tree * | tree_pt () |
Access function: Pointer to quadtree representation of this element. More... | |
void | set_tree_pt (Tree *my_tree_pt) |
Set pointer to quadtree representation of this element. More... | |
virtual unsigned | required_nsons () const |
Set the number of sons that can be constructed by the element The default is none. More... | |
bool | refinement_is_enabled () |
Flag to indicate suppression of any refinement. More... | |
void | disable_refinement () |
Suppress of any refinement for this element. More... | |
void | enable_refinement () |
Emnable refinement for this element. More... | |
template<class ELEMENT > | |
void | split (Vector< ELEMENT * > &son_pt) const |
Split the element into the number of sons to be constructed and return a vector of pointers to the sons. Elements are allocated, but they are not given any properties. The refinement level of the sons is one higher than that of the father elemern. More... | |
int | local_hang_eqn (Node *const &node_pt, const unsigned &i) |
Access function that returns the local equation number for the hanging node variables (values stored at master nodes). The local equation number corresponds to the i-th unknown stored at the node addressed by node_pt. More... | |
virtual void | build (Mesh *&mesh_pt, Vector< Node * > &new_node_pt, bool &was_already_built, std::ofstream &new_nodes_file)=0 |
Interface to function that builds the element: i.e. construct the nodes, assign their positions, apply boundary conditions, etc. The required procedures depend on the geometrical type of the element and must be implemented in specific refineable elements. Any new nodes created during the build process are returned in the vector new_node_pt. More... | |
void | set_refinement_level (const int &refine_level) |
Set the refinement level. More... | |
unsigned | refinement_level () const |
Return the Refinement level. More... | |
void | select_for_refinement () |
Select the element for refinement. More... | |
void | deselect_for_refinement () |
Deselect the element for refinement. More... | |
void | select_sons_for_unrefinement () |
Unrefinement will be performed by merging the four sons of this element. More... | |
void | deselect_sons_for_unrefinement () |
No unrefinement will be performed by merging the four sons of this element. More... | |
bool | to_be_refined () |
Has the element been selected for refinement? More... | |
bool | sons_to_be_unrefined () |
Has the element been selected for unrefinement? More... | |
virtual void | unbuild () |
Unbuild the element, i.e. mark the nodes that were created during its creation for possible deletion. More... | |
virtual void | deactivate_element () |
Final operations that must be performed when the element is no longer active in the mesh, but still resident in the QuadTree. More... | |
virtual bool | nodes_built () |
Return true if all the nodes have been built, false if not. More... | |
long | number () const |
Element number (for debugging/plotting) More... | |
void | set_number (const long &mynumber) |
Set element number (for debugging/plotting) More... | |
virtual Node * | interpolating_node_pt (const unsigned &n, const int &value_id) |
In mixed elements, different sets of nodes are used to interpolate different unknowns. This function returns the n-th node that interpolates the value_id-th unknown. Default implementation is that all variables use the positional nodes, i.e. isoparametric elements. Note that any overloaded versions of this function MUST provide a set of nodes for the position, which always has the value_id -1. More... | |
virtual double | local_one_d_fraction_of_interpolating_node (const unsigned &n1d, const unsigned &i, const int &value_id) |
Return the local one dimensional fraction of the n1d-th node in the direction of the local coordinate s[i] that is used to interpolate the value_id-th continuously interpolated unknown. Default assumes isoparametric interpolation for all unknowns. More... | |
virtual Node * | get_interpolating_node_at_local_coordinate (const Vector< double > &s, const int &value_id) |
Return a pointer to the node that interpolates the value-id-th unknown at local coordinate s. If there is not a node at that position, then return 0. More... | |
virtual unsigned | ninterpolating_node (const int &value_id) |
Return the number of nodes that are used to interpolate the value_id-th unknown. Default is to assume isoparametric elements. More... | |
virtual unsigned | ninterpolating_node_1d (const int &value_id) |
Return the number of nodes in a one_d direction that are used to interpolate the value_id-th unknown. Default is to assume an isoparametric mapping. More... | |
virtual void | interpolating_basis (const Vector< double > &s, Shape &psi, const int &value_id) const |
Return the basis functions that are used to interpolate the value_id-th unknown. By default assume isoparameteric interpolation. More... | |
virtual void | check_integrity (double &max_error)=0 |
Check the integrity of the element: Continuity of positions values, etc. Essentially, check that the approximation of the functions is consistent when viewed from both sides of the element boundaries Must be overloaded for each different geometric element. More... | |
void | identify_field_data_for_interactions (std::set< std::pair< Data *, unsigned >> &paired_field_data) |
The purpose of this function is to identify all possible Data that can affect the fields interpolated by the FiniteElement. This must be overloaded to include data from any hanging nodes correctly. More... | |
void | assign_nodal_local_eqn_numbers (const bool &store_local_dof_pt) |
Overload the function that assigns local equation numbers for the Data stored at the nodes so that hanging data is taken into account. More... | |
virtual RefineableElement * | root_element_pt () |
Pointer to the root element in refinement hierarchy (must be implemented in specific elements that do refinement via tree-like refinement structure. Here we provide a default implementation that is appropriate for cases where tree-like refinement doesn't exist or if the element doesn't have root in that tree (i.e. if it's a root itself): We return "this". More... | |
virtual RefineableElement * | father_element_pt () const |
Return a pointer to the father element. More... | |
void | get_father_at_refinement_level (unsigned &refinement_level, RefineableElement *&father_at_reflevel_pt) |
Return a pointer to the "father" element at the specified refinement level. More... | |
virtual void | initial_setup (Tree *const &adopted_father_pt=0, const unsigned &initial_p_order=0) |
Initial setup of the element: e.g. set the appropriate internal p-order. If an adopted father is specified, information from this is used instead of using the father found from the tree. More... | |
virtual void | pre_build (Mesh *&mesh_pt, Vector< Node * > &new_node_pt) |
Pre-build the element. More... | |
virtual void | setup_hanging_nodes (Vector< std::ofstream * > &output_stream) |
Mark up any hanging nodes that arise as a result of non-uniform refinement. Any hanging nodes will be documented in files addressed by the streams in the vector output_stream, if the streams are open. More... | |
void | get_dresidual_dnodal_coordinates (RankThreeTensor< double > &dresidual_dnodal_coordinates) |
Compute derivatives of elemental residual vector with respect to nodal coordinates. Default implementation by FD can be overwritten for specific elements. dresidual_dnodal_coordinates(l,i,j) = d res(l) / dX_{ij} This version is overloaded from the version in FiniteElement and takes hanging nodes into account – j in the above loop loops over all the nodes that actively control the shape of the element (i.e. they are non-hanging or master nodes of hanging nodes in this element). More... | |
unsigned | nshape_controlling_nodes () |
Number of shape-controlling nodes = the number of non-hanging nodes plus the number of master nodes associated with hanging nodes. More... | |
std::map< Node *, unsigned > | shape_controlling_node_lookup () |
Return lookup scheme for unique number associated with any of the nodes that actively control the shape of the element (i.e. they are either non-hanging nodes of this element or master nodes of hanging nodes. More... | |
Public Member Functions inherited from oomph::ElementWithZ2ErrorEstimator | |
ElementWithZ2ErrorEstimator () | |
Default empty constructor. More... | |
ElementWithZ2ErrorEstimator (const ElementWithZ2ErrorEstimator &)=delete | |
Broken copy constructor. More... | |
void | operator= (const ElementWithZ2ErrorEstimator &)=delete |
Broken assignment operator. More... | |
virtual unsigned | ncompound_fluxes () |
A stuitable error estimator for a multi-physics elements may require one Z2 error estimate for each field (e.g. velocity and temperature in a fluid convection problem). It is assumed that these error estimates will each use selected flux terms. The number of compound fluxes returns the number of such combinations of the flux terms. Default value is one and all flux terms are combined with equal weight. More... | |
virtual void | compute_exact_Z2_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_flux_pt, double &error, double &norm) |
Plot the error when compared against a given exact flux. Also calculates the norm of the error and that of the exact flux. More... | |
virtual void | get_Z2_compound_flux_indices (Vector< unsigned > &flux_index) |
Return the compound flux index of each flux component The default (do nothing behaviour) will mean that all indices remain at the default value zero. More... | |
virtual double | geometric_jacobian (const Vector< double > &x) |
Return the geometric jacobian (should be overloaded in cylindrical and spherical geometries). Default value one is suitable for Cartesian coordinates. More... | |
Public Member Functions inherited from oomph::RefineableSolidQElement< DIM > | |
RefineableSolidQElement () | |
Empty constuctor. More... | |
Additional Inherited Members | |
Public Types inherited from oomph::PVDEquationsBase< DIM > | |
typedef void(* | IsotropicGrowthFctPt) (const Vector< double > &xi, double &gamma) |
Function pointer to function that specifies the isotropic growth as a function of the Lagrangian coordinates FCT(xi,gamma(xi)) – xi is a Vector! More... | |
typedef double(* | PrestressFctPt) (const unsigned &i, const unsigned &j, const Vector< double > &xi) |
Function pointer to function that specifies the pre-stress sigma_0(i,j) as a function of the Lagrangian coordinates FCT(i,j,xi) – xi is a Vector! More... | |
typedef void(* | BodyForceFctPt) (const double &t, const Vector< double > &xi, Vector< double > &b) |
Function pointer to function that specifies the body force as a function of the Lagrangian coordinates and time FCT(t,xi,b) – xi and b are Vectors! More... | |
Public Types inherited from oomph::SolidFiniteElement | |
typedef double(* | MultiplierFctPt) (const Vector< double > &xi) |
Pointer to function that computes the "multiplier" for the inertia terms in the consistent determination of the initial conditions for Newmark timestepping. More... | |
Public Types inherited from oomph::FiniteElement | |
typedef void(* | SteadyExactSolutionFctPt) (const Vector< double > &, Vector< double > &) |
Function pointer for function that computes vector-valued steady "exact solution" as . More... | |
typedef void(* | UnsteadyExactSolutionFctPt) (const double &, const Vector< double > &, Vector< double > &) |
Function pointer for function that computes Vector-valued time-dependent function as . More... | |
Static Public Member Functions inherited from oomph::PVDEquationsBase< DIM > | |
static void | pin_redundant_nodal_solid_pressures (const Vector< GeneralisedElement * > &element_pt) |
Loop over all elements in Vector (which typically contains all the elements in a refineable solid mesh) and pin the nodal solid pressure degrees of freedom that are not being used. Function uses the member function. More... | |
static void | unpin_all_solid_pressure_dofs (const Vector< GeneralisedElement * > &element_pt) |
Unpin all pressure dofs in elements listed in vector. More... | |
Static Public Member Functions inherited from oomph::RefineableElement | |
static double & | max_integrity_tolerance () |
Max. allowed discrepancy in element integrity check. More... | |
Static Public Attributes inherited from oomph::FiniteElement | |
static double | Tolerance_for_singular_jacobian = 1.0e-16 |
Tolerance below which the jacobian is considered singular. More... | |
static bool | Accept_negative_jacobian = false |
Boolean that if set to true allows a negative jacobian in the transform between global and local coordinates (negative surface area = left-handed coordinate system). More... | |
static bool | Suppress_output_while_checking_for_inverted_elements |
Static boolean to suppress output while checking for inverted elements. More... | |
Static Public Attributes inherited from oomph::GeneralisedElement | |
static bool | Suppress_warning_about_repeated_internal_data |
Static boolean to suppress warnings about repeated internal data. Defaults to false. More... | |
static bool | Suppress_warning_about_repeated_external_data = true |
Static boolean to suppress warnings about repeated external data. Defaults to true. More... | |
static double | Default_fd_jacobian_step = 1.0e-8 |
Double used for the default finite difference step in elemental jacobian calculations. More... | |
Protected Member Functions inherited from oomph::PVDEquations< DIM > | |
void | get_stress (const DenseMatrix< double > &g, const DenseMatrix< double > &G, DenseMatrix< double > &sigma) |
Return the 2nd Piola Kirchhoff stress tensor, as calculated from the constitutive law: Pass metric tensors in the stress free and current configurations. More... | |
void | get_d_stress_dG_upper (const DenseMatrix< double > &g, const DenseMatrix< double > &G, const DenseMatrix< double > &sigma, RankFourTensor< double > &d_sigma_dG) |
Return the derivatives of the 2nd Piola Kirchhoff stress tensor, as calculated from the constitutive law: Pass metric tensors in the stress free and current configurations and the current value of the the stress tensor. More... | |
Protected Member Functions inherited from oomph::SolidFiniteElement | |
void | fill_in_generic_jacobian_for_solid_ic (Vector< double > &residuals, DenseMatrix< double > &jacobian, const unsigned &flag) |
Helper function to fill in the residuals and (if flag==1) the Jacobian for the setup of an initial condition. The global equations are: More... | |
void | set_nnodal_lagrangian_type (const unsigned &nlagrangian_type) |
Set the number of types required to interpolate the Lagrangian coordinates. More... | |
virtual double | local_to_lagrangian_mapping (const DShape &dpsids, DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const |
Calculate the mapping from local to lagrangian coordinates, given the derivatives of the shape functions w.r.t. local coorindates. Return the determinant of the jacobian, the jacobian and inverse jacobian. More... | |
double | local_to_lagrangian_mapping (const DShape &dpsids, DenseMatrix< double > &inverse_jacobian) const |
Calculate the mapping from local to lagrangian coordinates, given the derivatives of the shape functions w.r.t. local coordinates, Return only the determinant of the jacobian and the inverse of the mapping (ds/dx) More... | |
void | describe_solid_local_dofs (std::ostream &out, const std::string ¤t_string) const |
Classifies dofs locally for solid specific aspects. More... | |
void | fill_in_jacobian_from_solid_position_by_fd (DenseMatrix< double > &jacobian) |
Use finite differences to calculate the Jacobian entries corresponding to the solid positions. More... | |
virtual void | update_before_solid_position_fd () |
Function that is called before the finite differencing of any solid position data. This may be overloaded to update any dependent data before finite differencing takes place. More... | |
virtual void | reset_after_solid_position_fd () |
Function that is call after the finite differencing of the solid position data. This may be overloaded to reset any dependent variables that may have changed during the finite differencing. More... | |
virtual void | update_in_solid_position_fd (const unsigned &i) |
Function called within the finite difference loop for the solid position dat after a change in any values in the n-th node. More... | |
virtual void | reset_in_solid_position_fd (const unsigned &i) |
Function called within the finite difference loop for solid position data after the values in the i-th node are reset. The default behaviour is to call the update function. More... | |
Protected Member Functions inherited from oomph::FiniteElement | |
template<unsigned DIM> | |
double | invert_jacobian (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const |
Take the matrix passed as jacobian and return its inverse in inverse_jacobian. This function is templated by the dimension of the element because matrix inversion cannot be written efficiently in a generic manner. More... | |
virtual double | invert_jacobian_mapping (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const |
A template-free interface that takes the matrix passed as jacobian and return its inverse in inverse_jacobian. By default the function will use the dimension of the element to call the correct invert_jacobian(..) function. This should be overloaded for efficiency (removal of a switch statement) in specific elements. More... | |
virtual double | local_to_eulerian_mapping (const DShape &dpsids, DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const |
Calculate the mapping from local to Eulerian coordinates, given the derivatives of the shape functions w.r.t. local coordinates. Returns the determinant of the jacobian, the jacobian and inverse jacobian. More... | |
double | local_to_eulerian_mapping (const DShape &dpsids, DenseMatrix< double > &inverse_jacobian) const |
Calculate the mapping from local to Eulerian coordinates, given the derivatives of the shape functions w.r.t. local coordinates, Return only the determinant of the jacobian and the inverse of the mapping (ds/dx). More... | |
virtual void | dJ_eulerian_dnodal_coordinates (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const |
A template-free interface that calculates the derivative of the jacobian of a mapping with respect to the nodal coordinates X_ij. To do this it requires the jacobian matrix and the derivatives of the shape functions w.r.t. the local coordinates. By default the function will use the dimension of the element to call the correct dJ_eulerian_dnodal_coordinates_templated_helper(..) function. This should be overloaded for efficiency (removal of a switch statement) in specific elements. More... | |
template<unsigned DIM> | |
void | dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const |
Calculate the derivative of the jacobian of a mapping with respect to the nodal coordinates X_ij using the jacobian matrix and the derivatives of the shape functions w.r.t. the local coordinates. This function is templated by the dimension of the element. More... | |
virtual void | d_dshape_eulerian_dnodal_coordinates (const double &det_jacobian, const DenseMatrix< double > &jacobian, const DenseMatrix< double > &djacobian_dX, const DenseMatrix< double > &inverse_jacobian, const DShape &dpsids, RankFourTensor< double > &d_dpsidx_dX) const |
A template-free interface that calculates the derivative w.r.t. the nodal coordinates of the derivative of the shape functions w.r.t. the global eulerian coordinates . I.e. this function calculates. More... | |
template<unsigned DIM> | |
void | d_dshape_eulerian_dnodal_coordinates_templated_helper (const double &det_jacobian, const DenseMatrix< double > &jacobian, const DenseMatrix< double > &djacobian_dX, const DenseMatrix< double > &inverse_jacobian, const DShape &dpsids, RankFourTensor< double > &d_dpsidx_dX) const |
Calculate the derivative w.r.t. the nodal coordinates of the derivative of the shape functions w.r.t. the global eulerian coordinates , using the determinant of the jacobian mapping, its derivative w.r.t. the nodal coordinates , the inverse jacobian and the derivatives of the shape functions w.r.t. the local coordinates. The result is returned as a tensor of rank four. Numbering: d_dpsidx_dX(p,q,j,i) = This function is templated by the dimension of the element. More... | |
virtual void | transform_derivatives (const DenseMatrix< double > &inverse_jacobian, DShape &dbasis) const |
Convert derivative w.r.t.local coordinates to derivatives w.r.t the coordinates used to assemble the inverse_jacobian passed in the mapping. On entry, dbasis must contain the basis function derivatives w.r.t. the local coordinates; it will contain the derivatives w.r.t. the new coordinates on exit. This is virtual so that it may be overloaded if desired for efficiency reasons. More... | |
void | transform_derivatives_diagonal (const DenseMatrix< double > &inverse_jacobian, DShape &dbasis) const |
Convert derivative w.r.t local coordinates to derivatives w.r.t the coordinates used to assemble the inverse jacobian passed in the mapping, assuming that the coordinates are aligned in the direction of the local coordinates. On entry dbasis must contain the derivatives of the basis functions w.r.t. the local coordinates; it will contain the derivatives w.r.t. the new coordinates. are converted into the new using the mapping inverse_jacobian. More... | |
virtual void | transform_second_derivatives (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const |
Convert derivatives and second derivatives w.r.t. local coordiantes to derivatives and second derivatives w.r.t. the coordinates used to assemble the jacobian, inverse jacobian and jacobian2 passed to the function. By default this function will call transform_second_derivatives_template<>(...) using the dimension of the element as the template parameter. It is virtual so that it can be overloaded by a specific element to save using a switch statement. Optionally, the element writer may wish to use the transform_second_derivatives_diagonal<>(...) function On entry dbasis and d2basis must contain the derivatives w.r.t. the local coordinates; on exit they will be the derivatives w.r.t. the transformed coordinates. More... | |
template<unsigned DIM> | |
void | transform_second_derivatives_template (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const |
Convert derivatives and second derivatives w.r.t. local coordinates to derivatives and second derivatives w.r.t. the coordinates used to asssmble the jacobian, inverse jacobian and jacobian2 passed in the mapping. This is templated by dimension because the method of calculation varies significantly with the dimension. On entry dbasis and d2basis must contain the derivatives w.r.t. the local coordinates; on exit they will be the derivatives w.r.t. the transformed coordinates. More... | |
template<unsigned DIM> | |
void | transform_second_derivatives_diagonal (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const |
Convert derivatives and second derivatives w.r.t. local coordinates to derivatives and second derivatives w.r.t. the coordinates used to asssmble the jacobian, inverse jacobian and jacobian2 passed in the mapping. This version of the function assumes that the local coordinates are aligned with the global coordinates, i.e. the jacobians are diagonal On entry dbasis and d2basis must contain the derivatives w.r.t. the local coordinates; on exit they will be the derivatives w.r.t. the transformed coordinates. More... | |
void | fill_in_jacobian_from_nodal_by_fd (DenseMatrix< double > &jacobian) |
Calculate the contributions to the jacobian from the nodal degrees of freedom using finite differences. This version computes the residuals vector before calculating the jacobian terms. More... | |
virtual void | update_before_nodal_fd () |
Function that is called before the finite differencing of any nodal data. This may be overloaded to update any dependent data before finite differencing takes place. More... | |
virtual void | reset_after_nodal_fd () |
Function that is call after the finite differencing of the nodal data. This may be overloaded to reset any dependent variables that may have changed during the finite differencing. More... | |
virtual void | update_in_nodal_fd (const unsigned &i) |
Function called within the finite difference loop for nodal data after a change in the i-th nodal value. More... | |
virtual void | reset_in_nodal_fd (const unsigned &i) |
Function called within the finite difference loop for nodal data after the i-th nodal values is reset. The default behaviour is to call the update function. More... | |
template<> | |
double | invert_jacobian (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const |
Zero-d specialisation of function to calculate inverse of jacobian mapping. More... | |
template<> | |
double | invert_jacobian (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const |
One-d specialisation of function to calculate inverse of jacobian mapping. More... | |
template<> | |
double | invert_jacobian (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const |
Two-d specialisation of function to calculate inverse of jacobian mapping. More... | |
template<> | |
double | invert_jacobian (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const |
Three-d specialisation of function to calculate inverse of jacobian mapping. More... | |
template<> | |
void | dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const |
Zero-d specialisation of function to calculate the derivative of the jacobian of a mapping with respect to the nodal coordinates X_ij. More... | |
template<> | |
void | dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const |
One-d specialisation of function to calculate the derivative of the jacobian of a mapping with respect to the nodal coordinates X_ij. More... | |
template<> | |
void | dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const |
Two-d specialisation of function to calculate the derivative of the jacobian of a mapping with respect to the nodal coordinates X_ij. More... | |
template<> | |
void | dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const |
Three-d specialisation of function to calculate the derivative of the jacobian of a mapping with respect to the nodal coordinates X_ij. More... | |
template<> | |
void | d_dshape_eulerian_dnodal_coordinates_templated_helper (const double &det_jacobian, const DenseMatrix< double > &jacobian, const DenseMatrix< double > &djacobian_dX, const DenseMatrix< double > &inverse_jacobian, const DShape &dpsids, RankFourTensor< double > &d_dpsidx_dX) const |
Zero-d specialisation of function to calculate the derivative w.r.t. the nodal coordinates of the derivative of the shape functions w.r.t. the global eulerian coordinates . More... | |
template<> | |
void | d_dshape_eulerian_dnodal_coordinates_templated_helper (const double &det_jacobian, const DenseMatrix< double > &jacobian, const DenseMatrix< double > &djacobian_dX, const DenseMatrix< double > &inverse_jacobian, const DShape &dpsids, RankFourTensor< double > &d_dpsidx_dX) const |
One-d specialisation of function to calculate the derivative w.r.t. the nodal coordinates of the derivative of the shape functions w.r.t. the global eulerian coordinates . More... | |
template<> | |
void | d_dshape_eulerian_dnodal_coordinates_templated_helper (const double &det_jacobian, const DenseMatrix< double > &jacobian, const DenseMatrix< double > &djacobian_dX, const DenseMatrix< double > &inverse_jacobian, const DShape &dpsids, RankFourTensor< double > &d_dpsidx_dX) const |
Two-d specialisation of function to calculate the derivative w.r.t. the nodal coordinates of the derivative of the shape functions w.r.t. the global eulerian coordinates . More... | |
template<> | |
void | d_dshape_eulerian_dnodal_coordinates_templated_helper (const double &det_jacobian, const DenseMatrix< double > &jacobian, const DenseMatrix< double > &djacobian_dX, const DenseMatrix< double > &inverse_jacobian, const DShape &dpsids, RankFourTensor< double > &d_dpsidx_dX) const |
Three-d specialisation of function to calculate the derivative w.r.t. the nodal coordinates of the derivative of the shape functions w.r.t. the global eulerian coordinates . More... | |
template<> | |
void | transform_second_derivatives_template (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const |
Convert derivatives and second derivatives w.r.t local coordinates to derivatives w.r.t. the coordinates used to assemble the jacobian, inverse_jacobian and jacobian 2 passed. This must be specialised for each dimension, otherwise it gets very ugly Specialisation to one dimension. More... | |
template<> | |
void | transform_second_derivatives_template (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const |
Convert derivatives and second derivatives w.r.t local coordinates to derivatives w.r.t. the coordinates used to assemble the jacobian, inverse_jacobian and jacobian 2 passed. This must be specialised for each dimension, otherwise it gets very ugly. Specialisation to two spatial dimensions. More... | |
template<> | |
void | transform_second_derivatives_diagonal (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const |
Convert derivatives and second derivatives w.r.t local coordinates to derivatives w.r.t. the coordinates used to assemble the jacobian, inverse_jacobian and jacobian 2 passed. This must be specialised for each dimension, otherwise it gets very ugly Specialisation to one dimension. More... | |
template<> | |
void | transform_second_derivatives_diagonal (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const |
Convert second derivatives w.r.t. local coordinates to second derivatives w.r.t. the coordinates passed in the tensor coordinate. Specialised to two spatial dimension. More... | |
Protected Member Functions inherited from oomph::GeneralisedElement | |
unsigned | add_internal_data (Data *const &data_pt, const bool &fd=true) |
Add a (pointer to an) internal data object to the element and return the index required to obtain it from the access function internal_data_pt() . The boolean indicates whether the datum should be included in the general finite-difference loop when calculating the jacobian. The default value is true, i.e. the data will be included in the finite differencing. More... | |
bool | internal_data_fd (const unsigned &i) const |
Return the status of the boolean flag indicating whether the internal data is included in the finite difference loop. More... | |
void | exclude_internal_data_fd (const unsigned &i) |
Set the boolean flag to exclude the internal datum from the finite difference loop when computing the jacobian matrix. More... | |
void | include_internal_data_fd (const unsigned &i) |
Set the boolean flag to include the internal datum in the finite difference loop when computing the jacobian matrix. More... | |
void | clear_global_eqn_numbers () |
Clear the storage for the global equation numbers and pointers to dofs (if stored) More... | |
void | add_global_eqn_numbers (std::deque< unsigned long > const &global_eqn_numbers, std::deque< double * > const &global_dof_pt) |
Add the contents of the queue global_eqn_numbers to the local storage for the local-to-global translation scheme. It is essential that the entries in the queue are added IN ORDER i.e. from the front. More... | |
virtual void | assign_internal_and_external_local_eqn_numbers (const bool &store_local_dof_pt) |
Assign the local equation numbers for the internal and external Data This must be called after the global equation numbers have all been assigned. It is virtual so that it can be overloaded by ElementWithExternalElements so that any external data from the external elements in included in the numbering scheme. If the boolean argument is true then pointers to the dofs will be stored in Dof_pt. More... | |
virtual void | assign_additional_local_eqn_numbers () |
Setup any additional look-up schemes for local equation numbers. Examples of use include using local storage to refer to explicit degrees of freedom. The additional memory cost of such storage may or may not be offset by fast local access. More... | |
int | internal_local_eqn (const unsigned &i, const unsigned &j) const |
Return the local equation number corresponding to the j-th value stored at the i-th internal data. More... | |
int | external_local_eqn (const unsigned &i, const unsigned &j) |
Return the local equation number corresponding to the j-th value stored at the i-th external data. More... | |
void | fill_in_jacobian_from_internal_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &fd_all_data=false) |
Calculate the contributions to the jacobian from the internal degrees of freedom using finite differences. This version of the function assumes that the residuals vector has already been calculated. If the boolean argument is true, the finite differencing will be performed for all internal data, irrespective of the information in Data_fd. The default value (false) uses the information in Data_fd to selectively difference only certain data. More... | |
void | fill_in_jacobian_from_internal_by_fd (DenseMatrix< double > &jacobian, const bool &fd_all_data=false) |
Calculate the contributions to the jacobian from the internal degrees of freedom using finite differences. This version computes the residuals vector before calculating the jacobian terms. If the boolean argument is true, the finite differencing will be performed for all internal data, irrespective of the information in Data_fd. The default value (false) uses the information in Data_fd to selectively difference only certain data. More... | |
void | fill_in_jacobian_from_external_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &fd_all_data=false) |
Calculate the contributions to the jacobian from the external degrees of freedom using finite differences. This version of the function assumes that the residuals vector has already been calculated. If the boolean argument is true, the finite differencing will be performed for all external data, irrespective of the information in Data_fd. The default value (false) uses the information in Data_fd to selectively difference only certain data. More... | |
void | fill_in_jacobian_from_external_by_fd (DenseMatrix< double > &jacobian, const bool &fd_all_data=false) |
Calculate the contributions to the jacobian from the external degrees of freedom using finite differences. This version computes the residuals vector before calculating the jacobian terms. If the boolean argument is true, the finite differencing will be performed for all internal data, irrespective of the information in Data_fd. The default value (false) uses the information in Data_fd to selectively difference only certain data. More... | |
virtual void | update_before_internal_fd () |
Function that is called before the finite differencing of any internal data. This may be overloaded to update any dependent data before finite differencing takes place. More... | |
virtual void | reset_after_internal_fd () |
Function that is call after the finite differencing of the internal data. This may be overloaded to reset any dependent variables that may have changed during the finite differencing. More... | |
virtual void | update_in_internal_fd (const unsigned &i) |
Function called within the finite difference loop for internal data after a change in any values in the i-th internal data object. More... | |
virtual void | reset_in_internal_fd (const unsigned &i) |
Function called within the finite difference loop for internal data after the values in the i-th external data object are reset. The default behaviour is to call the update function. More... | |
virtual void | update_before_external_fd () |
Function that is called before the finite differencing of any external data. This may be overloaded to update any dependent data before finite differencing takes place. More... | |
virtual void | reset_after_external_fd () |
Function that is call after the finite differencing of the external data. This may be overloaded to reset any dependent variables that may have changed during the finite differencing. More... | |
virtual void | update_in_external_fd (const unsigned &i) |
Function called within the finite difference loop for external data after a change in any values in the i-th external data object. More... | |
virtual void | reset_in_external_fd (const unsigned &i) |
Function called within the finite difference loop for external data after the values in the i-th external data object are reset. The default behaviour is to call the update function. More... | |
virtual void | fill_in_contribution_to_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &mass_matrix) |
Add the elemental contribution to the mass matrix matrix. and the residuals vector. Note that this function should NOT initialise the residuals vector or the mass matrix. It must be called after the residuals vector and jacobian matrix have been initialised to zero. The default is deliberately broken. More... | |
virtual void | fill_in_contribution_to_jacobian_and_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix) |
Add the elemental contribution to the jacobian matrix, mass matrix and the residuals vector. Note that this function should NOT initialise any entries. It must be called after the residuals vector and matrices have been initialised to zero. More... | |
virtual void | fill_in_contribution_to_dresiduals_dparameter (double *const ¶meter_pt, Vector< double > &dres_dparam) |
Add the elemental contribution to the derivatives of the residuals with respect to a parameter. This function should NOT initialise any entries and must be called after the entries have been initialised to zero The default implementation is to use finite differences to calculate the derivatives. More... | |
virtual void | fill_in_contribution_to_djacobian_dparameter (double *const ¶meter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam) |
Add the elemental contribution to the derivatives of the elemental Jacobian matrix and residuals with respect to a parameter. This function should NOT initialise any entries and must be called after the entries have been initialised to zero The default implementation is to use finite differences to calculate the derivatives. More... | |
virtual void | fill_in_contribution_to_djacobian_and_dmass_matrix_dparameter (double *const ¶meter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam, DenseMatrix< double > &dmass_matrix_dparam) |
Add the elemental contribution to the derivative of the jacobian matrix, mass matrix and the residuals vector with respect to the passed parameter. Note that this function should NOT initialise any entries. It must be called after the residuals vector and matrices have been initialised to zero. More... | |
virtual void | fill_in_contribution_to_hessian_vector_products (Vector< double > const &Y, DenseMatrix< double > const &C, DenseMatrix< double > &product) |
Fill in contribution to the product of the Hessian (derivative of Jacobian with respect to all variables) an eigenvector, Y, and other specified vectors, C (d(J_{ij})/d u_{k}) Y_{j} C_{k}. More... | |
virtual void | fill_in_contribution_to_inner_products (Vector< std::pair< unsigned, unsigned >> const &history_index, Vector< double > &inner_product) |
Fill in the contribution to the inner products between given pairs of history values. More... | |
virtual void | fill_in_contribution_to_inner_product_vectors (Vector< unsigned > const &history_index, Vector< Vector< double >> &inner_product_vector) |
Fill in the contributions to the vectors that when taken as dot product with other history values give the inner product over the element. More... | |
Protected Member Functions inherited from oomph::RefineableSolidElement | |
void | assemble_local_to_lagrangian_jacobian (const DShape &dpsids, DenseMatrix< double > &jacobian) const |
Assemble the jacobian matrix for the mapping from local to lagrangian coordinates, given the derivatives of the shape function Overload the standard version to use the hanging information for the lagrangian coordinates. More... | |
void | assemble_local_to_lagrangian_jacobian2 (const DShape &d2psids, DenseMatrix< double > &jacobian2) const |
Assemble the the "jacobian" matrix of second derivatives, given the second derivatives of the shape functions w.r.t. local coordinates Overload the standard version to use the hanging information for the lagrangian coordinates. More... | |
double | local_to_lagrangian_mapping_diagonal (const DShape &dpsids, DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const |
Calculate the mapping from local to Lagrangian coordinates given the derivatives of the shape functions w.r.t the local coorindates. assuming that the coordinates are aligned in the direction of the local coordinates, i.e. there are no cross terms and the jacobian is diagonal. This function returns the determinant of the jacobian, the jacobian and the inverse jacobian. More... | |
Protected Member Functions inherited from oomph::RefineableElement | |
void | assemble_local_to_eulerian_jacobian (const DShape &dpsids, DenseMatrix< double > &jacobian) const |
Assemble the jacobian matrix for the mapping from local to Eulerian coordinates, given the derivatives of the shape function w.r.t the local coordinates. Overload the standard version to use the hanging information for the Eulerian coordinates. More... | |
void | assemble_local_to_eulerian_jacobian2 (const DShape &d2psids, DenseMatrix< double > &jacobian2) const |
Assemble the the "jacobian" matrix of second derivatives of the mapping from local to Eulerian coordinates, given the second derivatives of the shape functions w.r.t. local coordinates. Overload the standard version to use the hanging information for the Eulerian coordinates. More... | |
void | assemble_eulerian_base_vectors (const DShape &dpsids, DenseMatrix< double > &interpolated_G) const |
Assemble the covariant Eulerian base vectors, assuming that the derivatives of the shape functions with respect to the local coordinates have already been constructed. Overload the standard version to account for hanging nodes. More... | |
double | local_to_eulerian_mapping_diagonal (const DShape &dpsids, DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const |
Calculate the mapping from local to Eulerian coordinates given the derivatives of the shape functions w.r.t the local coordinates. assuming that the coordinates are aligned in the direction of the local coordinates, i.e. there are no cross terms and the jacobian is diagonal. This funciton returns the determinant of the jacobian, the jacobian and the inverse jacobian. Overload the standard version to take hanging info into account. More... | |
void | assign_hanging_local_eqn_numbers (const bool &store_local_dof_pt) |
Assign the local equation numbers for hanging node variables. More... | |
virtual void | fill_in_jacobian_from_nodal_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian) |
Calculate the contributions to the jacobian from the nodal degrees of freedom using finite differences. This version is overloaded to take hanging node information into account. More... | |
Static Protected Member Functions inherited from oomph::RefineableElement | |
static void | check_value_id (const int &n_continuously_interpolated_values, const int &value_id) |
Static helper function that is used to check that the value_id is in range. More... | |
Protected Attributes inherited from oomph::PVDEquationsBase< DIM > | |
IsotropicGrowthFctPt | Isotropic_growth_fct_pt |
Pointer to isotropic growth function. More... | |
PrestressFctPt | Prestress_fct_pt |
Pointer to prestress function. More... | |
ConstitutiveLaw * | Constitutive_law_pt |
Pointer to the constitutive law. More... | |
double * | Lambda_sq_pt |
Timescale ratio (non-dim. density) More... | |
bool | Unsteady |
Flag that switches inertia on/off. More... | |
BodyForceFctPt | Body_force_fct_pt |
Pointer to body force function. More... | |
bool | Evaluate_jacobian_by_fd |
Use FD to evaluate Jacobian. More... | |
Protected Attributes inherited from oomph::SolidFiniteElement | |
MacroElement * | Undeformed_macro_elem_pt |
Pointer to the element's "undeformed" macro element (NULL by default) More... | |
SolidInitialCondition * | Solid_ic_pt |
Pointer to object that specifies the initial condition. More... | |
bool | Solve_for_consistent_newmark_accel_flag |
Flag to indicate which system of equations to solve when assigning initial conditions for time-dependent problems. If true, solve for the history value that corresponds to the acceleration in the Newmark scheme by demanding that the PDE is satisifed at the initial time. In this case the Jacobian is replaced by the mass matrix. More... | |
Protected Attributes inherited from oomph::FiniteElement | |
MacroElement * | Macro_elem_pt |
Pointer to the element's macro element (NULL by default) More... | |
Protected Attributes inherited from oomph::GeneralisedElement | |
int | Non_halo_proc_ID |
Non-halo processor ID for Data; -1 if it's not a halo. More... | |
bool | Must_be_kept_as_halo |
Does this element need to be kept as a halo element during a distribute? More... | |
Protected Attributes inherited from oomph::GeomObject | |
unsigned | NLagrangian |
Number of Lagrangian (intrinsic) coordinates. More... | |
unsigned | Ndim |
Number of Eulerian coordinates. More... | |
TimeStepper * | Geom_object_time_stepper_pt |
Timestepper (used to handle access to geometry at previous timesteps) More... | |
Protected Attributes inherited from oomph::RefineableSolidElement | |
bool | Use_undeformed_macro_element_for_new_lagrangian_coords |
Flag deciding if the Lagrangian coordinates of newly-created interior SolidNodes are to be determined by the father element's undeformed MacroElement representation (if it has one). Default: False as it means that, following a refinement an element is no longer in equilbrium (as the Lagrangian coordinate is determined differently from the Eulerian one). However, basing the Lagrangian coordinates on the undeformed MacroElement can be more stable numerically and for steady problems it's not a big deal either way as the difference between the two formulations only matters at finite resolution so we have no right to say that one is "more correct" than the other... More... | |
Protected Attributes inherited from oomph::RefineableElement | |
Tree * | Tree_pt |
A pointer to a general tree object. More... | |
unsigned | Refine_level |
Refinement level. More... | |
bool | To_be_refined |
Flag for refinement. More... | |
bool | Refinement_is_enabled |
Flag to indicate suppression of any refinement. More... | |
bool | Sons_to_be_unrefined |
Flag for unrefinement. More... | |
long | Number |
Global element number – for plotting/validation purposes. More... | |
Static Protected Attributes inherited from oomph::PVDEquationsBase< DIM > | |
static double | Default_lambda_sq_value = 1.0 |
Static default value for timescale ratio (1.0 – for natural scaling) More... | |
Static Protected Attributes inherited from oomph::FiniteElement | |
static const unsigned | Default_Initial_Nvalue = 0 |
Default return value for required_nvalue(n) which gives the number of "data" values required by the element at node n; for example, solving a Poisson equation would required only one "data" value at each node. The defaults is set to zero, because a general element is problem-less. More... | |
static const double | Node_location_tolerance = 1.0e-14 |
Default value for the tolerance to be used when locating nodes via local coordinates. More... | |
static const unsigned | N2deriv [] = {0, 1, 3, 6} |
Static array that holds the number of second derivatives as a function of the dimension of the element. More... | |
Static Protected Attributes inherited from oomph::GeneralisedElement | |
static DenseMatrix< double > | Dummy_matrix |
Empty dense matrix used as a dummy argument to combined residual and jacobian functions in the case when only the residuals are being assembled. More... | |
static std::deque< double * > | Dof_pt_deque |
Static storage for deque used to add_global_equation_numbers when pointers to the dofs in each element are not required. More... | |
Static Protected Attributes inherited from oomph::RefineableElement | |
static double | Max_integrity_tolerance = 1.0e-8 |
Max. allowed discrepancy in element integrity check. More... | |
Class for refineable QPVDElement elements.
Definition at line 178 of file refineable_solid_elements.h.
|
inline |
Constructor:
Definition at line 184 of file refineable_solid_elements.h.
|
inlinevirtual |
No additional hanging node procedures are required for the solid elements.
Reimplemented from oomph::RefineableElement.
Definition at line 217 of file refineable_solid_elements.h.
|
inlinevirtual |
Order of recovery shape functions for Z2 error estimation: Same order as shape functions.
Implements oomph::ElementWithZ2ErrorEstimator.
Definition at line 210 of file refineable_solid_elements.h.
|
inlinevirtual |
Number of vertex nodes in the element.
Implements oomph::ElementWithZ2ErrorEstimator.
Definition at line 197 of file refineable_solid_elements.h.
References oomph::FiniteElement::nvertex_node().
|
inlinevirtual |
Empty rebuild from sons, no need to reconstruct anything here.
Implements oomph::RefineableElement.
Definition at line 194 of file refineable_solid_elements.h.
|
inlinevirtual |
Pointer to the j-th vertex node in the element.
Implements oomph::ElementWithZ2ErrorEstimator.
Definition at line 203 of file refineable_solid_elements.h.
References oomph::FiniteElement::vertex_node_pt().