Provided by: librheolef-dev_7.2-2_amd64

**NAME**

problem - linear solver (rheolef-7.2)

**DESCRIPTION**

The problem class solves a given linear system for PDEs in variational formulation.

**DESCRIPTION**

The degrees of freedom are splitting betweenunknowndegrees of freedom andblockedone. See alsoform(2)andspace(2). Let a be a bilinearform(2)and lh be the right-hand-side, as in the previous example. The linear system expands as: [ a.uu a.ub ] [ uh.u ] [ lh.u ] [ ] [ ] = [ ] [ a.bu a.bb ] [ uh.b ] [ lh.b ] The uh.b are blocked degrees of freedom: their values are prescribed and the corresponding values are move to the right-hand-side of the system that reduces to: a.uu*uh.u = lh.u - a.ub*uh.b This writes: problem p (a); p.solve (lh, uh); Observe that, during the p.solve call, uh is both an input variable, for the uh.b contribution to the right-hand-side, and an output variable, with uh.u. When using an iterative resolution, the details about its convergence, e.g. the number of iterations and the final residue, can be obtain via the p.option() member function, seesolver_option(4). Finally, the previous linear system is solved via thesolver(4)class: the problem class is simply a convenient wrapper around thesolver(4)one.

**EXAMPLE**

Seedirichlet.cc

**CUSTOMIZATION**

Thesolver(4)could be customized via the constructor optionalsolver_option(4)argument: problem p (a, sopt); When using a directsolver(4), the determinant of the linear system matrix is also available as p.det(). When using an iterativesolver(4), the preconditionner could be customized: p.set_preconditionner (m);

**TODO**

The solve method could return a boolean when success.

**IMPLEMENTATION**

This documentation has been generated from file main/lib/problem.h The problem class is simply an alias to theproblem_basicclasstypedef problem_basic<Float> problem; Theproblem_basicclassprovidesagenericinterface:template <class T, class M = rheo_default_memory_model> class problem_basic { public: // typedefs: typedef typename solver_basic<T,M>::size_type size_type; typedef typename solver_basic<T,M>::determinant_type determinant_type; // allocators: problem_basic (); problem_basic (const form_basic<T,M>& a, const solver_option& sopt = solver_option()); void update_value (const form_basic<T,M>& a); void set_preconditioner (const solver_basic<T,M>&); // accessor: void solve (const field_basic<T,M>& lh, field_basic<T,M>& uh) const; void trans_solve (const field_basic<T,M>& lh, field_basic<T,M>& uh) const; determinant_type det() const; const solver_option& option() const; bool initialized() const; };

**AUTHOR**

Pierre Saramito <Pierre.Saramito@imag.fr>

**COPYRIGHT**

Copyright (C) 2000-2018 Pierre Saramito <Pierre.Saramito@imag.fr> GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.