xref: /phasta/phSolver/common/sympyr.c (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen #include <stdlib.h>
2*59599516SKenneth E. Jansen 
3*59599516SKenneth E. Jansen #include <FCMangle.h>
4*59599516SKenneth E. Jansen #define sympyr FortranCInterface_GLOBAL_(sympyr, SYMPYR)
5*59599516SKenneth E. Jansen 
6*59599516SKenneth E. Jansen typedef double DARR4[4];
7*59599516SKenneth E. Jansen 
8*59599516SKenneth E. Jansen int pyrIntPnt(int,DARR4**,double **);
9*59599516SKenneth E. Jansen 
10*59599516SKenneth E. Jansen sympyr(int *n1, double pt[][4], double wt[], int *err)
11*59599516SKenneth E. Jansen {
12*59599516SKenneth E. Jansen   double *lwt;
13*59599516SKenneth E. Jansen   DARR4 *lpt;
14*59599516SKenneth E. Jansen   int i,j;
15*59599516SKenneth E. Jansen   *err = pyrIntPnt(*n1, &lpt, &lwt);
16*59599516SKenneth E. Jansen   for(i=0; i < *n1; i++) {
17*59599516SKenneth E. Jansen     wt[i] = lwt[i];
18*59599516SKenneth E. Jansen     for(j=0; j <4; j++)
19*59599516SKenneth E. Jansen       pt[i][j]=lpt[i][j];
20*59599516SKenneth E. Jansen   }
21*59599516SKenneth E. Jansen }
22*59599516SKenneth E. Jansen 
23*59599516SKenneth E. Jansen /*$Id$*/
24*59599516SKenneth E. Jansen #include <stdio.h>
25*59599516SKenneth E. Jansen 
26*59599516SKenneth E. Jansen /* these are the rule 2 int points and weights */
27*59599516SKenneth E. Jansen 
28*59599516SKenneth E. Jansen #define mpt455 -0.455341801261479548
29*59599516SKenneth E. Jansen #define ppt455  0.455341801261479548
30*59599516SKenneth E. Jansen #define mpt577 -0.577350269189625764
31*59599516SKenneth E. Jansen #define ppt577  0.577350269189625764
32*59599516SKenneth E. Jansen #define mpt122 -0.122008467928146216
33*59599516SKenneth E. Jansen #define ppt122  0.122008467928146216
34*59599516SKenneth E. Jansen #define ppt622  0.622008467928146212
35*59599516SKenneth E. Jansen #define ppt044  0.0446581987385204510
36*59599516SKenneth E. Jansen 
37*59599516SKenneth E. Jansen /* these are the rule 3 int points and weights */
38*59599516SKenneth E. Jansen 
39*59599516SKenneth E. Jansen #define zero   0.0000000000000000
40*59599516SKenneth E. Jansen #define mpt687 -0.6872983346207417
41*59599516SKenneth E. Jansen #define ppt687  0.6872983346207417
42*59599516SKenneth E. Jansen #define mpt774 -0.7745966692414834
43*59599516SKenneth E. Jansen #define ppt774  0.7745966692414834
44*59599516SKenneth E. Jansen #define mpt387 -0.3872983346207416
45*59599516SKenneth E. Jansen #define ppt387  0.3872983346207416
46*59599516SKenneth E. Jansen #define mpt087 -0.08729833462074170
47*59599516SKenneth E. Jansen #define ppt087  0.08729833462074170
48*59599516SKenneth E. Jansen #define ppt134 0.1349962850858610
49*59599516SKenneth E. Jansen #define ppt215 0.2159940561373775
50*59599516SKenneth E. Jansen #define ppt345 0.3455904898198040
51*59599516SKenneth E. Jansen #define ppt068 0.06858710562414265
52*59599516SKenneth E. Jansen #define ppt109 0.1097393689986282
53*59599516SKenneth E. Jansen #define ppt175 0.1755829903978052
54*59599516SKenneth E. Jansen #define ppt002 0.002177926162424265
55*59599516SKenneth E. Jansen #define ppt003 0.003484681859878818
56*59599516SKenneth E. Jansen #define ppt005 0.005575490975806120
57*59599516SKenneth E. Jansen 
58*59599516SKenneth E. Jansen /* these are the rule 4 integration points */
59*59599516SKenneth E. Jansen /*NOT FIXED YET*/
60*59599516SKenneth E. Jansen #define Qp41  -0.801346029378026
61*59599516SKenneth E. Jansen #define Qp42  -0.316375532749811
62*59599516SKenneth E. Jansen #define Qp43   0.316375532749811
63*59599516SKenneth E. Jansen #define Qp44   0.801346029378026
64*59599516SKenneth E. Jansen #define Qp45  -0.8611363116
65*59599516SKenneth E. Jansen 
66*59599516SKenneth E. Jansen #define Qp46  -0.576953166749811
67*59599516SKenneth E. Jansen #define Qp47  -0.227784076803672
68*59599516SKenneth E. Jansen #define Qp48   0.227784076803672
69*59599516SKenneth E. Jansen #define Qp49   0.576953166749811
70*59599516SKenneth E. Jansen #define Qp410 -0.3399810436
71*59599516SKenneth E. Jansen 
72*59599516SKenneth E. Jansen #define Qp411 -0.284183144850188
73*59599516SKenneth E. Jansen #define Qp412 -0.112196966796327
74*59599516SKenneth E. Jansen #define Qp413  0.112196966796327
75*59599516SKenneth E. Jansen #define Qp414  0.284183144850188
76*59599516SKenneth E. Jansen #define Qp415  0.3399810436
77*59599516SKenneth E. Jansen 
78*59599516SKenneth E. Jansen #define Qp416 -0.0597902822219738
79*59599516SKenneth E. Jansen #define Qp417 -0.0236055108501886
80*59599516SKenneth E. Jansen #define Qp418  0.0236055108501886
81*59599516SKenneth E. Jansen #define Qp419  0.0597902822219738
82*59599516SKenneth E. Jansen #define Qp420  0.8611363116
83*59599516SKenneth E. Jansen 
84*59599516SKenneth E. Jansen /* Rule 1*/
85*59599516SKenneth E. Jansen 
86*59599516SKenneth E. Jansen static double  rstw1[][4] = {
87*59599516SKenneth E. Jansen   { 0.0, 0.0, 0.0, 0.0 }
88*59599516SKenneth E. Jansen };
89*59599516SKenneth E. Jansen 
90*59599516SKenneth E. Jansen static double twt1[] = { 8.0000000 };
91*59599516SKenneth E. Jansen 
92*59599516SKenneth E. Jansen 
93*59599516SKenneth E. Jansen /* Rule 2*/
94*59599516SKenneth E. Jansen 
95*59599516SKenneth E. Jansen 
96*59599516SKenneth E. Jansen static double rstw8[][4] = {
97*59599516SKenneth E. Jansen   {mpt455,mpt455,mpt577,0.0},
98*59599516SKenneth E. Jansen   {ppt455,mpt455,mpt577,0.0},
99*59599516SKenneth E. Jansen   {mpt455,ppt455,mpt577,0.0},
100*59599516SKenneth E. Jansen   {ppt455,ppt455,mpt577,0.0},
101*59599516SKenneth E. Jansen   {mpt122,mpt122,ppt577,0.0},
102*59599516SKenneth E. Jansen   {ppt122,mpt122,ppt577,0.0},
103*59599516SKenneth E. Jansen   {mpt122,ppt122,ppt577,0.0},
104*59599516SKenneth E. Jansen   {ppt122,ppt122,ppt577,0.0}
105*59599516SKenneth E. Jansen };
106*59599516SKenneth E. Jansen 
107*59599516SKenneth E. Jansen static double twt8[] = {ppt622,ppt622,ppt622,ppt622,
108*59599516SKenneth E. Jansen                         ppt044,ppt044,ppt044,ppt044};
109*59599516SKenneth E. Jansen 
110*59599516SKenneth E. Jansen /* Rule 3*/
111*59599516SKenneth E. Jansen 
112*59599516SKenneth E. Jansen static double rstw27[][4] = {
113*59599516SKenneth E. Jansen   { mpt687,  mpt687,  mpt774,  0.0 },
114*59599516SKenneth E. Jansen   {   zero,  mpt687,  mpt774,  0.0 },
115*59599516SKenneth E. Jansen   { ppt687,  mpt687,  mpt774,  0.0 },
116*59599516SKenneth E. Jansen   { mpt687,    zero,  mpt774,  0.0 },
117*59599516SKenneth E. Jansen   {   zero,    zero,  mpt774,  0.0 },
118*59599516SKenneth E. Jansen   { ppt687,    zero,  mpt774,  0.0 },
119*59599516SKenneth E. Jansen   { mpt687,  ppt687,  mpt774,  0.0 },
120*59599516SKenneth E. Jansen   {   zero,  ppt687,  mpt774,  0.0 },
121*59599516SKenneth E. Jansen   { ppt687,  ppt687,  mpt774,  0.0 },
122*59599516SKenneth E. Jansen   { mpt387,  mpt387,    zero,  0.0 },
123*59599516SKenneth E. Jansen   {   zero,  mpt387,    zero,  0.0 },
124*59599516SKenneth E. Jansen   { ppt387,  mpt387,    zero,  0.0 },
125*59599516SKenneth E. Jansen   { mpt387,    zero,    zero,  0.0 },
126*59599516SKenneth E. Jansen   {   zero,    zero,    zero,  0.0 },
127*59599516SKenneth E. Jansen   { ppt387,    zero,    zero,  0.0 },
128*59599516SKenneth E. Jansen   { mpt387,  ppt387,    zero,  0.0 },
129*59599516SKenneth E. Jansen   {   zero,  ppt387,    zero,  0.0 },
130*59599516SKenneth E. Jansen   { ppt387,  ppt387,    zero,  0.0 },
131*59599516SKenneth E. Jansen   { mpt087,  mpt087,  ppt774,  0.0 },
132*59599516SKenneth E. Jansen   {   zero,  mpt087,  ppt774,  0.0 },
133*59599516SKenneth E. Jansen   { ppt087,  mpt087,  ppt774,  0.0 },
134*59599516SKenneth E. Jansen   { mpt087,    zero,  ppt774,  0.0 },
135*59599516SKenneth E. Jansen   {   zero,    zero,  ppt774,  0.0 },
136*59599516SKenneth E. Jansen   { ppt087,    zero,  ppt774,  0.0 },
137*59599516SKenneth E. Jansen   { mpt087,  ppt087,  ppt774,  0.0 },
138*59599516SKenneth E. Jansen   {   zero,  ppt087,  ppt774,  0.0 },
139*59599516SKenneth E. Jansen   { ppt087,  ppt087,  ppt774,  0.0 }
140*59599516SKenneth E. Jansen };
141*59599516SKenneth E. Jansen 
142*59599516SKenneth E. Jansen 
143*59599516SKenneth E. Jansen static double twt27[] =
144*59599516SKenneth E. Jansen {0.1349962850858610,   0.2159940561373775,   0.1349962850858610,
145*59599516SKenneth E. Jansen  0.2159940561373775,   0.3455904898198040,   0.2159940561373775,
146*59599516SKenneth E. Jansen  0.1349962850858610,   0.2159940561373775,   0.1349962850858610,
147*59599516SKenneth E. Jansen  0.06858710562414265,  0.1097393689986282,   0.06858710562414265,
148*59599516SKenneth E. Jansen  0.1097393689986282,   0.1755829903978052,   0.1097393689986282,
149*59599516SKenneth E. Jansen  0.06858710562414265,  0.1097393689986282,   0.06858710562414265,
150*59599516SKenneth E. Jansen  0.002177926162424265, 0.003484681859878818, 0.002177926162424265,
151*59599516SKenneth E. Jansen  0.003484681859878822, 0.005575490975806120, 0.003484681859878825,
152*59599516SKenneth E. Jansen  0.002177926162424265, 0.003484681859878822, 0.002177926162424265};
153*59599516SKenneth E. Jansen 
154*59599516SKenneth E. Jansen /* Rule 4 */
155*59599516SKenneth E. Jansen 
156*59599516SKenneth E. Jansen static double rstw64[][4] = {
157*59599516SKenneth E. Jansen   { Qp41,  Qp41,  Qp45,  0.0 },
158*59599516SKenneth E. Jansen   { Qp42,  Qp41,  Qp45,  0.0 },
159*59599516SKenneth E. Jansen   { Qp43,  Qp41,  Qp45,  0.0 },
160*59599516SKenneth E. Jansen   { Qp44,  Qp41,  Qp45,  0.0 },
161*59599516SKenneth E. Jansen   { Qp41,  Qp42,  Qp45,  0.0 },
162*59599516SKenneth E. Jansen   { Qp42,  Qp42,  Qp45,  0.0 },
163*59599516SKenneth E. Jansen   { Qp43,  Qp42,  Qp45,  0.0 },
164*59599516SKenneth E. Jansen   { Qp44,  Qp42,  Qp45,  0.0 },
165*59599516SKenneth E. Jansen   { Qp41,  Qp43,  Qp45,  0.0 },
166*59599516SKenneth E. Jansen   { Qp42,  Qp43,  Qp45,  0.0 },
167*59599516SKenneth E. Jansen   { Qp43,  Qp43,  Qp45,  0.0 },
168*59599516SKenneth E. Jansen   { Qp44,  Qp43,  Qp45,  0.0 },
169*59599516SKenneth E. Jansen   { Qp41,  Qp44,  Qp45,  0.0 },
170*59599516SKenneth E. Jansen   { Qp42,  Qp44,  Qp45,  0.0 },
171*59599516SKenneth E. Jansen   { Qp43,  Qp44,  Qp45,  0.0 },
172*59599516SKenneth E. Jansen   { Qp44,  Qp44,  Qp45,  0.0 },
173*59599516SKenneth E. Jansen   { Qp46,  Qp46,  Qp410,  0.0 },
174*59599516SKenneth E. Jansen   { Qp47,  Qp46,  Qp410,  0.0 },
175*59599516SKenneth E. Jansen   { Qp48,  Qp46,  Qp410,  0.0 },
176*59599516SKenneth E. Jansen   { Qp49,  Qp46,  Qp410,  0.0 },
177*59599516SKenneth E. Jansen   { Qp46,  Qp47,  Qp410,  0.0 },
178*59599516SKenneth E. Jansen   { Qp47,  Qp47,  Qp410,  0.0 },
179*59599516SKenneth E. Jansen   { Qp48,  Qp47,  Qp410,  0.0 },
180*59599516SKenneth E. Jansen   { Qp49,  Qp47,  Qp410,  0.0 },
181*59599516SKenneth E. Jansen   { Qp46,  Qp48,  Qp410,  0.0 },
182*59599516SKenneth E. Jansen   { Qp47,  Qp48,  Qp410,  0.0 },
183*59599516SKenneth E. Jansen   { Qp48,  Qp48,  Qp410,  0.0 },
184*59599516SKenneth E. Jansen   { Qp49,  Qp48,  Qp410,  0.0 },
185*59599516SKenneth E. Jansen   { Qp46,  Qp49,  Qp410,  0.0 },
186*59599516SKenneth E. Jansen   { Qp47,  Qp49,  Qp410,  0.0 },
187*59599516SKenneth E. Jansen   { Qp48,  Qp49,  Qp410,  0.0 },
188*59599516SKenneth E. Jansen   { Qp49,  Qp49,  Qp410,  0.0 },
189*59599516SKenneth E. Jansen   { Qp411,  Qp411,  Qp415,  0.0 },
190*59599516SKenneth E. Jansen   { Qp412,  Qp411,  Qp415,  0.0 },
191*59599516SKenneth E. Jansen   { Qp413,  Qp411,  Qp415,  0.0 },
192*59599516SKenneth E. Jansen   { Qp414,  Qp411,  Qp415,  0.0 },
193*59599516SKenneth E. Jansen   { Qp411,  Qp412,  Qp415,  0.0 },
194*59599516SKenneth E. Jansen   { Qp412,  Qp412,  Qp415,  0.0 },
195*59599516SKenneth E. Jansen   { Qp413,  Qp412,  Qp415,  0.0 },
196*59599516SKenneth E. Jansen   { Qp414,  Qp412,  Qp415,  0.0 },
197*59599516SKenneth E. Jansen   { Qp411,  Qp413,  Qp415,  0.0 },
198*59599516SKenneth E. Jansen   { Qp412,  Qp413,  Qp415,  0.0 },
199*59599516SKenneth E. Jansen   { Qp413,  Qp413,  Qp415,  0.0 },
200*59599516SKenneth E. Jansen   { Qp414,  Qp413,  Qp415,  0.0 },
201*59599516SKenneth E. Jansen   { Qp411,  Qp414,  Qp415,  0.0 },
202*59599516SKenneth E. Jansen   { Qp412,  Qp414,  Qp415,  0.0 },
203*59599516SKenneth E. Jansen   { Qp413,  Qp414,  Qp415,  0.0 },
204*59599516SKenneth E. Jansen   { Qp414,  Qp414,  Qp415,  0.0 },
205*59599516SKenneth E. Jansen   { Qp416,  Qp416,  Qp420,  0.0 },
206*59599516SKenneth E. Jansen   { Qp417,  Qp416,  Qp420,  0.0 },
207*59599516SKenneth E. Jansen   { Qp418,  Qp416,  Qp420,  0.0 },
208*59599516SKenneth E. Jansen   { Qp419,  Qp416,  Qp420,  0.0 },
209*59599516SKenneth E. Jansen   { Qp416,  Qp417,  Qp420,  0.0 },
210*59599516SKenneth E. Jansen   { Qp417,  Qp417,  Qp420,  0.0 },
211*59599516SKenneth E. Jansen   { Qp418,  Qp417,  Qp420,  0.0 },
212*59599516SKenneth E. Jansen   { Qp419,  Qp417,  Qp420,  0.0 },
213*59599516SKenneth E. Jansen   { Qp416,  Qp418,  Qp420,  0.0 },
214*59599516SKenneth E. Jansen   { Qp417,  Qp418,  Qp420,  0.0 },
215*59599516SKenneth E. Jansen   { Qp418,  Qp418,  Qp420,  0.0 },
216*59599516SKenneth E. Jansen   { Qp419,  Qp418,  Qp420,  0.0 },
217*59599516SKenneth E. Jansen   { Qp416,  Qp419,  Qp420,  0.0 },
218*59599516SKenneth E. Jansen   { Qp417,  Qp419,  Qp420,  0.0 },
219*59599516SKenneth E. Jansen   { Qp418,  Qp419,  Qp420,  0.0 },
220*59599516SKenneth E. Jansen   { Qp419,  Qp419,  Qp420,  0.0 }
221*59599516SKenneth E. Jansen };
222*59599516SKenneth E. Jansen 
223*59599516SKenneth E. Jansen #ifdef __cplusplus
224*59599516SKenneth E. Jansen extern "C" {
225*59599516SKenneth E. Jansen #endif
226*59599516SKenneth E. Jansen 
227*59599516SKenneth E. Jansen   int pyrIntPnt(int nint, DARR4 **bcord, double **wt)
228*59599516SKenneth E. Jansen {
229*59599516SKenneth E. Jansen   int retval = 1;
230*59599516SKenneth E. Jansen   int i,j,k,l;
231*59599516SKenneth E. Jansen   DARR4 *rstw;
232*59599516SKenneth E. Jansen   double *twt;
233*59599516SKenneth E. Jansen 
234*59599516SKenneth E. Jansen   /* Rule 4 & 5*/
235*59599516SKenneth E. Jansen 
236*59599516SKenneth E. Jansen   double bp5[]={-0.9061798459,-0.5384693101,0,0.5384693101,0.9061798459};
237*59599516SKenneth E. Jansen   double bw4[]={0.3478548446,0.6521451548,0.6521451548,0.3478548446};
238*59599516SKenneth E. Jansen   double bw5[]={0.2369268850,0.4786286708,0.5019607843,0.4786286708,0.2369268850};
239*59599516SKenneth E. Jansen 
240*59599516SKenneth E. Jansen   if( nint == 1){ *bcord = rstw1; *wt = twt1;}
241*59599516SKenneth E. Jansen 
242*59599516SKenneth E. Jansen   else if( nint == 8 ){*bcord = rstw8 ; *wt = twt8; }
243*59599516SKenneth E. Jansen 
244*59599516SKenneth E. Jansen   else if( nint == 27 ) {*bcord = rstw27 ; *wt = twt27; }
245*59599516SKenneth E. Jansen 
246*59599516SKenneth E. Jansen   else if( nint == 64 ) {
247*59599516SKenneth E. Jansen 
248*59599516SKenneth E. Jansen  /*     rstw = (DARR4 *)malloc(64*sizeof(DARR4)); */
249*59599516SKenneth E. Jansen     twt   = (double *)malloc(64*sizeof(double));
250*59599516SKenneth E. Jansen 
251*59599516SKenneth E. Jansen     i=j=k=0;
252*59599516SKenneth E. Jansen 
253*59599516SKenneth E. Jansen     for(l=0;l<64;l++){
254*59599516SKenneth E. Jansen       twt[l]=bw4[i]*bw4[j]*bw4[k];
255*59599516SKenneth E. Jansen       i++;
256*59599516SKenneth E. Jansen       if(i == 4){
257*59599516SKenneth E. Jansen 	i=0 ; j++ ;
258*59599516SKenneth E. Jansen 	if(j == 4) { j=0; k++;}
259*59599516SKenneth E. Jansen       }
260*59599516SKenneth E. Jansen     }
261*59599516SKenneth E. Jansen     *bcord = rstw64; *wt = twt;
262*59599516SKenneth E. Jansen 
263*59599516SKenneth E. Jansen   } else if( nint == 125) {
264*59599516SKenneth E. Jansen 
265*59599516SKenneth E. Jansen     rstw = (DARR4 *)malloc(125*sizeof(DARR4));
266*59599516SKenneth E. Jansen     twt   = (double *)malloc(125*sizeof(double));
267*59599516SKenneth E. Jansen 
268*59599516SKenneth E. Jansen     i=j=k=0;
269*59599516SKenneth E. Jansen 
270*59599516SKenneth E. Jansen     for(l=0;l<125;l++){
271*59599516SKenneth E. Jansen       rstw[l][0]=bp5[i];
272*59599516SKenneth E. Jansen       rstw[l][1]=bp5[j];
273*59599516SKenneth E. Jansen       rstw[l][2]=bp5[k];
274*59599516SKenneth E. Jansen       rstw[l][3]=0.0;
275*59599516SKenneth E. Jansen       twt[l]=bw5[i]*bw5[j]*bw5[k];
276*59599516SKenneth E. Jansen       i++;
277*59599516SKenneth E. Jansen       if(i == 5){
278*59599516SKenneth E. Jansen 	i=0 ; j++ ;
279*59599516SKenneth E. Jansen 	if(j == 5) { j=0; k++;}
280*59599516SKenneth E. Jansen       }
281*59599516SKenneth E. Jansen     }
282*59599516SKenneth E. Jansen     *bcord = rstw; *wt = twt;
283*59599516SKenneth E. Jansen 
284*59599516SKenneth E. Jansen   } else {
285*59599516SKenneth E. Jansen 
286*59599516SKenneth E. Jansen     fprintf(stderr,"\n%d integration points unsupported; give {8,27,64,125,.}\n",nint);
287*59599516SKenneth E. Jansen     retval = 0;
288*59599516SKenneth E. Jansen   }
289*59599516SKenneth E. Jansen   return retval ;
290*59599516SKenneth E. Jansen }
291*59599516SKenneth E. Jansen 
292*59599516SKenneth E. Jansen #ifdef __cplusplus
293*59599516SKenneth E. Jansen }
294*59599516SKenneth E. Jansen #endif
295