10#include <toml++/toml.hpp>
63 std::vector<size_t> nlevels;
64 std::vector<size_t> nessential;
67 std::vector<double> transition_frequency;
68 std::vector<double> selfkerr;
69 std::vector<double> crosskerr_coupling;
70 std::vector<double> dipole_coupling;
71 std::vector<double> rotation_frequency;
73 std::vector<double> decay_time;
74 std::vector<double> dephase_time;
75 size_t n_initial_conditions;
77 std::optional<std::string> hamiltonian_file_Hsys;
78 std::optional<std::string> hamiltonian_file_Hc;
81 bool control_zero_boundary_condition;
82 std::vector<ControlParameterizationSettings> control_parameterizations;
83 std::vector<ControlInitializationSettings> control_initializations;
84 std::vector<double> control_amplitude_bounds;
85 std::vector<std::vector<double>> carrier_frequencies;
88 std::vector<double> optim_weights;
89 double optim_tol_grad_abs;
90 double optim_tol_grad_rel;
91 double optim_tol_final_cost;
92 double optim_tol_infidelity;
94 double optim_tikhonov_coeff;
95 bool optim_tikhonov_use_x0;
96 double optim_penalty_leakage;
97 double optim_penalty_weightedcost;
98 double optim_penalty_weightedcost_width;
99 double optim_penalty_dpdm;
100 double optim_penalty_energy;
101 double optim_penalty_variation;
104 std::string output_directory;
105 std::vector<OutputType> output_observables;
106 size_t output_timestep_stride;
107 size_t output_optimization_stride;
111 size_t linearsolver_maxiter;
134 const std::vector<size_t>&
getNLevels()
const {
return nlevels; }
135 size_t getNLevels(
size_t i_osc)
const {
return nlevels[i_osc]; }
144 const std::vector<double>&
getSelfKerr()
const {
return selfkerr; }
159 return control_initializations[i_osc];
193 void validate()
const;
197 void setRandSeed(
int rand_seed_);
216 template <
typename T>
217 std::vector<std::vector<T>> parseOscillatorSettingsCfg(
const std::optional<std::map<
int, std::vector<T>>>& indexed,
size_t num_entries,
const std::vector<T>& default_values = {})
const;
219 std::vector<ControlParameterizationSettings> parseControlParameterizationsCfg(
const std::optional<std::map<int, ControlParameterizationData>>& parameterizations_map)
const;
221 std::vector<ControlInitializationSettings> parseControlInitializationsCfg(
const std::optional<std::map<int, ControlInitializationSettings>>& init_configs)
const;
Configuration class containing all validated settings.
Definition config.hpp:57
bool getUseMatFree() const
Definition config.hpp:185
const std::vector< double > & getOptimWeights() const
Definition config.hpp:165
double getOptimTolGradRel() const
Definition config.hpp:167
const std::vector< double > & getDecayTime() const
Definition config.hpp:149
const std::vector< size_t > & getNEssential() const
Definition config.hpp:137
size_t getNInitialConditions() const
Definition config.hpp:151
const OptimTargetSettings & getOptimTarget() const
Definition config.hpp:163
bool getControlZeroBoundaryCondition() const
Definition config.hpp:157
const std::vector< size_t > & getNLevels() const
Definition config.hpp:134
static Config fromToml(const std::string &toml_filename, const MPILogger &logger)
Definition config.cpp:509
const std::string & getOutputDirectory() const
Definition config.hpp:180
double getOptimPenaltyLeakage() const
Definition config.hpp:173
double getOptimPenaltyEnergy() const
Definition config.hpp:177
size_t getNTime() const
Definition config.hpp:139
const std::vector< OutputType > & getOutputObservables() const
Definition config.hpp:181
size_t getLinearSolverMaxiter() const
Definition config.hpp:187
size_t getOptimMaxiter() const
Definition config.hpp:170
const ControlParameterizationSettings & getControlParameterizations(size_t i_osc) const
Definition config.hpp:156
const std::vector< double > & getTransitionFrequency() const
Definition config.hpp:143
const std::vector< double > & getDephaseTime() const
Definition config.hpp:150
double getOptimTikhonovCoeff() const
Definition config.hpp:171
double getOptimTolFinalCost() const
Definition config.hpp:168
double getOptimTolInfidelity() const
Definition config.hpp:169
double getTotalTime() const
Definition config.hpp:141
double getOptimTolGradAbs() const
Definition config.hpp:166
const std::vector< double > & getDipoleCoupling() const
Definition config.hpp:146
static Config fromCfg(const std::string &cfg_filename, const MPILogger &logger)
Definition config.cpp:519
double getOptimPenaltyWeightedCost() const
Definition config.hpp:174
double getOptimPenaltyVariation() const
Definition config.hpp:178
const InitialConditionSettings & getInitialCondition() const
Definition config.hpp:152
const std::optional< std::string > & getHamiltonianFileHc() const
Definition config.hpp:154
size_t getOutputOptimizationStride() const
Definition config.hpp:183
ObjectiveType getOptimObjective() const
Definition config.hpp:164
double getControlAmplitudeBound(size_t i_osc) const
Definition config.hpp:161
size_t getOutputTimestepStride() const
Definition config.hpp:182
TimeStepperType getTimestepperType() const
Definition config.hpp:188
LinearSolverType getLinearSolverType() const
Definition config.hpp:186
const std::vector< double > & getCarrierFrequencies(size_t i_osc) const
Definition config.hpp:162
size_t getNumOsc() const
Definition config.hpp:136
void printConfig(std::stringstream &log) const
Definition config.cpp:774
size_t getNEssential(size_t i_osc) const
Definition config.hpp:138
const ControlInitializationSettings & getControlInitializations(size_t i_osc) const
Definition config.hpp:158
static Config fromCfgString(const std::string &cfg_content, const MPILogger &logger)
Definition config.cpp:525
const std::optional< std::string > & getHamiltonianFileHsys() const
Definition config.hpp:153
const std::vector< double > & getSelfKerr() const
Definition config.hpp:144
bool getOptimTikhonovUseX0() const
Definition config.hpp:172
DecoherenceType getDecoherenceType() const
Definition config.hpp:148
const std::vector< double > & getCrossKerrCoupling() const
Definition config.hpp:145
const std::vector< double > & getRotationFrequency() const
Definition config.hpp:147
int getRandSeed() const
Definition config.hpp:189
static Config fromTomlString(const std::string &toml_content, const MPILogger &logger)
Definition config.cpp:514
RunType getRuntype() const
Definition config.hpp:184
double getDt() const
Definition config.hpp:140
size_t getNLevels(size_t i_osc) const
Definition config.hpp:135
double getOptimPenaltyWeightedCostWidth() const
Definition config.hpp:175
static Config fromFile(const std::string &filename, const MPILogger &logger)
Definition config.cpp:497
double getOptimPenaltyDpdm() const
Definition config.hpp:176
MPI-aware logger that handles rank filtering and quiet mode.
Definition mpi_logger.hpp:12
Core type definitions and enumerations for Quandary quantum optimal control.
RunType
Types of execution modes.
Definition defs.hpp:128
DecoherenceType
Available Lindblad operator types for open quantum systems, or NONE for closed quantum systems.
Definition defs.hpp:31
ObjectiveType
Types of objective functions for quantum control optimization.
Definition defs.hpp:95
TimeStepperType
Types of time-stepping methods for evolving quantum states.
Definition defs.hpp:183
LinearSolverType
Available types for solving linear systems at each time step.
Definition defs.hpp:113
Settings for control initialization with defaults.
Definition config_defaults.hpp:112
Settings for control parameterizations with defaults.
Definition config_defaults.hpp:100
Settings for initial conditions. Required, no defaults.
Definition config_defaults.hpp:77
Settings for optimization targets with defaults.
Definition config_defaults.hpp:89
Configuration settings passed to Config constructor.
Definition cfgparser.hpp:31