159599516SKenneth E. Jansen #include <stdlib.h> 259599516SKenneth E. Jansen 359599516SKenneth E. Jansen #include <FCMangle.h> 459599516SKenneth E. Jansen #define symquad FortranCInterface_GLOBAL_(symquad, SYMQUAD) 559599516SKenneth E. Jansen 659599516SKenneth E. Jansen typedef double DARR3[3]; 759599516SKenneth E. Jansen 859599516SKenneth E. Jansen int quadIntPnt(int,DARR3**,double **); 959599516SKenneth E. Jansen 10*f34e7d5cSCameron Smith void symquad(int *n1, double pt[][4], double wt[], int *err) 1159599516SKenneth E. Jansen { 1259599516SKenneth E. Jansen double *lwt; 1359599516SKenneth E. Jansen DARR3 *lpt; 1459599516SKenneth E. Jansen int i,j; 1559599516SKenneth E. Jansen *err = quadIntPnt(*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 < 3; 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 #define QpNon -1.000000000000000 2759599516SKenneth E. Jansen #define Qp21 -0.577350269189626 2859599516SKenneth E. Jansen #define Qp22 0.577350269189626 2959599516SKenneth E. Jansen #define Qw2 1.000000000000000 3059599516SKenneth E. Jansen 3159599516SKenneth E. Jansen #define Qp31 -0.774596669241483 3259599516SKenneth E. Jansen #define Qp32 0.000000000000000 3359599516SKenneth E. Jansen #define Qp33 0.774596669241483 3459599516SKenneth E. Jansen #define Qw31 0.555555555555556 3559599516SKenneth E. Jansen #define Qw32 0.888888888888889 3659599516SKenneth E. Jansen #define Qw33 0.555555555555556 3759599516SKenneth E. Jansen #define Qw311 0.308641975308642 3859599516SKenneth E. Jansen #define Qw321 0.493827160493831 3959599516SKenneth E. Jansen #define Qw322 0.790123456790124 4059599516SKenneth E. Jansen #define Qw312 0.493827160493831 4159599516SKenneth E. Jansen #define Qw313 0.308641975308642 4259599516SKenneth E. Jansen #define Qw323 0.493827160493831 4359599516SKenneth E. Jansen #define Qw331 0.308641975308642 4459599516SKenneth E. Jansen #define Qw332 0.493827160493831 4559599516SKenneth E. Jansen #define Qw333 0.308641975308642 4659599516SKenneth E. Jansen 4759599516SKenneth E. Jansen 4859599516SKenneth E. Jansen static double rstw4[][3] = { 4959599516SKenneth E. Jansen {Qp21, Qp21, QpNon}, 5059599516SKenneth E. Jansen {Qp22, Qp21, QpNon}, 5159599516SKenneth E. Jansen {Qp21, Qp22, QpNon}, 5259599516SKenneth E. Jansen {Qp22, Qp22, QpNon} 5359599516SKenneth E. Jansen }; 5459599516SKenneth E. Jansen 5559599516SKenneth E. Jansen static double twt4[] = {Qw2,Qw2,Qw2,Qw2}; 5659599516SKenneth E. Jansen 5759599516SKenneth E. Jansen static double rstw9[][3] = { 5859599516SKenneth E. Jansen { Qp31, Qp31, QpNon}, 5959599516SKenneth E. Jansen { Qp32, Qp31, QpNon}, 6059599516SKenneth E. Jansen { Qp33, Qp31, QpNon}, 6159599516SKenneth E. Jansen { Qp31, Qp32, QpNon}, 6259599516SKenneth E. Jansen { Qp32, Qp32, QpNon}, 6359599516SKenneth E. Jansen { Qp33, Qp32, QpNon}, 6459599516SKenneth E. Jansen { Qp31, Qp33, QpNon}, 6559599516SKenneth E. Jansen { Qp32, Qp33, QpNon}, 6659599516SKenneth E. Jansen { Qp33, Qp33, QpNon} 6759599516SKenneth E. Jansen }; 6859599516SKenneth E. Jansen 6959599516SKenneth E. Jansen static double twt9[] = { Qw311, Qw321, Qw331, Qw312, Qw322, Qw332, Qw313, 7059599516SKenneth E. Jansen Qw323, Qw333 }; 7159599516SKenneth E. Jansen 7259599516SKenneth E. Jansen 7359599516SKenneth E. Jansen #ifdef __cplusplus 7459599516SKenneth E. Jansen extern "C" { 7559599516SKenneth E. Jansen #endif 7659599516SKenneth E. Jansen 7759599516SKenneth E. Jansen int quadIntPnt(int nint, DARR3 **bcord, double **wt) 7859599516SKenneth E. Jansen { 7959599516SKenneth E. Jansen int retval = 1; 8059599516SKenneth E. Jansen int i,j,l; 8159599516SKenneth E. Jansen DARR3* rstw; 8259599516SKenneth E. Jansen double* twt; 8359599516SKenneth E. Jansen 8459599516SKenneth E. Jansen /* Rule 4 & 5*/ 8559599516SKenneth E. Jansen /* rule 5 has not been tested */ 8659599516SKenneth E. Jansen double bp4[]={-0.8611363115940526,-0.3399810435848563,0.339981043584856,0.8611363115940526}; 8759599516SKenneth E. Jansen double bp5[]={-0.9061798459386640,-0.5384693101056831,0,0.5384693101056831,0.9061798459386640}; 8859599516SKenneth E. Jansen double bw4[]={0.3478548451374539,0.6521451548625461,0.6521451548625461,0.3478548451374539}; 8959599516SKenneth E. Jansen double bw5[]={0.2369268850561891,0.4786286704993665,0.5688888888888889,0.4786286704993665,0.2369268850561891}; 9059599516SKenneth E. Jansen 9159599516SKenneth E. Jansen if( nint == 4 ){*bcord = rstw4 ; *wt = twt4; } 9259599516SKenneth E. Jansen else if (nint == 9){*bcord = rstw9 ; *wt = twt9; } 9359599516SKenneth E. Jansen else if (nint == 16){ 9459599516SKenneth E. Jansen 9559599516SKenneth E. Jansen rstw = (DARR3 *)malloc(16*sizeof(DARR3)); 9659599516SKenneth E. Jansen twt = (double *)malloc(16*sizeof(double)); 9759599516SKenneth E. Jansen 9859599516SKenneth E. Jansen i=j=0; 9959599516SKenneth E. Jansen for(l=0;l<16;l++){ 10059599516SKenneth E. Jansen rstw[l][0]=bp4[i]; 10159599516SKenneth E. Jansen rstw[l][1]=bp4[j]; 10259599516SKenneth E. Jansen rstw[l][2]=QpNon; 10359599516SKenneth E. Jansen twt[l]= bw4[i]*bw4[j]; 10459599516SKenneth E. Jansen i++; 10559599516SKenneth E. Jansen if( i == 4) { i=0; j++;} 10659599516SKenneth E. Jansen } 10759599516SKenneth E. Jansen *bcord = rstw; *wt = twt; 10859599516SKenneth E. Jansen 10959599516SKenneth E. Jansen }else if(nint == 25){ 11059599516SKenneth E. Jansen 11159599516SKenneth E. Jansen rstw = (DARR3 *)malloc(25*sizeof(DARR3)); 11259599516SKenneth E. Jansen twt = (double *)malloc(25*sizeof(double)); 11359599516SKenneth E. Jansen 11459599516SKenneth E. Jansen i=j=0; 11559599516SKenneth E. Jansen for(l=0;l<25;l++){ 11659599516SKenneth E. Jansen rstw[l][0]=bp5[i]; 11759599516SKenneth E. Jansen rstw[l][1]=bp5[j]; 11859599516SKenneth E. Jansen rstw[l][2]=QpNon; 11959599516SKenneth E. Jansen twt[l]= bw5[i]*bw5[j]; 12059599516SKenneth E. Jansen i++; 12159599516SKenneth E. Jansen if( i == 5) { i=0; j++;} 12259599516SKenneth E. Jansen } 12359599516SKenneth E. Jansen *bcord = rstw; *wt = twt; 12459599516SKenneth E. Jansen 12559599516SKenneth E. Jansen } else { 12659599516SKenneth E. Jansen 12759599516SKenneth E. Jansen fprintf(stderr,"\n%d integration points unsupported in symquad.c; give {4,9,16,25}\n",nint); 12859599516SKenneth E. Jansen retval = 0; 12959599516SKenneth E. Jansen } 13059599516SKenneth E. Jansen return retval ; 13159599516SKenneth E. Jansen } 13259599516SKenneth E. Jansen 13359599516SKenneth E. Jansen #ifdef __cplusplus 13459599516SKenneth E. Jansen } 13559599516SKenneth E. Jansen #endif 136