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
symquad(int * n1,double pt[][4],double wt[],int * err)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
quadIntPnt(int nint,DARR3 ** bcord,double ** wt)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