v3.0 Quandary with a python interface
-
A python interface is now available that allows to use (arbitrary) user-defined system and control Hamiltonian operators during the simulation and optimization process. The user constructs the Hamiltonian operators within a python script, which Quandary parses to receive the operators and stores in place of it's default operators. Further, transfer functions can be defined through the python interface which modify the native control pulses before applying them to the control Hamiltonians. An example can be found in the 'results' folder.
-
The control parameterization has been remodelled, including new ordering of the parameters and various configuration option changes:
* For the B-spline parameterization, the storage of the control parameters has been re-ordered: Now the parameters iterate over oscillators first, then over carrier waves, then over the spline index, then list all real parts then list all imaginary parts. This new ordering is now compatible to the ordering of parameters in the Juqbox.jl code.
* Each subsystem control can be parameterized separately from each other, using different number of parameters (spline basis functions).
* In addition to the B-spline basis function parameterization, controls can be parameterized as a Step function with a fixed amplitude, where the control parameter determines the length of the pulse. Further, oscillators can be defined to be non-controllable alltogether, meaning no control basis functions.
* Control parameterizations can be defined either over the entire time domain (default), or alternatively various time segments can be specified and different paramterizations can be applied in each of those time segment. For example one can choose to parameterize a control pulse in [0,t1] using splines with a certain number of basis functions, and constant in [t1,T] -
Configuration option changes related to the new control parameterization:
* Replace 'nspline' by 'control_segment' for each oscillator id
* Replace 'optim_init' and 'optim_init_ampl' by 'control_initialization' for each oscillator id
* Replace optim_bounds' by 'control_bounds' for each oscillator id -
A higher-order time-stepping scheme is now available using Compositional Integration based on the Implicite Midpoint Rule. A 4th or 8th order accurate scheme can be chosen through the new configuration option 'timestepper' (default is the 2nd order Implicit Midpoint Rule)
-
Parallel distribution specification: The configuration options to specify the number of cores for initial conditions and Petsc distribution have been removed. Instead, those numbers are computed within the main code, where the number of cores for distributing initial conditions is always maxed out to the number of initial conditions that are considered, and the number of cores for petsc is computed by dividing the total number of cores by the number of initial conditions cores
-
Changes to the output:
- Transfer functions that are applied to the controls are written to files.
- The expected energy and population of the composite system are written to files.
-
The Parallel-in-Time XBraid interface has been removed entirely. It was depricated and did not work properly for many test cases.