#include "Gauss.h" int Gauss::GetNbrGaussPoints(int dim, int type, int order) { //one-dimension if (dim == ONEDIM) { //line if (type == LINE) { _mNbrGaussPoints = order / 2 + 1; if (_mNbrGaussPoints <= 0) { _mNbrGaussPoints = 1; } else if (_mNbrGaussPoints > 10) { _mNbrGaussPoints = 10; } } else { _mNbrGaussPoints = 0; } } //two-dimension else if (dim == TWODIM) { //TRIANGLE if (type == TRIANGLE) { if (order <= 1) { _mNbrGaussPoints = 1; } else if (order <= 2) { _mNbrGaussPoints = 4; } else if (order <= 4) { _mNbrGaussPoints = 7; } else if (order <= 6) { _mNbrGaussPoints = 12; } else { _mNbrGaussPoints = 16; } } //QUADRANGLE else if (type == QUADRANGLE) { if (order <= 1) { _mNbrGaussPoints = 1; } else if (order <= 2) { _mNbrGaussPoints = 4; } else { _mNbrGaussPoints = 7; } } else { _mNbrGaussPoints = 0; } } //three-dimension else if (dim == THREEDIM) { //TETRAHEDRON if (type == TETRAHEDRON) { if (order <= 1) { _mNbrGaussPoints = 1; } else if (order <= 2) { _mNbrGaussPoints = 5; } else { _mNbrGaussPoints = 15; } } //PRISM else if (type == PRISM) { if (order <= 2) { _mNbrGaussPoints = 6; } else { _mNbrGaussPoints = 9; } } else { _mNbrGaussPoints = 0; } } else { _mNbrGaussPoints = 0; } return _mNbrGaussPoints; } int Gauss::GetNbrGaussPoints() { return _mNbrGaussPoints; } void Gauss::GetGaussPoints(int dim, int type, double* u, double* v, double* w, double* wght) { //one-dimension if (dim == ONEDIM) { //LINE if (type == LINE) { Guass_Line(u, v, w, wght); } } //two-dimension else if (dim == TWODIM) { //TRIANGLE if (type == TRIANGLE) { Gauss_Triangle(u, v, w, wght); } //QUADRANGLE else if (type == QUADRANGLE) { Gauss_Quadrangle(u, v, w, wght); } } //three-dimension else if (dim == THREEDIM) { //TETRAHEDRON if (type == TETRAHEDRON) { Gauss_Tetrahedron(u, v, w, wght); } //PRISM else if (type == PRISM) { Gauss_Prism(u, v, w, wght); } } } void Gauss::Guass_Line(double* u, double* v, double* w, double* wght) { switch (_mNbrGaussPoints) { case 1: u[0] = lx1[0]; v[0] = .0; w[0] = .0; wght[0] = lp1[0]; break; case 2: u[0] = lx2[0]; v[0] = .0; w[0] = .0; wght[0] = lp2[0]; u[1] = lx2[1]; v[1] = .0; w[1] = .0; wght[1] = lp2[1]; break; case 3: u[0] = lx3[0]; v[0] = .0; w[0] = .0; wght[0] = lp3[0]; u[1] = lx3[1]; v[1] = .0; w[1] = .0; wght[1] = lp3[1]; u[2] = lx3[2]; v[2] = .0; w[2] = .0; wght[2] = lp3[2]; break; case 4: u[0] = lx4[0]; v[0] = .0; w[0] = .0; wght[0] = lp4[0]; u[1] = lx4[1]; v[1] = .0; w[1] = .0; wght[1] = lp4[1]; u[2] = lx4[2]; v[2] = .0; w[2] = .0; wght[2] = lp4[2]; u[3] = lx4[3]; v[3] = .0; w[3] = .0; wght[3] = lp4[3]; break; case 5: u[0] = lx5[0]; v[0] = .0; w[0] = .0; wght[0] = lp5[0]; u[1] = lx5[1]; v[1] = .0; w[1] = .0; wght[1] = lp5[1]; u[2] = lx5[2]; v[2] = .0; w[2] = .0; wght[2] = lp5[2]; u[3] = lx5[3]; v[3] = .0; w[3] = .0; wght[3] = lp5[3]; u[4] = lx5[4]; v[4] = .0; w[4] = .0; wght[4] = lp5[4]; break; case 6: u[0] = lx6[0]; v[0] = .0; w[0] = .0; wght[0] = lp6[0]; u[1] = lx6[1]; v[1] = .0; w[1] = .0; wght[1] = lp6[1]; u[2] = lx6[2]; v[2] = .0; w[2] = .0; wght[2] = lp6[2]; u[3] = lx6[3]; v[3] = .0; w[3] = .0; wght[3] = lp6[3]; u[4] = lx6[4]; v[4] = .0; w[4] = .0; wght[4] = lp6[4]; u[5] = lx6[5]; v[5] = .0; w[5] = .0; wght[5] = lp6[5]; break; case 7: u[0] = lx7[0]; v[0] = .0; w[0] = .0; wght[0] = lp7[0]; u[1] = lx7[1]; v[1] = .0; w[1] = .0; wght[1] = lp7[1]; u[2] = lx7[2]; v[2] = .0; w[2] = .0; wght[2] = lp7[2]; u[3] = lx7[3]; v[3] = .0; w[3] = .0; wght[3] = lp7[3]; u[4] = lx7[4]; v[4] = .0; w[4] = .0; wght[4] = lp7[4]; u[5] = lx7[5]; v[5] = .0; w[5] = .0; wght[5] = lp7[5]; u[6] = lx7[6]; v[6] = .0; w[6] = .0; wght[6] = lp7[6]; break; case 8: u[0] = lx8[0]; v[0] = .0; w[0] = .0; wght[0] = lp8[0]; u[1] = lx8[1]; v[1] = .0; w[1] = .0; wght[1] = lp8[1]; u[2] = lx8[2]; v[2] = .0; w[2] = .0; wght[2] = lp8[2]; u[3] = lx8[3]; v[3] = .0; w[3] = .0; wght[3] = lp8[3]; u[4] = lx8[4]; v[4] = .0; w[4] = .0; wght[4] = lp8[4]; u[5] = lx8[5]; v[5] = .0; w[5] = .0; wght[5] = lp8[5]; u[6] = lx8[6]; v[6] = .0; w[6] = .0; wght[6] = lp8[6]; u[7] = lx8[7]; v[7] = .0; w[7] = .0; wght[7] = lp8[7]; break; case 9: u[0] = lx9[0]; v[0] = .0; w[0] = .0; wght[0] = lp9[0]; u[1] = lx9[1]; v[1] = .0; w[1] = .0; wght[1] = lp9[1]; u[2] = lx9[2]; v[2] = .0; w[2] = .0; wght[2] = lp9[2]; u[3] = lx9[3]; v[3] = .0; w[3] = .0; wght[3] = lp9[3]; u[4] = lx9[4]; v[4] = .0; w[4] = .0; wght[4] = lp9[4]; u[5] = lx9[5]; v[5] = .0; w[5] = .0; wght[5] = lp9[5]; u[6] = lx9[6]; v[6] = .0; w[6] = .0; wght[6] = lp9[6]; u[7] = lx9[7]; v[7] = .0; w[7] = .0; wght[7] = lp9[7]; u[8] = lx9[8]; v[8] = .0; w[8] = .0; wght[8] = lp9[8]; break; case 10: u[0] = lx10[0]; v[0] = .0; w[0] = .0; wght[0] = lp10[0]; u[1] = lx10[1]; v[1] = .0; w[1] = .0; wght[1] = lp10[1]; u[2] = lx10[2]; v[2] = .0; w[2] = .0; wght[2] = lp10[2]; u[3] = lx10[3]; v[3] = .0; w[3] = .0; wght[3] = lp10[3]; u[4] = lx10[4]; v[4] = .0; w[4] = .0; wght[4] = lp10[4]; u[5] = lx10[5]; v[5] = .0; w[5] = .0; wght[5] = lp10[5]; u[6] = lx10[6]; v[6] = .0; w[6] = .0; wght[6] = lp10[6]; u[7] = lx10[7]; v[7] = .0; w[7] = .0; wght[7] = lp10[7]; u[8] = lx10[8]; v[8] = .0; w[8] = .0; wght[8] = lp10[8]; u[9] = lx10[9]; v[9] = .0; w[9] = .0; wght[9] = lp10[9]; break; default: break; } } void Gauss::Gauss_Triangle(double* u, double* v, double* w, double* wght) { switch (_mNbrGaussPoints) { case 1: u[0] = xt1[0]; v[0] = yt1[0]; w[0] = 0.; wght[0] = pt1[0]; break; case 4: u[0] = xt4[0]; v[0] = yt4[0]; w[0] = 0.; wght[0] = pt4[0]; u[1] = xt4[1]; v[1] = yt4[1]; w[1] = 0.; wght[1] = pt4[1]; u[2] = xt4[2]; v[2] = yt4[2]; w[2] = 0.; wght[2] = pt4[2]; u[3] = xt4[3]; v[3] = yt4[3]; w[3] = 0.; wght[3] = pt4[3]; break; case 7: u[0] = xt7[0]; v[0] = yt7[0]; w[0] = 0.; wght[0] = pt7[0]; u[1] = xt7[1]; v[1] = yt7[1]; w[1] = 0.; wght[1] = pt7[1]; u[2] = xt7[2]; v[2] = yt7[2]; w[2] = 0.; wght[2] = pt7[2]; u[3] = xt7[3]; v[3] = yt7[3]; w[3] = 0.; wght[3] = pt7[3]; u[4] = xt7[4]; v[4] = yt7[4]; w[4] = 0.; wght[4] = pt7[4]; u[5] = xt7[5]; v[5] = yt7[5]; w[5] = 0.; wght[5] = pt7[5]; u[6] = xt7[6]; v[6] = yt7[6]; w[6] = 0.; wght[6] = pt7[6]; break; case 12: u[0] = xt12[0]; v[0] = yt12[0]; w[0] = 0.; wght[0] = pt12[0]; u[1] = xt12[1]; v[1] = yt12[1]; w[1] = 0.; wght[1] = pt12[1]; u[2] = xt12[2]; v[2] = yt12[2]; w[2] = 0.; wght[2] = pt12[2]; u[3] = xt12[3]; v[3] = yt12[3]; w[3] = 0.; wght[3] = pt12[3]; u[4] = xt12[4]; v[4] = yt12[4]; w[4] = 0.; wght[4] = pt12[4]; u[5] = xt12[5]; v[5] = yt12[5]; w[5] = 0.; wght[5] = pt12[5]; u[6] = xt12[6]; v[6] = yt12[6]; w[6] = 0.; wght[6] = pt12[6]; u[7] = xt12[7]; v[7] = yt12[7]; w[7] = 0.; wght[7] = pt12[7]; u[8] = xt12[8]; v[8] = yt12[8]; w[8] = 0.; wght[8] = pt12[8]; u[9] = xt12[9]; v[9] = yt12[9]; w[9] = 0.; wght[9] = pt12[9]; u[10] = xt12[10]; v[10] = yt12[10]; w[10] = 0.; wght[10] = pt12[10]; u[11] = xt12[11]; v[11] = yt12[11]; w[11] = 0.; wght[11] = pt12[11]; break; case 16: u[0] = xt16[0]; v[0] = yt16[0]; w[0] = 0.; wght[0] = pt16[0]; u[1] = xt16[1]; v[1] = yt16[1]; w[1] = 0.; wght[1] = pt16[1]; u[2] = xt16[2]; v[2] = yt16[2]; w[2] = 0.; wght[2] = pt16[2]; u[3] = xt16[3]; v[3] = yt16[3]; w[3] = 0.; wght[3] = pt16[3]; u[4] = xt16[4]; v[4] = yt16[4]; w[4] = 0.; wght[4] = pt16[4]; u[5] = xt16[5]; v[5] = yt16[5]; w[5] = 0.; wght[5] = pt16[5]; u[6] = xt16[6]; v[6] = yt16[6]; w[6] = 0.; wght[6] = pt16[6]; u[7] = xt16[7]; v[7] = yt16[7]; w[7] = 0.; wght[7] = pt16[7]; u[8] = xt16[8]; v[8] = yt16[8]; w[8] = 0.; wght[8] = pt16[8]; u[9] = xt16[9]; v[9] = yt16[9]; w[9] = 0.; wght[9] = pt16[9]; u[10] = xt16[10]; v[10] = yt16[10]; w[10] = 0.; wght[10] = pt16[10]; u[11] = xt16[11]; v[11] = yt16[11]; w[11] = 0.; wght[11] = pt16[11]; u[12] = xt16[12]; v[12] = yt16[12]; w[12] = 0.; wght[12] = pt16[12]; u[13] = xt16[13]; v[13] = yt16[13]; w[13] = 0.; wght[13] = pt16[13]; u[14] = xt16[14]; v[14] = yt16[14]; w[14] = 0.; wght[14] = pt16[14]; u[15] = xt16[15]; v[15] = yt16[15]; w[15] = 0.; wght[15] = pt16[15]; break; default:break; } } void Gauss::Gauss_Quadrangle(double* u, double* v, double* w, double* wght) { switch (_mNbrGaussPoints) { case 1: u[0] = xq1[0]; v[0] = yq1[0]; w[0] = 0.; wght[0] = pt1[0]; break; case 4: u[0] = xq4[0]; v[0] = yq4[0]; w[0] = 0.; wght[0] = pq4[0]; u[1] = xq4[1]; v[1] = yq4[1]; w[1] = 0.; wght[1] = pq4[1]; u[2] = xq4[2]; v[2] = yq4[2]; w[2] = 0.; wght[2] = pq4[2]; u[3] = xq4[3]; v[3] = yq4[3]; w[3] = 0.; wght[3] = pq4[3]; break; case 7: u[0] = xq7[0]; v[0] = yq7[0]; w[0] = 0.; wght[0] = pq7[0]; u[1] = xq7[1]; v[1] = yq7[1]; w[1] = 0.; wght[1] = pq7[1]; u[2] = xq7[2]; v[2] = yq7[2]; w[2] = 0.; wght[2] = pq7[2]; u[3] = xq7[3]; v[3] = yq7[3]; w[3] = 0.; wght[3] = pq7[3]; u[4] = xq7[4]; v[4] = yq7[4]; w[4] = 0.; wght[4] = pq7[4]; u[5] = xq7[5]; v[5] = yq7[5]; w[5] = 0.; wght[5] = pq7[5]; u[6] = xq7[6]; v[6] = yq7[6]; w[6] = 0.; wght[6] = pq7[6]; break; default: break; } } void Gauss::Gauss_Tetrahedron(double* u, double* v, double* w, double* wght) { switch (_mNbrGaussPoints) { case 1: u[0] = xtet1[0]; v[0] = ytet1[0]; w[0] = ztet1[0]; wght[0] = ptet1[0]; break; case 5: u[0] = xtet5[0]; v[0] = ytet5[0]; w[0] = ztet5[0]; wght[0] = ptet5[0]; u[1] = xtet5[1]; v[1] = ytet5[1]; w[1] = ztet5[1]; wght[1] = ptet5[1]; u[2] = xtet5[2]; v[2] = ytet5[2]; w[2] = ztet5[2]; wght[2] = ptet5[2]; u[3] = xtet5[3]; v[3] = ytet5[3]; w[3] = ztet5[3]; wght[3] = ptet5[3]; u[4] = xtet5[4]; v[4] = ytet5[4]; w[4] = ztet5[4]; wght[4] = ptet5[4]; break; case 15: u[0] = xtet15[0]; v[0] = ytet15[0]; w[0] = ztet15[0]; wght[0] = ptet15[0]; u[1] = xtet15[1]; v[1] = ytet15[1]; w[1] = ztet15[1]; wght[1] = ptet15[1]; u[2] = xtet15[2]; v[2] = ytet15[2]; w[2] = ztet15[2]; wght[2] = ptet15[2]; u[3] = xtet15[3]; v[3] = ytet15[3]; w[3] = ztet15[3]; wght[3] = ptet15[3]; u[4] = xtet15[4]; v[4] = ytet15[4]; w[4] = ztet15[4]; wght[4] = ptet15[4]; u[5] = xtet15[5]; v[5] = ytet15[5]; w[5] = ztet15[5]; wght[5] = ptet15[5]; u[6] = xtet15[6]; v[6] = ytet15[6]; w[6] = ztet15[6]; wght[6] = ptet15[6]; u[7] = xtet15[7]; v[7] = ytet15[7]; w[7] = ztet15[7]; wght[7] = ptet15[7]; u[8] = xtet15[8]; v[8] = ytet15[8]; w[8] = ztet15[8]; wght[8] = ptet15[8]; u[9] = xtet15[9]; v[9] = ytet15[9]; w[9] = ztet15[9]; wght[9] = ptet15[9]; u[10] = xtet15[10]; v[10] = ytet15[10]; w[10] = ztet15[10]; wght[10] = ptet15[10]; u[11] = xtet15[11]; v[11] = ytet15[11]; w[11] = ztet15[11]; wght[11] = ptet15[11]; u[12] = xtet15[12]; v[12] = ytet15[12]; w[12] = ztet15[12]; wght[12] = ptet15[12]; u[13] = xtet15[13]; v[13] = ytet15[13]; w[13] = ztet15[13]; wght[13] = ptet15[13]; u[14] = xtet15[14]; v[14] = ytet15[14]; w[14] = ztet15[14]; wght[14] = ptet15[14]; break; default: break; } } void Gauss::Gauss_Prism(double* u, double* v, double* w, double* wght) { switch (_mNbrGaussPoints) { case 6: u[0] = xpri6[0]; v[0] = ypri6[0]; w[0] = zpri6[0]; wght[0] = ppri6[0]; u[1] = xpri6[1]; v[1] = ypri6[1]; w[1] = zpri6[1]; wght[1] = ppri6[1]; u[2] = xpri6[2]; v[2] = ypri6[2]; w[2] = zpri6[2]; wght[2] = ppri6[2]; u[3] = xpri6[3]; v[3] = ypri6[3]; w[3] = zpri6[3]; wght[3] = ppri6[3]; u[4] = xpri6[4]; v[4] = ypri6[4]; w[4] = zpri6[4]; wght[4] = ppri6[4]; u[5] = xpri6[5]; v[5] = ypri6[5]; w[5] = zpri6[5]; wght[5] = ppri6[5]; break; case 9: u[0] = xpri9[0]; v[0] = ypri9[0]; w[0] = zpri9[0]; wght[0] = ppri9[0]; u[1] = xpri9[1]; v[1] = ypri9[1]; w[1] = zpri9[1]; wght[1] = ppri9[1]; u[2] = xpri9[2]; v[2] = ypri9[2]; w[2] = zpri9[2]; wght[2] = ppri9[2]; u[3] = xpri9[3]; v[3] = ypri9[3]; w[3] = zpri9[3]; wght[3] = ppri9[3]; u[4] = xpri9[4]; v[4] = ypri9[4]; w[4] = zpri9[4]; wght[4] = ppri9[4]; u[5] = xpri9[5]; v[5] = ypri9[5]; w[5] = zpri9[5]; wght[5] = ppri9[5]; u[6] = xpri9[6]; v[6] = ypri9[6]; w[6] = zpri9[6]; wght[6] = ppri9[6]; u[7] = xpri9[7]; v[7] = ypri9[7]; w[7] = zpri9[7]; wght[7] = ppri9[7]; u[8] = xpri9[8]; v[8] = ypri9[8]; w[8] = zpri9[8]; wght[8] = ppri9[8]; break; default: break; } }