advection_diffusion_elements.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 // Header file for Advection Diffusion elements
27 #ifndef OOMPH_ADV_DIFF_ELEMENTS_HEADER
28 #define OOMPH_ADV_DIFF_ELEMENTS_HEADER
29 
30 
31 // Config header generated by autoconfig
32 #ifdef HAVE_CONFIG_H
33 #include <oomph-lib-config.h>
34 #endif
35 
36 // OOMPH-LIB headers
37 #include "../generic/nodes.h"
38 #include "../generic/Qelements.h"
39 #include "../generic/oomph_utilities.h"
40 
41 namespace oomph
42 {
43  //=============================================================
49  //=============================================================
50  template<unsigned DIM>
52  {
53  public:
57  double& f);
58 
59 
63  Vector<double>& wind);
64 
65 
70  {
71  // Set Peclet number to default
73  // Set Peclet Strouhal number to default
75  }
76 
79  delete;
80 
82  void operator=(const AdvectionDiffusionEquations&) = delete;
83 
91  virtual inline unsigned u_index_adv_diff() const
92  {
93  return 0;
94  }
95 
98  double du_dt_adv_diff(const unsigned& n) const
99  {
100  // Get the data's timestepper
102 
103  // Initialise dudt
104  double dudt = 0.0;
105  // Loop over the timesteps, if there is a non Steady timestepper
106  if (!time_stepper_pt->is_steady())
107  {
108  // Find the index at which the variable is stored
109  const unsigned u_nodal_index = u_index_adv_diff();
110 
111  // Number of timsteps (past & present)
112  const unsigned n_time = time_stepper_pt->ntstorage();
113 
114  for (unsigned t = 0; t < n_time; t++)
115  {
116  dudt +=
117  time_stepper_pt->weight(1, t) * nodal_value(t, n, u_nodal_index);
118  }
119  }
120  return dudt;
121  }
122 
125  void disable_ALE()
126  {
127  ALE_is_disabled = true;
128  }
129 
130 
135  void enable_ALE()
136  {
137  ALE_is_disabled = false;
138  }
139 
142  unsigned nscalar_paraview() const
143  {
144  return DIM + 1;
145  }
146 
149  void scalar_value_paraview(std::ofstream& file_out,
150  const unsigned& i,
151  const unsigned& nplot) const
152  {
153  // Vector of local coordinates
155 
156  // Loop over plot points
157  unsigned num_plot_points = nplot_points_paraview(nplot);
158  for (unsigned iplot = 0; iplot < num_plot_points; iplot++)
159  {
160  // Get local coordinates of plot point
161  get_s_plot(iplot, nplot, s);
162 
163  // Get Eulerian coordinate of plot point
165  interpolated_x(s, x);
166 
167  if (i < DIM)
168  {
169  // Get the wind
170  Vector<double> wind(DIM);
171 
172  // Dummy ipt argument needed... ?
173  unsigned ipt = 0;
174  get_wind_adv_diff(ipt, s, x, wind);
175 
176  file_out << wind[i] << std::endl;
177  }
178  // Advection Diffusion
179  else if (i == DIM)
180  {
181  file_out << interpolated_u_adv_diff(s) << std::endl;
182  }
183  // Never get here
184  else
185  {
186  std::stringstream error_stream;
187  error_stream << "Advection Diffusion Elements only store " << DIM + 1
188  << " fields " << std::endl;
189  throw OomphLibError(error_stream.str(),
192  }
193  }
194  }
195 
199  std::string scalar_name_paraview(const unsigned& i) const
200  {
201  // Winds
202  if (i < DIM)
203  {
204  return "Wind " + StringConversion::to_string(i);
205  }
206  // Advection Diffusion field
207  else if (i == DIM)
208  {
209  return "Advection Diffusion";
210  }
211  // Never get here
212  else
213  {
214  std::stringstream error_stream;
215  error_stream << "Advection Diffusion Elements only store " << DIM + 1
216  << " fields" << std::endl;
217  throw OomphLibError(
218  error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
219  // Dummy return
220  return " ";
221  }
222  }
223 
225  void output(std::ostream& outfile)
226  {
227  unsigned nplot = 5;
228  output(outfile, nplot);
229  }
230 
233  void output(std::ostream& outfile, const unsigned& nplot);
234 
235 
237  void output(FILE* file_pt)
238  {
239  unsigned n_plot = 5;
240  output(file_pt, n_plot);
241  }
242 
245  void output(FILE* file_pt, const unsigned& n_plot);
246 
247 
249  void output_fct(std::ostream& outfile,
250  const unsigned& nplot,
252 
256  virtual void output_fct(
257  std::ostream& outfile,
258  const unsigned& nplot,
259  const double& time,
261  {
262  throw OomphLibError("There is no time-dependent output_fct() for "
263  "Advection Diffusion elements",
266  }
267 
268 
270  void compute_error(std::ostream& outfile,
272  double& error,
273  double& norm);
274 
275 
277  void compute_error(std::ostream& outfile,
279  const double& time,
280  double& error,
281  double& norm)
282  {
283  throw OomphLibError(
284  "No time-dependent compute_error() for Advection Diffusion elements",
287  }
288 
289 
292  {
293  return Source_fct_pt;
294  }
295 
296 
299  {
300  return Source_fct_pt;
301  }
302 
303 
306  {
307  return Wind_fct_pt;
308  }
309 
310 
313  {
314  return Wind_fct_pt;
315  }
316 
318  const double& pe() const
319  {
320  return *Pe_pt;
321  }
322 
324  double*& pe_pt()
325  {
326  return Pe_pt;
327  }
328 
330  const double& pe_st() const
331  {
332  return *PeSt_pt;
333  }
334 
336  double*& pe_st_pt()
337  {
338  return PeSt_pt;
339  }
340 
345  inline virtual void get_source_adv_diff(const unsigned& ipt,
346  const Vector<double>& x,
347  double& source) const
348  {
349  // If no source function has been set, return zero
350  if (Source_fct_pt == 0)
351  {
352  source = 0.0;
353  }
354  else
355  {
356  // Get source strength
357  (*Source_fct_pt)(x, source);
358  }
359  }
360 
366  inline virtual void get_wind_adv_diff(const unsigned& ipt,
367  const Vector<double>& s,
368  const Vector<double>& x,
369  Vector<double>& wind) const
370  {
371  // If no wind function has been set, return zero
372  if (Wind_fct_pt == 0)
373  {
374  for (unsigned i = 0; i < DIM; i++)
375  {
376  wind[i] = 0.0;
377  }
378  }
379  else
380  {
381  // Get wind
382  (*Wind_fct_pt)(x, wind);
383  }
384  }
385 
388  {
389  // Find out how many nodes there are in the element
390  unsigned n_node = nnode();
391 
392  // Get the nodal index at which the unknown is stored
393  unsigned u_nodal_index = u_index_adv_diff();
394 
395  // Set up memory for the shape and test functions
396  Shape psi(n_node);
397  DShape dpsidx(n_node, DIM);
398 
399  // Call the derivatives of the shape and test functions
400  dshape_eulerian(s, psi, dpsidx);
401 
402  // Initialise to zero
403  for (unsigned j = 0; j < DIM; j++)
404  {
405  flux[j] = 0.0;
406  }
407 
408  // Loop over nodes
409  for (unsigned l = 0; l < n_node; l++)
410  {
411  // Loop over derivative directions
412  for (unsigned j = 0; j < DIM; j++)
413  {
414  flux[j] += nodal_value(l, u_nodal_index) * dpsidx(l, j);
415  }
416  }
417  }
418 
419 
422  {
423  // Call the generic residuals function with flag set to 0 and using
424  // a dummy matrix
426  residuals,
429  0);
430  }
431 
432 
436  DenseMatrix<double>& jacobian)
437  {
438  // Call the generic routine with the flag set to 1
440  residuals, jacobian, GeneralisedElement::Dummy_matrix, 1);
441  }
442 
443 
447  Vector<double>& residuals,
448  DenseMatrix<double>& jacobian,
449  DenseMatrix<double>& mass_matrix)
450  {
451  // Call the generic routine with the flag set to 2
453  residuals, jacobian, mass_matrix, 2);
454  }
455 
456 
458  inline double interpolated_u_adv_diff(const Vector<double>& s) const
459  {
460  // Find number of nodes
461  unsigned n_node = nnode();
462 
463  // Get the nodal index at which the unknown is stored
464  unsigned u_nodal_index = u_index_adv_diff();
465 
466  // Local shape function
467  Shape psi(n_node);
468 
469  // Find values of shape function
470  shape(s, psi);
471 
472  // Initialise value of u
473  double interpolated_u = 0.0;
474 
475  // Loop over the local nodes and sum
476  for (unsigned l = 0; l < n_node; l++)
477  {
478  interpolated_u += nodal_value(l, u_nodal_index) * psi[l];
479  }
480 
481  return (interpolated_u);
482  }
483 
484 
491  const Vector<double>& s,
492  Vector<double>& du_ddata,
493  Vector<unsigned>& global_eqn_number)
494  {
495  // Find number of nodes
496  const unsigned n_node = nnode();
497 
498  // Get the nodal index at which the unknown is stored
499  const unsigned u_nodal_index = u_index_adv_diff();
500 
501  // Local shape function
502  Shape psi(n_node);
503 
504  // Find values of shape function
505  shape(s, psi);
506 
507  // Find the number of dofs associated with interpolated u
508  unsigned n_u_dof = 0;
509  for (unsigned l = 0; l < n_node; l++)
510  {
511  int global_eqn = this->node_pt(l)->eqn_number(u_nodal_index);
512  // If it's positive add to the count
513  if (global_eqn >= 0)
514  {
515  ++n_u_dof;
516  }
517  }
518 
519  // Now resize the storage schemes
520  du_ddata.resize(n_u_dof, 0.0);
521  global_eqn_number.resize(n_u_dof, 0);
522 
523  // Loop over the nodes again and set the derivatives
524  unsigned count = 0;
525  for (unsigned l = 0; l < n_node; l++)
526  {
527  // Get the global equation number
528  int global_eqn = this->node_pt(l)->eqn_number(u_nodal_index);
529  // If it's positive
530  if (global_eqn >= 0)
531  {
532  // Set the global equation number
533  global_eqn_number[count] = global_eqn;
534  // Set the derivative with respect to the unknown
535  du_ddata[count] = psi[l];
536  // Increase the counter
537  ++count;
538  }
539  }
540  }
541 
542 
544  unsigned self_test();
545 
546  protected:
550  const Vector<double>& s,
551  Shape& psi,
552  DShape& dpsidx,
553  Shape& test,
554  DShape& dtestdx) const = 0;
555 
559  const unsigned& ipt,
560  Shape& psi,
561  DShape& dpsidx,
562  Shape& test,
563  DShape& dtestdx) const = 0;
564 
568  Vector<double>& residuals,
569  DenseMatrix<double>& jacobian,
570  DenseMatrix<double>& mass_matrix,
571  unsigned flag);
572 
574  double* Pe_pt;
575 
577  double* PeSt_pt;
578 
581 
584 
589 
590  private:
592  static double Default_peclet_number;
593  };
594 
595 
599 
600 
601  //======================================================================
605  //======================================================================
606  template<unsigned DIM, unsigned NNODE_1D>
608  : public virtual QElement<DIM, NNODE_1D>,
609  public virtual AdvectionDiffusionEquations<DIM>
610  {
611  private:
614  static const unsigned Initial_Nvalue;
615 
616  public:
620  : QElement<DIM, NNODE_1D>(), AdvectionDiffusionEquations<DIM>()
621  {
622  }
623 
626  const QAdvectionDiffusionElement<DIM, NNODE_1D>& dummy) = delete;
627 
630 
633  inline unsigned required_nvalue(const unsigned& n) const
634  {
635  return Initial_Nvalue;
636  }
637 
640  void output(std::ostream& outfile)
641  {
643  }
644 
647  void output(std::ostream& outfile, const unsigned& n_plot)
648  {
650  }
651 
652 
655  void output(FILE* file_pt)
656  {
658  }
659 
662  void output(FILE* file_pt, const unsigned& n_plot)
663  {
665  }
666 
669  void output_fct(std::ostream& outfile,
670  const unsigned& n_plot,
672  {
674  outfile, n_plot, exact_soln_pt);
675  }
676 
677 
681  void output_fct(std::ostream& outfile,
682  const unsigned& n_plot,
683  const double& time,
685  {
687  outfile, n_plot, time, exact_soln_pt);
688  }
689 
690 
691  protected:
695  Shape& psi,
696  DShape& dpsidx,
697  Shape& test,
698  DShape& dtestdx) const;
699 
703  const unsigned& ipt,
704  Shape& psi,
705  DShape& dpsidx,
706  Shape& test,
707  DShape& dtestdx) const;
708  };
709 
710  // Inline functions:
711 
712 
713  //======================================================================
718  //======================================================================
719  template<unsigned DIM, unsigned NNODE_1D>
722  Shape& psi,
723  DShape& dpsidx,
724  Shape& test,
725  DShape& dtestdx) const
726  {
727  // Call the geometrical shape functions and derivatives
728  double J = this->dshape_eulerian(s, psi, dpsidx);
729 
730  // Loop over the test functions and derivatives and set them equal to the
731  // shape functions
732  for (unsigned i = 0; i < NNODE_1D; i++)
733  {
734  test[i] = psi[i];
735  for (unsigned j = 0; j < DIM; j++)
736  {
737  dtestdx(i, j) = dpsidx(i, j);
738  }
739  }
740 
741  // Return the jacobian
742  return J;
743  }
744 
745 
746  //======================================================================
751  //======================================================================
752  template<unsigned DIM, unsigned NNODE_1D>
755  Shape& psi,
756  DShape& dpsidx,
757  Shape& test,
758  DShape& dtestdx) const
759  {
760  // Call the geometrical shape functions and derivatives
761  double J = this->dshape_eulerian_at_knot(ipt, psi, dpsidx);
762 
763  // Set the test functions equal to the shape functions (pointer copy)
764  test = psi;
765  dtestdx = dpsidx;
766 
767  // Return the jacobian
768  return J;
769  }
770 
771 
775 
776 
777  //=======================================================================
782  //=======================================================================
783  template<unsigned DIM, unsigned NNODE_1D>
785  : public virtual QElement<DIM - 1, NNODE_1D>
786  {
787  public:
790  FaceGeometry() : QElement<DIM - 1, NNODE_1D>() {}
791  };
792 
793 
797 
798 
799  //=======================================================================
801  //=======================================================================
802  template<unsigned NNODE_1D>
804  : public virtual PointElement
805  {
806  public:
810  };
811 
812 } // namespace oomph
813 
814 #endif
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
JacobiRotation< float > J
Definition: Jacobi_makeJacobi.cpp:3
Definition: advection_diffusion_elements.h:52
bool ALE_is_disabled
Definition: advection_diffusion_elements.h:588
void output(FILE *file_pt)
C_style output with default number of plot points.
Definition: advection_diffusion_elements.h:237
AdvectionDiffusionEquations()
Definition: advection_diffusion_elements.h:68
double interpolated_u_adv_diff(const Vector< double > &s) const
Return FE representation of function value u(s) at local coordinate s.
Definition: advection_diffusion_elements.h:458
double du_dt_adv_diff(const unsigned &n) const
Definition: advection_diffusion_elements.h:98
void output(std::ostream &outfile)
Output with default number of plot points.
Definition: advection_diffusion_elements.h:225
virtual void get_wind_adv_diff(const unsigned &ipt, const Vector< double > &s, const Vector< double > &x, Vector< double > &wind) const
Definition: advection_diffusion_elements.h:366
void(* AdvectionDiffusionWindFctPt)(const Vector< double > &x, Vector< double > &wind)
Definition: advection_diffusion_elements.h:62
virtual double dshape_and_dtest_eulerian_at_knot_adv_diff(const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const =0
std::string scalar_name_paraview(const unsigned &i) const
Definition: advection_diffusion_elements.h:199
virtual void fill_in_generic_residual_contribution_adv_diff(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix, unsigned flag)
Definition: advection_diffusion_elements.cc:48
double * Pe_pt
Pointer to global Peclet number.
Definition: advection_diffusion_elements.h:574
virtual void get_source_adv_diff(const unsigned &ipt, const Vector< double > &x, double &source) const
Definition: advection_diffusion_elements.h:345
double *& pe_pt()
Pointer to Peclet number.
Definition: advection_diffusion_elements.h:324
AdvectionDiffusionEquations(const AdvectionDiffusionEquations &dummy)=delete
Broken copy constructor.
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: advection_diffusion_elements.h:435
AdvectionDiffusionWindFctPt & wind_fct_pt()
Access function: Pointer to wind function.
Definition: advection_diffusion_elements.h:305
unsigned nscalar_paraview() const
Definition: advection_diffusion_elements.h:142
AdvectionDiffusionSourceFctPt source_fct_pt() const
Access function: Pointer to source function. Const version.
Definition: advection_diffusion_elements.h:298
static double Default_peclet_number
Static default value for the Peclet number.
Definition: advection_diffusion_elements.h:592
virtual void dinterpolated_u_adv_diff_ddata(const Vector< double > &s, Vector< double > &du_ddata, Vector< unsigned > &global_eqn_number)
Definition: advection_diffusion_elements.h:490
AdvectionDiffusionSourceFctPt Source_fct_pt
Pointer to source function:
Definition: advection_diffusion_elements.h:580
void scalar_value_paraview(std::ofstream &file_out, const unsigned &i, const unsigned &nplot) const
Definition: advection_diffusion_elements.h:149
void compute_error(std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
Dummy, time dependent error checker.
Definition: advection_diffusion_elements.h:277
void operator=(const AdvectionDiffusionEquations &)=delete
Broken assignment operator.
void enable_ALE()
Definition: advection_diffusion_elements.h:135
void get_flux(const Vector< double > &s, Vector< double > &flux) const
Get flux: .
Definition: advection_diffusion_elements.h:387
AdvectionDiffusionWindFctPt Wind_fct_pt
Pointer to wind function:
Definition: advection_diffusion_elements.h:583
void disable_ALE()
Definition: advection_diffusion_elements.h:125
void(* AdvectionDiffusionSourceFctPt)(const Vector< double > &x, double &f)
Definition: advection_diffusion_elements.h:56
double * PeSt_pt
Pointer to global Peclet number multiplied by Strouhal number.
Definition: advection_diffusion_elements.h:577
virtual unsigned u_index_adv_diff() const
Definition: advection_diffusion_elements.h:91
AdvectionDiffusionWindFctPt wind_fct_pt() const
Access function: Pointer to wind function. Const version.
Definition: advection_diffusion_elements.h:312
void output_fct(std::ostream &outfile, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output exact soln: x,y,u_exact or x,y,z,u_exact at nplot^DIM plot points.
Definition: advection_diffusion_elements.cc:345
virtual double dshape_and_dtest_eulerian_adv_diff(const Vector< double > &s, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const =0
unsigned self_test()
Self-test: Return 0 for OK.
Definition: advection_diffusion_elements.cc:226
void compute_error(std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
Get error against and norm of exact solution.
Definition: advection_diffusion_elements.cc:396
const double & pe_st() const
Peclet number multiplied by Strouhal number.
Definition: advection_diffusion_elements.h:330
const double & pe() const
Peclet number.
Definition: advection_diffusion_elements.h:318
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Add the element's contribution to its residual vector (wrapper)
Definition: advection_diffusion_elements.h:421
void fill_in_contribution_to_jacobian_and_mass_matrix(Vector< double > &residuals, DenseMatrix< double > &jacobian, DenseMatrix< double > &mass_matrix)
Definition: advection_diffusion_elements.h:446
double *& pe_st_pt()
Pointer to Peclet number multipled by Strouha number.
Definition: advection_diffusion_elements.h:336
AdvectionDiffusionSourceFctPt & source_fct_pt()
Access function: Pointer to source function.
Definition: advection_diffusion_elements.h:291
virtual void output_fct(std::ostream &outfile, const unsigned &nplot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt)
Definition: advection_diffusion_elements.h:256
Definition: shape.h:278
long & eqn_number(const unsigned &i)
Return the equation number of the i-th stored variable.
Definition: nodes.h:367
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
Definition: nodes.h:238
FaceGeometry()
Definition: advection_diffusion_elements.h:809
FaceGeometry()
Definition: advection_diffusion_elements.h:790
Definition: elements.h:4998
Definition: elements.h:1313
virtual unsigned nplot_points_paraview(const unsigned &nplot) const
Definition: elements.h:2862
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 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
virtual void shape(const Vector< double > &s, Shape &psi) const =0
unsigned nnode() const
Return the number of nodes.
Definition: elements.h:2210
void(* SteadyExactSolutionFctPt)(const Vector< double > &, Vector< double > &)
Definition: elements.h:1759
virtual void get_s_plot(const unsigned &i, const unsigned &nplot, Vector< double > &s, const bool &shifted_to_interior=false) const
Definition: elements.h:3148
void(* UnsteadyExactSolutionFctPt)(const double &, const Vector< double > &, Vector< double > &)
Definition: elements.h:1765
double dshape_eulerian(const Vector< double > &s, Shape &psi, DShape &dpsidx) const
Definition: elements.cc:3298
static DenseMatrix< double > Dummy_matrix
Definition: elements.h:227
TimeStepper *& time_stepper_pt()
Definition: geom_objects.h:192
Definition: oomph_definitions.h:222
Definition: elements.h:3439
Definition: advection_diffusion_elements.h:610
void output_fct(std::ostream &outfile, const unsigned &n_plot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt)
Definition: advection_diffusion_elements.h:681
void output(std::ostream &outfile, const unsigned &n_plot)
Definition: advection_diffusion_elements.h:647
QAdvectionDiffusionElement()
Definition: advection_diffusion_elements.h:619
void output_fct(std::ostream &outfile, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Definition: advection_diffusion_elements.h:669
unsigned required_nvalue(const unsigned &n) const
Definition: advection_diffusion_elements.h:633
void output(FILE *file_pt)
Definition: advection_diffusion_elements.h:655
QAdvectionDiffusionElement(const QAdvectionDiffusionElement< DIM, NNODE_1D > &dummy)=delete
Broken copy constructor.
void output(FILE *file_pt, const unsigned &n_plot)
Definition: advection_diffusion_elements.h:662
static const unsigned Initial_Nvalue
Definition: advection_diffusion_elements.h:614
double dshape_and_dtest_eulerian_adv_diff(const Vector< double > &s, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const
Definition: advection_diffusion_elements.h:721
void output(std::ostream &outfile)
Definition: advection_diffusion_elements.h:640
void operator=(const QAdvectionDiffusionElement< DIM, NNODE_1D > &)=delete
Broken assignment operator.
double dshape_and_dtest_eulerian_at_knot_adv_diff(const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const
Definition: advection_diffusion_elements.h:754
Definition: Qelements.h:459
Definition: shape.h:76
Definition: timesteppers.h:231
unsigned ntstorage() const
Definition: timesteppers.h:601
virtual double weight(const unsigned &i, const unsigned &j) const
Access function for j-th weight for the i-th derivative.
Definition: timesteppers.h:594
bool is_steady() const
Definition: timesteppers.h:389
static int f(const TensorMap< Tensor< int, 3 > > &tensor)
Definition: cxx11_tensor_map.cpp:237
RealScalar s
Definition: level1_cplx_impl.h:130
#define DIM
Definition: linearised_navier_stokes_elements.h:44
void flux(const double &time, const Vector< double > &x, double &flux)
Get flux applied along boundary x=0.
Definition: pretend_melt.cc:59
void source(const Vector< double > &x, Vector< double > &f)
Source function.
Definition: unstructured_two_d_circle.cc:46
int error
Definition: calibrate.py:297
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
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
Definition: indexed_view.cpp:20
#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