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