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