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 // Header file for general linear elasticity elements
27 
28 // Include guards to prevent multiple inclusion of the header
29 #ifndef OOMPH_LINEAR_ELASTICITY_ELEMENTS_HEADER
30 #define OOMPH_LINEAR_ELASTICITY_ELEMENTS_HEADER
31 
32 // Config header generated by autoconfig
33 #ifdef HAVE_CONFIG_H
34 #include <oomph-lib-config.h>
35 #endif
36 
37 
38 // OOMPH-LIB headers
39 #include "../generic/Qelements.h"
40 #include "../generic/mesh.h"
41 #include "../generic/hermite_elements.h"
42 #include "./elasticity_tensor.h"
43 #include "../generic/projection.h"
44 
45 namespace oomph
46 {
47  //=======================================================================
54  //=======================================================================
55  template<unsigned DIM>
57  {
58  public:
62  virtual inline unsigned u_index_linear_elasticity(const unsigned i) const
63  {
64  return i;
65  }
66 
68  double d2u_dt2_linear_elasticity(const unsigned& n, 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 = u_index_linear_elasticity(i);
81 
82  // Get the number of values required to represent history
83  const unsigned n_time = time_stepper_pt->ntstorage();
84 
85  // Loop over history values
86  for (unsigned t = 0; t < n_time; t++)
87  {
88  // Add the contribution to the derivative
89  d2u_dt2 +=
90  time_stepper_pt->weight(2, t) * nodal_value(t, n, u_nodal_index);
91  }
92  }
93 
94  return d2u_dt2;
95  }
96 
99  Vector<double>& disp) const
100  {
101  // Find number of nodes
102  unsigned n_node = nnode();
103 
104  // Local shape function
105  Shape psi(n_node);
106 
107  // Find values of shape function
108  shape(s, psi);
109 
110  for (unsigned i = 0; i < DIM; i++)
111  {
112  // Index at which the nodal value is stored
113  unsigned u_nodal_index = u_index_linear_elasticity(i);
114 
115  // Initialise value of u
116  disp[i] = 0.0;
117 
118  // Loop over the local nodes and sum
119  for (unsigned l = 0; l < n_node; l++)
120  {
121  disp[i] += nodal_value(l, u_nodal_index) * psi[l];
122  }
123  }
124  }
125 
128  const unsigned& i) const
129  {
130  // Find number of nodes
131  unsigned n_node = nnode();
132 
133  // Local shape function
134  Shape psi(n_node);
135 
136  // Find values of shape function
137  shape(s, psi);
138 
139  // Get nodal index at which i-th velocity is stored
140  unsigned u_nodal_index = u_index_linear_elasticity(i);
141 
142  // Initialise value of u
143  double interpolated_u = 0.0;
144 
145  // Loop over the local nodes and sum
146  for (unsigned l = 0; l < n_node; l++)
147  {
148  interpolated_u += nodal_value(l, u_nodal_index) * psi[l];
149  }
150 
151  return (interpolated_u);
152  }
153 
154 
158  typedef void (*BodyForceFctPt)(const double& t,
159  const Vector<double>& x,
160  Vector<double>& b);
161 
168  Unsteady(true),
170  {
171  }
172 
175  {
176  return Elasticity_tensor_pt;
177  }
178 
180  inline double E(const unsigned& i,
181  const unsigned& j,
182  const unsigned& k,
183  const unsigned& l) const
184  {
185  return (*Elasticity_tensor_pt)(i, j, k, l);
186  }
187 
189  const double& lambda_sq() const
190  {
191  return *Lambda_sq_pt;
192  }
193 
195  double*& lambda_sq_pt()
196  {
197  return Lambda_sq_pt;
198  }
199 
202  {
203  return Body_force_fct_pt;
204  }
205 
208  {
209  return Body_force_fct_pt;
210  }
211 
212 
215  {
216  Unsteady = true;
217  }
218 
221  {
222  Unsteady = false;
223  }
224 
226  bool is_inertia_enabled() const
227  {
228  return Unsteady;
229  }
230 
233 
246  const Vector<GeneralisedElement*>& element_pt)
247  {
248  // Loop over all elements and call the function that pins their
249  // unused nodal solid pressure data
250  unsigned n_element = element_pt.size();
251  for (unsigned e = 0; e < n_element; e++)
252  {
253  dynamic_cast<LinearElasticityEquationsBase<DIM>*>(element_pt[e])
255  }
256  }
257 
262  virtual void get_stress(const Vector<double>& s,
263  DenseMatrix<double>& sigma) const = 0;
264 
266  void get_strain(const Vector<double>& s, DenseMatrix<double>& strain) const;
267 
270  inline void body_force(const Vector<double>& x, Vector<double>& b) const
271  {
272  // If no function has been set, return zero vector
273  if (Body_force_fct_pt == 0)
274  {
275  // Get spatial dimension of element
276  unsigned n = dim();
277  for (unsigned i = 0; i < n; i++)
278  {
279  b[i] = 0.0;
280  }
281  }
282  else
283  {
284  // Get time from timestepper of first node (note that this must
285  // work -- body force only makes sense for elements that can be
286  // deformed and given that the deformation of solid finite elements
287  // is controlled by their nodes, nodes must exist!)
288  double time = node_pt(0)->time_stepper_pt()->time_pt()->time();
289 
290  // Now evaluate the body force
291  (*Body_force_fct_pt)(time, x, b);
292  }
293  }
294 
295 
299  unsigned ndof_types() const
300  {
301  return 2;
302  // return 1;
303  }
304 
312  std::list<std::pair<unsigned long, unsigned>>& dof_lookup_list) const
313  {
314  // temporary pair (used to store dof lookup prior to being added
315  // to list)
316  std::pair<unsigned long, unsigned> dof_lookup;
317 
318  // number of nodes
319  const unsigned n_node = this->nnode();
320 
321  // Integer storage for local unknown
322  int local_unknown = 0;
323 
324  // Loop over the nodes
325  for (unsigned n = 0; n < n_node; n++)
326  {
327  // Loop over dimension
328  for (unsigned i = 0; i < DIM; i++)
329  {
330  // If the variable is free
331  local_unknown = nodal_local_eqn(n, i);
332 
333  // ignore pinned values
334  if (local_unknown >= 0)
335  {
336  // store dof lookup in temporary pair: First entry in pair
337  // is global equation number; second entry is dof type
338  dof_lookup.first = this->eqn_number(local_unknown);
339  dof_lookup.second = i;
340  // dof_lookup.second = DIM;
341 
342  // add to list
343  dof_lookup_list.push_front(dof_lookup);
344  }
345  }
346  }
347  }
348 
349 
350  protected:
353 
355  double* Lambda_sq_pt;
356 
358  bool Unsteady;
359 
362 
364  static double Default_lambda_sq_value;
365  };
366 
367 
371 
372 
373  //=======================================================================
376  //=======================================================================
377  template<unsigned DIM>
379  : public virtual LinearElasticityEquationsBase<DIM>
380  {
381  public:
384 
386  unsigned required_nvalue(const unsigned& n) const
387  {
388  return DIM;
389  }
390 
394  {
396  residuals, GeneralisedElement::Dummy_matrix, 0);
397  }
398 
403  DenseMatrix<double>& jacobian)
404  {
405  // Add the contribution to the residuals
407  residuals, jacobian, 1);
408  }
409 
412  void get_stress(const Vector<double>& s, DenseMatrix<double>& sigma) const;
413 
414 
416  void output_fct(std::ostream& outfile,
417  const unsigned& nplot,
419 
421  void output_fct(std::ostream& outfile,
422  const unsigned& nplot,
423  const double& time,
425 
427  void output(std::ostream& outfile)
428  {
429  unsigned n_plot = 5;
430  output(outfile, n_plot);
431  }
432 
434  void output(std::ostream& outfile, const unsigned& n_plot);
435 
436 
438  void output(FILE* file_pt)
439  {
440  unsigned n_plot = 5;
441  output(file_pt, n_plot);
442  }
443 
445  void output(FILE* file_pt, const unsigned& n_plot);
446 
451  void compute_error(std::ostream& outfile,
453  double& error,
454  double& norm);
455 
461  void compute_error(std::ostream& outfile,
463  const double& time,
464  double& error,
465  double& norm);
466 
467  private:
471  Vector<double>& residuals, DenseMatrix<double>& jacobian, unsigned flag);
472  };
473 
474 
478 
479 
480  //===========================================================================
483  //============================================================================
484  template<unsigned DIM, unsigned NNODE_1D>
485  class QLinearElasticityElement : public virtual QElement<DIM, NNODE_1D>,
486  public virtual LinearElasticityEquations<DIM>
487  {
488  public:
491  : QElement<DIM, NNODE_1D>(), LinearElasticityEquations<DIM>()
492  {
493  }
494 
496  void output_fct(std::ostream& outfile,
497  const unsigned& nplot,
499  {
500  LinearElasticityEquations<DIM>::output_fct(outfile, nplot, exact_soln_pt);
501  }
502 
504  void output(std::ostream& outfile)
505  {
507  }
508 
510  void output(std::ostream& outfile, const unsigned& n_plot)
511  {
513  }
514 
515 
517  void output(FILE* file_pt)
518  {
520  }
521 
523  void output(FILE* file_pt, const unsigned& n_plot)
524  {
526  }
527  };
528 
529 
530  //============================================================================
532  //============================================================================
533  template<>
535  : public virtual QElement<1, 2>
536  {
537  public:
539  FaceGeometry() : QElement<1, 2>() {}
540  };
541 
542 
543  //============================================================================
545  //============================================================================
546  template<>
548  : public virtual QElement<1, 3>
549  {
550  public:
552  FaceGeometry() : QElement<1, 3>() {}
553  };
554 
555 
556  //============================================================================
558  //============================================================================
559  template<>
561  : public virtual QElement<1, 4>
562  {
563  public:
565  FaceGeometry() : QElement<1, 4>() {}
566  };
567 
568 
569  //============================================================================
571  //============================================================================
572  template<>
574  : public virtual QElement<2, 2>
575  {
576  public:
578  FaceGeometry() : QElement<2, 2>() {}
579  };
580 
581  //============================================================================
583  //============================================================================
584  template<>
586  : public virtual QElement<2, 3>
587  {
588  public:
590  FaceGeometry() : QElement<2, 3>() {}
591  };
592 
593 
594  //============================================================================
596  //============================================================================
597  template<>
599  : public virtual QElement<2, 4>
600  {
601  public:
603  FaceGeometry() : QElement<2, 4>() {}
604  };
605 
609 
610 
611  //==========================================================
613  //==========================================================
614  template<class LINEAR_ELAST_ELEMENT>
616  : public virtual ProjectableElement<LINEAR_ELAST_ELEMENT>
617  {
618  public:
622 
623 
630  {
631  // Create the vector
633 
634  // Loop over all nodes and extract the fld-th nodal value
635  unsigned nnod = this->nnode();
636  for (unsigned j = 0; j < nnod; j++)
637  {
638  // Add the data value associated with the displacement components
639  data_values.push_back(std::make_pair(this->node_pt(j), fld));
640  }
641 
642  // Return the vector
643  return data_values;
644  }
645 
649  {
650  return this->dim();
651  }
652 
655  unsigned nhistory_values_for_projection(const unsigned& fld)
656  {
657 #ifdef PARANOID
658  if (fld > 1)
659  {
660  std::stringstream error_stream;
661  error_stream << "Elements only store two fields so fld can't be"
662  << " " << fld << std::endl;
663  throw OomphLibError(
664  error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
665  }
666 #endif
667  return this->node_pt(0)->ntstorage();
668  }
669 
673  {
674  return this->node_pt(0)->position_time_stepper_pt()->ntstorage();
675  }
676 
679  double jacobian_and_shape_of_field(const unsigned& fld,
680  const Vector<double>& s,
681  Shape& psi)
682  {
683  unsigned n_dim = this->dim();
684  unsigned n_node = this->nnode();
685  DShape dpsidx(n_node, n_dim);
686 
687  // Call the derivatives of the shape functions and return
688  // the Jacobian
689  return this->dshape_eulerian(s, psi, dpsidx);
690  }
691 
692 
695  double get_field(const unsigned& t,
696  const unsigned& fld,
697  const Vector<double>& s)
698  {
699  unsigned n_node = this->nnode();
700 
701  /* #ifdef PARANOID */
702  /* unsigned n_dim=this->node_pt(0)->ndim(); */
703  /* #endif */
704 
705  // Local shape function
706  Shape psi(n_node);
707 
708  // Find values of shape function
709  this->shape(s, psi);
710 
711  // Initialise value of u
712  double interpolated_u = 0.0;
713 
714  // Sum over the local nodes at that time
715  for (unsigned l = 0; l < n_node; l++)
716  {
717  // over-zealous I think. This will quietly do the right thing
718  // even if there are additional degrees of freedom floating around.
719  /* #ifdef PARANOID */
720  /* unsigned nvalue=this->node_pt(l)->nvalue(); */
721  /* if (nvalue!=n_dim) */
722  /* { */
723  /* std::stringstream error_stream; */
724  /* error_stream */
725  /* << "Current implementation only works for non-resized
726  * nodes\n" */
727  /* << "but nvalue= " << nvalue << "!= dim = " << n_dim <<
728  * std::endl; */
729  /* throw OomphLibError( */
730  /* error_stream.str(), */
731  /* OOMPH_CURRENT_FUNCTION, */
732  /* OOMPH_EXCEPTION_LOCATION); */
733  /* } */
734  /* #endif */
735  interpolated_u += this->nodal_value(t, l, fld) * psi[l];
736  }
737  return interpolated_u;
738  }
739 
740 
742  unsigned nvalue_of_field(const unsigned& fld)
743  {
744  return this->nnode();
745  }
746 
747 
749  int local_equation(const unsigned& fld, const unsigned& j)
750  {
751  // over-zealous I think. This will quietly do the right thing
752  // even if there are additional degrees of freedom floating around.
753  /* #ifdef PARANOID */
754  /* unsigned n_dim=this->node_pt(0)->ndim(); */
755  /* unsigned nvalue=this->node_pt(j)->nvalue(); */
756  /* if (nvalue!=n_dim) */
757  /* { */
758  /* std::stringstream error_stream; */
759  /* error_stream */
760  /* << "Current implementation only works for non-resized nodes\n"
761  */
762  /* << "but nvalue= " << nvalue << "!= dim = " << n_dim <<
763  * std::endl; */
764  /* throw OomphLibError( */
765  /* error_stream.str(), */
766  /* OOMPH_CURRENT_FUNCTION, */
767  /* OOMPH_EXCEPTION_LOCATION); */
768  /* } */
769  /* #endif */
770  return this->nodal_local_eqn(j, fld);
771  }
772  };
773 
774 
775  //=======================================================================
778  //=======================================================================
779  template<class ELEMENT>
781  : public virtual FaceGeometry<ELEMENT>
782  {
783  public:
784  FaceGeometry() : FaceGeometry<ELEMENT>() {}
785  };
786 
787 
788  //=======================================================================
791  //=======================================================================
792  template<class ELEMENT>
794  : public virtual FaceGeometry<FaceGeometry<ELEMENT>>
795  {
796  public:
798  };
799 
800 
801 } // namespace oomph
802 
803 #endif
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Array< double, 1, 3 > e(1./3., 0.5, 2.)
Scalar * b
Definition: benchVecAdd.cpp:17
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
Definition: linear_elasticity/elasticity_tensor.h:55
FaceGeometry()
Definition: linear_elasticity_elements.h:784
FaceGeometry()
Constructor must call the constructor of the underlying solid element.
Definition: linear_elasticity_elements.h:539
FaceGeometry()
Constructor must call the constructor of the underlying element.
Definition: linear_elasticity_elements.h:552
FaceGeometry()
Constructor must call the constructor of the underlying element.
Definition: linear_elasticity_elements.h:565
FaceGeometry()
Constructor must call the constructor of the underlying element.
Definition: linear_elasticity_elements.h:578
FaceGeometry()
Constructor must call the constructor of the underlying element.
Definition: linear_elasticity_elements.h:590
FaceGeometry()
Constructor must call the constructor of the underlying element.
Definition: linear_elasticity_elements.h:603
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
Definition: linear_elasticity_elements.h:57
ElasticityTensor * Elasticity_tensor_pt
Pointer to the elasticity tensor.
Definition: linear_elasticity_elements.h:352
double *& lambda_sq_pt()
Access function for pointer to timescale ratio (nondim density)
Definition: linear_elasticity_elements.h:195
void get_dof_numbers_for_unknowns(std::list< std::pair< unsigned long, unsigned >> &dof_lookup_list) const
Definition: linear_elasticity_elements.h:311
BodyForceFctPt body_force_fct_pt() const
Access function: Pointer to body force function (const version)
Definition: linear_elasticity_elements.h:207
void disable_inertia()
Switch off solid inertia.
Definition: linear_elasticity_elements.h:220
ElasticityTensor *& elasticity_tensor_pt()
Return the pointer to the elasticity_tensor.
Definition: linear_elasticity_elements.h:174
static double Default_lambda_sq_value
Static default value for timescale ratio (1.0 – for natural scaling)
Definition: linear_elasticity_elements.h:364
double * Lambda_sq_pt
Timescale ratio (non-dim. density)
Definition: linear_elasticity_elements.h:355
const double & lambda_sq() const
Access function for timescale ratio (nondim density)
Definition: linear_elasticity_elements.h:189
virtual void get_stress(const Vector< double > &s, DenseMatrix< double > &sigma) const =0
static void pin_redundant_nodal_solid_pressures(const Vector< GeneralisedElement * > &element_pt)
Definition: linear_elasticity_elements.h:245
double interpolated_u_linear_elasticity(const Vector< double > &s, const unsigned &i) const
Return FE interpolated displacement u[i] at local coordinate s.
Definition: linear_elasticity_elements.h:127
void get_strain(const Vector< double > &s, DenseMatrix< double > &strain) const
Return the strain tensor.
Definition: linear_elasticity_elements.cc:47
void body_force(const Vector< double > &x, Vector< double > &b) const
Definition: linear_elasticity_elements.h:270
BodyForceFctPt Body_force_fct_pt
Pointer to body force function.
Definition: linear_elasticity_elements.h:361
bool is_inertia_enabled() const
Access function to flag that switches inertia on/off (const version)
Definition: linear_elasticity_elements.h:226
void interpolated_u_linear_elasticity(const Vector< double > &s, Vector< double > &disp) const
Compute vector of FE interpolated displacement u at local coordinate s.
Definition: linear_elasticity_elements.h:98
bool Unsteady
Flag that switches inertia on/off.
Definition: linear_elasticity_elements.h:358
BodyForceFctPt & body_force_fct_pt()
Access function: Pointer to body force function.
Definition: linear_elasticity_elements.h:201
void enable_inertia()
Switch on solid inertia.
Definition: linear_elasticity_elements.h:214
double E(const unsigned &i, const unsigned &j, const unsigned &k, const unsigned &l) const
Access function to the entries in the elasticity tensor.
Definition: linear_elasticity_elements.h:180
void(* BodyForceFctPt)(const double &t, const Vector< double > &x, Vector< double > &b)
Definition: linear_elasticity_elements.h:158
unsigned ndof_types() const
Definition: linear_elasticity_elements.h:299
virtual unsigned u_index_linear_elasticity(const unsigned i) const
Definition: linear_elasticity_elements.h:62
virtual void pin_elemental_redundant_nodal_solid_pressures()
Pin the element's redundant solid pressures (needed for refinement)
Definition: linear_elasticity_elements.h:232
double d2u_dt2_linear_elasticity(const unsigned &n, const unsigned &i) const
d^2u/dt^2 at local node n
Definition: linear_elasticity_elements.h:68
LinearElasticityEquationsBase()
Definition: linear_elasticity_elements.h:165
Definition: linear_elasticity_elements.h:380
void output_fct(std::ostream &outfile, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output exact solution x,y,[z],u,v,[w].
Definition: linear_elasticity_elements.cc:377
unsigned required_nvalue(const unsigned &n) const
Number of values required at node n.
Definition: linear_elasticity_elements.h:386
void compute_error(std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
Definition: linear_elasticity_elements.cc:568
void output(std::ostream &outfile)
Output: x,y,[z],u,v,[w].
Definition: linear_elasticity_elements.h:427
void output(FILE *file_pt)
C-style output: x,y,[z],u,v,[w].
Definition: linear_elasticity_elements.h:438
void get_stress(const Vector< double > &s, DenseMatrix< double > &sigma) const
Definition: linear_elasticity_elements.cc:145
virtual void fill_in_generic_contribution_to_residuals_linear_elasticity(Vector< double > &residuals, DenseMatrix< double > &jacobian, unsigned flag)
Definition: linear_elasticity_elements.cc:190
void fill_in_contribution_to_jacobian(Vector< double > &residuals, DenseMatrix< double > &jacobian)
Definition: linear_elasticity_elements.h:402
LinearElasticityEquations()
Constructor.
Definition: linear_elasticity_elements.h:383
void fill_in_contribution_to_residuals(Vector< double > &residuals)
Definition: linear_elasticity_elements.h:393
TimeStepper *& position_time_stepper_pt()
Return a pointer to the position timestepper.
Definition: nodes.h:1022
Definition: oomph_definitions.h:222
Definition: projection.h:183
Linear elasticity upgraded to become projectable.
Definition: linear_elasticity_elements.h:617
double get_field(const unsigned &t, const unsigned &fld, const Vector< double > &s)
Definition: linear_elasticity_elements.h:695
int local_equation(const unsigned &fld, const unsigned &j)
Return local equation number of value j in field fld.
Definition: linear_elasticity_elements.h:749
double jacobian_and_shape_of_field(const unsigned &fld, const Vector< double > &s, Shape &psi)
Definition: linear_elasticity_elements.h:679
unsigned nhistory_values_for_projection(const unsigned &fld)
Definition: linear_elasticity_elements.h:655
unsigned nvalue_of_field(const unsigned &fld)
Return number of values in field fld.
Definition: linear_elasticity_elements.h:742
Vector< std::pair< Data *, unsigned > > data_values_of_field(const unsigned &fld)
Definition: linear_elasticity_elements.h:629
ProjectableLinearElasticityElement()
Definition: linear_elasticity_elements.h:621
unsigned nfields_for_projection()
Definition: linear_elasticity_elements.h:648
unsigned nhistory_values_for_coordinate_projection()
Definition: linear_elasticity_elements.h:672
Definition: Qelements.h:459
Definition: linear_elasticity_elements.h:487
void output(FILE *file_pt, const unsigned &n_plot)
C-style output function.
Definition: linear_elasticity_elements.h:523
void output(FILE *file_pt)
C-style output function.
Definition: linear_elasticity_elements.h:517
QLinearElasticityElement()
Constructor.
Definition: linear_elasticity_elements.h:490
void output(std::ostream &outfile, const unsigned &n_plot)
Output function.
Definition: linear_elasticity_elements.h:510
void output_fct(std::ostream &outfile, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt)
Output exact solution x,y,[z],u,v,[w].
Definition: linear_elasticity_elements.h:496
void output(std::ostream &outfile)
Output function.
Definition: linear_elasticity_elements.h:504
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
Time *const & time_pt() const
Access function for the pointer to time (const version)
Definition: timesteppers.h:572
double & time()
Return the current value of the continuous time.
Definition: timesteppers.h:123
RealScalar s
Definition: level1_cplx_impl.h:130
char char char int int * k
Definition: level2_impl.h:374
#define DIM
Definition: linearised_navier_stokes_elements.h:44
int error
Definition: calibrate.py:297
int sigma
Definition: calibrate.py:179
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