xref: /phasta/shapeFunction/src/TriShapeAndDrv.cc (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen /* calculate the shape functions and their derivatives for
2*59599516SKenneth E. Jansen    a triangular face
3*59599516SKenneth E. Jansen    */
4*59599516SKenneth E. Jansen 
TriShapeAndDrv(int p,double par[2],double N[],double dN[][2])5*59599516SKenneth E. Jansen int TriShapeAndDrv(int p,double par[2],double N[],double dN[][2]){
6*59599516SKenneth E. Jansen   int i,j,nshp=0;
7*59599516SKenneth E. Jansen   double L[3];
8*59599516SKenneth E. Jansen 
9*59599516SKenneth E. Jansen   if(p != 2)
10*59599516SKenneth E. Jansen     return nshp;
11*59599516SKenneth E. Jansen   L[0]=par[0];
12*59599516SKenneth E. Jansen   L[1]=par[1];
13*59599516SKenneth E. Jansen   L[2]=1.0e0-par[0]-par[1];
14*59599516SKenneth E. Jansen 
15*59599516SKenneth E. Jansen   /* define shape functions for a quadratic triangle */
16*59599516SKenneth E. Jansen 
17*59599516SKenneth E. Jansen   /* collect all vertex modes */
18*59599516SKenneth E. Jansen   for(i=0; i<3; i++) {
19*59599516SKenneth E. Jansen     N[i] = L[i];
20*59599516SKenneth E. Jansen     if(i==2)
21*59599516SKenneth E. Jansen       dN[i][0]=dN[i][1]=-1.0e0;
22*59599516SKenneth E. Jansen     else {
23*59599516SKenneth E. Jansen       for(j=0; j<2; j++) {
24*59599516SKenneth E. Jansen 	if(i==j)
25*59599516SKenneth E. Jansen 	  dN[i][j] = 1.0e0;
26*59599516SKenneth E. Jansen 	else
27*59599516SKenneth E. Jansen 	  dN[i][j] = 0.0e0;
28*59599516SKenneth E. Jansen       }
29*59599516SKenneth E. Jansen     }
30*59599516SKenneth E. Jansen   }
31*59599516SKenneth E. Jansen   nshp=3;
32*59599516SKenneth E. Jansen   if( p > 1 ){
33*59599516SKenneth E. Jansen     /* collect edge modes (only quadratic for now) */
34*59599516SKenneth E. Jansen     N[3] = -2.0e0*L[0]*L[1];
35*59599516SKenneth E. Jansen     N[4] = -2.0e0*L[1]*L[2];
36*59599516SKenneth E. Jansen     N[5] = -2.0e0*L[0]*L[2];
37*59599516SKenneth E. Jansen     dN[3][0] = -2.0e0*L[1];
38*59599516SKenneth E. Jansen     dN[3][1] = -2.0e0*L[0];
39*59599516SKenneth E. Jansen     dN[4][0] = 2.0e0*L[1];
40*59599516SKenneth E. Jansen     dN[4][1] = -2.0e0+2.0e0*L[0]+4.0e0*L[1];
41*59599516SKenneth E. Jansen     dN[5][0] = -2.0e0+4.0e0*L[0]+2.0e0*L[1];
42*59599516SKenneth E. Jansen     dN[5][1] = 2.0e0*L[0];
43*59599516SKenneth E. Jansen     nshp=6;
44*59599516SKenneth E. Jansen   }
45*59599516SKenneth E. Jansen   return nshp;
46*59599516SKenneth E. Jansen }
47*59599516SKenneth E. Jansen 
48*59599516SKenneth E. Jansen 
49*59599516SKenneth E. Jansen 
50*59599516SKenneth E. Jansen 
51