1 /**********************************************************************/
2 /* Interpolation points for a tet based on the Chen - Babuska paper. */
3 /**********************************************************************/
4 #include <stdio.h>
5 #include <stdlib.h>
6
7 #include <FCMangle.h>
8
9 typedef double DARR4[4];
10
11 /* 4-point (p = 1) */
12 static double pts4[][4] =
13 {
14 {1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000},
15 {0.0000000000, 1.0000000000, 0.0000000000, 0.0000000000},
16 {0.0000000000, 0.0000000000, 1.0000000000, 0.0000000000},
17 {0.0000000000, 0.0000000000, 0.0000000000, 1.0000000000}
18 };
19
20 /* 10-point (p = 2) */
21 static double pts10[][4] =
22 {
23 {1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000},
24 {0.0000000000, 1.0000000000, 0.0000000000, 0.0000000000},
25 {0.0000000000, 0.0000000000, 1.0000000000, 0.0000000000},
26 {0.0000000000, 0.0000000000, 0.0000000000, 1.0000000000},
27 {0.5000000000, 0.5000000000, 0.0000000000, 0.0000000000},
28 {0.0000000000, 0.5000000000, 0.5000000000, 0.0000000000},
29 {0.5000000000, 0.0000000000, 0.5000000000, 0.0000000000},
30 {0.5000000000, 0.0000000000, 0.0000000000, 0.5000000000},
31 {0.0000000000, 0.5000000000, 0.0000000000, 0.5000000000},
32 {0.0000000000, 0.0000000000, 0.5000000000, 0.5000000000}
33 };
34
35 /* 20-point (p = 3) */
36 static double pts20[][4] =
37 {
38 {1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000},
39 {0.0000000000, 1.0000000000, 0.0000000000, 0.0000000000},
40 {0.0000000000, 0.0000000000, 1.0000000000, 0.0000000000},
41 {0.0000000000, 0.0000000000, 0.0000000000, 1.0000000000},
42 {0.7236067977, 0.2763932023, 0.0000000000, 0.0000000000},
43 {0.2763932023, 0.7236067977, 0.0000000000, 0.0000000000},
44 {0.0000000000, 0.7236067977, 0.2763932023, 0.0000000000},
45 {0.0000000000, 0.2763932023, 0.7236067977, 0.0000000000},
46 {0.7236067977, 0.0000000000, 0.2763932023, 0.0000000000},
47 {0.2763932023, 0.0000000000, 0.7236067977, 0.0000000000},
48 {0.7236067977, 0.0000000000, 0.0000000000, 0.2763932023},
49 {0.2763932023, 0.0000000000, 0.0000000000, 0.7236067977},
50 {0.0000000000, 0.7236067977, 0.0000000000, 0.2763932023},
51 {0.0000000000, 0.2763932023, 0.0000000000, 0.7236067977},
52 {0.0000000000, 0.0000000000, 0.7236067977, 0.2763932023},
53 {0.0000000000, 0.0000000000, 0.2763932023, 0.7236067977},
54 {0.3333333333, 0.3333333333, 0.3333333333, 0.0000000000},
55 {0.3333333333, 0.3333333333, 0.0000000000, 0.3333333333},
56 {0.3333333333, 0.0000000000, 0.3333333333, 0.3333333333},
57 {0.0000000000, 0.3333333333, 0.3333333333, 0.3333333333}
58 };
59
60 /* 35-point (p = 4) */
61 static double pts35[][4] =
62 {
63 {1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000},
64 {0.0000000000, 1.0000000000, 0.0000000000, 0.0000000000},
65 {0.0000000000, 0.0000000000, 1.0000000000, 0.0000000000},
66 {0.0000000000, 0.0000000000, 0.0000000000, 1.0000000000},
67 {0.8273268354, 0.1726731646, 0.0000000000, 0.0000000000},
68 {0.5000000000, 0.5000000000, 0.0000000000, 0.0000000000},
69 {0.1726731646, 0.8273268354, 0.0000000000, 0.0000000000},
70 {0.0000000000, 0.8273268354, 0.1726731646, 0.0000000000},
71 {0.0000000000, 0.5000000000, 0.5000000000, 0.0000000000},
72 {0.0000000000, 0.1726731646, 0.8273268354, 0.0000000000},
73 {0.8273268354, 0.0000000000, 0.1726731646, 0.0000000000},
74 {0.5000000000, 0.0000000000, 0.5000000000, 0.0000000000},
75 {0.1726731646, 0.0000000000, 0.8273268354, 0.0000000000},
76 {0.8273268354, 0.0000000000, 0.0000000000, 0.1726731646},
77 {0.5000000000, 0.0000000000, 0.0000000000, 0.5000000000},
78 {0.1726731646, 0.0000000000, 0.0000000000, 0.8273268354},
79 {0.0000000000, 0.8273268354, 0.0000000000, 0.1726731646},
80 {0.0000000000, 0.5000000000, 0.0000000000, 0.5000000000},
81 {0.0000000000, 0.1726731646, 0.0000000000, 0.8273268354},
82 {0.0000000000, 0.0000000000, 0.8273268354, 0.1726731646},
83 {0.0000000000, 0.0000000000, 0.5000000000, 0.5000000000},
84 {0.0000000000, 0.0000000000, 0.1726731646, 0.8273268354},
85 {0.2165423725, 0.2165423725, 0.5669152550, 0.0000000000},
86 {0.2165423725, 0.5669152550, 0.2165423725, 0.0000000000},
87 {0.5669152550, 0.2165423725, 0.2165423725, 0.0000000000},
88 {0.2165423725, 0.5669152550, 0.0000000000, 0.2165423725},
89 {0.5669152550, 0.2165423725, 0.0000000000, 0.2165423725},
90 {0.2165423725, 0.2165423725, 0.0000000000, 0.5669152550},
91 {0.5669152550, 0.0000000000, 0.2165423725, 0.2165423725},
92 {0.2165423725, 0.0000000000, 0.2165423725, 0.5669152550},
93 {0.2165423725, 0.0000000000, 0.5669152550, 0.2165423725},
94 {0.0000000000, 0.2165423725, 0.2165423725, 0.5669152550},
95 {0.0000000000, 0.2165423725, 0.5669152550, 0.2165423725},
96 {0.0000000000, 0.5669152550, 0.2165423725, 0.2165423725},
97 {0.2500000000, 0.2500000000, 0.2500000000, 0.2500000000}
98 };
99
100 /* 56-point (p = 5) */
101 static double pts56[][4] =
102 {
103 {1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000},
104 {0.0000000000, 1.0000000000, 0.0000000000, 0.0000000000},
105 {0.0000000000, 0.0000000000, 1.0000000000, 0.0000000000},
106 {0.0000000000, 0.0000000000, 0.0000000000, 1.0000000000},
107 {0.8825276620, 0.1174723380, 0.0000000000, 0.0000000000},
108 {0.6426157582, 0.3573842418, 0.0000000000, 0.0000000000},
109 {0.3573842418, 0.6426157582, 0.0000000000, 0.0000000000},
110 {0.1174723380, 0.8825276620, 0.0000000000, 0.0000000000},
111 {0.0000000000, 0.8825276620, 0.1174723380, 0.0000000000},
112 {0.0000000000, 0.6426157582, 0.3573842418, 0.0000000000},
113 {0.0000000000, 0.3573842418, 0.6426157582, 0.0000000000},
114 {0.0000000000, 0.1174723380, 0.8825276620, 0.0000000000},
115 {0.8825276620, 0.0000000000, 0.1174723380, 0.0000000000},
116 {0.6426157582, 0.0000000000, 0.3573842418, 0.0000000000},
117 {0.3573842418, 0.0000000000, 0.6426157582, 0.0000000000},
118 {0.1174723380, 0.0000000000, 0.8825276620, 0.0000000000},
119 {0.8825276620, 0.0000000000, 0.0000000000, 0.1174723380},
120 {0.6426157582, 0.0000000000, 0.0000000000, 0.3573842418},
121 {0.3573842418, 0.0000000000, 0.0000000000, 0.6426157582},
122 {0.1174723380, 0.0000000000, 0.0000000000, 0.8825276620},
123 {0.0000000000, 0.8825276620, 0.0000000000, 0.1174723380},
124 {0.0000000000, 0.6426157582, 0.0000000000, 0.3573842418},
125 {0.0000000000, 0.3573842418, 0.0000000000, 0.6426157582},
126 {0.0000000000, 0.1174723380, 0.0000000000, 0.8825276620},
127 {0.0000000000, 0.0000000000, 0.8825276620, 0.1174723380},
128 {0.0000000000, 0.0000000000, 0.6426157582, 0.3573842418},
129 {0.0000000000, 0.0000000000, 0.3573842418, 0.6426157582},
130 {0.0000000000, 0.0000000000, 0.1174723380, 0.8825276620},
131 {0.1480194978, 0.1480194978, 0.7039610043, 0.0000000000},
132 {0.1480194978, 0.7039610043, 0.1480194978, 0.0000000000},
133 {0.7039610043, 0.1480194978, 0.1480194978, 0.0000000000},
134 {0.4208255904, 0.4208255904, 0.1583488191, 0.0000000000},
135 {0.4208255904, 0.1583488191, 0.4208255904, 0.0000000000},
136 {0.1583488191, 0.4208255904, 0.4208255904, 0.0000000000},
137 {0.1480194978, 0.7039610043, 0.0000000000, 0.1480194978},
138 {0.7039610043, 0.1480194978, 0.0000000000, 0.1480194978},
139 {0.1480194978, 0.1480194978, 0.0000000000, 0.7039610043},
140 {0.4208255904, 0.1583488191, 0.0000000000, 0.4208255904},
141 {0.1583488191, 0.4208255904, 0.0000000000, 0.4208255904},
142 {0.4208255904, 0.4208255904, 0.0000000000, 0.1583488191},
143 {0.7039610043, 0.0000000000, 0.1480194978, 0.1480194978},
144 {0.1480194978, 0.0000000000, 0.1480194978, 0.7039610043},
145 {0.1480194978, 0.0000000000, 0.7039610043, 0.1480194978},
146 {0.1583488191, 0.0000000000, 0.4208255904, 0.4208255904},
147 {0.4208255904, 0.0000000000, 0.4208255904, 0.1583488191},
148 {0.4208255904, 0.0000000000, 0.1583488191, 0.4208255904},
149 {0.0000000000, 0.1480194978, 0.1480194978, 0.7039610043},
150 {0.0000000000, 0.1480194978, 0.7039610043, 0.1480194978},
151 {0.0000000000, 0.7039610043, 0.1480194978, 0.1480194978},
152 {0.0000000000, 0.4208255904, 0.4208255904, 0.1583488191},
153 {0.0000000000, 0.4208255904, 0.1583488191, 0.4208255904},
154 {0.0000000000, 0.1583488191, 0.4208255904, 0.4208255904},
155 {0.1779987615, 0.1779987615, 0.1779987615, 0.4660037155},
156 {0.1779987615, 0.1779987615, 0.4660037155, 0.1779987615},
157 {0.1779987615, 0.4660037155, 0.1779987615, 0.1779987615},
158 {0.4660037155, 0.1779987615, 0.1779987615, 0.1779987615}
159 };
160
161 /* 84-point (p = 6) */
162 static double pts84[][4] =
163 {
164 {1.0000000000, 0.0000000000, 0.0000000000, 0.0000000000},
165 {0.0000000000, 1.0000000000, 0.0000000000, 0.0000000000},
166 {0.0000000000, 0.0000000000, 1.0000000000, 0.0000000000},
167 {0.0000000000, 0.0000000000, 0.0000000000, 1.0000000000},
168 {0.9151119481, 0.0848880519, 0.0000000000, 0.0000000000},
169 {0.7344243967, 0.2655756033, 0.0000000000, 0.0000000000},
170 {0.5000000000, 0.5000000000, 0.0000000000, 0.0000000000},
171 {0.2655756033, 0.7344243967, 0.0000000000, 0.0000000000},
172 {0.0848880519, 0.9151119481, 0.0000000000, 0.0000000000},
173 {0.0000000000, 0.9151119481, 0.0848880519, 0.0000000000},
174 {0.0000000000, 0.7344243967, 0.2655756033, 0.0000000000},
175 {0.0000000000, 0.5000000000, 0.5000000000, 0.0000000000},
176 {0.0000000000, 0.2655756033, 0.7344243967, 0.0000000000},
177 {0.0000000000, 0.0848880519, 0.9151119481, 0.0000000000},
178 {0.9151119481, 0.0000000000, 0.0848880519, 0.0000000000},
179 {0.7344243967, 0.0000000000, 0.2655756033, 0.0000000000},
180 {0.5000000000, 0.0000000000, 0.5000000000, 0.0000000000},
181 {0.2655756033, 0.0000000000, 0.7344243967, 0.0000000000},
182 {0.0848880519, 0.0000000000, 0.9151119481, 0.0000000000},
183 {0.9151119481, 0.0000000000, 0.0000000000, 0.0848880519},
184 {0.7344243967, 0.0000000000, 0.0000000000, 0.2655756033},
185 {0.5000000000, 0.0000000000, 0.0000000000, 0.5000000000},
186 {0.2655756033, 0.0000000000, 0.0000000000, 0.7344243967},
187 {0.0848880519, 0.0000000000, 0.0000000000, 0.9151119481},
188 {0.0000000000, 0.9151119481, 0.0000000000, 0.0848880519},
189 {0.0000000000, 0.7344243967, 0.0000000000, 0.2655756033},
190 {0.0000000000, 0.5000000000, 0.0000000000, 0.5000000000},
191 {0.0000000000, 0.2655756033, 0.0000000000, 0.7344243967},
192 {0.0000000000, 0.0848880519, 0.0000000000, 0.9151119481},
193 {0.0000000000, 0.0000000000, 0.9151119481, 0.0848880519},
194 {0.0000000000, 0.0000000000, 0.7344243967, 0.2655756033},
195 {0.0000000000, 0.0000000000, 0.5000000000, 0.5000000000},
196 {0.0000000000, 0.0000000000, 0.2655756033, 0.7344243967},
197 {0.0000000000, 0.0000000000, 0.0848880519, 0.9151119481},
198 {0.3162696586, 0.5665493829, 0.1171809585, 0.0000000000},
199 {0.5665493829, 0.3162696586, 0.1171809585, 0.0000000000},
200 {0.5665493792, 0.1171809548, 0.3162696660, 0.0000000000},
201 {0.1171809548, 0.5665493792, 0.3162696660, 0.0000000000},
202 {0.1171809641, 0.3162696752, 0.5665493608, 0.0000000000},
203 {0.3162696752, 0.1171809641, 0.5665493608, 0.0000000000},
204 {0.1063355939, 0.1063355939, 0.7873288122, 0.0000000000},
205 {0.1063355939, 0.7873288122, 0.1063355939, 0.0000000000},
206 {0.7873288122, 0.1063355939, 0.1063355939, 0.0000000000},
207 {0.3333333333, 0.3333333333, 0.3333333333, 0.0000000000},
208 {0.5665493829, 0.1171809585, 0.0000000000, 0.3162696586},
209 {0.3162696586, 0.1171809585, 0.0000000000, 0.5665493829},
210 {0.1171809548, 0.3162696660, 0.0000000000, 0.5665493792},
211 {0.5665493792, 0.3162696660, 0.0000000000, 0.1171809548},
212 {0.3162696752, 0.5665493608, 0.0000000000, 0.1171809641},
213 {0.1171809641, 0.5665493608, 0.0000000000, 0.3162696752},
214 {0.1063355939, 0.7873288122, 0.0000000000, 0.1063355939},
215 {0.7873288122, 0.1063355939, 0.0000000000, 0.1063355939},
216 {0.1063355939, 0.1063355939, 0.0000000000, 0.7873288122},
217 {0.3333333333, 0.3333333333, 0.0000000000, 0.3333333333},
218 {0.1171809585, 0.0000000000, 0.3162696586, 0.5665493829},
219 {0.1171809585, 0.0000000000, 0.5665493829, 0.3162696586},
220 {0.3162696660, 0.0000000000, 0.5665493792, 0.1171809548},
221 {0.3162696660, 0.0000000000, 0.1171809548, 0.5665493792},
222 {0.5665493608, 0.0000000000, 0.1171809641, 0.3162696752},
223 {0.5665493608, 0.0000000000, 0.3162696752, 0.1171809641},
224 {0.7873288122, 0.0000000000, 0.1063355939, 0.1063355939},
225 {0.1063355939, 0.0000000000, 0.1063355939, 0.7873288122},
226 {0.1063355939, 0.0000000000, 0.7873288122, 0.1063355939},
227 {0.3333333333, 0.0000000000, 0.3333333333, 0.3333333333},
228 {0.0000000000, 0.3162696586, 0.5665493829, 0.1171809585},
229 {0.0000000000, 0.5665493829, 0.3162696586, 0.1171809585},
230 {0.0000000000, 0.5665493792, 0.1171809548, 0.3162696660},
231 {0.0000000000, 0.1171809548, 0.5665493792, 0.3162696660},
232 {0.0000000000, 0.1171809641, 0.3162696752, 0.5665493608},
233 {0.0000000000, 0.3162696752, 0.1171809641, 0.5665493608},
234 {0.0000000000, 0.1063355939, 0.1063355939, 0.7873288122},
235 {0.0000000000, 0.1063355939, 0.7873288122, 0.1063355939},
236 {0.0000000000, 0.7873288122, 0.1063355939, 0.1063355939},
237 {0.0000000000, 0.3333333333, 0.3333333333, 0.3333333333},
238 {0.3630696293, 0.3630696293, 0.1369303707, 0.1369303707},
239 {0.3630696293, 0.1369303707, 0.1369303707, 0.3630696293},
240 {0.3630696293, 0.1369303707, 0.3630696293, 0.1369303707},
241 {0.1369303707, 0.3630696293, 0.1369303707, 0.3630696293},
242 {0.1369303707, 0.1369303707, 0.3630696293, 0.3630696293},
243 {0.1369303707, 0.3630696293, 0.3630696293, 0.1369303707},
244 {0.1293440398, 0.1293440398, 0.1293440398, 0.6119678806},
245 {0.1293440398, 0.1293440398, 0.6119678806, 0.1293440398},
246 {0.1293440398, 0.6119678806, 0.1293440398, 0.1293440398},
247 {0.6119678806, 0.1293440398, 0.1293440398, 0.1293440398}
248 };
249
250 /* return the requested number of interpolation points */
251 #define getintpnts FortranCInterface_GLOBAL_(getintpnts, GETINTPNTS)
252
getintpnts(double points[][3],int * npts)253 void getintpnts(double points[][3], int *npts)
254 {
255 int i, j;
256 DARR4 *pnts;
257
258 switch (*npts){
259 case 4:
260 pnts = pts4;
261 break;
262 case 10:
263 pnts = pts10;
264 break;
265 case 20:
266 pnts = pts20;
267 break;
268 case 35:
269 pnts = pts35;
270 break;
271 case 56:
272 pnts = pts56;
273 break;
274 case 84:
275 pnts = pts84;
276 break;
277 default:
278 fprintf(stderr,"\n%d interpolation points not supported...\n",*npts);
279 fprintf(stderr,"\ngive {4,10,20,35,56,84}\nexiting...\n");
280 exit(-1);
281 }
282
283 /* copy points to the fortran array */
284 for (i=0; i < *npts; i++) {
285 for (j=0; j < 3; j++) {
286 points[i][j] = pnts[i][j];
287 }
288 }
289
290 return;
291 }
292
293
294
295