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 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 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