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