oomph::DGElement Class Referenceabstract

A Base class for DGElements. More...

#include <dg_elements.h>

+ Inheritance diagram for oomph::DGElement:

Public Member Functions

 DGElement ()
 Constructor, initialise the pointers to zero. More...
 
virtual ~DGElement ()
 
bool mass_matrix_has_been_computed ()
 
void enable_mass_matrix_reuse ()
 Function that allows the reuse of the mass matrix. More...
 
void disable_mass_matrix_reuse ()
 Function that disables the reuse of the mass matrix. More...
 
virtual void set_mass_matrix_from_element (DGElement *const &element_pt)
 Set the mass matrix to point to one in another element. More...
 
void pre_compute_mass_matrix ()
 Function that computes and stores the (inverse) mass matrix. More...
 
virtual void build_all_faces ()=0
 
virtual void get_inverse_mass_matrix_times_residuals (Vector< double > &minv_res)
 
void construct_boundary_nodes_and_faces (DGMesh *const &mesh_pt, std::vector< bool > &boundary_flag, TimeStepper *const &time_stepper_pt)
 
void construct_nodes_and_faces (DGMesh *const &mesh_pt, TimeStepper *const &time_stepper_pt)
 Construct the nodes and faces of the element. More...
 
void set_mesh_pt (DGMesh *&mesh_pt)
 
unsigned nface () const
 Return the number of faces. More...
 
DGFaceElementface_element_pt (const unsigned &i)
 Access function for the faces. More...
 
void output_faces (std::ostream &outfile)
 Output the faces of the element. More...
 
void get_neighbouring_face_and_local_coordinate (const int &face_index, const Vector< double > &s, FaceElement *&face_element_pt, Vector< double > &s_face)
 Return the neighbour info. More...
 
void setup_face_neighbour_info (const bool &add_face_data_as_external)
 
void add_flux_contributions_to_residuals (Vector< double > &residuals, DenseMatrix< double > &jacobian, unsigned flag)
 
void slope_limit (SlopeLimiter *const &slope_limiter_pt)
 Limit the slope within the element. More...
 
virtual void calculate_element_averages (double *&average_values)
 Calculate the averages in the element. More...
 
void calculate_averages ()
 Calculate the elemental averages. More...
 
doubleaverage_value (const unsigned &i)
 Return the average values. More...
 
const doubleaverage_value (const unsigned &i) const
 Return the average values. More...
 
- Public Member Functions inherited from oomph::FiniteElement
void set_dimension (const unsigned &dim)
 
void set_nodal_dimension (const unsigned &nodal_dim)
 
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)
 
int nodal_local_eqn (const unsigned &n, const unsigned &i) const
 
double dJ_eulerian_at_knot (const unsigned &ipt, Shape &psi, DenseMatrix< double > &djacobian_dX) const
 
 FiniteElement ()
 Constructor. More...
 
virtual ~FiniteElement ()
 
 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
 
void get_centre_of_gravity_and_max_radius_in_terms_of_zeta (Vector< double > &cog, double &max_radius) const
 
virtual void local_coordinate_of_node (const unsigned &j, Vector< double > &s) const
 
virtual void local_fraction_of_node (const unsigned &j, Vector< double > &s_fraction)
 
virtual double local_one_d_fraction_of_node (const unsigned &n1d, const unsigned &i)
 
virtual void set_macro_elem_pt (MacroElement *macro_elem_pt)
 
MacroElementmacro_elem_pt ()
 Access function to pointer to macro element. More...
 
void get_x (const Vector< double > &s, Vector< double > &x) const
 
void get_x (const unsigned &t, const Vector< double > &s, Vector< double > &x)
 
virtual void get_x_from_macro_element (const Vector< double > &s, Vector< double > &x) const
 
virtual void get_x_from_macro_element (const unsigned &t, const Vector< double > &s, Vector< double > &x)
 
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
 
virtual void shape_at_knot (const unsigned &ipt, Shape &psi) const
 
virtual void dshape_local (const Vector< double > &s, Shape &psi, DShape &dpsids) const
 
virtual void dshape_local_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsids) const
 
virtual void d2shape_local (const Vector< double > &s, Shape &psi, DShape &dpsids, DShape &d2psids) const
 
virtual void d2shape_local_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsids, DShape &d2psids) const
 
virtual double J_eulerian (const Vector< double > &s) const
 
virtual double J_eulerian_at_knot (const unsigned &ipt) const
 
void check_J_eulerian_at_knots (bool &passed) const
 
void check_jacobian (const double &jacobian) const
 
double dshape_eulerian (const Vector< double > &s, Shape &psi, DShape &dpsidx) const
 
virtual double dshape_eulerian_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsidx) const
 
virtual double dshape_eulerian_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsi, DenseMatrix< double > &djacobian_dX, RankFourTensor< double > &d_dpsidx_dX) const
 
double d2shape_eulerian (const Vector< double > &s, Shape &psi, DShape &dpsidx, DShape &d2psidx) const
 
virtual double d2shape_eulerian_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsidx, DShape &d2psidx) const
 
virtual void assign_nodal_local_eqn_numbers (const bool &store_local_dof_pt)
 
virtual void describe_local_dofs (std::ostream &out, const std::string &current_string) const
 
virtual void describe_nodal_local_dofs (std::ostream &out, const std::string &current_string) const
 
virtual void assign_all_generic_local_eqn_numbers (const bool &store_local_dof_pt)
 
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
 
