xref: /phasta/phSolver/common/sympyr.c (revision 7acde132a6def0fe2daaec0d1a712dff0e5c6636)
159599516SKenneth E. Jansen #include <stdlib.h>
259599516SKenneth E. Jansen 
359599516SKenneth E. Jansen #include <FCMangle.h>
459599516SKenneth E. Jansen #define sympyr FortranCInterface_GLOBAL_(sympyr, SYMPYR)
559599516SKenneth E. Jansen 
659599516SKenneth E. Jansen typedef double DARR4[4];
759599516SKenneth E. Jansen 
859599516SKenneth E. Jansen int pyrIntPnt(int,DARR4**,double **);
959599516SKenneth E. Jansen 
sympyr(int * n1,double pt[][4],double wt[],int * err)10*f34e7d5cSCameron Smith void sympyr(int *n1, double pt[][4], double wt[], int *err)
1159599516SKenneth E. Jansen {
1259599516SKenneth E. Jansen   double *lwt;
1359599516SKenneth E. Jansen   DARR4 *lpt;
1459599516SKenneth E. Jansen   int i,j;
1559599516SKenneth E. Jansen   *err = pyrIntPnt(*n1, &lpt, &lwt);
1659599516SKenneth E. Jansen   for(i=0; i < *n1; i++) {
1759599516SKenneth E. Jansen     wt[i] = lwt[i];
1859599516SKenneth E. Jansen     for(j=0; j <4; j++)
1959599516SKenneth E. Jansen       pt[i][j]=lpt[i][j];
2059599516SKenneth E. Jansen   }
2159599516SKenneth E. Jansen }
2259599516SKenneth E. Jansen 
2359599516SKenneth E. Jansen /*$Id$*/
2459599516SKenneth E. Jansen #include <stdio.h>
2559599516SKenneth E. Jansen 
2659599516SKenneth E. Jansen /* these are the rule 2 int points and weights */
2759599516SKenneth E. Jansen 
2859599516SKenneth E. Jansen #define mpt455 -0.455341801261479548
2959599516SKenneth E. Jansen #define ppt455  0.455341801261479548
3059599516SKenneth E. Jansen #define mpt577 -0.577350269189625764
3159599516SKenneth E. Jansen #define ppt577  0.577350269189625764
3259599516SKenneth E. Jansen #define mpt122 -0.122008467928146216
3359599516SKenneth E. Jansen #define ppt122  0.122008467928146216
3459599516SKenneth E. Jansen #define ppt622  0.622008467928146212
3559599516SKenneth E. Jansen #define ppt044  0.0446581987385204510
3659599516SKenneth E. Jansen 
3759599516SKenneth E. Jansen /* these are the rule 3 int points and weights */
3859599516SKenneth E. Jansen 
3959599516SKenneth E. Jansen #define zero   0.0000000000000000
4059599516SKenneth E. Jansen #define mpt687 -0.6872983346207417
4159599516SKenneth E. Jansen #define ppt687  0.6872983346207417
4259599516SKenneth E. Jansen #define mpt774 -0.7745966692414834
4359599516SKenneth E. Jansen #define ppt774  0.7745966692414834
4459599516SKenneth E. Jansen #define mpt387 -0.3872983346207416
4559599516SKenneth E. Jansen #define ppt387  0.3872983346207416
4659599516SKenneth E. Jansen #define mpt087 -0.08729833462074170
4759599516SKenneth E. Jansen #define ppt087  0.08729833462074170
4859599516SKenneth E. Jansen #define ppt134 0.1349962850858610
4959599516SKenneth E. Jansen #define ppt215 0.2159940561373775
5059599516SKenneth E. Jansen #define ppt345 0.3455904898198040
5159599516SKenneth E. Jansen #define ppt068 0.06858710562414265
5259599516SKenneth E. Jansen #define ppt109 0.1097393689986282
5359599516SKenneth E. Jansen #define ppt175 0.1755829903978052
5459599516SKenneth E. Jansen #define ppt002 0.002177926162424265
5559599516SKenneth E. Jansen #define ppt003 0.003484681859878818
5659599516SKenneth E. Jansen #define ppt005 0.005575490975806120
5759599516SKenneth E. Jansen 
5859599516SKenneth E. Jansen /* these are the rule 4 integration points */
5959599516SKenneth E. Jansen /*NOT FIXED YET*/
6059599516SKenneth E. Jansen #define Qp41  -0.801346029378026
6159599516SKenneth E. Jansen #define Qp42  -0.316375532749811
6259599516SKenneth E. Jansen #define Qp43   0.316375532749811
6359599516SKenneth E. Jansen #define Qp44   0.801346029378026
6459599516SKenneth E. Jansen #define Qp45  -0.8611363116
6559599516SKenneth E. Jansen 
6659599516SKenneth E. Jansen #define Qp46  -0.576953166749811
6759599516SKenneth E. Jansen #define Qp47  -0.227784076803672
6859599516SKenneth E. Jansen #define Qp48   0.227784076803672
6959599516SKenneth E. Jansen #define Qp49   0.576953166749811
7059599516SKenneth E. Jansen #define Qp410 -0.3399810436
7159599516SKenneth E. Jansen 
7259599516SKenneth E. Jansen #define Qp411 -0.284183144850188
7359599516SKenneth E. Jansen #define Qp412 -0.112196966796327
7459599516SKenneth E. Jansen #define Qp413  0.112196966796327
7559599516SKenneth E. Jansen #define Qp414  0.284183144850188
7659599516SKenneth E. Jansen #define Qp415  0.3399810436
7759599516SKenneth E. Jansen 
7859599516SKenneth E. Jansen #define Qp416 -0.0597902822219738
7959599516SKenneth E. Jansen #define Qp417 -0.0236055108501886
8059599516SKenneth E. Jansen #define Qp418  0.0236055108501886
8159599516SKenneth E. Jansen #define Qp419  0.0597902822219738
8259599516SKenneth E. Jansen #define Qp420  0.8611363116
8359599516SKenneth E. Jansen 
8459599516SKenneth E. Jansen /* Rule 1*/
8559599516SKenneth E. Jansen 
8659599516SKenneth E. Jansen static double  rstw1[][4] = {
8759599516SKenneth E. Jansen   { 0.0, 0.0, 0.0, 0.0 }
8859599516SKenneth E. Jansen };
8959599516SKenneth E. Jansen 
9059599516SKenneth E. Jansen static double twt1[] = { 8.0000000 };
9159599516SKenneth E. Jansen 
9259599516SKenneth E. Jansen 
9359599516SKenneth E. Jansen /* Rule 2*/
9459599516SKenneth E. Jansen 
9559599516SKenneth E. Jansen 
9659599516SKenneth E. Jansen static double rstw8[][4] = {
9759599516SKenneth E. Jansen   {mpt455,mpt455,mpt577,0.0},
9859599516SKenneth E. Jansen   {ppt455,mpt455,mpt577,0.0},
9959599516SKenneth E. Jansen   {mpt455,ppt455,mpt577,0.0},
10059599516SKenneth E. Jansen   {ppt455,ppt455,mpt577,0.0},
10159599516SKenneth E. Jansen   {mpt122,mpt122,ppt577,0.0},
10259599516SKenneth E. Jansen   {ppt122,mpt122,ppt577,0.0},
10359599516SKenneth E. Jansen   {mpt122,ppt122,ppt577,0.0},
10459599516SKenneth E. Jansen   {ppt122,ppt122,ppt577,0.0}
10559599516SKenneth E. Jansen };
10659599516SKenneth E. Jansen 
10759599516SKenneth E. Jansen static double twt8[] = {ppt622,ppt622,ppt622,ppt622,
10859599516SKenneth E. Jansen                         ppt044,ppt044,ppt044,ppt044};
10959599516SKenneth E. Jansen 
11059599516SKenneth E. Jansen /* Rule 3*/
11159599516SKenneth E. Jansen 
11259599516SKenneth E. Jansen static double rstw27[][4] = {
11359599516SKenneth E. Jansen   { mpt687,  mpt687,  mpt774,  0.0 },
11459599516SKenneth E. Jansen   {   zero,  mpt687,  mpt774,  0.0 },
11559599516SKenneth E. Jansen   { ppt687,  mpt687,  mpt774,  0.0 },
11659599516SKenneth E. Jansen   { mpt687,    zero,  mpt774,  0.0 },
11759599516SKenneth E. Jansen   {   zero,    zero,  mpt774,  0.0 },
11859599516SKenneth E. Jansen   { ppt687,    zero,  mpt774,  0.0 },
11959599516SKenneth E. Jansen   { mpt687,  ppt687,  mpt774,  0.0 },
12059599516SKenneth E. Jansen   {   zero,  ppt687,  mpt774,  0.0 },
12159599516SKenneth E. Jansen   { ppt687,  ppt687,  mpt774,  0.0 },
12259599516SKenneth E. Jansen   { mpt387,  mpt387,    zero,  0.0 },
12359599516SKenneth E. Jansen   {   zero,  mpt387,    zero,  0.0 },
12459599516SKenneth E. Jansen   { ppt387,  mpt387,    zero,  0.0 },
12559599516SKenneth E. Jansen   { mpt387,    zero,    zero,  0.0 },
12659599516SKenneth E. Jansen   {   zero,    zero,    zero,  0.0 },
12759599516SKenneth E. Jansen   { ppt387,    zero,    zero,  0.0 },
12859599516SKenneth E. Jansen   { mpt387,  ppt387,    zero,  0.0 },
12959599516SKenneth E. Jansen   {   zero,  ppt387,    zero,  0.0 },
13059599516SKenneth E. Jansen   { ppt387,  ppt387,    zero,  0.0 },
13159599516SKenneth E. Jansen   { mpt087,  mpt087,  ppt774,  0.0 },
13259599516SKenneth E. Jansen   {   zero,  mpt087,  ppt774,  0.0 },
13359599516SKenneth E. Jansen   { ppt087,  mpt087,  ppt774,  0.0 },
13459599516SKenneth E. Jansen   { mpt087,    zero,  ppt774,  0.0 },
13559599516SKenneth E. Jansen   {   zero,    zero,  ppt774,  0.0 },
13659599516SKenneth E. Jansen   { ppt087,    zero,  ppt774,  0.0 },
13759599516SKenneth E. Jansen   { mpt087,  ppt087,  ppt774,  0.0 },
13859599516SKenneth E. Jansen   {   zero,  ppt087,  ppt774,  0.0 },
13959599516SKenneth E. Jansen   { ppt087,  ppt087,  ppt774,  0.0 }
14059599516SKenneth E. Jansen };
14159599516SKenneth E. Jansen 
14259599516SKenneth E. Jansen 
14359599516SKenneth E. Jansen static double twt27[] =
14459599516SKenneth E. Jansen {0.1349962850858610,   0.2159940561373775,   0.1349962850858610,
14559599516SKenneth E. Jansen  0.2159940561373775,   0.3455904898198040,   0.2159940561373775,
14659599516SKenneth E. Jansen  0.1349962850858610,   0.2159940561373775,   0.1349962850858610,
14759599516SKenneth E. Jansen  0.06858710562414265,  0.1097393689986282,   0.06858710562414265,
14859599516SKenneth E. Jansen  0.1097393689986282,   0.1755829903978052,   0.1097393689986282,
14959599516SKenneth E. Jansen  0.06858710562414265,  0.1097393689986282,   0.06858710562414265,
15059599516SKenneth E. Jansen  0.002177926162424265, 0.003484681859878818, 0.002177926162424265,
15159599516SKenneth E. Jansen  0.003484681859878822, 0.005575490975806120, 0.003484681859878825,
15259599516SKenneth E. Jansen  0.002177926162424265, 0.003484681859878822, 0.002177926162424265};
15359599516SKenneth E. Jansen 
15459599516SKenneth E. Jansen /* Rule 4 */
15559599516SKenneth E. Jansen 
15659599516SKenneth E. Jansen static double rstw64[][4] = {
15759599516SKenneth E. Jansen   { Qp41,  Qp41,  Qp45,  0.0 },
15859599516SKenneth E. Jansen   { Qp42,  Qp41,  Qp45,  0.0 },
15959599516SKenneth E. Jansen   { Qp43,  Qp41,  Qp45,  0.0 },
16059599516SKenneth E. Jansen   { Qp44,  Qp41,  Qp45,  0.0 },
16159599516SKenneth E. Jansen   { Qp41,  Qp42,  Qp45,  0.0 },
16259599516SKenneth E. Jansen   { Qp42,  Qp42,  Qp45,  0.0 },
16359599516SKenneth E. Jansen   { Qp43,  Qp42,  Qp45,  0.0 },
16459599516SKenneth E. Jansen   { Qp44,  Qp42,  Qp45,  0.0 },
16559599516SKenneth E. Jansen   { Qp41,  Qp43,  Qp45,  0.0 },
16659599516SKenneth E. Jansen   { Qp42,  Qp43,  Qp45,  0.0 },
16759599516SKenneth E. Jansen   { Qp43,  Qp43,  Qp45,  0.0 },
16859599516SKenneth E. Jansen   { Qp44,  Qp43,  Qp45,  0.0 },
16959599516SKenneth E. Jansen   { Qp41,  Qp44,  Qp45,  0.0 },
17059599516SKenneth E. Jansen   { Qp42,  Qp44,  Qp45,  0.0 },
17159599516SKenneth E. Jansen   { Qp43,  Qp44,  Qp45,  0.0 },
17259599516SKenneth E. Jansen   { Qp44,  Qp44,  Qp45,  0.0 },
17359599516SKenneth E. Jansen   { Qp46,  Qp46,  Qp410,  0.0 },
17459599516SKenneth E. Jansen   { Qp47,  Qp46,  Qp410,  0.0 },
17559599516SKenneth E. Jansen   { Qp48,  Qp46,  Qp410,  0.0 },
17659599516SKenneth E. Jansen   { Qp49,  Qp46,  Qp410,  0.0 },
17759599516SKenneth E. Jansen   { Qp46,  Qp47,  Qp410,  0.0 },
17859599516SKenneth E. Jansen   { Qp47,  Qp47,  Qp410,  0.0 },
17959599516SKenneth E. Jansen   { Qp48,  Qp47,  Qp410,  0.0 },
18059599516SKenneth E. Jansen   { Qp49,  Qp47,  Qp410,  0.0 },
18159599516SKenneth E. Jansen   { Qp46,  Qp48,  Qp410,  0.0 },
18259599516SKenneth E. Jansen   { Qp47,  Qp48,  Qp410,  0.0 },
18359599516SKenneth E. Jansen   { Qp48,  Qp48,  Qp410,  0.0 },
18459599516SKenneth E. Jansen   { Qp49,  Qp48,  Qp410,  0.0 },
18559599516SKenneth E. Jansen   { Qp46,  Qp49,  Qp410,  0.0 },
18659599516SKenneth E. Jansen   { Qp47,  Qp49,  Qp410,  0.0 },
18759599516SKenneth E. Jansen   { Qp48,  Qp49,  Qp410,  0.0 },
18859599516SKenneth E. Jansen   { Qp49,  Qp49,  Qp410,  0.0 },
18959599516SKenneth E. Jansen   { Qp411,  Qp411,  Qp415,  0.0 },
19059599516SKenneth E. Jansen   { Qp412,  Qp411,  Qp415,  0.0 },
19159599516SKenneth E. Jansen   { Qp413,  Qp411,  Qp415,  0.0 },
19259599516SKenneth E. Jansen   { Qp414,  Qp411,  Qp415,  0.0 },
19359599516SKenneth E. Jansen   { Qp411,  Qp412,  Qp415,  0.0 },
19459599516SKenneth E. Jansen   { Qp412,  Qp412,  Qp415,  0.0 },
19559599516SKenneth E. Jansen   { Qp413,  Qp412,  Qp415,  0.0 },
19659599516SKenneth E. Jansen   { Qp414,  Qp412,  Qp415,  0.0 },
19759599516SKenneth E. Jansen   { Qp411,  Qp413,  Qp415,  0.0 },
19859599516SKenneth E. Jansen   { Qp412,  Qp413,  Qp415,  0.0 },
19959599516SKenneth E. Jansen   { Qp413,  Qp413,  Qp415,  0.0 },
20059599516SKenneth E. Jansen   { Qp414,  Qp413,  Qp415,  0.0 },
20159599516SKenneth E. Jansen   { Qp411,  Qp414,  Qp415,  0.0 },
20259599516SKenneth E. Jansen   { Qp412,  Qp414,  Qp415,  0.0 },
20359599516SKenneth E. Jansen   { Qp413,  Qp414,  Qp415,  0.0 },
20459599516SKenneth E. Jansen   { Qp414,  Qp414,  Qp415,  0.0 },
20559599516SKenneth E. Jansen   { Qp416,  Qp416,  Qp420,  0.0 },
20659599516SKenneth E. Jansen   { Qp417,  Qp416,  Qp420,  0.0 },
20759599516SKenneth E. Jansen   { Qp418,  Qp416,  Qp420,  0.0 },
20859599516SKenneth E. Jansen   { Qp419,  Qp416,  Qp420,  0.0 },
20959599516SKenneth E. Jansen   { Qp416,  Qp417,  Qp420,  0.0 },
21059599516SKenneth E. Jansen   { Qp417,  Qp417,  Qp420,  0.0 },
21159599516SKenneth E. Jansen   { Qp418,  Qp417,  Qp420,  0.0 },
21259599516SKenneth E. Jansen   { Qp419,  Qp417,  Qp420,  0.0 },
21359599516SKenneth E. Jansen   { Qp416,  Qp418,  Qp420,  0.0 },
21459599516SKenneth E. Jansen   { Qp417,  Qp418,  Qp420,  0.0 },
21559599516SKenneth E. Jansen   { Qp418,  Qp418,  Qp420,  0.0 },
21659599516SKenneth E. Jansen   { Qp419,  Qp418,  Qp420,  0.0 },
21759599516SKenneth E. Jansen   { Qp416,  Qp419,  Qp420,  0.0 },
21859599516SKenneth E. Jansen   { Qp417,  Qp419,  Qp420,  0.0 },
21959599516SKenneth E. Jansen   { Qp418,  Qp419,  Qp420,  0.0 },
22059599516SKenneth E. Jansen   { Qp419,  Qp419,  Qp420,  0.0 }
22159599516SKenneth E. Jansen };
22259599516SKenneth E. Jansen 
22359599516SKenneth E. Jansen #ifdef __cplusplus
22459599516SKenneth E. Jansen extern "C" {
22559599516SKenneth E. Jansen #endif
22659599516SKenneth E. Jansen 
pyrIntPnt(int nint,DARR4 ** bcord,double ** wt)22759599516SKenneth E. Jansen   int pyrIntPnt(int nint, DARR4 **bcord, double **wt)
22859599516SKenneth E. Jansen {
22959599516SKenneth E. Jansen   int retval = 1;
23059599516SKenneth E. Jansen   int i,j,k,l;
23159599516SKenneth E. Jansen   DARR4 *rstw;
23259599516SKenneth E. Jansen   double *twt;
23359599516SKenneth E. Jansen 
23459599516SKenneth E. Jansen   /* Rule 4 & 5*/
23559599516SKenneth E. Jansen 
23659599516SKenneth E. Jansen   double bp5[]={-0.9061798459,-0.5384693101,0,0.5384693101,0.9061798459};
23759599516SKenneth E. Jansen   double bw4[]={0.3478548446,0.6521451548,0.6521451548,0.3478548446};
23859599516SKenneth E. Jansen   double bw5[]={0.2369268850,0.4786286708,0.5019607843,0.4786286708,0.2369268850};
23959599516SKenneth E. Jansen 
24059599516SKenneth E. Jansen   if( nint == 1){ *bcord = rstw1; *wt = twt1;}
24159599516SKenneth E. Jansen 
24259599516SKenneth E. Jansen   else if( nint == 8 ){*bcord = rstw8 ; *wt = twt8; }
24359599516SKenneth E. Jansen 
24459599516SKenneth E. Jansen   else if( nint == 27 ) {*bcord = rstw27 ; *wt = twt27; }
24559599516SKenneth E. Jansen 
24659599516SKenneth E. Jansen   else if( nint == 64 ) {
24759599516SKenneth E. Jansen 
24859599516SKenneth E. Jansen  /*     rstw = (DARR4 *)malloc(64*sizeof(DARR4)); */
24959599516SKenneth E. Jansen     twt   = (double *)malloc(64*sizeof(double));
25059599516SKenneth E. Jansen 
25159599516SKenneth E. Jansen     i=j=k=0;
25259599516SKenneth E. Jansen 
25359599516SKenneth E. Jansen     for(l=0;l<64;l++){
25459599516SKenneth E. Jansen       twt[l]=bw4[i]*bw4[j]*bw4[k];
25559599516SKenneth E. Jansen       i++;
25659599516SKenneth E. Jansen       if(i == 4){
25759599516SKenneth E. Jansen 	i=0 ; j++ ;
25859599516SKenneth E. Jansen 	if(j == 4) { j=0; k++;}
25959599516SKenneth E. Jansen       }
26059599516SKenneth E. Jansen     }
26159599516SKenneth E. Jansen     *bcord = rstw64; *wt = twt;
26259599516SKenneth E. Jansen 
26359599516SKenneth E. Jansen   } else if( nint == 125) {
26459599516SKenneth E. Jansen 
26559599516SKenneth E. Jansen     rstw = (DARR4 *)malloc(125*sizeof(DARR4));
26659599516SKenneth E. Jansen     twt   = (double *)malloc(125*sizeof(double));
26759599516SKenneth E. Jansen 
26859599516SKenneth E. Jansen     i=j=k=0;
26959599516SKenneth E. Jansen 
27059599516SKenneth E. Jansen     for(l=0;l<125;l++){
27159599516SKenneth E. Jansen       rstw[l][0]=bp5[i];
27259599516SKenneth E. Jansen       rstw[l][1]=bp5[j];
27359599516SKenneth E. Jansen       rstw[l][2]=bp5[k];
27459599516SKenneth E. Jansen       rstw[l][3]=0.0;
27559599516SKenneth E. Jansen       twt[l]=bw5[i]*bw5[j]*bw5[k];
27659599516SKenneth E. Jansen       i++;
27759599516SKenneth E. Jansen       if(i == 5){
27859599516SKenneth E. Jansen 	i=0 ; j++ ;
27959599516SKenneth E. Jansen 	if(j == 5) { j=0; k++;}
28059599516SKenneth E. Jansen       }
28159599516SKenneth E. Jansen     }
28259599516SKenneth E. Jansen     *bcord = rstw; *wt = twt;
28359599516SKenneth E. Jansen 
28459599516SKenneth E. Jansen   } else {
28559599516SKenneth E. Jansen 
28659599516SKenneth E. Jansen     fprintf(stderr,"\n%d integration points unsupported; give {8,27,64,125,.}\n",nint);
28759599516SKenneth E. Jansen     retval = 0;
28859599516SKenneth E. Jansen   }
28959599516SKenneth E. Jansen   return retval ;
29059599516SKenneth E. Jansen }
29159599516SKenneth E. Jansen 
29259599516SKenneth E. Jansen #ifdef __cplusplus
29359599516SKenneth E. Jansen }
29459599516SKenneth E. Jansen #endif
295