oomph::DarcyEquations< DIM > Class Template Referenceabstract

#include <darcy_elements.h>

+ Inheritance diagram for oomph::DarcyEquations< DIM >:

Public Types

typedef void(* SourceFctPt) (const Vector< double > &x, Vector< double > &f)
 Source function pointer typedef. More...
 
typedef void(* MassSourceFctPt) (const Vector< double > &x, double &f)
 Mass source function pointer typedef. More...
 
- Public Types inherited from oomph::FiniteElement
typedef void(* SteadyExactSolutionFctPt) (const Vector< double > &, Vector< double > &)
 
typedef void(* UnsteadyExactSolutionFctPt) (const double &, const Vector< double > &, Vector< double > &)
 

Public Member Functions

 DarcyEquations ()
 Constructor. More...
 
SourceFctPtsource_fct_pt ()
 Access function: Pointer to body force function. More...
 
SourceFctPt source_fct_pt () const
 Access function: Pointer to body force function (const version) More...
 
MassSourceFctPtmass_source_fct_pt ()
 Access function: Pointer to mass source function. More...
 
MassSourceFctPt mass_source_fct_pt () const
 Access function: Pointer to mass source function (const version) More...
 
void source (const Vector< double > &x, Vector< double > &b) const
 
void mass_source (const Vector< double > &x, double &b) const
 
virtual unsigned required_nvalue (const unsigned &n) const =0
 Number of values required at node n. More...
 
virtual int q_edge_local_eqn (const unsigned &n) const =0
 Return the equation number of the n-th edge (flux) degree of freedom. More...
 
virtual int q_internal_local_eqn (const unsigned &n) const =0
 Return the equation number of the n-th internal degree of freedom. More...
 
virtual Vector< Data * > q_edge_data_pt () const =0
 
virtual Dataq_internal_data_pt () const =0
 Return pointer to the Data object that stores the internal flux values. More...
 
virtual unsigned q_edge_index (const unsigned &n) const =0
 Return the nodal index at which the nth edge unknown is stored. More...
 
virtual unsigned q_internal_index () const =0
 
virtual unsigned q_edge_node_number (const unsigned &n) const =0
 Return the number of the node where the nth edge unknown is stored. More...
 
virtual double q_edge (const unsigned &n) const =0
 Return the values of the n-th edge (flux) degree of freedom. More...
 
virtual unsigned face_index_of_q_edge_basis_fct (const unsigned &j) const =0
 Return the face index associated with edge flux degree of freedom. More...
 
virtual unsigned face_index_of_edge (const unsigned &j) const =0
 Return the face index associated with specified edge. More...
 
virtual void face_local_coordinate_of_flux_interpolation_point (const unsigned &edge, const unsigned &n, Vector< double > &s) const =0
 
virtual double q_internal (const unsigned &n) const =0
 Return the values of the internal degree of freedom. More...
 
virtual void set_q_edge (const unsigned &n, const double &value)=0
 Set the values of the edge (flux) degree of freedom. More...
 
virtual void set_q_internal (const unsigned &n, const double &value)=0
 Set the values of the internal degree of freedom. More...
 
unsigned nq_basis () const
 Return the total number of computational basis functions for q. More...
 
virtual unsigned nq_basis_edge () const =0
 Return the number of edge basis functions for q. More...
 
virtual unsigned nq_basis_internal () const =0
 Return the number of internal basis functions for q. More...
 
virtual void get_q_basis_local (const Vector< double > &s, Shape &q_basis) const =0
 Returns the local form of the q basis at local coordinate s. More...
 
virtual void get_div_q_basis_local (const Vector< double > &s, Shape &div_q_basis_ds) const =0
 
void get_q_basis (const Vector< double > &s, Shape &q_basis) const
 Returns the transformed basis at local coordinate s. More...
 
virtual unsigned nedge_flux_interpolation_point () const =0
 
virtual void edge_flux_interpolation_point_global (const unsigned &j, Vector< double > &x) const =0
 
virtual Vector< doubleedge_flux_interpolation_point (const unsigned &edge, const unsigned &n) const =0
 
virtual void edge_flux_interpolation_point_global (const unsigned &edge, const unsigned &n, Vector< double > &x) const =0
 
virtual void pin_q_internal_value (const unsigned &n)=0
 Pin the nth internal q value. More...
 
virtual int p_local_eqn (const unsigned &n) const =0
 Return the equation number of the n-th pressure degree of freedom. More...
 
virtual double p_value (const unsigned &n) const =0
 Return the nth pressure value. More...
 
virtual unsigned np_basis () const =0
 Return the total number of pressure basis functions. More...
 
virtual void get_p_basis (const Vector< double > &s, Shape &p_basis) const =0
 Return the pressure basis. More...
 
virtual void pin_p_value (const unsigned &n)=0
 Pin the nth pressure value. More...
 
virtual void set_p_value (const unsigned &n, const double &value)=0
 Set the nth pressure value. More...
 
virtual Datap_data_pt () const =0
 Return pointer to the Data object that stores the pressure values. More...
 
virtual void scale_basis (Shape &basis) const =0
 Scale the edge basis to allow arbitrary edge mappings. More...
 
double transform_basis (const Vector< double > &s, const Shape &q_basis_local, Shape &psi, Shape &q_basis) const
 
void fill_in_contribution_to_residuals (Vector< double > &residuals)
 Fill in contribution to residuals for the Darcy equations. More...
 
void interpolated_q (const Vector< double > &s, Vector< double > &q) const
 Calculate the FE representation of q. More...
 
double interpolated_q (const Vector< double > &s, const unsigned i) const
 Calculate the FE representation of the i-th component of q. More...
 
void interpolated_div_q (const Vector< double > &s, double &div_q) const
 Calculate the FE representation of div q. More...
 
double interpolated_div_q (const Vector< double > &s)
 Calculate the FE representation of div q and return it. More...
 
void interpolated_p (const Vector< double > &s, double &p) const
 Calculate the FE representation of p. More...
 
double interpolated_p (const Vector< double > &s) const
 Calculate the FE representation of p and return it. More...
 
virtual void pin_superfluous_darcy_dofs ()
 
unsigned self_test ()
 Self test – empty for now. More...
 
void output (std::ostream &outfile)
 Output with default number of plot points. More...
 
void output (std::ostream &outfile, const unsigned &nplot)
 
void output_with_projected_flux (std::ostream &outfile, const unsigned &nplot, const Vector< double > unit_normal)
 Output FE representation of soln: x,y,q1,q2,div_q,p,q \cdot n. More...
 
void output_fct (std::ostream &outfile, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
 
void compute_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, Vector< double > &error, Vector< double > &norm)
 
unsigned num_Z2_flux_terms ()
 Number off flux terms for Z2 error estimator (use actual flux) More...
 
