MCPcopy Create free account
hub / github.com/FreeFem/FreeFem-sources / findQuadraticPolynomial

Function findQuadraticPolynomial

plugin/seq/plotPDF.cpp:1753–1798  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1751//----------------------------------------------------------------------
1752// P2 Finite Element
1753//----------------------------------------------------------------------
1754
1755#define P2_BARYCENTER
1756#define P2_EDGE
1757
1758void findQuadraticPolynomial(double *const phi, const double *const vx, const double *const vy, const double *const f_P2)
1759{
1760 const int NQ = 6; // number of unknowns in quadratic polynomial
1761
1762 double *a[NQ];
1763 a[0] = new double [NQ*(NQ+1)]; // NQ*(NQ+1) matrix for Gauss Elimination
1764 for(int i = 1; i < NQ; i++)
1765 a[i] = a[i-1] + (NQ+1);
1766
1767#ifdef P2_BARYCENTER
1768 const double cx = (vx[0]+vx[1]+vx[2]) / 3;
1769 const double cy = (vy[0]+vy[1]+vy[2]) / 3;
1770#endif
1771
1772#if defined(P2_BARYCENTER) && defined(P2_EDGE)
1773 const double mx[] = { (vx[1]+vx[2])/2, (vx[2]+vx[0])/2, (vx[0]+vx[1])/2 };
1774 const double my[] = { (vy[1]+vy[2])/2, (vy[2]+vy[0])/2, (vy[0]+vy[1])/2 };
1775 const double ex[] = { 0.99*mx[0]+0.01*cx, 0.99*mx[1]+0.01*cx, 0.99*mx[2]+0.01*cx };
1776 const double ey[] = { 0.99*my[0]+0.01*cy, 0.99*my[1]+0.01*cy, 0.99*my[2]+0.01*cy };
1777#elif defined(P2_BARYCENTER)
1778 const double ex[] = { (vx[0]+cx)/2, (vx[1]+cx)/2, (vx[2]+cx)/2 };
1779 const double ey[] = { (vy[0]+cy)/2, (vy[1]+cy)/2, (vy[2]+cy)/2 };
1780#elif defined(P2_EDGE)
1781 const double ex[] = { (vx[1]+vx[2])/2, (vx[2]+vx[0])/2, (vx[0]+vx[1])/2 };
1782 const double ey[] = { (vy[1]+vy[2])/2, (vy[2]+vy[0])/2, (vy[0]+vy[1])/2 };
1783#endif
1784
1785 const double x[] = { vx[0], vx[1], vx[2], ex[0], ex[1], ex[2] };
1786 const double y[] = { vy[0], vy[1], vy[2], ey[0], ey[1], ey[2] };
1787
1788 for(int i = 0; i < NQ; i++){
1789 a[i][0] = x[i] * x[i];
1790 a[i][1] = x[i] * y[i];
1791 a[i][2] = y[i] * y[i];
1792 a[i][3] = x[i];
1793 a[i][4] = y[i];
1794 a[i][5] = 1;
1795 a[i][6] = f_P2[i];
1796 }
1797
1798 GaussElimination(phi, a, NQ);
1799
1800 delete [] a[0];
1801

Callers 2

plot_P2_isoline_bodyFunction · 0.85
plot_P2_fillFunction · 0.85

Calls 1

GaussEliminationFunction · 0.85

Tested by

no test coverage detected