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 (const Config &config, MasterEq *mastereq_, Output *output_, int ninit_local, int order_)
 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 (const Config &config, MasterEq *mastereq_, Output *output_, int ninit_local)
 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 (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

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

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 ( const Config config,
MasterEq mastereq_,
Output output_,
int  ninit_local,
int  order_ 
)

Constructor for compositional implicit midpoint 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
order_Order of the compositional method

◆ ~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: