Quoting Garth Wells <[email protected]>: > > oelgaard wrote: > > Public bug reported: > > > > The following two files will reproduce the bug. > > > > M.ufl: > > > > exact = FiniteElement("Lagrange", triangle, 6) > > approx = FiniteElement("Lagrange", triangle, 1) > > > > u = Function(exact) > > uh = Function(approx) > > > > M = (uh - u)*(uh - u)*dx > > > > > > main.cpp: > > > > #include <dolfin.h> > > #include "M.h" > > > > using namespace dolfin; > > > > class Expr : public Expression > > { > > public: > > > > Expr() : Expression(2) {} > > > > void eval(double* values, const double* x) const > > { > > values[0] = 10*x[0]*x[1]; > > } > > > > }; > > > > class Expr2 : public Expression > > { > > public: > > > > Expr2() : Expression(2) {} > > > > void eval(double* values, const double* x) const > > { > > values[0] = sin(5*x[0]); > > } > > }; > > > > class Func2 : public Function > > { > > public: > > > > Func2(FunctionSpace& v) : Function(v) {} > > > > void eval(double* values, const double* x) const > > { > > values[0] = sin(5*x[0]); > > } > > }; > > > > The above class shouldn't be possible with the development version of > DOLFIN. Are you using an older version?
Yes: changeset: 7392:70596970a173 tag: tip user: Anders Logg <[email protected]> date: Wed Oct 21 17:34:32 2009 +0200 summary: Attempt at bug fix in application of periodic boundary conditions on Why shouldn't it be possible to derive a class from Function? Kristian > Garth > > > int main() > > { > > // Create mesh and function space > > UnitSquare mesh(8, 8); > > M::CoefficientSpace_u Vu(mesh); > > M::CoefficientSpace_uh Vuh(mesh); > > > > Expr exact; > > // Expr2 approx; // 12.5251 > > // Func2 approx(Vuh); // 11.1111 > > Func2 approx(Vu); // 11.1111 > > > > M::Functional m(mesh); > > m.u = exact; > > m.uh = approx; > > > > double error = assemble(m); > > > > std::cout << "error: " << error << std::endl; > > > > return 0; > > } > > > > ** Affects: dolfin > > Importance: Undecided > > Status: New > > > > -- > function and expression does not give the same result > https://bugs.launchpad.net/bugs/457262 > You received this bug notification because you are a direct subscriber > of the bug. > > Status in DOLFIN: New > > Bug description: > The following two files will reproduce the bug. > > M.ufl: > > exact = FiniteElement("Lagrange", triangle, 6) > approx = FiniteElement("Lagrange", triangle, 1) > > u = Function(exact) > uh = Function(approx) > > M = (uh - u)*(uh - u)*dx > > > main.cpp: > > #include <dolfin.h> > #include "M.h" > > using namespace dolfin; > > class Expr : public Expression > { > public: > > Expr() : Expression(2) {} > > void eval(double* values, const double* x) const > { > values[0] = 10*x[0]*x[1]; > } > > }; > > class Expr2 : public Expression > { > public: > > Expr2() : Expression(2) {} > > void eval(double* values, const double* x) const > { > values[0] = sin(5*x[0]); > } > }; > > class Func2 : public Function > { > public: > > Func2(FunctionSpace& v) : Function(v) {} > > void eval(double* values, const double* x) const > { > values[0] = sin(5*x[0]); > } > }; > > int main() > { > // Create mesh and function space > UnitSquare mesh(8, 8); > M::CoefficientSpace_u Vu(mesh); > M::CoefficientSpace_uh Vuh(mesh); > > Expr exact; > // Expr2 approx; // 12.5251 > // Func2 approx(Vuh); // 11.1111 > Func2 approx(Vu); // 11.1111 > > M::Functional m(mesh); > m.u = exact; > m.uh = approx; > > double error = assemble(m); > > std::cout << "error: " << error << std::endl; > > return 0; > } > -- function and expression does not give the same result https://bugs.launchpad.net/bugs/457262 You received this bug notification because you are subscribed to DOLFIN. Status in DOLFIN: New Bug description: The following two files will reproduce the bug. M.ufl: exact = FiniteElement("Lagrange", triangle, 6) approx = FiniteElement("Lagrange", triangle, 1) u = Function(exact) uh = Function(approx) M = (uh - u)*(uh - u)*dx main.cpp: #include <dolfin.h> #include "M.h" using namespace dolfin; class Expr : public Expression { public: Expr() : Expression(2) {} void eval(double* values, const double* x) const { values[0] = 10*x[0]*x[1]; } }; class Expr2 : public Expression { public: Expr2() : Expression(2) {} void eval(double* values, const double* x) const { values[0] = sin(5*x[0]); } }; class Func2 : public Function { public: Func2(FunctionSpace& v) : Function(v) {} void eval(double* values, const double* x) const { values[0] = sin(5*x[0]); } }; int main() { // Create mesh and function space UnitSquare mesh(8, 8); M::CoefficientSpace_u Vu(mesh); M::CoefficientSpace_uh Vuh(mesh); Expr exact; // Expr2 approx; // 12.5251 // Func2 approx(Vuh); // 11.1111 Func2 approx(Vu); // 11.1111 M::Functional m(mesh); m.u = exact; m.uh = approx; double error = assemble(m); std::cout << "error: " << error << std::endl; return 0; } _______________________________________________ DOLFIN-dev mailing list [email protected] http://www.fenics.org/mailman/listinfo/dolfin-dev
