159599516SKenneth E. Jansen #include <stdlib.h> 259599516SKenneth E. Jansen 359599516SKenneth E. Jansen #include <FCMangle.h> 459599516SKenneth E. Jansen #define symhex FortranCInterface_GLOBAL_(symhex, SYMHEX) 559599516SKenneth E. Jansen 659599516SKenneth E. Jansen typedef double DARR4[4]; 759599516SKenneth E. Jansen 859599516SKenneth E. Jansen int hexIntPnt(int,DARR4**,double **); 959599516SKenneth E. Jansen 10*f34e7d5cSCameron Smith void symhex(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 = hexIntPnt(*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 Qp21 -0.577350269189626 2959599516SKenneth E. Jansen #define Qp22 0.577350269189626 3059599516SKenneth E. Jansen #define Qw2 1.000000000000000 3159599516SKenneth E. Jansen 3259599516SKenneth E. Jansen /* these are the rule 3 int points and weights */ 3359599516SKenneth E. Jansen 3459599516SKenneth E. Jansen #define Qp31 -0.774596669241483 3559599516SKenneth E. Jansen #define Qp32 0.000000000000000 3659599516SKenneth E. Jansen #define Qp33 0.774596669241483 3759599516SKenneth E. Jansen #define Qw31 0.555555555555556 3859599516SKenneth E. Jansen #define Qw32 0.888888888888889 3959599516SKenneth E. Jansen #define Qw33 0.555555555555556 4059599516SKenneth E. Jansen #define Qw311 0.308641975308642 4159599516SKenneth E. Jansen #define Qw321 0.493827160493831 4259599516SKenneth E. Jansen #define Qw322 0.790123456790124 4359599516SKenneth E. Jansen 4459599516SKenneth E. Jansen 4559599516SKenneth E. Jansen #define Qw3111 0.171467764060361 4659599516SKenneth E. Jansen #define Qw3112 0.274348422496571 4759599516SKenneth E. Jansen #define Qw3113 0.171467764060361 4859599516SKenneth E. Jansen #define Qw3121 0.274348422496571 4959599516SKenneth E. Jansen #define Qw3122 0.438957475994513 5059599516SKenneth E. Jansen #define Qw3123 0.274348422496571 5159599516SKenneth E. Jansen #define Qw3131 0.171467764060361 5259599516SKenneth E. Jansen #define Qw3132 0.274348422496571 5359599516SKenneth E. Jansen #define Qw3133 0.171467764060361 5459599516SKenneth E. Jansen 5559599516SKenneth E. Jansen #define Qw3211 0.274348422496571 5659599516SKenneth E. Jansen #define Qw3212 0.438957475994513 5759599516SKenneth E. Jansen #define Qw3213 0.274348422496571 5859599516SKenneth E. Jansen #define Qw3221 0.438957475994513 5959599516SKenneth E. Jansen #define Qw3222 0.702331961591221 6059599516SKenneth E. Jansen #define Qw3223 0.438957475994513 6159599516SKenneth E. Jansen #define Qw3231 0.274348422496571 6259599516SKenneth E. Jansen #define Qw3232 0.438957475994513 6359599516SKenneth E. Jansen #define Qw3233 0.274348422496571 6459599516SKenneth E. Jansen 6559599516SKenneth E. Jansen #define Qw3311 0.171467764060361 6659599516SKenneth E. Jansen #define Qw3312 0.274348422496571 6759599516SKenneth E. Jansen #define Qw3313 0.171467764060361 6859599516SKenneth E. Jansen #define Qw3321 0.274348422496571 6959599516SKenneth E. Jansen #define Qw3322 0.438957475994513 7059599516SKenneth E. Jansen #define Qw3323 0.274348422496571 7159599516SKenneth E. Jansen #define Qw3331 0.171467764060361 7259599516SKenneth E. Jansen #define Qw3332 0.274348422496571 7359599516SKenneth E. Jansen #define Qw3333 0.171467764060357 7459599516SKenneth E. Jansen 7559599516SKenneth E. Jansen /* Rule 1*/ 7659599516SKenneth E. Jansen 7759599516SKenneth E. Jansen static double rstw1[][4] = { 7859599516SKenneth E. Jansen { 0.0, 0.0, 0.0, 0.0 } 7959599516SKenneth E. Jansen }; 8059599516SKenneth E. Jansen 8159599516SKenneth E. Jansen static double twt1[] = { 8.0000000 }; 8259599516SKenneth E. Jansen 8359599516SKenneth E. Jansen 8459599516SKenneth E. Jansen /* Rule 2*/ 8559599516SKenneth E. Jansen 8659599516SKenneth E. Jansen 8759599516SKenneth E. Jansen static double rstw8[][4] = { 8859599516SKenneth E. Jansen {Qp21,Qp21,Qp21,0.0}, 8959599516SKenneth E. Jansen {Qp22,Qp21,Qp21,0.0}, 9059599516SKenneth E. Jansen {Qp21,Qp22,Qp21,0.0}, 9159599516SKenneth E. Jansen {Qp22,Qp22,Qp21,0.0}, 9259599516SKenneth E. Jansen {Qp21,Qp21,Qp22,0.0}, 9359599516SKenneth E. Jansen {Qp22,Qp21,Qp22,0.0}, 9459599516SKenneth E. Jansen {Qp21,Qp22,Qp22,0.0}, 9559599516SKenneth E. Jansen {Qp22,Qp22,Qp22,0.0} 9659599516SKenneth E. Jansen }; 9759599516SKenneth E. Jansen 9859599516SKenneth E. Jansen static double twt8[] = {Qw2,Qw2,Qw2,Qw2,Qw2,Qw2,Qw2,Qw2}; 9959599516SKenneth E. Jansen 10059599516SKenneth E. Jansen /* Rule 3*/ 10159599516SKenneth E. Jansen 10259599516SKenneth E. Jansen static double rstw27[][4] = { 10359599516SKenneth E. Jansen { Qp31, Qp31, Qp31, 0.0 }, 10459599516SKenneth E. Jansen { Qp32, Qp31, Qp31, 0.0 }, 10559599516SKenneth E. Jansen { Qp33, Qp31, Qp31, 0.0 }, 10659599516SKenneth E. Jansen { Qp31, Qp32, Qp31, 0.0 }, 10759599516SKenneth E. Jansen { Qp32, Qp32, Qp31, 0.0 }, 10859599516SKenneth E. Jansen { Qp33, Qp32, Qp31, 0.0 }, 10959599516SKenneth E. Jansen { Qp31, Qp33, Qp31, 0.0 }, 11059599516SKenneth E. Jansen { Qp32, Qp33, Qp31, 0.0 }, 11159599516SKenneth E. Jansen { Qp33, Qp33, Qp31, 0.0 }, 11259599516SKenneth E. Jansen { Qp31, Qp31, Qp32, 0.0 }, 11359599516SKenneth E. Jansen { Qp32, Qp31, Qp32, 0.0 }, 11459599516SKenneth E. Jansen { Qp33, Qp31, Qp32, 0.0 }, 11559599516SKenneth E. Jansen { Qp31, Qp32, Qp32, 0.0 }, 11659599516SKenneth E. Jansen { Qp32, Qp32, Qp32, 0.0 }, 11759599516SKenneth E. Jansen { Qp33, Qp32, Qp32, 0.0 }, 11859599516SKenneth E. Jansen { Qp31, Qp33, Qp32, 0.0 }, 11959599516SKenneth E. Jansen { Qp32, Qp33, Qp32, 0.0 }, 12059599516SKenneth E. Jansen { Qp33, Qp33, Qp32, 0.0 }, 12159599516SKenneth E. Jansen { Qp31, Qp31, Qp33, 0.0 }, 12259599516SKenneth E. Jansen { Qp32, Qp31, Qp33, 0.0 }, 12359599516SKenneth E. Jansen { Qp33, Qp31, Qp33, 0.0 }, 12459599516SKenneth E. Jansen { Qp31, Qp32, Qp33, 0.0 }, 12559599516SKenneth E. Jansen { Qp32, Qp32, Qp33, 0.0 }, 12659599516SKenneth E. Jansen { Qp33, Qp32, Qp33, 0.0 }, 12759599516SKenneth E. Jansen { Qp31, Qp33, Qp33, 0.0 }, 12859599516SKenneth E. Jansen { Qp32, Qp33, Qp33, 0.0 }, 12959599516SKenneth E. Jansen { Qp33, Qp33, Qp33, 0.0 } 13059599516SKenneth E. Jansen }; 13159599516SKenneth E. Jansen 13259599516SKenneth E. Jansen 13359599516SKenneth E. Jansen static double twt27[] = 13459599516SKenneth E. Jansen { Qw3111, Qw3211, Qw3311, Qw3121, Qw3221, Qw3321, Qw3131, Qw3231, Qw3331, 13559599516SKenneth E. Jansen Qw3112, Qw3212, Qw3312, Qw3122, Qw3222, Qw3322, Qw3132, Qw3232, Qw3332, 13659599516SKenneth E. Jansen Qw3113, Qw3213, Qw3313, Qw3123, Qw3223, Qw3323, Qw3133, Qw3233, Qw3333 }; 13759599516SKenneth E. Jansen 13859599516SKenneth E. Jansen 13959599516SKenneth E. Jansen 14059599516SKenneth E. Jansen #ifdef __cplusplus 14159599516SKenneth E. Jansen extern "C" { 14259599516SKenneth E. Jansen #endif 14359599516SKenneth E. Jansen 14459599516SKenneth E. Jansen int hexIntPnt(int nint, DARR4 **bcord, double **wt) 14559599516SKenneth E. Jansen { 14659599516SKenneth E. Jansen int retval = 1; 14759599516SKenneth E. Jansen int i,j,k,l; 14859599516SKenneth E. Jansen DARR4 *rstw; 14959599516SKenneth E. Jansen double *twt; 15059599516SKenneth E. Jansen 15159599516SKenneth E. Jansen /* Rule 4 & 5*/ 15259599516SKenneth E. Jansen /* rule 5 has not been tested */ 15359599516SKenneth E. Jansen double bp4[]={-0.8611363115940526,-0.3399810435848563,0.339981043584856,0.8611363115940526}; 15459599516SKenneth E. Jansen double bp5[]={-0.9061798459386640,-0.5384693101056831,0,0.5384693101056831,0.9061798459386640}; 15559599516SKenneth E. Jansen double bw4[]={0.3478548451374539,0.6521451548625461,0.6521451548625461,0.3478548451374539}; 15659599516SKenneth E. Jansen double bw5[]={0.2369268850561891,0.4786286704993665,0.5688888888888889,0.4786286704993665,0.2369268850561891}; 15759599516SKenneth E. Jansen 15859599516SKenneth E. Jansen 15959599516SKenneth E. Jansen if( nint == 1){ *bcord = rstw1; *wt = twt1;} 16059599516SKenneth E. Jansen 16159599516SKenneth E. Jansen else if( nint == 8 ){*bcord = rstw8 ; *wt = twt8; } 16259599516SKenneth E. Jansen 16359599516SKenneth E. Jansen else if( nint == 27 ) {*bcord = rstw27 ; *wt = twt27; } 16459599516SKenneth E. Jansen 16559599516SKenneth E. Jansen else if( nint == 64 ) { 16659599516SKenneth E. Jansen 16759599516SKenneth E. Jansen rstw = (DARR4 *)malloc(64*sizeof(DARR4)); 16859599516SKenneth E. Jansen twt = (double *)malloc(64*sizeof(double)); 16959599516SKenneth E. Jansen 17059599516SKenneth E. Jansen i=j=k=0; 17159599516SKenneth E. Jansen 17259599516SKenneth E. Jansen for(l=0;l<64;l++){ 17359599516SKenneth E. Jansen rstw[l][0]=bp4[i]; 17459599516SKenneth E. Jansen rstw[l][1]=bp4[j]; 17559599516SKenneth E. Jansen rstw[l][2]=bp4[k]; 17659599516SKenneth E. Jansen rstw[l][3]=0.0; 17759599516SKenneth E. Jansen twt[l]=bw4[i]*bw4[j]*bw4[k]; 17859599516SKenneth E. Jansen i++; 17959599516SKenneth E. Jansen if(i == 4){ 18059599516SKenneth E. Jansen i=0 ; j++ ; 18159599516SKenneth E. Jansen if(j == 4) { j=0; k++;} 18259599516SKenneth E. Jansen } 18359599516SKenneth E. Jansen } 18459599516SKenneth E. Jansen *bcord = rstw; *wt = twt; 18559599516SKenneth E. Jansen 18659599516SKenneth E. Jansen } else if( nint == 125) { 18759599516SKenneth E. Jansen 18859599516SKenneth E. Jansen rstw = (DARR4 *)malloc(125*sizeof(DARR4)); 18959599516SKenneth E. Jansen twt = (double *)malloc(125*sizeof(double)); 19059599516SKenneth E. Jansen 19159599516SKenneth E. Jansen i=j=k=0; 19259599516SKenneth E. Jansen 19359599516SKenneth E. Jansen for(l=0;l<125;l++){ 19459599516SKenneth E. Jansen rstw[l][0]=bp5[i]; 19559599516SKenneth E. Jansen rstw[l][1]=bp5[j]; 19659599516SKenneth E. Jansen rstw[l][2]=bp5[k]; 19759599516SKenneth E. Jansen rstw[l][3]=0.0; 19859599516SKenneth E. Jansen twt[l]=bw5[i]*bw5[j]*bw5[k]; 19959599516SKenneth E. Jansen i++; 20059599516SKenneth E. Jansen if(i == 5){ 20159599516SKenneth E. Jansen i=0 ; j++ ; 20259599516SKenneth E. Jansen if(j == 5) { j=0; k++;} 20359599516SKenneth E. Jansen } 20459599516SKenneth E. Jansen } 20559599516SKenneth E. Jansen *bcord = rstw; *wt = twt; 20659599516SKenneth E. Jansen 20759599516SKenneth E. Jansen } else { 20859599516SKenneth E. Jansen 20959599516SKenneth E. Jansen fprintf(stderr,"\n%d integration points unsupported; give {8,27,64,125,.}\n",nint); 21059599516SKenneth E. Jansen retval = 0; 21159599516SKenneth E. Jansen } 21259599516SKenneth E. Jansen return retval ; 21359599516SKenneth E. Jansen } 21459599516SKenneth E. Jansen 21559599516SKenneth E. Jansen #ifdef __cplusplus 21659599516SKenneth E. Jansen } 21759599516SKenneth E. Jansen #endif 218