InitTypeOfFE_PkEdge(int KK) :k(KK),npe(k+1),ndf(3*npe),X(npe),Data( 5*ndf+3) { //Pi_h_coef=1.; const QuadratureFormular1d QF(-1+2*npe,npe,GaussLegendre(npe),true); for (int i=0;i<npe;++i) X[i]=QF[i].x; HeapSort((R *) X,npe); int j=0; int o[6]; o[0]=0; for(int i=1;i<6;++i) o[i]=o[i-1]+ndf; for(int df=0;df<ndf;++df) { int e= df/npe; int n= df%npe; Data[o[0]+df]=3+e; Data[o[1]+df]=n; Data[o[2]+df]=e; Data[o[3]+df]=0; Data[o[4]+df]=df; } Data[o[5]] =0; Data[o[5]+1] =0 ; Data[o[5]+2] =ndf;// end_dfcomp }
GaussQuadratureTetrahedron::GaussQuadratureTetrahedron(size_t order) { GaussLegendre quadRule = GaussLegendre(order); GaussJacobi10 quadRule10 = GaussJacobi10(order); GaussJacobi20 quadRule20 = GaussJacobi20(order); m_order = std::min(quadRule.order(), std::min(quadRule10.order(), quadRule20.order())); m_numPoints = quadRule.size() * quadRule10.size() * quadRule20.size(); position_type* pvPoint = new position_type[m_numPoints]; weight_type* pvWeight = new weight_type[m_numPoints]; size_t cnt = 0; for(size_t i = 0; i < quadRule20.size(); i++) { for(size_t j = 0; j < quadRule10.size(); j++) { for(size_t k = 0; k < quadRule.size(); k++, cnt++) { pvPoint[cnt][0] = quadRule20.point(i)[0]; pvPoint[cnt][1] = (1.0 - quadRule20.point(i)[0] ) * quadRule10.point(j)[0]; pvPoint[cnt][2] = (1.0 - quadRule20.point(i)[0]) * (1.0 - quadRule10.point(j)[0]) * quadRule.point(k)[0]; pvWeight[cnt] = quadRule20.weight(i) * quadRule10.weight(j) * quadRule.weight(k); } } } m_pvPoint = pvPoint; m_pvWeight = pvWeight; };
GaussLegendreQuadrature() { std::pair< std::vector<Real>, std::vector<Real> > qdr = GaussLegendre(P); for (Uint i=0; i<P; ++i) { for (Uint j=0; j<P; ++j) { for (Uint k=0; k<P; ++k) { roots(k+P*(j+P*i), KSI) = qdr.first[i]; roots(k+P*(j+P*i), ETA) = qdr.first[j]; roots(k+P*(j+P*i), ZTA) = qdr.first[k]; weights[k+P*(j+P*i)] = qdr.second[i] * qdr.second[j] * qdr.second[k]; } } } }
GaussQuadratureQuadrilateral::GaussQuadratureQuadrilateral(size_t order) { GaussLegendre quadRule = GaussLegendre(order); m_order = std::min(quadRule.order(), quadRule.order()); m_numPoints = quadRule.size() * quadRule.size(); position_type* pvPoint = new position_type[m_numPoints]; weight_type* pvWeight = new weight_type[m_numPoints]; size_t cnt = 0; for(size_t i = 0; i < quadRule.size(); i ++) { for(size_t j = 0; j < quadRule.size(); j++, cnt++) { pvPoint[cnt][0] = quadRule.point(i)[0]; pvPoint[cnt][1] = quadRule.point(j)[0]; pvWeight[cnt] = quadRule.weight(i) * quadRule.weight(j); } } m_pvPoint = pvPoint; m_pvWeight = pvWeight; };