1*59599516SKenneth E. Jansen #include <stdlib.h> 2*59599516SKenneth E. Jansen 3*59599516SKenneth E. Jansen #include <FCMangle.h> 4*59599516SKenneth E. Jansen #define symquad FortranCInterface_GLOBAL_(symquad, SYMQUAD) 5*59599516SKenneth E. Jansen 6*59599516SKenneth E. Jansen typedef double DARR3[3]; 7*59599516SKenneth E. Jansen 8*59599516SKenneth E. Jansen int quadIntPnt(int,DARR3**,double **); 9*59599516SKenneth E. Jansen 10*59599516SKenneth E. Jansen symquad(int *n1, double pt[][4], double wt[], int *err) 11*59599516SKenneth E. Jansen { 12*59599516SKenneth E. Jansen double *lwt; 13*59599516SKenneth E. Jansen DARR3 *lpt; 14*59599516SKenneth E. Jansen int i,j; 15*59599516SKenneth E. Jansen *err = quadIntPnt(*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 < 3; 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 #define QpNon -1.000000000000000 27*59599516SKenneth E. Jansen #define Qp21 -0.577350269189626 28*59599516SKenneth E. Jansen #define Qp22 0.577350269189626 29*59599516SKenneth E. Jansen #define Qw2 1.000000000000000 30*59599516SKenneth E. Jansen 31*59599516SKenneth E. Jansen #define Qp31 -0.774596669241483 32*59599516SKenneth E. Jansen #define Qp32 0.000000000000000 33*59599516SKenneth E. Jansen #define Qp33 0.774596669241483 34*59599516SKenneth E. Jansen #define Qw31 0.555555555555556 35*59599516SKenneth E. Jansen #define Qw32 0.888888888888889 36*59599516SKenneth E. Jansen #define Qw33 0.555555555555556 37*59599516SKenneth E. Jansen #define Qw311 0.308641975308642 38*59599516SKenneth E. Jansen #define Qw321 0.493827160493831 39*59599516SKenneth E. Jansen #define Qw322 0.790123456790124 40*59599516SKenneth E. Jansen #define Qw312 0.493827160493831 41*59599516SKenneth E. Jansen #define Qw313 0.308641975308642 42*59599516SKenneth E. Jansen #define Qw323 0.493827160493831 43*59599516SKenneth E. Jansen #define Qw331 0.308641975308642 44*59599516SKenneth E. Jansen #define Qw332 0.493827160493831 45*59599516SKenneth E. Jansen #define Qw333 0.308641975308642 46*59599516SKenneth E. Jansen 47*59599516SKenneth E. Jansen 48*59599516SKenneth E. Jansen static double rstw4[][3] = { 49*59599516SKenneth E. Jansen {Qp21, Qp21, QpNon}, 50*59599516SKenneth E. Jansen {Qp22, Qp21, QpNon}, 51*59599516SKenneth E. Jansen {Qp21, Qp22, QpNon}, 52*59599516SKenneth E. Jansen {Qp22, Qp22, QpNon} 53*59599516SKenneth E. Jansen }; 54*59599516SKenneth E. Jansen 55*59599516SKenneth E. Jansen static double twt4[] = {Qw2,Qw2,Qw2,Qw2}; 56*59599516SKenneth E. Jansen 57*59599516SKenneth E. Jansen static double rstw9[][3] = { 58*59599516SKenneth E. Jansen { Qp31, Qp31, QpNon}, 59*59599516SKenneth E. Jansen { Qp32, Qp31, QpNon}, 60*59599516SKenneth E. Jansen { Qp33, Qp31, QpNon}, 61*59599516SKenneth E. Jansen { Qp31, Qp32, QpNon}, 62*59599516SKenneth E. Jansen { Qp32, Qp32, QpNon}, 63*59599516SKenneth E. Jansen { Qp33, Qp32, QpNon}, 64*59599516SKenneth E. Jansen { Qp31, Qp33, QpNon}, 65*59599516SKenneth E. Jansen { Qp32, Qp33, QpNon}, 66*59599516SKenneth E. Jansen { Qp33, Qp33, QpNon} 67*59599516SKenneth E. Jansen }; 68*59599516SKenneth E. Jansen 69*59599516SKenneth E. Jansen static double twt9[] = { Qw311, Qw321, Qw331, Qw312, Qw322, Qw332, Qw313, 70*59599516SKenneth E. Jansen Qw323, Qw333 }; 71*59599516SKenneth E. Jansen 72*59599516SKenneth E. Jansen 73*59599516SKenneth E. Jansen #ifdef __cplusplus 74*59599516SKenneth E. Jansen extern "C" { 75*59599516SKenneth E. Jansen #endif 76*59599516SKenneth E. Jansen 77*59599516SKenneth E. Jansen int quadIntPnt(int nint, DARR3 **bcord, double **wt) 78*59599516SKenneth E. Jansen { 79*59599516SKenneth E. Jansen int retval = 1; 80*59599516SKenneth E. Jansen int i,j,l; 81*59599516SKenneth E. Jansen DARR3* rstw; 82*59599516SKenneth E. Jansen double* twt; 83*59599516SKenneth E. Jansen 84*59599516SKenneth E. Jansen /* Rule 4 & 5*/ 85*59599516SKenneth E. Jansen /* rule 5 has not been tested */ 86*59599516SKenneth E. Jansen double bp4[]={-0.8611363115940526,-0.3399810435848563,0.339981043584856,0.8611363115940526}; 87*59599516SKenneth E. Jansen double bp5[]={-0.9061798459386640,-0.5384693101056831,0,0.5384693101056831,0.9061798459386640}; 88*59599516SKenneth E. Jansen double bw4[]={0.3478548451374539,0.6521451548625461,0.6521451548625461,0.3478548451374539}; 89*59599516SKenneth E. Jansen double bw5[]={0.2369268850561891,0.4786286704993665,0.5688888888888889,0.4786286704993665,0.2369268850561891}; 90*59599516SKenneth E. Jansen 91*59599516SKenneth E. Jansen if( nint == 4 ){*bcord = rstw4 ; *wt = twt4; } 92*59599516SKenneth E. Jansen else if (nint == 9){*bcord = rstw9 ; *wt = twt9; } 93*59599516SKenneth E. Jansen else if (nint == 16){ 94*59599516SKenneth E. Jansen 95*59599516SKenneth E. Jansen rstw = (DARR3 *)malloc(16*sizeof(DARR3)); 96*59599516SKenneth E. Jansen twt = (double *)malloc(16*sizeof(double)); 97*59599516SKenneth E. Jansen 98*59599516SKenneth E. Jansen i=j=0; 99*59599516SKenneth E. Jansen for(l=0;l<16;l++){ 100*59599516SKenneth E. Jansen rstw[l][0]=bp4[i]; 101*59599516SKenneth E. Jansen rstw[l][1]=bp4[j]; 102*59599516SKenneth E. Jansen rstw[l][2]=QpNon; 103*59599516SKenneth E. Jansen twt[l]= bw4[i]*bw4[j]; 104*59599516SKenneth E. Jansen i++; 105*59599516SKenneth E. Jansen if( i == 4) { i=0; j++;} 106*59599516SKenneth E. Jansen } 107*59599516SKenneth E. Jansen *bcord = rstw; *wt = twt; 108*59599516SKenneth E. Jansen 109*59599516SKenneth E. Jansen }else if(nint == 25){ 110*59599516SKenneth E. Jansen 111*59599516SKenneth E. Jansen rstw = (DARR3 *)malloc(25*sizeof(DARR3)); 112*59599516SKenneth E. Jansen twt = (double *)malloc(25*sizeof(double)); 113*59599516SKenneth E. Jansen 114*59599516SKenneth E. Jansen i=j=0; 115*59599516SKenneth E. Jansen for(l=0;l<25;l++){ 116*59599516SKenneth E. Jansen rstw[l][0]=bp5[i]; 117*59599516SKenneth E. Jansen rstw[l][1]=bp5[j]; 118*59599516SKenneth E. Jansen rstw[l][2]=QpNon; 119*59599516SKenneth E. Jansen twt[l]= bw5[i]*bw5[j]; 120*59599516SKenneth E. Jansen i++; 121*59599516SKenneth E. Jansen if( i == 5) { i=0; j++;} 122*59599516SKenneth E. Jansen } 123*59599516SKenneth E. Jansen *bcord = rstw; *wt = twt; 124*59599516SKenneth E. Jansen 125*59599516SKenneth E. Jansen } else { 126*59599516SKenneth E. Jansen 127*59599516SKenneth E. Jansen fprintf(stderr,"\n%d integration points unsupported in symquad.c; give {4,9,16,25}\n",nint); 128*59599516SKenneth E. Jansen retval = 0; 129*59599516SKenneth E. Jansen } 130*59599516SKenneth E. Jansen return retval ; 131*59599516SKenneth E. Jansen } 132*59599516SKenneth E. Jansen 133*59599516SKenneth E. Jansen #ifdef __cplusplus 134*59599516SKenneth E. Jansen } 135*59599516SKenneth E. Jansen #endif 136