How can I get the Matrix and the right side vector associated with the finite element problem in c++?
10 months ago by
I'm Valerio and I'm using FEniCS fenics/2016.1.0 in C++. My aim is to simply solve a differential problem. I saw several demos and the command used is:
// Compute solution
solve(a == L, u, bc);
with "a" the left side of my weak formulation problem, "L" the right side of my weak formulation problem, "u" the solution (my "u" is a vector field) and "bc" the boundary condition. I want to resolve that problem in a Matrix form, in particular:
find u such that:
with A Matrix associated to "a", f vector associated to "L" and u the same solution of the previous problem. How can i build the Matrix A and the vector f from "a" and "L"? What is the command that I have to launch to calculate u when A and f are available?
I need to do that because I have to multiply the Matrix A and the vector f with a Matrix P before the calculation of the solution u.
Thank you for you attention
Community: FEniCS Project
10 months ago by
it's not a full MWE, but consider the following C++ snippets (note there is not even that much difference with the python implementation)
1) Make sure to include at least the Form class, the Matrix class, the Vector class, Function class, the assemble class and the solve class, i.e.
#include <dolfin/fem/Form.h> #include <dolfin/la/Matrix.h> #include <dolfin/la/Vector.h> #include <dolfin/function/Function.h> #include <dolfin/fem/assemble.h> #include "dolfin/la/solve.h"
2) Instantiate Matrix and Vector and assemble into system
Matrix A; Vector f; // Assemble, note YOUR_LHS/RHS_FORM must be Form objects assemble(A, [YOUR_LHS_FORM]) assemble(f, [YOUR_RHS_FORM])
3) Solve, given properly defined function
// Initialize funcion Function u([YOUR_FUNCTION_SPACE]) // Solve system solve(A, *(u.vector()), f)
Hope this gives you some guidance
Please login to add an answer/comment or follow this question.