void get_Z2_flux (const Vector< double > &s, Vector< double > &flux)
 Z2 flux (use actual flux) 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 ()
 
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 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 (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, 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::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 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
 
- 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 ()
 
virtual void compute_exact_Z2_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_flux_pt, double &error, double &norm)
 
virtual void get_Z2_compound_flux_indices (Vector< unsigned > &flux_index)
 
virtual unsigned nvertex_node () const =0
 Number of vertex nodes in the element. More...
 
virtual Nodevertex_node_pt (const unsigned &j) const =0
 
virtual unsigned nrecovery_order ()=0
 Order of recovery shape functions. More...
 
virtual double geometric_jacobian (const Vector< double > &x)
 

Protected Member Functions

virtual double shape_basis_test_local (const Vector< double > &s, Shape &psi, Shape &q_basis, Shape &q_test, Shape &p_basis, Shape &p_test, Shape &div_q_basis_ds, Shape &div_q_test_ds) const =0
 
virtual double shape_basis_test_local_at_knot (const unsigned &ipt, Shape &psi, Shape &q_basis, Shape &q_test, Shape &p_basis, Shape &p_test, Shape &div_q_basis_ds, Shape &div_q_test_ds) const =0
 
virtual void fill_in_generic_residual_contribution (Vector< double > &residuals, DenseMatrix< double > &jacobian, bool flag)
 Fill in residuals and, if flag==true, jacobian. 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)
 
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)
 

Private Attributes

SourceFctPt Source_fct_pt
 Pointer to body force function. More...
 
MassSourceFctPt Mass_source_fct_pt
 Pointer to the mass source function. More...
 

Additional Inherited Members

- 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
 
- 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
 
- 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

template<unsigned DIM>
class oomph::DarcyEquations< DIM >

Class implementing the generic maths of the Darcy equations using Raviart-Thomas elements with both edge and internal degrees of freedom

Member Typedef Documentation

◆ MassSourceFctPt

template<unsigned DIM>
typedef void(* oomph::DarcyEquations< DIM >::MassSourceFctPt) (const Vector< double > &x, double &f)

Mass source function pointer typedef.

◆ SourceFctPt

template<unsigned DIM>
typedef void(* oomph::DarcyEquations< DIM >::SourceFctPt) (const Vector< double > &x, Vector< double > &f)

Source function pointer typedef.

Constructor & Destructor Documentation

◆ DarcyEquations()

template<unsigned DIM>
oomph::DarcyEquations< DIM >::DarcyEquations ( )
inline

Constructor.

MassSourceFctPt Mass_source_fct_pt
Pointer to the mass source function.
Definition: darcy_elements.h:504
SourceFctPt Source_fct_pt
Pointer to body force function.
Definition: darcy_elements.h:501

Member Function Documentation

◆ compute_error()

template<unsigned DIM>
void oomph::DarcyEquations< DIM >::compute_error ( std::ostream &  outfile,
FiniteElement::SteadyExactSolutionFctPt  exact_soln_pt,
Vector< double > &  error,
Vector< double > &  norm 
)
virtual

Compute the error between the FE solution and the exact solution using the H(div) norm for q and L^2 norm for p

Reimplemented from oomph::FiniteElement.

259  {
260  for (unsigned i = 0; i < 2; i++)
261  {
262  error[i] = 0.0;
263  norm[i] = 0.0;
264  }
265 
266  // Vector of local coordinates
267  Vector<double> s(DIM);
268 
269  // Vector for coordinates
270  Vector<double> x(DIM);
271 
272  // Set the value of n_intpt
273  unsigned n_intpt = this->integral_pt()->nweight();
274 
275  outfile << "ZONE" << std::endl;
276 
277  // Exact solution Vector (u,v,[w])
278  Vector<double> exact_soln(DIM + 2);
279 
280  // Loop over the integration points
281  for (unsigned ipt = 0; ipt < n_intpt; ipt++)
282  {
283  // Assign values of s
284  for (unsigned i = 0; i < DIM; i++)
285  {
286  s[i] = this->integral_pt()->knot(ipt, i);
287  }
288 
289  // Get the integral weight
290  double w = this->integral_pt()->weight(ipt);
291 
292  // Get jacobian of mapping
293  double J = this->J_eulerian(s);
294 
295  // Premultiply the weights and the Jacobian
296  double W = w * J;
297 
298  // Get x position as Vector
299  this->interpolated_x(s, x);
300 
301  // Get exact solution at this point
302  (*exact_soln_pt)(x, exact_soln);
303 
304  // Flux error
305  for (unsigned i = 0; i < DIM; i++)
306  {
307  norm[0] += exact_soln[i] * exact_soln[i] * W;
308  // Error due to q_i
309  error[0] += (exact_soln[i] - this->interpolated_q(s, i)) *
310  (exact_soln[i] - this->interpolated_q(s, i)) * W;
311  }
312 
313  // // Flux divergence error
314  // norm[0]+=exact_soln[DIM]*exact_soln[DIM]*W;
315  // error[0]+=(exact_soln[DIM]-interpolated_div_q(s))*
316  // (exact_soln[DIM]-interpolated_div_q(s))*W;
317 
318  // Pressure error
319  norm[1] += exact_soln[DIM + 1] * exact_soln[DIM + 1] * W;
320  error[1] += (exact_soln[DIM + 1] - this->interpolated_p(s)) *
321  (exact_soln[DIM + 1] - this->interpolated_p(s)) * W;
322 
323  // Output x,y,[z]
324  for (unsigned i = 0; i < DIM; i++)
325  {
326  outfile << x[i] << " ";
327  }
328 
329  // Output q_1_error,q_2_error,...
330  for (unsigned i = 0; i < DIM; i++)
331  {
332  outfile << exact_soln[i] - this->interpolated_q(s, i) << " ";
333  }
334 
335  // Output p_error
336  outfile << exact_soln[DIM + 1] - this->interpolated_p(s) << " ";
337 
338  outfile << std::endl;
339  }
340  }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
JacobiRotation< float > J
Definition: Jacobi_makeJacobi.cpp:3
RowVector3d w
Definition: Matrix_resize_int.cpp:3
void interpolated_q(const Vector< double > &s, Vector< double > &q) const
Calculate the FE representation of q.
Definition: darcy_elements.h:272
void interpolated_p(const Vector< double > &s, double &p) const
Calculate the FE representation of p.
Definition: darcy_elements.h:375
virtual double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s.
Definition: elements.cc:3962
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
Definition: elements.h:1963
virtual double J_eulerian(const Vector< double > &s) const
Definition: elements.cc:4103
virtual double knot(const unsigned &i, const unsigned &j) const =0
Return local coordinate s[j] of i-th integration point.
virtual unsigned nweight() const =0
Return the number of integration points of the scheme.
virtual double weight(const unsigned &i) const =0
Return weight of i-th integration point.
RealScalar s
Definition: level1_cplx_impl.h:130
#define DIM
Definition: linearised_navier_stokes_elements.h:44
void exact_soln(const double &time, const Vector< double > &x, Vector< double > &soln)
Definition: unstructured_two_d_curved.cc:301
int error
Definition: calibrate.py:297
@ W
Definition: quadtree.h:63
list x
Definition: plotDoE.py:28

