stored_shape_function_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// Version 1.0; svn revision $LastChangedRevision$
7 //LIC//
8 //LIC// $LastChangedDate$
9 //LIC//
10 //LIC// Copyright (C) 2006-2016 Matthias Heil and Andrew Hazel
11 //LIC//
12 //LIC// This library is free software; you can redistribute it and/or
13 //LIC// modify it under the terms of the GNU Lesser General Public
14 //LIC// License as published by the Free Software Foundation; either
15 //LIC// version 2.1 of the License, or (at your option) any later version.
16 //LIC//
17 //LIC// This library is distributed in the hope that it will be useful,
18 //LIC// but WITHOUT ANY WARRANTY; without even the implied warranty of
19 //LIC// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 //LIC// Lesser General Public License for more details.
21 //LIC//
22 //LIC// You should have received a copy of the GNU Lesser General Public
23 //LIC// License along with this library; if not, write to the Free Software
24 //LIC// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
25 //LIC// 02110-1301 USA.
26 //LIC//
27 //LIC// The authors may be contacted at oomph-lib@maths.man.ac.uk.
28 //LIC//
29 //LIC//====================================================================
30 //Header file for classes that overload elements and implement
31 //stored shape functions.
32 
33 //Include guard to prevent multiple inclusions of the header
34 #ifndef OOMPH_STORED_SHAPE_FUNCTION_ELEMENTS_HEADER
35 #define OOMPH_STORED_SHAPE_FUNCTION_ELEMENTS_HEADER
36 
37 
38 // Config header generated by autoconfig
39 #ifdef HAVE_CONFIG_H
40  #include <oomph-lib-config.h>
41 #endif
42 
43 #include "elements.h"
44 
45 
46 namespace oomph
47 {
48 
49 // Debugging flag
50 #define OOMPH_STORED_SHAPE_FUNCTIONS_VERBOSE
51 #undef OOMPH_STORED_SHAPE_FUNCTIONS_VERBOSE
52 
53 
54 //==========================================================================
55 /// Base class for elements that allow storage of precomputed shape functions
56 /// and their derivatives w.r.t to the local and global (Eulerian)
57 /// coordinates at the element's integration points.
58 //==========================================================================
60 {
61  private:
62 
63  /// \short Pointer to storage for the pointers to the nodal shape functions
64  /// at the integration points (knots)
65  // ALH: Note that the vector must be Shape* because we do not know,
66  // a priori, how much storage to allocate in each Shape object.
67  // N.B. This could in 99% of cases be static, but that would not
68  // permit individual elements to have different integration schemes.
69  // If this proves to be a problem, one can use the the function
70  // set_local_shape_stored_from_element(), which sets this pointer to
71  // point to the pointer allocated by another element.
73 
74  /// \short Pointer to storage for the pointers to the derivatives of the nodal
75  /// shape functions w.r.t. the local coordinates at integration points
77 
78  /// \short Pointer to storage for the pointers to the second derivatives of
79  /// the nodal shape functions w.r.t. the local coordinates at integration
80  /// points
82 
83  /// \short Boolean to determine whether the element can delete the stored
84  /// local shape functions
86 
87  /// \short Pointer to storage for the derivatives of the
88  /// shape functions w.r.t. global coordinates at integration points
90 
91  /// \short Pointer to storage for the second derivatives of the
92  /// shape functions w.r.t. global coordinates at integration points
94 
95  /// \short Pointer to storage for the Jacobian of the element w.r.t
96  /// global coordinates
98 
99  /// \short Boolean to determine whether the element can delete the stored
100  /// derivatives of shape functions w.r.t. global coordinates
102 
103 public:
104 
105  /// Constructor, set most storage pointers to NULL.
106  // By default the element can delete its own stored shape functions
107  StorableShapeElementBase() : FiniteElement(), Shape_stored_pt(0),
108  DShape_local_stored_pt(0), D2Shape_local_stored_pt(0),
109  Can_delete_shape_local_stored(true),
110  DShape_eulerian_stored_pt(0), D2Shape_eulerian_stored_pt(0),
111  Jacobian_eulerian_stored_pt(0), Can_delete_dshape_eulerian_stored(true)
112  {}
113 
114  /// \short The destructor cleans up the static memory allocated
115  /// for shape function storage. Internal and external data get
116  /// wiped by the GeneralisedElement destructor; nodes get
117  /// killed in mesh destructor.
118  virtual ~StorableShapeElementBase();
119 
120  /// Broken copy constructor
122  {
123  BrokenCopy::broken_copy("StorableShapeElementBase");
124  }
125 
126  /// Broken assignment operator
128  {
129  BrokenCopy::broken_assign("StorableShapeElementBase");
130  }
131 
132  /// \short Delete all the objects stored in the [...]_local_stored_pt
133  /// vectors and delete the vectors themselves
135 
136  /// \short Delete stored shape functions
138 
139  /// \short Delete stored derivatives of shape functions w.r.t. to
140  /// local coordinates
142 
143  /// \short Delete stored 2nd derivatives of shape functions w.r.t. to
144  /// local coordinates
146 
147  /// \short Delete all storage related to deriatives of shape fcts
148  /// w.r.t. to global Eulerian coords
150 
151  /// \short Delete stored deriatives of shape fcts w.r.t. to global
152  /// Eulerian coords
154 
155  /// \short Delete stored second derivatives of shape functions w.r.t. to
156  /// global Eulerian coordinates
158 
159  /// \short Delete stored Jacobian of mapping between local and global
160  /// (Eulerian) coordinates
162 
163  /// \short Set the spatial integration scheme -- overloaded from the
164  /// finite element base class since a change in the integration scheme
165  /// forces a recomputation of the shape fcts at the integration points.
166  virtual void set_integration_scheme(Integral* const &integral_pt);
167 
168  /// \short Return a pointer to the vector of pointers to the
169  /// stored shape functions
171 
172  /// \short Return a pointer to the vector of pointers to the
173  /// stored shape functions (const version)
174  inline Vector<Shape*>* const &shape_stored_pt() const
175  {return Shape_stored_pt;}
176 
177  /// \short Return a pointer to the stored shape function at the ipt-th
178  /// integration point
179  inline Shape* &shape_stored_pt(const unsigned &ipt)
180  {return (*Shape_stored_pt)[ipt];}
181 
182  /// \short Return a pointer to the stored shape function at the ipt-th
183  /// integration point (const version)
184  inline Shape* const &shape_stored_pt(const unsigned &ipt) const
185  {return (*Shape_stored_pt)[ipt];}
186 
187  /// \short Return a pointer to the vector of pointers to the stored first
188  /// derivatives of the shape functions w.r.t the local coordinates
190  {return DShape_local_stored_pt;}
191 
192  /// \short Return a pointer to the vector of pointers to the stored first
193  /// derivatives of the shape functions w.r.t the local coordinates
194  /// (const version)
195  inline Vector<DShape*>* const &dshape_local_stored_pt() const
196  {return DShape_local_stored_pt;}
197 
198  /// \short Return a pointer to the vector of pointers to the stored second
199  /// derivatives of the shape functions w.r.t the local coordinates
201  {return D2Shape_local_stored_pt;}
202 
203  /// \short Return a pointer to the vector of pointers to the stored second
204  /// derivatives of the shape functions w.r.t the local coordinates
205  /// (const version)
206  inline Vector<DShape*>* const &d2shape_local_stored_pt() const
207  {return D2Shape_local_stored_pt;}
208 
209  /// \short Return a pointer to the vector of pointers to the stored first
210  /// derivatives of the shape functions w.r.t the global (eulerian)
211  /// coordinates
213  {return DShape_eulerian_stored_pt;}
214 
215  /// \short Return a pointer to the vector of pointers to the stored first
216  /// derivatives of the shape functions w.r.t the global (eulerian)
217  /// coordinates (const version)
219  {return DShape_eulerian_stored_pt;}
220 
221  /// \short Return a pointer to the vector of pointers to the stored second
222  /// derivatives of the shape functions w.r.t the global (eulerian)
223  /// coordinates
226 
227  /// \short Return a pointer to the vector of pointers to the stored second
228  /// derivatives of the shape functions w.r.t the global (eulerian)
229  /// coordinates (const version)
232 
233  /// \short Return a pointer to the vector of Jacobians of
234  /// the mapping between the local and global (eulerian) coordinates
237 
238  /// \short Return a pointer to the vector of Jacobians of
239  /// the mapping between the local and global (eulerian) coordinates
240  /// (const version)
243 
244  /// \short Set the shape functions pointed to internally to be
245  /// those pointed to by the FiniteElement element_pt (In most
246  /// cases all elements of the same type have the same number of
247  /// integration points so the shape function values and their
248  /// local derivatives are the same --> They only need to be
249  /// stored by one element). Calling this function deletes the locally
250  /// created storage and re-directs the pointers to the stored
251  /// shape function of the specified element.
253  element_pt);
254 
255  /// \short Set the derivatives of stored shape functions with respect
256  /// to the global coordinates to be the same as
257  /// those pointed to by the FiniteElement element_pt. Note that this
258  /// function also calls set_shape_local_stored_from_element(element_pt).
259  /// so that the local derivatives are also stored.
260  /// Calling this function only makes sense for uniformly-spaced meshes with
261  /// elements of equal sizes.
263  const &element_pt);
264 
265  /// \short Calculate the shape functions at the integration points
266  /// and store the results internally
268 
269  /// \short Return the geometric shape function at the ipt-th integration point
270  void shape_at_knot(const unsigned &ipt, Shape &psi) const;
271 
272  /// \short Calculate the shape functions and first derivatives w.r.t. local
273  /// coordinatess at the integration points and store the results internally
275 
276  /// \short Return the geometric shape function and its derivative w.r.t.
277  /// the local coordinates at the ipt-th integration point. If pre-computed
278  /// values have been stored, they will be used.
279  void dshape_local_at_knot(const unsigned &ipt, Shape &psi,
280  DShape &dpsids) const;
281 
282  /// \short Calculate the second derivatives of the shape functions
283  /// w.r.t. local coordinates at the integration points and store the
284  /// results internally
286 
287  /// \short Return the geometric shape function and its first and
288  /// second derivatives w.r.t.
289  /// the local coordinates at the ipt-th integration point. If pre-computed
290  /// values have been stored, they will be used.
291  void d2shape_local_at_knot(const unsigned &ipt, Shape &psi,
292  DShape &dpsids, DShape &d2psids) const;
293 
294  /// \short Calculate the Jacobian of the mapping from local to global
295  /// coordinates at the integration points and store the results
296  /// internally.
298 
299  /// \short Return the Jacobian of the mapping from local to global
300  /// coordinates at the ipt-th integration point
301  double J_eulerian_at_knot(const unsigned &ipt) const;
302 
303  /// \short Calculate the first derivatives of the shape functions
304  /// w.r.t the global coordinates at the integration points and store
305  /// the results internally
307 
308  /// \short Return the geometric shape functions and also first
309  /// derivatives w.r.t. global coordinates at the ipt-th integration point.
310  /// If the values of the shape functions and derivatives have been
311  /// pre-computed, these will be used
312  double dshape_eulerian_at_knot(const unsigned &ipt, Shape &psi,
313  DShape &dpsidx) const;
314 
315 
316  /// \short Calculate the first and second derivatives of the shape
317  /// functions w.r.t global coordinates at the integration points and
318  /// store the results internally.
320 
321  /// \short Return the geometric shape functions and also first
322  /// and second derivatives w.r.t. global coordinates at ipt-th integration
323  /// point. If the values of the shape functions and derivatives have been
324  /// pre-computred, these will be used
325  double d2shape_eulerian_at_knot(const unsigned &ipt, Shape &psi,
326  DShape &dpsidx,
327  DShape &d2psidx) const;
328 
329 
330 /* /// Diagnostic */
331 /* void tell_me() */
332 /* { */
333 /* oomph_info << "Diagnostic" << std::endl; */
334 /* oomph_info << Shape_stored_pt << " "; */
335 /* oomph_info << DShape_local_stored_pt << " "; */
336 /* oomph_info << D2Shape_local_stored_pt << " "; */
337 /* oomph_info << DShape_eulerian_stored_pt << " "; */
338 /* oomph_info << D2Shape_eulerian_stored_pt << " "; */
339 /* oomph_info << Jacobian_eulerian_stored_pt << std::endl; */
340 /* } */
341 
342 };
343 
344 
345 
346 //============================================================================
347 /// Base class for solid elements that allow storage of precomputed
348 /// shape functions and their derivatives w.r.t to the local and global
349 /// (Lagrangian) coordinates at the element's integration points.
350 //============================================================================
352  public virtual SolidFiniteElement
353 {
354  private:
355 
356  /// \short Pointer to storage for the pointers to the derivatives of the
357  /// shape functions w.r.t. Lagrangian coordinates at integration points
359 
360  /// \short Pointer to storage for the pointers to the second derivatives of
361  /// the shape functions w.r.t. Lagrangian coordinates at integration points
363 
364  /// \short Pointer to storage for the Jacobian of the mapping between
365  /// the local and the global Lagrangian coordinates
367 
368  /// \short Boolean to determine whether the element can delete the stored
369  /// shape function derivatives w.r.t. the Lagrangian coordinate
371 
372 public:
373 
374  ///Constructor: Set defaults: Nothing is stored
377  DShape_lagrangian_stored_pt(0),
378  D2Shape_lagrangian_stored_pt(0), Jacobian_lagrangian_stored_pt(0),
379  Can_delete_dshape_lagrangian_stored(true)
380  {}
381 
382  ///Destructor to clean up any allocated memory
384  {delete_all_dshape_lagrangian_stored();}
385 
386  /// Broken copy constructor
388  {
389  BrokenCopy::broken_copy("StorableShapeSolidElementBase");
390  }
391 
392  /// Broken assignment operator
394  {
395  BrokenCopy::broken_assign("StorableShapeSolidElementBase");
396  }
397 
398  /// \short Delete all the objects stored in the [...]_lagrangian_stored_pt
399  /// vectors and delete the vectors themselves
400  void delete_all_dshape_lagrangian_stored();
401 
402  /// \short Delete all the objects stored in the
403  /// Lagrangian_stored vectors
404  void delete_dshape_lagrangian_stored();
405 
406  /// \short Delete stored second derivatives of shape functions w.r.t.
407  /// Lagrangian coordinates
408  void delete_d2shape_lagrangian_stored();
409 
410  /// \short Delete stored Jaocbian of mapping between local and Lagrangian
411  /// coordinates
412  void delete_J_lagrangian_stored();
413 
414  /// \short Overload the set_integration_scheme to recompute any stored
415  /// derivatives w.r.t. Lagrangian coordinates
417  {
419 
420  //If we are storing Lagrangian first and second derivatives, recompute them
421  if(D2Shape_lagrangian_stored_pt!=0)
422  {
423  pre_compute_d2shape_lagrangian_at_knots();
424  }
425  //If we are storing Lagrangian first derivatives, recompute them
426  else if(DShape_lagrangian_stored_pt!=0)
427  {
428  pre_compute_dshape_lagrangian_at_knots();
429  }
430  }
431 
432  /// \short Return a pointer to the vector of pointers to the stored first
433  /// derivatives of the shape functions w.r.t the global (eulerian)
434  /// coordinates
436  {return DShape_lagrangian_stored_pt;}
437 
438  /// \short Return a pointer to the vector of pointers to the stored first
439  /// derivatives of the shape functions w.r.t the global (eulerian)
440  /// coordinates (const version)
442  {return DShape_lagrangian_stored_pt;}
443 
444  /// \short Return a pointer to the vector of pointers to the stored second
445  /// derivatives of the shape functions w.r.t the global (eulerian)
446  /// coordinates
448  {return D2Shape_lagrangian_stored_pt;}
449 
450  /// \short Return a pointer to the vector of pointers to the stored second
451  /// derivatives of the shape functions w.r.t the global (eulerian)
452  /// coordinates (const version)
454  {return D2Shape_lagrangian_stored_pt;}
455 
456  /// \short Return a pointer to the vector of Jacobians of
457  /// the mapping between the local and global (eulerian) coordinates
459  {return Jacobian_lagrangian_stored_pt;}
460 
461  /// \short Return a pointer to the vector of Jacobians of
462  /// the mapping between the local and global (eulerian) coordinates
463  /// (const version)
465  {return Jacobian_lagrangian_stored_pt;}
466 
467 
468  /// \short Calculate the first derivatives of the shape functions w.r.t
469  /// Lagrangian coordinates at the integration points and store the
470  /// results internally.
471  void pre_compute_dshape_lagrangian_at_knots();
472 
473  /// \short Return the geometric shape functions and also first
474  /// derivatives w.r.t. Lagrangian coordinates at ipt-th integration point.
475  /// If the values of the shape function and derivatives have been
476  /// pre-computed, they will be used.
477  double dshape_lagrangian_at_knot(const unsigned &ipt,
478  Shape &psi, DShape &dpsidxi) const;
479 
480  /// \short Calculate the first and second derivatives of the
481  /// shape functions w.r.t
482  /// Lagrangian coordinates at the integration points and store the
483  /// results internally
484  void pre_compute_d2shape_lagrangian_at_knots();
485 
486  /// \short Return the geometric shape functions and also first
487  /// and second derivatives w.r.t. Lagrangian coordinates at
488  /// the ipt-th integration point. If the values have been pre-computed,
489  /// they will be used.
490  /// Returns Jacobian of mapping from Lagrangian to local coordinates.
491  double d2shape_lagrangian_at_knot(const unsigned &ipt,
492  Shape &psi,
493  DShape &dpsidxi,
494  DShape &d2psidxi) const;
495 
496 
497  /// \short Set the derivatives of stored shape functions with respect
498  /// to the lagrangian coordinates to be the same as
499  /// those pointed to by the FiniteElement element_pt. Note that this
500  /// function also calls set_shape_local_stored_from_element(element_pt).
501  /// so that the local derivatives are also stored.
502  /// Calling this function only makes sense for uniformly-spaced meshes with
503  /// elements of equal sizes.
504  void set_dshape_lagrangian_stored_from_element(StorableShapeSolidElementBase*
505  const &element_pt);
506 
507 };
508 
509 
510 
511 
512 
513 //========================================================================
514 /// Templated wrapper that attaches the ability to store the shape
515 /// functions and their derivatives w.r.t. to the local and global
516 /// (Eulerian) coordinates at the integration points to the
517 /// element specified by the template parameter.
518 //========================================================================
519 template<class ELEMENT>
521  public virtual ELEMENT
522 {
523 
524 public:
525 
526  /// Constructor, set most storage pointers to zero
527  // By default the element can delete its own stored shape functions
529  {
530  // Reset the integration scheme and force a (re)compute of the
531  // the stored shape functions and their derivatives w.r.t. to the
532  // local coordinates.
533  this->set_integration_scheme(this->integral_pt());
534  }
535 
536  /// Empty virtual destructor
538 
539  /// Broken copy constructor
541  {
542  BrokenCopy::broken_copy("StorableShapeElement");
543  }
544 
545  /// Broken assignment operator
547  {
548  BrokenCopy::broken_assign("StorableShapeElement");
549  }
550 
551 };
552 
553 
554 
555 /////////////////////////////////////////////////////////////////////////
556 /////////////////////////////////////////////////////////////////////////
557 /////////////////////////////////////////////////////////////////////////
558 
559 
560 
561 //============================================================================
562 /// Templated wrapper that attaches the ability to store the shape
563 /// functions and their derivatives w.r.t. to the local and global
564 /// (Eulerian) coordinates at the integration points to the
565 /// SolidFiniteElement specified by the template parameter.
566 //============================================================================
567 template<class ELEMENT>
569  public virtual ELEMENT
570 {
571 
572 public:
573 
574  ///Constructor: Set defaults
576  {
577  //Reset the integration scheme and force a (re-)computation
578  //of the shape functions and their derivatives w.r.t. to the
579  //local coordinates at the integration points.
580  this->set_integration_scheme(this->integral_pt());
581  }
582 
583  ///Destructor to clean up any allocated memory
585 
586 
587  /// Broken copy constructor
589  {
590  BrokenCopy::broken_copy("StorableShapeSolidElement");
591  }
592 
593  /// Broken assignment operator
595  {
596  BrokenCopy::broken_assign("StorableShapeSolidElement");
597  }
598 
599 };
600 
601 }
602 
603 #endif
604 
605 
606 
607 
608 
609 
610 
611 
double J_eulerian_at_knot(const unsigned &ipt) const
Return the Jacobian of the mapping from local to global coordinates at the ipt-th integration point...
void broken_copy(const std::string &class_name)
Issue error message and terminate execution.
void dshape_local_at_knot(const unsigned &ipt, Shape &psi, DShape &dpsids) const
Return the geometric shape function and its derivative w.r.t. the local coordinates at the ipt-th int...
void pre_compute_dshape_eulerian_at_knots()
Calculate the first derivatives of the shape functions w.r.t the global coordinates at the integratio...
Vector< DShape * > *const & d2shape_lagrangian_stored_pt() const
Return a pointer to the vector of pointers to the stored second derivatives of the shape functions w...
StorableShapeElementBase()
Constructor, set most storage pointers to NULL.
StorableShapeSolidElementBase(const StorableShapeSolidElementBase &)
Broken copy constructor.
Vector< double > * Jacobian_eulerian_stored_pt
Pointer to storage for the Jacobian of the element w.r.t global coordinates.
Vector< Shape * > *& shape_stored_pt()
Return a pointer to the vector of pointers to the stored shape functions.
Vector< DShape * > *& dshape_eulerian_stored_pt()
Return a pointer to the vector of pointers to the stored first derivatives of the shape functions w...
StorableShapeSolidElement(const StorableShapeSolidElement &)
Broken copy constructor.
void delete_dshape_eulerian_stored()
Delete stored deriatives of shape fcts w.r.t. to global Eulerian coords.
Vector< DShape * > *const & d2shape_local_stored_pt() const
Return a pointer to the vector of pointers to the stored second derivatives of the shape functions w...
void d2shape_local_at_knot(const unsigned &ipt, Shape &psi, DShape &dpsids, DShape &d2psids) const
Return the geometric shape function and its first and second derivatives w.r.t. the local coordinates...
Vector< DShape * > * DShape_local_stored_pt
Pointer to storage for the pointers to the derivatives of the nodal shape functions w...
void operator=(const StorableShapeElementBase &)
Broken assignment operator.
A general Finite Element class.
Definition: elements.h:1274
Shape *const & shape_stored_pt(const unsigned &ipt) const
Return a pointer to the stored shape function at the ipt-th integration point (const version) ...
Vector< DShape * > *& dshape_lagrangian_stored_pt()
Return a pointer to the vector of pointers to the stored first derivatives of the shape functions w...
virtual ~StorableShapeElementBase()
The destructor cleans up the static memory allocated for shape function storage. Internal and externa...
bool Can_delete_dshape_eulerian_stored
Boolean to determine whether the element can delete the stored derivatives of shape functions w...
Vector< DShape * > * DShape_eulerian_stored_pt
Pointer to storage for the derivatives of the shape functions w.r.t. global coordinates at integratio...
void delete_dshape_local_stored()
Delete stored derivatives of shape functions w.r.t. to local coordinates.
void set_dshape_eulerian_stored_from_element(StorableShapeElementBase *const &element_pt)
Set the derivatives of stored shape functions with respect to the global coordinates to be the same a...
StorableShapeElement()
Constructor, set most storage pointers to zero.
Vector< DShape * > *& d2shape_lagrangian_stored_pt()
Return a pointer to the vector of pointers to the stored second derivatives of the shape functions w...
Vector< DShape * > *const & dshape_local_stored_pt() const
Return a pointer to the vector of pointers to the stored first derivatives of the shape functions w...
Vector< DShape * > *& dshape_local_stored_pt()
Return a pointer to the vector of pointers to the stored first derivatives of the shape functions w...
Vector< DShape * > * DShape_lagrangian_stored_pt
Pointer to storage for the pointers to the derivatives of the shape functions w.r.t. Lagrangian coordinates at integration points.
Vector< DShape * > *& d2shape_eulerian_stored_pt()
Return a pointer to the vector of pointers to the stored second derivatives of the shape functions w...
Vector< Shape * > * Shape_stored_pt
Pointer to storage for the pointers to the nodal shape functions at the integration points (knots) ...
Vector< double > * Jacobian_lagrangian_stored_pt
Pointer to storage for the Jacobian of the mapping between the local and the global Lagrangian coordi...
Integral *const & integral_pt() const
Return the pointer to the integration scheme (const version)
Definition: elements.h:1908
double d2shape_eulerian_at_knot(const unsigned &ipt, Shape &psi, DShape &dpsidx, DShape &d2psidx) const
Return the geometric shape functions and also first and second derivatives w.r.t. global coordinates ...
Vector< double > *const & jacobian_lagrangian_stored_pt() const
Return a pointer to the vector of Jacobians of the mapping between the local and global (eulerian) co...
StorableShapeSolidElement()
Constructor: Set defaults.
Vector< DShape * > *const & dshape_lagrangian_stored_pt() const
Return a pointer to the vector of pointers to the stored first derivatives of the shape functions w...
void pre_compute_d2shape_local_at_knots()
Calculate the second derivatives of the shape functions w.r.t. local coordinates at the integration p...
StorableShapeElement(const StorableShapeElement &)
Broken copy constructor.
void pre_compute_J_eulerian_at_knots()
Calculate the Jacobian of the mapping from local to global coordinates at the integration points and ...
Vector< DShape * > * D2Shape_eulerian_stored_pt
Pointer to storage for the second derivatives of the shape functions w.r.t. global coordinates at int...
Vector< double > *& jacobian_eulerian_stored_pt()
Return a pointer to the vector of Jacobians of the mapping between the local and global (eulerian) co...
Vector< DShape * > * D2Shape_lagrangian_stored_pt
Pointer to storage for the pointers to the second derivatives of the shape functions w...
StorableShapeSolidElementBase()
Constructor: Set defaults: Nothing is stored.
void delete_all_dshape_eulerian_stored()
Delete all storage related to deriatives of shape fcts w.r.t. to global Eulerian coords.
void pre_compute_d2shape_eulerian_at_knots()
Calculate the first and second derivatives of the shape functions w.r.t global coordinates at the int...
bool Can_delete_dshape_lagrangian_stored
Boolean to determine whether the element can delete the stored shape function derivatives w...
Vector< double > *& jacobian_lagrangian_stored_pt()
Return a pointer to the vector of Jacobians of the mapping between the local and global (eulerian) co...
Vector< DShape * > *const & d2shape_eulerian_stored_pt() const
Return a pointer to the vector of pointers to the stored second derivatives of the shape functions w...
virtual ~StorableShapeSolidElement()
Destructor to clean up any allocated memory.
double dshape_eulerian_at_knot(const unsigned &ipt, Shape &psi, DShape &dpsidx) const
Return the geometric shape functions and also first derivatives w.r.t. global coordinates at the ipt-...
Vector< double > *const & jacobian_eulerian_stored_pt() const
Return a pointer to the vector of Jacobians of the mapping between the local and global (eulerian) co...
void set_integration_scheme(Integral *const &integral_pt)
Overload the set_integration_scheme to recompute any stored derivatives w.r.t. Lagrangian coordinates...
void broken_assign(const std::string &class_name)
Issue error message and terminate execution.
void delete_d2shape_local_stored()
Delete stored 2nd derivatives of shape functions w.r.t. to local coordinates.
void delete_d2shape_eulerian_stored()
Delete stored second derivatives of shape functions w.r.t. to global Eulerian coordinates.
Vector< DShape * > *const & dshape_eulerian_stored_pt() const
Return a pointer to the vector of pointers to the stored first derivatives of the shape functions w...
void delete_J_eulerian_stored()
Delete stored Jacobian of mapping between local and global (Eulerian) coordinates.
void pre_compute_dshape_local_at_knots()
Calculate the shape functions and first derivatives w.r.t. local coordinatess at the integration poin...
Vector< DShape * > * D2Shape_local_stored_pt
Pointer to storage for the pointers to the second derivatives of the nodal shape functions w...
void delete_all_shape_local_stored()
Delete all the objects stored in the [...]_local_stored_pt vectors and delete the vectors themselves...
virtual void set_integration_scheme(Integral *const &integral_pt)
Set the spatial integration scheme – overloaded from the finite element base class since a change in...
virtual ~StorableShapeSolidElementBase()
Destructor to clean up any allocated memory.
StorableShapeElementBase(const StorableShapeElementBase &)
Broken copy constructor.
void operator=(const StorableShapeSolidElementBase &)
Broken assignment operator.
void pre_compute_shape_at_knots()
Calculate the shape functions at the integration points and store the results internally.
void operator=(const StorableShapeElement &)
Broken assignment operator.
Shape *& shape_stored_pt(const unsigned &ipt)
Return a pointer to the stored shape function at the ipt-th integration point.
void operator=(const StorableShapeSolidElement &)
Broken assignment operator.
bool Can_delete_shape_local_stored
Boolean to determine whether the element can delete the stored local shape functions.
void shape_at_knot(const unsigned &ipt, Shape &psi) const
Return the geometric shape function at the ipt-th integration point.
void delete_shape_local_stored()
Delete stored shape functions.
SolidFiniteElement class.
Definition: elements.h:3361
virtual ~StorableShapeElement()
Empty virtual destructor.
Vector< Shape * > *const & shape_stored_pt() const
Return a pointer to the vector of pointers to the stored shape functions (const version) ...
void set_shape_local_stored_from_element(StorableShapeElementBase *const &element_pt)
Set the shape functions pointed to internally to be those pointed to by the FiniteElement element_pt ...
Vector< DShape * > *& d2shape_local_stored_pt()
Return a pointer to the vector of pointers to the stored second derivatives of the shape functions w...