std::string operator()(Equation const & e, bool use_parenthesis = false) const { std::stringstream ss; ss << operator()(e.lhs()) << " = " << operator()(e.rhs()); static_cast<int>(use_parenthesis); //to silence unused parameter warnings return ss.str(); }
//----------------------------------------------------------------------------- void dolfin::solve(const Equation& equation, Function& u, std::vector<const DirichletBC*> bcs, const double tol, GoalFunctional& M) { // Solve linear problem if (equation.is_linear()) { LinearVariationalProblem problem(*equation.lhs(), *equation.rhs(), u, bcs); AdaptiveLinearVariationalSolver solver(problem, M); solver.solve(tol); } else { // Raise error if the problem is nonlinear (for now) dolfin_error("solve.cpp", "solve nonlinear variational problem adaptively", "Nonlinear adaptive solve not implemented without Jacobian"); } }
//----------------------------------------------------------------------------- void dolfin::solve(const Equation& equation, Function& u, std::vector<const BoundaryCondition*> bcs, Parameters parameters) { // Solve linear problem if (equation.is_linear()) { LinearVariationalProblem problem(*equation.lhs(), *equation.rhs(), u, bcs); LinearVariationalSolver solver(problem); solver.parameters.update(parameters); solver.solve(); } // Solve nonlinear problem else { NonlinearVariationalProblem problem(*equation.lhs(), u, bcs); NonlinearVariationalSolver solver(problem); solver.parameters.update(parameters); solver.solve(); } }