References DIM, calibrate::error, ProblemParameters::exact_soln(), i, J, s, w, oomph::QuadTreeNames::W, and plotDoE::x.

◆ edge_flux_interpolation_point()

template<unsigned DIM>
virtual Vector<double> oomph::DarcyEquations< DIM >::edge_flux_interpolation_point ( const unsigned edge,
const unsigned n 
) const
pure virtual

Returns the local coordinate of nth flux interpolation point along an edge

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ edge_flux_interpolation_point_global() [1/2]

template<unsigned DIM>
virtual void oomph::DarcyEquations< DIM >::edge_flux_interpolation_point_global ( const unsigned edge,
const unsigned n,
Vector< double > &  x 
) const
pure virtual

Returns the global coordinates of the nth flux interpolation point along an edge

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ edge_flux_interpolation_point_global() [2/2]

template<unsigned DIM>
virtual void oomph::DarcyEquations< DIM >::edge_flux_interpolation_point_global ( const unsigned j,
Vector< double > &  x 
) const
pure virtual

Compute the global coordinates of the flux_interpolation point associated with the j-th edge-based q basis fct

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ face_index_of_edge()

template<unsigned DIM>
virtual unsigned oomph::DarcyEquations< DIM >::face_index_of_edge ( const unsigned j) const
pure virtual

Return the face index associated with specified edge.

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ face_index_of_q_edge_basis_fct()

template<unsigned DIM>
virtual unsigned oomph::DarcyEquations< DIM >::face_index_of_q_edge_basis_fct ( const unsigned j) const
pure virtual

Return the face index associated with edge flux degree of freedom.

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ face_local_coordinate_of_flux_interpolation_point()

template<unsigned DIM>
virtual void oomph::DarcyEquations< DIM >::face_local_coordinate_of_flux_interpolation_point ( const unsigned edge,
const unsigned n,
Vector< double > &  s 
) const
pure virtual

Compute the face element coordinates of the nth flux interpolation point along an edge

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ fill_in_contribution_to_residuals()

template<unsigned DIM>
void oomph::DarcyEquations< DIM >::fill_in_contribution_to_residuals ( Vector< double > &  residuals)
inlinevirtual

Fill in contribution to residuals for the Darcy equations.

Reimplemented from oomph::GeneralisedElement.

259  {
261  residuals, GeneralisedElement::Dummy_matrix, 0);
262  }
virtual void fill_in_generic_residual_contribution(Vector< double > &residuals, DenseMatrix< double > &jacobian, bool flag)
Fill in residuals and, if flag==true, jacobian.
Definition: darcy_elements.cc:346
static DenseMatrix< double > Dummy_matrix
Definition: elements.h:227

References oomph::GeneralisedElement::Dummy_matrix, and oomph::DarcyEquations< DIM >::fill_in_generic_residual_contribution().

◆ fill_in_generic_residual_contribution()

template<unsigned DIM>
void oomph::DarcyEquations< DIM >::fill_in_generic_residual_contribution ( Vector< double > &  residuals,
DenseMatrix< double > &  jacobian,
bool  flag 
)
protectedvirtual

Fill in residuals and, if flag==true, jacobian.

