oomph::TElementShape< 2, 4 > Class Reference

#include <Telements.h>

Public Member Functions

void local_coordinate_of_node (const unsigned &j, Vector< double > &s) const
 Return local coordinates of node j. More...
 
void shape (const Vector< double > &s, Shape &psi) const
 Shape function for specific TElement<2,4> More...
 
void dshape_local (const Vector< double > &s, Shape &psi, DShape &dpsids) const
 Derivatives of shape functions for specific TElement<2,4> More...
 
void d2shape_local (const Vector< double > &s, Shape &psi, DShape &dpsids, DShape &d2psids) const
 

Member Function Documentation

◆ d2shape_local()

void oomph::TElementShape< 2, 4 >::d2shape_local ( const Vector< double > &  s,
Shape psi,
DShape dpsids,
DShape d2psids 
) const
inline

Second derivatives of shape functions for specific TElement<2,4>: d2psids(i,0) = \( \partial^2 \psi_j / \partial s_0^2 \) d2psids(i,1) = \( \partial^2 \psi_j / \partial s_1^2 \) d2psids(i,2) = \( \partial^2 \psi_j / \partial s_0 \partial s_1 \)

850  {
851  throw OomphLibError(
853 
854  // ALH: Don't know why object qualifier is needed
855  this->dshape_local(s, psi, dpsids);
856 
857  d2psids(0, 0) = 9.0 * (3.0 * s[0] - 1.0);
858  d2psids(0, 1) = 0.0;
859  d2psids(0, 2) = 0.0;
860  d2psids(1, 0) = 0.0;
861  d2psids(1, 1) = 0.0;
862  d2psids(1, 2) = 9.0 * (3.0 * s[1] - 1.0);
863  d2psids(2, 0) = 9.0 * (2.0 - 3.0 * s[0] - 3.0 * s[1]);
864  d2psids(2, 1) = 9.0 * (2.0 - 3.0 * s[0] - 3.0 * s[1]);
865  d2psids(2, 2) = 9.0 * (2.0 - 3.0 * s[0] - 3.0 * s[1]);
866  d2psids(3, 0) = 27.0 * s[1];
867  d2psids(3, 1) = 0.0;
868  d2psids(3, 2) = 27.0 * s[0] - 4.5;
869  d2psids(4, 0) = 0.0;
870  d2psids(4, 1) = 27.0 * s[0];
871  d2psids(4, 2) = 27.0 * s[1] - 4.5;
872  d2psids(5, 0) = 0.0;
873  d2psids(5, 1) = 9.0 * (4.0 - 3.0 * s[0] - 9.0 * s[1]);
874  d2psids(5, 2) = 4.5 * (1.0 - 6.0 * s[1]);
875  d2psids(6, 0) = 27.0 * s[1];
876  d2psids(6, 1) = 9.0 * (6.0 * s[0] + 9.0 * s[1] - 5.0);
877  d2psids(6, 2) = 4.5 * (6.0 * s[0] + 12.0 * s[1] - 5.0);
878  d2psids(8, 0) = 9.0 * (4.0 - 9.0 * s[0] - 3.0 * s[1]);
879  d2psids(8, 1) = 0.0;
880  d2psids(8, 2) = 4.5 * (1.0 - 6.0 * s[0]);
881  d2psids(7, 0) = 9.0 * (9.0 * s[0] + 6.0 * s[1] - 5.0);
882  d2psids(7, 1) = 27.0 * s[0];
883  d2psids(7, 2) = 4.5 * (12.0 * s[0] + 6.0 * s[1] - 5.0);
884  d2psids(9, 0) = -54.0 * s[1];
885  d2psids(9, 1) = -54.0 * s[0];
886  d2psids(9, 2) = 27.0 - 54.0 * s[0] - 54.0 * s[1];
887  }
void dshape_local(const Vector< double > &s, Shape &psi, DShape &dpsids) const
Derivatives of shape functions for specific TElement<2,4>
Definition: Telements.h:805
RealScalar s
Definition: level1_cplx_impl.h:130
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, and s.

◆ dshape_local()

void oomph::TElementShape< 2, 4 >::dshape_local ( const Vector< double > &  s,
Shape psi,
DShape dpsids 
) const
inline

Derivatives of shape functions for specific TElement<2,4>

806  {
807  // ALH: Don't know why object qualifier is needed
808  this->shape(s, psi);
809 
810  dpsids(0, 0) = 13.5 * s[0] * s[0] - 9.0 * s[0] + 1.0;
811  dpsids(0, 1) = 0.0;
812  dpsids(1, 0) = 0.0;
813  dpsids(1, 1) = 13.5 * s[1] * s[1] - 9.0 * s[1] + 1.0;
814  dpsids(2, 0) = 0.5 * (36.0 * s[0] + 36.0 * s[1] - 27.0 * s[0] * s[0] -
815  27.0 * s[1] * s[1] - 54.0 * s[0] * s[1] - 11.0);
816  dpsids(2, 1) = 0.5 * (36.0 * s[0] + 36.0 * s[1] - 27.0 * s[0] * s[0] -
817  27.0 * s[1] * s[1] - 54.0 * s[0] * s[1] - 11.0);
818  dpsids(3, 0) = 27.0 * s[0] * s[1] - 4.5 * s[1];
819  dpsids(3, 1) = 4.5 * s[0] * (3.0 * s[0] - 1.0);
820  dpsids(4, 0) = 4.5 * s[1] * (3.0 * s[1] - 1.0);
821  dpsids(4, 1) = 27.0 * s[0] * s[1] - 4.5 * s[0];
822  dpsids(5, 0) = 4.5 * (s[1] - 3.0 * s[1] * s[1]);
823  dpsids(5, 1) =
824  4.5 * (s[0] - 6.0 * s[0] * s[1] - 9.0 * s[1] * s[1] + 8 * s[1] - 1.0);
825  dpsids(6, 0) = 4.5 * (6.0 * s[0] * s[1] - 5.0 * s[1] + 6.0 * s[1] * s[1]);
826  dpsids(6, 1) =
827  4.5 * (2.0 - 5.0 * s[0] + 3.0 * s[0] * s[0] + 12.0 * s[0] * s[1] -
828  10.0 * s[1] + 9.0 * s[1] * s[1]);
829  dpsids(7, 0) =
830  4.5 * (2.0 - 10.0 * s[0] + 9.0 * s[0] * s[0] + 12.0 * s[0] * s[1] -
831  5.0 * s[1] + 3.0 * s[1] * s[1]);
832  dpsids(7, 1) = 4.5 * (6.0 * s[0] * s[0] - 5.0 * s[0] + 6.0 * s[0] * s[1]);
833  dpsids(8, 0) =
834  4.5 * (s[1] - 6.0 * s[0] * s[1] - 9.0 * s[0] * s[0] + 8 * s[0] - 1.0);
835  dpsids(8, 1) = 4.5 * (s[0] - 3.0 * s[0] * s[0]);
836  dpsids(9, 0) = 27.0 * s[1] - 54.0 * s[0] * s[1] - 27.0 * s[1] * s[1];
837  dpsids(9, 1) = 27.0 * s[0] - 54.0 * s[0] * s[1] - 27.0 * s[0] * s[0];
838  }
void shape(const Vector< double > &s, Shape &psi) const
Shape function for specific TElement<2,4>
Definition: Telements.h:786

References s, and oomph::OneDimLagrange::shape().

◆ local_coordinate_of_node()

void oomph::TElementShape< 2, 4 >::local_coordinate_of_node ( const unsigned j,
Vector< double > &  s 
) const
inline

Return local coordinates of node j.

715  {
716  s.resize(2);
717 
718  switch (j)
719  {
720  case 0:
721  s[0] = 1.0;
722  s[1] = 0.0;
723  break;
724 
725  case 1:
726  s[0] = 0.0;
727  s[1] = 1.0;
728  break;
729 
730  case 2:
731  s[0] = 0.0;
732  s[1] = 0.0;
733  break;
734 
735  case 3:
736  s[0] = 2.0 / 3.0;
737  s[1] = 1.0 / 3.0;
738  break;
739 
740  case 4:
741  s[0] = 1.0 / 3.0;
742  s[1] = 2.0 / 3.0;
743  break;
744 
745  case 5:
746  s[0] = 0.0;
747  s[1] = 2.0 / 3.0;
748  break;
749 
750  case 6:
751  s[0] = 0.0;
752  s[1] = 1.0 / 3.0;
753  break;
754 
755  case 8:
756  s[0] = 2.0 / 3.0;
757  s[1] = 0.0;
758  break;
759 
760  case 7:
761  s[0] = 1.0 / 3.0;
762  s[1] = 0.0;
763  break;
764 
765  case 9:
766  s[0] = 1.0 / 3.0;
767  s[1] = 1.0 / 3.0;
768  break;
769 
770  default:
771  std::ostringstream error_message;
772  error_message
773  << "Element only has ten nodes; called with node number " << j
774  << std::endl;
775 
776  throw OomphLibError(error_message.str(),
779  }
780  }
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References j, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, and s.

◆ shape()

void oomph::TElementShape< 2, 4 >::shape ( const Vector< double > &  s,
Shape psi 
) const
inline

Shape function for specific TElement<2,4>

787  {
788  psi[0] = 0.5 * s[0] * (3.0 * s[0] - 2.0) * (3.0 * s[0] - 1.0);
789  psi[1] = 0.5 * s[1] * (3.0 * s[1] - 2.0) * (3.0 * s[1] - 1.0);
790  psi[2] = 0.5 * (1.0 - s[0] - s[1]) * (1.0 - 3.0 * s[0] - 3.0 * s[1]) *
791  (2.0 - 3.0 * s[0] - 3.0 * s[1]);
792  psi[3] = 4.5 * s[0] * s[1] * (3.0 * s[0] - 1.0);
793  psi[4] = 4.5 * s[0] * s[1] * (3.0 * s[1] - 1.0);
794  psi[5] = 4.5 * s[1] * (1.0 - s[0] - s[1]) * (3.0 * s[1] - 1.0);
795  psi[6] =
796  4.5 * s[1] * (1.0 - s[0] - s[1]) * (3.0 * (1.0 - s[0] - s[1]) - 1.0);
797  psi[7] = 4.5 * s[0] * (1.0 - s[0] - s[1]) * (2.0 - 3 * s[0] - 3 * s[1]);
798  psi[8] = 4.5 * s[0] * (1.0 - s[0] - s[1]) * (3.0 * s[0] - 1.0);
799  psi[9] = 27.0 * s[0] * s[1] * (1.0 - s[0] - s[1]);
800  }

References s.


The documentation for this class was generated from the following file: