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