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. Jansenint 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