double raw_nodal_position (const unsigned &n, const unsigned &i) const
 
double raw_nodal_position (const unsigned &t, const unsigned &n, const unsigned &i) const
 
double raw_dnodal_position_dt (const unsigned &n, const unsigned &i) const
 
double raw_dnodal_position_dt (const unsigned &n, const unsigned &j, const unsigned &i) const
 
double raw_nodal_position_gen (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double raw_nodal_position_gen (const unsigned &t, const unsigned &n, const unsigned &k, const unsigned &i) const
 
double raw_dnodal_position_gen_dt (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double raw_dnodal_position_gen_dt (const unsigned &j, const unsigned &n, const unsigned &k, const unsigned &i) const
 
double nodal_position (const unsigned &n, const unsigned &i) const
 
double nodal_position (const unsigned &t, const unsigned &n, const unsigned &i) const
 
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
 
double nodal_position_gen (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double nodal_position_gen (const unsigned &t, const unsigned &n, const unsigned &k, const unsigned &i) const
 
double dnodal_position_gen_dt (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double dnodal_position_gen_dt (const unsigned &j, const unsigned &n, const unsigned &k, const unsigned &i) const
 
virtual void get_dresidual_dnodal_coordinates (RankThreeTensor< double > &dresidual_dnodal_coordinates)
 
virtual void disable_ALE ()
 
virtual void enable_ALE ()
 
virtual unsigned required_nvalue (const unsigned &n) const
 
unsigned nnodal_position_type () const
 
bool has_hanging_nodes () const
 
unsigned nodal_dimension () const
 Return the required Eulerian dimension of the nodes in this element. More...
 
virtual unsigned nvertex_node () const
 
virtual Nodevertex_node_pt (const unsigned &j) const
 
virtual Nodeconstruct_node (const unsigned &n)
 
virtual Nodeconstruct_node (const unsigned &n, TimeStepper *const &time_stepper_pt)
 
virtual Nodeconstruct_boundary_node (const unsigned &n)
 
virtual Nodeconstruct_boundary_node (const unsigned &n, TimeStepper *const &time_stepper_pt)
 
int get_node_number (Node *const &node_pt) const
 
virtual Nodeget_node_at_local_coordinate (const Vector< double > &s) const
 
double raw_nodal_value (const unsigned &n, const unsigned &i) const
 
double raw_nodal_value (const unsigned &t, const unsigned &n, const unsigned &i) const
 
double nodal_value (const unsigned &n, const unsigned &i) const
 
double nodal_value (const unsigned &t, const unsigned &n, const unsigned &i) const
 
unsigned dim () const
 
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
 
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
 
virtual double interpolated_dxdt (const Vector< double > &s, const unsigned &i, const unsigned &t)
 
virtual void interpolated_dxdt (const Vector< double > &s, const unsigned &t, Vector< double > &dxdt)
 
unsigned ngeom_data () const
 
Datageom_data_pt (const unsigned &j)
 
void position (const Vector< double > &zeta, Vector< double > &r) const
 
void position (const unsigned &t, const Vector< double > &zeta, Vector< double > &r) const
 
void dposition_dt (const Vector< double > &zeta, const unsigned &t, Vector< double > &drdt)
 
virtual double zeta_nodal (const unsigned &n, const unsigned &k, const unsigned &i) const
 
void interpolated_zeta (const Vector< double > &s, Vector< double > &zeta) const
 
void locate_zeta (const Vector< double > &zeta, GeomObject *&geom_object_pt, Vector< double > &s, const bool &use_coordinate_as_initial_guess=false)
 
virtual void node_update ()
 
virtual void identify_field_data_for_interactions (std::set< std::pair< Data *, unsigned >> &paired_field_data)
 
virtual void identify_geometric_data (std::set< Data * > &geometric_data_pt)
 
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
 
virtual double compute_physical_size () const
 
virtual void point_output_data (const Vector< double > &s, Vector< double > &data)
 
void point_output (std::ostream &outfile, const Vector< double > &s)
 
virtual unsigned nplot_points_paraview (const unsigned &nplot) const
 
virtual unsigned nsub_elements_paraview (const unsigned &nplot) const
 
void output_paraview (std::ofstream &file_out, const unsigned &nplot) const
 
virtual void write_paraview_output_offset_information (std::ofstream &file_out, const unsigned &nplot, unsigned &counter) const
 
virtual void write_paraview_type (std::ofstream &file_out, const unsigned &nplot) const
 
virtual void write_paraview_offsets (std::ofstream &file_out, const unsigned &nplot, unsigned &offset_sum) const
 
virtual unsigned nscalar_paraview () const
 
virtual void scalar_value_paraview (std::ofstream &file_out, const unsigned &i, const unsigned &nplot) const
 
virtual void scalar_value_fct_paraview (std::ofstream &file_out, const unsigned &i, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt) const
 
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
 
virtual std::string scalar_name_paraview (const unsigned &i) const
 
virtual void output (std::ostream &outfile)
 
virtual void output (std::ostream &outfile, const unsigned &n_plot)
 
virtual void output (const unsigned &t, std::ostream &outfile, const unsigned &n_plot) const
 
virtual void output (FILE *file_pt)
 
virtual void output (FILE *file_pt, const unsigned &n_plot)
 
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
 
virtual std::string tecplot_zone_string (const unsigned &nplot) const
 
virtual void write_tecplot_zone_footer (std::ostream &outfile, const unsigned &nplot) const
 
virtual void write_tecplot_zone_footer (FILE *file_pt, const unsigned &nplot) const
 
virtual unsigned nplot_points (const unsigned &nplot) const
 
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)
 
virtual void compute_error (FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, Vector< double > &error, Vector< double > &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, Vector< double > &error, Vector< double > &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, Vector< double > &error, Vector< double > &norm)
 
virtual void compute_abs_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error)
 
void integrate_fct (FiniteElement::SteadyExactSolutionFctPt integrand_fct_pt, Vector< double > &integral)
 Integrate Vector-valued function over element. More...
 
void integrate_fct (FiniteElement::UnsteadyExactSolutionFctPt integrand_fct_pt, const double &time, Vector< double > &integral)
 Integrate Vector-valued time-dep function over element. More...
 
virtual void build_face_element (const int &face_index, FaceElement *face_element_pt)
 
virtual unsigned self_test ()
 
virtual unsigned get_bulk_node_number (const int &face_index, const unsigned &i) const
 
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
 
virtual BulkCoordinateDerivativesFctPt bulk_coordinate_derivatives_fct_pt (const int &face_index) const
 
- Public Member Functions inherited from oomph::GeneralisedElement
 GeneralisedElement ()
 Constructor: Initialise all pointers and all values to zero. More...
 
virtual ~GeneralisedElement ()
 Virtual destructor to clean up any memory allocated by the object. More...
 
 GeneralisedElement (const GeneralisedElement &)=delete
 Broken copy constructor. 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
 
int local_eqn_number (const unsigned long &ieqn_global) const
 
unsigned add_external_data (Data *const &data_pt, const bool &fd=true)
 
bool external_data_fd (const unsigned &i) const
 
void exclude_external_data_fd (const unsigned &i)
 
void include_external_data_fd (const unsigned &i)
 
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)
 
void assign_internal_eqn_numbers (unsigned long &global_number, Vector< double * > &Dof_pt)
 
void describe_dofs (std::ostream &out, const std::string &current_string) const
 
void add_internal_value_pt_to_map (std::map< unsigned, double * > &map_of_value_pt)
 
virtual void assign_local_eqn_numbers (const bool &store_local_dof_pt)
 
virtual void complete_setup_of_dependencies ()
 
virtual void get_residuals (Vector< double > &residuals)
 
virtual void get_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 
virtual void get_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &mass_matrix)
 
