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 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 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