Calculations
ElemCo.ElemCo — Module
╭─────────────╮
Electron Correlation methods
╰─────────────╯The ElemCo module contains the main macros and functions for running electronic structure calculations. The methods are contained in various submodules and are described in the following sections.
Setting Options
Options can be set using the @set macro. The preferred way to set options is to use local options within the calculation macro itself. This ensures that options are applied only to the specific calculation and are automatically restored afterwards.
Local Options (Recommended)
All calculation macros accept an optional begin...end block as the last argument to set options locally:
@cc ccsd begin
@set wf charge=-1 ms2=1
@set cc maxit=100 thr=1.e-12
endThis is equivalent to:
@cc ccsd begin
wf(charge=-1, ms2=1)
cc(maxit=100, thr=1.e-12)
endThe options are automatically restored to their previous values after the calculation completes, even if an error occurs. This makes it safe and convenient to run multiple calculations with different settings:
# Run neutral molecule
@dfhf
@cc ccsd
# Run anion with tighter convergence
@dfhf begin
@set wf charge=-1
end
@cc ccsd begin
@set wf charge=-1
@set cc thr=1.e-12
end
# Options are now back to defaultsGlobal Options
Options can also be set globally using the @set macro outside of calculation blocks:
@set cc maxit=100
@cc ccsd # Uses maxit=100
@cc dcsd # Also uses maxit=100Global options persist until explicitly changed or reset with @reset.
Reserved Variables
Various macros are defined and exported to simplify running calculations. The macros use several reserved variable names. The following table lists the reserved variable names and their meanings.
| Variable | Meaning |
|---|---|
EC::ECInfo | A global information object containing options, molecular system description, integrals and orbital spaces information, see ElemCo.ECInfo. |
geometry::String | Molecular coordinates, either in the xyz format or the file containing the xyz coordinates, see ElemCo.MSystems. |
basis::Union{Dict,String} | Basis set information, see ElemCo.MSystems |
fcidump::String | File containing the integrals in the FCIDUMP format, see ElemCo.FciDumps. |
The driver routines and macros return energies as ordered descriptive dictionaries ElemCo.ODDict. The last energy is always the total energy (can be accessed using last_energy(energies)). The following table lists the keys and their meanings.
| Key | Meaning |
|---|---|
E | Total energy |
Ec | Correlation energy |
HF | Hartree-Fock energy |
MP2 | MP2 energy |
CCSD | CCSD energy |
DCSD | DCSD energy |
SING2D-DCSD | singlet 2D-DCSD energy |
TRIP2D-DCSD | triplet 2D-DCSD energy |
| etc. |
One can print the keys of the returned ODDict to see all the available keys:
julia> println(keys(energies))or display the complete dictionary together with the descriptions as
julia> display(energies)The values and the descriptions can be accessed using the keys as
julia> energies["E"] # Total energy
julia> energies("E") # Description of the total energyMacros
ElemCo.@ECinit — Macro
@ECinit()Initialize EC::ECInfo and add molecular system and/or fcidump if variables geometry::String and basis::Dict{String,Any} and/or fcidump::String are defined.
If EC is already initialized, it will be overwritten.
Examples
geometry="He 0.0 0.0 0.0"
basis = Dict("ao"=>"cc-pVDZ", "jkfit"=>"cc-pvtz-jkfit", "mpfit"=>"cc-pvdz-mpfit")
@ECinit
# output
Occupied orbitals:[1]
ElemCo.@bohf — Macro
@bohf(opts_block=nothing)Run bi-orthogonal HF calculation using FCIDUMP integrals.
The orbital rotations are stored to WfOptions.dump. For open-shell systems (or UHF FCIDUMPs), the BO-UHF energy is calculated.
Optionally, a begin...end block can be provided to set local options for this call. The options are reset after the call completes.
Examples
fcidump = "FCIDUMP"
@bohf
# with local options:
@bohf begin
@set scf maxit=100
endElemCo.@bouhf — Macro
@bouhf(opts_block=nothing)Run bi-orthogonal UHF calculation using FCIDUMP integrals.
Optionally, a begin...end block can be provided to set local options for this call. The options are reset after the call completes.
Examples
fcidump = "FCIDUMP"
@bouhf
# with local options:
@bouhf begin
@set scf maxit=100
endElemCo.@cc — Macro
@cc(method, args...)Run coupled cluster calculation.
The type of the method is determined by the first argument (ccsd/ccsd(t)/dcsd etc). The method can be specified as a string or as a variable, e.g., @cc CCSD or @cc "CCSD" or ccmethod="CCSD"; @cc ccmethod.
Optionally, a begin...end block can be provided as the last argument to set local options for this call. The options are reset after the call completes.
Keyword arguments
fcidump::String: fcidump file (default: "", i.e., use integrals fromEC).occa::String: occupied α orbitals (default: "-").occb::String: occupied β orbitals (default: "-").
The occupation strings can be given as a + separated list, e.g. occa = 1+2+3 or equivalently 1-3. Additionally, the spatial symmetry of the orbitals can be specified with the syntax orb.sym, e.g. occa = "-5.1+-2.2+-4.3".
Examples
geometry="bohr
O 0.000000000 0.000000000 -0.130186067
H1 0.000000000 1.489124508 1.033245507
H2 0.000000000 -1.489124508 1.033245507"
basis = Dict("ao"=>"cc-pVDZ", "jkfit"=>"cc-pvtz-jkfit", "mpfit"=>"cc-pvdz-mpfit")
@dfhf
@dfints
@cc ccsd
# with local options:
@cc ccsd begin
@set wf charge=-1 ms2=1
@set cc maxit=30
endElemCo.@check_molproinfo — Macro
@check_molproinfo()Check if MolproInterface.MolproInfo is initialized and return the files. If not initialized, throw an error.
ElemCo.@ciphi — Macro
@ciphi(args...)Run CIPHI (CIΦ - CI via Perturbative and Heat-Bath Iterative selection) calculation.
Optionally, a begin...end block can be provided as the last argument to set local options for this call. The options are reset after the call completes.
Keyword arguments
occa::String: occupied α orbitals (default: "-").occb::String: occupied β orbitals (default: "-").
The occupation strings can be given as a + separated list, e.g. occa = 1+2+3 or equivalently 1-3. Additionally, the spatial symmetry of the orbitals can be specified with the syntax orb.sym, e.g. occa = "-5.1+-2.2+-4.3".
@sci and @ciϕ are aliases for this macro.
Examples
geometry="bohr
O 0.000000000 0.000000000 -0.130186067
H1 0.000000000 1.489124508 1.033245507
H2 0.000000000 -1.489124508 1.033245507"
basis = Dict("ao"=>"6-31g", "jkfit"=>"vdz-jkfit", "mpfit"=>"vdz-mpfit")
@dfhf
@ciphi
# with local options:
@ciphi begin
@set ciphi epsilon=1.e-4
endElemCo.@ciϕ — Macro
@ciϕ(args...)Alias for @ciphi.
ElemCo.@copyfile — Macro
@copyfile(from_file, to_file, kwargs...)Copy file from_file to to_file in EC.scr directory.
Keyword arguments
overwrite::Bool: overwrite existing file (default:false).
ElemCo.@copywf — Macro
@copywf(to_file::AbstractString=""; start=false, state=0)Copy wavefunction data from the current trexio dump file to another dump file.
If to_file is not provided, the wavefunction is copied to EC.options.wf.store file. Note: This does not check the contents of the files.
Keyword Arguments
start::Bool=false: If true, copy fromwf.startfile instead ofwf.dump.state::Int=0: State number for determinant files. If 0, copies the main dump file. If >0, copies the state-specific determinant file (e.g.,file_state2.h5).
Examples
julia> @copywf # copy dump to store
julia> @copywf "backup.h5" # copy dump to backup file
julia> @copywf start=true # copy start file to store
julia> @copywf "backup.h5" start=true # copy start file to backup
julia> @copywf state=2 # copy state 2 determinant file to store
julia> @copywf "state2_backup.h5" state=2 # copy state 2 to specific fileElemCo.@deletefile — Macro
@deletefile(filename)Delete file filename from EC.scr directory.
ElemCo.@dfcc — Macro
@dfcc(method="svd-dcsd", opts_block=nothing)Run coupled cluster calculation using density fitted integrals.
The type of the method is determined by the first argument. The method can be specified as a string or as a variable, e.g., @dfcc SVD-DCSD or @dfcc "SVD-DCSD" or ccmethod="SVD-DCSD"; @dfcc ccmethod.
Optionally, a begin...end block can be provided to set local options for this call. The options are reset after the call completes.
Examples
geometry="bohr
O 0.000000000 0.000000000 -0.130186067
H1 0.000000000 1.489124508 1.033245507
H2 0.000000000 -1.489124508 1.033245507"
basis = Dict("ao"=>"cc-pVDZ", "jkfit"=>"cc-pvtz-jkfit", "mpfit"=>"cc-pvdz-mpfit")
@dfhf
@dfcc svd-dcsd
# with local options:
@dfcc svd-dcsd begin
@set cc maxit=30
endElemCo.@dfhf — Macro
@dfhf(opts_block=nothing)Run DF-HF calculation. The orbitals are stored to WfOptions.dump.
Optionally, a begin...end block can be provided to set local options for this call. The options are reset after the call completes.
Examples
@dfhf
# with local options:
@dfhf begin
@set scf maxit=100 thr=1.e-12
@set wf charge=-1
endElemCo.@dfints — Macro
@dfints()Generate 2 and 4-idx MO integrals using density fitting. The MO coefficients are read from WfOptions.dump.
ElemCo.@dfmcscf — Macro
@dfmcscf(opts_block=nothing)Run DF-MCSCF calculation. The orbitals are stored to WfOptions.dump.
Optionally, a begin...end block can be provided to set local options for this call. The options are reset after the call completes.
Examples
@dfmcscf
# with local options:
@dfmcscf begin
@set scf maxit=100
@set wf active="(4,4)"
endElemCo.@dfmp2 — Macro
@dfmp2(opts_block=nothing)Run density-fitted MP2 calculation.
If save is set in CcOptions.save, the MP2 doubles amplitudes are saved to save*"_2" file.
Optionally, a begin...end block can be provided to set local options for this call. The options are reset after the call completes.
Examples
@dfmp2
# with local options:
@dfmp2 begin
@set cc save="mp2_amplitudes"
endElemCo.@dfuhf — Macro
@dfuhf(opts_block=nothing)Run DF-UHF calculation. The orbitals are stored to WfOptions.dump.
Optionally, a begin...end block can be provided to set local options for this call. The options are reset after the call completes.
Examples
@dfuhf
# with local options:
@dfuhf begin
@set scf maxit=100
endElemCo.@dummy — Macro
@dummy(atoms)Set atoms as dummy atoms in the system. atoms is a list of atom indices or atomic symbols.
After running the macro, only the atoms in the list are set as dummy atoms in the system.
Examples
@dummy [1,2,3]
@dummy ["H1","H2"]
@dummy [1,"H2",:H3]
@dummy [] # unset all dummy atomsElemCo.@export_molden — Macro
@export_molden(filename)Export current orbitals to Molden file filename.
ElemCo.@fci — Macro
@fci(args...)Run FCI calculation.
Optionally, a begin...end block can be provided as the last argument to set local options for this call. The options are reset after the call completes.
Keyword arguments
occa::String: occupied α orbitals (default: "-").occb::String: occupied β orbitals (default: "-").
The occupation strings can be given as a + separated list, e.g. occa = 1+2+3 or equivalently 1-3. Additionally, the spatial symmetry of the orbitals can be specified with the syntax orb.sym, e.g. occa = "-5.1+-2.2+-4.3".
Examples
geometry="bohr
O 0.000000000 0.000000000 -0.130186067
H1 0.000000000 1.489124508 1.033245507
H2 0.000000000 -1.489124508 1.033245507"
basis = Dict("ao"=>"6-31g", "jkfit"=>"vdz-jkfit", "mpfit"=>"vdz-mpfit")
@dfhf
@fci
# with local options:
@fci begin
@set wf charge=-1
endElemCo.@freeze_orbs — Macro
@freeze_orbs(freeze_orbs)Freeze orbitals in the integrals according to an array or range freeze_orbs.
Alternatively, the orbitals can be specified as a String with the +/- or :/; syntax, e.g., "1-5+7-8", or "1:5;7-8".
Examples
fcidump = "FCIDUMP"
@freeze_orbs 1:5
...
@ECinit
@freeze_orbs [1,2,20,21]ElemCo.@import_matrix — Macro
@import_matrix(filename)Import matrix from file file.
The type of the matrix is determined automatically.
ElemCo.@loadfile — Macro
@loadfile(filename)Read file filename from EC.scr directory.
Example
fock = @loadfile("f_mm")ElemCo.@loadwf — Macro
@loadwf(what...; start=false, state=1)Load wavefunction data from the trexio dump file.
The arguments what can be a vector of strings, a string variable or a list of arguments specifying what to load. Possible values are:
all: load everything available (overrides other options)orbital_energies: molecular orbital energiesorbital_occupations: molecular orbital occupationsamplitudes: restricted CC amplitudes (T1, T2)unrestricted_amplitudes: unrestricted CC amplitudes (T1a, T1b, T2a, T2b, T2ab)determinants: selected CI determinants and coefficients
The loaded data are returned as a dictionary with keys corresponding to the requested data. basis, orbitals and orbital_type are always included in the output.
Keyword Arguments
start::Bool=false: If true, read fromwf.startfile instead ofwf.dumpstate::Int=1: State number for determinants (1 = ground state)OPattern::Type=UInt64: Orbital pattern type for determinants (useUInt128for >64 orbitals)
Examples
julia> wf = @loadwf orbital_energies orbital_occupations
julia> wf["basis"] # basis set information
julia> wf = @loadwf ["orbital_energies", "orbital_occupations"]
julia> wf = @loadwf amplitudes # load CC amplitudes
julia> wf = @loadwf determinants state=2 # load determinants for excited state
julia> wf = @loadwf all start=true # load everything from start fileElemCo.@mainname — Macro
@mainname(file)Return the main name of a file, i.e. the part before the last dot and the extension.
Examples
julia> @mainname("~/test.xyz")
("test", "xyz")ElemCo.@molpro_input — Macro
@molpro_input(filename="elemcoil")Initialize the Molpro interface with the given filename.
It relies on the Molpro XML file to set up the molecule and basis set. If the basis variable exists, it will be updated with the AO basis set from the XML file.
See MolproInterface for more details on the Molpro interface.
ElemCo.@molpro_output — Macro
@molpro_output(ecvariables, kwargs...)Save key-value pairs from ecvariables to a ECVARIABLES file in the MolproInterface.MolproInfo object.
The ecvariables is a dictionary with the variables to be included in the output. The keyword arguments are passed to the MolproInterface.save_ecvariables_to_file function. Possible keyword arguments include:
prefix::String: prefix for each variable in the output file (default: "")new::Bool: iftrue, create a new file, otherwise append to the existing file (default:true)
ElemCo.@opt — Macro
@opt(opt, kwargs...)Alias for @set.
ElemCo.@print_input — Macro
@print_input(print_init=false)Print the input file content.
Can be used to print the input file content to the output.
ElemCo.@reset — Macro
@reset(opt)Reset options for opt to default values.
ElemCo.@rotate_orbs — Macro
@rotate_orbs(orb1, orb2, angle, kwargs...)Rotate orbitals orb1 and orb2 from WfOptions.dump by angle (in degrees). For UHF, spin can be :α or :β (keyword argument).
The orbitals are stored to WfOptions.store.
Keyword arguments
spin::Symbol: spin of the orbitals (default::α).
Examples
@dfhf
# swap orbitals 1 and 2
@rotate_orbs 1, 2, 90ElemCo.@run — Macro
general runner
ElemCo.@savefile — Macro
@savefile(filename, arr, kwargs...)Save array or tuple of arrays arr to file filename in EC.scr directory.
Keyword arguments
description::String: description of the file (default: "tmp").overwrite::Bool: overwrite existing file (default:false).
ElemCo.@savewf — Macro
@savewf(wf::AbstractDict; state=1)Save wavefunction data to the trexio dump file.
The argument wf is a dictionary with the data to be saved. Possible keys are:
Orbital data:
"basis": basis set information"orbitals": molecular orbitals"rotations": orbital rotations (alternative to"orbitals")"orbital_type": type of the orbitals (e.g., "RHF", "UHF", "ROHF", "MCSCF")"orbital_energies": molecular orbital energies"orbital_occupations": molecular orbital occupations
Restricted CC amplitudes:
"T1": singles amplitudes (nvirt × nocc)"T2": doubles amplitudes (nvirt × nvirt × nocc × nocc)
Unrestricted CC amplitudes:
"T1a","T1b": α and β singles amplitudes"T2a","T2b","T2ab": αα, ββ, and αβ doubles amplitudes
Selected CI (CIPHI) data:
"determinants": vector of determinants"ci_coefficients": CI coefficients (vector for single state, matrix for multi-state)
Keyword Arguments
state::Int=1: State number for determinants (used whenci_coefficientsis a vector)
Examples
julia> wf = @loadwf orbital_energies orbital_occupations
julia> orbs = wf["orbitals"]
[...]
julia> wf1 = Dict("basis"=>wf["basis"], "orbitals"=>orbs, "orbital_type"=>"modified RHF")
julia> @savewf wf1
julia> # Save amplitudes
julia> @savewf Dict("T1"=>T1, "T2"=>T2)
julia> # Save determinants for excited state
julia> @savewf Dict("determinants"=>dets, "ci_coefficients"=>coeffs) state=2ElemCo.@sci — Macro
@sci(args...)Alias for @ciphi.
ElemCo.@set — Macro
@set(opt, kwargs...)Set options for EC::ECInfo.
The first argument opt is the name of the option (e.g., scf, cc, cholesky), see ECInfos.Options. The keyword arguments are the options to be set (e.g., thr=1.e-14, maxit=10). The current state of the options can be stored in a variable, e.g., opt_cc = @set cc. The state can then be restored by @set cc opt_cc. If EC is not already initialized, it will be done.
Examples
optscf = @set scf thr=1.e-14 maxit=10
@set cc maxit=100
...
@set scf optscfElemCo.@setupEC — Macro
@setupEC()Setup EC::ECInfo with geometry, basis, and fcidump if defined.
ElemCo.@show_orbs — Macro
@show_orbs(range=nothing)Show orbitals in the integrals according to an array or range range.
Examples
@dfhf
@show_orbs 1:5ElemCo.@transform_ints — Macro
@transform_ints()Rotate FCIDump integrals using rotations from WfOptions.dump as transformation matrices.
The orbital rotations are read from WfOptions.dump. If type of the rotations contains the word biorthogonal, the bi-orthogonal orbitals are used.
ElemCo.@tryECinit — Macro
@tryECinit()If EC::ECInfo is not yet initialized, run @ECinit macro.
ElemCo.@write_ints — Macro
@write_ints(file="FCIDUMP", kwargs...)Write FCIDump integrals to file file.
Keyword arguments
tol::Float64: tolerance for writing integrals (default:-1.0- all integrals are written).format::Symbol: format for writing integrals (default::ascii). Can be:npyfor NumPy format.
Exported functions
Internal functions
ElemCo.__init__ — Method
__init__()Print the header with the version and the git hash of the current commit.