virtual void get_jacobian_and_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
 
virtual void get_dresiduals_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam)
 
virtual void get_djacobian_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam)
 
virtual void get_djacobian_and_dmass_matrix_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam, DenseMatrix< double > &dmass_matrix_dparam)
 
virtual void get_hessian_vector_products (Vector< double > const &Y, DenseMatrix< double > const &C, DenseMatrix< double > &product)
 
virtual void get_inner_products (Vector< std::pair< unsigned, unsigned >> const &history_index, Vector< double > &inner_product)
 
virtual void get_inner_product_vectors (Vector< unsigned > const &history_index, Vector< Vector< double >> &inner_product_vector)
 
virtual void compute_norm (Vector< double > &norm)
 
virtual void compute_norm (double &norm)
 
virtual unsigned ndof_types () const
 
virtual void get_dof_numbers_for_unknowns (std::list< std::pair< unsigned long, unsigned >> &dof_lookup_list) const
 
- Public Member Functions inherited from oomph::GeomObject
 GeomObject ()
 Default constructor. More...
 
 GeomObject (const unsigned &ndim)
 
 GeomObject (const unsigned &nlagrangian, const unsigned &ndim)
 
 GeomObject (const unsigned &nlagrangian, const unsigned &ndim, TimeStepper *time_stepper_pt)
 
 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 ()
 
TimeSteppertime_stepper_pt () const
 
virtual void position (const double &t, const Vector< double > &zeta, Vector< double > &r) const
 
virtual void dposition (const Vector< double > &zeta, DenseMatrix< double > &drdzeta) const
 
virtual void d2position (const Vector< double > &zeta, RankThreeTensor< double > &ddrdzeta) const
 
virtual void d2position (const Vector< double > &zeta, Vector< double > &r, DenseMatrix< double > &drdzeta, RankThreeTensor< double > &ddrdzeta) const
 

Protected Member Functions

virtual unsigned required_nflux ()
 Set the number of flux components. More...
 
- Protected Member Functions inherited from oomph::FiniteElement
virtual void assemble_local_to_eulerian_jacobian (const DShape &dpsids, DenseMatrix< double > &jacobian) const
 
virtual void assemble_local_to_eulerian_jacobian2 (const DShape &d2psids, DenseMatrix< double > &jacobian2) const
 
virtual void assemble_eulerian_base_vectors (const DShape &dpsids, DenseMatrix< double > &interpolated_G) const
 
