axisym_linear_elasticity_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 
27 // Include guards to prevent multiple inclusion of the header
28 #ifndef OOMPH_AXISYMMETRIC_LINEAR_ELASTICITY_ELEMENTS_HEADER
29 #define OOMPH_AXISYMMETRIC_LINEAR_ELASTICITY_ELEMENTS_HEADER
30 
31 // Config header generated by autoconfig
32 #ifdef HAVE_CONFIG_H
33 #include <oomph-lib-config.h>
34 #endif
35 
36 
37 #ifdef OOMPH_HAS_MPI
38 #include "mpi.h"
39 #endif
40 
41 // OOMPH-LIB headers
42 #include "src/generic/Qelements.h"
43 #include "src/generic/Telements.h"
44 #include "src/generic/projection.h"
45 
46 
47 namespace oomph
48 {
49  //=======================================================================
52  //=======================================================================
54  {
55  public:
60  virtual inline unsigned u_index_axisymmetric_linear_elasticity(
61  const unsigned& i) const
62  {
63  return i;
64  }
65 
67  double d2u_dt2_axisymmetric_linear_elasticity(const unsigned& n,
68  const unsigned& i) const
69  {
70  // Get the timestepper
72 
73  // Storage for the derivative - initialise to 0
74  double d2u_dt2 = 0.0;
75 
76  // If we are doing an unsteady solve then calculate the derivative
77  if (!time_stepper_pt->is_steady())
78  {
79  // Get the nodal index
80  const unsigned u_nodal_index =
82 
83  // Get the number of values required to represent history
84  const unsigned n_time = time_stepper_pt->ntstorage();
85 
86  // Loop over history values
87  for (unsigned t = 0; t < n_time; t++)
88  {
89  // Add the contribution to the derivative
90  d2u_dt2 +=
91  time_stepper_pt->weight(2, t) * nodal_value(t, n, u_nodal_index);
92  }
93  }
94 
95  return d2u_dt2;
96  }
97 
98 
100  double du_dt_axisymmetric_linear_elasticity(const unsigned& n,
101  const unsigned& i) const
102  {
103  // Get the timestepper
105 
106  // Storage for the derivative - initialise to 0
107  double du_dt = 0.0;
108 
109  // If we are doing an unsteady solve then calculate the derivative
110  if (!time_stepper_pt->is_steady())
111  {
112  // Get the nodal index
113  const unsigned u_nodal_index =
115 
116  // Get the number of values required to represent history
117  const unsigned n_time = time_stepper_pt->ntstorage();
118 
119  // Loop over history values
120  for (unsigned t = 0; t < n_time; t++)
121  {
122  // Add the contribution to the derivative
123  du_dt +=
124  time_stepper_pt->weight(1, t) * nodal_value(t, n, u_nodal_index);
125  }
126  }
127  return du_dt;
128  }
129 
132  const Vector<double>& s, Vector<double>& disp) const
133  {
134  // Find number of nodes
135  unsigned n_node = nnode();
136 
137  // Local shape function
138  Shape psi(n_node);
139 
140  // Find values of shape function
141  shape(s, psi);
142 
143  for (unsigned i = 0; i < 3; i++)
144  {
145  // Index at which the nodal value is stored
146  unsigned u_nodal_index = u_index_axisymmetric_linear_elasticity(i);
147 
148  // Initialise value of u
149  disp[i] = 0.0;
150 
151  // Loop over the local nodes and sum
152  for (unsigned l = 0; l < n_node; l++)
153  {
154  const double u_value = nodal_value(l, u_nodal_index);
155 
156  disp[i] += u_value * psi[l];
157  }
158  }
159  }
160 
164  const Vector<double>& s, const unsigned& i) const
165  {
166  // Find number of nodes
167  unsigned n_node = nnode();
168 
169  // Local shape function
170  Shape psi(n_node);
171 
172  // Find values of shape function
173  shape(s, psi);
174 
175  // Get nodal index at which i-th velocity is stored
176  unsigned u_nodal_index = u_index_axisymmetric_linear_elasticity(i);
177 
178  // Initialise value of u
179  double interpolated_u = 0.0;
180 
181  // Loop over the local nodes and sum
182  for (unsigned l = 0; l < n_node; l++)
183  {
184  const double u_value = nodal_value(l, u_nodal_index);
185 
186  interpolated_u += u_value * psi[l];
187  }
188 
189  return (interpolated_u);
190  }
191 
192 
195  const Vector<double>& s, Vector<double>& du_dt) const
196  {
197  // Find number of nodes
198  unsigned n_node = nnode();
199 
200  // Local shape function
201  Shape psi(n_node);
202 
203  // Find values of shape function
204  shape(s, psi);
205 
206  // Loop over directions
207  for (unsigned i = 0; i < 3; i++)
208  {
209  // Initialise value of u
210  du_dt[i] = 0.0;
211 
212  // Loop over the local nodes and sum
213  for (unsigned l = 0; l < n_node; l++)
214  {
215  du_dt[i] += du_dt_axisymmetric_linear_elasticity(l, i) * psi[l];
216  }
217  }
218  }
219 
222  const Vector<double>& s, Vector<double>& d2u_dt2) const
223  {
224  // Find number of nodes
225  unsigned n_node = nnode();
226 
227  // Local shape function
228  Shape psi(n_node);
229 
230  // Find values of shape function
231  shape(s, psi);
232 
233  // Loop over directions
234  for (unsigned i = 0; i < 3; i++)
235  {
236  // Initialise value of u
237  d2u_dt2[i] = 0.0;
238 
239  // Loop over the local nodes and sum
240  for (unsigned l = 0; l < n_node; l++)
241  {
242  d2u_dt2[i] += d2u_dt2_axisymmetric_linear_elasticity(l, i) * psi[l];
243  }
244  }
245  }
246 
250  typedef void (*BodyForceFctPt)(const double& time,
251  const Vector<double>& x,
252  Vector<double>& b);
253 
259  Nu_pt(0),
262  {
263  }
264 
266  double*& youngs_modulus_pt()
267  {
268  return Youngs_modulus_pt;
269  }
270 
272  inline double youngs_modulus() const
273  {
274  return (*Youngs_modulus_pt);
275  }
276 
278  double& nu() const
279  {
280 #ifdef PARANOID
281  if (Nu_pt == 0)
282  {
283  std::ostringstream error_message;
284  error_message << "No pointer to Poisson's ratio set. Please set one!\n";
285  throw OomphLibError(error_message.str(),
288  }
289 #endif
290  return *Nu_pt;
291  }
292 
294  double*& nu_pt()
295  {
296  return Nu_pt;
297  }
298 
300  double*& lambda_sq_pt()
301  {
302  return Lambda_sq_pt;
303  }
304 
306  const double& lambda_sq() const
307  {
308  return *Lambda_sq_pt;
309  }
310 
313  {
314  return Body_force_fct_pt;
315  }
316 
319  {
320  return Body_force_fct_pt;
321  }
322 
325  inline void body_force(const double& time,
326  const Vector<double>& x,
327  Vector<double>& b) const
328  {
329  // If no function has been set, return zero vector
330  if (Body_force_fct_pt == 0)
331  {
332  // Get spatial dimension of element
333  unsigned n = dim();
334  for (unsigned i = 0; i < n; i++)
335  {
336  b[i] = 0.0;
337  }
338  }
339  else
340  {
341  (*Body_force_fct_pt)(time, x, b);
342  }
343  }
344 
348  unsigned ndof_types() const
349  {
350  return 1;
351  }
352 
360  std::list<std::pair<unsigned long, unsigned>>& dof_lookup_list) const
361  {
362  // temporary pair (used to store DOF lookup prior to being added
363  // to list)
364  std::pair<unsigned long, unsigned> dof_lookup;
365 
366  // number of nodes
367  const unsigned n_node = this->nnode();
368 
369  // Integer storage for local unknown
370  int local_unknown = 0;
371 
372  // Loop over the nodes
373  for (unsigned n = 0; n < n_node; n++)
374  {
375  // Loop over dimension
376  for (unsigned i = 0; i < 3; i++)
377  {
378  // If the variable is free
379  local_unknown = nodal_local_eqn(n, i);
380 
381  // ignore pinned values
382  if (local_unknown >= 0)
383  {
384  // store DOF type lookup in temporary pair: First entry in pair
385  // is global equation number; second entry is DOF type
386  dof_lookup.first = this->eqn_number(local_unknown);
387  dof_lookup.second = 0;
388 
389  // add to list
390  dof_lookup_list.push_front(dof_lookup);
391  }
392  }
393  }
394  }
395 
396 
397  protected:
400 
402  double* Nu_pt;
403 
405  double* Lambda_sq_pt;
406 
409 
417 
419  static double Default_lambda_sq_value;
420  };
421 
422 
426 
427 
428  //=======================================================================
431  //=======================================================================
434  {
435  public:
438 
440  unsigned required_nvalue(const unsigned& n) const
441  {
442  return 3;
443  }
444 
448  {
450  residuals, GeneralisedElement::Dummy_matrix, 0);
451  }
452 
453 
458  DenseMatrix<double>& jacobian)
459  {
460  // Add the contribution to the residuals
461  this
462  ->fill_in_generic_contribution_to_residuals_axisymmetric_linear_elasticity(
463  residuals, jacobian, 1);
464  }
465 
466 
468  void get_strain(const Vector<double>& s, DenseMatrix<double>& strain);
469 
471  void output_fct(std::ostream& outfile,
472  const unsigned& nplot,
474 
477  void output_fct(std::ostream& outfile,
478  const unsigned& nplot,
479  const double& time,
481 
483  void output(std::ostream& outfile)
484  {
485  unsigned n_plot = 5;
486  output(outfile, n_plot);
487  }
488 
490  void output(std::ostream& outfile, const unsigned& n_plot);
491 
493  void output(FILE* file_pt)
494  {
495  unsigned n_plot = 5;
496  output(file_pt, n_plot);
497  }
498 
500  void output(FILE* file_pt, const unsigned& n_plot);
501 
506  void compute_error(std::ostream& outfile,
508  double& error,
509  double& norm);
510 
513  void compute_error(std::ostream& outfile,
515  const double& time,
516  double& error,
517  double& norm);
518 
519 
520  protected:
524  Vector<double>& residuals, DenseMatrix<double>& jacobian, unsigned flag);
525  };
526 
527 
531 
532 
533  //===========================================================================
536  //============================================================================
537  template<unsigned NNODE_1D>
539  : public virtual QElement<2, NNODE_1D>,
541  {
542  public:
546  {
547  }
548 
550  void output(std::ostream& outfile)
551  {
553  }
554 
556  void output(std::ostream& outfile, const unsigned& n_plot)
557  {
559  }
560 
561 
563  void output(FILE* file_pt)
564  {
566  }
567 
569  void output(FILE* file_pt, const unsigned& n_plot)
570  {
572  }
573  };
574 
575 
576  //============================================================================
579  //============================================================================
580  template<unsigned NNODE_1D>
582  : public virtual QElement<1, NNODE_1D>
583  {
584  public:
586  FaceGeometry() : QElement<1, NNODE_1D>() {}
587  };
588 
589 
590  /* //////////////////////////////////////////////////////////////////////// */
591  /* //////////////////////////////////////////////////////////////////////// */
592  /* //////////////////////////////////////////////////////////////////////// */
593 
594 
595  /* //===========================================================================
596  */
597  /* /// An Element that solves the equations of axisymmetric (in cylindrical */
598  /* /// polars) linear elasticity, using TElements for the geometry. */
599  /* //============================================================================
600  */
601  /* template<unsigned NNODE_1D> */
602  /* class TAxisymmetricLinearElasticityElement : */
603  /* public virtual TElement<2,NNODE_1D>, */
604  /* public virtual AxisymmetricLinearElasticityEquations */
605  /* { */
606  /* public: */
607 
608  /* /// Constructor */
609  /* TAxisymmetricLinearElasticityElement() : */
610  /* TElement<2,NNODE_1D>(), */
611  /* AxisymmetricLinearElasticityEquations() { } */
612 
613  /* /// Output function */
614  /* void output(std::ostream &outfile) */
615  /* {AxisymmetricLinearElasticityEquations::output(outfile);} */
616 
617  /* /// Output function */
618  /* void output(std::ostream &outfile, const unsigned &n_plot) */
619  /* {AxisymmetricLinearElasticityEquations:: */
620  /* output(outfile,n_plot);} */
621 
622  /* /// C-style output function */
623  /* void output(FILE* file_pt) */
624  /* {AxisymmetricLinearElasticityEquations::output(file_pt);} */
625 
626  /* /// C-style output function */
627  /* void output(FILE* file_pt, const unsigned &n_plot) */
628  /* {AxisymmetricLinearElasticityEquations:: */
629  /* output(file_pt,n_plot);} */
630 
631  /* }; */
632 
633 
634  /* //============================================================================
635  */
636  /* /// FaceGeometry of a linear */
637  /* /// TAxisymmetricLinearElasticityElement element */
638  /* //============================================================================
639  */
640  /* template<unsigned NNODE_1D> */
641  /* class FaceGeometry<TAxisymmetricLinearElasticityElement<NNODE_1D> > : */
642  /* public virtual TElement<1,NNODE_1D> */
643  /* { */
644  /* public: */
645  /* /// Constructor must call the constructor of the underlying element */
646  /* FaceGeometry() : TElement<1,NNODE_1D>() {} */
647  /* }; */
648 
649 
653 
654 
655  //==========================================================
657  //==========================================================
658  template<class AXISYM_LINEAR_ELAST_ELEMENT>
660  : public virtual ProjectableElement<AXISYM_LINEAR_ELAST_ELEMENT>
661  {
662  public:
666 
667 
674  {
675  // Create the vector
677 
678  // Loop over all nodes and extract the fld-th nodal value
679  unsigned nnod = this->nnode();
680  for (unsigned j = 0; j < nnod; j++)
681  {
682  // Add the data value associated with the displacement components
683  data_values.push_back(std::make_pair(this->node_pt(j), fld));
684  }
685 
686  // Return the vector
687  return data_values;
688  }
689 
693  {
694  return 3;
695  }
696 
699  unsigned nhistory_values_for_projection(const unsigned& fld)
700  {
701 #ifdef PARANOID
702  if (fld > 2)
703  {
704  std::stringstream error_stream;
705  error_stream << "Elements only store two fields so fld can't be"
706  << " " << fld << std::endl;
707  throw OomphLibError(
708  error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
709  }
710 #endif
711  return this->node_pt(0)->ntstorage();
712  }
713 
717  {
718  return this->node_pt(0)->position_time_stepper_pt()->ntstorage();
719  }
720 
723  double jacobian_and_shape_of_field(const unsigned& fld,
724  const Vector<double>& s,
725  Shape& psi)
726  {
727  unsigned n_dim = this->dim();
728  unsigned n_node = this->nnode();
729  DShape dpsidx(n_node, n_dim);
730 
731  // Call the derivatives of the shape functions and return
732  // the Jacobian
733  return this->dshape_eulerian(s, psi, dpsidx);
734  }
735 
736 
739  double get_field(const unsigned& t,
740  const unsigned& fld,
741  const Vector<double>& s)
742  {
743  unsigned n_node = this->nnode();
744 
745  // Local shape function
746  Shape psi(n_node);
747 
748  // Find values of shape function
749  this->shape(s, psi);
750 
751  // Initialise value of u
752  double interpolated_u = 0.0;
753 
754  // Sum over the local nodes at that time
755  for (unsigned l = 0; l < n_node; l++)
756  {
757  interpolated_u += this->nodal_value(t, l, fld) * psi[l];
758  }
759  return interpolated_u;
760  }
761 
762 
764  unsigned nvalue_of_field(const unsigned& fld)
765  {
766  return this->nnode();
767  }
768 
769 
771  int local_equation(const unsigned& fld, const unsigned& j)
772  {
773  return this->nodal_local_eqn(j, fld);
774  }
775  };
776 
777 
778  //=======================================================================
781  //=======================================================================
782  template<class ELEMENT>
784  : public virtual FaceGeometry<ELEMENT>
785  {
786  public:
787  FaceGeometry() : FaceGeometry<ELEMENT>() {}
788  };
789 
790 
791  //=======================================================================
794  //=======================================================================
795  template<class ELEMENT>
798  : public virtual FaceGeometry<FaceGeometry<ELEMENT>>
799  {
800  public:
802  };
803 
804 
805 } // namespace oomph
806 
807 
808 #endif
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Scalar * b
Definition: benchVecAdd.cpp:17
Definition: axisym_linear_elasticity_elements.h:54
double * Youngs_modulus_pt
Pointer to the Young's modulus.
Definition: axisym_linear_elasticity_elements.h:399
double d2u_dt2_axisymmetric_linear_elasticity(const unsigned &n, const unsigned &i) const
d^2u/dt^2 at local node n
Definition: axisym_linear_elasticity_elements.h:67
unsigned ndof_types() const
Definition: axisym_linear_elasticity_elements.h:348
void interpolated_d2u_dt2_axisymmetric_linear_elasticity(const Vector< double > &s, Vector< double > &d2u_dt2) const
Compute vector of FE interpolated accel d2u/dt2 at local coordinate s.
Definition: axisym_linear_elasticity_elements.h:221
double & nu() const
Access function for Poisson's ratio.
Definition: axisym_linear_elasticity_elements.h:278
const double & lambda_sq() const
Access function for timescale ratio (nondim density)
Definition: axisym_linear_elasticity_elements.h:306
virtual unsigned u_index_axisymmetric_linear_elasticity(const unsigned &i) const
Definition: axisym_linear_elasticity_elements.h:60
double * Nu_pt
Pointer to Poisson's ratio.
Definition: axisym_linear_elasticity_elements.h:402
double *& nu_pt()
Access function for pointer to Poisson's ratio.
Definition: axisym_linear_elasticity_elements.h:294
double youngs_modulus() const
Access function to Young's modulus.
Definition: axisym_linear_elasticity_elements.h:272
static double Default_lambda_sq_value
Static default value for timescale ratio (1.0 for natural scaling)
Definition: axisym_linear_elasticity_elements.h:419
void interpolated_du_dt_axisymmetric_linear_elasticity(const Vector< double > &s, Vector< double > &du_dt) const
Compute vector of FE interpolated velocity du/dt at local coordinate s.
Definition: axisym_linear_elasticity_elements.h:194
double du_dt_axisymmetric_linear_elasticity(const unsigned &n, const unsigned &i) const
du/dt at local node n
Definition: axisym_linear_elasticity_elements.h:100
AxisymmetricLinearElasticityEquationsBase()
Definition: axisym_linear_elasticity_elements.h:257
double *& youngs_modulus_pt()
Return the pointer to Young's modulus.
Definition: axisym_linear_elasticity_elements.h:266
double *& lambda_sq_pt()
Access function for pointer to timescale ratio (nondim density)
Definition: axisym_linear_elasticity_elements.h:300
static double Default_youngs_modulus_value
Definition: axisym_linear_elasticity_elements.h:416
void body_force(const double &time, const Vector< double > &x, Vector< double > &b) const
Definition: axisym_linear_elasticity_elements.h:325
BodyForceFctPt body_force_fct_pt() const
Access function: Pointer to body force function (const version)
Definition: axisym_linear_elasticity_elements.h:318
BodyForceFctPt Body_force_fct_pt
Pointer to body force function.
Definition: axisym_linear_elasticity_elements.h:408
BodyForceFctPt & body_force_fct_pt()
Access function: Pointer to body force function.
Definition: axisym_linear_elasticity_elements.h:312
void get_dof_numbers_for_unknowns(std::list< std::pair< unsigned long, unsigned >> &dof_lookup_list) const
Definition: axisym_linear_elasticity_elements.h:359
double * Lambda_sq_pt
Timescale ratio (non-dim. density)
Definition: axisym_linear_elasticity_elements.h:405
double interpolated_u_axisymmetric_linear_elasticity(const Vector< double > &s, const unsigned &i) const
Definition: axisym_linear_elasticity_elements.h:163
void(* BodyForceFctPt)(const double &time, const Vector< double > &x, Vector< double > &b)
Definition: axisym_linear_elasticity_elements.h:250
void interpolated_u_axisymmetric_linear_elasticity(const Vector< double > &s, Vector< double > &disp) const
Compute vector of FE interpolated displacement u at local coordinate s.
Definition: axisym_linear_elasticity_elements.h:131
Definition: axisym_linear_elasticity_elements.h:434
void get_strain(const Vector< double > &s, DenseMatrix< double > &strain)
Get strain (3x3 entries; r, z, phi)
Definition: axisym_linear_elasticity_elements.cc:55
virtual void fill_in_generic_contribution_to_residuals_axisymmetric_linear_elasticity(Vector< double > &residuals, DenseMatrix< double > &jacobian, unsigned flag)
Definition: axisym_linear_elasticity_elements.cc:163
void output(std::ostream &outfile)
Output: r,z, u_r, u_z, u_theta.
Definition: axisym_linear_elasticity_elements.h:483
AxisymmetricLinearElasticityEquations()
Constructor.
Definition: axisym_linear_elasticity_elements.h:437
void output(FILE *file_pt)
C-style output: r,z, u_r, u_z, u_theta.
Definition: axisym_linear_elasticity_elements.h:493
unsigned required_nvalue(const unsigned &n) const
Number of values required at node n.
Definition: axisym_linear_elasticity_elements.h:440
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: axisym_linear_elasticity_elements.h:457
void compute_error(std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
Definition: axisym_linear_elasticity_elements.cc:662
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Definition: axisym_linear_elasticity_elements.h:447
void output_fct(std::ostream &outfile, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output exact solution: r,z, u_r, u_z, u_theta.
Definition: axisym_linear_elasticity_elements.cc:456
Definition: shape.h:278
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
Definition: nodes.h:238
unsigned ntstorage() const
Definition: nodes.cc:879
FaceGeometry()
Definition: axisym_linear_elasticity_elements.h:787
FaceGeometry()
Constructor must call the constructor of the underlying element.
Definition: axisym_linear_elasticity_elements.h:586
Definition: elements.h:4998
Definition: elements.h:1313
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 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 dim() const
Definition: elements.h:2611
unsigned nnode() const
Return the number of nodes.
Definition: elements.h:2210
void(* SteadyExactSolutionFctPt)(const Vector< double > &, Vector< double > &)
Definition: elements.h:1759
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
unsigned long eqn_number(const unsigned &ieqn_local) const
Definition: elements.h:704
static DenseMatrix< double > Dummy_matrix
Definition: elements.h:227
TimeStepper *& time_stepper_pt()
Definition: geom_objects.h:192
TimeStepper *& position_time_stepper_pt()
Return a pointer to the position timestepper.
Definition: nodes.h:1022
Definition: oomph_definitions.h:222
Axisym linear elasticity upgraded to become projectable.
Definition: axisym_linear_elasticity_elements.h:661
unsigned nvalue_of_field(const unsigned &fld)
Return number of values in field fld.
Definition: axisym_linear_elasticity_elements.h:764
double get_field(const unsigned &t, const unsigned &fld, const Vector< double > &s)
Definition: axisym_linear_elasticity_elements.h:739
int local_equation(const unsigned &fld, const unsigned &j)
Return local equation number of value j in field fld.
Definition: axisym_linear_elasticity_elements.h:771
unsigned nhistory_values_for_coordinate_projection()
Definition: axisym_linear_elasticity_elements.h:716
Vector< std::pair< Data *, unsigned > > data_values_of_field(const unsigned &fld)
Definition: axisym_linear_elasticity_elements.h:673
ProjectableAxisymLinearElasticityElement()
Definition: axisym_linear_elasticity_elements.h:665
double jacobian_and_shape_of_field(const unsigned &fld, const Vector< double > &s, Shape &psi)
Definition: axisym_linear_elasticity_elements.h:723
unsigned nhistory_values_for_projection(const unsigned &fld)
Definition: axisym_linear_elasticity_elements.h:699
unsigned nfields_for_projection()
Definition: axisym_linear_elasticity_elements.h:692
Definition: projection.h:183
Definition: axisym_linear_elasticity_elements.h:541
void output(std::ostream &outfile, const unsigned &n_plot)
Output function.
Definition: axisym_linear_elasticity_elements.h:556
void output(FILE *file_pt, const unsigned &n_plot)
C-style output function.
Definition: axisym_linear_elasticity_elements.h:569
QAxisymmetricLinearElasticityElement()
Constructor.
Definition: axisym_linear_elasticity_elements.h:544
void output(FILE *file_pt)
C-style output function.
Definition: axisym_linear_elasticity_elements.h:563
void output(std::ostream &outfile)
Output function.
Definition: axisym_linear_elasticity_elements.h:550
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
RealScalar s
Definition: level1_cplx_impl.h:130
int error
Definition: calibrate.py:297
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