12#if PETSC_VERSION_MAJOR<4 && PETSC_VERSION_MINOR<17
13#define TaoSetObjective TaoSetObjectiveRoutine
14#define TaoSetGradient(tao, NULL, TaoEvalGradient,this) TaoSetGradientRoutine(tao, TaoEvalGradient,this)
15#define TaoSetObjectiveAndGradient(tao, NULL, TaoEvalObjectiveAndGradient,this) TaoSetObjectiveAndGradientRoutine(tao, TaoEvalObjectiveAndGradient,this)
16#define TaoSetSolution(tao, xinit) TaoSetInitialVector(tao, xinit)
17#define TaoGetSolution(tao, params) TaoGetSolutionVector(tao, params)
20#if PETSC_VERSION_MAJOR<4 && PETSC_VERSION_MINOR<21
21#define TaoMonitorSet TaoSetMonitor
233 double evalF(
const Vec x);
Configuration class containing all validated settings.
Definition config.hpp:57
Optimization problem solver for quantum optimal control.
Definition optimproblem.hpp:47
std::vector< Vec > store_finalstates
Storage for final states for each initial condition.
Definition optimproblem.hpp:54
Vec xprev
Design vector at previous iteration.
Definition optimproblem.hpp:100
int mpisize_world
MPI rank and size for global communicator.
Definition optimproblem.hpp:62
int mpirank_petsc
Definition optimproblem.hpp:61
int getMaxIter()
Retrieves the maximum number of iterations.
Definition optimproblem.hpp:222
double gamma_penalty_variation
Parameter multiplying finite-difference squared regularization term.
Definition optimproblem.hpp:85
double obj_regul
Regularization term in objective.
Definition optimproblem.hpp:71
~OptimProblem()
Definition optimproblem.cpp:165
double gamma_penalty_weightedcost
Parameter multiplying integral weighted cost function.
Definition optimproblem.hpp:82
Vec xinit
Initial design vector.
Definition optimproblem.hpp:101
double tol_grad_rel
Stopping criterion based on relative gradient norm.
Definition optimproblem.hpp:87
double obj_cost
Final-time measure J(T) in objective.
Definition optimproblem.hpp:70
double getTolGradAbs()
Retrieves the gradient tolerance.
Definition optimproblem.hpp:201
MPI_Comm comm_optim
MPI communicator for optimization parallelization, currently not used (size 1)
Definition optimproblem.hpp:59
double gamma_penalty_dpdm
Parameter multiplying integral penalty term for 2nd derivative of state variation.
Definition optimproblem.hpp:83
Vec xtmp
Temporary vector storage.
Definition optimproblem.hpp:94
double tol_grad_abs
Stopping criterion based on absolute gradient norm.
Definition optimproblem.hpp:86
std::vector< double > obj_weights
Weights for averaging objective over initial conditions.
Definition optimproblem.hpp:67
double gamma_penalty_leakage
Parameter multiplying integral leakage term.
Definition optimproblem.hpp:81
int mpisize_petsc
MPI rank and size for spatial parallelization (PETSc)
Definition optimproblem.hpp:61
double getObjective()
Retrieves the current objective function value.
Definition optimproblem.hpp:129
size_t ninit
Number of initial conditions to be considered (N^2, N, or 1)
Definition optimproblem.hpp:50
void evalGradF(const Vec x, Vec G)
Evaluates the gradient of the objective function with respect to the control parameters.
Definition optimproblem.cpp:309
Vec rho_t0
Storage for initial condition of the ODE.
Definition optimproblem.hpp:52
double getCostT()
Retrieves the final-time cost term.
Definition optimproblem.hpp:136
double getTolFinalCost()
Retrieves the objective function tolerance.
Definition optimproblem.hpp:194
OptimTarget * optim_target
Pointer to the optimization target (gate or state)
Definition optimproblem.hpp:56
double getTolInfidelity()
Retrieves the infidelity tolerance.
Definition optimproblem.hpp:208
MPI_Comm comm_init
MPI communicator for initial condition parallelization.
Definition optimproblem.hpp:58
double obj_penal_energy
Energy penalty term in objective.
Definition optimproblem.hpp:76
double gamma_penalty_energy
Parameter multiplying energy penalty.
Definition optimproblem.hpp:84
int getNdesign()
Retrieves the number of design variables.
Definition optimproblem.hpp:122
void getStartingPoint(Vec x)
Computes initial guess for optimization variables.
Definition optimproblem.cpp:518
double tol_infidelity
Stopping criterion based on infidelity.
Definition optimproblem.hpp:89
double tol_final_cost
Stopping criterion based on objective function value.
Definition optimproblem.hpp:88
double getRegul()
Retrieves the Tikhonov regularization term.
Definition optimproblem.hpp:143
Output * output
Pointer to output handler.
Definition optimproblem.hpp:97
int getMPIrank_world()
Retrieves the MPI rank in the world communicator.
Definition optimproblem.hpp:215
bool tikhonov_use_x0
Switch to use ||x - x0||^2 for Tikhonov regularization instead of ||x||^2.
Definition optimproblem.hpp:80
double fidelity
Final-time fidelity: 1/ninit sum_i Tr(rho_target^dag rho(T)) for Lindblad, |1/ninit sum_i phi_target^...
Definition optimproblem.hpp:77
int mpirank_world
Definition optimproblem.hpp:62
double obj_penal_variation
Penalty term for variation of control parameters.
Definition optimproblem.hpp:75
double gnorm
Current norm of gradient.
Definition optimproblem.hpp:78
TimeStepper * timestepper
Pointer to time-stepping scheme.
Definition optimproblem.hpp:98
double evalF(const Vec x)
Evaluates the objective function F(x).
Definition optimproblem.cpp:185
int mpisize_init
MPI rank and size for initial condition communicator.
Definition optimproblem.hpp:63
double obj_penal_leakage
Penalty term for leakage into guard levels.
Definition optimproblem.hpp:72
int mpirank_init
Definition optimproblem.hpp:63
double obj_penal_dpdm
Penalty term second-order state derivatives (penalizes variations of the state evolution)
Definition optimproblem.hpp:74
Tao tao
PETSc's TAO optimization solver.
Definition optimproblem.hpp:91
int ninit_local
Local number of initial conditions on this processor.
Definition optimproblem.hpp:51
int ndesign
Number of global design (optimization) parameters.
Definition optimproblem.hpp:68
int maxiter
Stopping criterion based on maximum number of iterations.
Definition optimproblem.hpp:90
double * mygrad
Auxiliary gradient storage.
Definition optimproblem.hpp:92
double getPenaltyLeakage()
Retrieves the integral term for leakage.
Definition optimproblem.hpp:150
int mpirank_optim
Definition optimproblem.hpp:60
double obj_penal_weightedcost
Penalty term for weighted running cost.
Definition optimproblem.hpp:73
Vec xlower
Definition optimproblem.hpp:99
Vec rho_t0_bar
Storage for adjoint initial condition of the adjoint ODE (aka the terminal condition)
Definition optimproblem.hpp:53
void getSolution(Vec *opt)
Retrieves the optimization solution and prints summary information.
Definition optimproblem.cpp:544
double getPenaltyDpDm()
Retrieves the second-order state derivative penalty term.
Definition optimproblem.hpp:166
double getFidelity()
Retrieves the current fidelity.
Definition optimproblem.hpp:187
double getPenaltyEnergy()
Retrieves the control energy penalty term.
Definition optimproblem.hpp:180
bool quietmode
Flag for quiet mode operation.
Definition optimproblem.hpp:65
Vec xupper
Lower and upper bounds for optimization variables.
Definition optimproblem.hpp:99
int mpisize_optim
MPI rank and size for optimization communicator.
Definition optimproblem.hpp:60
double objective
Current objective function value (sum over final-time cost, regularization terms and penalty terms)
Definition optimproblem.hpp:69
void solve(Vec xinit)
Runs the optimization solver.
Definition optimproblem.cpp:513
double gamma_tikhonov
Parameter for Tikhonov regularization.
Definition optimproblem.hpp:79
double getPenaltyVariation()
Retrieves the control variation penalty term.
Definition optimproblem.hpp:173
double getPenaltyWeightedCost()
Retrieves the integral penalty term for weighted running cost.
Definition optimproblem.hpp:157
Optimization target specification for quantum control.
Definition optimtarget.hpp:22
Output management for quantum control simulations and optimization.
Definition output.hpp:15
Base class for time integration schemes to evolve the quantum dynamics.
Definition timestepper.hpp:33
Core type definitions and enumerations for Quandary quantum optimal control.
PetscErrorCode TaoEvalGradient(Tao tao, Vec x, Vec G, void *ptr)
PETSc TAO interface routine for gradient evaluation.
Definition optimproblem.cpp:648
PetscErrorCode TaoEvalObjective(Tao tao, Vec x, PetscReal *f, void *ptr)
PETSc TAO interface routine for objective function evaluation.
Definition optimproblem.cpp:639
PetscErrorCode TaoEvalObjectiveAndGradient(Tao tao, Vec x, PetscReal *f, Vec G, void *ptr)
PETSc TAO interface routine for combined objective and gradient evaluation.
Definition optimproblem.cpp:630
PetscErrorCode TaoMonitor(Tao tao, void *ptr)
Monitors optimization progress during TAO optimization iterations.
Definition optimproblem.cpp:552