30 #ifndef OOMPH_MULTI_DOMAIN_BOUSSINESQ_ELEMENTS_HEADER
31 #define OOMPH_MULTI_DOMAIN_BOUSSINESQ_ELEMENTS_HEADER
36 #include "advection_diffusion.h"
37 #include "navier_stokes.h"
45 namespace MultiDomainBoussinesqHelper
62 template<
class NST_ELEMENT,
class AD_ELEMENT>
64 :
public virtual NST_ELEMENT,
82 const double&
ra()
const
99 NST_ELEMENT::further_build();
104 cast_father_element_pt =
dynamic_cast<
106 this->father_element_pt());
110 this->
Ra_pt = cast_father_element_pt->
ra_pt();
130 const unsigned interaction = 0;
134 const AD_ELEMENT* adv_diff_el_pt =
138 const double interpolated_t = adv_diff_el_pt->interpolated_u_adv_diff(
146 const unsigned n_dim = this->
dim();
147 for (
unsigned i = 0;
i < n_dim;
i++)
149 body_force[
i] = -gravity[
i] * interpolated_t *
ra();
160 NST_ELEMENT::fill_in_contribution_to_jacobian(residuals, jacobian);
162 #ifdef USE_FD_FOR_DERIVATIVES_WRT_EXTERNAL_DATA_IN_MULTI_DOMAIN_BOUSSINESQ
188 residuals, jacobian, mass_matrix);
208 const unsigned n_dim = this->
dim();
209 unsigned u_nodal_nst[n_dim];
210 for (
unsigned i = 0;
i < n_dim;
i++)
212 u_nodal_nst[
i] = this->u_index_nst(
i);
216 const unsigned n_node = this->
nnode();
219 Shape psif(n_node), testf(n_node);
220 DShape dpsifdx(n_node, n_dim), dtestfdx(n_node, n_dim);
226 int local_eqn = 0, local_unknown = 0;
232 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
238 double J = this->dshape_and_dtest_eulerian_at_knot_nst(
239 ipt, psif, dpsifdx, testf, dtestfdx);
257 dbody_dexternal_element_data,
258 global_eqn_number_of_external_element_data);
261 const unsigned n_external_element_data =
262 global_eqn_number_of_external_element_data.size();
265 for (
unsigned l = 0; l < n_node; l++)
270 unsigned n_master = 1;
271 double hang_weight = 1.0;
280 n_master = hang_info_pt->
nmaster();
289 for (
unsigned m = 0; m < n_master; m++)
305 for (
unsigned i = 0;
i < n_dim;
i++)
311 local_eqn = this->local_hang_eqn(
323 for (
unsigned l2 = 0; l2 < n_external_element_data; l2++)
328 global_eqn_number_of_external_element_data[l2]);
329 if (local_unknown >= 0)
332 jacobian(local_eqn, local_unknown) +=
333 dbody_dexternal_element_data(
i, l2) * testf(l) *
346 std::list<std::pair<unsigned long, unsigned>>& dof_lookup_list)
const
349 NST_ELEMENT::get_dof_numbers_for_unknowns(dof_lookup_list);
355 return NST_ELEMENT::ndof_types();
374 template<
class AD_ELEMENT,
class NST_ELEMENT>
376 :
public virtual AD_ELEMENT,
400 void output(std::ostream& outfile,
const unsigned& nplot)
403 unsigned n_dim = this->
dim();
411 for (
unsigned iplot = 0; iplot < num_plot_points; iplot++)
417 for (
unsigned i = 0;
i < n_dim;
i++)
423 outfile << AD_ELEMENT::interpolated_u_adv_diff(
s) << std::endl;
425 outfile << std::endl;
446 void output(FILE* file_pt,
const unsigned& n_plot)
462 unsigned interaction = 0;
465 NST_ELEMENT* nst_el_pt =
469 nst_el_pt->interpolated_u_nst(
480 AD_ELEMENT::fill_in_contribution_to_jacobian(residuals, jacobian);
482 #ifdef USE_FD_FOR_DERIVATIVES_WRT_EXTERNAL_DATA_IN_MULTI_DOMAIN_BOUSSINESQ
502 Vector<std::set<FiniteElement*>>
const& external_elements_pt,
503 std::set<std::pair<Data*, unsigned>>& paired_interaction_data);
516 residuals, jacobian, mass_matrix);
529 unsigned interaction = 0;
532 NST_ELEMENT* source_el_pt =
538 source_el_pt->dinterpolated_u_nst_ddata(
553 const unsigned u_nodal_adv_diff = this->u_index_adv_diff();
556 const unsigned n_node = this->
nnode();
559 const unsigned n_dim = this->
dim();
562 Shape psi(n_node), test(n_node);
563 DShape dpsidx(n_node, n_dim), dtestdx(n_node, n_dim);
569 int local_eqn = 0, local_unknown = 0;
575 const double peclet = this->pe();
578 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
584 double J = this->dshape_and_dtest_eulerian_at_knot_adv_diff(
585 ipt, psi, dpsidx, test, dtestdx);
593 for (
unsigned l = 0; l < n_node; l++)
596 for (
unsigned j = 0; j < n_dim; j++)
598 interpolated_dudx[j] +=
599 this->
nodal_value(l, u_nodal_adv_diff) * dpsidx(l, j);
612 for (
unsigned i2 = 0; i2 < n_dim; i2++)
618 dwind_dexternal_element_data,
619 global_eqn_number_of_external_element_data);
623 const unsigned n_external_element_data =
624 global_eqn_number_of_external_element_data.size();
627 for (
unsigned l = 0; l < n_node; l++)
631 unsigned n_master = 1;
632 double hang_weight = 1.0;
641 n_master = hang_info_pt->
nmaster();
650 for (
unsigned m = 0; m < n_master; m++)
668 local_eqn = this->local_hang_eqn(
680 for (
unsigned l2 = 0; l2 < n_external_element_data; l2++)
685 global_eqn_number_of_external_element_data[l2]);
686 if (local_unknown >= 0)
689 jacobian(local_eqn, local_unknown) -=
690 peclet * dwind_dexternal_element_data[l2] *
691 interpolated_dudx[i2] * test(l) * hang_weight *
W;
703 std::list<std::pair<unsigned long, unsigned>>& dof_lookup_list)
const
706 unsigned n_node = this->
nnode();
709 std::pair<unsigned, unsigned> dof_lookup;
712 for (
unsigned n = 0; n < n_node; n++)
718 for (
unsigned v = 0; v < nv; v++)
730 dof_lookup.first = this->
eqn_number(local_eqn_number);
733 dof_lookup.second = 0;
736 dof_lookup_list.push_front(dof_lookup);
762 template<
class AD_ELEMENT,
class NST_ELEMENT>
765 Vector<std::set<FiniteElement*>>
const& external_elements_pt,
766 std::set<std::pair<Data*, unsigned>>& paired_interaction_data)
769 const unsigned interaction = 0;
773 for (std::set<FiniteElement*>::iterator it =
774 external_elements_pt[interaction].begin();
775 it != external_elements_pt[interaction].end();
779 NST_ELEMENT* external_fluid_el_pt =
dynamic_cast<NST_ELEMENT*
>(*it);
782 unsigned nnod = external_fluid_el_pt->nnode();
783 for (
unsigned j = 0; j < nnod; j++)
786 Data* veloc_data_pt = external_fluid_el_pt->node_pt(j);
789 const unsigned n_dim = this->dim();
790 for (
unsigned i = 0;
i < n_dim;
i++)
793 unsigned val = external_fluid_el_pt->u_index_nst(
i);
797 paired_interaction_data.insert(std::make_pair(veloc_data_pt, val));
814 template<
class NST_ELEMENT,
class AD_ELEMENT>
816 :
public virtual NST_ELEMENT,
837 const double&
ra()
const
870 #ifdef USE_FD_JACOBIAN_NST_IN_MULTI_DOMAIN_BOUSSINESQ
879 NST_ELEMENT::fill_in_contribution_to_jacobian(residuals, jacobian);
898 residuals, jacobian, mass_matrix);
908 const unsigned n_dim = this->
dim();
910 for (
unsigned i = 0;
i < n_dim;
i++)
912 u_nodal_nst[
i] = this->u_index_nst(
i);
916 const unsigned n_node = this->
nnode();
919 Shape psif(n_node), testf(n_node);
920 DShape dpsifdx(n_node, n_dim), dtestfdx(n_node, n_dim);
926 int local_eqn = 0, local_unknown = 0;
929 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
935 double J = this->dshape_and_dtest_eulerian_at_knot_nst(
936 ipt, psif, dpsifdx, testf, dtestfdx);
954 dbody_dexternal_element_data,
955 global_eqn_number_of_external_element_data);
958 const unsigned n_external_element_data =
959 global_eqn_number_of_external_element_data.size();
962 for (
unsigned l = 0; l < n_node; l++)
969 for (
unsigned i = 0;
i < n_dim;
i++)
976 for (
unsigned l2 = 0; l2 < n_external_element_data; l2++)
981 global_eqn_number_of_external_element_data[l2]);
982 if (local_unknown >= 0)
985 jacobian(local_eqn, local_unknown) +=
986 dbody_dexternal_element_data(
i, l2) * testf(l) *
W;
1001 template<
class NST_ELEMENT,
class AD_ELEMENT>
1004 const unsigned& ipt,
1010 unsigned interaction = 0;
1013 const double interpolated_t =
1014 dynamic_cast<AD_ELEMENT*
>(external_element_pt(interaction, ipt))
1015 ->interpolated_u_adv_diff(
1016 external_element_local_coord(interaction, ipt));
1023 const unsigned n_dim = this->dim();
1024 for (
unsigned i = 0;
i < n_dim;
i++)
1026 result[
i] = -gravity[
i] * interpolated_t * ra();
1032 template<
class NST_ELEMENT,
class AD_ELEMENT>
1045 template<
class NST_ELEMENT,
class AD_ELEMENT>
1048 :
public virtual FaceGeometry<FaceGeometry<NST_ELEMENT>>
1069 template<
class AD_ELEMENT,
class NST_ELEMENT>
1071 :
public virtual AD_ELEMENT,
1104 void output(std::ostream& outfile,
const unsigned& nplot)
1107 const unsigned n_dim = this->
dim();
1117 for (
unsigned iplot = 0; iplot < num_plot_points; iplot++)
1123 for (
unsigned i = 0;
i < n_dim;
i++)
1129 outfile << AD_ELEMENT::interpolated_u_adv_diff(
s) << std::endl;
1131 outfile << std::endl;
1152 void output(FILE* file_pt,
const unsigned& n_plot)
1161 const unsigned& ipt,
1172 #ifdef USE_FD_JACOBIAN_IN_MULTI_DOMAIN_BOUSSINESQ
1181 AD_ELEMENT::fill_in_contribution_to_jacobian(residuals, jacobian);
1200 residuals, jacobian, mass_matrix);
1210 const unsigned u_nodal_adv_diff = this->u_index_adv_diff();
1213 const unsigned n_node = this->
nnode();
1216 const unsigned n_dim = this->
dim();
1219 Shape psi(n_node), test(n_node);
1220 DShape dpsidx(n_node, n_dim), dtestdx(n_node, n_dim);
1226 int local_eqn = 0, local_unknown = 0;
1229 const double peclet = this->pe();
1232 for (
unsigned ipt = 0; ipt < n_intpt; ipt++)
1238 double J = this->dshape_and_dtest_eulerian_at_knot_adv_diff(
1239 ipt, psi, dpsidx, test, dtestdx);
1247 for (
unsigned l = 0; l < n_node; l++)
1250 for (
unsigned j = 0; j < n_dim; j++)
1252 interpolated_dudx[j] +=
1267 for (
unsigned i2 = 0; i2 < n_dim; i2++)
1273 dwind_dexternal_element_data,
1274 global_eqn_number_of_external_element_data);
1277 const unsigned n_external_element_data =
1278 global_eqn_number_of_external_element_data.size();
1281 for (
unsigned l = 0; l < n_node; l++)
1291 for (
unsigned l2 = 0; l2 < n_external_element_data; l2++)
1296 global_eqn_number_of_external_element_data[l2]);
1297 if (local_unknown >= 0)
1300 jacobian(local_eqn, local_unknown) -=
1301 peclet * dwind_dexternal_element_data[l2] *
1302 interpolated_dudx[i2] * test(l) *
W;
1319 template<
class AD_ELEMENT,
class NST_ELEMENT>
1327 unsigned interaction = 0;
1330 NST_ELEMENT* source_el_pt =
1331 dynamic_cast<NST_ELEMENT*
>(external_element_pt(interaction, ipt));
1334 source_el_pt->interpolated_u_nst(
1335 external_element_local_coord(interaction, ipt), wind);
1342 template<
class AD_ELEMENT,
class NST_ELEMENT>
1345 const unsigned& ipt,
1351 unsigned interaction = 0;
1354 NST_ELEMENT* source_el_pt =
1355 dynamic_cast<NST_ELEMENT*
>(external_element_pt(interaction, ipt));
1360 source_el_pt->dinterpolated_u_nst_ddata(
1361 external_element_local_coord(interaction, ipt),
1375 template<
class NST_ELEMENT,
class AD_ELEMENT>
1378 const unsigned& ipt,
1387 unsigned interaction = 0;
1393 AD_ELEMENT* source_el_pt =
1394 dynamic_cast<AD_ELEMENT*
>(external_element_pt(interaction, ipt));
1396 if (source_el_pt == 0)
1398 throw OomphLibError(
"External element could not be cast to AD_ELEMENT\n",
1399 OOMPH_CURRENT_FUNCTION,
1400 OOMPH_EXCEPTION_LOCATION);
1405 source_el_pt->dinterpolated_u_adv_diff_ddata(
1406 external_element_local_coord(interaction, ipt),
1411 unsigned n_external_element_data = du_adv_diff_ddata.size();
1414 const unsigned n_dim = this->dim();
1415 result.
resize(n_dim, n_external_element_data);
1418 for (
unsigned i = 0;
i < n_dim;
i++)
1421 for (
unsigned n = 0; n < n_external_element_data; n++)
1423 result(
i, n) = -gravity[
i] * du_adv_diff_ddata[n] * ra();
1433 template<
class NST_ELEMENT,
class AD_ELEMENT>
1436 const unsigned& ipt,
1445 unsigned interaction = 0;
1451 AD_ELEMENT* source_el_pt =
1452 dynamic_cast<AD_ELEMENT*
>(external_element_pt(interaction, ipt));
1454 if (source_el_pt == 0)
1456 throw OomphLibError(
"External element could not be cast to AD_ELEMENT\n",
1457 OOMPH_CURRENT_FUNCTION,
1458 OOMPH_EXCEPTION_LOCATION);
1463 source_el_pt->dinterpolated_u_adv_diff_ddata(
1464 external_element_local_coord(interaction, ipt),
1469 unsigned n_external_element_data = du_adv_diff_ddata.size();
1472 const unsigned n_dim = this->dim();
1473 result.
resize(n_dim, n_external_element_data);
1476 for (
unsigned i = 0;
i < n_dim;
i++)
1479 for (
unsigned n = 0; n < n_external_element_data; n++)
1481 result(
i, n) = -gravity[
i] * du_adv_diff_ddata[n] * ra();
/////////////////////////////////////////////////////////////////////// /////////////////////////////...
void fill_in_contribution_to_jacobian_and_mass_matrix(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
Add the element's contribution to its residuals vector, jacobian matrix and mass matrix.
AdvectionDiffusionBoussinesqElement()
Constructor: call the underlying constructors.
void get_wind_adv_diff(const unsigned &ipt, const Vector< double > &s, const Vector< double > &x, Vector< double > &wind) const
Overload the wind function in the advection-diffusion equations. This provides the coupling from the ...
void get_dwind_adv_diff_dexternal_element_data(const unsigned &ipt, const unsigned &i, Vector< double > &result, Vector< unsigned > &global_eqn_number)
Fill in the derivatives of the wind with respect to the external unknowns.
void fill_in_off_diagonal_block_analytic(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Compute the contribution of the external degrees of freedom (velocities) on the AdvectionDiffusion eq...
void output(std::ostream &outfile)
Overload the standard output function with the broken default.
void output(FILE *file_pt)
C-style output function: Broken default.
void output(FILE *file_pt, const unsigned &n_plot)
C-style output function: Broken default.
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Compute the element's residual vector and the Jacobian matrix. Jacobian is computed by finite-differe...
void output(std::ostream &outfile, const unsigned &nplot)
Output function: Output x, y, theta at Nplot^DIM plot points.
A Class for the derivatives of shape functions The class design is essentially the same as Shape,...
A class that represents a collection of data; each Data object may contain many different individual ...
unsigned nvalue() const
Return number of values stored in data object (incl pinned ones).
void resize(const unsigned long &n)
Resize to a square nxn matrix; any values already present will be transfered.
This is a base class for all elements that require external sources (e.g. FSI, multi-domain problems ...
Vector< double > & external_element_local_coord(const unsigned &interaction_index, const unsigned &ipt)
Access function to get source element's local coords for specified interaction index at specified int...
void set_ninteraction(const unsigned &n_interaction)
Set the number of interactions in the element This function is usually called in the specific element...
bool external_geometric_data_is_included() const
Is the external geometric data taken into account when forming the Jacobian?
FiniteElement *& external_element_pt(const unsigned &interaction_index, const unsigned &ipt)
Access function to source element for specified interaction index at specified integration point.
void fill_in_jacobian_from_external_interaction_by_fd(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Calculate the contributions to the jacobian from all external interaction degrees of freedom (geometr...
void ignore_external_geometric_data()
Do not include any external geometric data when computing the element's Jacobian. This function shoul...
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Fill in the element's contribution to the Jacobian matrix and the residual vector: Done by finite dif...
FaceGeometry()
Constructor calls the constructor of the NST_ELEMENT (Only the Intel compiler seems to need this!...
FaceGeometry()
Constructor calls the constructor of the NST_ELEMENT (Only the Intel compiler seems to need this!...
//////////////////////////////////////////////////////////////////// ////////////////////////////////...
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
double nodal_value(const unsigned &n, const unsigned &i) const
Return the i-th value stored at local node n. Produces suitably interpolated values for hanging nodes...
virtual void output(std::ostream &outfile)
Output the element data — typically the values at the nodes in a format suitable for post-processing.
virtual std::string tecplot_zone_string(const unsigned &nplot) const
Return string for tecplot zone header (when plotting nplot points in each "coordinate direction")
virtual double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s.
int nodal_local_eqn(const unsigned &n, const unsigned &i) const
Return the local equation number corresponding to the i-th value at the n-th local node.
unsigned dim() const
Return the spatial dimension of the element, i.e. the number of local coordinates required to paramet...
unsigned nnode() const
Return the number of nodes.
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
virtual void get_s_plot(const unsigned &i, const unsigned &nplot, Vector< double > &s, const bool &shifted_to_interior=false) const
Get cector of local coordinates of plot point i (when plotting nplot points in each "coordinate direc...
virtual unsigned nplot_points(const unsigned &nplot) const
Return total number of plot points (when plotting nplot points in each "coordinate direction")
double raw_nodal_value(const unsigned &n, const unsigned &i) const
Return the i-th value stored at local node n but do NOT take hanging nodes into account.
virtual void write_tecplot_zone_footer(std::ostream &outfile, const unsigned &nplot) const
Add tecplot zone "footer" to output stream (when plotting nplot points in each "coordinate direction"...
virtual void fill_in_contribution_to_jacobian_and_mass_matrix(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
Add the elemental contribution to the jacobian matrix, mass matrix and the residuals vector....
unsigned long eqn_number(const unsigned &ieqn_local) const
Return the global equation number corresponding to the ieqn_local-th local equation number.
int local_eqn_number(const unsigned long &ieqn_global) const
Return the local equation number corresponding to the ieqn_global-th global equation number....
Class that contains data for hanging nodes.
double const & master_weight(const unsigned &i) const
Return weight for dofs on i-th master node.
Node *const & master_node_pt(const unsigned &i) const
Return a pointer to the i-th master node.
unsigned nmaster() const
Return the number of master nodes.
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.
////////////////////////////////////////////////////////////////////// //////////////////////////////...
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Compute the element's residual vector and the Jacobian matrix. Jacobian is computed by finite-differe...
double * Ra_pt
Pointer to a private data member, the Rayleigh number.
void get_body_force_nst(const double &time, const unsigned &ipt, const Vector< double > &s, const Vector< double > &x, Vector< double > &result)
Overload get_body_force_nst to get the temperature "body force" from the "source" AdvectionDiffusion ...
const double & ra() const
Access function for the Rayleigh number (const version)
void fill_in_off_diagonal_block_analytic(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Compute the contribution of the external degrees of freedom (temperatures) on the Navier-Stokes equat...
void fill_in_contribution_to_jacobian_and_mass_matrix(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
Add the element's contribution to its residuals vector, jacobian matrix and mass matrix.
void get_dbody_force_nst_dexternal_element_data(const unsigned &ipt, DenseMatrix< double > &result, Vector< unsigned > &global_eqn_number)
Fill in the derivatives of the body force with respect to the external unknowns.
NavierStokesBoussinesqElement()
Constructor: call the underlying constructors and initialise the pointer to the Rayleigh number to po...
double *& ra_pt()
Access function for the pointer to the Rayleigh number.
HangInfo *const & hanging_pt() const
Return pointer to hanging node data (this refers to the geometric hanging node status) (const version...
bool is_hanging() const
Test whether the node is geometrically hanging.
An OomphLibError object which should be thrown when an run-time error is encountered....
//////////////////////////////////////////////////////////////// ////////////////////////////////////...
void get_dof_numbers_for_unknowns(std::list< std::pair< unsigned long, unsigned >> &dof_lookup_list) const
Classify dofs for use in block preconditioner.
void identify_all_field_data_for_external_interaction(Vector< std::set< FiniteElement * >> const &external_elements_pt, std::set< std::pair< Data *, unsigned >> &paired_interaction_data)
Overload the function that must return all field data involved in the interaction with the external (...
void fill_in_contribution_to_jacobian_and_mass_matrix(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
Add the element's contribution to its residuals vector, jacobian matrix and mass matrix.
RefineableAdvectionDiffusionBoussinesqElement()
Constructor: call the underlying constructors.
void get_dwind_adv_diff_dexternal_element_data(const unsigned &ipt, const unsigned &i, Vector< double > &result, Vector< unsigned > &global_eqn_number)
Fill in the derivatives of the wind with respect to the external unknowns.
void output(FILE *file_pt, const unsigned &n_plot)
C-style output function: Broken default.
void get_wind_adv_diff(const unsigned &ipt, const Vector< double > &s, const Vector< double > &x, Vector< double > &wind) const
Overload the wind function in the advection-diffusion equations. This provides the coupling from the ...
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Compute the element's residual vector and the Jacobian matrix.
void output(std::ostream &outfile, const unsigned &nplot)
Output function: Output x, y, theta at Nplot^DIM plot points.
void fill_in_off_diagonal_block_analytic(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Compute the contribution of the external degrees of freedom (velocities) on the advection-diffusion e...
void output(FILE *file_pt)
C-style output function: Broken default.
unsigned ndof_types() const
Specify number of dof types for use in block preconditioner.
void output(std::ostream &outfile)
Overload the standard output function with the broken default.
////////////////////////////////////////////////////////////////////// //////////////////////////////...
void fill_in_contribution_to_jacobian_and_mass_matrix(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
Add the element's contribution to its residuals vector, jacobian matrix and mass matrix.
void get_dbody_force_nst_dexternal_element_data(const unsigned &ipt, DenseMatrix< double > &result, Vector< unsigned > &global_eqn_number)
Fill in the derivatives of the body force with respect to the external unknowns.
double * Ra_pt
Pointer to a private data member, the Rayleigh number.
void get_dof_numbers_for_unknowns(std::list< std::pair< unsigned long, unsigned >> &dof_lookup_list) const
Classify dof numbers as in underlying element.
double *& ra_pt()
Access function for the pointer to the Rayleigh number.
void get_body_force_nst(const double &time, const unsigned &ipt, const Vector< double > &s, const Vector< double > &x, Vector< double > &body_force)
Overload get_body_force_nst() to return the temperature-dependent buoyancy force, using the temperatu...
void further_build()
Call the underlying single-physics element's further_build() functions and make sure that the pointer...
unsigned ndof_types() const
Get number of dof types from underlying element.
void fill_in_off_diagonal_block_analytic(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Compute the contribution of the external degrees of freedom (temperatures) on the Navier-Stokes equat...
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Compute the element's residual vector and the Jacobian matrix.
const double & ra() const
Access function for the Rayleigh number (const version)
RefineableNavierStokesBoussinesqElement()
Constructor: call the underlying constructors and initialise the pointer to the Rayleigh number to po...
A Class for shape functions. In simple cases, the shape functions have only one index that can be tho...
double Default_Physical_Constant_Value
Default value for physical constants.
//////////////////////////////////////////////////////////////////// ////////////////////////////////...