159599516SKenneth E. Jansen #include <stdlib.h>
259599516SKenneth E. Jansen
359599516SKenneth E. Jansen #include <FCMangle.h>
459599516SKenneth E. Jansen #define sympyr FortranCInterface_GLOBAL_(sympyr, SYMPYR)
559599516SKenneth E. Jansen
659599516SKenneth E. Jansen typedef double DARR4[4];
759599516SKenneth E. Jansen
859599516SKenneth E. Jansen int pyrIntPnt(int,DARR4**,double **);
959599516SKenneth E. Jansen
sympyr(int * n1,double pt[][4],double wt[],int * err)10*f34e7d5cSCameron Smith void sympyr(int *n1, double pt[][4], double wt[], int *err)
1159599516SKenneth E. Jansen {
1259599516SKenneth E. Jansen double *lwt;
1359599516SKenneth E. Jansen DARR4 *lpt;
1459599516SKenneth E. Jansen int i,j;
1559599516SKenneth E. Jansen *err = pyrIntPnt(*n1, &lpt, &lwt);
1659599516SKenneth E. Jansen for(i=0; i < *n1; i++) {
1759599516SKenneth E. Jansen wt[i] = lwt[i];
1859599516SKenneth E. Jansen for(j=0; j <4; j++)
1959599516SKenneth E. Jansen pt[i][j]=lpt[i][j];
2059599516SKenneth E. Jansen }
2159599516SKenneth E. Jansen }
2259599516SKenneth E. Jansen
2359599516SKenneth E. Jansen /*$Id$*/
2459599516SKenneth E. Jansen #include <stdio.h>
2559599516SKenneth E. Jansen
2659599516SKenneth E. Jansen /* these are the rule 2 int points and weights */
2759599516SKenneth E. Jansen
2859599516SKenneth E. Jansen #define mpt455 -0.455341801261479548
2959599516SKenneth E. Jansen #define ppt455 0.455341801261479548
3059599516SKenneth E. Jansen #define mpt577 -0.577350269189625764
3159599516SKenneth E. Jansen #define ppt577 0.577350269189625764
3259599516SKenneth E. Jansen #define mpt122 -0.122008467928146216
3359599516SKenneth E. Jansen #define ppt122 0.122008467928146216
3459599516SKenneth E. Jansen #define ppt622 0.622008467928146212
3559599516SKenneth E. Jansen #define ppt044 0.0446581987385204510
3659599516SKenneth E. Jansen
3759599516SKenneth E. Jansen /* these are the rule 3 int points and weights */
3859599516SKenneth E. Jansen
3959599516SKenneth E. Jansen #define zero 0.0000000000000000
4059599516SKenneth E. Jansen #define mpt687 -0.6872983346207417
4159599516SKenneth E. Jansen #define ppt687 0.6872983346207417
4259599516SKenneth E. Jansen #define mpt774 -0.7745966692414834
4359599516SKenneth E. Jansen #define ppt774 0.7745966692414834
4459599516SKenneth E. Jansen #define mpt387 -0.3872983346207416
4559599516SKenneth E. Jansen #define ppt387 0.3872983346207416
4659599516SKenneth E. Jansen #define mpt087 -0.08729833462074170
4759599516SKenneth E. Jansen #define ppt087 0.08729833462074170
4859599516SKenneth E. Jansen #define ppt134 0.1349962850858610
4959599516SKenneth E. Jansen #define ppt215 0.2159940561373775
5059599516SKenneth E. Jansen #define ppt345 0.3455904898198040
5159599516SKenneth E. Jansen #define ppt068 0.06858710562414265
5259599516SKenneth E. Jansen #define ppt109 0.1097393689986282
5359599516SKenneth E. Jansen #define ppt175 0.1755829903978052
5459599516SKenneth E. Jansen #define ppt002 0.002177926162424265
5559599516SKenneth E. Jansen #define ppt003 0.003484681859878818
5659599516SKenneth E. Jansen #define ppt005 0.005575490975806120
5759599516SKenneth E. Jansen
5859599516SKenneth E. Jansen /* these are the rule 4 integration points */
5959599516SKenneth E. Jansen /*NOT FIXED YET*/
6059599516SKenneth E. Jansen #define Qp41 -0.801346029378026
6159599516SKenneth E. Jansen #define Qp42 -0.316375532749811
6259599516SKenneth E. Jansen #define Qp43 0.316375532749811
6359599516SKenneth E. Jansen #define Qp44 0.801346029378026
6459599516SKenneth E. Jansen #define Qp45 -0.8611363116
6559599516SKenneth E. Jansen
6659599516SKenneth E. Jansen #define Qp46 -0.576953166749811
6759599516SKenneth E. Jansen #define Qp47 -0.227784076803672
6859599516SKenneth E. Jansen #define Qp48 0.227784076803672
6959599516SKenneth E. Jansen #define Qp49 0.576953166749811
7059599516SKenneth E. Jansen #define Qp410 -0.3399810436
7159599516SKenneth E. Jansen
7259599516SKenneth E. Jansen #define Qp411 -0.284183144850188
7359599516SKenneth E. Jansen #define Qp412 -0.112196966796327
7459599516SKenneth E. Jansen #define Qp413 0.112196966796327
7559599516SKenneth E. Jansen #define Qp414 0.284183144850188
7659599516SKenneth E. Jansen #define Qp415 0.3399810436
7759599516SKenneth E. Jansen
7859599516SKenneth E. Jansen #define Qp416 -0.0597902822219738
7959599516SKenneth E. Jansen #define Qp417 -0.0236055108501886
8059599516SKenneth E. Jansen #define Qp418 0.0236055108501886
8159599516SKenneth E. Jansen #define Qp419 0.0597902822219738
8259599516SKenneth E. Jansen #define Qp420 0.8611363116
8359599516SKenneth E. Jansen
8459599516SKenneth E. Jansen /* Rule 1*/
8559599516SKenneth E. Jansen
8659599516SKenneth E. Jansen static double rstw1[][4] = {
8759599516SKenneth E. Jansen { 0.0, 0.0, 0.0, 0.0 }
8859599516SKenneth E. Jansen };
8959599516SKenneth E. Jansen
9059599516SKenneth E. Jansen static double twt1[] = { 8.0000000 };
9159599516SKenneth E. Jansen
9259599516SKenneth E. Jansen
9359599516SKenneth E. Jansen /* Rule 2*/
9459599516SKenneth E. Jansen
9559599516SKenneth E. Jansen
9659599516SKenneth E. Jansen static double rstw8[][4] = {
9759599516SKenneth E. Jansen {mpt455,mpt455,mpt577,0.0},
9859599516SKenneth E. Jansen {ppt455,mpt455,mpt577,0.0},
9959599516SKenneth E. Jansen {mpt455,ppt455,mpt577,0.0},
10059599516SKenneth E. Jansen {ppt455,ppt455,mpt577,0.0},
10159599516SKenneth E. Jansen {mpt122,mpt122,ppt577,0.0},
10259599516SKenneth E. Jansen {ppt122,mpt122,ppt577,0.0},
10359599516SKenneth E. Jansen {mpt122,ppt122,ppt577,0.0},
10459599516SKenneth E. Jansen {ppt122,ppt122,ppt577,0.0}
10559599516SKenneth E. Jansen };
10659599516SKenneth E. Jansen
10759599516SKenneth E. Jansen static double twt8[] = {ppt622,ppt622,ppt622,ppt622,
10859599516SKenneth E. Jansen ppt044,ppt044,ppt044,ppt044};
10959599516SKenneth E. Jansen
11059599516SKenneth E. Jansen /* Rule 3*/
11159599516SKenneth E. Jansen
11259599516SKenneth E. Jansen static double rstw27[][4] = {
11359599516SKenneth E. Jansen { mpt687, mpt687, mpt774, 0.0 },
11459599516SKenneth E. Jansen { zero, mpt687, mpt774, 0.0 },
11559599516SKenneth E. Jansen { ppt687, mpt687, mpt774, 0.0 },
11659599516SKenneth E. Jansen { mpt687, zero, mpt774, 0.0 },
11759599516SKenneth E. Jansen { zero, zero, mpt774, 0.0 },
11859599516SKenneth E. Jansen { ppt687, zero, mpt774, 0.0 },
11959599516SKenneth E. Jansen { mpt687, ppt687, mpt774, 0.0 },
12059599516SKenneth E. Jansen { zero, ppt687, mpt774, 0.0 },
12159599516SKenneth E. Jansen { ppt687, ppt687, mpt774, 0.0 },
12259599516SKenneth E. Jansen { mpt387, mpt387, zero, 0.0 },
12359599516SKenneth E. Jansen { zero, mpt387, zero, 0.0 },
12459599516SKenneth E. Jansen { ppt387, mpt387, zero, 0.0 },
12559599516SKenneth E. Jansen { mpt387, zero, zero, 0.0 },
12659599516SKenneth E. Jansen { zero, zero, zero, 0.0 },
12759599516SKenneth E. Jansen { ppt387, zero, zero, 0.0 },
12859599516SKenneth E. Jansen { mpt387, ppt387, zero, 0.0 },
12959599516SKenneth E. Jansen { zero, ppt387, zero, 0.0 },
13059599516SKenneth E. Jansen { ppt387, ppt387, zero, 0.0 },
13159599516SKenneth E. Jansen { mpt087, mpt087, ppt774, 0.0 },
13259599516SKenneth E. Jansen { zero, mpt087, ppt774, 0.0 },
13359599516SKenneth E. Jansen { ppt087, mpt087, ppt774, 0.0 },
13459599516SKenneth E. Jansen { mpt087, zero, ppt774, 0.0 },
13559599516SKenneth E. Jansen { zero, zero, ppt774, 0.0 },
13659599516SKenneth E. Jansen { ppt087, zero, ppt774, 0.0 },
13759599516SKenneth E. Jansen { mpt087, ppt087, ppt774, 0.0 },
13859599516SKenneth E. Jansen { zero, ppt087, ppt774, 0.0 },
13959599516SKenneth E. Jansen { ppt087, ppt087, ppt774, 0.0 }
14059599516SKenneth E. Jansen };
14159599516SKenneth E. Jansen
14259599516SKenneth E. Jansen
14359599516SKenneth E. Jansen static double twt27[] =
14459599516SKenneth E. Jansen {0.1349962850858610, 0.2159940561373775, 0.1349962850858610,
14559599516SKenneth E. Jansen 0.2159940561373775, 0.3455904898198040, 0.2159940561373775,
14659599516SKenneth E. Jansen 0.1349962850858610, 0.2159940561373775, 0.1349962850858610,
14759599516SKenneth E. Jansen 0.06858710562414265, 0.1097393689986282, 0.06858710562414265,
14859599516SKenneth E. Jansen 0.1097393689986282, 0.1755829903978052, 0.1097393689986282,
14959599516SKenneth E. Jansen 0.06858710562414265, 0.1097393689986282, 0.06858710562414265,
15059599516SKenneth E. Jansen 0.002177926162424265, 0.003484681859878818, 0.002177926162424265,
15159599516SKenneth E. Jansen 0.003484681859878822, 0.005575490975806120, 0.003484681859878825,
15259599516SKenneth E. Jansen 0.002177926162424265, 0.003484681859878822, 0.002177926162424265};
15359599516SKenneth E. Jansen
15459599516SKenneth E. Jansen /* Rule 4 */
15559599516SKenneth E. Jansen
15659599516SKenneth E. Jansen static double rstw64[][4] = {
15759599516SKenneth E. Jansen { Qp41, Qp41, Qp45, 0.0 },
15859599516SKenneth E. Jansen { Qp42, Qp41, Qp45, 0.0 },
15959599516SKenneth E. Jansen { Qp43, Qp41, Qp45, 0.0 },
16059599516SKenneth E. Jansen { Qp44, Qp41, Qp45, 0.0 },
16159599516SKenneth E. Jansen { Qp41, Qp42, Qp45, 0.0 },
16259599516SKenneth E. Jansen { Qp42, Qp42, Qp45, 0.0 },
16359599516SKenneth E. Jansen { Qp43, Qp42, Qp45, 0.0 },
16459599516SKenneth E. Jansen { Qp44, Qp42, Qp45, 0.0 },
16559599516SKenneth E. Jansen { Qp41, Qp43, Qp45, 0.0 },
16659599516SKenneth E. Jansen { Qp42, Qp43, Qp45, 0.0 },
16759599516SKenneth E. Jansen { Qp43, Qp43, Qp45, 0.0 },
16859599516SKenneth E. Jansen { Qp44, Qp43, Qp45, 0.0 },
16959599516SKenneth E. Jansen { Qp41, Qp44, Qp45, 0.0 },
17059599516SKenneth E. Jansen { Qp42, Qp44, Qp45, 0.0 },
17159599516SKenneth E. Jansen { Qp43, Qp44, Qp45, 0.0 },
17259599516SKenneth E. Jansen { Qp44, Qp44, Qp45, 0.0 },
17359599516SKenneth E. Jansen { Qp46, Qp46, Qp410, 0.0 },
17459599516SKenneth E. Jansen { Qp47, Qp46, Qp410, 0.0 },
17559599516SKenneth E. Jansen { Qp48, Qp46, Qp410, 0.0 },
17659599516SKenneth E. Jansen { Qp49, Qp46, Qp410, 0.0 },
17759599516SKenneth E. Jansen { Qp46, Qp47, Qp410, 0.0 },
17859599516SKenneth E. Jansen { Qp47, Qp47, Qp410, 0.0 },
17959599516SKenneth E. Jansen { Qp48, Qp47, Qp410, 0.0 },
18059599516SKenneth E. Jansen { Qp49, Qp47, Qp410, 0.0 },
18159599516SKenneth E. Jansen { Qp46, Qp48, Qp410, 0.0 },
18259599516SKenneth E. Jansen { Qp47, Qp48, Qp410, 0.0 },
18359599516SKenneth E. Jansen { Qp48, Qp48, Qp410, 0.0 },
18459599516SKenneth E. Jansen { Qp49, Qp48, Qp410, 0.0 },
18559599516SKenneth E. Jansen { Qp46, Qp49, Qp410, 0.0 },
18659599516SKenneth E. Jansen { Qp47, Qp49, Qp410, 0.0 },
18759599516SKenneth E. Jansen { Qp48, Qp49, Qp410, 0.0 },
18859599516SKenneth E. Jansen { Qp49, Qp49, Qp410, 0.0 },
18959599516SKenneth E. Jansen { Qp411, Qp411, Qp415, 0.0 },
19059599516SKenneth E. Jansen { Qp412, Qp411, Qp415, 0.0 },
19159599516SKenneth E. Jansen { Qp413, Qp411, Qp415, 0.0 },
19259599516SKenneth E. Jansen { Qp414, Qp411, Qp415, 0.0 },
19359599516SKenneth E. Jansen { Qp411, Qp412, Qp415, 0.0 },
19459599516SKenneth E. Jansen { Qp412, Qp412, Qp415, 0.0 },
19559599516SKenneth E. Jansen { Qp413, Qp412, Qp415, 0.0 },
19659599516SKenneth E. Jansen { Qp414, Qp412, Qp415, 0.0 },
19759599516SKenneth E. Jansen { Qp411, Qp413, Qp415, 0.0 },
19859599516SKenneth E. Jansen { Qp412, Qp413, Qp415, 0.0 },
19959599516SKenneth E. Jansen { Qp413, Qp413, Qp415, 0.0 },
20059599516SKenneth E. Jansen { Qp414, Qp413, Qp415, 0.0 },
20159599516SKenneth E. Jansen { Qp411, Qp414, Qp415, 0.0 },
20259599516SKenneth E. Jansen { Qp412, Qp414, Qp415, 0.0 },
20359599516SKenneth E. Jansen { Qp413, Qp414, Qp415, 0.0 },
20459599516SKenneth E. Jansen { Qp414, Qp414, Qp415, 0.0 },
20559599516SKenneth E. Jansen { Qp416, Qp416, Qp420, 0.0 },
20659599516SKenneth E. Jansen { Qp417, Qp416, Qp420, 0.0 },
20759599516SKenneth E. Jansen { Qp418, Qp416, Qp420, 0.0 },
20859599516SKenneth E. Jansen { Qp419, Qp416, Qp420, 0.0 },
20959599516SKenneth E. Jansen { Qp416, Qp417, Qp420, 0.0 },
21059599516SKenneth E. Jansen { Qp417, Qp417, Qp420, 0.0 },
21159599516SKenneth E. Jansen { Qp418, Qp417, Qp420, 0.0 },
21259599516SKenneth E. Jansen { Qp419, Qp417, Qp420, 0.0 },
21359599516SKenneth E. Jansen { Qp416, Qp418, Qp420, 0.0 },
21459599516SKenneth E. Jansen { Qp417, Qp418, Qp420, 0.0 },
21559599516SKenneth E. Jansen { Qp418, Qp418, Qp420, 0.0 },
21659599516SKenneth E. Jansen { Qp419, Qp418, Qp420, 0.0 },
21759599516SKenneth E. Jansen { Qp416, Qp419, Qp420, 0.0 },
21859599516SKenneth E. Jansen { Qp417, Qp419, Qp420, 0.0 },
21959599516SKenneth E. Jansen { Qp418, Qp419, Qp420, 0.0 },
22059599516SKenneth E. Jansen { Qp419, Qp419, Qp420, 0.0 }
22159599516SKenneth E. Jansen };
22259599516SKenneth E. Jansen
22359599516SKenneth E. Jansen #ifdef __cplusplus
22459599516SKenneth E. Jansen extern "C" {
22559599516SKenneth E. Jansen #endif
22659599516SKenneth E. Jansen
pyrIntPnt(int nint,DARR4 ** bcord,double ** wt)22759599516SKenneth E. Jansen int pyrIntPnt(int nint, DARR4 **bcord, double **wt)
22859599516SKenneth E. Jansen {
22959599516SKenneth E. Jansen int retval = 1;
23059599516SKenneth E. Jansen int i,j,k,l;
23159599516SKenneth E. Jansen DARR4 *rstw;
23259599516SKenneth E. Jansen double *twt;
23359599516SKenneth E. Jansen
23459599516SKenneth E. Jansen /* Rule 4 & 5*/
23559599516SKenneth E. Jansen
23659599516SKenneth E. Jansen double bp5[]={-0.9061798459,-0.5384693101,0,0.5384693101,0.9061798459};
23759599516SKenneth E. Jansen double bw4[]={0.3478548446,0.6521451548,0.6521451548,0.3478548446};
23859599516SKenneth E. Jansen double bw5[]={0.2369268850,0.4786286708,0.5019607843,0.4786286708,0.2369268850};
23959599516SKenneth E. Jansen
24059599516SKenneth E. Jansen if( nint == 1){ *bcord = rstw1; *wt = twt1;}
24159599516SKenneth E. Jansen
24259599516SKenneth E. Jansen else if( nint == 8 ){*bcord = rstw8 ; *wt = twt8; }
24359599516SKenneth E. Jansen
24459599516SKenneth E. Jansen else if( nint == 27 ) {*bcord = rstw27 ; *wt = twt27; }
24559599516SKenneth E. Jansen
24659599516SKenneth E. Jansen else if( nint == 64 ) {
24759599516SKenneth E. Jansen
24859599516SKenneth E. Jansen /* rstw = (DARR4 *)malloc(64*sizeof(DARR4)); */
24959599516SKenneth E. Jansen twt = (double *)malloc(64*sizeof(double));
25059599516SKenneth E. Jansen
25159599516SKenneth E. Jansen i=j=k=0;
25259599516SKenneth E. Jansen
25359599516SKenneth E. Jansen for(l=0;l<64;l++){
25459599516SKenneth E. Jansen twt[l]=bw4[i]*bw4[j]*bw4[k];
25559599516SKenneth E. Jansen i++;
25659599516SKenneth E. Jansen if(i == 4){
25759599516SKenneth E. Jansen i=0 ; j++ ;
25859599516SKenneth E. Jansen if(j == 4) { j=0; k++;}
25959599516SKenneth E. Jansen }
26059599516SKenneth E. Jansen }
26159599516SKenneth E. Jansen *bcord = rstw64; *wt = twt;
26259599516SKenneth E. Jansen
26359599516SKenneth E. Jansen } else if( nint == 125) {
26459599516SKenneth E. Jansen
26559599516SKenneth E. Jansen rstw = (DARR4 *)malloc(125*sizeof(DARR4));
26659599516SKenneth E. Jansen twt = (double *)malloc(125*sizeof(double));
26759599516SKenneth E. Jansen
26859599516SKenneth E. Jansen i=j=k=0;
26959599516SKenneth E. Jansen
27059599516SKenneth E. Jansen for(l=0;l<125;l++){
27159599516SKenneth E. Jansen rstw[l][0]=bp5[i];
27259599516SKenneth E. Jansen rstw[l][1]=bp5[j];
27359599516SKenneth E. Jansen rstw[l][2]=bp5[k];
27459599516SKenneth E. Jansen rstw[l][3]=0.0;
27559599516SKenneth E. Jansen twt[l]=bw5[i]*bw5[j]*bw5[k];
27659599516SKenneth E. Jansen i++;
27759599516SKenneth E. Jansen if(i == 5){
27859599516SKenneth E. Jansen i=0 ; j++ ;
27959599516SKenneth E. Jansen if(j == 5) { j=0; k++;}
28059599516SKenneth E. Jansen }
28159599516SKenneth E. Jansen }
28259599516SKenneth E. Jansen *bcord = rstw; *wt = twt;
28359599516SKenneth E. Jansen
28459599516SKenneth E. Jansen } else {
28559599516SKenneth E. Jansen
28659599516SKenneth E. Jansen fprintf(stderr,"\n%d integration points unsupported; give {8,27,64,125,.}\n",nint);
28759599516SKenneth E. Jansen retval = 0;
28859599516SKenneth E. Jansen }
28959599516SKenneth E. Jansen return retval ;
29059599516SKenneth E. Jansen }
29159599516SKenneth E. Jansen
29259599516SKenneth E. Jansen #ifdef __cplusplus
29359599516SKenneth E. Jansen }
29459599516SKenneth E. Jansen #endif
295