OpenFCST: The open-source Fuel Cell Simulation Toolbox
|
Application class performing a Picard iteration as described in the PicardBase. More...
#include <picard.h>
Public Member Functions | |
Picard (ApplicationBase &app) | |
Constructor, receiving the application computing the residual and solving the linear problem. More... | |
virtual void | declare_parameters (ParameterHandler ¶m) |
Declare the input parameters. More... | |
virtual void | initialize (ParameterHandler ¶m) |
Read the parameters. More... | |
virtual void | solve (FuelCell::ApplicationCore::FEVector &u, const FuelCell::ApplicationCore::FEVectors &in_vectors) |
The actual Picard solver. More... | |
Public Member Functions inherited from FuelCell::ApplicationCore::PicardBase | |
PicardBase (ApplicationBase &app) | |
Constructor, receiving the application computing the residual and solving the linear problem. More... | |
void | initialize_initial_guess (BlockVector< double > &dst) |
Control object for the Picard iteration. More... | |
virtual void | assemble () |
Instead of assembling, this function only sets a flag, such that the inner application will be required to assemble a new derivative matrix next time solve() is called. More... | |
virtual double | residual (FuelCell::ApplicationCore::FEVector &dst, const FuelCell::ApplicationCore::FEVectors &rhs) |
Returns the L2-norm of the residual and the residual vector in "dst" using the residual function in the ApplicationBase used to initialize the application. More... | |
Public Member Functions inherited from FuelCell::ApplicationCore::ApplicationWrapper | |
ApplicationWrapper (ApplicationBase &app) | |
Constructor for a derived application. More... | |
~ApplicationWrapper () | |
Destructor. More... | |
virtual void | remesh () |
Generate the next mesh depending on the mesh generation parameters. More... | |
virtual void | init_vector (FEVector &dst) const |
Initialize vector to problem size. More... | |
virtual double | residual (FEVector &dst, const FEVectors &src, bool apply_boundaries=true) |
Compute residual of src and store it into dst . More... | |
virtual void | Tsolve (FEVector &dst, const FEVectors &src) |
Solve the dual system assembled with right hand side rhs and return the result in start . More... | |
virtual double | estimate (const FEVectors &src) |
Estimate cell-wise errors. More... | |
virtual double | evaluate (const FEVectors &src) |
Evaluate a functional. More... | |
virtual void | grid_out (const std::string &filename) const |
virtual void | data_out (const std::string &filename, const FEVectors &src) |
Write data in the format specified by the ParameterHandler. More... | |
virtual std::string | id () const |
Return a unique identification string for this application. More... | |
virtual void | notify (const Event &reason) |
Add a reason for assembling. More... | |
Public Member Functions inherited from FuelCell::ApplicationCore::ApplicationBase | |
ApplicationBase (boost::shared_ptr< ApplicationData > data=boost::shared_ptr< ApplicationData >()) | |
Constructor for an application. More... | |
ApplicationBase (const ApplicationBase &other) | |
Copy constructor. More... | |
virtual | ~ApplicationBase () |
Virtual destructor. More... | |
void | print_parameters_to_file (ParameterHandler ¶m, const std::string &file_name, const ParameterHandler::OutputStyle &style) |
Print default parameters for the application to a file. More... | |
virtual void | start_vector (FEVector &dst, std::string) const |
Initialize vector to problem size. More... | |
virtual void | grid_out (const std::string &) |
Write the mesh in the format specified by the ParameterHandler. More... | |
boost::shared_ptr < ApplicationData > | get_data () |
Get access to the protected variable data. More... | |
const boost::shared_ptr < ApplicationData > | get_data () const |
Get read-only access to the protected variable data. More... | |
virtual void | clear () |
All true in notifications . More... | |
virtual void | clear_events () |
All false in notifications . More... | |
virtual unsigned int | get_solution_index () |
Returns solution index. More... | |
Private Member Functions | |
void | compute_errors (FEVector &u, FEVector &u_n, FEVector &error, double &abs_error, double &rel_error, double &delta) |
Private Attributes | |
bool | underrelaxation |
Flag for using adaptive under-relaxation. More... | |
double | alpha |
Alpha value to be used in the under-relaxation scheme proposed in Durbin and Delemos(2007) More... | |
double | gamma_min |
Gamma_min value to be used in the under-relaxation scheme proposed in Durbin and Delemos(2007) More... | |
Additional Inherited Members | |
Protected Member Functions inherited from FuelCell::ApplicationCore::PicardBase | |
void | debug_output (const FEVector &sol, const FEVector &update, const FEVector &residual) const |
Function used to output any necessary information at each Picard iteration for debugging purposes. More... | |
Protected Member Functions inherited from FuelCell::ApplicationCore::ApplicationWrapper | |
SmartPointer< ApplicationBase > | get_wrapped_application () |
Gain access to the inner application. More... | |
Protected Member Functions inherited from FuelCell::ApplicationCore::ApplicationBase | |
void | print_caller_name (const std::string &caller_name) const |
Print caller name. More... | |
Protected Attributes inherited from FuelCell::ApplicationCore::PicardBase | |
bool | assemble_now |
This flag is set by the function assemble(), indicating that the matrix must be assembled anew upon start. More... | |
double | abs_tolerance |
Absolute tolerance for the Picard convergence loop. More... | |
double | rel_tolerance |
Relative tolerance for the Picard convergence loop. More... | |
int | maxsteps |
Maximu no. More... | |
bool | debug_solution |
Print updated solution after each step into file. More... | |
bool | debug_residual |
Print Picard residual after each step into file Picard_rNNN ? More... | |
unsigned int | debug |
Write debug output to FcstUtilities::log; the higher the number, the more output. More... | |
unsigned int | step |
The number of a basic Picard iteration. More... | |
double | numIter |
Number of Iterations;. More... | |
std::vector< unsigned int > | blocks |
This vector specifies the blocks of the global solution which are supposed to be treated specially. More... | |
unsigned int | n_blocks |
The total number of blocks . More... | |
Protected Attributes inherited from FuelCell::ApplicationCore::ApplicationWrapper | |
SmartPointer< ApplicationBase > | app |
Pointer to the application this one depends upon. More... | |
Protected Attributes inherited from FuelCell::ApplicationCore::ApplicationBase | |
boost::shared_ptr < ApplicationData > | data |
Object for auxiliary data. More... | |
Event | notifications |
Accumulate reasons for assembling here. More... | |
Application class performing a Picard iteration as described in the PicardBase.
This class inverts the entire stiffness matrix based on Algorithm 1 described in J.N. Reddy. The iterations for next guess are calculated as follows:
An adaptive underrelaxation method is available with the Picard solver as proposed by Durbin and Delemos[1]. The scheme involves modifying the underrelaxation factor γ with the error. As the iterations proceed the value of γ approaches unity. The expression used to evaluate γ is,
and
where δ is the L_infinity norm of the change in the solution,
In addition if the solution starts to diverge then the parameter γmin is scaled down to minimize divergence.
[1] Durbin, Timothy, and David Delemos. "Adaptive underrelaxation of Picard iterations in ground water models." Groundwater 45.5 (2007): 648-651.
FuelCell::ApplicationCore::Picard::Picard | ( | ApplicationBase & | app | ) |
Constructor, receiving the application computing the residual and solving the linear problem.
|
private |
|
virtual |
Declare the input parameters.
Reimplemented from FuelCell::ApplicationCore::PicardBase.
|
virtual |
Read the parameters.
Reimplemented from FuelCell::ApplicationCore::PicardBase.
|
virtual |
The actual Picard solver.
Implements FuelCell::ApplicationCore::PicardBase.
|
private |
Alpha value to be used in the under-relaxation scheme proposed in Durbin and Delemos(2007)
|
private |
Gamma_min value to be used in the under-relaxation scheme proposed in Durbin and Delemos(2007)
|
private |
Flag for using adaptive under-relaxation.