streamfunction_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 Streamfunction elements
27 #ifndef OOMPH_POLAR_STREAMFUNCTION
28 #define OOMPH_POLAR_STREAMFUNCTION
29 
30 namespace oomph
31 {
32 
33 //=============================================================
35 //=============================================================
37 {
38 protected:
39 
41  double *Alpha_pt;
42 
43 public:
44 
46  const double &alpha() const {return *Alpha_pt;}
47 
49  double* &alpha_pt() {return Alpha_pt;}
50 
53 
56  {
57  BrokenCopy::broken_copy("PolarStreamfunctionEquations");
58  }
59 
60 
62  virtual inline unsigned u_index_streamfunction() const {return 0;}
63 
65  virtual inline unsigned u_index_velocity(const unsigned &i) const {return i+1;}
66 
68  void output(std::ostream &outfile)
69  {
70  const unsigned n_plot=5;
71  output(outfile,n_plot);
72  }
73 
76  void output(std::ostream &outfile, const unsigned &n_plot);
77 
79  void output(FILE* file_pt)
80  {
81  const unsigned n_plot=5;
82  output(file_pt,n_plot);
83  }
84 
87  void output(FILE* file_pt, const unsigned &n_plot);
88 
92  {
93  //Find out how many nodes there are in the element
94  const unsigned n_node = nnode();
95 
96  //Get the index at which the unknown is stored
97  const unsigned u_nodal_index = u_index_streamfunction();
98 
99  //Set up memory for the shape and test functions
100  Shape psi(n_node);
101  DShape dpsidx(n_node,2);
102 
103  //Call the derivatives of the shape and test functions
104  dshape_eulerian(s,psi,dpsidx);
105 
106  //Initialise to zero
107  for(unsigned j=0;j<2;j++)
108  {
109  flux[j] = 0.0;
110  }
111 
112  // Loop over nodes
113  for(unsigned l=0;l<n_node;l++)
114  {
115  //Loop over derivative directions
116  for(unsigned j=0;j<2;j++)
117  {
118  flux[j] += this->nodal_value(l,u_nodal_index)*dpsidx(l,j);
119  }
120  }
121  }
122 
125  {
126  //Call the generic residuals function with flag set to 0
127  //using a dummy matrix argument
130  }
131 
132 
136  DenseMatrix<double> &jacobian)
137  {
138  //Call the generic routine with the flag set to 1
139  fill_in_generic_residual_contribution(residuals,jacobian,1);
140  }
141 
142 
145  inline double interpolated_streamfunction(const Vector<double> &s) const
146  {
147  //Find number of nodes
148  const unsigned n_node = nnode();
149 
150  //Get the index at which the poisson unknown is stored
151  const unsigned u_nodal_index = u_index_streamfunction();
152 
153  //Local shape function
154  Shape psi(n_node);
155 
156  //Find values of shape function
157  shape(s,psi);
158 
159  //Initialise value of u
160  double interpolated_u = 0.0;
161 
162  //Loop over the local nodes and sum
163  for(unsigned l=0;l<n_node;l++)
164  {
165  interpolated_u += this->nodal_value(l,u_nodal_index)*psi[l];
166  }
167 
168  return(interpolated_u);
169  }
170 
172  double interpolated_velocity(const Vector<double> &s, const unsigned &i) const
173  {
174  //Find number of nodes
175  unsigned n_node = nnode();
176 
177  //Get the index at which the poisson unknown is stored
178  const unsigned u_nodal_index = u_index_velocity(i);
179 
180  //Local shape function
181  Shape psi(n_node);
182  //Find values of shape function
183  shape(s,psi);
184 
185  //Initialise value of u
186  double interpolated_u = 0.0;
187  //Loop over the local nodes and sum
188  for(unsigned l=0;l<n_node;l++)
189  {
190  interpolated_u += this->nodal_value(l,u_nodal_index)*psi[l];
191  }
192 
193  return(interpolated_u);
194  }
195 
198  double interpolated_dudx(const Vector<double> &s, const unsigned &i,const unsigned &j) const
199  {
200  //Find number of nodes
201  unsigned n_node = nnode();
202 
203  //Get the index at which the poisson unknown is stored
204  const unsigned u_nodal_index = u_index_velocity(i);
205 
206  //Set up memory for the shape and test functions
207  Shape psi(n_node);
208  DShape dpsidx(n_node,2);
209 
210  //double J =
211  dshape_eulerian(s,psi,dpsidx);
212 
213  //Initialise to zero
214  double interpolated_dudx = 0.0;
215 
216  //Calculate velocity derivative:
217 
218  // Loop over nodes
219  for(unsigned l=0;l<n_node;l++)
220  {
221  interpolated_dudx += this->nodal_value(l,u_nodal_index)*dpsidx(l,j);
222  }
223 
224  return(interpolated_dudx);
225  }
226 
229  inline double interpolated_vorticity(const Vector<double> &s) const
230  {
231  //Find number of nodes
232  unsigned n_node = nnode();
233 
234  //Get Alpha
235  const double Alpha = alpha();
236 
237  //Local shape function
238  Shape psi(n_node);
239  //Find values of shape function
240  shape(s,psi);
241 
242  //Allocate and initialise to zero
243  double r = 0.0;
244 
245  // Loop over nodes to calculate r
246  for(unsigned l=0;l<n_node;l++)
247  {
248  r += nodal_position(l,0)*psi(l);
249  }
250 
251  //Initialise value of u
252  double interpolated_u = 0.0;
253 
254  interpolated_u += interpolated_dudx(s,1,0);
255  interpolated_u += (1./r)*interpolated_velocity(s,1);
256  interpolated_u -= (1./(r*Alpha))*interpolated_dudx(s,0,1);
257 
258  return(interpolated_u);
259  }
260 
261 protected:
262 
266  Shape &psi,
267  DShape &dpsidx, Shape &test,
268  DShape &dtestdx) const=0;
269 
270 
273  virtual double dshape_and_dtest_eulerian_at_knot_poisson(const unsigned &ipt,
274  Shape &psi,
275  DShape &dpsidx,
276  Shape &test,
277  DShape &dtestdx)
278  const=0;
279 
283  Vector<double> &residuals, DenseMatrix<double> &jacobian,
284  unsigned flag);
285 
286 };
287 
291 
292 //======================================================================
295 //======================================================================
296  class PolarStreamfunctionElement : public virtual QElement<2,3>,
297  public virtual PolarStreamfunctionEquations
298 {
299 
300 private:
301 
304  static const unsigned Initial_Nvalue;
305 
306  public:
307 
308 
312  {}
313 
316  {
317  BrokenCopy::broken_copy("PolarStreamfunctionElement");
318  }
319 
322  inline unsigned required_nvalue(const unsigned &n) const
323  {return Initial_Nvalue;}
324 
327  void output(std::ostream &outfile)
329 
332  void output(std::ostream &outfile, const unsigned &n_plot)
333  {PolarStreamfunctionEquations::output(outfile,n_plot);}
334 
337  void output(FILE* file_pt)
339 
342  void output(FILE* file_pt, const unsigned &n_plot)
343  {PolarStreamfunctionEquations::output(file_pt,n_plot);}
344 
347  void output_fct(std::ostream &outfile, const unsigned &n_plot,
349  {PolarStreamfunctionEquations::output_fct(outfile,n_plot,exact_soln_pt);}
350 
354  void output_fct(std::ostream &outfile, const unsigned &n_plot,
355  const double& time,
357  {PolarStreamfunctionEquations::output_fct(outfile,n_plot,time,exact_soln_pt);}
358 
359 
360 protected:
361 
363  inline double dshape_and_dtest_eulerian_poisson(
364  const Vector<double> &s, Shape &psi, DShape &dpsidx,
365  Shape &test, DShape &dtestdx) const;
366 
367 
370  inline double dshape_and_dtest_eulerian_at_knot_poisson(const unsigned& ipt,
371  Shape &psi,
372  DShape &dpsidx,
373  Shape &test,
374  DShape &dtestdx)
375  const;
376 
377 };
378 
379 
380 
381 
382 //Inline functions:
383 
384 
385 //======================================================================
390 //======================================================================
392  const Vector<double> &s,
393  Shape &psi,
394  DShape &dpsidx,
395  Shape &test,
396  DShape &dtestdx) const
397 {
398  //Call the geometrical shape functions and derivatives
399  const double J = this->dshape_eulerian(s,psi,dpsidx);
400 
401  //Set the test functions equal to the shape functions
402  test = psi;
403  dtestdx= dpsidx;
404 
405  //Return the jacobian
406  return J;
407 }
408 
409 
410 
411 //======================================================================
416 //======================================================================
419  const unsigned &ipt,
420  Shape &psi,
421  DShape &dpsidx,
422  Shape &test,
423  DShape &dtestdx) const
424 {
425  //Call the geometrical shape functions and derivatives
426  const double J = this->dshape_eulerian_at_knot(ipt,psi,dpsidx);
427 
428  //Set the pointers of the test functions
429  test = psi;
430  dtestdx = dpsidx;
431 
432  //Return the jacobian
433  return J;
434 }
435 
439 
440 //=======================================================================
445 //=======================================================================
446 template<>
448 {
449 
450  public:
451 
454  FaceGeometry() : QElement<1,3>() {}
455 
456 };
457 
461 
462 
463 //======================================================================
466 //======================================================================
468 
469 
470 //======================================================================
477 //======================================================================
480  DenseMatrix<double> &jacobian,
481  unsigned flag)
482 {
483  //Find out how many nodes there are
484  const unsigned n_node = nnode();
485 
486  //Get Alpha
487  const double Alpha = alpha();
488 
489  //Set up memory for the shape and test functions
490  Shape psi(n_node), test(n_node);
491  DShape dpsidx(n_node,2), dtestdx(n_node,2);
492 
493  //Indicies at which the unknowns are stored
494  const unsigned s_nodal_index = u_index_streamfunction();
495 
496  //Find the indices at which the local velocities are stored
497  unsigned u_nodal_index[2];
498  for(unsigned i=0;i<2;i++) {u_nodal_index[i] = u_index_velocity(i);}
499 
500  //Set the value of n_intpt
501  const unsigned n_intpt = integral_pt()->nweight();
502 
503  //Integers to store the local equation and unknown numbers
504  int local_eqn=0, local_unknown=0;
505 
506  //Loop over the integration points
507  for(unsigned ipt=0;ipt<n_intpt;ipt++)
508  {
509  //Get the integral weight
510  double w = integral_pt()->weight(ipt);
511 
512  //Call the derivatives of the shape and test functions
513  double J = dshape_and_dtest_eulerian_at_knot_poisson(ipt,psi,dpsidx,
514  test,dtestdx);
515 
516  //Premultiply the weights and the Jacobian
517  double W = w*J;
518 
519  //Allocate and initialise to zero
521  double interpolated_s=0.0;
522  Vector<double> interpolated_dsdx(2,0.0);
523  Vector<double> interpolated_u(2);
525 
526  //Calculate function value and derivatives:
527  //-----------------------------------------
528  // Loop over nodes
529  for(unsigned l=0;l<n_node;l++)
530  {
531  //Get the nodal value of the poisson unknown
532  double s_value = raw_nodal_value(l,s_nodal_index);
533  interpolated_s += s_value*psi(l);
534  // Loop over directions1
535  for(unsigned i=0;i<2;i++)
536  {
537  interpolated_x[i] += raw_nodal_position(l,i)*psi(l);
538  interpolated_dsdx[i] += s_value*dpsidx(l,i);
539  double u_value = this->nodal_value(l,u_nodal_index[i]);
540  interpolated_u[i] += u_value*psi(l);
541  // Loop over directions2
542  for(unsigned j=0;j<2;j++)
543  {
544  interpolated_dudx(i,j) += u_value*dpsidx(l,j);
545  }
546  }
547  }
548 
549  // Assemble residuals and Jacobian
550  //--------------------------------
551 
552  // Loop over the test functions
553  for(unsigned l=0;l<n_node;l++)
554  {
555  //Get the local equation
556  local_eqn = nodal_local_eqn(l,s_nodal_index);
557  /*IF it's not a boundary condition*/
558  if(local_eqn >= 0)
559  {
560  // Laplacian of the streamfunction (integrated by parts)
561  residuals[local_eqn] += interpolated_dsdx[0]*dtestdx(l,0)*interpolated_x[0]*Alpha*W;
562  residuals[local_eqn] += (1./(interpolated_x[0]*Alpha))*interpolated_dsdx[1]
563  *(1./(interpolated_x[0]*Alpha))*dtestdx(l,1)
564  *interpolated_x[0]*Alpha*W;
565 
566  // Should equal the vorticity
567  residuals[local_eqn] -= (interpolated_dudx(1,0)+(interpolated_u[1]/interpolated_x[0]))*test(l)*interpolated_x[0]*Alpha*W;
568  residuals[local_eqn] += (1./(interpolated_x[0]*Alpha))*interpolated_dudx(0,1)*test(l)*interpolated_x[0]*Alpha*W;
569 
570  // Calculate the jacobian
571  //-----------------------
572  if(flag)
573  {
574  //Loop over the velocity shape functions again
575  for(unsigned l2=0;l2<n_node;l2++)
576  {
577  local_unknown = nodal_local_eqn(l2,s_nodal_index);
578  //If at a non-zero degree of freedom add in the entry
579  if(local_unknown >= 0)
580  {
581  //Add contribution to Elemental Matrix
582  jacobian(local_eqn,local_unknown)
583  += dpsidx(l2,0)*dtestdx(l,0)*interpolated_x[0]*Alpha*W;
584  jacobian(local_eqn,local_unknown)
585  += (1./(interpolated_x[0]*Alpha))*dpsidx(l2,1)*(1./(interpolated_x[0]*Alpha))*dtestdx(l,1)
586  *interpolated_x[0]*Alpha*W;
587  }
588 
589  } // End of loop over l2
590  } // End of if Jacobian flag statement
591  } // End of Residual if not boundary condition statement
592 
593  } // End of loop over test functions (l)
594 
595  } // End of loop over integration points
596 }
597 
598 //======================================================================
604 //======================================================================
605 void PolarStreamfunctionEquations::output(std::ostream &outfile,
606  const unsigned &nplot)
607 {
608 
609  //Vector of local coordinates
610  Vector<double> s(2);
611 
612  // Tecplot header info
613  outfile << tecplot_zone_string(nplot);
614 
615  // Loop over plot points
616  unsigned num_plot_points=nplot_points(nplot);
617  for (unsigned iplot=0;iplot<num_plot_points;iplot++)
618  {
619 
620  // Get local coordinates of plot point
621  get_s_plot(iplot,nplot,s);
622 
623  for(unsigned i=0;i<2;i++)
624  {
625  outfile << interpolated_x(s,i) << " ";
626  }
627  outfile << interpolated_streamfunction(s) << " "
628  << interpolated_vorticity(s) << " "
629  << interpolated_velocity(s,0) << " "
630  << interpolated_velocity(s,1) << std::endl;
631 
632  }
633 
634  // Write tecplot footer (e.g. FE connectivity lists)
635  write_tecplot_zone_footer(outfile,nplot);
636 
637 }
638 
639 //======================================================================
645 //======================================================================
647  const unsigned &nplot)
648 {
649  //Vector of local coordinates
650  Vector<double> s(2);
651 
652  // Tecplot header info
653  fprintf(file_pt,"%s",tecplot_zone_string(nplot).c_str());
654 
655  // Loop over plot points
656  unsigned num_plot_points=nplot_points(nplot);
657  for (unsigned iplot=0;iplot<num_plot_points;iplot++)
658  {
659  // Get local coordinates of plot point
660  get_s_plot(iplot,nplot,s);
661 
662  for(unsigned i=0;i<2;i++)
663  {
664  fprintf(file_pt,"%g ",interpolated_x(s,i));
665  }
666  fprintf(file_pt,"%g ",interpolated_streamfunction(s));
667  fprintf(file_pt,"%g \n",interpolated_vorticity(s));
668  }
669 
670  // Write tecplot footer (e.g. FE connectivity lists)
671  write_tecplot_zone_footer(file_pt,nplot);
672 }
673 
674 }
675 
676 #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
RowVector3d w
Definition: Matrix_resize_int.cpp:3
Definition: shape.h:278
FaceGeometry()
Definition: streamfunction_elements.h:454
Definition: elements.h:4998
Definition: elements.h:1313
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
double nodal_value(const unsigned &n, const unsigned &i) const
Definition: elements.h:2593
virtual std::string tecplot_zone_string(const unsigned &nplot) const
Definition: elements.h:3161
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
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
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
virtual void get_s_plot(const unsigned &i, const unsigned &nplot, Vector< double > &s, const bool &shifted_to_interior=false) const
Definition: elements.h:3148
virtual unsigned nplot_points(const unsigned &nplot) const
Definition: elements.h:3186
double nodal_position(const unsigned &n, const unsigned &i) const
Definition: elements.h:2317
virtual double dshape_eulerian_at_knot(const unsigned &ipt, Shape &psi, DShape &dpsidx) const
Definition: elements.cc:3325
double raw_nodal_value(const unsigned &n, const unsigned &i) const
Definition: elements.h:2576
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
double dshape_eulerian(const Vector< double > &s, Shape &psi, DShape &dpsidx) const
Definition: elements.cc:3298
double raw_nodal_position(const unsigned &n, const unsigned &i) const
Definition: elements.cc:1686
static DenseMatrix< double > Dummy_matrix
Definition: elements.h:227
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: streamfunction_elements.h:298
PolarStreamfunctionElement(const PolarStreamfunctionElement &dummy)
Broken copy constructor.
Definition: streamfunction_elements.h:315
void output(FILE *file_pt)
Definition: streamfunction_elements.h:337
static const unsigned Initial_Nvalue
Definition: streamfunction_elements.h:304
void output(std::ostream &outfile)
Definition: streamfunction_elements.h:327
void output_fct(std::ostream &outfile, const unsigned &n_plot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt)
Definition: streamfunction_elements.h:354
double dshape_and_dtest_eulerian_poisson(const Vector< double > &s, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const
Shape, test functions & derivs. w.r.t. to global coords. Return Jacobian.
Definition: streamfunction_elements.h:391
PolarStreamfunctionElement()
Definition: streamfunction_elements.h:311
unsigned required_nvalue(const unsigned &n) const
Definition: streamfunction_elements.h:322
void output(FILE *file_pt, const unsigned &n_plot)
Definition: streamfunction_elements.h:342
void output_fct(std::ostream &outfile, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Definition: streamfunction_elements.h:347
double dshape_and_dtest_eulerian_at_knot_poisson(const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const
Definition: streamfunction_elements.h:418
void output(std::ostream &outfile, const unsigned &n_plot)
Definition: streamfunction_elements.h:332
A class for solving my poisson like streamfunction problem.
Definition: streamfunction_elements.h:37
void output(FILE *file_pt)
C_style output with default number of plot points.
Definition: streamfunction_elements.h:79
virtual double dshape_and_dtest_eulerian_poisson(const Vector< double > &s, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const =0
PolarStreamfunctionEquations(const PolarStreamfunctionEquations &dummy)
Broken copy constructor.
Definition: streamfunction_elements.h:55
void output(std::ostream &outfile)
Output with default number of plot points.
Definition: streamfunction_elements.h:68
double interpolated_streamfunction(const Vector< double > &s) const
Definition: streamfunction_elements.h:145
double interpolated_vorticity(const Vector< double > &s) const
Definition: streamfunction_elements.h:229
double interpolated_velocity(const Vector< double > &s, const unsigned &i) const
Return FE interpolated velocity u[i] at local coordinate s.
Definition: streamfunction_elements.h:172
virtual void fill_in_generic_residual_contribution(Vector< double > &residuals, DenseMatrix< double > &jacobian, unsigned flag)
Definition: streamfunction_elements.h:479
const double & alpha() const
Alpha.
Definition: streamfunction_elements.h:46
PolarStreamfunctionEquations()
Constructor (must initialise the Source_fct_pt to null)
Definition: streamfunction_elements.h:52
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: streamfunction_elements.h:135
double interpolated_dudx(const Vector< double > &s, const unsigned &i, const unsigned &j) const
Definition: streamfunction_elements.h:198
virtual unsigned u_index_streamfunction() const
Return the indicies at which the unknown values are stored.
Definition: streamfunction_elements.h:62
double * Alpha_pt
Pointer to the angle alpha.
Definition: streamfunction_elements.h:41
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Add the element's contribution to its residual vector (wrapper)
Definition: streamfunction_elements.h:124
virtual double dshape_and_dtest_eulerian_at_knot_poisson(const unsigned &ipt, Shape &psi, DShape &dpsidx, Shape &test, DShape &dtestdx) const =0
void get_flux(const Vector< double > &s, Vector< double > &flux) const
Definition: streamfunction_elements.h:91
virtual unsigned u_index_velocity(const unsigned &i) const
Return the indicies at which the (known) velocities are stored.
Definition: streamfunction_elements.h:65
double *& alpha_pt()
Pointer to Alpha.
Definition: streamfunction_elements.h:49
Definition: Qelements.h:459
Definition: shape.h:76
RealScalar s
Definition: level1_cplx_impl.h:130
squared absolute sa ArrayBase::abs2 DOXCOMMA MatrixBase::cwiseAbs2 sa Eigen::abs2 DOXCOMMA Eigen::pow DOXCOMMA ArrayBase::square nearest sa Eigen::floor DOXCOMMA Eigen::ceil DOXCOMMA ArrayBase::round nearest integer not less than the given sa Eigen::floor DOXCOMMA ArrayBase::ceil not a number test
Definition: GlobalFunctions.h:109
void flux(const double &time, const Vector< double > &x, double &flux)
Get flux applied along boundary x=0.
Definition: pretend_melt.cc:59
double Alpha
Parameter for steepness of step.
Definition: two_d_adv_diff_adapt.cc:53
r
Definition: UniformPSDSelfTest.py:20
void broken_copy(const std::string &class_name)
Issue error message and terminate execution.
Definition: oomph_utilities.cc:212
@ W
Definition: quadtree.h:63
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
Definition: indexed_view.cpp:20
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2