oomph::PoissonEquations< DIM > Class Template Referenceabstract

#include <poisson_elements.h>

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

Public Types

typedef void(* PoissonSourceFctPt) (const Vector< double > &x, double &f)
 
typedef void(* PoissonSourceFctGradientPt) (const Vector< double > &x, Vector< double > &gradient)
 
- 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

 PoissonEquations ()
 Constructor (must initialise the Source_fct_pt to null) More...
 
 PoissonEquations (const PoissonEquations &dummy)=delete
 Broken copy constructor. More...
 
void operator= (const PoissonEquations &)=delete
 Broken assignment operator. More...
 
virtual unsigned u_index_poisson () const
 
void point_output_data (const Vector< double > &s, Vector< double > &data)
 
unsigned nscalar_paraview () const
 
void scalar_value_paraview (std::ofstream &file_out, const unsigned &i, const unsigned &nplot) const
 
std::string scalar_name_paraview (const unsigned &i) const
 
void scalar_value_fct_paraview (std::ofstream &file_out, const unsigned &i, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt) const
 
void output (std::ostream &outfile)
 Output with default number of plot points. More...
 
void output (std::ostream &outfile, const unsigned &n_plot)
 
void output (FILE *file_pt)
 C_style output with default number of plot points. More...
 
void output (FILE *file_pt, const unsigned &n_plot)
 
void output_fct (std::ostream &outfile, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
 
virtual void output_fct (std::ostream &outfile, const unsigned &n_plot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt)
 
void compute_norm (double &norm)
 Compute norm of solution: square of the L2 norm. More...
 
void compute_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
 Get error against and norm of exact solution. More...
 
void compute_error (std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
 Dummy, time dependent error checker. More...
 
PoissonSourceFctPtsource_fct_pt ()
 Access function: Pointer to source function. More...
 
PoissonSourceFctPt source_fct_pt () const
 Access function: Pointer to source function. Const version. More...
 
PoissonSourceFctGradientPtsource_fct_gradient_pt ()
 Access function: Pointer to gradient of source function. More...
 
PoissonSourceFctGradientPt source_fct_gradient_pt () const
 Access function: Pointer to gradient source function. Const version. More...
 
virtual void get_source_poisson (const unsigned &ipt, const Vector< double > &x, double &source) const
 
virtual void get_source_gradient_poisson (const unsigned &ipt, const Vector< double > &x, Vector< double > &gradient) const
 
void get_flux (const Vector< double > &s, Vector< double > &flux) const
 Get flux: flux[i] = du/dx_i. More...
 
void get_dflux_dnodal_u (const Vector< double > &s, Vector< Vector< double >> &dflux_dnodal_u) const
 
void fill_in_contribution_to_residuals (Vector< double > &residuals)
 Add the element's contribution to its residual vector (wrapper) More...
 
void fill_in_contribution_to_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 
virtual double interpolated_u_poisson (const Vector< double > &s) const
 
virtual void get_dresidual_dnodal_coordinates (RankThreeTensor< double > &dresidual_dnodal_coordinates)
 
unsigned self_test ()
 Self-test: Return 0 for OK. 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 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
 
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 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 void output (const unsigned &t, std::ostream &outfile, const unsigned &n_plot) const
 
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, 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 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 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 double dshape_and_dtest_eulerian_poisson (const Vector< double > &s, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const =0
 
virtual double dshape_and_dtest_eulerian_at_knot_poisson (const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const =0
 
virtual double dshape_and_dtest_eulerian_at_knot_poisson (const unsigned &ipt, Shape &psi, DShape &dpsidx, RankFourTensor< double > &d_dpsidx_dX, Shape &test, DShape &dtestdx, RankFourTensor< double > &d_dtestdx_dX, DenseMatrix< double > &djacobian_dX) const =0
 
virtual void fill_in_generic_residual_contribution_poisson (Vector< double > &residuals, DenseMatrix< double > &jacobian, const unsigned &flag)
 
- 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)
 
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)
 

Protected Attributes

PoissonSourceFctPt Source_fct_pt
 Pointer to source function: More...
 
PoissonSourceFctGradientPt Source_fct_gradient_pt
 Pointer to gradient of source function. More...
 
- 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
 

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
 
- 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::PoissonEquations< DIM >

A class for all isoparametric elements that solve the Poisson equations.

\[ \frac{\partial^2 u}{\partial x_i^2} = f(x_j) \]

This contains the generic maths. Shape functions, geometric mapping etc. must get implemented in derived class.

Member Typedef Documentation

◆ PoissonSourceFctGradientPt

template<unsigned DIM>
typedef void(* oomph::PoissonEquations< DIM >::PoissonSourceFctGradientPt) (const Vector< double > &x, Vector< double > &gradient)

Function pointer to gradient of source function fct(x,g(x)) – x is a Vector!

◆ PoissonSourceFctPt

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

Function pointer to source function fct(x,f(x)) – x is a Vector!

Constructor & Destructor Documentation

◆ PoissonEquations() [1/2]

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

Constructor (must initialise the Source_fct_pt to null)

PoissonSourceFctPt Source_fct_pt
Pointer to source function:
Definition: poisson_elements.h:523
PoissonSourceFctGradientPt Source_fct_gradient_pt
Pointer to gradient of source function.
Definition: poisson_elements.h:526

◆ PoissonEquations() [2/2]

template<unsigned DIM>
oomph::PoissonEquations< DIM >::PoissonEquations ( const PoissonEquations< DIM > &  dummy)
delete

Broken copy constructor.

Member Function Documentation

◆ compute_error() [1/2]

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

Get error against and norm of exact solution.

Validate against exact solution

Solution is provided via function pointer. Plot error at a given number of plot points.

Reimplemented from oomph::FiniteElement.

505  {
506  // Initialise
507  error = 0.0;
508  norm = 0.0;
509 
510  // Vector of local coordinates
511  Vector<double> s(DIM);
512 
513  // Vector for coordintes
514  Vector<double> x(DIM);
515 
516  // Find out how many nodes there are in the element
517  unsigned n_node = nnode();
518 
519  Shape psi(n_node);
520 
521  // Set the value of n_intpt
522  unsigned n_intpt = integral_pt()->nweight();
523 
524  // Tecplot
525  outfile << "ZONE" << std::endl;
526 
527  // Exact solution Vector (here a scalar)
528  Vector<double> exact_soln(1);
529 
530  // Loop over the integration points
531  for (unsigned ipt = 0; ipt < n_intpt; ipt++)
532  {
533  // Assign values of s
534  for (unsigned i = 0; i < DIM; i++)
535  {
536  s[i] = integral_pt()->knot(ipt, i);
537  }
538 
539  // Get the integral weight
540  double w = integral_pt()->weight(ipt);
541 
542  // Get jacobian of mapping
543  double J = J_eulerian(s);
544 
545  // Premultiply the weights and the Jacobian
546  double W = w * J;
547 
548  // Get x position as Vector
549  interpolated_x(s, x);
550 
551  // Get FE function value
552  double u_fe = interpolated_u_poisson(s);
553 
554  // Get exact solution at this point
555  (*exact_soln_pt)(x, exact_soln);
556 
557  // Output x,y,...,error
558  for (unsigned i = 0; i < DIM; i++)
559  {
560  outfile << x[i] << " ";
561  }
562  outfile << exact_soln[0] << " " << exact_soln[0] - u_fe << std::endl;
563 
564  // Add to error and norm
565  norm += exact_soln[0] * exact_soln[0] * W;
566  error += (exact_soln[0] - u_fe) * (exact_soln[0] - u_fe) * W;
567  }
568  }
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
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
unsigned nnode() const
Return the number of nodes.
Definition: elements.h:2210
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.
virtual double interpolated_u_poisson(const Vector< double > &s) const
Definition: poisson_elements.h:445
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, s, and plotDoE::x.

◆ compute_error() [2/2]

template<unsigned DIM>
void oomph::PoissonEquations< DIM >::compute_error ( std::ostream &  outfile,
FiniteElement::UnsteadyExactSolutionFctPt  exact_soln_pt,
const double time,
double error,
double norm 
)
inlinevirtual

Dummy, time dependent error checker.

Reimplemented from oomph::FiniteElement.

273  {
274  throw OomphLibError(
275  "There is no time-dependent compute_error() for Poisson elements",
278  }
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.

◆ compute_norm()

template<unsigned DIM>
void oomph::PoissonEquations< DIM >::compute_norm ( double norm)
virtual

Compute norm of solution: square of the L2 norm.

Compute norm of the solution.

Reimplemented from oomph::GeneralisedElement.

448  {
449  // Initialise
450  norm = 0.0;
451 
452  // Vector of local coordinates
453  Vector<double> s(DIM);
454 
455  // Solution
456  double u = 0.0;
457 
458  // Find out how many nodes there are in the element
459  unsigned n_node = this->nnode();
460 
461  Shape psi(n_node);
462 
463  // Set the value of n_intpt
464  unsigned n_intpt = this->integral_pt()->nweight();
465 
466  // Loop over the integration points
467  for (unsigned ipt = 0; ipt < n_intpt; ipt++)
468  {
469  // Assign values of s
470  for (unsigned i = 0; i < DIM; i++)
471  {
472  s[i] = this->integral_pt()->knot(ipt, i);
473  }
474 
475  // Get the integral weight
476  double w = this->integral_pt()->weight(ipt);
477 
478  // Get jacobian of mapping
479  double J = this->J_eulerian(s);
480 
481  // Premultiply the weights and the Jacobian
482  double W = w * J;
483 
484  // Get FE function value
485  u = this->interpolated_u_poisson(s);
486 
487  // Add to norm
488  norm += u * u * W;
489  }
490  }

References DIM, i, and s.

◆ dshape_and_dtest_eulerian_at_knot_poisson() [1/2]

template<unsigned DIM>
virtual double oomph::PoissonEquations< DIM >::dshape_and_dtest_eulerian_at_knot_poisson ( const unsigned ipt,
Shape psi,
DShape dpsidx,
RankFourTensor< double > &  d_dpsidx_dX,
Shape test,
DShape dtestdx,
RankFourTensor< double > &  d_dtestdx_dX,
DenseMatrix< double > &  djacobian_dX 
) const
protectedpure virtual

Shape/test functions and derivs w.r.t. to global coords at integration point ipt; return Jacobian of mapping (J). Also compute derivatives of dpsidx, dtestdx and J w.r.t. nodal coordinates.

Implemented in oomph::TPoissonElement< DIM, NNODE_1D >, oomph::QSpectralPoissonElement< DIM, NNODE_1D >, oomph::QPoissonElement< DIM, NNODE_1D >, and oomph::QPoissonElement< DIM, 2 >.

◆ dshape_and_dtest_eulerian_at_knot_poisson() [2/2]

template<unsigned DIM>
virtual double oomph::PoissonEquations< DIM >::dshape_and_dtest_eulerian_at_knot_poisson ( const unsigned ipt,
Shape psi,
DShape dpsidx,
Shape test,
DShape dtestdx 
) const
protectedpure virtual

Shape/test functions and derivs w.r.t. to global coords at integration point ipt; return Jacobian of mapping

Implemented in oomph::TPoissonElement< DIM, NNODE_1D >, oomph::QSpectralPoissonElement< DIM, NNODE_1D >, oomph::QPoissonElement< DIM, NNODE_1D >, and oomph::QPoissonElement< DIM, 2 >.

◆ dshape_and_dtest_eulerian_poisson()

template<unsigned DIM>
virtual double oomph::PoissonEquations< DIM >::dshape_and_dtest_eulerian_poisson ( const Vector< double > &  s,
Shape psi,
DShape dpsidx,
Shape test,
DShape dtestdx 
) const
protectedpure virtual

Shape/test functions and derivs w.r.t. to global coords at local coord. s; return Jacobian of mapping

Implemented in oomph::TPoissonElement< DIM, NNODE_1D >, oomph::QSpectralPoissonElement< DIM, NNODE_1D >, oomph::QPoissonElement< DIM, NNODE_1D >, and oomph::QPoissonElement< DIM, 2 >.

◆ fill_in_contribution_to_jacobian()

template<unsigned DIM>
void oomph::PoissonEquations< DIM >::fill_in_contribution_to_jacobian ( Vector< double > &  residuals,
DenseMatrix< double > &  jacobian 
)
inlinevirtual

Add the element's contribution to its residual vector and element Jacobian matrix (wrapper)

Reimplemented from oomph::FiniteElement.

437  {
438  // Call the generic routine with the flag set to 1
439  fill_in_generic_residual_contribution_poisson(residuals, jacobian, 1);
440  }
virtual void fill_in_generic_residual_contribution_poisson(Vector< double > &residuals, DenseMatrix< double > &jacobian, const unsigned &flag)
Definition: poisson_elements.cc:49

References oomph::PoissonEquations< DIM >::fill_in_generic_residual_contribution_poisson().

◆ fill_in_contribution_to_residuals()

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

Add the element's contribution to its residual vector (wrapper)

Reimplemented from oomph::GeneralisedElement.

425  {
426  // Call the generic residuals function with flag set to 0
427  // using a dummy matrix argument
429  residuals, GeneralisedElement::Dummy_matrix, 0);
430  }
static DenseMatrix< double > Dummy_matrix
Definition: elements.h:227

References oomph::GeneralisedElement::Dummy_matrix, and oomph::PoissonEquations< DIM >::fill_in_generic_residual_contribution_poisson().

◆ fill_in_generic_residual_contribution_poisson()

template<unsigned DIM>
void oomph::PoissonEquations< DIM >::fill_in_generic_residual_contribution_poisson ( Vector< double > &  residuals,
DenseMatrix< double > &  jacobian,
const unsigned flag 
)
protectedvirtual

Compute element residual Vector only (if flag=and/or element Jacobian matrix

Compute element residual Vector and/or element Jacobian matrix

flag=1: compute both flag=0: compute only residual Vector

Pure version without hanging nodes

Reimplemented in oomph::RefineablePoissonEquations< DIM >.

53  {
54  // Find out how many nodes there are
55  const unsigned n_node = nnode();
56 
57  // Set up memory for the shape and test functions
58  Shape psi(n_node), test(n_node);
59  DShape dpsidx(n_node, DIM), dtestdx(n_node, DIM);
60 
61  // Index at which the poisson unknown is stored
62  const unsigned u_nodal_index = u_index_poisson();
63 
64  // Set the value of n_intpt
65  const unsigned n_intpt = integral_pt()->nweight();
66 
67  // Integers to store the local equation and unknown numbers
68  int local_eqn = 0, local_unknown = 0;
69 
70  // Loop over the integration points
71  for (unsigned ipt = 0; ipt < n_intpt; ipt++)
72  {
73  // Get the integral weight
74  double w = integral_pt()->weight(ipt);
75 
76  // Call the derivatives of the shape and test functions
78  ipt, psi, dpsidx, test, dtestdx);
79 
80  // Premultiply the weights and the Jacobian
81  double W = w * J;
82 
83  // Calculate local values of unknown
84  // Allocate and initialise to zero
85  double interpolated_u = 0.0;
86  Vector<double> interpolated_x(DIM, 0.0);
87  Vector<double> interpolated_dudx(DIM, 0.0);
88 
89  // Calculate function value and derivatives:
90  //-----------------------------------------
91  // Loop over nodes
92  for (unsigned l = 0; l < n_node; l++)
93  {
94  // Get the nodal value of the poisson unknown
95  double u_value = raw_nodal_value(l, u_nodal_index);
96  interpolated_u += u_value * psi(l);
97  // Loop over directions
98  for (unsigned j = 0; j < DIM; j++)
99  {
100  interpolated_x[j] += raw_nodal_position(l, j) * psi(l);
101  interpolated_dudx[j] += u_value * dpsidx(l, j);
102  }
103  }
104 
105 
106  // Get source function
107  //-------------------
108  double source;
110 
111  // Assemble residuals and Jacobian
112  //--------------------------------
113 
114  // Loop over the test functions
115  for (unsigned l = 0; l < n_node; l++)
116  {
117  // Get the local equation
118  local_eqn = nodal_local_eqn(l, u_nodal_index);
119  // IF it's not a boundary condition
120  if (local_eqn >= 0)
121  {
122  // Add body force/source term here
123  residuals[local_eqn] += source * test(l) * W;
124 
125  // The Poisson bit itself
126  for (unsigned k = 0; k < DIM; k++)
127  {
128  residuals[local_eqn] += interpolated_dudx[k] * dtestdx(l, k) * W;
129  }
130 
131  // Calculate the jacobian
132  //-----------------------
133  if (flag)
134  {
135  // Loop over the velocity shape functions again
136  for (unsigned l2 = 0; l2 < n_node; l2++)
137  {
138  local_unknown = nodal_local_eqn(l2, u_nodal_index);
139  // If at a non-zero degree of freedom add in the entry
140  if (local_unknown >= 0)
141  {
142  // Add contribution to Elemental Matrix
143  for (unsigned i = 0; i < DIM; i++)
144  {
145  jacobian(local_eqn, local_unknown) +=
146  dpsidx(l2, i) * dtestdx(l, i) * W;
147  }
148  }
149  }
150  }
151  }
152  }
153 
154  } // End of loop over integration points
155  }
int nodal_local_eqn(const unsigned &n, const unsigned &i) const
Definition: elements.h:1432
double raw_nodal_value(const unsigned &n, const unsigned &i) const
Definition: elements.h:2576
double raw_nodal_position(const unsigned &n, const unsigned &i) const
Definition: elements.cc:1686
virtual void get_source_poisson(const unsigned &ipt, const Vector< double > &x, double &source) const
Definition: poisson_elements.h:309
virtual unsigned u_index_poisson() const
Definition: poisson_elements.h:85
virtual double dshape_and_dtest_eulerian_at_knot_poisson(const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const =0
char char char int int * k
Definition: level2_impl.h:374
squared absolute sa ArrayBase::abs2 DOXCOMMA MatrixBase::cwiseAbs2 sa Eigen::abs2 DOXCOMMA Eigen::pow DOXCOMMA ArrayBase::square nearest sa Eigen::floor DOXCOMMA Eigen::ceil DOXCOMMA ArrayBase::round nearest integer not less than the given sa Eigen::floor DOXCOMMA ArrayBase::ceil not a number test
Definition: GlobalFunctions.h:109
void source(const Vector< double > &x, Vector< double > &f)
Source function.
Definition: unstructured_two_d_circle.cc:46
Definition: indexed_view.cpp:20
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References DIM, i, J, j, k, TestProblem::source(), Eigen::test, w, and oomph::QuadTreeNames::W.

Referenced by oomph::PoissonEquations< DIM >::fill_in_contribution_to_jacobian(), and oomph::PoissonEquations< DIM >::fill_in_contribution_to_residuals().

◆ get_dflux_dnodal_u()

template<unsigned DIM>
void oomph::PoissonEquations< DIM >::get_dflux_dnodal_u ( const Vector< double > &  s,
Vector< Vector< double >> &  dflux_dnodal_u 
) const
inline

Get derivative of flux w.r.t. to nodal values: dflux_dnodal_u[i][j] = d ( du/dx_i ) / dU_j

401  {
402  // Find out how many nodes there are in the element
403  const unsigned n_node = nnode();
404 
405  // Set up memory for the shape and test functions
406  Shape psi(n_node);
407  DShape dpsidx(n_node, DIM);
408 
409  // Call the derivatives of the shape and test functions
410  dshape_eulerian(s, psi, dpsidx);
411 
412  // And here it is...
413  for (unsigned i = 0; i < DIM; i++)
414  {
415  for (unsigned j = 0; j < n_node; j++)
416  {
417  dflux_dnodal_u[i][j] = dpsidx(j, i);
418  }
419  }
420  }
double dshape_eulerian(const Vector< double > &s, Shape &psi, DShape &dpsidx) const
Definition: elements.cc:3298

References DIM, oomph::FiniteElement::dshape_eulerian(), i, j, oomph::FiniteElement::nnode(), and s.

◆ get_dresidual_dnodal_coordinates()

template<unsigned DIM>
void oomph::PoissonEquations< DIM >::get_dresidual_dnodal_coordinates ( RankThreeTensor< double > &  dresidual_dnodal_coordinates)
virtual

Compute derivatives of elemental residual vector with respect to nodal coordinates. Overwrites default implementation in FiniteElement base class. dresidual_dnodal_coordinates(l,i,j) = d res(l) / dX_{ij}

Compute derivatives of elemental residual vector with respect to nodal coordinates (fully analytical). dresidual_dnodal_coordinates(l,i,j) = d res(l) / dX_{ij} Overloads the FD-based version in the FE base class.

Reimplemented from oomph::FiniteElement.

Reimplemented in oomph::RefineablePoissonEquations< DIM >, and ModalPRefineableQPoissonElement< DIM >.

167  {
168  // Determine number of nodes in element
169  const unsigned n_node = nnode();
170 
171  // Set up memory for the shape and test functions
172  Shape psi(n_node), test(n_node);
173  DShape dpsidx(n_node, DIM), dtestdx(n_node, DIM);
174 
175  // Deriatives of shape fct derivatives w.r.t. nodal coords
176  RankFourTensor<double> d_dpsidx_dX(DIM, n_node, n_node, DIM);
177  RankFourTensor<double> d_dtestdx_dX(DIM, n_node, n_node, DIM);
178 
179  // Derivative of Jacobian of mapping w.r.t. to nodal coords
180  DenseMatrix<double> dJ_dX(DIM, n_node);
181 
182  // Derivatives of derivative of u w.r.t. nodal coords
183  RankThreeTensor<double> d_dudx_dX(DIM, n_node, DIM);
184 
185  // Source function and its gradient
186  double source;
187  Vector<double> d_source_dx(DIM);
188 
189  // Index at which the poisson unknown is stored
190  const unsigned u_nodal_index = u_index_poisson();
191 
192  // Determine the number of integration points
193  const unsigned n_intpt = integral_pt()->nweight();
194 
195  // Integer to store the local equation number
196  int local_eqn = 0;
197 
198  // Loop over the integration points
199  for (unsigned ipt = 0; ipt < n_intpt; ipt++)
200  {
201  // Get the integral weight
202  double w = integral_pt()->weight(ipt);
203 
204  // Call the derivatives of the shape/test functions, as well as the
205  // derivatives of these w.r.t. nodal coordinates and the derivative
206  // of the jacobian of the mapping w.r.t. nodal coordinates
208  ipt, psi, dpsidx, d_dpsidx_dX, test, dtestdx, d_dtestdx_dX, dJ_dX);
209 
210  // Calculate local values
211  // Allocate and initialise to zero
212  Vector<double> interpolated_x(DIM, 0.0);
213  Vector<double> interpolated_dudx(DIM, 0.0);
214 
215  // Calculate function value and derivatives:
216  // -----------------------------------------
217  // Loop over nodes
218  for (unsigned l = 0; l < n_node; l++)
219  {
220  // Get the nodal value of the Poisson unknown
221  double u_value = raw_nodal_value(l, u_nodal_index);
222 
223  // Loop over directions
224  for (unsigned i = 0; i < DIM; i++)
225  {
226  interpolated_x[i] += raw_nodal_position(l, i) * psi(l);
227  interpolated_dudx[i] += u_value * dpsidx(l, i);
228  }
229  }
230 
231  // Calculate derivative of du/dx_i w.r.t. nodal positions X_{pq}
232  for (unsigned q = 0; q < n_node; q++)
233  {
234  // Loop over coordinate directions
235  for (unsigned p = 0; p < DIM; p++)
236  {
237  for (unsigned i = 0; i < DIM; i++)
238  {
239  double aux = 0.0;
240  for (unsigned j = 0; j < n_node; j++)
241  {
242  aux +=
243  raw_nodal_value(j, u_nodal_index) * d_dpsidx_dX(p, q, j, i);
244  }
245  d_dudx_dX(p, q, i) = aux;
246  }
247  }
248  }
249 
250  // Get source function
252 
253  // Get gradient of source function
254  get_source_gradient_poisson(ipt, interpolated_x, d_source_dx);
255 
256  // Assemble d res_{local_eqn} / d X_{pq}
257  // -------------------------------------
258 
259  // Loop over the test functions
260  for (unsigned l = 0; l < n_node; l++)
261  {
262  // Get the local equation
263  local_eqn = nodal_local_eqn(l, u_nodal_index);
264 
265  // IF it's not a boundary condition
266  if (local_eqn >= 0)
267  {
268  // Loop over coordinate directions
269  for (unsigned p = 0; p < DIM; p++)
270  {
271  // Loop over nodes
272  for (unsigned q = 0; q < n_node; q++)
273  {
274  double sum = source * test(l) * dJ_dX(p, q) +
275  d_source_dx[p] * test(l) * psi(q) * J;
276 
277  for (unsigned i = 0; i < DIM; i++)
278  {
279  sum += interpolated_dudx[i] * (dtestdx(l, i) * dJ_dX(p, q) +
280  d_dtestdx_dX(p, q, l, i) * J) +
281  d_dudx_dX(p, q, i) * dtestdx(l, i) * J;
282  }
283 
284  // Multiply through by integration weight
285  dresidual_dnodal_coordinates(local_eqn, p, q) += sum * w;
286  }
287  }
288  }
289  }
290  } // End of loop over integration points
291  }
float * p
Definition: Tutorial_Map_using.cpp:9
virtual void get_source_gradient_poisson(const unsigned &ipt, const Vector< double > &x, Vector< double > &gradient) const
Definition: poisson_elements.h:331
EIGEN_DEVICE_FUNC const Scalar & q
Definition: SpecialFunctionsImpl.h:2019

References DIM, J, TestProblem::source(), Eigen::test, and w.

◆ get_flux()

template<unsigned DIM>
void oomph::PoissonEquations< DIM >::get_flux ( const Vector< double > &  s,
Vector< double > &  flux 
) const
inline

Get flux: flux[i] = du/dx_i.

365  {
366  // Find out how many nodes there are in the element
367  const unsigned n_node = nnode();
368 
369  // Get the index at which the unknown is stored
370  const unsigned u_nodal_index = u_index_poisson();
371 
372  // Set up memory for the shape and test functions
373  Shape psi(n_node);
374  DShape dpsidx(n_node, DIM);
375 
376  // Call the derivatives of the shape and test functions
377  dshape_eulerian(s, psi, dpsidx);
378 
379  // Initialise to zero
380  for (unsigned j = 0; j < DIM; j++)
381  {
382  flux[j] = 0.0;
383  }
384 
385  // Loop over nodes
386  for (unsigned l = 0; l < n_node; l++)
387  {
388  // Loop over derivative directions
389  for (unsigned j = 0; j < DIM; j++)
390  {
391  flux[j] += this->nodal_value(l, u_nodal_index) * dpsidx(l, j);
392  }
393  }
394  }
double nodal_value(const unsigned &n, const unsigned &i) const
Definition: elements.h:2593
void flux(const double &time, const Vector< double > &x, double &flux)
Get flux applied along boundary x=0.
Definition: pretend_melt.cc:59

References DIM, oomph::FiniteElement::dshape_eulerian(), ProblemParameters::flux(), j, oomph::FiniteElement::nnode(), oomph::FiniteElement::nodal_value(), s, and oomph::PoissonEquations< DIM >::u_index_poisson().

Referenced by oomph::PRefineableQPoissonElement< DIM >::compute_energy_error(), oomph::RefineablePoissonEquations< DIM >::get_Z2_flux(), and oomph::TPoissonElement< DIM, NNODE_1D >::get_Z2_flux().

◆ get_source_gradient_poisson()

template<unsigned DIM>
virtual void oomph::PoissonEquations< DIM >::get_source_gradient_poisson ( const unsigned ipt,
const Vector< double > &  x,
Vector< double > &  gradient 
) const
inlinevirtual

Get gradient of source term at (Eulerian) position x. This function is virtual to allow overloading in multi-physics problems where the strength of the source function might be determined by another system of equations. Computed via function pointer (if set) or by finite differencing (default)

335  {
336  // If no gradient function has been set, FD it
337  if (Source_fct_gradient_pt == 0)
338  {
339  // Reference value
340  double source = 0.0;
341  get_source_poisson(ipt, x, source);
342 
343  // FD it
345  double source_pls = 0.0;
346  Vector<double> x_pls(x);
347  for (unsigned i = 0; i < DIM; i++)
348  {
349  x_pls[i] += eps_fd;
350  get_source_poisson(ipt, x_pls, source_pls);
351  gradient[i] = (source_pls - source) / eps_fd;
352  x_pls[i] = x[i];
353  }
354  }
355  else
356  {
357  // Get gradient
358  (*Source_fct_gradient_pt)(x, gradient);
359  }
360  }
static double Default_fd_jacobian_step
Definition: elements.h:1198

References oomph::GeneralisedElement::Default_fd_jacobian_step, DIM, oomph::PoissonEquations< DIM >::get_source_poisson(), i, TestProblem::source(), oomph::PoissonEquations< DIM >::Source_fct_gradient_pt, and plotDoE::x.

◆ get_source_poisson()

template<unsigned DIM>
virtual void oomph::PoissonEquations< DIM >::get_source_poisson ( const unsigned ipt,
const Vector< double > &  x,
double source 
) const
inlinevirtual

Get source term at (Eulerian) position x. This function is virtual to allow overloading in multi-physics problems where the strength of the source function might be determined by another system of equations.

312  {
313  // If no source function has been set, return zero
314  if (Source_fct_pt == 0)
315  {
316  source = 0.0;
317  }
318  else
319  {
320  // Get source strength
321  (*Source_fct_pt)(x, source);
322  }
323  }

References TestProblem::source(), oomph::PoissonEquations< DIM >::Source_fct_pt, and plotDoE::x.

Referenced by oomph::PoissonEquations< DIM >::get_source_gradient_poisson().

◆ interpolated_u_poisson()

template<unsigned DIM>
virtual double oomph::PoissonEquations< DIM >::interpolated_u_poisson ( const Vector< double > &  s) const
inlinevirtual

Return FE representation of function value u_poisson(s) at local coordinate s

446  {
447  // Find number of nodes
448  const unsigned n_node = nnode();
449 
450  // Get the index at which the poisson unknown is stored
451  const unsigned u_nodal_index = u_index_poisson();
452 
453  // Local shape function
454  Shape psi(n_node);
455 
456  // Find values of shape function
457  shape(s, psi);
458 
459  // Initialise value of u
460  double interpolated_u = 0.0;
461 
462  // Loop over the local nodes and sum
463  for (unsigned l = 0; l < n_node; l++)
464  {
465  interpolated_u += this->nodal_value(l, u_nodal_index) * psi[l];
466  }
467 
468  return (interpolated_u);
469  }
virtual void shape(const Vector< double > &s, Shape &psi) const =0

References oomph::FiniteElement::nnode(), oomph::FiniteElement::nodal_value(), s, oomph::FiniteElement::shape(), and oomph::PoissonEquations< DIM >::u_index_poisson().

Referenced by oomph::PoissonEquations< DIM >::point_output_data(), and oomph::PoissonEquations< DIM >::scalar_value_paraview().

◆ nscalar_paraview()

template<unsigned DIM>
unsigned oomph::PoissonEquations< DIM >::nscalar_paraview ( ) const
inlinevirtual

Number of scalars/fields output by this element. Reimplements broken virtual function in base class.

Reimplemented from oomph::FiniteElement.

113  {
114  return 1;
115  }

◆ operator=()

template<unsigned DIM>
void oomph::PoissonEquations< DIM >::operator= ( const PoissonEquations< DIM > &  )
delete

Broken assignment operator.

◆ output() [1/4]

template<unsigned DIM>
void oomph::PoissonEquations< DIM >::output ( FILE *  file_pt)
inlinevirtual

C_style output with default number of plot points.

Reimplemented from oomph::FiniteElement.

Reimplemented in oomph::TPoissonElement< DIM, NNODE_1D >, oomph::QSpectralPoissonElement< DIM, NNODE_1D >, oomph::QPoissonElement< DIM, NNODE_1D >, and oomph::QPoissonElement< DIM, 2 >.

226  {
227  const unsigned n_plot = 5;
228  output(file_pt, n_plot);
229  }
void output(std::ostream &outfile)
Output with default number of plot points.
Definition: poisson_elements.h:214

References oomph::PoissonEquations< DIM >::output().

◆ output() [2/4]

template<unsigned DIM>
void oomph::PoissonEquations< DIM >::output ( FILE *  file_pt,
const unsigned nplot 
)
virtual

C-style output FE representation of soln: x,y,u or x,y,z,u at n_plot^DIM plot points

C-style output function:

x,y,u or x,y,z,u

nplot points in each coordinate direction

Reimplemented from oomph::FiniteElement.

Reimplemented in oomph::TPoissonElement< DIM, NNODE_1D >, oomph::QSpectralPoissonElement< DIM, NNODE_1D >, oomph::QPoissonElement< DIM, NNODE_1D >, and oomph::QPoissonElement< DIM, 2 >.

365  {
366  // Vector of local coordinates
367  Vector<double> s(DIM);
368 
369  // Tecplot header info
370  fprintf(file_pt, "%s", tecplot_zone_string(nplot).c_str());
371 
372  // Loop over plot points
373  unsigned num_plot_points = nplot_points(nplot);
374  for (unsigned iplot = 0; iplot < num_plot_points; iplot++)
375  {
376  // Get local coordinates of plot point
377  get_s_plot(iplot, nplot, s);
378 
379  for (unsigned i = 0; i < DIM; i++)
380  {
381  fprintf(file_pt, "%g ", interpolated_x(s, i));
382  }
383  fprintf(file_pt, "%g \n", interpolated_u_poisson(s));
384  }
385 
386  // Write tecplot footer (e.g. FE connectivity lists)
387  write_tecplot_zone_footer(file_pt, nplot);
388  }
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() [3/4]

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

◆ output() [4/4]

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

Output FE representation of soln: x,y,u or x,y,z,u at n_plot^DIM plot points

Output function:

x,y,u or x,y,z,u

nplot points in each coordinate direction

Reimplemented from oomph::FiniteElement.

Reimplemented in oomph::TPoissonElement< DIM, NNODE_1D >, oomph::QSpectralPoissonElement< DIM, NNODE_1D >, oomph::QPoissonElement< DIM, NNODE_1D >, and oomph::QPoissonElement< DIM, 2 >.

330  {
331  // Vector of local coordinates
332  Vector<double> s(DIM);
333 
334  // Tecplot header info
335  outfile << tecplot_zone_string(nplot);
336 
337  // Loop over plot points
338  unsigned num_plot_points = nplot_points(nplot);
339  for (unsigned iplot = 0; iplot < num_plot_points; iplot++)
340  {
341  // Get local coordinates of plot point
342  get_s_plot(iplot, nplot, s);
343 
344  for (unsigned i = 0; i < DIM; i++)
345  {
346  outfile << interpolated_x(s, i) << " ";
347  }
348  outfile << interpolated_u_poisson(s) << std::endl;
349  }
350 
351  // Write tecplot footer (e.g. FE connectivity lists)
352  write_tecplot_zone_footer(outfile, nplot);
353  }

References DIM, i, and s.

◆ output_fct() [1/2]

template<unsigned DIM>
virtual void oomph::PoissonEquations< DIM >::output_fct ( std::ostream &  outfile,
const unsigned n_plot,
const double time,
FiniteElement::UnsteadyExactSolutionFctPt  exact_soln_pt 
)
inlinevirtual

Output exact soln: x,y,u_exact or x,y,z,u_exact at n_plot^DIM plot points (dummy time-dependent version to keep intel compiler happy)

Reimplemented from oomph::FiniteElement.

Reimplemented in oomph::TPoissonElement< DIM, NNODE_1D >, oomph::QSpectralPoissonElement< DIM, NNODE_1D >, oomph::QPoissonElement< DIM, NNODE_1D >, and oomph::QPoissonElement< DIM, 2 >.

249  {
250  throw OomphLibError(
251  "There is no time-dependent output_fct() for Poisson elements ",
254  }

References OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.

◆ output_fct() [2/2]

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

Output exact soln: x,y,u_exact or x,y,z,u_exact at n_plot^DIM plot points

Output exact solution

Solution is provided via function pointer. Plot at a given number of plot points.

x,y,u_exact or x,y,z,u_exact

Reimplemented from oomph::FiniteElement.

Reimplemented in oomph::TPoissonElement< DIM, NNODE_1D >, oomph::QSpectralPoissonElement< DIM, NNODE_1D >, oomph::QPoissonElement< DIM, NNODE_1D >, and oomph::QPoissonElement< DIM, 2 >.

404  {
405  // Vector of local coordinates
406  Vector<double> s(DIM);
407 
408  // Vector for coordintes
409  Vector<double> x(DIM);
410 
411  // Tecplot header info
412  outfile << tecplot_zone_string(nplot);
413 
414  // Exact solution Vector (here a scalar)
415  Vector<double> exact_soln(1);
416 
417  // Loop over plot points
418  unsigned num_plot_points = nplot_points(nplot);
419  for (unsigned iplot = 0; iplot < num_plot_points; iplot++)
420  {
421  // Get local coordinates of plot point
422  get_s_plot(iplot, nplot, s);
423 
424  // Get x position as Vector
425  interpolated_x(s, x);
426 
427  // Get exact solution at this point
428  (*exact_soln_pt)(x, exact_soln);
429 
430  // Output x,y,...,u_exact
431  for (unsigned i = 0; i < DIM; i++)
432  {
433  outfile << x[i] << " ";
434  }
435  outfile << exact_soln[0] << std::endl;
436  }
437 
438  // Write tecplot footer (e.g. FE connectivity lists)
439  write_tecplot_zone_footer(outfile, nplot);
440  }

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

Referenced by oomph::QPoissonElement< DIM, NNODE_1D >::output_fct(), oomph::QSpectralPoissonElement< DIM, NNODE_1D >::output_fct(), and oomph::TPoissonElement< DIM, NNODE_1D >::output_fct().

◆ point_output_data()

template<unsigned DIM>
void oomph::PoissonEquations< DIM >::point_output_data ( const Vector< double > &  s,
Vector< double > &  data 
)
inlinevirtual

Output solution in data vector at local cordinates s: x,y [,z], u

Reimplemented from oomph::FiniteElement.

94  {
95  // Dimension
96  unsigned dim = s.size();
97 
98  // Resize data for values
99  data.resize(dim + 1);
100 
101  // Write values in the vector
102  for (unsigned i = 0; i < dim; i++)
103  {
104  data[i] = interpolated_x(s, i);
105  }
106  data[dim] = this->interpolated_u_poisson(s);
107  }
int data[]
Definition: Map_placement_new.cpp:1
unsigned dim() const
Definition: elements.h:2611

References data, oomph::FiniteElement::dim(), i, oomph::PoissonEquations< DIM >::interpolated_u_poisson(), oomph::FiniteElement::interpolated_x(), and s.

◆ scalar_name_paraview()

template<unsigned DIM>
std::string oomph::PoissonEquations< DIM >::scalar_name_paraview ( const unsigned i) const
inlinevirtual

Name of the i-th scalar field. Default implementation returns V1 for the first one, V2 for the second etc. Can (should!) be overloaded with more meaningful names in specific elements.

Reimplemented from oomph::FiniteElement.

150  {
151 #ifdef PARANOID
152  if (i != 0)
153  {
154  std::stringstream error_stream;
155  error_stream
156  << "Poisson elements only store a single field so i must be 0 rather"
157  << " than " << i << std::endl;
158  throw OomphLibError(
159  error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
160  }
161 #endif
162 
163  return "Poisson solution";
164  }

References i, OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.

◆ scalar_value_fct_paraview()

template<unsigned DIM>
void oomph::PoissonEquations< DIM >::scalar_value_fct_paraview ( std::ofstream &  file_out,
const unsigned i,
const unsigned nplot,
FiniteElement::SteadyExactSolutionFctPt  exact_soln_pt 
) const
inlinevirtual

Write values of the i-th scalar field at the plot points. Needs to be implemented for each new specific element type.

Reimplemented from oomph::FiniteElement.

174  {
175 #ifdef PARANOID
176  if (i != 0)
177  {
178  std::stringstream error_stream;
179  error_stream << "Poisson equation has only one field. Can't call "
180  << "this function for value " << i << std::endl;
181  throw OomphLibError(
182  error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
183  }
184 #endif
185 
186  // Vector of local coordinates
187  Vector<double> s(DIM);
188 
189  // Vector for coordinates
190  Vector<double> x(DIM);
191 
192  // Exact solution Vector
193  Vector<double> exact_soln(1);
194 
195  // Loop over plot points
196  unsigned num_plot_points = nplot_points_paraview(nplot);
197  for (unsigned iplot = 0; iplot < num_plot_points; iplot++)
198  {
199  // Get local coordinates of plot point
200  get_s_plot(iplot, nplot, s);
201 
202  // Get x position as Vector
203  interpolated_x(s, x);
204 
205  // Get exact solution at this point
206  (*exact_soln_pt)(x, exact_soln);
207 
208  // Write it
209  file_out << exact_soln[0] << std::endl;
210  }
211  }
virtual unsigned nplot_points_paraview(const unsigned &nplot) const
Definition: elements.h:2862

References DIM, ProblemParameters::exact_soln(), oomph::FiniteElement::get_s_plot(), i, oomph::FiniteElement::interpolated_x(), oomph::FiniteElement::nplot_points_paraview(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, s, and plotDoE::x.

◆ scalar_value_paraview()

template<unsigned DIM>
void oomph::PoissonEquations< DIM >::scalar_value_paraview ( std::ofstream &  file_out,
const unsigned i,
const unsigned nplot 
) const
inlinevirtual

Write values of the i-th scalar field at the plot points. Needs to be implemented for each new specific element type.

Reimplemented from oomph::FiniteElement.

122  {
123 #ifdef PARANOID
124  if (i != 0)
125  {
126  std::stringstream error_stream;
127  error_stream
128  << "Poisson elements only store a single field so i must be 0 rather"
129  << " than " << i << std::endl;
130  throw OomphLibError(
131  error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
132  }
133 #endif
134 
135  unsigned local_loop = this->nplot_points_paraview(nplot);
136  for (unsigned j = 0; j < local_loop; j++)
137  {
138  // Get the local coordinate of the required plot point
139  Vector<double> s(DIM);
140  this->get_s_plot(j, nplot, s);
141 
142  file_out << this->interpolated_u_poisson(s) << std::endl;
143  }
144  }

References DIM, oomph::FiniteElement::get_s_plot(), i, oomph::PoissonEquations< DIM >::interpolated_u_poisson(), j, oomph::FiniteElement::nplot_points_paraview(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, and s.

◆ self_test()

template<unsigned DIM>
unsigned oomph::PoissonEquations< DIM >::self_test
virtual

Self-test: Return 0 for OK.

Reimplemented from oomph::FiniteElement.

299  {
300  bool passed = true;
301 
302  // Check lower-level stuff
303  if (FiniteElement::self_test() != 0)
304  {
305  passed = false;
306  }
307 
308  // Return verdict
309  if (passed)
310  {
311  return 0;
312  }
313  else
314  {
315  return 1;
316  }
317  }
virtual unsigned self_test()
Definition: elements.cc:4440

References oomph::FiniteElement::self_test().

◆ source_fct_gradient_pt() [1/2]

template<unsigned DIM>
PoissonSourceFctGradientPt& oomph::PoissonEquations< DIM >::source_fct_gradient_pt ( )
inline

Access function: Pointer to gradient of source function.

294  {
295  return Source_fct_gradient_pt;
296  }

References oomph::PoissonEquations< DIM >::Source_fct_gradient_pt.

◆ source_fct_gradient_pt() [2/2]

template<unsigned DIM>
PoissonSourceFctGradientPt oomph::PoissonEquations< DIM >::source_fct_gradient_pt ( ) const
inline

Access function: Pointer to gradient source function. Const version.

300  {
301  return Source_fct_gradient_pt;
302  }

References oomph::PoissonEquations< DIM >::Source_fct_gradient_pt.

◆ source_fct_pt() [1/2]

template<unsigned DIM>
PoissonSourceFctPt& oomph::PoissonEquations< DIM >::source_fct_pt ( )
inline

Access function: Pointer to source function.

282  {
283  return Source_fct_pt;
284  }

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

Referenced by oomph::RefineablePoissonEquations< DIM >::further_build().

◆ source_fct_pt() [2/2]

template<unsigned DIM>
PoissonSourceFctPt oomph::PoissonEquations< DIM >::source_fct_pt ( ) const
inline

Access function: Pointer to source function. Const version.

288  {
289  return Source_fct_pt;
290  }

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

◆ u_index_poisson()

template<unsigned DIM>
virtual unsigned oomph::PoissonEquations< DIM >::u_index_poisson ( ) const
inlinevirtual

Return the index at which the unknown value is stored. The default value, 0, is appropriate for single-physics problems, when there is only one variable, the value that satisfies the poisson equation. In derived multi-physics elements, this function should be overloaded to reflect the chosen storage scheme. Note that these equations require that the unknown is always stored at the same index at each node.

86  {
87  return 0;
88  }

Referenced by oomph::PoissonEquations< DIM >::get_flux(), oomph::RefineablePoissonEquations< DIM >::get_interpolated_values(), oomph::PoissonEquations< DIM >::interpolated_u_poisson(), and oomph::PoissonFluxElement< ELEMENT >::PoissonFluxElement().

Member Data Documentation

◆ Source_fct_gradient_pt

template<unsigned DIM>
PoissonSourceFctGradientPt oomph::PoissonEquations< DIM >::Source_fct_gradient_pt
protected

◆ Source_fct_pt


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