oomph::SurfaceMeltElement< ELEMENT > Class Template Reference

#include <heat_transfer_and_melt_elements.h>

+ Inheritance diagram for oomph::SurfaceMeltElement< ELEMENT >:

Public Member Functions

 SurfaceMeltElement (FiniteElement *const &bulk_el_pt, const int &face_index, const unsigned &id=0, const bool &called_from_refineable_constructor=false)
 
double get_interpolated_lagrange_p (const Vector< double > &s)
 
void fill_in_contribution_to_residuals (Vector< double > &residuals)
 Return the residuals. More...
 
double melt_temperature ()
 Melt temperature. More...
 
double *& melt_temperature_pt ()
 Pointer to (non-default) melt temperature. More...
 
void disable_melting ()
 Switch off melting by pinning melt-rate dofs. More...
 
void set_lagrange_multiplier_pressure_to_zero ()
 
double zeta_nodal (const unsigned &n, const unsigned &k, const unsigned &i) const
 
void interpolated_melt_rate (const Vector< double > &s, double &melt_flux)
 Melt rate at local coordinate s. More...
 
void output_melt (std::ostream &outfile)
 
- Public Member Functions inherited from oomph::SolidFaceElement
double zeta_nodal (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double interpolated_xi (const Vector< double > &s, const unsigned &i) const
 
void interpolated_xi (const Vector< double > &s, Vector< double > &xi) const
 
- Public Member Functions inherited from oomph::FaceElement
 FaceElement ()
 Constructor: Initialise all appropriate member data. More...
 
virtual ~FaceElement ()
 Empty virtual destructor. More...
 
 FaceElement (const FaceElement &)=delete
 Broken copy constructor. More...
 
const unsignedboundary_number_in_bulk_mesh () const
 Broken assignment operator. More...
 
void set_boundary_number_in_bulk_mesh (const unsigned &b)
 Set function for the boundary number in bulk mesh. More...
 
double J_eulerian (const Vector< double > &s) const
 
double J_eulerian_at_knot (const unsigned &ipt) const
 
void check_J_eulerian_at_knots (bool &passed) const
 
double interpolated_x (const Vector< double > &s, const unsigned &i) const
 
double interpolated_x (const unsigned &t, const Vector< double > &s, const unsigned &i) const
 
void interpolated_x (const Vector< double > &s, Vector< double > &x) const
 
void interpolated_x (const unsigned &t, const Vector< double > &s, Vector< double > &x) const
 
double interpolated_dxdt (const Vector< double > &s, const unsigned &i, const unsigned &t)
 
void interpolated_dxdt (const Vector< double > &s, const unsigned &t, Vector< double > &dxdt)
 
intnormal_sign ()
 
int normal_sign () const
 
intface_index ()
 
int face_index () const
 
const Vector< double > * tangent_direction_pt () const
 Public access function for the tangent direction pointer. More...
 
void set_tangent_direction (Vector< double > *tangent_direction_pt)
 Set the tangent direction vector. More...
 
void turn_on_warning_for_discontinuous_tangent ()
 
void turn_off_warning_for_discontinuous_tangent ()
 
void continuous_tangent_and_outer_unit_normal (const Vector< double > &s, Vector< Vector< double >> &tang_vec, Vector< double > &unit_normal) const
 
void continuous_tangent_and_outer_unit_normal (const unsigned &ipt, Vector< Vector< double >> &tang_vec, Vector< double > &unit_normal) const
 
void outer_unit_normal (const Vector< double > &s, Vector< double > &unit_normal) const
 Compute outer unit normal at the specified local coordinate. More...
 
void outer_unit_normal (const unsigned &ipt, Vector< double > &unit_normal) const
 Compute outer unit normal at ipt-th integration point. More...
 
FiniteElement *& bulk_element_pt ()
 Pointer to higher-dimensional "bulk" element. More...
 
FiniteElementbulk_element_pt () const
 Pointer to higher-dimensional "bulk" element (const version) More...
 
CoordinateMappingFctPtface_to_bulk_coordinate_fct_pt ()
 
CoordinateMappingFctPt face_to_bulk_coordinate_fct_pt () const
 
BulkCoordinateDerivativesFctPtbulk_coordinate_derivatives_fct_pt ()
 
BulkCoordinateDerivativesFctPt bulk_coordinate_derivatives_fct_pt () const
 
Vector< doublelocal_coordinate_in_bulk (const Vector< double > &s) const
 
void get_local_coordinate_in_bulk (const Vector< double > &s, Vector< double > &s_bulk) const
 
void get_ds_bulk_ds_face (const Vector< double > &s, DenseMatrix< double > &dsbulk_dsface, unsigned &interior_direction) const
 
unsignedbulk_position_type (const unsigned &i)
 
const unsignedbulk_position_type (const unsigned &i) const
 
void bulk_node_number_resize (const unsigned &i)
 Resize the storage for the bulk node numbers. More...
 
unsignedbulk_node_number (const unsigned &n)
 
const unsignedbulk_node_number (const unsigned &n) const
 
void bulk_position_type_resize (const unsigned &i)
 Resize the storage for bulk_position_type to i entries. More...
 
unsignednbulk_value (const unsigned &n)
 
unsigned nbulk_value (const unsigned &n) const
 
void nbulk_value_resize (const unsigned &i)
 
void resize_nodes (Vector< unsigned > &nadditional_data_values)
 
void output_zeta (std::ostream &outfile, const unsigned &nplot)
 Output boundary coordinate zeta. 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)
 
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
 
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_nodal_local_dofs (std::ostream &out, const std::string &current_string) const
 
Node *& node_pt (const unsigned &n)
 Return a pointer to the local node n. More...
 
Node *const & node_pt (const unsigned &n) const
 Return a pointer to the local node n (const version) More...
 
unsigned nnode () const
 Return the number of nodes. More...
 
virtual unsigned nnode_1d () const
 
double raw_nodal_position (const unsigned &n, const unsigned &i) const
 
double raw_nodal_position (const unsigned &t, const unsigned &n, const unsigned &i) const
 
double raw_dnodal_position_dt (const unsigned &n, const unsigned &i) const
 
double raw_dnodal_position_dt (const unsigned &n, const unsigned &j, const unsigned &i) const
 
