xref: /phasta/phSolver/common/symwdg.c (revision 7acde132a6def0fe2daaec0d1a712dff0e5c6636)
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