|
OpenFCST: The open-source Fuel Cell Simulation Toolbox
|
#include <theta_scheme.h>


Public Member Functions | |
| ThetaScheme (ApplicationBase &app) | |
| Constructor, receiving an application with transient model and a data object. More... | |
| virtual void | declare_parameters (ParameterHandler ¶m) |
| Declare input parameters. More... | |
| virtual void | initialize (ParameterHandler ¶m) |
| Read parameters. More... | |
| virtual void | solve (FuelCell::ApplicationCore::FEVector &u, const FuelCell::ApplicationCore::FEVectors &in_vectors) |
| Actual transient solver. More... | |
Public Member Functions inherited from FuelCell::ApplicationCore::TransientBase | |
| TransientBase (ApplicationBase &app) | |
| Constructor, receiving an application with transient model and a data object. 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... | |
Static Public Attributes | |
| static const FuelCell::ApplicationCore::Event | new_assembly |
| Event used to make application reassemble its system matrix and rhs. More... | |
Private Member Functions | |
| void | solve_operations (FuelCell::ApplicationCore::FEVector &u, const FuelCell::ApplicationCore::FEVectors &in_vectors, bool print_solution) |
Performs one transient iteration with the given time step tau. More... | |
Private Attributes | |
| double | theta |
Parameter . More... | |
| double | current_time |
| float | current_layer |
| Variable that contains current time layer. More... | |
| unsigned short int | scheme_order |
Additional Inherited Members | |
Protected Member Functions inherited from FuelCell::ApplicationCore::TransientBase | |
| void | debug_output (const FEVector &sol) |
| Function used to output any necessary information at each time layer for debugging purposes. More... | |
| void | responses_output () |
| Function used to output boundary responses computed by application. More... | |
| void | error_output (const double &err) |
| Function used to output the solution error on each layer. More... | |
| void | tau_output () |
| Function used to output time step on each time layer. More... | |
| void | initialize_u_old (const FEVector u, const double n_ref, const FEVector old_solution, const bool force=true) |
| If we are inside the adaptive refinement loop, then we receive the old solution from class since it was transferred to a finer mesh and has now a different size. More... | |
| void | ats_Richardson (FEVector &u, const FEVector u1, const FEVector u2, int scheme_order, bool &solution_accepted) |
| This routine estimates solution error and changes the time step using Richardson extrapolation. More... | |
| bool | file_exists (const std::string &file) |
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::TransientBase | |
| bool | print_last_layer_only |
| If this variable is set to true, then only the last time layer data will be printed. More... | |
| bool | debug_solution |
Print updated solution after each step into file solution_NNNNN.dat. More... | |
| unsigned int | debug |
| Write debug output to FcstUtilities::log; the higher the number, the more output. More... | |
| unsigned int | step |
| Number of the current time layer. More... | |
| std::string | ats_method |
| Decision varible for selecting the adaptive time stepping method. More... | |
| double | tau |
| Initial time step size. More... | |
| double | max_tau |
| Maximal time step size. More... | |
| double | min_tau |
| Minimal time step size. More... | |
| int | max_ats_it |
| Maximal number of adaptive time step iterations used to resolve each time layer. More... | |
| FEVector | u_old |
| A vector to store the solution from the previous time layer in. More... | |
| int | ar_freq |
If adaptive refinement is selected, then it will be performed at each ar_freq-th layer. More... | |
| double | total_time |
| Total time of simulation in seconds. More... | |
| double | time |
| Current time of simulation. More... | |
| double | abs_err_estimate |
| double | rel_err_estimate |
| double | abs_error_tolerance |
| double | rel_error_tolerance |
| bool | output_error |
| bool | output_tau |
| std::ofstream | responses_outfile |
| Variable used in printing responses data into a file. More... | |
| std::ofstream | error_outfile |
| Variable used in printing solution error data into a file. More... | |
| std::ofstream | tau_outfile |
| Variable used in printing time step into a file. More... | |
| const std::string | fname_err ="Solution_error.dat" |
| File name for solution error output. More... | |
| const std::string | fname_tau ="Time_step.dat" |
| File name for solution error output. More... | |
| std::vector< double > | all_time_values |
| A vector of all time values. More... | |
| bool | everything_is_fine =true |
| unsigned int | n_ref |
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... | |
Theta scheme is a time discretization method for PDEs arising from finite difference approximation of temporal derivative and implicit-explicit treatment of spatial operators and source terms.
In general, a theta scheme for a PDE
where
is a spatial differential operator and
is a source term, will look like
Here we used first order approximation of
. After finite element method is applied, resulting equation is of the form
where
is a mass matrix and
is a matrix corresponding to operator
. Depending on parameter
, one can obtain explicit Euler scheme (
), Crank-Nicolson scheme (
), implicit Euler scheme (
), or anything inbetween.
Parameters that control theta scheme solver are defined in Theta_Scheme subsection in the data input file. Default parameters are as follows:
In order to use the class, first create an object passing in a linear application and data application
Then, read data and initialize code using a ParameterHandler object:
Finally, execute:
| FuelCell::ApplicationCore::ThetaScheme::ThetaScheme | ( | ApplicationBase & | app | ) |
Constructor, receiving an application with transient model and a data object.
|
virtual |
Declare input parameters.
The following are the parameters used and their default values in section "Transient".
These values are set in parameter file.
Reimplemented from FuelCell::ApplicationCore::TransientBase.
|
virtual |
Read parameters.
Reimplemented from FuelCell::ApplicationCore::TransientBase.
|
virtual |
Actual transient solver.
Performs loop over time layers.
Parameters:
Implements FuelCell::ApplicationCore::TransientBase.
|
private |
Performs one transient iteration with the given time step tau.
|
private |
Variable that contains current time layer.
float so that partial steps can be shown, e.g. step
.
|
private |
|
static |
Event used to make application reassemble its system matrix and rhs.
|
private |
|
private |
Parameter
.
Depending on parameter
, one can obtain explicit Euler scheme (
), Crank-Nicolson scheme (
), implicit Euler scheme (
), or anything inbetween.
1.8.5