/* lobatto_shape.c zero at -1 and 1 page 25 Solin */ /* and kernel functions page 27 */ /* lobatto are integrated Legendre ? */ /* normalized derivatives of Lobatto are Legendre */ #include double L2(double x) { const double c = 0.5*sqrt(1.5); return c * (x*x-1.0); } double L3(double x) { const double c = 0.5*sqrt(2.5); return c * (x*x-1.0) * x; } double L4(double x) { const double c = 0.125*sqrt(3.5); return c * (x*x-1.0) * (5.0*x*x-1.0); } double L5(double x) { const double c = 0.125*sqrt(4.5); return c * (x*x-1.0) * (7.0*x*x-3.0) * x; } double L6(double x) { const double c = 0.0625*sqrt(5.5); return c * (x*x-1.0) * (21.0*x*x*x*x-14.0*x*x+1.0); } double L7(double x) { const double c = 0.0625*sqrt(6.5); return c * (x*x-1.0) * (33.0*x*x*x*x-30.0*x*x+5.0) * x; } double L8(double x) { const double c = sqrt(7.5)/128.0; return c * (x*x-1.0) * (429.0*x*x*x*x*x*x-495.0*x*x*x*x+135.0*x*x-5.0); } /* kernel functions -4.0*L_k-2(x)/(x*x-1.0) */ double ph0(double x) { const double c = -2.0*sqrt(1.5); return c; } double ph1(double x) { const double c = -2.0*sqrt(2.5); return c * x; } double ph2(double x) { const double c = -0.5*sqrt(3.5); return c * (5.0*x*x-1.0); } double ph3(double x) { const double c = -0.5*sqrt(4.5); return c * (7.0*x*x-3.0) * x; } double ph4(double x) { const double c = -0.25*sqrt(5.5); return c * (21.0*x*x*x*x-14.0*x*x+1.0); } double ph5(double x) { const double c = -0.25*sqrt(6.5); return c * (33.0*x*x*x*x-30.0*x*x+5.0) * x; } double ph6(double x) { const double c = -sqrt(7.5)/32.0; return c * (429.0*x*x*x*x*x*x-495.0*x*x*x*x+135.0*x*x-5.0); }