1*59599516SKenneth E. Jansen #include <stdlib.h> 2*59599516SKenneth E. Jansen 3*59599516SKenneth E. Jansen #include <FCMangle.h> 4*59599516SKenneth E. Jansen #define symhex FortranCInterface_GLOBAL_(symhex, SYMHEX) 5*59599516SKenneth E. Jansen 6*59599516SKenneth E. Jansen typedef double DARR4[4]; 7*59599516SKenneth E. Jansen 8*59599516SKenneth E. Jansen int hexIntPnt(int,DARR4**,double **); 9*59599516SKenneth E. Jansen 10*59599516SKenneth E. Jansen symhex(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 = hexIntPnt(*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 Qp21 -0.577350269189626 29*59599516SKenneth E. Jansen #define Qp22 0.577350269189626 30*59599516SKenneth E. Jansen #define Qw2 1.000000000000000 31*59599516SKenneth E. Jansen 32*59599516SKenneth E. Jansen /* these are the rule 3 int points and weights */ 33*59599516SKenneth E. Jansen 34*59599516SKenneth E. Jansen #define Qp31 -0.774596669241483 35*59599516SKenneth E. Jansen #define Qp32 0.000000000000000 36*59599516SKenneth E. Jansen #define Qp33 0.774596669241483 37*59599516SKenneth E. Jansen #define Qw31 0.555555555555556 38*59599516SKenneth E. Jansen #define Qw32 0.888888888888889 39*59599516SKenneth E. Jansen #define Qw33 0.555555555555556 40*59599516SKenneth E. Jansen #define Qw311 0.308641975308642 41*59599516SKenneth E. Jansen #define Qw321 0.493827160493831 42*59599516SKenneth E. Jansen #define Qw322 0.790123456790124 43*59599516SKenneth E. Jansen 44*59599516SKenneth E. Jansen 45*59599516SKenneth E. Jansen #define Qw3111 0.171467764060361 46*59599516SKenneth E. Jansen #define Qw3112 0.274348422496571 47*59599516SKenneth E. Jansen #define Qw3113 0.171467764060361 48*59599516SKenneth E. Jansen #define Qw3121 0.274348422496571 49*59599516SKenneth E. Jansen #define Qw3122 0.438957475994513 50*59599516SKenneth E. Jansen #define Qw3123 0.274348422496571 51*59599516SKenneth E. Jansen #define Qw3131 0.171467764060361 52*59599516SKenneth E. Jansen #define Qw3132 0.274348422496571 53*59599516SKenneth E. Jansen #define Qw3133 0.171467764060361 54*59599516SKenneth E. Jansen 55*59599516SKenneth E. Jansen #define Qw3211 0.274348422496571 56*59599516SKenneth E. Jansen #define Qw3212 0.438957475994513 57*59599516SKenneth E. Jansen #define Qw3213 0.274348422496571 58*59599516SKenneth E. Jansen #define Qw3221 0.438957475994513 59*59599516SKenneth E. Jansen #define Qw3222 0.702331961591221 60*59599516SKenneth E. Jansen #define Qw3223 0.438957475994513 61*59599516SKenneth E. Jansen #define Qw3231 0.274348422496571 62*59599516SKenneth E. Jansen #define Qw3232 0.438957475994513 63*59599516SKenneth E. Jansen #define Qw3233 0.274348422496571 64*59599516SKenneth E. Jansen 65*59599516SKenneth E. Jansen #define Qw3311 0.171467764060361 66*59599516SKenneth E. Jansen #define Qw3312 0.274348422496571 67*59599516SKenneth E. Jansen #define Qw3313 0.171467764060361 68*59599516SKenneth E. Jansen #define Qw3321 0.274348422496571 69*59599516SKenneth E. Jansen #define Qw3322 0.438957475994513 70*59599516SKenneth E. Jansen #define Qw3323 0.274348422496571 71*59599516SKenneth E. Jansen #define Qw3331 0.171467764060361 72*59599516SKenneth E. Jansen #define Qw3332 0.274348422496571 73*59599516SKenneth E. Jansen #define Qw3333 0.171467764060357 74*59599516SKenneth E. Jansen 75*59599516SKenneth E. Jansen /* Rule 1*/ 76*59599516SKenneth E. Jansen 77*59599516SKenneth E. Jansen static double rstw1[][4] = { 78*59599516SKenneth E. Jansen { 0.0, 0.0, 0.0, 0.0 } 79*59599516SKenneth E. Jansen }; 80*59599516SKenneth E. Jansen 81*59599516SKenneth E. Jansen static double twt1[] = { 8.0000000 }; 82*59599516SKenneth E. Jansen 83*59599516SKenneth E. Jansen 84*59599516SKenneth E. Jansen /* Rule 2*/ 85*59599516SKenneth E. Jansen 86*59599516SKenneth E. Jansen 87*59599516SKenneth E. Jansen static double rstw8[][4] = { 88*59599516SKenneth E. Jansen {Qp21,Qp21,Qp21,0.0}, 89*59599516SKenneth E. Jansen {Qp22,Qp21,Qp21,0.0}, 90*59599516SKenneth E. Jansen {Qp21,Qp22,Qp21,0.0}, 91*59599516SKenneth E. Jansen {Qp22,Qp22,Qp21,0.0}, 92*59599516SKenneth E. Jansen {Qp21,Qp21,Qp22,0.0}, 93*59599516SKenneth E. Jansen {Qp22,Qp21,Qp22,0.0}, 94*59599516SKenneth E. Jansen {Qp21,Qp22,Qp22,0.0}, 95*59599516SKenneth E. Jansen {Qp22,Qp22,Qp22,0.0} 96*59599516SKenneth E. Jansen }; 97*59599516SKenneth E. Jansen 98*59599516SKenneth E. Jansen static double twt8[] = {Qw2,Qw2,Qw2,Qw2,Qw2,Qw2,Qw2,Qw2}; 99*59599516SKenneth E. Jansen 100*59599516SKenneth E. Jansen /* Rule 3*/ 101*59599516SKenneth E. Jansen 102*59599516SKenneth E. Jansen static double rstw27[][4] = { 103*59599516SKenneth E. Jansen { Qp31, Qp31, Qp31, 0.0 }, 104*59599516SKenneth E. Jansen { Qp32, Qp31, Qp31, 0.0 }, 105*59599516SKenneth E. Jansen { Qp33, Qp31, Qp31, 0.0 }, 106*59599516SKenneth E. Jansen { Qp31, Qp32, Qp31, 0.0 }, 107*59599516SKenneth E. Jansen { Qp32, Qp32, Qp31, 0.0 }, 108*59599516SKenneth E. Jansen { Qp33, Qp32, Qp31, 0.0 }, 109*59599516SKenneth E. Jansen { Qp31, Qp33, Qp31, 0.0 }, 110*59599516SKenneth E. Jansen { Qp32, Qp33, Qp31, 0.0 }, 111*59599516SKenneth E. Jansen { Qp33, Qp33, Qp31, 0.0 }, 112*59599516SKenneth E. Jansen { Qp31, Qp31, Qp32, 0.0 }, 113*59599516SKenneth E. Jansen { Qp32, Qp31, Qp32, 0.0 }, 114*59599516SKenneth E. Jansen { Qp33, Qp31, Qp32, 0.0 }, 115*59599516SKenneth E. Jansen { Qp31, Qp32, Qp32, 0.0 }, 116*59599516SKenneth E. Jansen { Qp32, Qp32, Qp32, 0.0 }, 117*59599516SKenneth E. Jansen { Qp33, Qp32, Qp32, 0.0 }, 118*59599516SKenneth E. Jansen { Qp31, Qp33, Qp32, 0.0 }, 119*59599516SKenneth E. Jansen { Qp32, Qp33, Qp32, 0.0 }, 120*59599516SKenneth E. Jansen { Qp33, Qp33, Qp32, 0.0 }, 121*59599516SKenneth E. Jansen { Qp31, Qp31, Qp33, 0.0 }, 122*59599516SKenneth E. Jansen { Qp32, Qp31, Qp33, 0.0 }, 123*59599516SKenneth E. Jansen { Qp33, Qp31, Qp33, 0.0 }, 124*59599516SKenneth E. Jansen { Qp31, Qp32, Qp33, 0.0 }, 125*59599516SKenneth E. Jansen { Qp32, Qp32, Qp33, 0.0 }, 126*59599516SKenneth E. Jansen { Qp33, Qp32, Qp33, 0.0 }, 127*59599516SKenneth E. Jansen { Qp31, Qp33, Qp33, 0.0 }, 128*59599516SKenneth E. Jansen { Qp32, Qp33, Qp33, 0.0 }, 129*59599516SKenneth E. Jansen { Qp33, Qp33, Qp33, 0.0 } 130*59599516SKenneth E. Jansen }; 131*59599516SKenneth E. Jansen 132*59599516SKenneth E. Jansen 133*59599516SKenneth E. Jansen static double twt27[] = 134*59599516SKenneth E. Jansen { Qw3111, Qw3211, Qw3311, Qw3121, Qw3221, Qw3321, Qw3131, Qw3231, Qw3331, 135*59599516SKenneth E. Jansen Qw3112, Qw3212, Qw3312, Qw3122, Qw3222, Qw3322, Qw3132, Qw3232, Qw3332, 136*59599516SKenneth E. Jansen Qw3113, Qw3213, Qw3313, Qw3123, Qw3223, Qw3323, Qw3133, Qw3233, Qw3333 }; 137*59599516SKenneth E. Jansen 138*59599516SKenneth E. Jansen 139*59599516SKenneth E. Jansen 140*59599516SKenneth E. Jansen #ifdef __cplusplus 141*59599516SKenneth E. Jansen extern "C" { 142*59599516SKenneth E. Jansen #endif 143*59599516SKenneth E. Jansen 144*59599516SKenneth E. Jansen int hexIntPnt(int nint, DARR4 **bcord, double **wt) 145*59599516SKenneth E. Jansen { 146*59599516SKenneth E. Jansen int retval = 1; 147*59599516SKenneth E. Jansen int i,j,k,l; 148*59599516SKenneth E. Jansen DARR4 *rstw; 149*59599516SKenneth E. Jansen double *twt; 150*59599516SKenneth E. Jansen 151*59599516SKenneth E. Jansen /* Rule 4 & 5*/ 152*59599516SKenneth E. Jansen /* rule 5 has not been tested */ 153*59599516SKenneth E. Jansen double bp4[]={-0.8611363115940526,-0.3399810435848563,0.339981043584856,0.8611363115940526}; 154*59599516SKenneth E. Jansen double bp5[]={-0.9061798459386640,-0.5384693101056831,0,0.5384693101056831,0.9061798459386640}; 155*59599516SKenneth E. Jansen double bw4[]={0.3478548451374539,0.6521451548625461,0.6521451548625461,0.3478548451374539}; 156*59599516SKenneth E. Jansen double bw5[]={0.2369268850561891,0.4786286704993665,0.5688888888888889,0.4786286704993665,0.2369268850561891}; 157*59599516SKenneth E. Jansen 158*59599516SKenneth E. Jansen 159*59599516SKenneth E. Jansen if( nint == 1){ *bcord = rstw1; *wt = twt1;} 160*59599516SKenneth E. Jansen 161*59599516SKenneth E. Jansen else if( nint == 8 ){*bcord = rstw8 ; *wt = twt8; } 162*59599516SKenneth E. Jansen 163*59599516SKenneth E. Jansen else if( nint == 27 ) {*bcord = rstw27 ; *wt = twt27; } 164*59599516SKenneth E. Jansen 165*59599516SKenneth E. Jansen else if( nint == 64 ) { 166*59599516SKenneth E. Jansen 167*59599516SKenneth E. Jansen rstw = (DARR4 *)malloc(64*sizeof(DARR4)); 168*59599516SKenneth E. Jansen twt = (double *)malloc(64*sizeof(double)); 169*59599516SKenneth E. Jansen 170*59599516SKenneth E. Jansen i=j=k=0; 171*59599516SKenneth E. Jansen 172*59599516SKenneth E. Jansen for(l=0;l<64;l++){ 173*59599516SKenneth E. Jansen rstw[l][0]=bp4[i]; 174*59599516SKenneth E. Jansen rstw[l][1]=bp4[j]; 175*59599516SKenneth E. Jansen rstw[l][2]=bp4[k]; 176*59599516SKenneth E. Jansen rstw[l][3]=0.0; 177*59599516SKenneth E. Jansen twt[l]=bw4[i]*bw4[j]*bw4[k]; 178*59599516SKenneth E. Jansen i++; 179*59599516SKenneth E. Jansen if(i == 4){ 180*59599516SKenneth E. Jansen i=0 ; j++ ; 181*59599516SKenneth E. Jansen if(j == 4) { j=0; k++;} 182*59599516SKenneth E. Jansen } 183*59599516SKenneth E. Jansen } 184*59599516SKenneth E. Jansen *bcord = rstw; *wt = twt; 185*59599516SKenneth E. Jansen 186*59599516SKenneth E. Jansen } else if( nint == 125) { 187*59599516SKenneth E. Jansen 188*59599516SKenneth E. Jansen rstw = (DARR4 *)malloc(125*sizeof(DARR4)); 189*59599516SKenneth E. Jansen twt = (double *)malloc(125*sizeof(double)); 190*59599516SKenneth E. Jansen 191*59599516SKenneth E. Jansen i=j=k=0; 192*59599516SKenneth E. Jansen 193*59599516SKenneth E. Jansen for(l=0;l<125;l++){ 194*59599516SKenneth E. Jansen rstw[l][0]=bp5[i]; 195*59599516SKenneth E. Jansen rstw[l][1]=bp5[j]; 196*59599516SKenneth E. Jansen rstw[l][2]=bp5[k]; 197*59599516SKenneth E. Jansen rstw[l][3]=0.0; 198*59599516SKenneth E. Jansen twt[l]=bw5[i]*bw5[j]*bw5[k]; 199*59599516SKenneth E. Jansen i++; 200*59599516SKenneth E. Jansen if(i == 5){ 201*59599516SKenneth E. Jansen i=0 ; j++ ; 202*59599516SKenneth E. Jansen if(j == 5) { j=0; k++;} 203*59599516SKenneth E. Jansen } 204*59599516SKenneth E. Jansen } 205*59599516SKenneth E. Jansen *bcord = rstw; *wt = twt; 206*59599516SKenneth E. Jansen 207*59599516SKenneth E. Jansen } else { 208*59599516SKenneth E. Jansen 209*59599516SKenneth E. Jansen fprintf(stderr,"\n%d integration points unsupported; give {8,27,64,125,.}\n",nint); 210*59599516SKenneth E. Jansen retval = 0; 211*59599516SKenneth E. Jansen } 212*59599516SKenneth E. Jansen return retval ; 213*59599516SKenneth E. Jansen } 214*59599516SKenneth E. Jansen 215*59599516SKenneth E. Jansen #ifdef __cplusplus 216*59599516SKenneth E. Jansen } 217*59599516SKenneth E. Jansen #endif 218