348  {
349  // Get the number of geometric nodes, total number of basis functions,
350  // and number of edges basis functions
351  const unsigned n_node = nnode();
352  const unsigned n_q_basis = nq_basis();
353  const unsigned n_q_basis_edge = nq_basis_edge();
354  const unsigned n_p_basis = np_basis();
355 
356  // Storage for the geometric and computational bases and the test functions
357  Shape psi(n_node), q_basis(n_q_basis, DIM), q_test(n_q_basis, DIM),
358  p_basis(n_p_basis), p_test(n_p_basis), div_q_basis_ds(n_q_basis),
359  div_q_test_ds(n_q_basis);
360 
361  // Get the number of integration points
362  unsigned n_intpt = integral_pt()->nweight();
363 
364  // Storage for the local coordinates
365  Vector<double> s(DIM);
366 
367  // Storage for the source function
368  Vector<double> f(DIM);
369 
370  // Storage for the mass source function
371  double mass_source_local;
372 
373  // Local equation and unknown numbers
374  int local_eqn = 0; //, local_unknown = 0;
375 
376  // Loop over the integration points
377  for (unsigned ipt = 0; ipt < n_intpt; ipt++)
378  {
379  // Find the local coordinates at the integration point
380  for (unsigned i = 0; i < DIM; i++)
381  {
382  s[i] = integral_pt()->knot(ipt, i);
383  }
384 
385  // Get the weight of the intetgration point
386  double w = integral_pt()->weight(ipt);
387 
388  // Call the basis functions and test functions and get the
389  // (geometric) jacobian of the current element
390  double J = shape_basis_test_local_at_knot(ipt,
391  psi,
392  q_basis,
393  q_test,
394  p_basis,
395  p_test,
396  div_q_basis_ds,
397  div_q_test_ds);
398 
399  // Storage for interpolated values
400  Vector<double> interpolated_x(DIM, 0.0);
401  Vector<double> interpolated_q(DIM, 0.0);
402  double interpolated_div_q_ds = 0.0;
403  double interpolated_p = 0.0;
404 
405  // loop over the geometric basis functions to find interpolated x
406  for (unsigned l = 0; l < n_node; l++)
407  {
408  for (unsigned i = 0; i < DIM; i++)
409  {
410  interpolated_x[i] += nodal_position(l, i) * psi[l];
411  }
412  }
413 
414  // loop over the nodes and use the vector basis functions to find the
415  // interpolated flux
416  for (unsigned i = 0; i < DIM; i++)
417  {
418  // Loop over the edge basis vectors
419  for (unsigned l = 0; l < n_q_basis_edge; l++)
420  {
421  interpolated_q[i] += q_edge(l) * q_basis(l, i);
422  }
423  // Loop over the internal basis vectors
424  for (unsigned l = n_q_basis_edge; l < n_q_basis; l++)
425  {
426  interpolated_q[i] += q_internal(l - n_q_basis_edge) * q_basis(l, i);
427  }
428  }
429 
430  // loop over the pressure basis and find the interpolated pressure
431  for (unsigned l = 0; l < n_p_basis; l++)
432  {
433  interpolated_p += p_value(l) * p_basis(l);
434  }
435 
436  // loop over the q edge divergence basis and the q internal divergence
437  // basis to find interpolated div q
438  for (unsigned l = 0; l < n_q_basis_edge; l++)
439  {
440  interpolated_div_q_ds += q_edge(l) * div_q_basis_ds(l);
441  }
442  for (unsigned l = n_q_basis_edge; l < n_q_basis; l++)
443  {
444  interpolated_div_q_ds +=
445  q_internal(l - n_q_basis_edge) * div_q_basis_ds(l);
446  }
447 
448  // Get the source function
449  this->source(interpolated_x, f);
450 
451  // Get the mass source function
452  this->mass_source(interpolated_x, mass_source_local);
453 
454  // Loop over the test functions
455  for (unsigned l = 0; l < n_q_basis; l++)
456  {
457  if (l < n_q_basis_edge)
458  {
459  local_eqn = q_edge_local_eqn(l);
460  }
461  else // n_q_basis_edge <= l < n_basis
462  {
463  local_eqn = q_internal_local_eqn(l - n_q_basis_edge);
464  }
465 
466  // If it's not a boundary condition
467  if (local_eqn >= 0)
468  {
469  for (unsigned i = 0; i < DIM; i++)
470  {
471  residuals[local_eqn] +=
472  (interpolated_q[i] - f[i]) * q_test(l, i) * w * J;
473  }
474 
475  // deliberately no jacobian factor in this integral
476  residuals[local_eqn] -= (interpolated_p * div_q_test_ds(l)) * w;
477  }
478  } // End of loop over test functions
479 
480  // loop over pressure test functions
481  for (unsigned l = 0; l < n_p_basis; l++)
482  {
483  // get the local equation number
484  local_eqn = p_local_eqn(l);
485 
486  // If it's not a boundary condition
487  if (local_eqn >= 0)
488  {
489  // deliberately no jacobian factor in this integral
490  residuals[local_eqn] += interpolated_div_q_ds * p_test(l) * w;
491  residuals[local_eqn] -= mass_source_local * p_test(l) * w * J;
492  }
493  }
494  } // End of loop over integration points
495  }
virtual unsigned nq_basis_edge() const =0
Return the number of edge basis functions for q.
virtual int q_internal_local_eqn(const unsigned &n) const =0
Return the equation number of the n-th internal degree of freedom.
virtual unsigned np_basis() const =0
Return the total number of pressure basis functions.
virtual int p_local_eqn(const unsigned &n) const =0
Return the equation number of the n-th pressure degree of freedom.
virtual double shape_basis_test_local_at_knot(const unsigned &ipt, Shape &psi, Shape &q_basis, Shape &q_test, Shape &p_basis, Shape &p_test, Shape &div_q_basis_ds, Shape &div_q_test_ds) const =0
virtual int q_edge_local_eqn(const unsigned &n) const =0
Return the equation number of the n-th edge (flux) degree of freedom.
virtual double p_value(const unsigned &n) const =0
Return the nth pressure value.
virtual double q_edge(const unsigned &n) const =0
Return the values of the n-th edge (flux) degree of freedom.
unsigned nq_basis() const
Return the total number of computational basis functions for q.
Definition: darcy_elements.h:172
void source(const Vector< double > &x, Vector< double > &b) const
Definition: darcy_elements.h:86
void mass_source(const Vector< double > &x, double &b) const
Definition: darcy_elements.h:107
virtual double q_internal(const unsigned &n) const =0
Return the values of the internal degree of freedom.
unsigned nnode() const
Return the number of nodes.
Definition: elements.h:2210
double nodal_position(const unsigned &n, const unsigned &i) const
Definition: elements.h:2317
static int f(const TensorMap< Tensor< int, 3 > > &tensor)
Definition: cxx11_tensor_map.cpp:237

References DIM, f(), i, J, s, and w.

Referenced by oomph::DarcyEquations< DIM >::fill_in_contribution_to_residuals().

◆ get_div_q_basis_local()

template<unsigned DIM>
virtual void oomph::DarcyEquations< DIM >::get_div_q_basis_local ( const Vector< double > &  s,
Shape div_q_basis_ds 
) const
pure virtual

◆ get_p_basis()

template<unsigned DIM>
virtual void oomph::DarcyEquations< DIM >::get_p_basis ( const Vector< double > &  s,
Shape p_basis 
) const
pure virtual

◆ get_q_basis()

template<unsigned DIM>
void oomph::DarcyEquations< DIM >::get_q_basis ( const Vector< double > &  s,
Shape q_basis 
) const
inline

Returns the transformed basis at local coordinate s.

194  {
195  const unsigned n_node = this->nnode();
196  Shape psi(n_node, DIM);
197  const unsigned n_q_basis = this->nq_basis();
198  Shape q_basis_local(n_q_basis, DIM);
199  this->get_q_basis_local(s, q_basis_local);
200  (void)this->transform_basis(s, q_basis_local, psi, q_basis);
201  }
double transform_basis(const Vector< double > &s, const Shape &q_basis_local, Shape &psi, Shape &q_basis) const
Definition: darcy_elements.cc:35
virtual void get_q_basis_local(const Vector< double > &s, Shape &q_basis) const =0
Returns the local form of the q basis at local coordinate s.

References DIM, oomph::DarcyEquations< DIM >::get_q_basis_local(), oomph::FiniteElement::nnode(), oomph::DarcyEquations< DIM >::nq_basis(), and oomph::DarcyEquations< DIM >::transform_basis().

Referenced by oomph::DarcyEquations< DIM >::interpolated_q().

◆ get_q_basis_local()

template<unsigned DIM>
virtual void oomph::DarcyEquations< DIM >::get_q_basis_local ( const Vector< double > &  s,
Shape q_basis 
) const
pure virtual

◆ get_Z2_flux()

template<unsigned DIM>
void oomph::DarcyEquations< DIM >::get_Z2_flux ( const Vector< double > &  s,
Vector< double > &  flux 
)
inlinevirtual

Z2 flux (use actual flux)

Implements oomph::ElementWithZ2ErrorEstimator.

466  {
468  }
void flux(const double &time, const Vector< double > &x, double &flux)
Get flux applied along boundary x=0.
Definition: pretend_melt.cc:59

References ProblemParameters::flux(), oomph::DarcyEquations< DIM >::interpolated_q(), and s.

◆ interpolated_div_q() [1/2]

template<unsigned DIM>
double oomph::DarcyEquations< DIM >::interpolated_div_q ( const Vector< double > &  s)
inline

Calculate the FE representation of div q and return it.

363  {
364  // Temporary storage for div q
365  double div_q = 0;
366 
367  // Get the intepolated divergence
368  interpolated_div_q(s, div_q);
369 
370  // Return it
371  return div_q;
372  }
void interpolated_div_q(const Vector< double > &s, double &div_q) const
Calculate the FE representation of div q.
Definition: darcy_elements.h:317

