xref: /phasta/phSolver/common/symquad.c (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
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