double raw_nodal_position_gen (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double raw_nodal_position_gen (const unsigned &t, const unsigned &n, const unsigned &k, const unsigned &i) const
 
double raw_dnodal_position_gen_dt (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double raw_dnodal_position_gen_dt (const unsigned &j, const unsigned &n, const unsigned &k, const unsigned &i) const
 
double nodal_position (const unsigned &n, const unsigned &i) const
 
double nodal_position (const unsigned &t, const unsigned &n, const unsigned &i) const
 
double dnodal_position_dt (const unsigned &n, const unsigned &i) const
 Return the i-th component of nodal velocity: dx/dt at local node n. More...
 
double dnodal_position_dt (const unsigned &n, const unsigned &j, const unsigned &i) const
 
double nodal_position_gen (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double nodal_position_gen (const unsigned &t, const unsigned &n, const unsigned &k, const unsigned &i) const
 
double dnodal_position_gen_dt (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double dnodal_position_gen_dt (const unsigned &j, const unsigned &n, const unsigned &k, const unsigned &i) const
 
virtual void get_dresidual_dnodal_coordinates (RankThreeTensor< double > &dresidual_dnodal_coordinates)
 
virtual void disable_ALE ()
 
virtual void enable_ALE ()
 
virtual unsigned required_nvalue (const unsigned &n) const
 
unsigned nnodal_position_type () const
 
bool has_hanging_nodes () const
 
unsigned nodal_dimension () const
 Return the required Eulerian dimension of the nodes in this element. More...
 
virtual unsigned nvertex_node () const
 
virtual Nodevertex_node_pt (const unsigned &j) const
 
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...
 
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)
 
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 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_fct (std::ostream &outfile, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
 Output an exact solution over the element. More...
 
virtual void output_fct (std::ostream &outfile, const unsigned &n_plot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt)
 Output a time-dependent exact solution over the element. More...
 
virtual void output_fct (std::ostream &outfile, const unsigned &n_plot, const double &time, const SolutionFunctorBase &exact_soln) const
 Output a time-dependent exact solution over the element. More...
 
virtual void get_s_plot (const unsigned &i, const unsigned &nplot, Vector< double > &s, const bool &shifted_to_interior=false) const
 
virtual std::string tecplot_zone_string (const unsigned &nplot) const
 
virtual void write_tecplot_zone_footer (std::ostream &outfile, const unsigned &nplot) const
 
virtual void write_tecplot_zone_footer (FILE *file_pt, const unsigned &nplot) const
 
virtual unsigned nplot_points (const unsigned &nplot) const
 
virtual void compute_error (FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
 Calculate the norm of the error and that of the exact solution. More...
 
virtual void compute_error (FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
 Calculate the norm of the error and that of the exact solution. More...
 
virtual void compute_error (FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, Vector< double > &error, Vector< double > &norm)
 
virtual void compute_error (FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, Vector< double > &error, Vector< double > &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, Vector< double > &error, Vector< double > &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, Vector< double > &error, Vector< double > &norm)
 
virtual void compute_abs_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error)
 
void integrate_fct (FiniteElement::SteadyExactSolutionFctPt integrand_fct_pt, Vector< double > &integral)
 Integrate Vector-valued function over element. More...
 
void integrate_fct (FiniteElement::UnsteadyExactSolutionFctPt integrand_fct_pt, const double &time, Vector< double > &integral)
 Integrate Vector-valued time-dep function over element. More...
 
virtual void build_face_element (const int &face_index, FaceElement *face_element_pt)
 
virtual unsigned self_test ()
 
virtual unsigned get_bulk_node_number (const int &face_index, const unsigned &i) const
 
virtual int face_outer_unit_normal_sign (const int &face_index) const
 Get the sign of the outer unit normal on the face given by face_index. More...
 
virtual unsigned nnode_on_face () const
 
void face_node_number_error_check (const unsigned &i) const
 Range check for face node numbers. More...
 
virtual CoordinateMappingFctPt face_to_bulk_coordinate_fct_pt (const int &face_index) const
 
virtual BulkCoordinateDerivativesFctPt bulk_coordinate_derivatives_fct_pt (const int &face_index) const
 
- Public Member Functions inherited from oomph::GeneralisedElement
 GeneralisedElement ()
 Constructor: Initialise all pointers and all values to zero. More...
 
virtual ~GeneralisedElement ()
 Virtual destructor to clean up any memory allocated by the object. More...
 
 GeneralisedElement (const GeneralisedElement &)=delete
 Broken copy constructor. More...
 
void operator= (const GeneralisedElement &)=delete
 Broken assignment operator. More...
 
Data *& internal_data_pt (const unsigned &i)
 Return a pointer to i-th internal data object. More...
 
Data *const & internal_data_pt (const unsigned &i) const
 Return a pointer to i-th internal data object (const version) More...
 
Data *& external_data_pt (const unsigned &i)
 Return a pointer to i-th external data object. More...
 
Data *const & external_data_pt (const unsigned &i) const
 Return a pointer to i-th external data object (const version) More...
 
unsigned long eqn_number (const unsigned &ieqn_local) const
 
int local_eqn_number (const unsigned long &ieqn_global) const
 
unsigned add_external_data (Data *const &data_pt, const bool &fd=true)
 
bool external_data_fd (const unsigned &i) const
 
void exclude_external_data_fd (const unsigned &i)
 
void include_external_data_fd (const unsigned &i)
 
void flush_external_data ()
 Flush all external data. More...
 
void flush_external_data (Data *const &data_pt)
 Flush the object addressed by data_pt from the external data array. More...
 
unsigned ninternal_data () const
 Return the number of internal data objects. More...
 
unsigned nexternal_data () const
 Return the number of external data objects. More...
 
unsigned ndof () const
 Return the number of equations/dofs in the element. More...
 
void dof_vector (const unsigned &t, Vector< double > &dof)
 Return the vector of dof values at time level t. More...
 
void dof_pt_vector (Vector< double * > &dof_pt)
 Return the vector of pointers to dof values. More...
 
void set_internal_data_time_stepper (const unsigned &i, TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data)
 
void assign_internal_eqn_numbers (unsigned long &global_number, Vector< double * > &Dof_pt)
 
void describe_dofs (std::ostream &out, const std::string &current_string) const
 
void add_internal_value_pt_to_map (std::map< unsigned, double * > &map_of_value_pt)
 
virtual void assign_local_eqn_numbers (const bool &store_local_dof_pt)
 
virtual void complete_setup_of_dependencies ()
 
virtual void get_residuals (Vector< double > &residuals)
 
virtual void get_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 
virtual void get_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &mass_matrix)
 
virtual void get_jacobian_and_mass_matrix (Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
 
virtual void get_dresiduals_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam)
 
virtual void get_djacobian_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam)
 
virtual void get_djacobian_and_dmass_matrix_dparameter (double *const &parameter_pt, Vector< double > &dres_dparam, DenseMatrix< double > &djac_dparam, DenseMatrix< double > &dmass_matrix_dparam)
 
virtual void get_hessian_vector_products (Vector< double > const &Y, DenseMatrix< double > const &C, DenseMatrix< double > &product)
 
virtual void get_inner_products (Vector< std::pair< unsigned, unsigned >> const &history_index, Vector< double > &inner_product)
 
virtual void get_inner_product_vectors (Vector< unsigned > const &history_index, Vector< Vector< double >> &inner_product_vector)
 
virtual void compute_norm (Vector< double > &norm)
 
virtual 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::SolidFiniteElement
void set_lagrangian_dimension (const unsigned &lagrangian_dimension)
 
virtual bool has_internal_solid_data ()
 
 SolidFiniteElement ()
 Constructor: Set defaults. More...
 
virtual ~SolidFiniteElement ()
 Destructor to clean up any allocated memory. More...
 
 SolidFiniteElement (const SolidFiniteElement &)=delete
 Broken copy constructor. More...
 
unsigned ngeom_data () const
 Broken assignment operator. More...
 
Datageom_data_pt (const unsigned &j)
 
void identify_geometric_data (std::set< Data * > &geometric_data_pt)
 
virtual void get_x_and_xi (const Vector< double > &s, Vector< double > &x_fe, Vector< double > &x, Vector< double > &xi_fe, Vector< double > &xi) const
 
virtual void set_macro_elem_pt (MacroElement *macro_elem_pt)
 
virtual void set_macro_elem_pt (MacroElement *macro_elem_pt, MacroElement *undeformed_macro_elem_pt)
 
void set_undeformed_macro_elem_pt (MacroElement *undeformed_macro_elem_pt)
 
MacroElementundeformed_macro_elem_pt ()
 Access function to pointer to "undeformed" macro element. More...
 
double dshape_lagrangian (const Vector< double > &s, Shape &psi, DShape &dpsidxi) const
 
virtual double dshape_lagrangian_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsidxi) const
 
double d2shape_lagrangian (const Vector< double > &s, Shape &psi, DShape &dpsidxi, DShape &d2psidxi) const
 
virtual double d2shape_lagrangian_at_knot (const unsigned &ipt, Shape &psi, DShape &dpsidxi, DShape &d2psidxi) const
 
unsigned lagrangian_dimension () const
 
unsigned nnodal_lagrangian_type () const
 
Nodeconstruct_node (const unsigned &n)
 Construct the local node n and return a pointer to it. More...
 
Nodeconstruct_node (const unsigned &n, TimeStepper *const &time_stepper_pt)
 
Nodeconstruct_boundary_node (const unsigned &n)
 
Nodeconstruct_boundary_node (const unsigned &n, TimeStepper *const &time_stepper_pt)
 
virtual void assign_all_generic_local_eqn_numbers (const bool &store_local_dof_pt)
 
void describe_local_dofs (std::ostream &out, const std::string &current_string) const
 
double raw_lagrangian_position (const unsigned &n, const unsigned &i) const
 
double raw_lagrangian_position_gen (const unsigned &n, const unsigned &k, const unsigned &i) const
 
double lagrangian_position (const unsigned &n, const unsigned &i) const
 Return i-th Lagrangian coordinate at local node n. More...
 
double lagrangian_position_gen (const unsigned &n, const unsigned &k, const unsigned &i) const
 
virtual void interpolated_dxids (const Vector< double > &s, DenseMatrix< double > &dxids) const
 
virtual void J_lagrangian (const Vector< double > &s) const
 
virtual double J_lagrangian_at_knot (const unsigned &ipt) const
 
SolidInitialCondition *& solid_ic_pt ()
 Pointer to object that describes the initial condition. More...
 
void enable_solve_for_consistent_newmark_accel ()
 
void disable_solve_for_consistent_newmark_accel ()
 Set to reset the problem being solved to be the standard problem. More...
 
MultiplierFctPtmultiplier_fct_pt ()
 
MultiplierFctPt multiplier_fct_pt () const
 
virtual void get_residuals_for_solid_ic (Vector< double > &residuals)
 
void fill_in_residuals_for_solid_ic (Vector< double > &residuals)
 
void fill_in_jacobian_for_solid_ic (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 
void fill_in_jacobian_for_newmark_accel (DenseMatrix< double > &jacobian)
 
void compute_norm (double &el_norm)
 
int position_local_eqn (const unsigned &n, const unsigned &k, const unsigned &j) const
 
- Public Member Functions inherited from oomph::UnsteadyHeatBaseFaceElement< ELEMENT >
 UnsteadyHeatBaseFaceElement (FiniteElement *const &bulk_el_pt, const int &face_index)
 Constructor. More...
 
virtual ~UnsteadyHeatBaseFaceElement ()
 Destructor. More...
 
void interpolated_u (const Vector< double > &s, double &u)
 Temperature at local coordinate s. More...
 
void output (std::ostream &outfile)
 Output function. More...
 
void output (std::ostream &outfile, const unsigned &n_plot)
 
void output (FILE *file_pt)
 C_style output function. More...
 
void output (FILE *file_pt, const unsigned &n_plot)
 C-style output function. More...
 
- Public Member Functions inherited from oomph::TemplateFreeUnsteadyHeatBaseFaceElement
 TemplateFreeUnsteadyHeatBaseFaceElement ()
 Constructor. More...
 
virtual ~TemplateFreeUnsteadyHeatBaseFaceElement ()
 Destrutor. More...
 
UnsteadyHeatPrescribedFluxFctPtflux_fct_pt ()
 Access function for the prescribed-flux function pointer. More...
 

Protected Member Functions

void fill_in_contribution_to_residuals_surface_melt (Vector< double > &residuals)
 Helper function that actually calculates the residuals. More...
 
- Protected Member Functions inherited from oomph::FaceElement
void add_additional_values (const Vector< unsigned > &nadditional_values, const unsigned &id)
 
- 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 Member Functions inherited from oomph::SolidFiniteElement
void fill_in_generic_jacobian_for_solid_ic (Vector< double > &residuals, DenseMatrix< double > &jacobian, const unsigned &flag)
 
void set_nnodal_lagrangian_type (const unsigned &nlagrangian_type)
 
virtual double local_to_lagrangian_mapping (const DShape &dpsids, DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 
double local_to_lagrangian_mapping (const DShape &dpsids, DenseMatrix< double > &inverse_jacobian) const
 
virtual double local_to_lagrangian_mapping_diagonal (const DShape &dpsids, DenseMatrix< double > &jacobian, DenseMatrix< double > &inverse_jacobian) const
 
virtual void assign_solid_local_eqn_numbers (const bool &store_local_dof)
 Assign local equation numbers for the solid equations in the element. More...
 
void describe_solid_local_dofs (std::ostream &out, const std::string &current_string) const
 Classifies dofs locally for solid specific aspects. More...
 
void fill_in_contribution_to_jacobian (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 
virtual void fill_in_jacobian_from_solid_position_by_fd (Vector< double > &residuals, DenseMatrix< double > &jacobian)
 
void fill_in_jacobian_from_solid_position_by_fd (DenseMatrix< double > &jacobian)
 
virtual void update_before_solid_position_fd ()
 
virtual void reset_after_solid_position_fd ()
 
virtual void update_in_solid_position_fd (const unsigned &i)
 
virtual void reset_in_solid_position_fd (const unsigned &i)
 
- Protected Member Functions inherited from oomph::UnsteadyHeatBaseFaceElement< ELEMENT >
double shape_and_test (const Vector< double > &s, Shape &psi, Shape &test) const
 
- Protected Member Functions inherited from oomph::TemplateFreeUnsteadyHeatBaseFaceElement
virtual void get_flux (const unsigned &ipt, const double &time, const Vector< double > &x, const Vector< double > &n, const double &u, double &flux)
 

Protected Attributes

unsigned Melt_id
 Id of additional unknowns (Lagrange multiplier ("pressure") and melt rate) More...
 
doubleMelt_temperature_pt
 Pointer to non-default melt temperature. More...
 
- Protected Attributes inherited from oomph::FaceElement
unsigned Boundary_number_in_bulk_mesh
 The boundary number in the bulk mesh to which this element is attached. More...
 
FiniteElementBulk_element_pt
 Pointer to the associated higher-dimensional "bulk" element. More...
 
Vector< unsignedBulk_node_number
 
Vector< unsignedNbulk_value
 
Vector< double > * Tangent_direction_pt
 
- 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
 
- Protected Attributes inherited from oomph::SolidFiniteElement
MacroElementUndeformed_macro_elem_pt
 Pointer to the element's "undeformed" macro element (NULL by default) More...
 
SolidInitialConditionSolid_ic_pt
 Pointer to object that specifies the initial condition. More...
 
bool Solve_for_consistent_newmark_accel_flag
 
- Protected Attributes inherited from oomph::TemplateFreeUnsteadyHeatBaseFaceElement
unsigned U_index_ust_heat
 Index at which temperature is stored. More...
 
unsigned Dim
 The spatial dimension of the problem. More...
 
UnsteadyHeatPrescribedFluxFctPt Flux_fct_pt
 Function pointer to the (global) prescribed-flux function. More...
 

Additional Inherited Members

- Public Types inherited from oomph::FiniteElement
typedef void(* SteadyExactSolutionFctPt) (const Vector< double > &, Vector< double > &)
 
typedef void(* UnsteadyExactSolutionFctPt) (const double &, const Vector< double > &, Vector< double > &)
 
- Public Types inherited from oomph::SolidFiniteElement
typedef double(* MultiplierFctPt) (const Vector< double > &xi)
 
- Public Types inherited from oomph::TemplateFreeUnsteadyHeatBaseFaceElement
typedef void(* UnsteadyHeatPrescribedFluxFctPt) (const double &time, const Vector< double > &x, const Vector< double > &n, const double &u, double &flux)
 
- 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<class ELEMENT>
class oomph::SurfaceMeltElement< ELEMENT >

////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////// A class for elements that impose Stefan (melting) condition on adjacent pseudo-solid-based unsteady heat elements.

The geometrical information can be read from the FaceGeometry<ELEMENT> class and and thus, we can be generic enough without the need to have a separate equations class.

Constructor & Destructor Documentation

◆ SurfaceMeltElement()

template<class ELEMENT >
oomph::SurfaceMeltElement< ELEMENT >::SurfaceMeltElement ( FiniteElement *const &  bulk_el_pt,
const int face_index,
const unsigned id = 0,
const bool called_from_refineable_constructor = false 
)
inline

Constructor, which takes a "bulk" element and the value of the index and its limit

2258  :
2259  UnsteadyHeatBaseFaceElement<ELEMENT>(bulk_el_pt,face_index)
2260  {
2261 
2262 #ifdef PARANOID
2263  {
2264  //Check that the element is not a refineable 3d element
2265  if (!called_from_refineable_constructor)
2266  {
2267  if(bulk_el_pt->dim()==3)
2268  {
2269  //Is it refineable
2270  if(dynamic_cast<RefineableElement*>(bulk_el_pt))
2271  {
2272  //Issue a warning
2273  std::string error_string=
2274  "This face element will not work correctly if nodes are hanging.\n";
2275  error_string+="Use the refineable version instead. ";
2276  OomphLibWarning(error_string,
2279  }
2280  }
2281  }
2282  }
2283 #endif
2284 
2285  // Use default melt temperature
2287 
2288  // Store the ID of the FaceElement -- this is used to distinguish
2289  // it from any others
2290  Melt_id=id;
2291 
2292  // We need two additional value for each FaceElement node:
2293  // (1) the normal traction (Lagrange multiplier) to be
2294  // exerted onto the pseudo-solid and (2) the melt rate
2295  unsigned n_nod=nnode();
2296  Vector<unsigned> n_additional_values(n_nod,2);
2297 
2298  // Now add storage for Lagrange multipliers and set the map containing
2299  // the position of the first entry of this face element's
2300  // additional values.
2301  add_additional_values(n_additional_values,id);
2302 
2303 #ifdef PARANOID
2304  // Check spatial dimension
2305  if (this->Dim!=2)
2306  {
2307  //Issue a warning
2308  throw OomphLibError(
2309  "This element will almost certainly not work in non-2D problems, though it should be easy enough to upgrade... Volunteers?\n",
2312  }
2313 #endif
2314 
2315 
2316  /* // hierher */
2317  /* // Add positions of bulk nodes as external data */
2318  /* unsigned nnod_bulk=bulk_el_pt->nnode(); */
2319  /* unsigned count=0; */
2320  /* for (unsigned j=0;j<nnod_bulk;j++) */
2321  /* { */
2322  /* SolidNode* bulk_nod_pt=dynamic_cast<SolidNode*>(bulk_el_pt->node_pt(j)); */
2323  /* unsigned do_it=true; */
2324  /* for (unsigned k=0;k<n_nod;k++) */
2325  /* { */
2326  /* SolidNode* nod_pt=dynamic_cast<SolidNode*>(node_pt(k)); */
2327  /* if (nod_pt==bulk_nod_pt) */
2328  /* { */
2329  /* do_it=false; */
2330  /* break; */
2331  /* } */
2332  /* } */
2333  /* if (do_it) */
2334  /* { */
2335  /* count++; */
2336  /* add_external_data(bulk_nod_pt->variable_position_pt()); */
2337  /* add_external_data(bulk_nod_pt); */
2338  /* } */
2339  /* } */
2340  /* oomph_info << "Added " << count << " position data from bulk\n"; */
2341 
2342  }
int & face_index()
Definition: elements.h:4626
void add_additional_values(const Vector< unsigned > &nadditional_values, const unsigned &id)
Definition: elements.h:4428
unsigned nnode() const
Return the number of nodes.
Definition: elements.h:2210
double * Melt_temperature_pt
Pointer to non-default melt temperature.
Definition: heat_transfer_and_melt_elements.h:2591
unsigned Melt_id
Id of additional unknowns (Lagrange multiplier ("pressure") and melt rate)
Definition: heat_transfer_and_melt_elements.h:2588
unsigned Dim
The spatial dimension of the problem.
Definition: heat_transfer_and_melt_elements.h:182
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References oomph::FaceElement::add_additional_values(), oomph::TemplateFreeUnsteadyHeatBaseFaceElement::Dim, oomph::FiniteElement::dim(), oomph::SurfaceMeltElement< ELEMENT >::Melt_id, oomph::SurfaceMeltElement< ELEMENT >::Melt_temperature_pt, oomph::FiniteElement::nnode(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, and oomph::Global_string_for_annotation::string().

Member Function Documentation

◆ disable_melting()

template<class ELEMENT >
void oomph::SurfaceMeltElement< ELEMENT >::disable_melting ( )
inline

Switch off melting by pinning melt-rate dofs.

2409  {
2410  unsigned n_node=nnode();
2411  for(unsigned l=0;l<n_node;l++)
2412  {
2413  // get the node pt
2414  Node* nod_pt = node_pt(l);
2415 
2416  // Cast to a boundary node
2417  BoundaryNodeBase *bnod_pt =
2418  dynamic_cast<BoundaryNodeBase*>(nod_pt);
2419 
2420  // Get the index of the first nodal value associated with
2421  // this FaceElement
2422  unsigned first_index=
2423  bnod_pt->index_of_first_value_assigned_by_face_element(Melt_id);
2424 
2425  // Pin melt rate (second additional value created by this face element)
2426  nod_pt->pin(first_index+1);
2427  }
2428  }
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
Definition: elements.h:2175

References oomph::BoundaryNodeBase::index_of_first_value_assigned_by_face_element(), oomph::SurfaceMeltElement< ELEMENT >::Melt_id, oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), and oomph::Data::pin().

Referenced by UnsteadyHeatMeltProblem< ELEMENT >::complete_problem_setup().

◆ fill_in_contribution_to_residuals()

template<class ELEMENT >
void oomph::SurfaceMeltElement< ELEMENT >::fill_in_contribution_to_residuals ( Vector< double > &  residuals)
inlinevirtual

Return the residuals.

Reimplemented from oomph::UnsteadyHeatBaseFaceElement< ELEMENT >.

2383  {
2385  }
void fill_in_contribution_to_residuals_surface_melt(Vector< double > &residuals)
Helper function that actually calculates the residuals.
Definition: heat_transfer_and_melt_elements.h:2712

References oomph::SurfaceMeltElement< ELEMENT >::fill_in_contribution_to_residuals_surface_melt().

◆ fill_in_contribution_to_residuals_surface_melt()

template<class ELEMENT >
void oomph::SurfaceMeltElement< ELEMENT >::fill_in_contribution_to_residuals_surface_melt ( Vector< double > &  residuals)
protected

Helper function that actually calculates the residuals.

Return the residuals for the SurfaceMeltElement equations.

//////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////

2713  {
2714 
2715  // hierher kill oomph_info << "hierher: Number of dofs: " << ndof() << std::endl;
2716 
2717  // Get continuous time from timestepper of first node
2718  double time=node_pt(0)->time_stepper_pt()->time_pt()->time();
2719 
2720  //Find out how many nodes there are
2721  unsigned n_node = nnode();
2722 
2723  //Find out how many positional dofs there are
2724  unsigned n_position_type = this->nnodal_position_type();
2725 
2726  //Find out the dimension of the node
2727  unsigned n_dim = this->nodal_dimension();
2728 
2729  //Integer to hold the local equation number
2730  int local_eqn=0;
2731 
2732  /* // hierher kill */
2733  /* { */
2734  /* for (unsigned j=0;j<n_node;j++) */
2735  /* { */
2736  /* SolidNode* nod_pt=dynamic_cast<SolidNode*>(node_pt(j)); */
2737  /* unsigned nval=nod_pt->nvalue(); */
2738  /* for (unsigned i=0;i<nval;i++) */
2739  /* { */
2740  /* oomph_info << "i_val, eqn_number: " << i << " " */
2741  /* << nod_pt->eqn_number(i) << " " */
2742  /* << std::endl; */
2743  /* } */
2744  /* Data* data_pt=dynamic_cast<SolidNode*>(node_pt(j)) */
2745  /* ->variable_position_pt(); */
2746  /* nval=data_pt->nvalue(); */
2747  /* for (unsigned i=0;i<nval;i++) */
2748  /* { */
2749  /* oomph_info << "i_pos, eqn_number: " << i << " " */
2750  /* << data_pt->eqn_number(i) << " " */
2751  /* << std::endl; */
2752  /* } */
2753  /* } */
2754  /* } */
2755 
2756  //Set up memory for the shape functions
2757  //Note that in this case, the number of lagrangian coordinates is always
2758  //equal to the dimension of the nodes
2759  Shape psi(n_node,n_position_type);
2760  DShape dpsids(n_node,n_position_type,n_dim-1);
2761 
2762  //Set the value of n_intpt
2763  unsigned n_intpt = integral_pt()->nweight();
2764 
2765  //Loop over the integration points
2766  for(unsigned ipt=0;ipt<n_intpt;ipt++)
2767  {
2768  //Get the integral weight
2769  double w = integral_pt()->weight(ipt);
2770 
2771  //Only need to call the local derivatives
2772  dshape_local_at_knot(ipt,psi,dpsids);
2773 
2774  //Calculate the Eulerian and Lagrangian coordinates
2775  Vector<double> interpolated_x(n_dim,0.0);
2776  Vector<double> interpolated_dxdt(n_dim,0.0);
2777  Vector<double> interpolated_xi(n_dim,0.0);
2778 
2779  // Interpolated Lagrange multiplier (pressure acting on solid
2780  // to enforce melting)
2781  double interpolated_lambda_p=0.0;
2782 
2783  // Get temperature
2784  double u=0;
2785 
2786  // Melt rate
2787  double melt_rate=0.0;
2788 
2789  //Also calculate the surface Vectors (derivatives wrt local coordinates)
2790  DenseMatrix<double> interpolated_A(n_dim-1,n_dim,0.0);
2791 
2792  //Calculate stuff
2793  for(unsigned l=0;l<n_node;l++)
2794  {
2795  // Cast to a boundary node
2796  BoundaryNodeBase *bnod_pt =
2797  dynamic_cast<BoundaryNodeBase*>(node_pt(l));
2798 
2799  // Get the index of the first nodal value associated with
2800  // this FaceElement
2801  unsigned first_index=
2802  bnod_pt->index_of_first_value_assigned_by_face_element(Melt_id);
2803 
2804  // Add to Lagrange multiplier (acting as pressure on solid
2805  // to enforce melting motion)
2806  interpolated_lambda_p+=node_pt(l)->value(first_index)*psi[l];
2807 
2808  // Add to melt rate
2809  melt_rate+=node_pt(l)->value(first_index+1)*psi[l];
2810 
2811  // Add to temperature
2812  u+=node_pt(l)->value(this->U_index_ust_heat)*psi[l];
2813 
2814  //Loop over positional dofs
2815  for(unsigned k=0;k<n_position_type;k++)
2816  {
2817  //Loop over spatial dimension
2818  for(unsigned i=0;i<n_dim;i++)
2819  {
2820  //Calculate the Eulerian and Lagrangian positions
2821  interpolated_x[i] +=
2823 
2824  interpolated_dxdt[i] +=
2825  this->dnodal_position_gen_dt(l,bulk_position_type(k),i)*psi(l,k);
2826 
2827  interpolated_xi[i] +=
2828  this->lagrangian_position_gen(l,bulk_position_type(k),i)*psi(l,k);
2829 
2830  //Loop over LOCAL derivative directions, to calculate the tangent(s)
2831  for(unsigned j=0;j<n_dim-1;j++)
2832  {
2833  interpolated_A(j,i) +=
2834  nodal_position_gen(l,bulk_position_type(k),i)*dpsids(l,k,j);
2835  }
2836  }
2837  }
2838  }
2839 
2840  //Now find the local deformed metric tensor from the tangent Vectors
2841  DenseMatrix<double> A(n_dim-1);
2842  for(unsigned i=0;i<n_dim-1;i++)
2843  {
2844  for(unsigned j=0;j<n_dim-1;j++)
2845  {
2846  //Initialise surface metric tensor to zero
2847  A(i,j) = 0.0;
2848  //Take the dot product
2849  for(unsigned k=0;k<n_dim;k++)
2850  {
2851  A(i,j) += interpolated_A(i,k)*interpolated_A(j,k);
2852  }
2853  }
2854  }
2855 
2856  // hierher replaced this in first sweep!
2857 
2858  //Get the outer unit normal
2859  Vector<double> interpolated_normal(n_dim);
2860  outer_unit_normal(ipt,interpolated_normal);
2861 
2862  // Local coordinate of integration point
2863  unsigned n_dim = this->nodal_dimension();
2864  Vector<double> s(n_dim-1);
2865  for (unsigned i=0;i<n_dim-1;i++)
2866  {
2867  s[i]=integral_pt()->knot(ipt,i);
2868  }
2869 
2870  /* // Outgoing Stefan Boltzmann radiative flux */
2871  /* //========================================= */
2872  /* double outgoing_stefan_boltzmann_flux=sigma()*pow((u+theta_0()),4); */
2873 
2874  /* // Incoming Stefan Boltzmann radiation */
2875  /* //==================================== */
2876  /* double incoming_sb_radiation=incoming_stefan_boltzmann_radiation */
2877  /* (ipt,interpolated_x,interpolated_normal); */
2878 
2879  /* // Get the incoming atmospheric radiation */
2880  /* //======================================== */
2881  /* double incoming_atmospheric_radiation= */
2882  /* atmospheric_radiation(ipt,time(),interpolated_x, */
2883  /* interpolated_normal); */
2884 
2885  /* // Get net heat flux */
2886  /* //================== */
2887  /* double net_heat_flux=incoming_atmospheric_radiation+ */
2888  /* incoming_sb_radiation-outgoing_stefan_boltzmann_flux; */
2889 
2890  //Get the imposed flux
2891  double flux=0.0;
2892  this->get_flux(ipt,time,interpolated_x,interpolated_normal,u,flux);
2893 
2894 
2895  // Calculate the "load" -- Lagrange multiplier acts as traction to
2896  //================================================================
2897  // to enforce required surface displacement
2898  //=========================================
2899  Vector<double> traction(n_dim);
2900  for (unsigned i=0;i<n_dim;i++)
2901  {
2902  traction[i]=-interpolated_lambda_p*interpolated_normal[i];
2903  }
2904 
2905 
2906  // Get normal velocity
2907  double normal_veloc=0.0;
2908  for (unsigned i=0;i<n_dim;i++)
2909  {
2910  normal_veloc+=interpolated_dxdt[i]*interpolated_normal[i];
2911  }
2912 
2913 
2914  //Find the determinant of the metric tensor
2915  double Adet =0.0;
2916  switch(n_dim)
2917  {
2918  case 2:
2919  Adet = A(0,0);
2920  break;
2921  case 3:
2922  Adet = A(0,0)*A(1,1) - A(0,1)*A(1,0);
2923  break;
2924  default:
2925  throw
2926  OomphLibError("Wrong dimension in SurfaceMeltElement",
2929  }
2930 
2931 
2932  //Premultiply the weights and the square-root of the determinant of
2933  //the metric tensor
2934  double W = w*sqrt(Adet);
2935 
2936  //Loop over the test functions, nodes of the element
2937  for(unsigned l=0;l<n_node;l++)
2938  {
2939 
2940  // Contributions to bulk solid equations
2941  //--------------------------------------
2942  //Loop of types of dofs
2943  for(unsigned k=0;k<n_position_type;k++)
2944  {
2945  //Loop over the displacement components
2946  for(unsigned i=0;i<n_dim;i++)
2947  {
2948  local_eqn = this->position_local_eqn(l,bulk_position_type(k),i);
2949  if(local_eqn >= 0)
2950  {
2951  //Add the loading terms to the residuals
2952  residuals[local_eqn] -= traction[i]*psi(l,k)*W;
2953  }
2954  }
2955  } //End of if not boundary condition
2956 
2957 
2958  // Contributions to equation that determines the Lagrange multiplier
2959  //------------------------------------------------------------------
2960  // (pressure) from kinematic condition
2961  //------------------------------------
2962 
2963  // Cast to a boundary node
2964  BoundaryNodeBase *bnod_pt =
2965  dynamic_cast<BoundaryNodeBase*>(node_pt(l));
2966 
2967  // Get the index of the first nodal value associated with
2968  // this FaceElement
2969  unsigned first_index=
2970  bnod_pt->index_of_first_value_assigned_by_face_element(Melt_id);
2971  local_eqn=this->nodal_local_eqn(l,first_index);
2972  if (local_eqn>=0)
2973  {
2974  residuals[local_eqn]+=(normal_veloc+melt_rate)*psi[l]*W;
2975  }
2976 
2977  // Contribution to flux into bulk
2978  //-------------------------------
2979  local_eqn = nodal_local_eqn(l,this->U_index_ust_heat);
2980  if(local_eqn >= 0)
2981  {
2982  //Add the prescribed flux terms
2983  residuals[local_eqn] -= (flux-melt_rate)*psi[l]*W;
2984  }
2985 
2986  } //End of loop over shape functions
2987  } //End of loop over integration points
2988 
2989 
2990  // Collocation for melt rate:
2991  //---------------------------
2992 
2993  //Loop over the nodes
2994  for(unsigned l=0;l<n_node;l++)
2995  {
2996  // get the node pt
2997  Node* nod_pt = node_pt(l);
2998 
2999  // Cast to a boundary node
3000  BoundaryNodeBase *bnod_pt =
3001  dynamic_cast<BoundaryNodeBase*>(nod_pt);
3002 
3003  // Get the index of the first nodal value associated with
3004  // this FaceElement
3005  unsigned first_index=
3006  bnod_pt->index_of_first_value_assigned_by_face_element(Melt_id);
3007 
3008  // Melt rate equation is second added one
3009  local_eqn = nodal_local_eqn(l,first_index+1);
3010 
3011  /*IF it's not a boundary condition*/
3012  if(local_eqn >= 0)
3013  {
3014  double u=nod_pt->value(this->U_index_ust_heat);
3015  double melt_rate=nod_pt->value(first_index+1);
3016 
3017  // Piecewise linear variation
3018  if ((melt_temperature()-u)>melt_rate)
3019  {
3020  residuals[local_eqn]+=melt_rate;
3021  }
3022  else
3023  {
3024  residuals[local_eqn]+=(melt_temperature()-u);
3025  }
3026 
3027  }
3028  }
3029 
3030  }
AnnoyingScalar sqrt(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:134
int i
Definition: BiCGSTAB_step_by_step.cpp:9
RowVector3d w
Definition: Matrix_resize_int.cpp:3
Matrix< SCALARA, Dynamic, Dynamic, opt_A > A
Definition: bench_gemm.cpp:47
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
Definition: nodes.h:238
unsigned & bulk_position_type(const unsigned &i)
Definition: elements.h:4805
double interpolated_dxdt(const Vector< double > &s, const unsigned &i, const unsigned &t)
Definition: elements.h:4583
void outer_unit_normal(const Vector< double > &s, Vector< double > &unit_normal) const
Compute outer unit normal at the specified local coordinate.
Definition: elements.cc:6006
double interpolated_x(const Vector< double > &s, const unsigned &i) const
Definition: elements.h:4528
unsigned nnodal_position_type() const
Definition: elements.h:2463
double dnodal_position_gen_dt(const unsigned &n, const unsigned &k, const unsigned &i) const
Definition: elements.h:2369
virtual void dshape_local_at_knot(const unsigned &ipt, Shape &psi, DShape &dpsids) const
Definition: elements.cc:3239
int nodal_local_eqn(const unsigned &n, const unsigned &i) const
Definition: elements.h:1432
double nodal_position_gen(const unsigned &n, const unsigned &k, const unsigned &i) const
Definition: elements.h:2349
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
Definition: elements.h:1963
unsigned nodal_dimension() const
Return the required Eulerian dimension of the nodes in this element.
Definition: elements.h:2484
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.
double value(const unsigned &i) const
Definition: nodes.cc:2408
double interpolated_xi(const Vector< double > &s, const unsigned &i) const
Definition: elements.h:4937
double lagrangian_position_gen(const unsigned &n, const unsigned &k, const unsigned &i) const
Definition: elements.h:3912
int position_local_eqn(const unsigned &n, const unsigned &k, const unsigned &j) const
Definition: elements.h:4137
double melt_temperature()
Melt temperature.
Definition: heat_transfer_and_melt_elements.h:2389
unsigned U_index_ust_heat
Index at which temperature is stored.
Definition: heat_transfer_and_melt_elements.h:179
virtual void get_flux(const unsigned &ipt, const double &time, const Vector< double > &x, const Vector< double > &n, const double &u, double &flux)
Definition: heat_transfer_and_melt_elements.h:159
Time *const & time_pt() const
Access function for the pointer to time (const version)
Definition: timesteppers.h:572
double & time()
Return the current value of the continuous time.
Definition: timesteppers.h:123
RealScalar s
Definition: level1_cplx_impl.h:130
char char char int int * k
Definition: level2_impl.h:374
void flux(const double &time, const Vector< double > &x, double &flux)
Get flux applied along boundary x=0.
Definition: pretend_melt.cc:59
@ W
Definition: quadtree.h:63
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References ProblemParameters::flux(), oomph::get_flux(), i, oomph::BoundaryNodeBase::index_of_first_value_assigned_by_face_element(), j, k, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, s, sqrt(), oomph::Node::value(), w, and oomph::QuadTreeNames::W.

Referenced by oomph::SurfaceMeltElement< ELEMENT >::fill_in_contribution_to_residuals().

◆ get_interpolated_lagrange_p()

template<class ELEMENT >
double oomph::SurfaceMeltElement< ELEMENT >::get_interpolated_lagrange_p ( const Vector< double > &  s)
inline

Get interpolated pressure (essentially a Lagrange multiplier that enforces the imposed boundary motion)

2348  {
2349  // Initialise pressure
2350  double p=0;
2351 
2352  //Find out how many nodes there are
2353  unsigned n_node = nnode();
2354 
2355  //Set up memory for the shape functions
2356  Shape psi(n_node);
2357 
2358  // Evaluate shape function
2359  shape(s,psi);
2360 
2361  // Build up Lagrange multiplier (pressure)
2362  for (unsigned j=0;j<n_node;j++)
2363  {
2364  // Cast to a boundary node
2365  BoundaryNodeBase *bnod_pt =
2366  dynamic_cast<BoundaryNodeBase*>(node_pt(j));
2367 
2368  // Get the index of the first nodal value associated with
2369  // this FaceElement
2370  unsigned first_index=
2371  bnod_pt->index_of_first_value_assigned_by_face_element(Melt_id);
2372 
2373  // Pressure (Lagrange multiplier) is the first of two additional
2374  // values created by this face element
2375  p+=node_pt(j)->value(first_index)*psi[j];
2376  }
2377  return p;
2378  }
float * p
Definition: Tutorial_Map_using.cpp:9
virtual void shape(const Vector< double > &s, Shape &psi) const =0

References oomph::BoundaryNodeBase::index_of_first_value_assigned_by_face_element(), j, oomph::SurfaceMeltElement< ELEMENT >::Melt_id, oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), p, s, oomph::FiniteElement::shape(), and oomph::Node::value().

Referenced by oomph::SurfaceMeltElement< ELEMENT >::output_melt().

◆ interpolated_melt_rate()

template<class ELEMENT >
void oomph::SurfaceMeltElement< ELEMENT >::interpolated_melt_rate ( const Vector< double > &  s,
double melt_flux 
)
inline

Melt rate at local coordinate s.

2475  {
2476  // Iinitialise
2477  melt_flux=0.0;
2478 
2479  //Find out how many nodes there are
2480  const unsigned n_node = nnode();
2481 
2482  //Set up memory for the shape functions
2483  Shape psi(n_node);
2484 
2485  // Get shape fct
2486  shape(s,psi);
2487 
2488  //Calculate stuff
2489  for(unsigned l=0;l<n_node;l++)
2490  {
2491  // get the node pt
2492  Node* nod_pt = node_pt(l);
2493 
2494  // Cast to a boundary node
2495  BoundaryNodeBase *bnod_pt = dynamic_cast<BoundaryNodeBase*>(nod_pt);
2496 
2497  // Get the index of the first nodal value associated with
2498  // this FaceElement
2499  unsigned first_index=
2500  bnod_pt->index_of_first_value_assigned_by_face_element(Melt_id);
2501 
2502  // Melt rate
2503  melt_flux+=nod_pt->value(first_index+1)*psi[l];
2504  }
2505  }
double melt_flux(const double &t)
Definition: stefan_boltzmann_melt.cc:643

References oomph::BoundaryNodeBase::index_of_first_value_assigned_by_face_element(), GlobalParameters::melt_flux(), oomph::SurfaceMeltElement< ELEMENT >::Melt_id, oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), s, oomph::FiniteElement::shape(), and oomph::Node::value().

Referenced by StefanBoltzmannProblem< ELEMENT >::doc_solution(), and oomph::SurfaceMeltElement< ELEMENT >::output_melt().

◆ melt_temperature()

template<class ELEMENT >
double oomph::SurfaceMeltElement< ELEMENT >::melt_temperature ( )
inline

Melt temperature.

2390  {
2391  if (Melt_temperature_pt==0)
2392  {
2393  return 0.0;
2394  }
2395  else
2396  {
2397  return *Melt_temperature_pt;
2398  }
2399  }

References oomph::SurfaceMeltElement< ELEMENT >::Melt_temperature_pt.

◆ melt_temperature_pt()

template<class ELEMENT >
double*& oomph::SurfaceMeltElement< ELEMENT >::melt_temperature_pt ( )
inline

◆ output_melt()

template<class ELEMENT >
void oomph::SurfaceMeltElement< ELEMENT >::output_melt ( std::ostream &  outfile)
inline

Generalised output function to include melt information: temperature, incoming flux, melt rate, outer unit normal

2510  {
2511  unsigned n_dim = this->nodal_dimension();
2512  Vector<double> x(n_dim);
2513  Vector<double> s(n_dim-1);
2514  Vector<double> unit_normal(n_dim);
2515 
2516  // Get continuous time from timestepper of first node
2517  double time=node_pt(0)->time_stepper_pt()->time_pt()->time();
2518 
2519  // Number of integration points
2520  unsigned n_intpt = integral_pt()->nweight();
2521 
2522  outfile << "ZONE\n";
2523 
2524  //Loop over the integration points
2525  for(unsigned ipt=0;ipt<n_intpt;ipt++)
2526  {
2527  // Local coordinate of integration point
2528  for (unsigned i=0;i<n_dim-1;i++)
2529  {
2530  s[i]=integral_pt()->knot(ipt,i);
2531  }
2532 
2533  // Get Eulerian coordinates
2534  this->interpolated_x(s,x);
2535 
2536  // Get temperature
2537  double interpolated_u=0;
2538  this->interpolated_u(s,interpolated_u);
2539 
2540  // Outer unit normal
2541  outer_unit_normal(s,unit_normal);
2542 
2543  // Get melt rate
2544  double interpolated_m=0.0;
2545  this->interpolated_melt_rate(s,interpolated_m);
2546 
2547  // Get "lagrange multiplier" pressure
2548  double lagrange_p=get_interpolated_lagrange_p(s);
2549 
2550  //Get the incoming flux
2551  double flux=0.0;
2552  this->get_flux(ipt,time,x,unit_normal,interpolated_u,flux);
2553 
2554  //Output the x,y,..
2555  for(unsigned i=0;i<n_dim;i++)
2556  {
2557  outfile << x[i] << " ";
2558  }
2559 
2560  // Temperature
2561  outfile << interpolated_u << " ";
2562 
2563  // Incoming flux
2564  outfile << flux << " ";
2565 
2566  // Melt rate
2567  outfile << interpolated_m << " ";
2568 
2569  // Lagrange multiplier-like pressure
2570  outfile << lagrange_p << " ";
2571 
2572  // Outer unit normal
2573  for(unsigned i=0;i<n_dim;i++)
2574  {
2575  outfile << unit_normal[i] << " ";
2576  }
2577  outfile << std::endl;
2578  }
2579  }
void interpolated_melt_rate(const Vector< double > &s, double &melt_flux)
Melt rate at local coordinate s.
Definition: heat_transfer_and_melt_elements.h:2474
double get_interpolated_lagrange_p(const Vector< double > &s)
Definition: heat_transfer_and_melt_elements.h:2347
void interpolated_u(const Vector< double > &s, double &u)
Temperature at local coordinate s.
Definition: heat_transfer_and_melt_elements.h:1669
list x
Definition: plotDoE.py:28

References ProblemParameters::flux(), oomph::TemplateFreeUnsteadyHeatBaseFaceElement::get_flux(), oomph::SurfaceMeltElement< ELEMENT >::get_interpolated_lagrange_p(), i, oomph::FiniteElement::integral_pt(), oomph::SurfaceMeltElement< ELEMENT >::interpolated_melt_rate(), oomph::UnsteadyHeatBaseFaceElement< ELEMENT >::interpolated_u(), oomph::FaceElement::interpolated_x(), oomph::Integral::knot(), oomph::FiniteElement::nodal_dimension(), oomph::FiniteElement::node_pt(), oomph::Integral::nweight(), oomph::FaceElement::outer_unit_normal(), s, oomph::Time::time(), oomph::TimeStepper::time_pt(), oomph::Data::time_stepper_pt(), and plotDoE::x.

Referenced by StefanBoltzmannProblem< ELEMENT >::doc_solution().

◆ set_lagrange_multiplier_pressure_to_zero()

template<class ELEMENT >
void oomph::SurfaceMeltElement< ELEMENT >::set_lagrange_multiplier_pressure_to_zero ( )
inline

Set "Lagrange multiplier pressure" to zero (to make things consistent with re-set Lagrangian coordinates

2434  {
2435  unsigned n_node=nnode();
2436  for(unsigned l=0;l<n_node;l++)
2437  {
2438  // get the node pt
2439  Node* nod_pt = node_pt(l);
2440 
2441  // Cast to a boundary node
2442  BoundaryNodeBase *bnod_pt =
2443  dynamic_cast<BoundaryNodeBase*>(nod_pt);
2444 
2445  // Get the index of the first nodal value associated with
2446  // this FaceElement
2447  unsigned first_index=
2448  bnod_pt->index_of_first_value_assigned_by_face_element(Melt_id);
2449 
2450  // Lagrange multiplier is first additional value created by this
2451  // face element)
2452  nod_pt->set_value(first_index,0.0);
2453  }
2454  }

References oomph::BoundaryNodeBase::index_of_first_value_assigned_by_face_element(), oomph::SurfaceMeltElement< ELEMENT >::Melt_id, oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), and oomph::Data::set_value().

Referenced by UnsteadyHeatMeltProblem< ELEMENT >::actions_after_adapt(), MeltContactProblem< ELEMENT >::complete_problem_setup(), and UnsteadyHeatMeltProblem< ELEMENT >::complete_problem_setup().

◆ zeta_nodal()

template<class ELEMENT >
double oomph::SurfaceMeltElement< ELEMENT >::zeta_nodal ( const unsigned n,
const unsigned k,
const unsigned i 
) const
inlinevirtual

Specify the value of nodal zeta from the face geometry: The "global" intrinsic coordinate of the element when viewed as part of a geometric object should be given by the FaceElement representation, by default (needed to break indeterminacy if bulk element is SolidElement)

Reimplemented from oomph::UnsteadyHeatBaseFaceElement< ELEMENT >.

Reimplemented in StefanBoltzmannMeltElement< ELEMENT >.

2464  {return FaceElement::zeta_nodal(n,k,i);}
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
double zeta_nodal(const unsigned &n, const unsigned &k, const unsigned &i) const
Definition: elements.h:4497

References i, k, n, and oomph::FaceElement::zeta_nodal().

Member Data Documentation

◆ Melt_id

◆ Melt_temperature_pt

template<class ELEMENT >
double* oomph::SurfaceMeltElement< ELEMENT >::Melt_temperature_pt
protected

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