xref: /phasta/shapeFunction/src/Lagrange.c (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen #include <stdio.h>
2*59599516SKenneth E. Jansen 
3*59599516SKenneth E. Jansen #ifdef __cplusplus
4*59599516SKenneth E. Jansen extern "C" {
5*59599516SKenneth E. Jansen #endif
6*59599516SKenneth E. Jansen 
7*59599516SKenneth E. Jansen void TetQuadLag(double *par, double *N,double dN[][3]);
8*59599516SKenneth E. Jansen 
TetShapeAndDrvL(int p,double par[3],double N[],double dN[][3])9*59599516SKenneth E. Jansen int TetShapeAndDrvL(int p,double par[3],double N[],double dN[][3]) {
10*59599516SKenneth E. Jansen   /*
11*59599516SKenneth E. Jansen   static int TetEMAP[6][2]={{0,1},{1,2},{2,0},{0,3},{1,3},{2,3}};
12*59599516SKenneth E. Jansen   static int TetFMAP[4][3]={{0,1,2},{0,3,1},{1,3,2},{0,2,3}};
13*59599516SKenneth E. Jansen   */
14*59599516SKenneth E. Jansen   static int Nshp[3]={4,10,20};
15*59599516SKenneth E. Jansen   if( p == 2) {
16*59599516SKenneth E. Jansen     TetQuadLag(par,N,dN);
17*59599516SKenneth E. Jansen   } else {
18*59599516SKenneth E. Jansen     fprintf(stderr,"p != 2 Not implemented for lagrange\n");
19*59599516SKenneth E. Jansen   }
20*59599516SKenneth E. Jansen   return Nshp[p];
21*59599516SKenneth E. Jansen }
22*59599516SKenneth E. Jansen 
TetQuadLag(double * par,double * N,double dN[][3])23*59599516SKenneth E. Jansen void TetQuadLag(double *par, double *N,double dN[][3]) {
24*59599516SKenneth E. Jansen   double r=par[0],s=par[1],t=par[2],t8,t4;
25*59599516SKenneth E. Jansen   t8 = 1.0-r-s-t;
26*59599516SKenneth E. Jansen   N[0] = (2.0*r-1.0)*r;
27*59599516SKenneth E. Jansen   N[1] = (2.0*s-1.0)*s;
28*59599516SKenneth E. Jansen   N[2] = (2.0*t-1.0)*t;
29*59599516SKenneth E. Jansen   N[3] = (1.0-2.0*r-2.0*s-2.0*t)*t8;
30*59599516SKenneth E. Jansen   N[4] = 4.0*r*s;
31*59599516SKenneth E. Jansen   N[5] = 4.0*s*t;
32*59599516SKenneth E. Jansen   N[6] = 4.0*t*r;
33*59599516SKenneth E. Jansen   N[7] = 4.0*r*t8;
34*59599516SKenneth E. Jansen   N[8] = 4.0*s*t8;
35*59599516SKenneth E. Jansen   N[9] = 4.0*t*t8;
36*59599516SKenneth E. Jansen 
37*59599516SKenneth E. Jansen   t4 = -3.0+4.0*r+4.0*s+4.0*t;
38*59599516SKenneth E. Jansen   dN[0][0] = 4.0*r-1.0;
39*59599516SKenneth E. Jansen   dN[0][1] = 0.0;
40*59599516SKenneth E. Jansen   dN[0][2] = 0.0;
41*59599516SKenneth E. Jansen   dN[1][0] = 0.0;
42*59599516SKenneth E. Jansen   dN[1][1] = 4.0*s-1.0;
43*59599516SKenneth E. Jansen   dN[1][2] = 0.0;
44*59599516SKenneth E. Jansen   dN[2][0] = 0.0;
45*59599516SKenneth E. Jansen   dN[2][1] = 0.0;
46*59599516SKenneth E. Jansen   dN[2][2] = 4.0*t-1.0;
47*59599516SKenneth E. Jansen   dN[3][0] = t4;
48*59599516SKenneth E. Jansen   dN[3][1] = t4;
49*59599516SKenneth E. Jansen   dN[3][2] = t4;
50*59599516SKenneth E. Jansen   dN[4][0] = 4.0*s;
51*59599516SKenneth E. Jansen   dN[4][1] = 4.0*r;
52*59599516SKenneth E. Jansen   dN[4][2] = 0.0;
53*59599516SKenneth E. Jansen   dN[5][0] = 0.0;
54*59599516SKenneth E. Jansen   dN[5][1] = 4.0*t;
55*59599516SKenneth E. Jansen   dN[5][2] = 4.0*s;
56*59599516SKenneth E. Jansen   dN[6][0] = 4.0*t;
57*59599516SKenneth E. Jansen   dN[6][1] = 0.0;
58*59599516SKenneth E. Jansen   dN[6][2] = 4.0*r;
59*59599516SKenneth E. Jansen   dN[7][0] = 4.0-8.0*r-4.0*s-4.0*t;
60*59599516SKenneth E. Jansen   dN[7][1] = -4.0*r;
61*59599516SKenneth E. Jansen   dN[7][2] = -4.0*r;
62*59599516SKenneth E. Jansen   dN[8][0] = -4.0*s;
63*59599516SKenneth E. Jansen   dN[8][1] = 4.0-4.0*r-8.0*s-4.0*t;
64*59599516SKenneth E. Jansen   dN[8][2] = -4.0*s;
65*59599516SKenneth E. Jansen   dN[9][0] = -4.0*t;
66*59599516SKenneth E. Jansen   dN[9][1] = -4.0*t;
67*59599516SKenneth E. Jansen   dN[9][2] = 4.0-4.0*r-4.0*s-8.0*t;
68*59599516SKenneth E. Jansen }
69*59599516SKenneth E. Jansen 
70*59599516SKenneth E. Jansen #ifdef __cplusplus
71*59599516SKenneth E. Jansen }
72*59599516SKenneth E. Jansen #endif
73*59599516SKenneth E. Jansen 
74