Quandary
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes | List of all members
ExplEuler Class Reference

Explicit Euler time integration scheme. More...

#include <timestepper.hpp>

Inheritance diagram for ExplEuler:
Inheritance graph
[legend]
Collaboration diagram for ExplEuler:
Collaboration graph
[legend]

Public Member Functions

 ExplEuler (const Config &config, MasterEq *mastereq_, Output *output_, int ninit_local)
 Constructor for explicit Euler scheme.
 
 ~ExplEuler ()
 
void evolveFWD (const double tstart, const double tstop, Vec x)
 Evolves state forward using explicit Euler method.
 
void evolveBWD (const double tstart, const double tstop, const Vec x_stop, Vec x_adj, Vec grad, bool compute_gradient)
 Evolves adjoint backward using explicit Euler method.
 
- Public Member Functions inherited from TimeStepper
 TimeStepper ()
 
 TimeStepper (const Config &config, MasterEq *mastereq_, Output *output_, int ninit_local)
 Constructor for time stepper.
 
virtual ~TimeStepper ()
 
double getLeakageIntegral ()
 
double getWeightedCostIntegral ()
 
double getEnergyIntegral ()
 
double getDPDMIntegral ()
 
Vec getReducedGradient ()
 
void setWriteTrajectoryDataFiles (bool write)
 
void setOptimTarget (OptimTarget *optim_target_)
 
Vec getFinalState (size_t iinit_local)
 Retrieves the final state for a specific local initial condition.
 
virtual double getMinTimestepSize () const
 Get the smallest timestep size used during timestepping.
 
virtual Vec solveODE (int initid, int iinit_local, Vec rho_t0)
 Solves the ODE forward in time.
 
virtual void solveAdjointODE (int iinit_local, Vec rho_t0_bar, double Jbar_leakage, double Jbar_weightedcost, double Jbar_dpdm, double Jbar_energy)
 Solves the adjoint ODE backward in time.
 
double evalLeakage (const Vec x)
 Evaluates leakage into guard levels.
 
void evalLeakage_diff (const Vec x, Vec xbar, double Jbar)
 Computes derivative of leakage term.
 
double evalWeightedCost (double time, const Vec x)
 Evaluates the weighted cost function term.
 
void evalWeightedCost_diff (double time, const Vec x, Vec xbar, double Jbar)
 Computes derivative of weighted cost function term.
 
double evalDpDm (Vec x, Vec xm1, Vec xm2)
 Evaluates second-order derivative variation for the state.
 
void evalDpDm_diff (int n, Vec xbar, double Jbar)
 Computes derivative of second-order derivative variation term.
 
double evalEnergy (double time)
 Evaluates energy integral term.
 
void evalEnergy_diff (double time, double Jbar, Vec redgrad)
 Computes derivative of energy integral.
 

Protected Attributes

Vec stage
 Intermediate vector.
 
- Protected Attributes inherited from TimeStepper
Vec x
 Auxiliary vector for forward time stepping.
 
Vec xadj
 Auxiliary vector needed for adjoint (backward) time stepping.
 
Vec xprimal
 Auxiliary vector for backward time stepping.
 
std::vector< std::vector< Vec > > trajectory_states
 Storage for primal states during forward evolution, one trajectory for each local initial condition..
 
std::vector< Vec > final_states
 Storage for final states for each local initial condition. Always filled after solveODE.
 
std::vector< Vec > dpdm_states
 Storage for states needed for second-order derivative penalty.
 
int mpirank_world
 MPI rank in global communicator.
 
int mpisize_petsc
 MPI size in Petsc communicator.
 
int mpirank_petsc
 MPI rank in Petsc communicator.
 
PetscInt localsize_u
 Size of local sub vector u or v in state x=[u,v].
 
PetscInt ilow
 First index of the local sub vector u,v.
 
PetscInt iupp
 Last index (+1) of the local sub vector u,v.
 
bool eval_leakage
 Flag to compute leakage integral term.
 
bool eval_energy
 Flag to compute energy integral term.
 
bool eval_dpdm
 Flag to compute second-order derivative integral term.
 
bool eval_weightedcost
 Flag to compute weighted cost integral term.
 
double leakage_integral
 Sums the integral over leakage.
 
double energy_integral
 Sums the energy term.
 
double dpdm_integral
 Sums second-order derivative variation value.
 
double weightedcost_integral
 Sums the integral over weighted cost function.
 
double weightedcost_width
 Width parameter for weighted cost function.
 
int ntime
 Number of time steps.
 
double total_time
 Final evolution time.
 
double dt
 Time step size.
 
bool writeTrajectoryDataFiles
 Flag to determine whether or not trajectory data will be written to files during forward simulation *‍/.
 
Vec redgrad
 Reduced gradient vector for optimization.
 
OptimTargetoptim_target
 Pointer to optimization target specification.
 
Outputoutput
 Pointer to output handler.
 
MasterEqmastereq
 Pointer to master equation solver.
 

Detailed Description

Explicit Euler time integration scheme.

First-order explicit time stepping method. Simple, requires small time steps for stability. Mainly used for testing and comparison purposes.

Constructor & Destructor Documentation

◆ ExplEuler()

ExplEuler::ExplEuler ( const Config config,
MasterEq mastereq_,
Output output_,
int  ninit_local 
)

Constructor for explicit Euler scheme.

Parameters
configConfiguration parameters from input file
mastereq_Pointer to master equation solver
output_Pointer to output handler
ninit_localNumber of initial conditions local to this processor

◆ ~ExplEuler()

ExplEuler::~ExplEuler ( )

Member Function Documentation

◆ evolveBWD()

void ExplEuler::evolveBWD ( const double  tstart,
const double  tstop,
const Vec  x_stop,
Vec  x_adj,
Vec  grad,
bool  compute_gradient 
)
virtual

Evolves adjoint backward using explicit Euler method.

Parameters
tstartStart time (backward evolution)
tstopStop time (backward evolution)
x_stopState at stop time
x_adjAdjoint state vector
gradGradient vector to update
compute_gradientFlag to compute gradient

Reimplemented from TimeStepper.

◆ evolveFWD()

void ExplEuler::evolveFWD ( const double  tstart,
const double  tstop,
Vec  x 
)
virtual

Evolves state forward using explicit Euler method.

Parameters
tstartStart time
tstopStop time
xState vector to evolve

Implements TimeStepper.

Member Data Documentation

◆ stage

Vec ExplEuler::stage
protected

Intermediate vector.


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