xref: /phasta/shapeFunction/src/parDrv.c (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1 /*-------------------------------------------------------------------------
2   Scientific Computation Research Center, RPI, Troy NY
3   (C) Copyright 1995, RPI-SCOREC
4 
5   Project  : shapeFuntions
6   Author(s): Saikat Dey
7   Creation : Oct., 95
8   Modifi.  :
9   Function :
10              return the derivative of the parametric transformation from
11              element to entity coordinate systems.
12 -------------------------------------------------------------------------*/
13 
14 #include <math.h>
15 #include "shapeFuncInternals.h"
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 static int SF_par_TABLE[][3][2] = {
22    {{0,0},{0,0},{0,0}},
23    {{1,0},{0,1},{0,0}},
24    {{1,0},{0,0},{0,1}},
25    {{1,-1},{0,-1},{0,-1}},
26    {{0,0},{0,0},{0,0}},
27    {{0,0},{0,0},{0,0}},
28    {{0,0},{0,0},{0,0}},
29    {{0,0},{0,0},{0,0}},
30    {{0,0},{0,0},{0,0}},
31    {{0,0},{0,0},{0,0}},
32    {{0,1},{1,0},{0,0}},
33    {{0,0},{0,0},{0,0}},
34    {{0,0},{1,0},{0,1}},
35    {{0,-1},{1,-1},{0,-1}},
36    {{0,0},{0,0},{0,0}},
37    {{0,0},{0,0},{0,0}},
38    {{0,0},{0,0},{0,0}},
39    {{0,0},{0,0},{0,0}},
40    {{0,0},{0,0},{0,0}},
41    {{0,0},{0,0},{0,0}},
42    {{0,1},{0,0},{1,0}},
43    {{0,0},{0,1},{1,0}},
44    {{0,0},{0,0},{0,0}},
45    {{0,-1},{0,-1},{1,-1}},
46    {{0,0},{0,0},{0,0}},
47    {{0,0},{0,0},{0,0}},
48    {{0,0},{0,0},{0,0}},
49    {{0,0},{0,0},{0,0}},
50    {{0,0},{0,0},{0,0}},
51    {{0,0},{0,0},{0,0}},
52    {{-1,1},{-1,0},{-1,0}},
53    {{-1,0},{-1,1},{-1,0}},
54    {{-1,0},{-1,0},{-1,1}}
55 };
56 
E_parDrv(int i,int j,int type,double drv[][2])57 int E_parDrv(int i, int j, int type, double drv[][2]) {
58   int ind[2],ii;
59   /* find out type of element */
60   if( type == Sedge )
61     return 0;
62   else if( type == Stri ) {
63     drv[0][0] = drv[0][1] = drv[1][0] = drv[1][1] = 0.0;
64     if( i == 0 && j == 1 ) { /* edge +0 , xi = s-r */
65       drv[0][0] = 1.0;
66       drv[1][1] = 1.0;
67     } else if( i == 1 && j == 0 ) { /* edge -0 , xi = r-s */
68       drv[0][1] = 1.0;
69       drv[1][0] = 1.0;
70     } else if( i == 1 && j == 2 ) { /* edge +1 , xi = t-s */
71       drv[0][1] = -1.0;
72       drv[1][0] = 1.0;
73       drv[1][1] = -1.0;
74     } else if( i == 2 && j == 1 ) { /* edge -1 , xi = s-t */
75       drv[0][0] = -1.0;
76       drv[1][0] = -1.0;
77       drv[1][1] = 1.0;
78     } else if( i == 2 && j == 0 ) { /* edge +2 , xi = r-t */
79       drv[0][0] = -1.0;
80       drv[0][1] = 1.0;
81       drv[1][0] = -1.0;
82     } else if( i == 0 && j == 2 ) { /* edge -2 , xi = t-r */
83       drv[0][0] = 1.0;
84       drv[0][1] = -1.0;
85       drv[1][1] = -1.0;
86     } else
87       return 0;
88     return 1;
89   } else if( type == Stet ) {
90     drv[0][0]=drv[0][1]=drv[1][0]=drv[1][1]=drv[2][0]=drv[2][1]=0.0;
91     ind[0] = i; ind[1] = j;
92     for(ii=0; ii<2; ii++) {
93       if(ind[ii] == 0) /* r'= r */
94 	drv[0][ii] = 1.0;
95       else if(ind[ii] == 1) /* r'= s */
96 	drv[1][ii] = 1.0;
97       else if(ind[ii] == 2) /* r'= t */
98 	drv[2][ii] = 1.0;
99       else if(ind[ii] == 3) /* r'= 1-r-s-t */
100 	drv[0][ii]=drv[1][ii]=drv[2][ii]=-1.0;
101     }
102     return 1;
103   } else
104     return 0;
105 }
106 
F_parDrv(int i,int j,int k,int type,int (** drv)[2])107 int F_parDrv(int i, int j, int k, int type, int (**drv)[2]) {
108   int index = 10*i + j;
109   *drv = SF_par_TABLE[index] ;
110   return 1;
111 }
112 
113 #ifdef __cplusplus
114 }
115 #endif
116