References oomph::DarcyEquations< DIM >::interpolated_div_q(), and s.

◆ interpolated_div_q() [2/2]

template<unsigned DIM>
void oomph::DarcyEquations< DIM >::interpolated_div_q ( const Vector< double > &  s,
double div_q 
) const
inline

Calculate the FE representation of div q.

318  {
319  // Zero the divergence
320  div_q = 0;
321 
322  // Get the number of nodes, q basis function, and q edge basis functions
323  unsigned n_node = nnode();
324  const unsigned n_q_basis = nq_basis();
325  const unsigned n_q_basis_edge = nq_basis_edge();
326 
327  // Storage for the divergence basis
328  Shape div_q_basis_ds(n_q_basis);
329 
330  // Storage for the geometric basis and it's derivatives
331  Shape psi(n_node);
332  DShape dpsi(n_node, DIM);
333 
334  // Call the geometric shape functions and their derivatives
335  this->dshape_local(s, psi, dpsi);
336 
337  // Storage for the inverse of the geometric jacobian (just so we can call
338  // the local to eulerian mapping)
339  DenseMatrix<double> inverse_jacobian(DIM);
340 
341  // Get the determinant of the geometric mapping
342  double det = local_to_eulerian_mapping(dpsi, inverse_jacobian);
343 
344  // Get the divergence basis (wrt local coords) at local coords s
345  get_div_q_basis_local(s, div_q_basis_ds);
346 
347  // Add the contribution to the divergence from the edge basis functions
348  for (unsigned l = 0; l < n_q_basis_edge; l++)
349  {
350  div_q += 1.0 / det * div_q_basis_ds(l) * q_edge(l);
351  }
352 
353  // Add the contribution to the divergence from the internal basis
354  // functions
355  for (unsigned l = n_q_basis_edge; l < n_q_basis; l++)
356  {
357  div_q += 1.0 / det * div_q_basis_ds(l) * q_internal(l - n_q_basis_edge);
358  }
359  }
virtual void get_div_q_basis_local(const Vector< double > &s, Shape &div_q_basis_ds) const =0
virtual double local_to_eulerian_mapping(const DShape &dpsids, DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
Definition: elements.h:1508
virtual void dshape_local(const Vector< double > &s, Shape &psi, DShape &dpsids) const
Definition: elements.h:1981

References DIM, oomph::FiniteElement::dshape_local(), oomph::DarcyEquations< DIM >::get_div_q_basis_local(), oomph::FiniteElement::local_to_eulerian_mapping(), oomph::FiniteElement::nnode(), oomph::DarcyEquations< DIM >::nq_basis(), oomph::DarcyEquations< DIM >::nq_basis_edge(), oomph::DarcyEquations< DIM >::q_edge(), oomph::DarcyEquations< DIM >::q_internal(), and s.

Referenced by oomph::DarcyEquations< DIM >::interpolated_div_q().

◆ interpolated_p() [1/2]

template<unsigned DIM>
double oomph::DarcyEquations< DIM >::interpolated_p ( const Vector< double > &  s) const
inline

Calculate the FE representation of p and return it.

398  {
399  // Temporary storage for p
400  double p = 0;
401 
402  // Get the interpolated pressure
403  interpolated_p(s, p);
404 
405  // Return it
406  return p;
407  }
float * p
Definition: Tutorial_Map_using.cpp:9

References oomph::DarcyEquations< DIM >::interpolated_p(), p, and s.

◆ interpolated_p() [2/2]

template<unsigned DIM>
void oomph::DarcyEquations< DIM >::interpolated_p ( const Vector< double > &  s,
double p 
) const
inline

Calculate the FE representation of p.

376  {
377  // Get the number of p basis functions
378  unsigned n_p_basis = np_basis();
379 
380  // Storage for the p basis
381  Shape p_basis(n_p_basis);
382 
383  // Call the p basis
384  get_p_basis(s, p_basis);
385 
386  // Zero the pressure
387  p = 0;
388 
389  // Add the contribution to the pressure from each basis function
390  for (unsigned l = 0; l < n_p_basis; l++)
391  {
392  p += p_value(l) * p_basis(l);
393  }
394  }
virtual void get_p_basis(const Vector< double > &s, Shape &p_basis) const =0
Return the pressure basis.

References oomph::DarcyEquations< DIM >::get_p_basis(), oomph::DarcyEquations< DIM >::np_basis(), p, oomph::DarcyEquations< DIM >::p_value(), and s.

Referenced by oomph::DarcyEquations< DIM >::interpolated_p().

◆ interpolated_q() [1/2]

template<unsigned DIM>
double oomph::DarcyEquations< DIM >::interpolated_q ( const Vector< double > &  s,
const unsigned  i 
) const
inline

Calculate the FE representation of the i-th component of q.

296  {
297  unsigned n_q_basis = nq_basis();
298  unsigned n_q_basis_edge = nq_basis_edge();
299 
300  Shape q_basis(n_q_basis, DIM);
301 
302  get_q_basis(s, q_basis);
303  double q_i = 0.0;
304  for (unsigned l = 0; l < n_q_basis_edge; l++)
305  {
306  q_i += q_edge(l) * q_basis(l, i);
307  }
308  for (unsigned l = n_q_basis_edge; l < n_q_basis; l++)
309  {
310  q_i += q_internal(l - n_q_basis_edge) * q_basis(l, i);
311  }
312 
313  return q_i;
314  }
void get_q_basis(const Vector< double > &s, Shape &q_basis) const
Returns the transformed basis at local coordinate s.
Definition: darcy_elements.h:193

References DIM, oomph::DarcyEquations< DIM >::get_q_basis(), i, oomph::DarcyEquations< DIM >::nq_basis(), oomph::DarcyEquations< DIM >::nq_basis_edge(), oomph::DarcyEquations< DIM >::q_edge(), oomph::DarcyEquations< DIM >::q_internal(), and s.

◆ interpolated_q() [2/2]

template<unsigned DIM>
void oomph::DarcyEquations< DIM >::interpolated_q ( const Vector< double > &  s,
Vector< double > &  q 
) const
inline

Calculate the FE representation of q.

273  {
274  unsigned n_q_basis = nq_basis();
275  unsigned n_q_basis_edge = nq_basis_edge();
276 
277  Shape q_basis(n_q_basis, DIM);
278 
279  get_q_basis(s, q_basis);
280  for (unsigned i = 0; i < DIM; i++)
281  {
282  q[i] = 0.0;
283  for (unsigned l = 0; l < n_q_basis_edge; l++)
284  {
285  q[i] += q_edge(l) * q_basis(l, i);
286  }
287  for (unsigned l = n_q_basis_edge; l < n_q_basis; l++)
288  {
289  q[i] += q_internal(l - n_q_basis_edge) * q_basis(l, i);
290  }
291  }
292  }
EIGEN_DEVICE_FUNC const Scalar & q
Definition: SpecialFunctionsImpl.h:2019

References DIM, oomph::DarcyEquations< DIM >::get_q_basis(), i, oomph::DarcyEquations< DIM >::nq_basis(), oomph::DarcyEquations< DIM >::nq_basis_edge(), Eigen::numext::q, oomph::DarcyEquations< DIM >::q_edge(), oomph::DarcyEquations< DIM >::q_internal(), and s.

Referenced by oomph::DarcyEquations< DIM >::get_Z2_flux().

◆ mass_source()

template<unsigned DIM>
void oomph::DarcyEquations< DIM >::mass_source ( const Vector< double > &  x,
double b 
) const
inline

Indirect access to the mass source function - returns 0 if no mass source function has been set

108  {
109  // If no function has been set, return zero vector
110  if (Mass_source_fct_pt == 0)
111  {
112  b = 0.0;
113  }
114  else
115  {
116  // Get body force
117  (*Mass_source_fct_pt)(x, b);
118  }
119  }
Scalar * b
Definition: benchVecAdd.cpp:17

References b, oomph::DarcyEquations< DIM >::Mass_source_fct_pt, and plotDoE::x.

◆ mass_source_fct_pt() [1/2]

template<unsigned DIM>
MassSourceFctPt& oomph::DarcyEquations< DIM >::mass_source_fct_pt ( )
inline

Access function: Pointer to mass source function.

74  {
75  return Mass_source_fct_pt;
76  }

References oomph::DarcyEquations< DIM >::Mass_source_fct_pt.

◆ mass_source_fct_pt() [2/2]

template<unsigned DIM>
MassSourceFctPt oomph::DarcyEquations< DIM >::mass_source_fct_pt ( ) const
inline

Access function: Pointer to mass source function (const version)

80  {
81  return Mass_source_fct_pt;
82  }

References oomph::DarcyEquations< DIM >::Mass_source_fct_pt.

◆ nedge_flux_interpolation_point()

template<unsigned DIM>
virtual unsigned oomph::DarcyEquations< DIM >::nedge_flux_interpolation_point ( ) const
pure virtual

Returns the number of flux interpolation points along each edge of the element

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >, oomph::TRaviartThomasDarcyElement< ORDER >, and oomph::TRaviartThomasDarcyElement< ORDER >.

◆ np_basis()

template<unsigned DIM>
virtual unsigned oomph::DarcyEquations< DIM >::np_basis ( ) const
pure virtual

◆ nq_basis()

template<unsigned DIM>
unsigned oomph::DarcyEquations< DIM >::nq_basis ( ) const
inline

Return the total number of computational basis functions for q.

173  {
174  return nq_basis_edge() + nq_basis_internal();
175  }
virtual unsigned nq_basis_internal() const =0
Return the number of internal basis functions for q.

References oomph::DarcyEquations< DIM >::nq_basis_edge(), and oomph::DarcyEquations< DIM >::nq_basis_internal().

Referenced by oomph::DarcyEquations< DIM >::get_q_basis(), oomph::DarcyEquations< DIM >::interpolated_div_q(), and oomph::DarcyEquations< DIM >::interpolated_q().

◆ nq_basis_edge()

◆ nq_basis_internal()

template<unsigned DIM>
virtual unsigned oomph::DarcyEquations< DIM >::nq_basis_internal ( ) const
pure virtual

◆ num_Z2_flux_terms()

template<unsigned DIM>
unsigned oomph::DarcyEquations< DIM >::num_Z2_flux_terms ( )
inlinevirtual

Number off flux terms for Z2 error estimator (use actual flux)

Implements oomph::ElementWithZ2ErrorEstimator.

460  {
461  return DIM;
462  }

References DIM.

◆ output() [1/2]

template<unsigned DIM>
void oomph::DarcyEquations< DIM >::output ( std::ostream &  outfile)
inlinevirtual

Output with default number of plot points.

Reimplemented from oomph::FiniteElement.

424  {
425  unsigned nplot = 5;
426  output(outfile, nplot);
427  }
void output(std::ostream &outfile)
Output with default number of plot points.
Definition: darcy_elements.h:423

Referenced by oomph::TRaviartThomasDarcyElement< ORDER >::output().

◆ output() [2/2]

template<unsigned DIM>
void oomph::DarcyEquations< DIM >::output ( std::ostream &  outfile,
const unsigned nplot 
)
virtual

Output FE representation of soln: x,y,q1,q2,div_q,p at Nplot^DIM plot points

Reimplemented from oomph::FiniteElement.

157  {
158  // Vector of local coordinates
159  Vector<double> s(DIM);
160 
161  // Tecplot header info
162  outfile << tecplot_zone_string(nplot);
163 
164  // Loop over plot points
165  unsigned num_plot_points = nplot_points(nplot);
166 
167  for (unsigned iplot = 0; iplot < num_plot_points; iplot++)
168  {
169  // Get local coordinates of plot point
170  get_s_plot(iplot, nplot, s);
171 
172  // Output the components of the position
173  for (unsigned i = 0; i < DIM; i++)
174  {
175  outfile << interpolated_x(s, i) << " ";
176  }
177 
178  // Output the components of the FE representation of q at s
179  for (unsigned i = 0; i < DIM; i++)
180  {
181  outfile << interpolated_q(s, i) << " ";
182  }
183 
184  // Output FE representation of div q at s
185  outfile << interpolated_div_q(s) << " ";
186 
187  // Output FE representation of p at s
188  outfile << interpolated_p(s) << " ";
189 
190  outfile << std::endl;
191  }
192 
193  // Write tecplot footer (e.g. FE connectivity lists)
194  this->write_tecplot_zone_footer(outfile, nplot);
195  }
virtual std::string tecplot_zone_string(const unsigned &nplot) const
Definition: elements.h:3161
virtual void get_s_plot(const unsigned &i, const unsigned &nplot, Vector< double > &s, const bool &shifted_to_interior=false) const
Definition: elements.h:3148
virtual unsigned nplot_points(const unsigned &nplot) const
Definition: elements.h:3186
virtual void write_tecplot_zone_footer(std::ostream &outfile, const unsigned &nplot) const
Definition: elements.h:3174

References DIM, i, and s.

◆ output_fct()

template<unsigned DIM>
void oomph::DarcyEquations< DIM >::output_fct ( std::ostream &  outfile,
const unsigned nplot,
FiniteElement::SteadyExactSolutionFctPt  exact_soln_pt 
)
virtual

Output FE representation of exact soln: x,y,q1,q2,div_q,p at Nplot^DIM plot points

Reimplemented from oomph::FiniteElement.

206  {
207  // Vector of local coordinates
208  Vector<double> s(DIM);
209 
210  // Vector for coordintes
211  Vector<double> x(DIM);
212 
213  // Tecplot header info
214  outfile << this->tecplot_zone_string(nplot);
215 
216  // Exact solution Vector
217  Vector<double> exact_soln(DIM + 2);
218 
219  // Loop over plot points
220  unsigned num_plot_points = this->nplot_points(nplot);
221 
222  for (unsigned iplot = 0; iplot < num_plot_points; iplot++)
223  {
224  // Get local coordinates of plot point
225  this->get_s_plot(iplot, nplot, s);
226 
227  // Get x position as Vector
228  this->interpolated_x(s, x);
229 
230  // Get exact solution at this point
231  (*exact_soln_pt)(x, exact_soln);
232 
233  // Output x,y,q_exact,p_exact,div_q_exact
234  for (unsigned i = 0; i < DIM; i++)
235  {
236  outfile << x[i] << " ";
237  }
238  for (unsigned i = 0; i < DIM + 2; i++)
239  {
240  outfile << exact_soln[i] << " ";
241  }
242  outfile << std::endl;
243  }
244 
245  // Write tecplot footer (e.g. FE connectivity lists)
246  this->write_tecplot_zone_footer(outfile, nplot);
247  }

References DIM, ProblemParameters::exact_soln(), i, s, and plotDoE::x.

◆ output_with_projected_flux()

template<unsigned DIM>
void oomph::DarcyEquations< DIM >::output_with_projected_flux ( std::ostream &  outfile,
const unsigned nplot,
const Vector< double unit_normal 
)

Output FE representation of soln: x,y,q1,q2,div_q,p,q \cdot n.

Output incl. projection of fluxes into direction of the specified unit vector

102  {
103  // Vector of local coordinates
104  Vector<double> s(DIM);
105 
106  // Tecplot header info
107  outfile << this->tecplot_zone_string(nplot);
108 
109  // Loop over plot points
110  unsigned num_plot_points = this->nplot_points(nplot);
111 
112  for (unsigned iplot = 0; iplot < num_plot_points; iplot++)
113  {
114  // Get local coordinates of plot point
115  this->get_s_plot(iplot, nplot, s);
116 
117  // Output the components of the position
118  for (unsigned i = 0; i < DIM; i++)
119  {
120  outfile << this->interpolated_x(s, i) << " ";
121  }
122 
123  // Output the components of the FE representation of q at s
124  for (unsigned i = 0; i < DIM; i++)
125  {
126  outfile << this->interpolated_q(s, i) << " ";
127  }
128 
129  // Output FE representation of div q at s
130  outfile << this->interpolated_div_q(s) << " ";
131 
132  // Output FE representation of p at s
133  outfile << this->interpolated_p(s) << " ";
134 
135  // Fluxes projected into the direction of the face normal
136  double flux = 0.0;
137  for (unsigned i = 0; i < 2; i++)
138  {
139  flux += this->interpolated_q(s, i) * unit_normal[i];
140  }
141  outfile << flux << " ";
142 
143  outfile << std::endl;
144  }
145 
146  // Write tecplot footer (e.g. FE connectivity lists)
147  this->write_tecplot_zone_footer(outfile, nplot);
148  }

References DIM, ProblemParameters::flux(), i, and s.

◆ p_data_pt()

template<unsigned DIM>
virtual Data* oomph::DarcyEquations< DIM >::p_data_pt ( ) const
pure virtual

Return pointer to the Data object that stores the pressure values.

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ p_local_eqn()

template<unsigned DIM>
virtual int oomph::DarcyEquations< DIM >::p_local_eqn ( const unsigned n) const
pure virtual

Return the equation number of the n-th pressure degree of freedom.

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >, oomph::TRaviartThomasDarcyElement< ORDER >, and oomph::TRaviartThomasDarcyElement< ORDER >.

◆ p_value()

template<unsigned DIM>
virtual double oomph::DarcyEquations< DIM >::p_value ( const unsigned n) const
pure virtual

◆ pin_p_value()

template<unsigned DIM>
virtual void oomph::DarcyEquations< DIM >::pin_p_value ( const unsigned n)
pure virtual

Pin the nth pressure value.

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ pin_q_internal_value()

template<unsigned DIM>
virtual void oomph::DarcyEquations< DIM >::pin_q_internal_value ( const unsigned n)
pure virtual

Pin the nth internal q value.

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ pin_superfluous_darcy_dofs()

template<unsigned DIM>
virtual void oomph::DarcyEquations< DIM >::pin_superfluous_darcy_dofs ( )
inlinevirtual

Helper function to pin superfluous dofs (empty; can be overloaded in projectable elements where we introduce at least one dof per node to allow projection during unstructured refinement)

413 {}

◆ q_edge()

template<unsigned DIM>
virtual double oomph::DarcyEquations< DIM >::q_edge ( const unsigned n) const
pure virtual

Return the values of the n-th edge (flux) degree of freedom.

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

Referenced by oomph::DarcyEquations< DIM >::interpolated_div_q(), and oomph::DarcyEquations< DIM >::interpolated_q().

◆ q_edge_data_pt()

template<unsigned DIM>
virtual Vector<Data*> oomph::DarcyEquations< DIM >::q_edge_data_pt ( ) const
pure virtual

Return vector of pointers to the Data objects that store the edge flux values

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ q_edge_index()

template<unsigned DIM>
virtual unsigned oomph::DarcyEquations< DIM >::q_edge_index ( const unsigned n) const
pure virtual

Return the nodal index at which the nth edge unknown is stored.

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ q_edge_local_eqn()

template<unsigned DIM>
virtual int oomph::DarcyEquations< DIM >::q_edge_local_eqn ( const unsigned n) const
pure virtual

Return the equation number of the n-th edge (flux) degree of freedom.

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ q_edge_node_number()

template<unsigned DIM>
virtual unsigned oomph::DarcyEquations< DIM >::q_edge_node_number ( const unsigned n) const
pure virtual

Return the number of the node where the nth edge unknown is stored.

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ q_internal()

template<unsigned DIM>
virtual double oomph::DarcyEquations< DIM >::q_internal ( const unsigned n) const
pure virtual

Return the values of the internal degree of freedom.

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

Referenced by oomph::DarcyEquations< DIM >::interpolated_div_q(), and oomph::DarcyEquations< DIM >::interpolated_q().

◆ q_internal_data_pt()

template<unsigned DIM>
virtual Data* oomph::DarcyEquations< DIM >::q_internal_data_pt ( ) const
pure virtual

Return pointer to the Data object that stores the internal flux values.

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ q_internal_index()

template<unsigned DIM>
virtual unsigned oomph::DarcyEquations< DIM >::q_internal_index ( ) const
pure virtual

Return the index of the internal data where the q_internal degrees of freedom are stored

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ q_internal_local_eqn()

template<unsigned DIM>
virtual int oomph::DarcyEquations< DIM >::q_internal_local_eqn ( const unsigned n) const
pure virtual

Return the equation number of the n-th internal degree of freedom.

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ required_nvalue()

template<unsigned DIM>
virtual unsigned oomph::DarcyEquations< DIM >::required_nvalue ( const unsigned n) const
pure virtual

Number of values required at node n.

Reimplemented from oomph::FiniteElement.

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ scale_basis()

template<unsigned DIM>
virtual void oomph::DarcyEquations< DIM >::scale_basis ( Shape basis) const
pure virtual

Scale the edge basis to allow arbitrary edge mappings.

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ self_test()

template<unsigned DIM>
unsigned oomph::DarcyEquations< DIM >::self_test ( )
inlinevirtual

Self test – empty for now.

Reimplemented from oomph::FiniteElement.

418  {
419  return 0;
420  }

◆ set_p_value()

template<unsigned DIM>
virtual void oomph::DarcyEquations< DIM >::set_p_value ( const unsigned n,
const double value 
)
pure virtual

Set the nth pressure value.

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ set_q_edge()

template<unsigned DIM>
virtual void oomph::DarcyEquations< DIM >::set_q_edge ( const unsigned n,
const double value 
)
pure virtual

Set the values of the edge (flux) degree of freedom.

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ set_q_internal()

template<unsigned DIM>
virtual void oomph::DarcyEquations< DIM >::set_q_internal ( const unsigned n,
const double value 
)
pure virtual

Set the values of the internal degree of freedom.

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ shape_basis_test_local()

template<unsigned DIM>
virtual double oomph::DarcyEquations< DIM >::shape_basis_test_local ( const Vector< double > &  s,
Shape psi,
Shape q_basis,
Shape q_test,
Shape p_basis,
Shape p_test,
Shape div_q_basis_ds,
Shape div_q_test_ds 
) const
protectedpure virtual

Returns the geometric basis, and the q, p and divergence basis functions and test functions at local coordinate s

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ shape_basis_test_local_at_knot()

template<unsigned DIM>
virtual double oomph::DarcyEquations< DIM >::shape_basis_test_local_at_knot ( const unsigned ipt,
Shape psi,
Shape q_basis,
Shape q_test,
Shape p_basis,
Shape p_test,
Shape div_q_basis_ds,
Shape div_q_test_ds 
) const
protectedpure virtual

Returns the geometric basis, and the q, p and divergence basis functions and test functions at integration point ipt

Implemented in oomph::TRaviartThomasDarcyElement< ORDER >.

◆ source()

template<unsigned DIM>
void oomph::DarcyEquations< DIM >::source ( const Vector< double > &  x,
Vector< double > &  b 
) const
inline

Indirect access to the source function - returns 0 if no source function has been set

87  {
88  // If no function has been set, return zero vector
89  if (Source_fct_pt == 0)
90  {
91  // Get spatial dimension of element
92  unsigned n = dim();
93  for (unsigned i = 0; i < n; i++)
94  {
95  b[i] = 0.0;
96  }
97  }
98  else
99  {
100  // Get body force
101  (*Source_fct_pt)(x, b);
102  }
103  }
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
unsigned dim() const
Definition: elements.h:2611

References b, oomph::FiniteElement::dim(), i, n, oomph::DarcyEquations< DIM >::Source_fct_pt, and plotDoE::x.

◆ source_fct_pt() [1/2]

template<unsigned DIM>
SourceFctPt& oomph::DarcyEquations< DIM >::source_fct_pt ( )
inline

Access function: Pointer to body force function.

62  {
63  return Source_fct_pt;
64  }

References oomph::DarcyEquations< DIM >::Source_fct_pt.

◆ source_fct_pt() [2/2]

template<unsigned DIM>
SourceFctPt oomph::DarcyEquations< DIM >::source_fct_pt ( ) const
inline

Access function: Pointer to body force function (const version)

68  {
69  return Source_fct_pt;
70  }

References oomph::DarcyEquations< DIM >::Source_fct_pt.

◆ transform_basis()

template<unsigned DIM>
double oomph::DarcyEquations< DIM >::transform_basis ( const Vector< double > &  s,
const Shape q_basis_local,
Shape psi,
Shape q_basis 
) const

Performs a div-conserving transformation of the vector basis functions from the reference element to the actual element

39  {
40  // Get the number of nodes in the element
41  const unsigned n_node = this->nnode();
42 
43  // Storage for derivatives of the (geometric) shape functions, and call
44  // the shape functions
45  DShape dpsi(n_node, DIM);
46  this->dshape_local(s, psi, dpsi);
47 
48  // Storage for the (geometric) jacobian and its inverse
49  DenseMatrix<double> jacobian(DIM), inverse_jacobian(DIM);
50 
51  // Get the jacobian of the geometric mapping and its determinant
52  double det = local_to_eulerian_mapping(dpsi, jacobian, inverse_jacobian);
53 
54  // Get the number of computational basis vectors
55  const unsigned n_q_basis = this->nq_basis();
56 
57  // Loop over the basis vectors
58  for (unsigned l = 0; l < n_q_basis; l++)
59  {
60  // Loop over the spatial components
61  for (unsigned i = 0; i < DIM; i++)
62  {
63  // Zero the basis
64  q_basis(l, i) = 0.0;
65  }
66  }
67 
68  // Loop over the spatial components
69  for (unsigned i = 0; i < DIM; i++)
70  {
71  // And again
72  for (unsigned j = 0; j < DIM; j++)
73  {
74  // Get the element of the jacobian (must transpose it due to different
75  // conventions) and divide by the determinant
76  double jac_trans = jacobian(j, i) / det;
77 
78  // Loop over the computational basis vectors
79  for (unsigned l = 0; l < n_q_basis; l++)
80  {
81  // Apply the appropriate div-conserving mapping
82  q_basis(l, i) += jac_trans * q_basis_local(l, j);
83  }
84  }
85  }
86 
87  // Scale the basis by the ratio of the length of the edge to the length of
88  // the corresponding edge on the reference element
89  scale_basis(q_basis);
90 
91  return det;
92  }
virtual void scale_basis(Shape &basis) const =0
Scale the edge basis to allow arbitrary edge mappings.
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References DIM, i, j, and s.

Referenced by oomph::DarcyEquations< DIM >::get_q_basis().

Member Data Documentation

◆ Mass_source_fct_pt

template<unsigned DIM>
MassSourceFctPt oomph::DarcyEquations< DIM >::Mass_source_fct_pt
private

◆ Source_fct_pt

template<unsigned DIM>
SourceFctPt oomph::DarcyEquations< DIM >::Source_fct_pt
private

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