159599516SKenneth E. Jansen #include <FCMangle.h>
259599516SKenneth E. Jansen #define symwdg FortranCInterface_GLOBAL_(symwdg,SYMWDG)
359599516SKenneth E. Jansen
459599516SKenneth E. Jansen typedef double DARR4[4];
559599516SKenneth E. Jansen
659599516SKenneth E. Jansen int wdgIntPnt(int,DARR4**,double **);
759599516SKenneth E. Jansen
symwdg(int * n1,double pt[][4],double wt[],int * err)8*f34e7d5cSCameron Smith void symwdg(int *n1, double pt[][4], double wt[], int *err)
959599516SKenneth E. Jansen {
1059599516SKenneth E. Jansen double *lwt;
1159599516SKenneth E. Jansen DARR4 *lpt;
1259599516SKenneth E. Jansen int i,j;
1359599516SKenneth E. Jansen *err = wdgIntPnt(*n1, &lpt, &lwt);
1459599516SKenneth E. Jansen for(i=0; i < *n1; i++) {
1559599516SKenneth E. Jansen wt[i] = lwt[i];
1659599516SKenneth E. Jansen for(j=0; j <4; j++)
1759599516SKenneth E. Jansen pt[i][j]=lpt[i][j];
1859599516SKenneth E. Jansen }
1959599516SKenneth E. Jansen }
2059599516SKenneth E. Jansen
2159599516SKenneth E. Jansen /*$Id$*/
2259599516SKenneth E. Jansen #include <stdio.h>
2359599516SKenneth E. Jansen
2459599516SKenneth E. Jansen /* constants for 3D - 2pt rule */
2559599516SKenneth E. Jansen
2659599516SKenneth E. Jansen #define Qp21 -0.577350269189626
2759599516SKenneth E. Jansen #define Qp22 0.577350269189626
2859599516SKenneth E. Jansen #define Pp23 0.166666666666667
2959599516SKenneth E. Jansen #define Pp24 0.666666666666667
3059599516SKenneth E. Jansen #define Ww32 0.666666666666667 /* Pw22 * Qw2 */
3159599516SKenneth E. Jansen
3259599516SKenneth E. Jansen /* constants for 3D - rule 3 (18 point) */
3359599516SKenneth E. Jansen
3459599516SKenneth E. Jansen #define Qp31 -0.774596669241483
3559599516SKenneth E. Jansen #define Qp32 0.000000000000000
3659599516SKenneth E. Jansen #define Qp33 0.774596669241483
3759599516SKenneth E. Jansen #define Qw31 0.555555555555556
3859599516SKenneth E. Jansen #define Qw32 0.888888888888889
3959599516SKenneth E. Jansen #define Qw33 0.555555555555556
4059599516SKenneth E. Jansen
4159599516SKenneth E. Jansen #define Pp34 0.816847572980459
4259599516SKenneth E. Jansen #define Pp35 0.091576213509771
4359599516SKenneth E. Jansen #define Pp36 0.108103018168070
4459599516SKenneth E. Jansen #define Pp37 0.445948490915965
4559599516SKenneth E. Jansen #define Pw33 0.219903487310644
4659599516SKenneth E. Jansen #define Pw34 0.446763179356022
4759599516SKenneth E. Jansen
4859599516SKenneth E. Jansen #define Ww3331 0.122168604061469 /* Pw33 * Qw31 */
4959599516SKenneth E. Jansen #define Ww3332 0.195469766498350 /* Pw33 * Qw32 */
5059599516SKenneth E. Jansen #define Ww3333 0.122168604061469 /* Pw33 * Qw33 */
5159599516SKenneth E. Jansen #define Ww3431 0.248201766308901 /* Pw34 * Qw31 */
5259599516SKenneth E. Jansen #define Ww3432 0.397122826094242 /* Pw34 * Qw32 */
5359599516SKenneth E. Jansen #define Ww3433 0.248201766308901 /* Pw34 * Qw33 */
5459599516SKenneth E. Jansen
5559599516SKenneth E. Jansen /* constants for 3D rule 4 (48 point) */
5659599516SKenneth E. Jansen
5759599516SKenneth E. Jansen #define Qp41 -0.861136311594053
5859599516SKenneth E. Jansen #define Qp42 -0.339981043584856
5959599516SKenneth E. Jansen #define Qp43 0.339981043584856
6059599516SKenneth E. Jansen #define Qp44 0.861136311594053
6159599516SKenneth E. Jansen #define Qw41 0.347854845137454
6259599516SKenneth E. Jansen #define Qw42 0.652145154862544
6359599516SKenneth E. Jansen #define Qw43 0.652145154862544
6459599516SKenneth E. Jansen #define Qw44 0.347854845137544
6559599516SKenneth E. Jansen
6659599516SKenneth E. Jansen #define Pp41 0.873821971016996
6759599516SKenneth E. Jansen #define Pp42 0.063089014491502
6859599516SKenneth E. Jansen #define Pp43 0.501426509658179
6959599516SKenneth E. Jansen #define Pp44 0.249286745170910
7059599516SKenneth E. Jansen #define Pp45 0.636502499121399
7159599516SKenneth E. Jansen #define Pp46 0.310352451033785
7259599516SKenneth E. Jansen #define Pp47 0.053145049844816
7359599516SKenneth E. Jansen #define Pw41 0.101689812740414 /* S in symtri.c times 2 */
7459599516SKenneth E. Jansen #define Pw42 0.233572551452758 /* T in symtri.c times 2 */
7559599516SKenneth E. Jansen #define Pw43 0.165702151236748 /* U in symtri.c times 2 */
7659599516SKenneth E. Jansen
7759599516SKenneth E. Jansen /* the weights should go */
7859599516SKenneth E. Jansen /*(Pw41,Pw41,Pw41,Pw42,Pw42,Pw42,Pw43,Pw43,Pw43,Pw43,Pw43,Pw43)*Qw41 */
7959599516SKenneth E. Jansen /* >> *Qw42,Qw43,Qw44 */
8059599516SKenneth E. Jansen
8159599516SKenneth E. Jansen #define Ww4141 0.0353732940628734 /* Pw41 * Qw41 */
8259599516SKenneth E. Jansen #define Ww4142 0.0663165186775404 /* Pw41 * Qw42 */
8359599516SKenneth E. Jansen #define Ww4143 0.0663165186775404 /* Pw41 * Qw43 */
8459599516SKenneth E. Jansen #define Ww4144 0.0353732940628734 /* Pw41 * Qw44 */
8559599516SKenneth E. Jansen #define Ww4241 0.0812493437139591 /* Pw42 * Qw41 */
8659599516SKenneth E. Jansen #define Ww4242 0.152323207738798 /* Pw42 * Qw42 */
8759599516SKenneth E. Jansen #define Ww4243 0.152323207738798 /* Pw42 * Qw43 */
8859599516SKenneth E. Jansen #define Ww4244 0.0812493437139591 /* Pw42 * Qw44 */
8959599516SKenneth E. Jansen #define Ww4341 0.057640296157402 /* Pw43 * Qw41 */
9059599516SKenneth E. Jansen #define Ww4342 0.108061855079346 /* Pw43 * Qw42 */
9159599516SKenneth E. Jansen #define Ww4343 0.108061855079346 /* Pw43 * Qw43 */
9259599516SKenneth E. Jansen #define Ww4344 0.057640296157402 /* Pw43 * Qw44 */
9359599516SKenneth E. Jansen
9459599516SKenneth E. Jansen /* typedef double DARR4[4] ; */
9559599516SKenneth E. Jansen
9659599516SKenneth E. Jansen /* Rule 1*/
9759599516SKenneth E. Jansen
9859599516SKenneth E. Jansen static double rstw1[][4] = {
9959599516SKenneth E. Jansen { 0.333333333333, 0.333333333333, 0.0, 0.0 }
10059599516SKenneth E. Jansen };
10159599516SKenneth E. Jansen
10259599516SKenneth E. Jansen static double twt1[] = { 4.0000000 };
10359599516SKenneth E. Jansen
10459599516SKenneth E. Jansen
10559599516SKenneth E. Jansen
10659599516SKenneth E. Jansen /* Rule 2 */
10759599516SKenneth E. Jansen
10859599516SKenneth E. Jansen static double rstw6[][4] = {
10959599516SKenneth E. Jansen {Pp23,Pp23,Qp21,0.0},
11059599516SKenneth E. Jansen {Pp24,Pp23,Qp21,0.0},
11159599516SKenneth E. Jansen {Pp23,Pp24,Qp21,0.0},
11259599516SKenneth E. Jansen {Pp23,Pp23,Qp22,0.0},
11359599516SKenneth E. Jansen {Pp24,Pp23,Qp22,0.0},
11459599516SKenneth E. Jansen {Pp23,Pp24,Qp22,0.0}
11559599516SKenneth E. Jansen };
11659599516SKenneth E. Jansen
11759599516SKenneth E. Jansen static double twt6[] = {Ww32,Ww32,Ww32,Ww32,Ww32,Ww32};
11859599516SKenneth E. Jansen
11959599516SKenneth E. Jansen /* Rule 3 */
12059599516SKenneth E. Jansen
12159599516SKenneth E. Jansen static double rstw18[][4] = {
12259599516SKenneth E. Jansen {Pp34,Pp35,Qp31,0.0},
12359599516SKenneth E. Jansen {Pp35,Pp34,Qp31,0.0},
12459599516SKenneth E. Jansen {Pp35,Pp35,Qp31,0.0},
12559599516SKenneth E. Jansen {Pp36,Pp37,Qp31,0.0},
12659599516SKenneth E. Jansen {Pp37,Pp36,Qp31,0.0},
12759599516SKenneth E. Jansen {Pp37,Pp37,Qp31,0.0},
12859599516SKenneth E. Jansen {Pp34,Pp35,Qp32,0.0},
12959599516SKenneth E. Jansen {Pp35,Pp34,Qp32,0.0},
13059599516SKenneth E. Jansen {Pp35,Pp35,Qp32,0.0},
13159599516SKenneth E. Jansen {Pp36,Pp37,Qp32,0.0},
13259599516SKenneth E. Jansen {Pp37,Pp36,Qp32,0.0},
13359599516SKenneth E. Jansen {Pp37,Pp37,Qp32,0.0},
13459599516SKenneth E. Jansen {Pp34,Pp35,Qp33,0.0},
13559599516SKenneth E. Jansen {Pp35,Pp34,Qp33,0.0},
13659599516SKenneth E. Jansen {Pp35,Pp35,Qp33,0.0},
13759599516SKenneth E. Jansen {Pp36,Pp37,Qp33,0.0},
13859599516SKenneth E. Jansen {Pp37,Pp36,Qp33,0.0},
13959599516SKenneth E. Jansen {Pp37,Pp37,Qp33,0.0}
14059599516SKenneth E. Jansen };
14159599516SKenneth E. Jansen
14259599516SKenneth E. Jansen static double twt18[] =
14359599516SKenneth E. Jansen { Ww3331, Ww3331, Ww3331, Ww3431, Ww3431, Ww3431, Ww3332, Ww3332, Ww3332,
14459599516SKenneth E. Jansen Ww3432, Ww3432, Ww3432, Ww3333, Ww3333, Ww3333, Ww3433, Ww3433, Ww3433};
14559599516SKenneth E. Jansen
14659599516SKenneth E. Jansen /* Rule 4 */
14759599516SKenneth E. Jansen
14859599516SKenneth E. Jansen static double rstw48[][4] = {
14959599516SKenneth E. Jansen {Pp41,Pp42,Qp41,0.0},
15059599516SKenneth E. Jansen {Pp42,Pp41,Qp41,0.0},
15159599516SKenneth E. Jansen {Pp42,Pp42,Qp41,0.0},
15259599516SKenneth E. Jansen {Pp43,Pp44,Qp41,0.0},
15359599516SKenneth E. Jansen {Pp44,Pp43,Qp41,0.0},
15459599516SKenneth E. Jansen {Pp44,Pp44,Qp41,0.0},
15559599516SKenneth E. Jansen {Pp45,Pp46,Qp41,0.0},
15659599516SKenneth E. Jansen {Pp46,Pp45,Qp41,0.0},
15759599516SKenneth E. Jansen {Pp45,Pp47,Qp41,0.0},
15859599516SKenneth E. Jansen {Pp46,Pp47,Qp41,0.0},
15959599516SKenneth E. Jansen {Pp47,Pp46,Qp41,0.0},
16059599516SKenneth E. Jansen {Pp47,Pp45,Qp41,0.0},
16159599516SKenneth E. Jansen {Pp41,Pp42,Qp42,0.0},
16259599516SKenneth E. Jansen {Pp42,Pp41,Qp42,0.0},
16359599516SKenneth E. Jansen {Pp42,Pp42,Qp42,0.0},
16459599516SKenneth E. Jansen {Pp43,Pp44,Qp42,0.0},
16559599516SKenneth E. Jansen {Pp44,Pp43,Qp42,0.0},
16659599516SKenneth E. Jansen {Pp44,Pp44,Qp42,0.0},
16759599516SKenneth E. Jansen {Pp45,Pp46,Qp42,0.0},
16859599516SKenneth E. Jansen {Pp46,Pp45,Qp42,0.0},
16959599516SKenneth E. Jansen {Pp45,Pp47,Qp42,0.0},
17059599516SKenneth E. Jansen {Pp46,Pp47,Qp42,0.0},
17159599516SKenneth E. Jansen {Pp47,Pp46,Qp42,0.0},
17259599516SKenneth E. Jansen {Pp47,Pp45,Qp42,0.0},
17359599516SKenneth E. Jansen {Pp41,Pp42,Qp43,0.0},
17459599516SKenneth E. Jansen {Pp42,Pp41,Qp43,0.0},
17559599516SKenneth E. Jansen {Pp42,Pp42,Qp43,0.0},
17659599516SKenneth E. Jansen {Pp43,Pp44,Qp43,0.0},
17759599516SKenneth E. Jansen {Pp44,Pp43,Qp43,0.0},
17859599516SKenneth E. Jansen {Pp44,Pp44,Qp43,0.0},
17959599516SKenneth E. Jansen {Pp45,Pp46,Qp43,0.0},
18059599516SKenneth E. Jansen {Pp46,Pp45,Qp43,0.0},
18159599516SKenneth E. Jansen {Pp45,Pp47,Qp43,0.0},
18259599516SKenneth E. Jansen {Pp46,Pp47,Qp43,0.0},
18359599516SKenneth E. Jansen {Pp47,Pp46,Qp43,0.0},
18459599516SKenneth E. Jansen {Pp47,Pp45,Qp43,0.0},
18559599516SKenneth E. Jansen {Pp41,Pp42,Qp44,0.0},
18659599516SKenneth E. Jansen {Pp42,Pp41,Qp44,0.0},
18759599516SKenneth E. Jansen {Pp42,Pp42,Qp44,0.0},
18859599516SKenneth E. Jansen {Pp43,Pp44,Qp44,0.0},
18959599516SKenneth E. Jansen {Pp44,Pp43,Qp44,0.0},
19059599516SKenneth E. Jansen {Pp44,Pp44,Qp44,0.0},
19159599516SKenneth E. Jansen {Pp45,Pp46,Qp44,0.0},
19259599516SKenneth E. Jansen {Pp46,Pp45,Qp44,0.0},
19359599516SKenneth E. Jansen {Pp45,Pp47,Qp44,0.0},
19459599516SKenneth E. Jansen {Pp46,Pp47,Qp44,0.0},
19559599516SKenneth E. Jansen {Pp47,Pp46,Qp44,0.0},
19659599516SKenneth E. Jansen {Pp47,Pp45,Qp44,0.0}
19759599516SKenneth E. Jansen };
19859599516SKenneth E. Jansen
19959599516SKenneth E. Jansen static double twt48[] =
20059599516SKenneth E. Jansen { Ww4141, Ww4141, Ww4141, Ww4241, Ww4241, Ww4241, Ww4341, Ww4341, Ww4341,
20159599516SKenneth E. Jansen Ww4341, Ww4341, Ww4341, Ww4142, Ww4142, Ww4142, Ww4242, Ww4242, Ww4242,
20259599516SKenneth E. Jansen Ww4342, Ww4342, Ww4342, Ww4342, Ww4342, Ww4342, Ww4143, Ww4143, Ww4143,
20359599516SKenneth E. Jansen Ww4243, Ww4243, Ww4243, Ww4343, Ww4343, Ww4343, Ww4343, Ww4343, Ww4343,
20459599516SKenneth E. Jansen Ww4144, Ww4144, Ww4144, Ww4244, Ww4244, Ww4244, Ww4344, Ww4344, Ww4344,
20559599516SKenneth E. Jansen Ww4344, Ww4344, Ww4344};
20659599516SKenneth E. Jansen
20759599516SKenneth E. Jansen #ifdef __cplusplus
20859599516SKenneth E. Jansen extern "C" {
20959599516SKenneth E. Jansen #endif
21059599516SKenneth E. Jansen
wdgIntPnt(int nint,DARR4 ** bcord,double ** wt)21159599516SKenneth E. Jansen int wdgIntPnt(int nint, DARR4 **bcord, double **wt)
21259599516SKenneth E. Jansen {
21359599516SKenneth E. Jansen int retval = 1;
21459599516SKenneth E. Jansen
21559599516SKenneth E. Jansen if( nint == 6 ){*bcord = rstw6 ; *wt = twt6; }
21659599516SKenneth E. Jansen else if( nint == 1 ){*bcord = rstw1 ; *wt = twt1; }
21759599516SKenneth E. Jansen else if( nint == 18 ){*bcord = rstw18 ; *wt = twt18; }
21859599516SKenneth E. Jansen else if( nint == 48 ){*bcord = rstw48 ; *wt = twt48; }
21959599516SKenneth E. Jansen else
22059599516SKenneth E. Jansen {
22159599516SKenneth E. Jansen fprintf(stderr,"\n%d integration points unsupported symwdg.c; give {6,18,48}\n",nint);
22259599516SKenneth E. Jansen retval = 0;
22359599516SKenneth E. Jansen }
22459599516SKenneth E. Jansen return retval ;
22559599516SKenneth E. Jansen }
22659599516SKenneth E. Jansen
22759599516SKenneth E. Jansen #ifdef __cplusplus
22859599516SKenneth E. Jansen }
22959599516SKenneth E. Jansen #endif
230