Calculations

ElemCo.ElemCoModule
       ╭─────────────╮
Electron Correlation methods
       ╰─────────────╯
source

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
end

This is equivalent to:

@cc ccsd begin
  wf(charge=-1, ms2=1)
  cc(maxit=100, thr=1.e-12)
end

The 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 defaults

Global 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=100

Global 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.


VariableMeaning
EC::ECInfoA global information object containing options, molecular system description, integrals and orbital spaces information, see ElemCo.ECInfo.
geometry::StringMolecular 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::StringFile 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.


KeyMeaning
ETotal energy
EcCorrelation energy
HFHartree-Fock energy
MP2MP2 energy
CCSDCCSD energy
DCSDDCSD energy
SING2D-DCSDsinglet 2D-DCSD energy
TRIP2D-DCSDtriplet 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 energy

Macros

ElemCo.@ECinitMacro
@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]
source
ElemCo.@bohfMacro
@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
end
source
ElemCo.@bouhfMacro
@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
end
source
ElemCo.@ccMacro
@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 from EC).
  • 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
end
source
ElemCo.@ciphiMacro
@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
end
source
ElemCo.@copyfileMacro
@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).
source
ElemCo.@copywfMacro
@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 from wf.start file instead of wf.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 file
source
ElemCo.@dfccMacro
@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
end
source
ElemCo.@dfhfMacro
@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
end
source
ElemCo.@dfmcscfMacro
@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)"
end
source
ElemCo.@dfmp2Macro
@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"
end
source
ElemCo.@dfuhfMacro
@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
end
source
ElemCo.@dummyMacro
@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 atoms
source
ElemCo.@fciMacro
@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
end
source
ElemCo.@freeze_orbsMacro
@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]
source
ElemCo.@import_matrixMacro
@import_matrix(filename)

Import matrix from file file.

The type of the matrix is determined automatically.

source
ElemCo.@loadfileMacro
@loadfile(filename)

Read file filename from EC.scr directory.

Example

fock = @loadfile("f_mm")
source
ElemCo.@loadwfMacro
@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 energies
  • orbital_occupations: molecular orbital occupations
  • amplitudes: 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 from wf.start file instead of wf.dump
  • state::Int=1: State number for determinants (1 = ground state)
  • OPattern::Type=UInt64: Orbital pattern type for determinants (use UInt128 for >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 file
source
ElemCo.@mainnameMacro
@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")
source
ElemCo.@molpro_inputMacro
@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.

source
ElemCo.@molpro_outputMacro
@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: if true, create a new file, otherwise append to the existing file (default: true)
source
ElemCo.@print_inputMacro
@print_input(print_init=false)

Print the input file content.

Can be used to print the input file content to the output.

source
ElemCo.@rotate_orbsMacro
@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, 90
source
ElemCo.@savefileMacro
@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).
source
ElemCo.@savewfMacro
@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 when ci_coefficients is 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=2
source
ElemCo.@setMacro
@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 optscf
source
ElemCo.@show_orbsMacro
@show_orbs(range=nothing)

Show orbitals in the integrals according to an array or range range.

Examples

@dfhf
@show_orbs 1:5
source
ElemCo.@transform_intsMacro
@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.

source
ElemCo.@write_intsMacro
@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 :npy for NumPy format.
source

Exported functions

Internal functions

ElemCo.__init__Method
__init__()

Print the header with the version and the git hash of the current commit.

source