detci(1)
๐ detci(1) โ Determinant Configuration Interaction Program ๐
okay bestie, sit down, hydrate, because this one is a whole era. This is the manual for detci, the Determinant Configuration Interaction Program โจ it's giving quantum chemistry main character energy and honestly? obsessed.
๐ NAME ๐
detci โ the Determinant Configuration Interaction Program. that's it, that's the name, and it ate.
๐ธ DESCRIPTION ๐ธ
so like, what does detci actually do? bestie. it diagonalizes the nonrelativistic electronic Hamiltonian operator in a basis of Slater determinants. slay. ๐ฅ
the set of determinants it uses (that's your CI space) can be picked in a bunch of different ways. the program handles any CI space that can be formulated as a Restricted Active Space CI ๐
that includes:
- CISD, CISDT, CISDTQ, etc., all the way up to Full CI
- multireference CI's, where the references are chosen as all determinants in which up to n electrons are excited in some MO active space
- and that in turn covers CISD[T], CISD[TQ], and second-order CI (SOCI) ๐
๐ REFERENCES ๐
Restricted Active Space CI
- Determinant Based Configuration Interaction Algorithms for Complete and Restricted Configuration Interaction Spaces, J. Olsen, B. O. Roos, P. Jorgensen, and H. J. Aa. Jensen, J. Chem. Phys. 89, 2185 (1988).
- Passing the One-Billion Limit in Full Configuration-Interaction (FCI) Calculations, J. Olsen, P. Jorgensen, and J. Simons, Chem. Phys. Lett. 169, 463 (1990).
Tertiary virtual subspaces (RAS IV)
- Compact Variational Wavefunctions Incorporating Limited Triple and Quadruple Excitations, C. D. Sherrill and H. F. Schaefer, J. Phys. Chem. 100, 6069-6075 (1996).
DETCI Program
- C. D. Sherrill, Computational Algorithms for Large-Scale Full and Multi-Reference Configuration Interaction Wavefunctions, PhD thesis, University of Georgia, Athens, GA, 1996.
like, cite your sources bestie, it's called academia ๐โจ
๐๏ธ FILES REQUIRED ๐๏ธ
these ones must be there or the vibe check fails:
input.dat - Input file
file71 - Transformed one-electron integrals
file72 - Transformed two-electron integrals
๐ง TEMPORARY FILES USED ๐ง
scratch files, the little helpers, the supporting cast ๐ซถ
file50 - Diagonal of Hamiltonian
file51 - CI vectors
file52 - Sigma vectors
file53 - D file (correction vectors)
โ๏ธ FILES UPDATED โ๏ธ
output.dat - Output file
โจ๏ธ INPUT FORMAT โจ๏ธ
command-line arguments, the moment you've been waiting for
here's what you can throw at it from the command line:
-quietโ does the exact same thing asPRINT=0. silent mode. stealth mode. ninja mode ๐ฅท-ofname โ sets the filename for the output file. defaults tooutput.dat.-eโ makes the total CI energy (or energies, plural, we contain multitudes) get written out to a file calleddetci_energies.dat๐พ-cvalue โ gives you a looser convergence on the CI vector, which is handy in DETCAS calculations. heads up: value here is a real number, not an integer like inCONVERGENCE. the convergence that actually gets used will be the looser of value andCONVERGENCE๐
also, additional input for this program gets read from the file, and the following keywords are all valid:
โจ the keywords โจ
CONVERGENCE = integerโ how converged you want the CI vector to be. convergence is achieved when the RMS of the error in the CI vector is less than 10**(-n). default is4for energies and7for gradients. and no, this is not the same CI vector convergence criterion you'll find in GUGACI, don't @ me ๐คDOCC = integer_arrayโ this vector tells the program how many doubly occupied orbitals there are in each irrep. there is no default.SOCC = integer_arrayโ this vector tells the program how many singly occupied orbitals there are in each irrep. also no default.DIAG_METHOD = stringโ which method to use when diagonalizing the Hamiltonian. the valid options are:RSPโ forms the entire H matrix and diagonalizes it usinglibciomrto get all eigenvalues. (n.b. requires HUGE memory ๐ญ)OLSENโ uses Olsen's preconditioned inverse subspace method (1990).MITRUSHENKOVโ uses a 2x2 Olsen/Davidson method.DAVIDSON(orSEM) โ uses Liu's Simultaneous Expansion Method, which is identical to the Davidson method if only one root is to be found.- there's also a SEM debugging mode,
SEMTEST.
the SEM method is the most robust, but it also requires 2(N*M)+1 CI vectors on disk, where N is the maximum number of iterations and M is the number of roots. robust but hungry, iconic behavior ๐
PRECONDITIONER = stringโ the type of preconditioner to use in whichever diagonalization method you picked. valid options:DAVIDSONโ approximates the Hamiltonian matrix by the diagonal elements.H0BLOCK_INVโ uses an exact Hamiltonian ofH0_BLOCKSIZEand explicitly inverts it.GEN_DAVIDSONโ does a spectral decomposition ofH0BLOCK.ITER_INVโ uses an iterative approach to obtain the correction vector ofH0BLOCK.
H0BLOCK_INV, GEN_DAVIDSON, and ITER_INV are all formally equivalent, but ITER_INV is the least computationally expensive of the three ๐ค default is DAVIDSON.
REFERENCE = stringโ the type of reference function. this isRHForROHF.UHFandTWOCONare not supported. for ROHF, a multiplicity of 1 implies an open-shell singlet.
real talk: the program will run for open-shell singlets, but it hasn't been properly adapted to use a correct two-determinant reference in that case, so running with open-shell singlet references is not advised โ except for full CI's. consider yourself warned bestie ๐
UPDATE = stringโDAVIDSONuses the standard DAVIDSON update (a.k.a. the correction vector formula), whileOLSENuses the OLSEN correction vector. default isDAVIDSON.HD_OTF = booleanโ ifTRUE, the diagonal elements of the Hamiltonian matrix are computed on-the-fly; otherwise a diagonal element vector gets written to a separate file on disk. default isTRUE.HD_AVE = stringโ the diagonal-energy vibe selector:HD_EXACTโ uses the exact diagonal energies, which results in expansion vectors that break spin symmetry ๐HD_KAVEโ averages the diagonal energies over a spin-coupling set, yielding spin pure expansion vectors.ORB_ENERโ employs the sum of orbital energy approximation, giving spin pure expansion vectors but usually doubles the number of davidson iterations ๐ญEVANGELISTIโ uses the sums and differences of orbital energies with the SCF reference energy to produce spin pure expansion vectors.LEININGERโ the approximation which subtracts the one-electron contribution from the orbital energies, multiplies by 0.5, and adds the one-electron contribution back in, producing spin pure expansion vectors, developed by yours truly ๐ and it works as well asEVANGELISTI.
NODFILE = booleanโ only possible ifNUM_ROOTS = 1. uses the last vector space in the BVEC file to write scratch DVEC rather than using a separate DVEC file. recycling queen โป๏ธENERGY_CONVERGENCE = integerโ how converged you want the CI energy. default is6for single point energies and8for gradients or CASSCF.EX_LVL = integerโ excitation level for excitations into virtual orbitals (default2, i.e. CISD).VAL_EX_LVL = integerโ excitation level for references in orbitals of RAS II. defaults tozero.FCI = booleanโ if this flag is set toTRUE, then the storage of strings is simplified for a Full CI and the calculation requires less overhead. however, the final results should be identical to those whenFCI = FALSE.
โ ๏ธ may cause unpredictable results ifFCI = TRUEbutEX_LVLis not consistent with a Full CI. like, don't do that. fr fr.
FROZEN_DOCC = integer_arrayโ the number of lowest energy doubly occupied orbitals in each irreducible representation from which there will be no excitations. the Cotton ordering of the irreducible representations is used. the default is the zero vector.FROZEN_UOCC = integer_vectorโ the number of highest energy unoccupied orbitals in each irreducible representation into which there will be no excitations. the default is the zero vector.FREEZE_CORE = booleanโ determines whether the frozen core orbitals get included implicitly (true) or explicitly (false). in the implicit case, the energetic contributions from the frozen core orbitals are folded into the one-electron integrals and into the "frozen core energy" computed by the transformation program. default istrue.EXPORT_VECTOR = booleanโ whether to store the converged vector(s) at the end of the run. the vector(s) is(are) stored in a transparent format so other programs can use it easily ๐ซถ the format is specified insrc/lib/libqt/slaterdset.h. default isfalse.NUM_EXPORT = integerโ ifEXPORT_VECTORis set totrue, then this determines the number of vectors that need to be exported at the end of the run. default is1.GUESS_VECTOR = stringโ which type of guess vector to use in the CI iteration. currently only used by the SEM iteration method. accepted values are:UNITโ a unit vector guess (NUM_ROOTSandNUM_INIT_VECSmust both be1)H0_BLOCKโ use eigenvectors from the H0 BLOCK submatrix (default)DFILEโ useNUM_ROOTSpreviously converged vectors in the D fileMP2โ use the MP2 wavefunction as a guess (not working at the moment ๐ญ)
H0_BLOCKSIZE = integerโ the size of the "H0" block of the Hamiltonian which gets solved exactly. the n determinants with the lowest SCF energy are selected, and a submatrix of the Hamiltonian is formed using these determinants. this submatrix is used to accelerate convergence of the CI iterations in theOLSENandMITRUSHENKOViteration schemes, and also to find a good starting guess for the SEM method ifGUESS_VECTOR = H0_BLOCK. defaults to40.
heads up: the program may change the given size for Ms=0 cases (Ms0 = TRUE) if it determines that the H0 block includes only one member of a pair of determinants related by time reversal symmetry. for very small block sizes, this could conceivably eliminate the entire H0 block; the program should print warnings if this occurs ๐
H0_BLOCK_COUPLING_SIZE = integerโ specifies the size of the coupling block within the generalized davidson preconditioner. default value is1000.MAX_DET = integerโ sets the maximum number of determinants; if the CI space is larger than this, the program aborts ๐ this option exists to make sure that very large calculations don't get run by accident. during the current developmental phase, the default is10000, but it will be raised before long.
and bestie, that's not even the whole thing โ more of this iconic page is coming, so don't go anywhere ๐
MAXITER = integerโ the max number of iterations to diagonalize the Hamiltonian. Defaults to12. Don't be dramatic, it's just the cap. โจMs0 = booleanโ ifTRUE, use theMs=0component of the state. Defaults toTRUEif closed-shell and toFALSEotherwise. It's related to theSparameter. Spin tea ๐NPRINT = integerโ how many determinants get printed, along with their coefficients, in the list of most important determinants in the final CI vector. Default is20. It's giving top 20 countdown but for CI. ๐NUM_ROOTS = integerโ number of roots to obtain from the secular equations. Default is one. If more than one root is required, setDIAG_METHODtoSEM(or, for very small cases,RSPorSEMTEST). Roots era ๐NUM_INIT_VECS = integerโ number of initial vectors to use in the CI iterative procedure. Defaults to the number of roots. Starter pack vibes ๐ฑOPDM = booleanโ ifTRUE, calculate the one-particle density matrix and makeOPDM_WRITEdefault toTRUE. The default value ofOPDMisFALSE. Lowkey important ๐งฎOPDM_FILE = integerโ file (unit number) for writing the one-particle density matrix ifOPDM_WRITE = TRUE. The default value is currently73. ๐OPDM_WRITE = booleanโ flag for whether or not to write the one-particle density matrix to disk. Yes/no situation ๐พOPDM_PRINT = booleanโ flag for whether or not to print the one-particle density matrix. For the nosy ones. ๐จ๏ธOPDM_DIAG = booleanโ flag for whether or not to diagonalize the one-particle density matrix. Diagonalize, bestie โจWRTNOS = booleanโ flag for whether or not to write the CI natural orbitals toPSIF_CHKPT. Checkpoint slay ๐ORBSFILE = integerโ file (unit number) for writing various CI natural orbitals. The default value is76. ๐OPDM_AVE = booleanโ flag for whether or not to average the OPDM over several roots in order to obtain a state-average one-particle density matrix. This density matrix can be diagonalized to obtain the CI natural orbitals. Average era โ๏ธORBS_ROOT = integerโ flag for setting the root number for which CI natural orbitals are written toPSIF_CHKPT. The default value is1(lowest root). Main character root ๐PRINT = integerโ this option determines the verbosity of the output. A value of1or2specifies minimal printing, a value of3specifies verbose printing. Values of4or5are used for debugging. Do not use level5unless the test case is very small (e.g.STO H2O CISD). Too much information, respectfully ๐ฃ๏ธROOT = integerโ the root to write out the two-particle density matrix for (the one-particle density matrices are written for all roots). Useful for a state-specific CASSCF or CI optimization on an excited state. Excited state energy โกS = integerโ the value of the spin quantum numberSis given by this option. The default is0(singlet). The only thing this is actually used for is determining the phase of the redundant half of the CI vector when theMs=0component is used (i.e.,Ms0 = TRUE). For cases whereSis not an integer, this parameter need not be entered because such a state can't have anMs=0component. Quantum tea โTPDM = booleanโ ifTRUE, calculate the two-particle density matrix and makeTPDM_WRITEdefault toTRUE. The default value ofTPDMisFALSE. Two-particle bestie ๐งฌTPDM_FILE = integerโ file (unit number) for writing the two-particle density matrix ifTPDM_WRITE = TRUE. The default value is currently74. ๐TPDM_WRITE = booleanโ flag for whether or not to write the two-particle density matrix to disk. Disk go brrr ๐พTPDM_PRINT = booleanโ flag for whether or not to print the two-particle density matrix. Typically a very bad idea except for debugging small cases. Do not print the whole thing unless you're built different ๐
There is also some less commonly used input, which novice users of PSI will have no need to use. Secret menu energy ๐คซ
BENDAZZOLI = booleanโ use some routines to calculate sigma based on the papers of Bendazzoli et al. Seems to be slower and not worthwhile; may disappear eventually. Works only for full CI and the author doesn't remember if they could see how their clever scheme might be extended to RAS in general. Experimental ๐งชCALC_SSQ = booleanโ ifTRUE, calculate the expectation value of theS^2operator for the final CI wavefunction for each root. In principle,DETCIshould yieldS^2eigenfunctions. The default isFALSE. Spin check ๐COLLAPSE_SIZE integerโ gives the number of vectors to retain when the Davidson subspace is collapsed (seeMAXNVECTbelow). If greater than one, the collapsed subspace retains the best estimate of the CI vector for the previousniterations. Defaults to1. Keep the good ones ๐งFIRST_TMP_UNIT = integerโ gives the file (unit) number associated with the first scratch file used byDETCI. Other scratch files are numbered consecutively from this point, in the orderH(diag),C,S,D. Each of these logical files takes up a number of physical files specified by the even more obscure input parametersNUM_HD_TMP_UNITS,NUM_C_TMP_UNITS,NUM_S_TMP_UNITS,NUM_D_TMP_UNITS. The user can also specify different starting points for each of these sets using the parametersFIRST_HD_TMP_UNITand so forth. Splitting a file across several units may help avoid the size-of-integer problem in addressing large files that is present inDETCIand in PSI I/O libraries; but then again, the author hasn't tested it to see what happens. The first unit of each section is printed out under the headingFILESin the parameter output beginning theDETCIrun. Unhinged but maybe useful ๐FZC = booleanโ determines whether the frozen core orbitals are treated as truly frozen (i.e., absent entirely from calculation,FZC = TRUE) or whether they are present but restricted to be doubly occupied (FZC = FALSE). In the GUGA CI program, this is the distinction between what it callsFZCandCORorbitals. Generally, the integrals for frozen core orbitals are not needed byDETCIbut they may be needed for MCSCF or gradients. Frozen core lore โ๏ธICORE = integerโ specifies how to handle buffering of CI vectors. A value of0makes the program perform I/O one RAS subblock at a time;1uses entire CI vectors at a time; and2uses one irrep block at a time. Values of0or2cause some inefficiency in the I/O (requiring multiple reads of theCvector when constructingHin the iterative subspace ifDIAG_METHOD = SEM), but require less core memory. Memory vs. speed, classic โ๏ธISTOP = booleanโ ifTRUEthenDETCIwill stop after string information is formed and before integrals are read. May eventually change to an integer so that the user can select from multiple stopping points. Early exit ๐ชMAXNVECT = integerโ gives the maximum number of Davidson subspace vectors which can be held on disk for the CI coefficient and sigma vectors. (There is oneH(diag)vector and the number ofDvectors is equal to the number of roots). When the number of vectors on disk reaches the value ofMAXNVECT, the Davidson subspace will be collapsed toCOLLAPSE_SIZEvectors for each root. This is very helpful for saving disk space. Defaults toMAXITER * NUM_ROOTS + NUM_INIT_VECS. Disk space icon ๐ฝMIXED = booleanโ this determines whether "mixed" RAS II/RAS III excitations are allowed into the CI space. This is useful for placing additional constraints on a RAS CI. Mixed vibes ๐MIXED4 = booleanโ this is similar to theMIXEDkeyword, but refers to excitations into RAS IV. Part two ๐ชฉNUNITS = integerโ number of scratch files to be used in storing theCvectors (and also for the sigma vectors). More files, more friends ๐OEI_ERASE = booleanโ this determines whether the program erases the one-electron integrals file after it has been read. The default will eventually be true, but during development the default is false. Development era ๐งOEI_FILE = integerโ this keyword allows the user to specify the transformed one-electron integral file. The default is71. ๐PRINT_CIBLKS = booleanโ specifies whether the program should print out a summary of all the blocks in the CI vector (which can be cast into matrix form, see refs.). Block party ๐งฑR4S = booleanโ restricts the RAS IV strings to the minimal set, saving memory. If you are concerned about this option, you should write David for advice unless you are aDETCIexpert. Ask before you touch ๐REF_SYM = integerโ this option allows the user to look for CI vectors of a different irrep than the reference. This probably only makes sense for Full CI, and it would probably not work with unit vector guesses. Numbering starts from zero for the totally-symmetric irrep. Symmetry switch ๐REPL_OTF = booleanโ tellsDETCIwhether or not to do string replacements on the fly. Can save a gigantic amount of memory (especially for truncated CI's) but is somewhat flaky and hasn't been tested for a while. As the author recalls, it only works for certain classes of RAS calculations. Contact David for assistance. Eventually, the on-the-fly replacement stuff should be redone in a much smarter way so that it doesn't take eons of CPU time. Work along these lines was once started and may be completed eventually. Flaky icon โ ๏ธRESTART = booleanโ this option allows the user to resume aDETCIiteration that terminated prematurely. It assumes that the CI and sigma vectors are on disk; the number of vectors specified byRESTART_VECSis collapsed down to one vector per root. Comeback era ๐RESTART_VECS = integerโ ifRESTART = TRUEthis specifies the number of CI (and sigma) vectors to read from disk. Typically this is the number of successfully completed iterations from a previous run times the number of roots for that run. Math bestie ๐งฎTEI_ERASE = booleanโ this determines whether the program erases the two-electron integrals file after it has been read. The default will eventually be true, but during development the default is false. Same development energy ๐งTEI_FILE = integerโ this keyword allows the user to specify the transformed two-electron integral file. The default is72. ๐MPN= boolean โ set this to TRUE and DETCI will go off and compute the MPn series out to kth order, where k is decided bymaxnvect. That's the whole vibe, no cap. โจ
And like, for open-shell systems (REF=ROHF, WFN = ZAPTN) DETCI doesn't do MPn, it computes the ZAPTn series instead. Same energy, different name. ๐ฆ
But bestie, you don't just get to flip this on and dip โ there are three things you MUST have set first or it's not happening:
GUESS_VECTORmust be set to TRUE. non-negotiable.HD_OTFmust be set to TRUE. also non-negotiable.HD_AVEmust be set toorb_ener. literally that value. not vibing with anything else.
Not me having to say this twice: all three of those need to be TRUE/orb_enerbefore you turnMPNon. It's giving prerequisites. ๐
SAVE_MPN2= integer โ okay so this one only becomes valid whenMPNis TRUE andWIGNERis TRUE. Both. Together. Then she activates. ๐
Here's the breakdown, and the number you pick literally changes which energy gets saved:
- set it to
1โ the MP(2n-1) energy is saved. - set it to
2โ the MP(2n-2) energy is saved. - set it to any other value โ the MPn energy is saved.
The default is 0, which is not 1 and not 2, so yeah โ you already know which branch that lands in. ๐ญ
And that's the whole page, bestie โ you made it to the end, iconic behavior honestly. ๐ซถ
This was detci(1), dated 9 Feb, 1996 โ yes, she's an elder but she still slays, and now you know her fr fr. go compute something beautiful, mwah ๐โจ
๐ฆ where this page comes from
- debian bookworm: psi3 3.4.0-6+b3
- ubuntu jammy: psi3 3.4.0-6ubuntu1
- ubuntu noble: psi3 3.4.0-6ubuntu1
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms