OpenFCST: The open-source Fuel Cell Simulation Toolbox
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions | Private Member Functions | Private Attributes | List of all members
FuelCell::ApplicationCore::Picard Class Reference

Application class performing a Picard iteration as described in the PicardBase. More...

#include <picard.h>

Inheritance diagram for FuelCell::ApplicationCore::Picard:
Inheritance graph
[legend]
Collaboration diagram for FuelCell::ApplicationCore::Picard:
Collaboration graph
[legend]

Public Member Functions

 Picard (ApplicationBase &app)
 Constructor, receiving the application computing the residual and solving the linear problem. More...
 
virtual void declare_parameters (ParameterHandler &param)
 Declare the input parameters. More...
 
virtual void initialize (ParameterHandler &param)
 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 &param, 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< ApplicationBaseget_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< ApplicationBaseapp
 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...
 

Detailed Description

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:

\[ u^N = \left( K(u^{N-1}) \right)^{-1} F(u^{N-1}) \]

Adaptive Underrelaxation

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,

\[ \gamma = \gamma _{min} + (1-\gamma _{min})exp(-\alpha (\delta -\epsilon)) \qquad for\ \delta > \epsilon \]

and

\[ \gamma = 1 \qquad for \ \delta<\epsilon \]

where δ is the L_infinity norm of the change in the solution,

\[ \delta = max_i\mid u^{n+1}_i - u^n_i \mid \]

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.

Author
Mayank Sabharwal, 2015

Constructor & Destructor Documentation

FuelCell::ApplicationCore::Picard::Picard ( ApplicationBase app)

Constructor, receiving the application computing the residual and solving the linear problem.

Member Function Documentation

void FuelCell::ApplicationCore::Picard::compute_errors ( FEVector u,
FEVector u_n,
FEVector error,
double &  abs_error,
double &  rel_error,
double &  delta 
)
private
virtual void FuelCell::ApplicationCore::Picard::declare_parameters ( ParameterHandler &  param)
virtual

Declare the input parameters.

Reimplemented from FuelCell::ApplicationCore::PicardBase.

virtual void FuelCell::ApplicationCore::Picard::initialize ( ParameterHandler &  param)
virtual

Read the parameters.

Reimplemented from FuelCell::ApplicationCore::PicardBase.

virtual void FuelCell::ApplicationCore::Picard::solve ( FuelCell::ApplicationCore::FEVector u,
const FuelCell::ApplicationCore::FEVectors in_vectors 
)
virtual

The actual Picard solver.

Implements FuelCell::ApplicationCore::PicardBase.

Member Data Documentation

double FuelCell::ApplicationCore::Picard::alpha
private

Alpha value to be used in the under-relaxation scheme proposed in Durbin and Delemos(2007)

double FuelCell::ApplicationCore::Picard::gamma_min
private

Gamma_min value to be used in the under-relaxation scheme proposed in Durbin and Delemos(2007)

bool FuelCell::ApplicationCore::Picard::underrelaxation
private

Flag for using adaptive under-relaxation.


The documentation for this class was generated from the following file: