axisym_heat_sphere/axisym_buoyant_navier_stokes.h
Go to the documentation of this file.
1 //LIC// ====================================================================
2 //LIC// This file forms part of oomph-lib, the object-oriented,
3 //LIC// multi-physics finite-element library, available
4 //LIC// at http://www.oomph-lib.org.
5 //LIC//
6 //LIC// Copyright (C) 2006-2022 Matthias Heil and Andrew Hazel
7 //LIC//
8 //LIC// This library is free software; you can redistribute it and/or
9 //LIC// modify it under the terms of the GNU Lesser General Public
10 //LIC// License as published by the Free Software Foundation; either
11 //LIC// version 2.1 of the License, or (at your option) any later version.
12 //LIC//
13 //LIC// This library is distributed in the hope that it will be useful,
14 //LIC// but WITHOUT ANY WARRANTY; without even the implied warranty of
15 //LIC// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 //LIC// Lesser General Public License for more details.
17 //LIC//
18 //LIC// You should have received a copy of the GNU Lesser General Public
19 //LIC// License along with this library; if not, write to the Free Software
20 //LIC// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21 //LIC// 02110-1301 USA.
22 //LIC//
23 //LIC// The authors may be contacted at oomph-lib@maths.man.ac.uk.
24 //LIC//
25 //LIC//====================================================================
26 //Driver for a multi-physics problem that couples the Navier--Stokes
27 //equations to the advection diffusion equations,
28 //giving Boussinesq convection
29 
30 //Oomph-lib headers, we require the generic, advection-diffusion
31 //and navier-stokes elements.
33 #include "axisym_navier_stokes.h"
34 
35 // The mesh is our standard rectangular quadmesh
37 
38 namespace oomph
39 {
40 
41 //============start_element_class============================================
60 //==========================================================================
64 {
65 
66 private:
67 
69  double* Ra_pt;
70 
73 
74 public:
81  {
83  }
84 
88  inline unsigned required_nvalue(const unsigned &n) const
91 
93  const double &ra() const {return *Ra_pt;}
94 
96  double* &ra_pt() {return Ra_pt;}
97 
98 
100  void disable_ALE()
101  {
102  //Disable ALE in both sets of equations
105  }
106 
108  void enable_ALE()
109  {
110  //Enable ALE in both sets of equations
113  }
114 
115 
119  unsigned nscalar_paraview() const
120  {
121  throw OomphLibError(
122  "This function hasn't been implemented for this element",
125 
126  // Dummy unsigned
127  return 0;
128  }
129 
133  void scalar_value_paraview(std::ofstream& file_out,
134  const unsigned& i,
135  const unsigned& nplot) const
136  {
137  throw OomphLibError(
138  "This function hasn't been implemented for this element",
141  }
142 
143 
147  std::string scalar_name_paraview(const unsigned& i) const
148  {
149  return "V"+StringConversion::to_string(i);
150  }
151 
152 
154  void output(std::ostream &outfile)
155  {FiniteElement::output(outfile);}
156 
159  void output(std::ostream &outfile, const unsigned &nplot)
160  {
161  //vector of local coordinates
162  Vector<double> s(2);
163 
164  // Tecplot header info
165  outfile << this->tecplot_zone_string(nplot);
166 
167  // Loop over plot points
168  unsigned num_plot_points=this->nplot_points(nplot);
169  for (unsigned iplot=0;iplot<num_plot_points;iplot++)
170  {
171  // Get local coordinates of plot point
172  this->get_s_plot(iplot,nplot,s);
173 
174  // Output the position of the plot point
175  for(unsigned i=0;i<2;i++)
176  {outfile << this->interpolated_x(s,i) << " ";}
177 
178  // Output the fluid velocities at the plot point
179  for(unsigned i=0;i<3;i++)
180  {outfile << this->interpolated_u_axi_nst(s,i) << " ";}
181 
182  // Output the fluid pressure at the plot point
183  outfile << this->interpolated_p_axi_nst(s) << " ";
184 
185  // Output the temperature at the plot point
186  outfile << this->interpolated_u_axi_adv_diff(s) << " " << std::endl;
187  }
188  outfile << std::endl;
189 
190  // Write tecplot footer (e.g. FE connectivity lists)
191  this->write_tecplot_zone_footer(outfile,nplot);
192 
193  }
194 
196  void output(FILE* file_pt)
197  {FiniteElement::output(file_pt);}
198 
200  void output(FILE* file_pt, const unsigned &n_plot)
201  {FiniteElement::output(file_pt,n_plot);}
202 
204  void output_fct(std::ostream &outfile, const unsigned &Nplot,
206  exact_soln_pt)
207  {FiniteElement::output_fct(outfile,Nplot,exact_soln_pt);}
208 
209 
212  void output_fct(std::ostream &outfile, const unsigned &Nplot,
213  const double& time,
215  exact_soln_pt)
216  {
218  output_fct(outfile,Nplot,time,exact_soln_pt);
219  }
220 
223  unsigned u_index_axi_adv_diff() const {return 3;}
224 
227  unsigned nvertex_node() const
228  {return QElement<2,3>::nvertex_node();}
229 
232  Node* vertex_node_pt(const unsigned& j) const
234 
237  unsigned ncont_interpolated_values() const
238  {return 4;}
239 
244  {
245  //Storage for the fluid velocities
246  Vector<double> nst_values;
247 
248  //Get the fluid velocities from the fluid element
250  get_interpolated_values(s,nst_values);
251 
252  //Storage for the temperature
253  Vector<double> advection_values;
254 
255  //Get the temperature from the advection-diffusion element
257  get_interpolated_values(s,advection_values);
258 
259  //Add the fluid velocities to the values vector
260  for(unsigned i=0;i<3;i++) {values.push_back(nst_values[i]);}
261 
262  //Add the concentration to the end
263  values.push_back(advection_values[0]);
264  }
265 
266 
267 
272  void get_interpolated_values(const unsigned& t, const Vector<double>&s,
273  Vector<double>& values)
274  {
275  //Storage for the fluid velocities
276  Vector<double> nst_values;
277 
278  //Get the fluid velocities from the fluid element
280  get_interpolated_values(t,s,nst_values);
281 
282  //Storage for the temperature
283  Vector<double> advection_values;
284 
285  //Get the temperature from the advection-diffusion element
287  get_interpolated_values(s,advection_values);
288 
289  //Add the fluid velocities to the values vector
290  for(unsigned i=0;i<3;i++) {values.push_back(nst_values[i]);}
291 
292  //Add the concentration to the end
293  values.push_back(advection_values[0]);
294 
295  } // end of get_interpolated_values
296 
297 
298 
302  {
305  }
306 
307 
308 
311  void rebuild_from_sons(Mesh* &mesh_pt)
312  {
315  }
316 
317 
320  {return x[0];}
321 
322 
323 
328  {
331 
332  //Cast the pointer to the father element to the specific
333  //element type
334  RefineableBuoyantQAxisymCrouzeixRaviartElement* cast_father_element_pt
336  this->father_element_pt());
337 
338  //Set the pointer to the Rayleigh number to be the same as that in
339  //the father
340  this->Ra_pt = cast_father_element_pt->ra_pt();
341  } //end of further build
342 
343 
344 
346  unsigned nrecovery_order()
348 
351  unsigned num_Z2_flux_terms()
352  {
355  }
356 
357 
361  {
362  //Find the number of fluid fluxes
363  unsigned n_fluid_flux =
365 
366  //Fill in the first flux entries as the velocity entries
368 
369  //Find the number of temperature fluxes
370  unsigned n_temp_flux =
372  Vector<double> temp_flux(n_temp_flux);
373 
374  //Get the temperature flux
376 
377  //Add the temperature flux to the end of the flux vector
378  for(unsigned i=0;i<n_temp_flux;i++)
379  {
380  flux[n_fluid_flux+i] = temp_flux[i];
381  }
382 
383  } //end of get_Z2_flux
384 
387  unsigned ncompound_fluxes() {return 2;}
388 
392  {
393  //Find the number of fluid fluxes
394  unsigned n_fluid_flux =
396  //Find the number of temperature fluxes
397  unsigned n_temp_flux =
399 
400  //The fluid fluxes are first
401  //The values of the flux_index vector are zero on entry, so we
402  //could omit this line
403  for(unsigned i=0;i<n_fluid_flux;i++) {flux_index[i] = 0;}
404 
405  //Set the temperature fluxes (the last set of fluxes
406  for(unsigned i=0;i<n_temp_flux;i++) {flux_index[n_fluid_flux + i] = 1;}
407 
408  } //end of get_Z2_compound_flux_indices
409 
410 
416  void compute_error(std::ostream &outfile,
418  const double& time,
419  double& error, double& norm)
420  {FiniteElement::compute_error(outfile,exact_soln_pt,
421  time,error,norm);}
422 
428  void compute_error(std::ostream &outfile,
430  double& error, double& norm)
432  compute_error(outfile,exact_soln_pt,error,norm);}
433 
437 void get_wind_axi_adv_diff(const unsigned& ipt,
438  const Vector<double> &s, const Vector<double>& x,
439  Vector<double>& wind) const
440  {
441  //The wind function is simply the velocity at the points
442  this->interpolated_u_axi_nst(s,wind);
443  }
444 
445 
451  void get_body_force_axi_nst(const double& time, const unsigned& ipt,
452  const Vector<double> &s, const Vector<double> &x,
453  Vector<double> &result)
454  {
455  // Get the temperature
456  const double interpolated_t = this->interpolated_u_axi_adv_diff(s);
457 
458  // Get vector that indicates the direction of gravity from
459  // the Navier-Stokes equations
461 
462  // Temperature-dependent body force:
463  for (unsigned i=0;i<3;i++)
464  {
465  result[i] = -gravity[i]*interpolated_t*ra();
466  }
467  }
468 
471  {
472  //Call the residuals of the Navier-Stokes equations
475 
476  //Call the residuals of the advection-diffusion equations
479  }
480 
481 
485  DenseMatrix<double> &jacobian)
486  {
487 #ifdef USE_FD_JACOBIAN_FOR_REFINEABLE_BUOYANT_Q_ELEMENT
489 #else
490  //Calculate the Navier-Stokes contributions (diagonal block and residuals)
492  fill_in_contribution_to_jacobian(residuals,jacobian);
493 
494  //Calculate the advection-diffusion contributions
495  //(diagonal block and residuals)
497  fill_in_contribution_to_jacobian(residuals,jacobian);
498 
499  //We now fill in the off-diagonal (interaction) blocks analytically
500  this->fill_in_off_diagonal_jacobian_blocks_analytic(residuals,jacobian);
501 #endif
502  } //End of jacobian calculation
503 
507  Vector<double> &residuals, DenseMatrix<double> &jacobian,
508  DenseMatrix<double> &mass_matrix)
509  {
510  //Call the (broken) version in the base class
512  residuals,jacobian,mass_matrix);
513  }
514 
518  Vector<double> &residuals, DenseMatrix<double> &jacobian)
519  {
520  //Perform another loop over the integration loops using the information
521  //from the original elements' residual assembly loops to determine
522  //the conributions to the jacobian
523 
524  // Local storage for pointers to hang_info objects
525  HangInfo *hang_info_pt=0, *hang_info2_pt=0;
526 
527  //Local storage for the index in the nodes at which the
528  //Navier-Stokes velocities are stored (we know that this should be 0,1,2)
529  unsigned u_nodal_axi_nst[3];
530  for(unsigned i=0;i<3;i++) {u_nodal_axi_nst[i] = this->u_index_axi_nst(i);}
531 
532  //Local storage for the index at which the temperature is stored
533  const unsigned u_nodal_axi_adv_diff = this->u_index_axi_adv_diff();
534 
535  //Find out how many nodes there are
536  const unsigned n_node = this->nnode();
537 
538  //Set up memory for the shape and test functions and their derivatives
539  Shape psif(n_node), testf(n_node);
540  DShape dpsifdx(n_node,2), dtestfdx(n_node,2);
541 
542  //Number of integration points
543  const unsigned n_intpt = this->integral_pt()->nweight();
544 
545  //Get Physical Variables from Element
546  double Ra = this->ra();
547  double Pe = this->pe();
548  Vector<double> gravity = this->g();
549 
550  //Integers to store the local equations and unknowns
551  int local_eqn=0, local_unknown=0;
552 
553  //Loop over the integration points
554  for(unsigned ipt=0;ipt<n_intpt;ipt++)
555  {
556  //Get the integral weight
557  double w = this->integral_pt()->weight(ipt);
558 
559  //Call the derivatives of the shape and test functions
560  double J =
561  this->dshape_and_dtest_eulerian_at_knot_axi_nst(ipt,psif,dpsifdx,
562  testf,dtestfdx);
563 
564  //Premultiply the weights and the Jacobian
565  double W = w*J;
566 
567  //Work out the radius
568  double r = 0.0;
569 
570  //Calculate local values of temperature derivatives
571  //Allocate
572  Vector<double> interpolated_du_axi_adv_diff_dx(2,0.0);
573 
574  // Loop over nodes
575  for(unsigned l=0;l<n_node;l++)
576  {
577  //Get the nodal value
578  double u_value = this->nodal_value(l,u_nodal_axi_adv_diff);
579  //Loop over the derivative directions
580  for(unsigned j=0;j<2;j++)
581  {
582  interpolated_du_axi_adv_diff_dx[j] += u_value*dpsifdx(l,j);
583  }
584 
585  //Calculate the position
586  r += this->nodal_position(l,0)*psif(l);
587  }
588 
589  //Assemble the Jacobian terms
590  //---------------------------
591 
592  //Loop over the test functions/eqns
593  for(unsigned l=0;l<n_node;l++)
594  {
595  //Local variables to store the number of master nodes and
596  //the weight associated with the shape function if the node is hanging
597  unsigned n_master=1;
598  double hang_weight=1.0;
599 
600  //Local bool (is the node hanging)
601  bool is_node_hanging = this->node_pt(l)->is_hanging();
602 
603  //If the node is hanging, get the number of master nodes
604  if(is_node_hanging)
605  {
606  hang_info_pt = this->node_pt(l)->hanging_pt();
607  n_master = hang_info_pt->nmaster();
608  }
609  //Otherwise there is just one master node, the node itself
610  else
611  {
612  n_master = 1;
613  }
614 
615  //Loop over the master nodes
616  for(unsigned m=0;m<n_master;m++)
617  {
618  //If the node is hanging get weight from master node
619  if(is_node_hanging)
620  {
621  //Get the hang weight from the master node
622  hang_weight = hang_info_pt->master_weight(m);
623  }
624  else
625  {
626  // Node contributes with full weight
627  hang_weight = 1.0;
628  }
629 
630 
631  //Assemble derivatives of Navier Stokes momentum w.r.t. temperature
632  //-----------------------------------------------------------------
633 
634  // Loop over velocity components for equations
635  for(unsigned i=0;i<3;i++)
636  {
637 
638  //Get the equation number
639  if(is_node_hanging)
640  {
641  //Get the equation number from the master node
642  local_eqn = this->local_hang_eqn(hang_info_pt->master_node_pt(m),
643  u_nodal_axi_nst[i]);
644  }
645  else
646  {
647  // Local equation number
648  local_eqn = this->nodal_local_eqn(l,u_nodal_axi_nst[i]);
649  }
650 
651  if(local_eqn >= 0)
652  {
653  //Local variables to store the number of master nodes
654  //and the weights associated with each hanging node
655  unsigned n_master2=1;
656  double hang_weight2=1.0;
657 
658  //Loop over the nodes for the unknowns
659  for(unsigned l2=0;l2<n_node;l2++)
660  {
661  //Local bool (is the node hanging)
662  bool is_node2_hanging = this->node_pt(l2)->is_hanging();
663 
664  //If the node is hanging, get the number of master nodes
665  if(is_node2_hanging)
666  {
667  hang_info2_pt = this->node_pt(l2)->hanging_pt();
668  n_master2 = hang_info2_pt->nmaster();
669  }
670  //Otherwise there is one master node, the node itself
671  else
672  {
673  n_master2 = 1;
674  }
675 
676  //Loop over the master nodes
677  for(unsigned m2=0;m2<n_master2;m2++)
678  {
679  if(is_node2_hanging)
680  {
681  //Read out the local unknown from the master node
682  local_unknown =
683  this->local_hang_eqn(hang_info2_pt->master_node_pt(m2),
684  u_nodal_axi_adv_diff);
685  //Read out the hanging weight from the master node
686  hang_weight2 = hang_info2_pt->master_weight(m2);
687  }
688  else
689  {
690  //The local unknown number comes from the node
691  local_unknown = this->nodal_local_eqn(l2,
692  u_nodal_axi_adv_diff);
693  //The hang weight is one
694  hang_weight2 = 1.0;
695  }
696 
697  if(local_unknown >= 0)
698  {
699  //Add contribution to jacobian matrix
700  jacobian(local_eqn,local_unknown)
701  += -gravity[i]*psif(l2)*Ra*testf(l)*
702  r*W*hang_weight*hang_weight2;
703  }
704  }
705  }
706  }
707  }
708 
709 
710  //Assemble derivative of adv diff eqn w.r.t. fluid veloc
711  //------------------------------------------------------
712  {
713  //Get the equation number
714  if(is_node_hanging)
715  {
716  //Get the equation number from the master node
717  local_eqn = this->local_hang_eqn(hang_info_pt->master_node_pt(m),
718  u_nodal_axi_adv_diff);
719  }
720  else
721  {
722  // Local equation number
723  local_eqn = this->nodal_local_eqn(l,u_nodal_axi_adv_diff);
724  }
725 
726  //If it's not pinned
727  if(local_eqn >= 0)
728  {
729  //Local variables to store the number of master nodes
730  //and the weights associated with each hanging node
731  unsigned n_master2=1;
732  double hang_weight2=1.0;
733 
734  //Loop over the nodes for the unknowns
735  for(unsigned l2=0;l2<n_node;l2++)
736  {
737  //Local bool (is the node hanging)
738  bool is_node2_hanging = this->node_pt(l2)->is_hanging();
739 
740  //If the node is hanging, get the number of master nodes
741  if(is_node2_hanging)
742  {
743  hang_info2_pt = this->node_pt(l2)->hanging_pt();
744  n_master2 = hang_info2_pt->nmaster();
745  }
746  //Otherwise there is one master node, the node itself
747  else
748  {
749  n_master2 = 1;
750  }
751 
752  //Loop over the master nodes
753  for(unsigned m2=0;m2<n_master2;m2++)
754  {
755  //If the node is hanging
756  if(is_node2_hanging)
757  {
758  //Read out the hanging weight from the master node
759  hang_weight2 = hang_info2_pt->master_weight(m2);
760  }
761  //If the node is not hanging
762  else
763  {
764  //The hang weight is one
765  hang_weight2 = 1.0;
766  }
767 
768  //Loop over the velocity degrees of freedom
769  for(unsigned i2=0;i2<2;i2++)
770  {
771  //If the node is hanging
772  if(is_node2_hanging)
773  {
774  //Read out the local unknown from the master node
775  local_unknown =
776  this->local_hang_eqn(hang_info2_pt->master_node_pt(m2),
777  u_nodal_axi_nst[i2]);
778  }
779  else
780  {
781  //The local unknown number comes from the node
782  local_unknown=this->nodal_local_eqn(l2,
783  u_nodal_axi_nst[i2]);
784  }
785 
786  //If it's not pinned
787  if(local_unknown >= 0)
788  {
789  //Add the contribution to the jacobian matrix
790  jacobian(local_eqn,local_unknown)
791  -= Pe*psif(l2)*interpolated_du_axi_adv_diff_dx[i2]*testf(l)
792  *r*W*hang_weight*hang_weight2;
793  }
794  }
795  }
796  }
797  }
798  }
799 
800  }
801  }
802  }
803  } //End of function
804 
805 
806 };
807 
808 
809 //===================================================================
811 //===================================================================
814 
815 //====================================================================
816 //Specify the FaceGeometry
817 //===================================================================
818 template<>
820 public virtual QElement<1,3>
821 {
822 
823  public:
824 
827  FaceGeometry() : QElement<1,3>() {}
828 
829 };
830 
831 
832 
833 }
834 
835 
836 
837 
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
JacobiRotation< float > J
Definition: Jacobi_makeJacobi.cpp:3
RowVector3d w
Definition: Matrix_resize_int.cpp:3
MatrixType m2(n_dims)
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Add the element's contribution to its residual vector (wrapper)
Definition: axisym_advection_diffusion_elements.h:413
void disable_ALE()
Definition: axisym_advection_diffusion_elements.h:133
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: axisym_advection_diffusion_elements.h:427
const double & pe() const
Peclet number.
Definition: axisym_advection_diffusion_elements.h:299
double interpolated_u_axi_adv_diff(const Vector< double > &s) const
Return FE representation of function value u(s) at local coordinate s.
Definition: axisym_advection_diffusion_elements.h:437
void enable_ALE()
Definition: axisym_advection_diffusion_elements.h:143
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Compute the element's residual Vector.
Definition: axisym_navier_stokes_elements.h:780
const Vector< double > & g() const
Vector of gravitational components.
Definition: axisym_navier_stokes_elements.h:446
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: axisym_navier_stokes_elements.h:793
void interpolated_u_axi_nst(const Vector< double > &s, Vector< double > &veloc) const
Compute vector of FE interpolated velocity u at local coordinate s.
Definition: axisym_navier_stokes_elements.h:865
void disable_ALE()
Definition: axisym_navier_stokes_elements.h:560
double interpolated_p_axi_nst(const Vector< double > &s) const
Return FE interpolated pressure at local coordinate s.
Definition: axisym_navier_stokes_elements.h:1001
void enable_ALE()
Definition: axisym_navier_stokes_elements.h:569
virtual unsigned u_index_axi_nst(const unsigned &i) const
Definition: axisym_navier_stokes_elements.h:506
virtual unsigned required_nvalue(const unsigned &n) const
Number of values (pinned or dofs) required at local node n.
Definition: axisym_navier_stokes_elements.cc:3711
double dshape_and_dtest_eulerian_at_knot_axi_nst(const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const
Definition: axisym_navier_stokes_elements.h:1408
Definition: shape.h:278
FaceGeometry()
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:827
Definition: elements.h:4998
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: elements.h:1735
virtual void output_fct(std::ostream &outfile, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output an exact solution over the element.
Definition: elements.h:3104
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
Definition: elements.h:2175
double nodal_value(const unsigned &n, const unsigned &i) const
Definition: elements.h:2593
virtual void output(std::ostream &outfile)
Definition: elements.h:3050
virtual double interpolated_x(const Vector< double > &s, const unsigned &i) const
Return FE interpolated coordinate x[i] at local coordinate s.
Definition: elements.cc:3962
int nodal_local_eqn(const unsigned &n, const unsigned &i) const
Definition: elements.h:1432
unsigned nnode() const
Return the number of nodes.
Definition: elements.h:2210
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.
Definition: elements.h:3198
void(* SteadyExactSolutionFctPt)(const Vector< double > &, Vector< double > &)
Definition: elements.h:1759
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
Definition: elements.h:1963
double nodal_position(const unsigned &n, const unsigned &i) const
Definition: elements.h:2317
virtual void write_tecplot_zone_footer(std::ostream &outfile, const unsigned &nplot) const
Definition: elements.h:3174
void(* UnsteadyExactSolutionFctPt)(const double &, const Vector< double > &, Vector< double > &)
Definition: elements.h:1765
virtual void fill_in_contribution_to_jacobian_and_mass_matrix(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
Definition: elements.cc:1322
Definition: nodes.h:742
double const & master_weight(const unsigned &i) const
Return weight for dofs on i-th master node.
Definition: nodes.h:808
Node *const & master_node_pt(const unsigned &i) const
Return a pointer to the i-th master node.
Definition: nodes.h:791
unsigned nmaster() const
Return the number of master nodes.
Definition: nodes.h:785
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.
Definition: mesh.h:67
Definition: nodes.h:906
HangInfo *const & hanging_pt() const
Definition: nodes.h:1228
bool is_hanging() const
Test whether the node is geometrically hanging.
Definition: nodes.h:1285
Definition: oomph_definitions.h:222
unsigned nplot_points(const unsigned &nplot) const
Definition: Qelements.h:1107
void get_s_plot(const unsigned &i, const unsigned &nplot, Vector< double > &s, const bool &use_equally_spaced_interior_sample_points=false) const
Definition: Qelements.h:1067
std::string tecplot_zone_string(const unsigned &nplot) const
Definition: Qelements.h:1098
Definition: Qelements.h:459
void get_Z2_flux(const Vector< double > &s, Vector< double > &flux)
Definition: refineable_axisym_advection_diffusion_elements.h:90
void get_interpolated_values(const Vector< double > &s, Vector< double > &values)
Definition: refineable_axisym_advection_diffusion_elements.h:100
unsigned num_Z2_flux_terms()
Broken assignment operator.
Definition: refineable_axisym_advection_diffusion_elements.h:83
void further_build()
Further build: Copy source function pointer from father element.
Definition: refineable_axisym_advection_diffusion_elements.h:187
unsigned num_Z2_flux_terms()
Number of 'flux' terms for Z2 error estimation.
Definition: refineable_axisym_navier_stokes_elements.h:75
void get_Z2_flux(const Vector< double > &s, Vector< double > &flux)
Definition: refineable_axisym_navier_stokes_elements.h:83
Definition: refineable_axisym_navier_stokes_elements.h:765
void further_setup_hanging_nodes()
Definition: refineable_axisym_navier_stokes_elements.h:978
void get_interpolated_values(const Vector< double > &s, Vector< double > &values)
Definition: refineable_axisym_navier_stokes_elements.h:918
void rebuild_from_sons(Mesh *&mesh_pt)
Rebuild from sons: Reconstruct pressure from the (merged) sons.
Definition: refineable_axisym_navier_stokes_elements.h:795
unsigned nrecovery_order()
Definition: refineable_axisym_navier_stokes_elements.h:897
void further_build()
Definition: refineable_axisym_navier_stokes_elements.h:984
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:64
void output(FILE *file_pt)
C-style output function: Broken default.
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:196
unsigned u_index_axi_adv_diff() const
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:223
void compute_error(std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:416
void get_Z2_flux(const Vector< double > &s, Vector< double > &flux)
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:360
void further_build()
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:327
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Fill in the constituent elements' contribution to the residual vector.
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:470
unsigned ncompound_fluxes()
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:387
void disable_ALE()
Final override for disable ALE.
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:100
void get_interpolated_values(const unsigned &t, const Vector< double > &s, Vector< double > &values)
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:272
unsigned ncont_interpolated_values() const
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:237
void get_Z2_compound_flux_indices(Vector< unsigned > &flux_index)
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:391
void output(std::ostream &outfile, const unsigned &nplot)
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:159
unsigned nscalar_paraview() const
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:119
void fill_in_off_diagonal_jacobian_blocks_analytic(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:517
void rebuild_from_sons(Mesh *&mesh_pt)
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:311
const double & ra() const
Access function for the Rayleigh number (const version)
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:93
unsigned nvertex_node() const
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:227
std::string scalar_name_paraview(const unsigned &i) const
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:147
void get_wind_axi_adv_diff(const unsigned &ipt, const Vector< double > &s, const Vector< double > &x, Vector< double > &wind) const
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:437
void compute_error(std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:428
void enable_ALE()
Final override for enable ALE.
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:108
void fill_in_contribution_to_jacobian_and_mass_matrix(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:506
void scalar_value_paraview(std::ofstream &file_out, const unsigned &i, const unsigned &nplot) const
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:133
unsigned nrecovery_order()
The recovery order is that of the NavierStokes elements.
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:346
RefineableBuoyantQAxisymCrouzeixRaviartElement()
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:78
void further_setup_hanging_nodes()
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:301
static double Default_Physical_Constant_Value
The static default value of the Rayleigh number.
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:72
void output(std::ostream &outfile)
Overload the standard output function with the broken default.
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:154
double *& ra_pt()
Access function for the pointer to the Rayleigh number.
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:96
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:484
void get_interpolated_values(const Vector< double > &s, Vector< double > &values)
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:243
double * Ra_pt
Pointer to a new physical variable, the Rayleigh number.
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:69
void output(FILE *file_pt, const unsigned &n_plot)
C-style output function: Broken default.
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:200
void output_fct(std::ostream &outfile, const unsigned &Nplot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt)
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:212
double geometric_jacobian(const Vector< double > &x)
Fill in the geometric Jacobian, which in this case is r.
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:319
Node * vertex_node_pt(const unsigned &j) const
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:232
unsigned required_nvalue(const unsigned &n) const
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:88
unsigned num_Z2_flux_terms()
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:351
void output_fct(std::ostream &outfile, const unsigned &Nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output function for an exact solution: Broken default.
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:204
void get_body_force_axi_nst(const double &time, const unsigned &ipt, const Vector< double > &s, const Vector< double > &x, Vector< double > &result)
Definition: axisym_heat_sphere/axisym_buoyant_navier_stokes.h:451
virtual RefineableElement * father_element_pt() const
Return a pointer to the father element.
Definition: refineable_elements.h:539
int local_hang_eqn(Node *const &node_pt, const unsigned &i)
Definition: refineable_elements.h:278
Definition: refineable_axisym_advection_diffusion_elements.h:365
void rebuild_from_sons(Mesh *&mesh_pt)
Rebuild from sons: empty.
Definition: refineable_axisym_advection_diffusion_elements.h:406
void further_setup_hanging_nodes()
Definition: refineable_axisym_advection_diffusion_elements.h:417
Definition: shape.h:76
RealScalar s
Definition: level1_cplx_impl.h:130
int * m
Definition: level2_cplx_impl.h:294
double Pe
Peclet number.
Definition: axisym_heat_sphere.cc:59
double Ra
Rayleigh number.
Definition: axisym_heat_sphere.cc:62
void gravity(const double &t, const Vector< double > &xi, Vector< double > &b)
Definition: ConstraintElementsUnitTest.cpp:20
void flux(const double &time, const Vector< double > &x, double &flux)
Get flux applied along boundary x=0.
Definition: pretend_melt.cc:59
r
Definition: UniformPSDSelfTest.py:20
int error
Definition: calibrate.py:297
Definition: MortaringCantileverCompareToNonMortaring.cpp:176
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
@ W
Definition: quadtree.h:63
std::string to_string(T object, unsigned float_precision=8)
Definition: oomph_utilities.h:189
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
list x
Definition: plotDoE.py:28
t
Definition: plotPSD.py:36
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2