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

Compositional implicit midpoint rule for higher-order accuracy. More...

#include <timestepper.hpp>

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

Public Member Functions

 CompositionalImplMidpoint (int order_, MasterEq *mastereq_, int ntime_, double total_time_, LinearSolverType linsolve_type_, int linsolve_maxiter_, Output *output_, bool storeFWD_)
 Constructor for compositional implicit midpoint scheme.
 
 ~CompositionalImplMidpoint ()
 
void evolveFWD (const double tstart, const double tstop, Vec x)
 Evolves state forward using compositional implicit midpoint rule.
 
void evolveBWD (const double tstart, const double tstop, const Vec x_stop, Vec x_adj, Vec grad, bool compute_gradient)
 Evolves adjoint backward using compositional implicit midpoint rule and accumulates gradient.
 
- Public Member Functions inherited from ImplMidpoint
 ImplMidpoint (MasterEq *mastereq_, int ntime_, double total_time_, LinearSolverType linsolve_type_, int linsolve_maxiter_, Output *output_, bool storeFWD_)
 Constructor for implicit midpoint scheme.
 
 ~ImplMidpoint ()
 
int NeumannSolve (Mat A, Vec b, Vec x, double alpha, bool transpose)
 Solves (I - alpha*A) * x = b using Neumann iterations.
 
- Public Member Functions inherited from TimeStepper
 TimeStepper ()
 
 TimeStepper (MasterEq *mastereq_, int ntime_, double total_time_, Output *output_, bool storeFWD_)
 Constructor for time stepper.
 
virtual ~TimeStepper ()
 
Vec getState (size_t tindex)
 Retrieves stored state at a specific time index.
 
void setEvalLeakage (bool flag)
 
void setEvalWeightedCost (bool flag, double width)
 
void setEvalDPDM (bool flag)
 
void setEvalEnergy (bool flag)
 
double getLeakageIntegral ()
 
double getWeightedCostIntegral ()
 
double getEnergyIntegral ()
 
double getDPDMIntegral ()
 
Vec solveODE (int initid, Vec rho_t0)
 Solves the ODE forward in time.
 
void solveAdjointODE (Vec rho_t0_bar, Vec finalstate, 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

std::vector< double > gamma
 Coefficients for compositional step sizes.
 
std::vector< Vec > x_stage
 Storage for primal states at intermediate stages.
 
Vec aux
 Auxiliary vector.
 
int order
 Order of the compositional method.
 
- Protected Attributes inherited from ImplMidpoint
Vec stage
 
Vec stage_adj
 Intermediate stage vectors for forward and adjoint.
 
Vec rhs
 
Vec rhs_adj
 Right-hand side vectors for forward and adjoint.
 
KSP ksp
 PETSc's linear solver context for GMRES.
 
PC preconditioner
 Preconditioner for linear solver.
 
LinearSolverType linsolve_type
 Linear solver type (GMRES or NEUMANN)
 
int linsolve_maxiter
 Maximum number of linear solver iterations.
 
double linsolve_abstol
 Absolute tolerance for linear solver.
 
double linsolve_reltol
 Relative tolerance for linear solver.
 
int linsolve_iterstaken_avg
 Average number of linear solver iterations.
 
double linsolve_error_avg
 Average error of linear solver.
 
int linsolve_counter
 Counter for linear solve calls.
 
Vec tmp
 
Vec err
 Auxiliary vectors for Neumann iterations.
 
- 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< Vec > store_states
 Storage for primal states during forward evolution.
 
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.
 

Additional Inherited Members

- Public Attributes inherited from TimeStepper
MasterEqmastereq
 Pointer to master equation solver.
 
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.
 
bool storeFWD
 Flag to store primal states during forward evaluation.
 

Detailed Description

Compositional implicit midpoint rule for higher-order accuracy.

Extends the implicit midpoint rule to higher order by using multiple substeps with specific coefficients. Maintains symplectic properties while achieving better accuracy for larger time steps.

Constructor & Destructor Documentation

◆ CompositionalImplMidpoint()

CompositionalImplMidpoint::CompositionalImplMidpoint ( int  order_,
MasterEq mastereq_,
int  ntime_,
double  total_time_,
LinearSolverType  linsolve_type_,
int  linsolve_maxiter_,
Output output_,
bool  storeFWD_ 
)

Constructor for compositional implicit midpoint scheme.

Parameters
order_Order of the compositional method
mastereq_Pointer to master equation solver
ntime_Number of time steps
total_time_Final evolution time
linsolve_type_Linear solver type
linsolve_maxiter_Maximum linear solver iterations
output_Pointer to output handler
storeFWD_Flag to store forward states

◆ ~CompositionalImplMidpoint()

CompositionalImplMidpoint::~CompositionalImplMidpoint ( )

Member Function Documentation

◆ evolveBWD()

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

Evolves adjoint backward using compositional implicit midpoint rule and accumulates gradient.

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 ImplMidpoint.

◆ evolveFWD()

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

Evolves state forward using compositional implicit midpoint rule.

Parameters
tstartStart time
tstopStop time
xState vector to evolve

Reimplemented from ImplMidpoint.

Member Data Documentation

◆ aux

Vec CompositionalImplMidpoint::aux
protected

Auxiliary vector.

◆ gamma

std::vector<double> CompositionalImplMidpoint::gamma
protected

Coefficients for compositional step sizes.

◆ order

int CompositionalImplMidpoint::order
protected

Order of the compositional method.

◆ x_stage

std::vector<Vec> CompositionalImplMidpoint::x_stage
protected

Storage for primal states at intermediate stages.


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