xref: /phasta/phSolver/common/symwdg.c (revision 595995161822a203c8467e0e4a253d7bd7d6df32)
1*59599516SKenneth E. Jansen #include <FCMangle.h>
2*59599516SKenneth E. Jansen #define symwdg FortranCInterface_GLOBAL_(symwdg,SYMWDG)
3*59599516SKenneth E. Jansen 
4*59599516SKenneth E. Jansen typedef double DARR4[4];
5*59599516SKenneth E. Jansen 
6*59599516SKenneth E. Jansen int wdgIntPnt(int,DARR4**,double **);
7*59599516SKenneth E. Jansen 
8*59599516SKenneth E. Jansen symwdg(int *n1, double pt[][4], double wt[], int *err)
9*59599516SKenneth E. Jansen {
10*59599516SKenneth E. Jansen   double *lwt;
11*59599516SKenneth E. Jansen   DARR4 *lpt;
12*59599516SKenneth E. Jansen   int i,j;
13*59599516SKenneth E. Jansen   *err = wdgIntPnt(*n1, &lpt, &lwt);
14*59599516SKenneth E. Jansen   for(i=0; i < *n1; i++) {
15*59599516SKenneth E. Jansen     wt[i] = lwt[i];
16*59599516SKenneth E. Jansen     for(j=0; j <4; j++)
17*59599516SKenneth E. Jansen       pt[i][j]=lpt[i][j];
18*59599516SKenneth E. Jansen   }
19*59599516SKenneth E. Jansen }
20*59599516SKenneth E. Jansen 
21*59599516SKenneth E. Jansen /*$Id$*/
22*59599516SKenneth E. Jansen #include <stdio.h>
23*59599516SKenneth E. Jansen 
24*59599516SKenneth E. Jansen /* constants for 3D - 2pt rule */
25*59599516SKenneth E. Jansen 
26*59599516SKenneth E. Jansen #define Qp21 -0.577350269189626
27*59599516SKenneth E. Jansen #define Qp22  0.577350269189626
28*59599516SKenneth E. Jansen #define Pp23  0.166666666666667
29*59599516SKenneth E. Jansen #define Pp24  0.666666666666667
30*59599516SKenneth E. Jansen #define Ww32  0.666666666666667 /* Pw22 * Qw2 */
31*59599516SKenneth E. Jansen 
32*59599516SKenneth E. Jansen /* constants for 3D - rule 3 (18 point) */
33*59599516SKenneth E. Jansen 
34*59599516SKenneth E. Jansen #define Qp31  -0.774596669241483
35*59599516SKenneth E. Jansen #define Qp32   0.000000000000000
36*59599516SKenneth E. Jansen #define Qp33   0.774596669241483
37*59599516SKenneth E. Jansen #define Qw31   0.555555555555556
38*59599516SKenneth E. Jansen #define Qw32   0.888888888888889
39*59599516SKenneth E. Jansen #define Qw33   0.555555555555556
40*59599516SKenneth E. Jansen 
41*59599516SKenneth E. Jansen #define Pp34   0.816847572980459
42*59599516SKenneth E. Jansen #define Pp35   0.091576213509771
43*59599516SKenneth E. Jansen #define Pp36   0.108103018168070
44*59599516SKenneth E. Jansen #define Pp37   0.445948490915965
45*59599516SKenneth E. Jansen #define Pw33   0.219903487310644
46*59599516SKenneth E. Jansen #define Pw34   0.446763179356022
47*59599516SKenneth E. Jansen 
48*59599516SKenneth E. Jansen #define Ww3331 0.122168604061469  /* Pw33 * Qw31 */
49*59599516SKenneth E. Jansen #define Ww3332 0.195469766498350  /* Pw33 * Qw32 */
50*59599516SKenneth E. Jansen #define Ww3333 0.122168604061469  /* Pw33 * Qw33 */
51*59599516SKenneth E. Jansen #define Ww3431 0.248201766308901  /* Pw34 * Qw31 */
52*59599516SKenneth E. Jansen #define Ww3432 0.397122826094242  /* Pw34 * Qw32 */
53*59599516SKenneth E. Jansen #define Ww3433 0.248201766308901  /* Pw34 * Qw33 */
54*59599516SKenneth E. Jansen 
55*59599516SKenneth E. Jansen /* constants for 3D rule 4 (48 point) */
56*59599516SKenneth E. Jansen 
57*59599516SKenneth E. Jansen #define Qp41 -0.861136311594053
58*59599516SKenneth E. Jansen #define Qp42 -0.339981043584856
59*59599516SKenneth E. Jansen #define Qp43  0.339981043584856
60*59599516SKenneth E. Jansen #define Qp44  0.861136311594053
61*59599516SKenneth E. Jansen #define Qw41  0.347854845137454
62*59599516SKenneth E. Jansen #define Qw42  0.652145154862544
63*59599516SKenneth E. Jansen #define Qw43  0.652145154862544
64*59599516SKenneth E. Jansen #define Qw44  0.347854845137544
65*59599516SKenneth E. Jansen 
66*59599516SKenneth E. Jansen #define Pp41  0.873821971016996
67*59599516SKenneth E. Jansen #define Pp42  0.063089014491502
68*59599516SKenneth E. Jansen #define Pp43  0.501426509658179
69*59599516SKenneth E. Jansen #define Pp44  0.249286745170910
70*59599516SKenneth E. Jansen #define Pp45  0.636502499121399
71*59599516SKenneth E. Jansen #define Pp46  0.310352451033785
72*59599516SKenneth E. Jansen #define Pp47  0.053145049844816
73*59599516SKenneth E. Jansen #define Pw41  0.101689812740414      /* S in symtri.c times 2 */
74*59599516SKenneth E. Jansen #define Pw42  0.233572551452758      /* T in symtri.c times 2 */
75*59599516SKenneth E. Jansen #define Pw43  0.165702151236748      /* U in symtri.c times 2 */
76*59599516SKenneth E. Jansen 
77*59599516SKenneth E. Jansen /* the weights should go */
78*59599516SKenneth E. Jansen /*(Pw41,Pw41,Pw41,Pw42,Pw42,Pw42,Pw43,Pw43,Pw43,Pw43,Pw43,Pw43)*Qw41 */
79*59599516SKenneth E. Jansen /*                   >>                                   *Qw42,Qw43,Qw44 */
80*59599516SKenneth E. Jansen 
81*59599516SKenneth E. Jansen #define Ww4141 0.0353732940628734 /* Pw41 * Qw41 */
82*59599516SKenneth E. Jansen #define Ww4142 0.0663165186775404 /* Pw41 * Qw42 */
83*59599516SKenneth E. Jansen #define Ww4143 0.0663165186775404 /* Pw41 * Qw43 */
84*59599516SKenneth E. Jansen #define Ww4144 0.0353732940628734 /* Pw41 * Qw44 */
85*59599516SKenneth E. Jansen #define Ww4241 0.0812493437139591 /* Pw42 * Qw41 */
86*59599516SKenneth E. Jansen #define Ww4242 0.152323207738798  /* Pw42 * Qw42 */
87*59599516SKenneth E. Jansen #define Ww4243 0.152323207738798  /* Pw42 * Qw43 */
88*59599516SKenneth E. Jansen #define Ww4244 0.0812493437139591 /* Pw42 * Qw44 */
89*59599516SKenneth E. Jansen #define Ww4341 0.057640296157402  /* Pw43 * Qw41 */
90*59599516SKenneth E. Jansen #define Ww4342 0.108061855079346  /* Pw43 * Qw42 */
91*59599516SKenneth E. Jansen #define Ww4343 0.108061855079346  /* Pw43 * Qw43 */
92*59599516SKenneth E. Jansen #define Ww4344 0.057640296157402  /* Pw43 * Qw44 */
93*59599516SKenneth E. Jansen 
94*59599516SKenneth E. Jansen /* typedef double DARR4[4] ; */
95*59599516SKenneth E. Jansen 
96*59599516SKenneth E. Jansen /* Rule 1*/
97*59599516SKenneth E. Jansen 
98*59599516SKenneth E. Jansen static double  rstw1[][4] = {
99*59599516SKenneth E. Jansen   { 0.333333333333, 0.333333333333, 0.0, 0.0 }
100*59599516SKenneth E. Jansen };
101*59599516SKenneth E. Jansen 
102*59599516SKenneth E. Jansen static double twt1[] = { 4.0000000 };
103*59599516SKenneth E. Jansen 
104*59599516SKenneth E. Jansen 
105*59599516SKenneth E. Jansen 
106*59599516SKenneth E. Jansen /* Rule 2 */
107*59599516SKenneth E. Jansen 
108*59599516SKenneth E. Jansen static double rstw6[][4] = {
109*59599516SKenneth E. Jansen   {Pp23,Pp23,Qp21,0.0},
110*59599516SKenneth E. Jansen   {Pp24,Pp23,Qp21,0.0},
111*59599516SKenneth E. Jansen   {Pp23,Pp24,Qp21,0.0},
112*59599516SKenneth E. Jansen   {Pp23,Pp23,Qp22,0.0},
113*59599516SKenneth E. Jansen   {Pp24,Pp23,Qp22,0.0},
114*59599516SKenneth E. Jansen   {Pp23,Pp24,Qp22,0.0}
115*59599516SKenneth E. Jansen };
116*59599516SKenneth E. Jansen 
117*59599516SKenneth E. Jansen static double twt6[] = {Ww32,Ww32,Ww32,Ww32,Ww32,Ww32};
118*59599516SKenneth E. Jansen 
119*59599516SKenneth E. Jansen /* Rule 3 */
120*59599516SKenneth E. Jansen 
121*59599516SKenneth E. Jansen static double rstw18[][4] = {
122*59599516SKenneth E. Jansen   {Pp34,Pp35,Qp31,0.0},
123*59599516SKenneth E. Jansen   {Pp35,Pp34,Qp31,0.0},
124*59599516SKenneth E. Jansen   {Pp35,Pp35,Qp31,0.0},
125*59599516SKenneth E. Jansen   {Pp36,Pp37,Qp31,0.0},
126*59599516SKenneth E. Jansen   {Pp37,Pp36,Qp31,0.0},
127*59599516SKenneth E. Jansen   {Pp37,Pp37,Qp31,0.0},
128*59599516SKenneth E. Jansen   {Pp34,Pp35,Qp32,0.0},
129*59599516SKenneth E. Jansen   {Pp35,Pp34,Qp32,0.0},
130*59599516SKenneth E. Jansen   {Pp35,Pp35,Qp32,0.0},
131*59599516SKenneth E. Jansen   {Pp36,Pp37,Qp32,0.0},
132*59599516SKenneth E. Jansen   {Pp37,Pp36,Qp32,0.0},
133*59599516SKenneth E. Jansen   {Pp37,Pp37,Qp32,0.0},
134*59599516SKenneth E. Jansen   {Pp34,Pp35,Qp33,0.0},
135*59599516SKenneth E. Jansen   {Pp35,Pp34,Qp33,0.0},
136*59599516SKenneth E. Jansen   {Pp35,Pp35,Qp33,0.0},
137*59599516SKenneth E. Jansen   {Pp36,Pp37,Qp33,0.0},
138*59599516SKenneth E. Jansen   {Pp37,Pp36,Qp33,0.0},
139*59599516SKenneth E. Jansen   {Pp37,Pp37,Qp33,0.0}
140*59599516SKenneth E. Jansen };
141*59599516SKenneth E. Jansen 
142*59599516SKenneth E. Jansen static double twt18[] =
143*59599516SKenneth E. Jansen { Ww3331, Ww3331, Ww3331, Ww3431, Ww3431, Ww3431, Ww3332, Ww3332, Ww3332,
144*59599516SKenneth E. Jansen   Ww3432, Ww3432, Ww3432, Ww3333, Ww3333, Ww3333, Ww3433, Ww3433, Ww3433};
145*59599516SKenneth E. Jansen 
146*59599516SKenneth E. Jansen /* Rule 4 */
147*59599516SKenneth E. Jansen 
148*59599516SKenneth E. Jansen static double rstw48[][4] = {
149*59599516SKenneth E. Jansen   {Pp41,Pp42,Qp41,0.0},
150*59599516SKenneth E. Jansen   {Pp42,Pp41,Qp41,0.0},
151*59599516SKenneth E. Jansen   {Pp42,Pp42,Qp41,0.0},
152*59599516SKenneth E. Jansen   {Pp43,Pp44,Qp41,0.0},
153*59599516SKenneth E. Jansen   {Pp44,Pp43,Qp41,0.0},
154*59599516SKenneth E. Jansen   {Pp44,Pp44,Qp41,0.0},
155*59599516SKenneth E. Jansen   {Pp45,Pp46,Qp41,0.0},
156*59599516SKenneth E. Jansen   {Pp46,Pp45,Qp41,0.0},
157*59599516SKenneth E. Jansen   {Pp45,Pp47,Qp41,0.0},
158*59599516SKenneth E. Jansen   {Pp46,Pp47,Qp41,0.0},
159*59599516SKenneth E. Jansen   {Pp47,Pp46,Qp41,0.0},
160*59599516SKenneth E. Jansen   {Pp47,Pp45,Qp41,0.0},
161*59599516SKenneth E. Jansen   {Pp41,Pp42,Qp42,0.0},
162*59599516SKenneth E. Jansen   {Pp42,Pp41,Qp42,0.0},
163*59599516SKenneth E. Jansen   {Pp42,Pp42,Qp42,0.0},
164*59599516SKenneth E. Jansen   {Pp43,Pp44,Qp42,0.0},
165*59599516SKenneth E. Jansen   {Pp44,Pp43,Qp42,0.0},
166*59599516SKenneth E. Jansen   {Pp44,Pp44,Qp42,0.0},
167*59599516SKenneth E. Jansen   {Pp45,Pp46,Qp42,0.0},
168*59599516SKenneth E. Jansen   {Pp46,Pp45,Qp42,0.0},
169*59599516SKenneth E. Jansen   {Pp45,Pp47,Qp42,0.0},
170*59599516SKenneth E. Jansen   {Pp46,Pp47,Qp42,0.0},
171*59599516SKenneth E. Jansen   {Pp47,Pp46,Qp42,0.0},
172*59599516SKenneth E. Jansen   {Pp47,Pp45,Qp42,0.0},
173*59599516SKenneth E. Jansen   {Pp41,Pp42,Qp43,0.0},
174*59599516SKenneth E. Jansen   {Pp42,Pp41,Qp43,0.0},
175*59599516SKenneth E. Jansen   {Pp42,Pp42,Qp43,0.0},
176*59599516SKenneth E. Jansen   {Pp43,Pp44,Qp43,0.0},
177*59599516SKenneth E. Jansen   {Pp44,Pp43,Qp43,0.0},
178*59599516SKenneth E. Jansen   {Pp44,Pp44,Qp43,0.0},
179*59599516SKenneth E. Jansen   {Pp45,Pp46,Qp43,0.0},
180*59599516SKenneth E. Jansen   {Pp46,Pp45,Qp43,0.0},
181*59599516SKenneth E. Jansen   {Pp45,Pp47,Qp43,0.0},
182*59599516SKenneth E. Jansen   {Pp46,Pp47,Qp43,0.0},
183*59599516SKenneth E. Jansen   {Pp47,Pp46,Qp43,0.0},
184*59599516SKenneth E. Jansen   {Pp47,Pp45,Qp43,0.0},
185*59599516SKenneth E. Jansen   {Pp41,Pp42,Qp44,0.0},
186*59599516SKenneth E. Jansen   {Pp42,Pp41,Qp44,0.0},
187*59599516SKenneth E. Jansen   {Pp42,Pp42,Qp44,0.0},
188*59599516SKenneth E. Jansen   {Pp43,Pp44,Qp44,0.0},
189*59599516SKenneth E. Jansen   {Pp44,Pp43,Qp44,0.0},
190*59599516SKenneth E. Jansen   {Pp44,Pp44,Qp44,0.0},
191*59599516SKenneth E. Jansen   {Pp45,Pp46,Qp44,0.0},
192*59599516SKenneth E. Jansen   {Pp46,Pp45,Qp44,0.0},
193*59599516SKenneth E. Jansen   {Pp45,Pp47,Qp44,0.0},
194*59599516SKenneth E. Jansen   {Pp46,Pp47,Qp44,0.0},
195*59599516SKenneth E. Jansen   {Pp47,Pp46,Qp44,0.0},
196*59599516SKenneth E. Jansen   {Pp47,Pp45,Qp44,0.0}
197*59599516SKenneth E. Jansen };
198*59599516SKenneth E. Jansen 
199*59599516SKenneth E. Jansen static double twt48[] =
200*59599516SKenneth E. Jansen { Ww4141, Ww4141, Ww4141, Ww4241, Ww4241, Ww4241, Ww4341, Ww4341, Ww4341,
201*59599516SKenneth E. Jansen   Ww4341, Ww4341, Ww4341, Ww4142, Ww4142, Ww4142, Ww4242, Ww4242, Ww4242,
202*59599516SKenneth E. Jansen   Ww4342, Ww4342, Ww4342, Ww4342, Ww4342, Ww4342, Ww4143, Ww4143, Ww4143,
203*59599516SKenneth E. Jansen   Ww4243, Ww4243, Ww4243, Ww4343, Ww4343, Ww4343, Ww4343, Ww4343, Ww4343,
204*59599516SKenneth E. Jansen   Ww4144, Ww4144, Ww4144, Ww4244, Ww4244, Ww4244, Ww4344, Ww4344, Ww4344,
205*59599516SKenneth E. Jansen   Ww4344, Ww4344, Ww4344};
206*59599516SKenneth E. Jansen 
207*59599516SKenneth E. Jansen #ifdef __cplusplus
208*59599516SKenneth E. Jansen extern "C" {
209*59599516SKenneth E. Jansen #endif
210*59599516SKenneth E. Jansen 
211*59599516SKenneth E. Jansen int wdgIntPnt(int nint, DARR4 **bcord, double **wt)
212*59599516SKenneth E. Jansen {
213*59599516SKenneth E. Jansen   int retval = 1;
214*59599516SKenneth E. Jansen 
215*59599516SKenneth E. Jansen   if( nint == 6 ){*bcord = rstw6 ; *wt = twt6; }
216*59599516SKenneth E. Jansen   else if( nint == 1  ){*bcord = rstw1 ; *wt = twt1; }
217*59599516SKenneth E. Jansen   else if( nint == 18 ){*bcord = rstw18 ; *wt = twt18; }
218*59599516SKenneth E. Jansen   else if( nint == 48 ){*bcord = rstw48 ; *wt = twt48; }
219*59599516SKenneth E. Jansen   else
220*59599516SKenneth E. Jansen   {
221*59599516SKenneth E. Jansen     fprintf(stderr,"\n%d integration points unsupported symwdg.c; give {6,18,48}\n",nint);
222*59599516SKenneth E. Jansen     retval = 0;
223*59599516SKenneth E. Jansen   }
224*59599516SKenneth E. Jansen   return retval ;
225*59599516SKenneth E. Jansen }
226*59599516SKenneth E. Jansen 
227*59599516SKenneth E. Jansen #ifdef __cplusplus
228*59599516SKenneth E. Jansen }
229*59599516SKenneth E. Jansen #endif
230