|
Hermes2D
3.0
|
#include <picard_solver.h>
Inheritance diagram for Hermes::Hermes2D::PicardSolver< Scalar >:Public Member Functions | |
| PicardSolver (DiscreteProblem< Scalar > *dp) | |
| PicardSolver (WeakFormSharedPtr< Scalar > wf, SpaceSharedPtr< Scalar > space) | |
| PicardSolver (WeakFormSharedPtr< Scalar > wf, std::vector< SpaceSharedPtr< Scalar > > spaces) | |
| virtual void | solve (Scalar *coeff_vec) |
| Scalar * | get_sln_vector () |
| Get sln vector. | |
| virtual void | set_spaces (std::vector< SpaceSharedPtr< Scalar > > spaces) |
| DiscreteProblemWeakForm helper. | |
| virtual void | set_verbose_output (bool to_set) |
| See Hermes::Mixins::Loggable. | |
| virtual void | set_weak_formulation (WeakFormSharedPtr< Scalar > wf) |
| DiscreteProblemWeakForm helper. | |
| virtual void | assemble_residual (bool store_previous_residual) |
| virtual bool | assemble_jacobian (bool store_previous_jacobian) |
| virtual bool | assemble (bool store_previous_jacobian, bool store_previous_residual) |
| virtual void | init_solving (Scalar *coeff_vec) |
| Initialization - called at the beginning of solving. | |
| virtual bool | isOkay () const |
| State querying helpers. | |
| std::string | getClassName () const |
Public Member Functions inherited from Hermes::Hermes2D::Solver< Scalar > | |
| Solver (bool initialize_discrete_problem=true) | |
| Solver (DiscreteProblem< Scalar > *dp) | |
| Solver (WeakFormSharedPtr< Scalar > wf, SpaceSharedPtr< Scalar > space) | |
| Solver (WeakFormSharedPtr< Scalar > wf, std::vector< SpaceSharedPtr< Scalar > > spaces) | |
| virtual void | solve () |
| Basic solve method. | |
| virtual void | solve (MeshFunctionSharedPtr< Scalar > initial_guess) |
| virtual void | solve (std::vector< MeshFunctionSharedPtr< Scalar > > initial_guess) |
| virtual void | set_time (double time) |
| set time information for time-dependent problems. | |
| virtual void | set_time_step (double time_step) |
|
virtual std::vector < SpaceSharedPtr< Scalar > > | get_spaces () |
| Get all spaces as a std::vector. | |
Public Member Functions inherited from Hermes::Hermes2D::Mixins::SettableSpaces< Scalar > | |
| virtual void | set_space (SpaceSharedPtr< Scalar > space) |
| virtual SpaceSharedPtr< Scalar > | get_space (int n) |
Public Member Functions inherited from Hermes::Hermes2D::Mixins::DiscreteProblemWeakForm< Scalar > | |
| WeakFormSharedPtr< Scalar > | get_weak_formulation () const |
Additional Inherited Members | |
Protected Member Functions inherited from Hermes::Hermes2D::Mixins::DiscreteProblemWeakForm< Scalar > | |
| DiscreteProblemWeakForm (WeakFormSharedPtr< Scalar > wf=WeakFormSharedPtr< Scalar >(nullptr)) | |
Protected Attributes inherited from Hermes::Hermes2D::Solver< Scalar > | |
| DiscreteProblem< Scalar > * | dp |
| FE problem being solved. | |
| bool | own_dp |
| This instance owns its DP. | |
Protected Attributes inherited from Hermes::Hermes2D::Mixins::DiscreteProblemWeakForm< Scalar > | |
| WeakFormSharedPtr< Scalar > | wf |
| Weak formulation. | |
Class for the Picard's method.
For details about the optionally applied Anderson acceleration, the following website
http://www.hpfem.org/hermes/hermes-tutorial/doc/_build/html/src/hermes2d/B-nonlinear/01-picard.html will give an overview.
Typical usage:
// Initialize Picard's solver.
// Here wf is Hermes2D::WeakForm<std::complex<double> >, space is Hermes2D::Space<std::complex<double> >
Hermes::Hermes2D::PicardSolver<std::complex<double> > picard_solver(&wf, &space);
// Here we have an initial guess for the Picard's method - let us say that we already have a previous time level solution
Solution<std::complex<double> > prevTimeLevelSolution;
..... // Here we fill prevTimeLevelSolution.
// Solve the linear problem.
try
{
picard_solver.solve(&prevTimeLevelSolution);
std::complex<double> * sln_vector = picard_solver.get_sln_vector();
Hermes::Hermes2D::Solution<std::complex<double> >::vector_to_solution(sln_vector, &space, &sln);
}
// All kinds of Exceptions may happen (Linear algebraic solver, some bad parameters, some data not initialized...)
catch(Hermes::Exceptions::Exception& e)
{
e.print_msg();
return -1;
}
// For illustrative purposes, otherwise one can just catch std::exception directly, as Hermes::Exceptions::Exception derive from it.
catch(std::exception& e)
{
std::cout << e.what();
return -1;
}
Definition at line 74 of file picard_solver.h.
|
virtual |
Basic solve method - in linear solvers it serves only as an initial guess for iterative solvers.
| [in] | coeff_vec | initiall guess. |
Implements Hermes::Hermes2D::Solver< Scalar >.
Definition at line 62 of file picard_solver.cpp.