template<unsigned DIM>
double invert_jacobian (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 
virtual double invert_jacobian_mapping (const DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 
virtual double local_to_eulerian_mapping (const DShape &dpsids, DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 
double local_to_eulerian_mapping (const DShape &dpsids, DenseMatrix< double > &inverse_jacobian) const
 
virtual double local_to_eulerian_mapping_diagonal (const DShape &dpsids, DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 
virtual void dJ_eulerian_dnodal_coordinates (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const
 
template<unsigned DIM>
void dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const
 
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
 
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
 
virtual void transform_derivatives (const DenseMatrix< double > &inverse_jacobian, DShape &dbasis) const
 
void transform_derivatives_diagonal (const DenseMatrix< double > &inverse_jacobian, DShape &dbasis) const
 
virtual void transform_second_derivatives (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const
 
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
 
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
 
virtual void fill_in_jacobian_from_nodal_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 
void fill_in_jacobian_from_nodal_by_fd (DenseMatrix< double > &jacobian)
 
virtual void update_before_nodal_fd ()
 
virtual void reset_after_nodal_fd ()
 
virtual void update_in_nodal_fd (const unsigned &i)
 
virtual void reset_in_nodal_fd (const unsigned &i)
 
void fill_in_contribution_to_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 
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
 
template<>
void dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const
 
template<>
void dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const
 
template<>
void dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const
 
template<>
void dJ_eulerian_dnodal_coordinates_templated_helper (const DenseMatrix< double > &jacobian, const DShape &dpsids, DenseMatrix< double > &djacobian_dX) const
 
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
 
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
 
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
 
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
 
template<>
void transform_second_derivatives_template (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const
 
template<>
void transform_second_derivatives_template (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const
 
template<>
void transform_second_derivatives_diagonal (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const
 
template<>
void transform_second_derivatives_diagonal (const DenseMatrix< double > &jacobian, const DenseMatrix< double > &inverse_jacobian, const DenseMatrix< double > &jacobian2, DShape &dbasis, DShape &d2basis) const
 
- Protected Member Functions inherited from oomph::GeneralisedElement
unsigned add_internal_data (Data *const &data_pt, const bool &fd=true)
 
bool internal_data_fd (const unsigned &i) const
 
void exclude_internal_data_fd (const unsigned &i)
 
void include_internal_data_fd (const unsigned &i)
 
void clear_global_eqn_numbers ()
 
void add_global_eqn_numbers (std::deque< unsigned long > const &global_eqn_numbers, std::deque< double * > const &global_dof_pt)
 
virtual void assign_internal_and_external_local_eqn_numbers (const bool &store_local_dof_pt)
 
virtual void assign_additional_local_eqn_numbers ()
 
int internal_local_eqn (const unsigned &i, const unsigned &j) const
 
int external_local_eqn (const unsigned &i, const unsigned &j)
 
virtual void fill_in_contribution_to_residuals (Vector< double > &residuals)
 
void fill_in_jacobian_from_internal_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 
void fill_in_jacobian_from_internal_by_fd (DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 
void fill_in_jacobian_from_external_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 
void fill_in_jacobian_from_external_by_fd (DenseMatrix< double > &jacobian, const bool &fd_all_data=false)
 
virtual void update_before_internal_fd ()
 
virtual void reset_after_internal_fd ()
 
virtual void update_in_internal_fd (const unsigned &i)
 
virtual void reset_in_internal_fd (const unsigned &i)
 
virtual void update_before_external_fd ()
 
virtual void reset_after_external_fd ()
 
virtual void update_in_external_fd (const unsigned &i)
 
virtual void reset_in_external_fd (const unsigned &i)
 
virtual void fill_in_contribution_to_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &mass_matrix)
 
virtual void fill_in_contribution_to_jacobian_and_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
 
virtual void fill_in_contribution_to_dresiduals_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam)
 
virtual void fill_in_contribution_to_djacobian_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam)
 
virtual void fill_in_contribution_to_djacobian_and_dmass_matrix_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam, DenseMatrix< double > &dmass_matrix_dparam)
 
virtual void fill_in_contribution_to_hessian_vector_products (Vector< double > const &Y, DenseMatrix< double > const &C, DenseMatrix< double > &product)
 
virtual void fill_in_contribution_to_inner_products (Vector< std::pair< unsigned, unsigned >> const &history_index, Vector< double > &inner_product)
 
virtual void fill_in_contribution_to_inner_product_vectors (Vector< unsigned > const &history_index, Vector< Vector< double >> &inner_product_vector)
 

Protected Attributes

Vector< FaceElement * > Face_element_pt
 Vector of pointers to faces of the element. More...
 
DGMeshDG_mesh_pt
 Pointer to Mesh, which will be responsible for the neighbour finding. More...
 
DenseDoubleMatrixM_pt
 
doubleAverage_value
 
bool Mass_matrix_reuse_is_enabled
 Boolean flag to indicate whether to reuse the mass matrix. More...
 
bool Mass_matrix_has_been_computed
 
bool Can_delete_mass_matrix
 
- Protected Attributes inherited from oomph::FiniteElement
MacroElementMacro_elem_pt
 Pointer to the element's macro element (NULL by default) More...
 
- Protected Attributes inherited from oomph::GeomObject
unsigned NLagrangian
 Number of Lagrangian (intrinsic) coordinates. More...
 
unsigned Ndim
 Number of Eulerian coordinates. More...
 
TimeStepperGeom_object_time_stepper_pt
 

Friends

class DGFaceElement
 

Additional Inherited Members

- Public Types inherited from oomph::FiniteElement
typedef void(* SteadyExactSolutionFctPt) (const Vector< double > &, Vector< double > &)
 
typedef void(* UnsteadyExactSolutionFctPt) (const double &, const Vector< double > &, Vector< double > &)
 
- 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
 
static bool Suppress_output_while_checking_for_inverted_elements
 
- Static Public Attributes inherited from oomph::GeneralisedElement
static bool Suppress_warning_about_repeated_internal_data
 
static bool Suppress_warning_about_repeated_external_data = true
 
static double Default_fd_jacobian_step = 1.0e-8
 
- Static Protected Attributes inherited from oomph::FiniteElement
static const unsigned Default_Initial_Nvalue = 0
 Default value for the number of values at a node. More...
 
static const double Node_location_tolerance = 1.0e-14
 
static const unsigned N2deriv [] = {0, 1, 3, 6}
 
- Static Protected Attributes inherited from oomph::GeneralisedElement
static DenseMatrix< doubleDummy_matrix
 
static std::deque< double * > Dof_pt_deque
 

Detailed Description

A Base class for DGElements.

Constructor & Destructor Documentation

◆ DGElement()

oomph::DGElement::DGElement ( )
inline

Constructor, initialise the pointers to zero.

201  : DG_mesh_pt(0),
202  M_pt(0),
203  Average_value(0),
207  {
208  }
bool Can_delete_mass_matrix
Definition: dg_elements.h:190
DGMesh * DG_mesh_pt
Pointer to Mesh, which will be responsible for the neighbour finding.
Definition: dg_elements.h:171
double * Average_value
Definition: dg_elements.h:179
bool Mass_matrix_has_been_computed
Definition: dg_elements.h:186
bool Mass_matrix_reuse_is_enabled
Boolean flag to indicate whether to reuse the mass matrix.
Definition: dg_elements.h:182
DenseDoubleMatrix * M_pt
Definition: dg_elements.h:175

◆ ~DGElement()

virtual oomph::DGElement::~DGElement ( )
inlinevirtual

Virtual destructor, destroy the mass matrix, if we created it Clean-up storage associated with average values

213  {
214  if ((M_pt != 0) && Can_delete_mass_matrix)
215  {
216  delete M_pt;
217  }
218  if (this->Average_value != 0)
219  {
220  delete[] Average_value;
221  Average_value = 0;
222  }
223  }

References Average_value, Can_delete_mass_matrix, and M_pt.

Member Function Documentation

◆ add_flux_contributions_to_residuals()

void oomph::DGElement::add_flux_contributions_to_residuals ( Vector< double > &  residuals,
DenseMatrix< double > &  jacobian,
unsigned  flag 
)
inline

Loop over all faces and add their integrated numerical fluxes to the residuals

409  {
410  // Add up the contributions from each face
411  unsigned n_face = this->nface();
412  for (unsigned f = 0; f < n_face; f++)
413  {
414  face_element_pt(f)->add_flux_contributions(residuals, jacobian, flag);
415  }
416  }
unsigned nface() const
Return the number of faces.
Definition: dg_elements.h:360
DGFaceElement * face_element_pt(const unsigned &i)
Access function for the faces.
Definition: dg_elements.h:366
void add_flux_contributions(Vector< double > &residuals, DenseMatrix< double > &jacobian, unsigned flag)
Add the contribution from integrating the numerical flux.
Definition: dg_elements.cc:416
static int f(const TensorMap< Tensor< int, 3 > > &tensor)
Definition: cxx11_tensor_map.cpp:237

References oomph::DGFaceElement::add_flux_contributions(), f(), face_element_pt(), and nface().

◆ average_value() [1/2]

double& oomph::DGElement::average_value ( const unsigned i)
inline

Return the average values.

437  {
438  if (Average_value == 0)
439  {
440  throw OomphLibError("Averages not calculated yet",
443  }
444  return Average_value[i];
445  }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References Average_value, i, OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.

◆ average_value() [2/2]

const double& oomph::DGElement::average_value ( const unsigned i) const
inline

Return the average values.

450  {
451  if (Average_value == 0)
452  {
453  throw OomphLibError("Averages not calculated yet",
456  }
457  return Average_value[i];
458  }

References Average_value, i, OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.

◆ build_all_faces()

◆ calculate_averages()

void oomph::DGElement::calculate_averages ( )
inline

Calculate the elemental averages.

431  {
433  }
virtual void calculate_element_averages(double *&average_values)
Calculate the averages in the element.
Definition: dg_elements.h:422

References calculate_element_averages().

◆ calculate_element_averages()

virtual void oomph::DGElement::calculate_element_averages ( double *&  average_values)
inlinevirtual

◆ construct_boundary_nodes_and_faces()

void oomph::DGElement::construct_boundary_nodes_and_faces ( DGMesh *const &  mesh_pt,
std::vector< bool > &  boundary_flag,
TimeStepper *const &  time_stepper_pt 
)
inline

Construct all nodes and faces of the element. The vector of booleans boundary should be the same size as the number of nodes and if any entries are true that node will be constructed as a boundary node.

294  {
295  // Construct the nodes (This should not be used in a base class)
296  const unsigned n_node = this->nnode();
297 #ifdef PARANOID
298  if (boundary_flag.size() != n_node)
299  {
300  std::ostringstream error_stream;
301  error_stream
302  << "Size of boundary_flag vector is " << boundary_flag.size() << "\n"
303  << "It must be the same as the number of nodes in the element "
304  << n_node << "\n";
305 
306  throw OomphLibError(
307  error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
308  }
309 #endif
310 
311  // Loop over the nodes
312  for (unsigned n = 0; n < n_node; n++)
313  {
314  // If the node is marked on a boundary construct a boundary node
315  if (boundary_flag[n])
316  {
318  }
319  // Otherwise, construct a normal node
320  else
321  {
322  (void)this->construct_node(n, time_stepper_pt);
323  }
324  }
325 
326  // Make the faces
327  this->build_all_faces();
328 
329  // Set the Mesh pointer
330  DG_mesh_pt = mesh_pt;
331  }
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
virtual void build_all_faces()=0
virtual Node * construct_node(const unsigned &n)
Definition: elements.h:2509
unsigned nnode() const
Return the number of nodes.
Definition: elements.h:2210
virtual Node * construct_boundary_node(const unsigned &n)
Definition: elements.h:2538
TimeStepper *& time_stepper_pt()
Definition: geom_objects.h:192

References build_all_faces(), oomph::FiniteElement::construct_boundary_node(), oomph::FiniteElement::construct_node(), n, oomph::FiniteElement::nnode(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, and oomph::GeomObject::time_stepper_pt().

◆ construct_nodes_and_faces()

void oomph::DGElement::construct_nodes_and_faces ( DGMesh *const &  mesh_pt,
TimeStepper *const &  time_stepper_pt 
)
inline

Construct the nodes and faces of the element.

337  {
338  // Loop over the nodes
339  const unsigned n_node = this->nnode();
340  for (unsigned n = 0; n < n_node; n++)
341  {
342  // Construct the node and ignore the return value
343  (void)this->construct_node(n, time_stepper_pt);
344  }
345 
346  // Make the faces
347  this->build_all_faces();
348 
349  // Set the Mesh pointer
350  DG_mesh_pt = mesh_pt;
351  }

References build_all_faces(), oomph::FiniteElement::construct_node(), n, and oomph::FiniteElement::nnode().

◆ disable_mass_matrix_reuse()

void oomph::DGElement::disable_mass_matrix_reuse ( )
inline

Function that disables the reuse of the mass matrix.

241  {
242  // If we are using another element's mass matrix then reset our pointer
243  // to zero
245  {
246  M_pt = 0;
247  }
248  // Otherwise we do not reuse the mass matrix
250  // Recalculate the mass matrix
252  }

References Can_delete_mass_matrix, M_pt, Mass_matrix_has_been_computed, and Mass_matrix_reuse_is_enabled.

Referenced by oomph::Problem::disable_mass_matrix_reuse().

◆ enable_mass_matrix_reuse()

void oomph::DGElement::enable_mass_matrix_reuse ( )
inline

Function that allows the reuse of the mass matrix.

234  {
237  }

References Mass_matrix_has_been_computed, and Mass_matrix_reuse_is_enabled.

Referenced by oomph::Problem::enable_mass_matrix_reuse().

◆ face_element_pt()

DGFaceElement* oomph::DGElement::face_element_pt ( const unsigned i)
inline

Access function for the faces.

367  {
368  return dynamic_cast<DGFaceElement*>(Face_element_pt[i]);
369  }
friend class DGFaceElement
Definition: dg_elements.h:165
Vector< FaceElement * > Face_element_pt
Vector of pointers to faces of the element.
Definition: dg_elements.h:168

References Face_element_pt, and i.

Referenced by add_flux_contributions_to_residuals(), get_neighbouring_face_and_local_coordinate(), output_faces(), setup_face_neighbour_info(), and slope_limit().

◆ get_inverse_mass_matrix_times_residuals()

void oomph::DGElement::get_inverse_mass_matrix_times_residuals ( Vector< double > &  minv_res)
virtual

Function that returns the current value of the residuals multiplied by the inverse mass matrix (virtual so that it can be overloaded specific elements in which time saving tricks can be applied)

Function that returns the current value of the residuals multiplied by the inverse mass matrix (virtual so that it can be overloaded specific elements in which time and memory saving tricks can be applied)

Reimplemented in oomph::DGSpectralScalarAdvectionElement< 1, NNODE_1D >.

616  {
617  // If there are external data this is not going to work
618  if (nexternal_data() > 0)
619  {
620  std::ostringstream error_stream;
621  error_stream
622  << "Cannot use a discontinuous formulation for the mass matrix when\n"
623  << "there are external data.\n "
624  << "Do not call Problem::enable_discontinuous_formulation()\n";
625 
626  throw OomphLibError(
627  error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
628  }
629 
630  // Now let's assemble stuff
631  const unsigned n_dof = this->ndof();
632  // Allocate storage for the local mass matrix (if required)
633  if (M_pt == 0)
634  {
635  M_pt = new DenseDoubleMatrix;
636  }
637 
638  // Resize and initialise the vector that will holds the residuals
639  minv_res.resize(n_dof);
640  for (unsigned n = 0; n < n_dof; n++)
641  {
642  minv_res[n] = 0.0;
643  }
644 
645  // If we are recycling the mass matrix
647  {
648  // Get the residuals
649  this->fill_in_contribution_to_residuals(minv_res);
650  }
651  // Otherwise
652  else
653  {
654  // Resize the mass matrix
655  M_pt->resize(n_dof, n_dof);
656  // Initialise the entries to zero
657  M_pt->initialise(0.0);
658  // Get the local mass matrix and residuals
659  this->fill_in_contribution_to_mass_matrix(minv_res, *M_pt);
660 
661  // Now invert the mass matrix it will always be small
662  // This can possibly be streamlined (for example in spectral
663  // elements the mass matrix is diagonal)
664  M_pt->ludecompose();
665 
666  // The mass matrix has been computed
668  }
669 
670  // Always do the backsubstitution
671  M_pt->lubksub(minv_res);
672  }
virtual void lubksub(DoubleVector &rhs)
LU backsubstitution.
Definition: matrices.cc:202
virtual void ludecompose()
LU decomposition using DenseLU (default linea solver)
Definition: matrices.cc:192
void initialise(const T &val)
Initialize all values in the matrix to val.
Definition: matrices.h:514
void resize(const unsigned long &n)
Definition: matrices.h:498
unsigned nexternal_data() const
Return the number of external data objects.
Definition: elements.h:829
virtual void fill_in_contribution_to_residuals(Vector< double > &residuals)
Definition: elements.h:357
unsigned ndof() const
Return the number of equations/dofs in the element.
Definition: elements.h:835
virtual void fill_in_contribution_to_mass_matrix(Vector< double > &residuals, DenseMatrix< double > &mass_matrix)
Definition: elements.cc:1292

References oomph::GeneralisedElement::fill_in_contribution_to_mass_matrix(), oomph::GeneralisedElement::fill_in_contribution_to_residuals(), oomph::DenseMatrix< T >::initialise(), oomph::DenseDoubleMatrix::lubksub(), oomph::DenseDoubleMatrix::ludecompose(), M_pt, Mass_matrix_has_been_computed, Mass_matrix_reuse_is_enabled, n, oomph::GeneralisedElement::ndof(), oomph::GeneralisedElement::nexternal_data(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, and oomph::DenseMatrix< T >::resize().

Referenced by oomph::Problem::get_inverse_mass_matrix_times_residuals().

◆ get_neighbouring_face_and_local_coordinate()

void oomph::DGElement::get_neighbouring_face_and_local_coordinate ( const int face_index,
const Vector< double > &  s,
FaceElement *&  face_element_pt,
Vector< double > &  s_face 
)

Return the neighbour info.

680  {
681  DG_mesh_pt->neighbour_finder(this, face_index, s, face_element_pt, s_face);
682  }
virtual void neighbour_finder(FiniteElement *const &bulk_element_pt, const int &face_index, const Vector< double > &s_bulk, FaceElement *&face_element_pt, Vector< double > &s_face)
Definition: dg_elements.h:470
RealScalar s
Definition: level1_cplx_impl.h:130

References DG_mesh_pt, face_element_pt(), oomph::DGMesh::neighbour_finder(), and s.

◆ mass_matrix_has_been_computed()

bool oomph::DGElement::mass_matrix_has_been_computed ( )
inline

Access function for the boolean to indicate whether the mass matrix has been computed

228  {
230  }

References Mass_matrix_has_been_computed.

Referenced by set_mass_matrix_from_element().

◆ nface()

unsigned oomph::DGElement::nface ( ) const
inline

Return the number of faces.

361  {
362  return Face_element_pt.size();
363  }

References Face_element_pt.

Referenced by add_flux_contributions_to_residuals(), output_faces(), and setup_face_neighbour_info().

◆ output_faces()

void oomph::DGElement::output_faces ( std::ostream &  outfile)
inline

Output the faces of the element.

373  {
374  // Loop over the faces
375  unsigned n_face = nface();
376  for (unsigned f = 0; f < n_face; f++)
377  {
378  face_element_pt(f)->output(outfile);
379  }
380  }
virtual void output(std::ostream &outfile)
Definition: elements.h:3050

References f(), face_element_pt(), nface(), and oomph::FiniteElement::output().

◆ pre_compute_mass_matrix()

void oomph::DGElement::pre_compute_mass_matrix ( )

Function that computes and stores the (inverse) mass matrix.

579  {
580  // Now let's assemble stuff
581  const unsigned n_dof = this->ndof();
582  // Allocate storage for the local mass matrix (if required)
583  if (M_pt == 0)
584  {
585  M_pt = new DenseDoubleMatrix;
586  }
587 
588  // Resize and initialise the vector that will holds the residuals
589  Vector<double> dummy(n_dof, 0.0);
590 
591  // Resize the mass matrix
592  M_pt->resize(n_dof, n_dof);
593  // Initialise the entries to zero
594  M_pt->initialise(0.0);
595  // Get the local mass matrix and residuals
597 
598  // Now invert the mass matrix it will always be small
599  // This can possibly be streamlined (for example in spectral
600  // elements the mass matrix is diagonal)
601  M_pt->ludecompose();
602 
603  // The mass matrix has been computed
605  }

References oomph::GeneralisedElement::fill_in_contribution_to_mass_matrix(), oomph::DenseMatrix< T >::initialise(), oomph::DenseDoubleMatrix::ludecompose(), M_pt, Mass_matrix_has_been_computed, oomph::GeneralisedElement::ndof(), and oomph::DenseMatrix< T >::resize().

Referenced by set_mass_matrix_from_element().

◆ required_nflux()

◆ set_mass_matrix_from_element()

virtual void oomph::DGElement::set_mass_matrix_from_element ( DGElement *const &  element_pt)
inlinevirtual

Set the mass matrix to point to one in another element.

257  {
258  // If the element's mass matrix has not been computed, compute it!
259  if (!element_pt->mass_matrix_has_been_computed())
260  {
261  element_pt->pre_compute_mass_matrix();
262  }
263 
264  // Now set the mass matrix in this element to address that
265  // of element_pt
266  this->M_pt = element_pt->M_pt;
267  // We must reuse the mass matrix, or there will be trouble
268  // Because we will recalculate it in the original element
271  // We cannot delete the mass matrix
272  Can_delete_mass_matrix = false;
273  }

References Can_delete_mass_matrix, M_pt, Mass_matrix_has_been_computed, mass_matrix_has_been_computed(), Mass_matrix_reuse_is_enabled, and pre_compute_mass_matrix().

◆ set_mesh_pt()

void oomph::DGElement::set_mesh_pt ( DGMesh *&  mesh_pt)
inline
355  {
356  DG_mesh_pt = mesh_pt;
357  }

References DG_mesh_pt.

◆ setup_face_neighbour_info()

void oomph::DGElement::setup_face_neighbour_info ( const bool add_face_data_as_external)
inline

The boolean flag determines whether the data from the neighbouring elements is added as external data to the element (required for correct computation of the jacobian)

394  {
395  unsigned n_face = this->nface();
396  for (unsigned f = 0; f < n_face; f++)
397  {
398  face_element_pt(f)->setup_neighbour_info(add_face_data_as_external);
400  }
401  }
void setup_neighbour_info(const bool &add_neighbour_data_to_bulk)
Definition: dg_elements.cc:42
void report_info()
Output information about the present element and its neighbour.
Definition: dg_elements.cc:123

References f(), face_element_pt(), nface(), oomph::DGFaceElement::report_info(), and oomph::DGFaceElement::setup_neighbour_info().

◆ slope_limit()

void oomph::DGElement::slope_limit ( SlopeLimiter *const &  slope_limiter_pt)

Limit the slope within the element.

Limit the slope within an element.

687  {
688  // Firstly find the dimension
689  const unsigned n_dim = this->dim();
690  // Find the number of fluxes
691  const unsigned n_flux = this->required_nflux();
692 
693  switch (n_dim)
694  {
695  // One dimensional (easy-ish) case
696  case 1:
697  {
698  // Storage for the element and its neighbours
699  Vector<DGElement*> required_element_pt(3);
700  required_element_pt[0] = this;
701 
702  // Get the pointer to the element on the left
703  required_element_pt[1] = dynamic_cast<DGElement*>(
704  dynamic_cast<DGFaceElement*>(this->face_element_pt(0))
705  ->neighbour_face_pt(0)
706  ->bulk_element_pt());
707  // Get the pointer to the element on the right
708  required_element_pt[2] = dynamic_cast<DGElement*>(
709  dynamic_cast<DGFaceElement*>(this->face_element_pt(1))
710  ->neighbour_face_pt(0)
711  ->bulk_element_pt());
712 
713  // Loop over the fluxed
714  for (unsigned i = 0; i < n_flux; i++)
715  {
716  // Call our limiter, which will take as it's arguments, the current
717  // element and the required neighbours
718  slope_limiter_pt->limit(i, required_element_pt);
719  }
720  }
721  break;
722 
723  default:
724  {
725  std::ostringstream error_stream;
726  error_stream << "Slope limiting is not implemented for this dimension: "
727  << n_dim;
728  throw OomphLibError(
729  error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
730  }
731  }
732  }
DGElement()
Constructor, initialise the pointers to zero.
Definition: dg_elements.h:200
virtual unsigned required_nflux()
Set the number of flux components.
Definition: dg_elements.h:193
unsigned dim() const
Definition: elements.h:2611

References oomph::FaceElement::bulk_element_pt(), oomph::FiniteElement::dim(), face_element_pt(), i, oomph::SlopeLimiter::limit(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, and required_nflux().

Friends And Related Function Documentation

◆ DGFaceElement

friend class DGFaceElement
friend

The DGFaceElement requires access to the nodal local equation information, so it's a friend

Member Data Documentation

◆ Average_value

double* oomph::DGElement::Average_value
protected

Pointer to storage for the average values of the of the variables over the element

Referenced by average_value(), and ~DGElement().

◆ Can_delete_mass_matrix

bool oomph::DGElement::Can_delete_mass_matrix
protected

Boolean flag to indicate whether the mass matrix can be deleted (i.e. was it created by this element)

Referenced by disable_mass_matrix_reuse(), set_mass_matrix_from_element(), and ~DGElement().

◆ DG_mesh_pt

DGMesh* oomph::DGElement::DG_mesh_pt
protected

Pointer to Mesh, which will be responsible for the neighbour finding.

Referenced by get_neighbouring_face_and_local_coordinate(), and set_mesh_pt().

◆ Face_element_pt

Vector<FaceElement*> oomph::DGElement::Face_element_pt
protected

Vector of pointers to faces of the element.

Referenced by face_element_pt(), and nface().

◆ M_pt

DenseDoubleMatrix* oomph::DGElement::M_pt
protected

Pointer to storage for a mass matrix that can be recycled if desired

Referenced by disable_mass_matrix_reuse(), get_inverse_mass_matrix_times_residuals(), pre_compute_mass_matrix(), set_mass_matrix_from_element(), and ~DGElement().

◆ Mass_matrix_has_been_computed

bool oomph::DGElement::Mass_matrix_has_been_computed
protected

◆ Mass_matrix_reuse_is_enabled

bool oomph::DGElement::Mass_matrix_reuse_is_enabled
protected

Boolean flag to indicate whether to reuse the mass matrix.

Referenced by disable_mass_matrix_reuse(), enable_mass_matrix_reuse(), get_inverse_mass_matrix_times_residuals(), and set_mass_matrix_from_element().


The documentation for this class was generated from the following files: