Settings
Simulation settings are read from a configuration file. In ordinary use this is a .cfg file passed with --config, for example:
./xDMRG++ --config input/default.cfg
The corresponding variables are defined in the namespace settings in source/config/settings.h, and the sections below are generated from those source comments through Doxygen and Breathe. The page is therefore both a user reference and a direct view of the documented configuration interface in the code.
Each setting is written as
<namespace>::<variable> = <value> // Optional comment
For example, the declaration
namespace settings::precision {
inline double svd_truncation_min = 1e-12;
}
can be overridden from a configuration file with
precision::svd_truncation_min = 1e-12 // Optional comment
Example configuration files are provided under input/. They are usually the quickest way to discover which settings matter for a particular algorithm.
Input
-
namespace input
Settings for initialization
Variables
-
long seed = 1
Main seed for the random number generator.
-
std::string config_filename = "input/input.cfg"
Default config filename. Can either be a .cfg file or a .h5 file with a config stored as a string in /common/config_file_contents
-
std::string config_file_contents
Copy of the loaded config file, stored for internal use and HDF5 output
-
long seed = 1
Storage and Output
The output file path, storage policy, compression settings, and resume behavior are configured under settings::storage.
-
namespace storage
Settings for output-file generation
Storage is controlled per object with StoragePolicy bitflags. A save is triggered when the current StorageEvent matches any trigger flag in the policy; modifier flags then refine how that write is kept.
Available StoragePolicy flags:
NONE: never storeINIT: store during initialization or preprocessingITER: store on iteration events (see storage_interval)EMIN: store after finding the minimum-energy stateEMAX: store after finding the maximum-energy statePROJ: store after projection stepsBOND: store after bond-dimension updatesTRNC: store after truncation-limit updatesFAILURE: store only on unsuccessful terminationSUCCESS: store only on successful terminationFINISH: store when the algorithm finishes, regardless of successALWAYS: store whenever a save opportunity is encounteredREPLACE: keep only the latest matching entry when possibleRBDS: store reverse-bond-dimension-scaling follow-up stepsRTES: store reverse-truncation-error-scaling follow-up steps
Example bitflag combinations:
ITER | REPLACE: keep only the latest per-iteration snapshotITER | FINISH | REPLACE: keep the latest iterative snapshot and the final oneFINISH | RBDS | RTES: store the final state and the rbds/rtes follow-up stepsITER | BOND | TRNC | RBDS | RTES: store iterations, bond/truncation updates, and rbds/rtes steps
Note: Resume Finite-state resume requires a fully stored MPS under the selected state prefix. fLBIT can also resume from its time-evolution data.
Variables
-
std::string output_filepath = "output/output.h5"
Name of the output HDF5 file relative to the execution point
-
bool output_append_seed = true
Append the seed for the random number generator to output_filepath
-
size_t storage_interval = 1
Write to file this often, in units of iterations. Applies to StorageEvent::Iteration.
-
bool use_temp_dir = true
If true uses a temporary directory for writes in the local drive (usually /tmp) and copies the results afterwards
-
size_t copy_from_temp_freq = 4
How often, in units of iterations, to copy the hdf5 file in tmp dir to target destination
-
std::string temp_dir = "/tmp/DMRG"
Local temp directory on the local system. If it does not exist we default to /tmp instead (or whatever is the default)
-
unsigned compression_level = 1
GZip compression level in HDF5. Choose between [0-9] (0 = off, 9 = max compression)
-
ResumePolicy resume_policy = ResumePolicy::IF_UNSUCCESSFUL
Which exit conditions from a previous run qualify a state for resume
-
FileCollisionPolicy file_collision_policy = FileCollisionPolicy::RESUME
What to do when a prior output file is found. Choose between RESUME, REVIVE, BACKUP, RENAME, REPLACE
-
FileResumePolicy file_resume_policy = FileResumePolicy::FULL
What to do when common/finished_all is true: FULL keeps scanning the file/config, FAST exits immediately
-
std::string file_resume_name = ""
On file_collision_policy=RESUME|REVIVE: resume from state candidate matching this string. Empty implies any
-
size_t file_resume_iter = -1ul
On file_collision_policy=RESUME|REVIVE: which iteration to resume from. -1ul implies resume from last available iteration
-
namespace dataset
-
namespace correlation_matrix_spin_xyz
-
namespace expectation_values_spin_xyz
-
namespace information_lattice
-
namespace lbit_analysis
Variables
-
StoragePolicy policy = StoragePolicy::INIT
Storage policy for the l-bit analysis dataset
-
StoragePolicy policy = StoragePolicy::INIT
-
namespace number_probabilities
-
namespace opdm
-
namespace subsystem_entanglement_entropies
Variables
-
StoragePolicy policy = StoragePolicy::FINISH
Storage policy for the subsystem-entanglement dataset: entanglement entropy (log2) of all contiguous subsystems
-
unsigned long chunksize = 10
Chunk depth for appending subsystem-entanglement records
-
auto bits_err = 1e-8
Positive: tolerate a relative bit deficit 1 - bits_found/L. Negative: tolerate an absolute deficit L - bits_found
-
long eig_size = 4096l
Largest reduced-density-matrix size to diagonalize exactly
-
long bond_lim = 2048l
Bond-dimension limit used during swap-based evaluations
-
auto trnc_lim = 1e-8
Truncation-error limit used during swap-based evaluations
-
auto precision = Precision::DOUBLE
Internal floating-point precision for this dataset calculation
-
StoragePolicy policy = StoragePolicy::FINISH
-
namespace correlation_matrix_spin_xyz
-
namespace mpo
-
namespace mps
-
namespace state_emax
Variables
-
StoragePolicy policy = StoragePolicy::FINISH
Storage policy for the maximum-energy MPS state from fDMRG/xDMRG
-
StoragePolicy policy = StoragePolicy::FINISH
-
namespace state_emid
Variables
-
StoragePolicy policy = StoragePolicy::ITER
Storage policy for the xDMRG mid-spectrum MPS state
-
StoragePolicy policy = StoragePolicy::ITER
-
namespace state_emin
Variables
-
StoragePolicy policy = StoragePolicy::FINISH
Storage policy for the minimum-energy MPS state from fDMRG/xDMRG
-
StoragePolicy policy = StoragePolicy::FINISH
-
namespace state_emax
-
namespace table
-
namespace bond_dimensions
Variables
-
StoragePolicy policy = StoragePolicy::ITER
Storage policy for the bond-dimension table
-
StoragePolicy policy = StoragePolicy::ITER
-
namespace bonds
Variables
-
StoragePolicy policy = StoragePolicy::FINISH
Storage policy for the bond table
-
StoragePolicy policy = StoragePolicy::FINISH
-
namespace entanglement_entropies
Variables
-
StoragePolicy policy = StoragePolicy::ITER
Storage policy for the entanglement-entropy table
-
StoragePolicy policy = StoragePolicy::ITER
-
namespace expectation_values_spin_xyz
Variables
-
StoragePolicy policy = StoragePolicy::FINISH
Storage policy for the spin-expectation-value table
-
StoragePolicy policy = StoragePolicy::FINISH
-
namespace information_center_of_mass
Variables
-
StoragePolicy policy = StoragePolicy::FINISH
Storage policy for the information-center-of-mass table
-
StoragePolicy policy = StoragePolicy::FINISH
-
namespace information_per_scale
Variables
-
StoragePolicy policy = StoragePolicy::FINISH
Storage policy for the information-per-scale table
-
StoragePolicy policy = StoragePolicy::FINISH
-
namespace measurements
Variables
-
StoragePolicy policy = StoragePolicy::ITER
Storage policy for the measurements table
-
StoragePolicy policy = StoragePolicy::ITER
-
namespace memory
Variables
-
StoragePolicy policy = StoragePolicy::ITER
Storage policy for the memory-usage table
-
StoragePolicy policy = StoragePolicy::ITER
-
namespace model
Variables
-
StoragePolicy policy = StoragePolicy::INIT
Storage policy for the model-parameter table
-
StoragePolicy policy = StoragePolicy::INIT
-
namespace number_entropies
Variables
-
StoragePolicy policy = StoragePolicy::ITER
Storage policy for the number-entropy table
-
StoragePolicy policy = StoragePolicy::ITER
-
namespace opdm_spectrum
Variables
-
StoragePolicy policy = StoragePolicy::FINISH
Storage policy for the OPDM-spectrum table
-
StoragePolicy policy = StoragePolicy::FINISH
-
namespace random_unitary_circuit
Variables
-
StoragePolicy policy = StoragePolicy::INIT
Storage policy for the random unitary circuit table
-
StoragePolicy policy = StoragePolicy::INIT
-
namespace renyi_entropies
Variables
-
StoragePolicy policy = StoragePolicy::ITER
Storage policy for the Renyi-entropy table
-
StoragePolicy policy = StoragePolicy::ITER
-
namespace status
Variables
-
StoragePolicy policy = StoragePolicy::ITER
Storage policy for the algorithm-status table
-
StoragePolicy policy = StoragePolicy::ITER
-
namespace timers
-
namespace bond_dimensions
-
namespace tmp
Model Hamiltonian
-
namespace model
Settings for the Hamiltonian spin-model
Variables
-
ModelType model_type = ModelType::ising_tf_rf
Choice of model: {ising_tf_rf, ising_sdual, ising_majorana, lbit, xxz}
-
size_t model_size = 16
Number of sites on the chain. Relevant for finite algorithms such as fDMRG, xDMRG, and fLBIT
-
namespace ising_majorana
Settings for the Ising-Majorana model
Variables
-
double g = 0
Interaction parameter for nearest ZZ and next-nearest XX neighbor coupling
-
double delta = 0
Delta defined as log(J_mean) - log(h_mean). We get J_mean and h_mean by fixing delta = 2lnW, W = J_wdth = 1/h_wdth
-
long spin_dim = 2
Spin dimension
-
std::string distribution = "uniform"
Random distribution for couplings and fields (currently uniform only)
-
double g = 0
-
namespace ising_sdual
Settings for the Self-dual Ising model
Variables
-
double lambda = 0
Lambda parameter related to next nearest neighbor coupling
-
double delta = 0
Delta defined as log(J_mean) - log(h_mean). We get J_mean and h_mean by fixing max(J_mean,h_mean) = 1
-
long spin_dim = 2
Spin dimension
-
std::string distribution = "uniform"
Random distribution for couplings and fields
-
double lambda = 0
-
namespace ising_tf_rf
Settings for the Transverse-field Ising model with a random on-site field
Variables
-
double J1 = 1
Ferromagnetic coupling for nearest neighbors.
-
double J2 = 1
Ferromagnetic coupling for next-nearest neighbors.
-
double h_tran = 1
Transverse field strength
-
double h_mean = 0
Random field mean of distribution
-
double h_wdth = 0
Random field width of distribution
-
long spin_dim = 2
Spin dimension
-
std::string distribution = "uniform"
Random distribution for couplings and fields
-
double J1 = 1
-
namespace lbit
Settings for the l-bit Hamiltonian
Variables
-
double J1_mean = 0
Constant offset for onsite terms
-
double J2_mean = 0
Constant offset for nearest-neighbor interactions
-
double J3_mean = 0
Constant offset for next-nearest-neighbor interactions
-
double J1_wdth = 1.0
Distribution width for onsite terms
-
double J2_wdth = 1.0
Distribution width for nearest-neighbor interactions (st.dev. for normal distribution)
-
double J3_wdth = 1.0
Distribution width for next-nearest-neighbor interactions
-
size_t J2_span = -1ul
Maximum allowed range for pairwise interactions, |i-j| <= J2_span. Use -1 for infinite. Note that J2_span + 1 MPOs are used
-
double xi_Jcls = 1.0
The characteristic length-scale xi of the exponentially decaying interactions: J = exp(-|i-j|/xi_Jcls) * Random(i,j)
-
long spin_dim = 2
Spin dimension
-
std::string distribution = "normal"
Random distribution used for the l-bit couplings
-
double u_fmix = 0.2
Overall gate amplitude factor f in the unitary circuit, U = exp(-i f w M)
-
size_t u_depth = 16
Number of layers of 2-site gates in the unitary circuit that maps between l-bit and real space
-
double u_lambda = 1.0
Lambda parameter in the Hermitian gate matrix M_i, controlling the sz_i sz_j contribution
-
auto u_wkind = LbitCircuitGateWeightKind::EXPDECAY
Rule for the gate weights w_i in the unitary circuit [IDENTITY, EXPDECAY]
-
auto u_mkind = LbitCircuitGateMatrixKind::MATRIX_V3
Choice of Hermitian matrix ansatz M_i used in the unitary circuit gates
-
double J1_mean = 0
-
namespace xxz
Settings for the XXZ model
Variables
-
double h_wdth = 0
Width of the distribution for on-site fields. If uniform: [-h_wdth, h_wdth]
-
double delta = 0
ZZ anisotropy Delta in the XXZ Hamiltonian
-
long spin_dim = 2
Spin dimension
-
std::string distribution = "uniform"
Random distribution for on-site fields (currently uniform only)
-
double h_wdth = 0
-
ModelType model_type = ModelType::ising_tf_rf
Algorithms
iDMRG
-
namespace idmrg
Settings for the infinite DMRG algorithm
Variables
-
bool on = false
Turns iDMRG simulation on/off.
-
size_t iter_min = 1
Minimum number of iterations before being allowed to finish
-
size_t iter_max = 5000
Maximum number of iterations before forced termination
-
long bond_max = 32
Bond dimension of the current position (maximum number of singular values to keep in SVD).
-
long bond_min = 16
Initial bond dimension limit. Only used when bond_increase_when == true.
-
size_t print_freq = 1000
Print frequency for console output. In units of iterations. (0 = off).
-
bool on = false
fDMRG
-
namespace fdmrg
Settings for the finite DMRG algorithm
Variables
-
bool on = false
Turns fdmrg simulation on/off.
-
auto ritz = OptRitz::SR
Which extremal eigenstate to target: SR = ground state, LR = highest-energy state
-
size_t iter_min = 4
Min number of iterations. One iterations moves L steps.
-
size_t iter_max = 10
Max number of iterations. One iterations moves L steps.
-
long bond_max = 128
Bond dimension of the current position (maximum number of singular values to keep in SVD).
-
long bond_min = 8
Initial bond dimension limit. Only used when bond_increase_when == true.
-
size_t print_freq = 100
Print frequency for console output. In units of iterations. (0 = off).
-
bool store_wavefn = false
Whether to store the full wavefunction/MPS. This can become very large on bigger systems
-
bool on = false
xDMRG
-
namespace xdmrg
Settings for the finite excited-state DMRG algorithm
Variables
-
bool on = false
Turns xDMRG simulation on/off.
-
OptAlgo algo = OptAlgo::XDMRG
Choose the type of DMRG algorithm [DMRG DMRGX, HYBRID_DMRGX, XDMRG, GDMRG]
-
OptRitz ritz = OptRitz::SM
Which eigenpair to target [LR largest real, SR smallest real, LM largest magnitude, SM smallest magnitude, IS initial-state energy, TE target energy density]
-
OptAlgo algo_warmup = OptAlgo::XDMRG
Choose the type of DMRG algorithm [DMRG DMRGX, HYBRID_DMRGX, XDMRG, GDMRG]
-
OptRitz ritz_warmup = OptRitz::SM
Which eigenpair to target during warmup [LR, SR, LM, SM, IS, TE]
-
OptAlgo algo_stuck = OptAlgo::GDMRG
Choose the type of DMRG algorithm [DMRG DMRGX, HYBRID_DMRGX, XDMRG, GDMRG]
-
OptRitz ritz_stuck = OptRitz::LM
Which eigenpair to target after switching to the stuck-policy algorithm [LR, SR, LM, SM, IS, TE]
-
double energy_spectrum_shift = 0.0
(Used with ritz == OptRitz::SM) Shift the energy eigenvalue spectrum by this amount: H -> H - shift
-
double energy_density_target = 0.5
(Used with ritz == OptRitz::TE) Target energy density in [0,1], mapped as EMIN + t * (EMAX - EMIN)
-
size_t iter_min = 4
Min number of iterations. One iterations moves L steps.
-
size_t iter_max = 50
Max number of iterations. One iterations moves L steps.
-
long bond_max = 1024
Maximum bond dimension (number of singular values to keep after SVD).
-
long bond_min = 8
Minimum bond dimension. Used at the start, during warmup or when bond_increase_when == true, or when starting from an entangled state
-
size_t print_freq = 1
Print frequency for console output. In units of iterations. (0 = off).
-
size_t max_states = 1
Max number of random states to find using xDMRG on a single disorder realization
-
bool store_wavefn = false
Whether to store the full wavefunction/MPS. This can become very large on bigger systems
-
bool on = false
iTEBD
-
namespace itebd
Settings for the imaginary-time infinite TEBD algorithm
Variables
-
bool on = false
Turns iTEBD simulation on/off.
-
size_t iter_min = 1
Minimum number of iterations before being allowed to finish
-
size_t iter_max = 100000
Maximum number of iterations before forced termination
-
double time_step_init_real = 0.0
Real part of initial time step delta_t
-
double time_step_init_imag = 0.1
Imag part of initial time step delta_t
-
double time_step_min = 0.00001
(Absolute value) Minimum and final time step for iTEBD time evolution.
-
size_t suzuki_order = 1
Order of the suzuki trotter decomposition (1,2 or 4)
-
long bond_max = 8
Bond dimension of the current position (maximum number of singular values to keep in SVD).
-
long bond_min = 4
Initial bond dimension limit. Only used when bond_increase_when == true.
-
size_t print_freq = 5000
Print frequency for console output. In units of iterations. (0 = off).
-
bool on = false
fLBIT
-
namespace flbit
Settings for the finite l-bit algorithm
Variables
-
bool on = false
Turns flbit simulation on/off.
-
bool run_iter_in_parallel = false
Time evolve independent target time points in parallel
-
bool run_effective_model = false
Also run the effective diagonal l-bit model for comparison before the full simulation
-
size_t iter_min = 4
Min number of iterations. One iterations moves L steps.
-
size_t iter_max = 10000
Max number of iterations. One iterations moves L steps.
-
bool use_swap_gates = true
Use gate swapping for pairwise long-range interactions rather then building a large multisite operator
-
bool use_mpo_circuit = false
Cast the unitary circuit to compressed mpo form (this is not generally faster or more accurate, but good for testing)
-
long bond_max = 1024
Maximum bond dimension (maximum number of singular values to keep in SVD).
-
long bond_min = 8
Minimum bond dimension
-
auto time_scale = TimeScale::LOGSPACED
Spacing of the target time points [LINSPACED | LOGSPACED]
-
double time_start_real = 1e-1
Starting time point (real)
-
double time_start_imag = 0
Starting time point (imag)
-
double time_final_real = 1e6
Finishing time point (real)
-
double time_final_imag = 0
Finishing time point (imag)
-
size_t time_num_steps = 500
Number of steps from start to finish. Start and final times are included
-
size_t print_freq = 1
Print frequency for console output. In units of iterations. (0 = off).
-
bool store_wavefn = false
Whether to store the full wavefunction/MPS. This can become very large on bigger systems
-
namespace cls
Settings for calculating the characteristic length-scale of lbits
Variables
-
size_t num_rnd_circuits = 1
Calculate the characteristic length-scale for this many realizations of the unitary circuit
-
bool exit_when_done = false
If true, the program exits after calculating cls. Otherwise it starts the time evolution as usual
-
bool randomize_hfields = false
Randomize the on-site fields of the Hamiltonian that goes into each realization of the unitary circuits
-
size_t mpo_circuit_switchdepth = 10
Cast the unitary circuit to an approximate compressed MPO form when the circuit depth (u_depth) is this value or more
-
long mpo_circuit_svd_bondlim = 128
The bond dimension limit used in the SVD when casting the circuit to compressed MPO form
-
double mpo_circuit_svd_trnclim = 1e-14
The truncation error limit used in the SVD when casting the circuit to compressed MPO form
-
size_t num_rnd_circuits = 1
-
namespace opdm
Settings for calculating the averaged one-particle density matrix
-
bool on = false
Algorithm Strategies
-
namespace strategy
Settings affecting the convergence rate of the algorithms
Variables
-
bool move_sites_when_stuck = true
- Deprecated:
Currently unused. Kept for config compatibility.
-
ProjectionPolicy projection_policy = ProjectionPolicy::DEFAULT
Bitmask controlling when to project to the spin/parity sector requested by target_axis. DEFAULT = INIT | STUCK | CONVERGED
-
bool use_eigenspinors = false
Use random pauli-matrix eigenvectors when initializing each mps site along x,y or z
-
size_t iter_max_warmup = 4
Initial warmup iterations. In DMRG these iterations use an exact solver with reduced bond dimension
-
size_t iter_max_stuck = 5
Stop after this many consecutive stuck iterations once the bond and truncation limits have saturated
-
size_t iter_max_saturated = 5
If any monitored quantity stays saturated this long, count the algorithm as saturated
-
size_t iter_min_converged = 1
Require convergence at least this many iterations before success
-
BlockSizePolicy dmrg_blocksize_policy = BlockSizePolicy::MIN
Bitmask controlling the adaptive DMRG block size, combining size-selection flags, activation conditions, and ON_UPDATE/ON_BONDEXP
-
size_t dmrg_min_blocksize = 1
Minimum number of sites in a dmrg optimization step.
-
size_t dmrg_max_blocksize = 4
Maximum number of sites in a dmrg optimization step.
-
long dmrg_max_prob_size = 1024 * 2 * 1024
Restricts the dmrg blocksize to keep the problem size below this limit. Problem size = chiL * (spindim ** blocksize) * chiR
-
BondExpansionPolicy dmrg_bond_expansion_policy = BondExpansionPolicy::DEFAULT
Bitmask selecting the bond-expansion strategy, timing, and H1/H2 enrichments used during DMRG
-
std::string target_axis = "none"
Requested target spin/parity sector. Choose {none, +/-x, +/-y, +/-z}
-
std::string initial_axis = "none"
Axis used to build the initial state. Choose {none, +/-x, +/-y, +/-z}
-
StateInitType initial_type = StateInitType::REAL
Whether the initial-state amplitudes are real or complex
-
StateInit initial_state = StateInit::RANDOM_ENTANGLED_STATE
Initialization mode for the finite-system starting state
-
std::string initial_pattern = {}
Product-state pattern supplied by the user or generated internally, and stored for reuse/resume
-
double rbds_rate = 0.5
If rbds_rate > 0, runs reverse bond dimension scaling (rbds) after the main algorithm. Values [0,1] represent the shrink factor, while [1,infty] represents a shrink step
-
double rtes_rate = 1e1
If rtes_rate > 1, runs reverse truncation error scaling (rtes) after the main algorithm. Values [1, infty] represent the growth factor for the truncation error limit
-
UpdatePolicy bond_increase_when = UpdatePolicy::NEVER
If and when to increase the bond dimension limit {NEVER, WARMUP, HALFSWEEP, FULLSWEEP, TRUNCATED, SAT_EVAR, SAT_ALGO, STK_ALGO}.
-
double bond_increase_rate = 8
Bond dimension growth rate. Factor if 1<x<=2, constant shift if x > 2, otherwise invalid.
-
UpdatePolicy trnc_decrease_when = UpdatePolicy::NEVER
If and when to decrease SVD truncation error limit {NEVER, WARMUP, HALFSWEEP, FULLSWEEP, TRUNCATED, SAT_EVAR, SAT_ALGO, STK_ALGO}
-
double trnc_decrease_rate = 1e-1
Decrease SVD truncation error limit by this factor. Valid if 0 < x < 1
-
double trnc_increase_rtol = 1e-3
Relative energy/variance drift tolerated when temporarily increasing the SVD truncation limit to compress the MPS. Nonpositive disables this
-
size_t trnc_increase_iter = 3
How often (in iters) to attempt compressing the MPS (by increasing the truncation error limit)
-
UpdatePolicy etol_decrease_when = UpdatePolicy::NEVER
If and when to decrease EIGS tolerance {NEVER, WARMUP, HALFSWEEP, FULLSWEEP, TRUNCATED, SAT_EVAR, SAT_ALGO, STK_ALGO, DYNAMIC}
-
double etol_decrease_rate = 1e-1
Decrease EIGS tolerance by this factor. Valid if 0 < x < 1
-
namespace dmrg_bond_expansion
-
namespace dmrg3s
-
namespace preopt
Variables
-
float bond_factor = 1.05f
Expand the bond dimension by this factor above the current bond dimension limit (value <= 1.0 = disabled)
-
size_t maxiter = 1
How many Lanczos iterations to use in the nsite bond expansion
-
size_t nkrylov = 3
The krylov subspace size to use in nsite bond expansion
-
float bond_factor = 1.05f
-
namespace dmrg3s
-
bool move_sites_when_stuck = true
Algorithm Precision
-
namespace precision
Settings for the convergence threshold and precision of MPS, SVD and eigensolvers
Variables
-
ScalarType algoScalar = ScalarType::FP64
Scalar type for tensor storage (state, model, edges)
-
ScalarType optScalar = ScalarType::FP64
Scalar type for computations (eig, eigs, svd)
-
long eig_max_size = 4096
Maximum problem size before switching from eig to eigs.
-
long eigs_max_size_shift_invert = 4096
Maximum problem size allowed for shift-invert of the local (effective) hamiltonian matrix.
-
size_t eigs_iter_min = 1000
Minimum number of iterations for eigenvalue solver.
-
size_t eigs_iter_max = 100000
Maximum number of iterations for eigenvalue solver.
-
double eigs_iter_gain = 2
Increase number of iterations on OptSolver::EIGS by gain^(iters without progress)
-
GainPolicy eigs_iter_gain_policy = GainPolicy::SAT_ALGO
Bitmask for when to increase the EIGS iteration budget [NEVER, HALFSWEEP, FULLSWEEP, SAT_EVAR, SAT_ALGO, STK_ALGO, FIN_BOND, FIN_TRNC]
-
double eigs_abstol_min = 1e-14
Smallest absolute tolerance allowed for the iterative eigensolver
-
double eigs_abstol_max = 1e-8
Largest absolute tolerance allowed for the iterative eigensolver
-
double eigs_reltol_min = 1e-2
Smallest relative residual-reduction target for the iterative eigensolver. Set 0 to disable this criterion
-
double eigs_reltol_max = 1e-1
Largest relative residual-reduction target for the iterative eigensolver. Set 0 to disable this criterion
-
int eigs_ncv_min = 0
Minimum krylov subspace size in the eigensolver. Set ncv <= 0 for automatic selection
-
int eigs_ncv_max = 0
Maximum krylov subspace size in the eigensolver. Set ncv <= 0 for automatic selection
-
int eigs_nev_min = 1
The minimum number of eigenpairs to request on OptSolver::EIGS
-
int eigs_nev_max = 8
The maximum number of eigenpairs to request on OptSolver::EIGS when stuck (increases slowly) (ncv may have to increase accordingly)
-
long eigs_blk_min = 1
Minimum block size in the eigenvalue solver (ritz vectors and residuals in block size chunks)
-
long eigs_blk_max = 2
Maximum block size in the eigenvalue solver (ritz vectors and residuals in block size chunks)
-
long eigs_jcb_blocksize_min = 128
Minimum block size used in the block-jacobi preconditioner
-
long eigs_jcb_blocksize_max = 256
Maximum block size used in the block-jacobi preconditioner (increases up to max when stuck)
-
long eigs_jcb_overlap_size = 32
Jacobi block overlap size
-
double svd_truncation_min = 1e-14
Truncation error limit, i.e. discard singular values while the truncation error is lower than this
-
double svd_truncation_max = 1e-6
If truncation error limit is updated (trnc_decrease_when != NEVER), start from this value
-
size_t svd_switchsize_bdc = 16
Linear size of a matrix, below which SVD will use slower but more precise JacobiSVD instead of BDC (default is 16 , good could be ~64)
-
bool svd_save_fail = false
Save failed SVD calculations to file
-
auto use_compressed_mpo = MpoCompress::DPL
Select the compression scheme for the virtual bond dimensions of H mpos. Select {NONE, SVD (high compression), DPL (high precision)}
-
auto use_compressed_mpo_squared = MpoCompress::DPL
Select the compression scheme for the virtual bond dimensions of H² mpos. Select {NONE, SVD (high compression), DPL (high precision)}
-
bool use_energy_shifted_mpo = false
Shift H by the current energy before building H-derived objectives, reducing catastrophic cancellation in H^2-based calculations
-
bool use_parity_shifted_mpo = true
Add a parity-shift term to H so opposite spin/parity sectors do not mix near degeneracies
-
bool use_parity_shifted_mpo_squared = true
Add the corresponding parity-shift term to H^2 for folded-spectrum objectives
-
double variance_convergence_threshold = 1e-13
Desired precision on total energy variance. The MPS state is considered good enough when its energy variance reaches below this value
-
double variance_saturation_sensitivity = 1e-1
Energy variance saturates when its log stops changing below this order of magnitude between sweeps. Good values are 1e-1 to 1e-4
-
double energy_saturation_sensitivity = 1e-1
Energy saturates when it stops changing below this order of magnitude between sweeps. Good values are 1e-2 to 1e-8
-
double entanglement_saturation_sensitivity = 1e-3
Entanglement entropy saturates when it stops changing below this order of magnitude between sweeps. Good values are 1e-1 to 1e-4
-
double locinfoscale_saturation_sensitivity = 1e-2
Information center of mass saturates when it stops changing below this order of magnitude between sweeps. Good values are 1e-1 to 1e-4
-
double target_subspace_error = 1e-10
The target subspace error 1-Σ|<ϕ_i|ψ>|². Eigenvectors are found until reaching this value. Measures whether the incomplete basis of eigenstates spans the current state.
-
size_t max_subspace_size = 256
Maximum number of candidate eigenstates to keep for a subspace optimization step
-
long max_norm_slack = 1000l
Permit norm errors within a tolerance = machine_epsilon * slack
-
double max_cache_gbts = 2.0
Maximum cache size (in GB) for temporary objects, e.g. density and transfer matrices used during subsystem entanglement entropy calculations. Increases the information lattice coverage.
-
ScalarType algoScalar = ScalarType::FP64
Threading
-
namespace threading
Parameters for multithreading num_threads controls the Eigen::Tensor/std::thread worker pool. OpenMP and BLAS/LAPACK threading are configured separately by the runtime environment.
Variables
-
unsigned int num_threads = 1
Number of Eigen::Tensor worker threads. Values 0 or 1 effectively disable extra c++ worker threads. Number of Eigen::Tensor worker threads
-
unsigned int max_threads = std::thread::hardware_concurrency()
Hardware concurrency reported on this machine
-
unsigned int show_threads = false
Show threading information and exit without running a simulation
-
unsigned int num_threads = 1
Timer
Console
-
namespace console
Settings for console output