Skip to content

Latest commit

 

History

History
325 lines (254 loc) · 9.87 KB

05-ExcitedStates.org

File metadata and controls

325 lines (254 loc) · 9.87 KB

Excited states with Quantum Package and CHAMP

$\longrightarrow$ $\longrightarrow$ $\longrightarrow$ @@html: <img src=”./images/Champ.png” height=”80px” /> @@

Introduction

We will import a Hartree-Fock wavefunction for the formaldehyde (H2CO) molecule from a TREXIO file into Quantum Package (QP), and run a two-state CIPSI calculation with these orbitals. The wavefunctions for the 2 states will be stored in the TREXIO file, and we will run wave function optimization in CHAMP, followed by a Diffusion Monte Carlo calculation.

CIPSI 2-state calculations

You can import the single-determinant wave function from the provided TREXIO file COH2.trexio as:

wget https://github.com/TREX-CoE/school-ncc-2023/raw/master/docs/TrexioFiles/COH2.trexio
qp_import_trexio.py COH2.trexio -o COH2
qp set_file COH2

Specify that you want to run a two-state calculation:

qp set determinants n_states 2

Tell QP to stop when the number of determinants is larger than 2000

qp set determinants n_det_max 2000

and run the CIPSI in the Full-CI space:

qp_srun fci COH2 | tee COH2.fci.out

By default, at every iteration QP tries to double the size of the wave function. In QMC, we will use a small number of determinants, so we should tell QP to add less determinants at each iteration to have a finer selection.

qp set determinants selection_factor 0.5
qp_srun cis COH2 | tee COH2.cis.out
qp set determinants read_wf true
qp_srun fci COH2 | tee COH2.fci.out

read_wf = true specifies that the wave function stored in the EZFIO database should be used as a starting point for the the CI calculation.

Now, we have obtained a more reasonable excitation energy, around 4 eV, and we are ready to export the data for CHAMP.

Export wave functions to CHAMP

The excited states are of different symmetries, so we will generate two different setups in CHAMP, one for each state. To do that, we will save two different files, one for each state, and containing only the non-zero determinants.

First, copy the COH2 directory into COH2_GS and COH2_ES, one directory for each state:

cp -r COH2 COH2_GS
cp -r COH2 COH2_ES

Then, we will use qp_edit to extract one state in each EZFIO directory:

qp set_file COH2_GS
qp edit --state=1

qp set_file COH2_ES
qp edit --state=2

The states have been extracted, but the EZFIO databases still contain the determinants with almost zero coefficients. We can remove them by running

qp set_file COH2_GS
qp run truncate_wf

This last program is interactive and asks for the minimum weight of the kept configurations. Answer 1.d-10 to this question.

Similarly, remove the negligible determinants from the excited state:

qp set_file COH2_ES
qp run truncate_wf

We can now export the wave functions in two different TREXIO files. To do that, for each state we copy the initial TREXIO file and add the determinants information:

cp COH2.trexio COH2_GS.trexio
qp set_file COH2_GS
qp set trexio trexio_file  COH2_GS.trexio
qp_srun export_trexio COH2_GS
cp COH2.trexio COH2_ES.trexio
qp set_file COH2_ES
qp set trexio trexio_file  COH2_ES.trexio
qp_srun export_trexio COH2_ES

Now, we are ready to run the QMC calculations for each state.

QMC wave function optimizations

In this section, we will optimize a Jastrow factor for each state, and we will the re-optimize the CI coefficients in the presence of the Jastrow. The setup of the CHAMP files is similar to what we have done in section 4.

Optimization of the ground state

Create a new directory, and move the COH2_GS.trexio TREXIO file inside it. Go into this directory, and prepare the files for running CHAMP:

mkdir ChampGS
mv COH2_GS.trexio ChampGS
cd ChampGS
python3 /project/project_465000321/champ/tools/trex_tools/trex2champ.py \
                        --trex          "COH2_GS.trexio" \
                        --motype        "Canonical" \
                        --backend       "HDF5" \
                        --basis_prefix  "BFD-aug-cc-pVDZ" \
                        --lcao \
                        --geom \
                        --basis \
                        --ecp \
                        --sym \
                        --det

COH2 has three different atom types, so the Jastrow factor file will be slightly different from the file for water with one extra line for $a$ parameters. You can start by creating a file called jastrow.start:

jastrow_parameter   1
  5  5  0           norda,nordb,nordc
   0.60000000   0.00000000     scalek,a21
   0.00000000   0.00000000  0. 0. 0. 0. (a(iparmj),iparmj=1,nparma) ! e-n C
   0.00000000   0.00000000  0. 0. 0. 0. (a(iparmj),iparmj=1,nparma) ! e-n O
   0.00000000   0.00000000  0. 0. 0. 0. (a(iparmj),iparmj=1,nparma) ! e-n H
   0.50000000   1.00000000  0. 0. 0. 0. (b(iparmj),iparmj=1,nparmb)
 (c(iparmj),iparmj=1,nparmc) ! e-e-n C
 (c(iparmj),iparmj=1,nparmc) ! e-e-n O
 (c(iparmj),iparmj=1,nparmc) ! e-e-n H
end

Similarly, the file jastrow.der is slightly different:

jasderiv
4 4 4  5  0 0 0  0 0 0 nparma,nparmb,nparmc,nparmf
3 4 5 6   (iwjasa(iparm),iparm=1,nparma)
3 4 5 6   (iwjasa(iparm),iparm=1,nparma)
3 4 5 6   (iwjasa(iparm),iparm=1,nparma)
2 3 4 5 6 (iwjasb(iparm),iparm=1,nparmb)
3   5   7 8 9   11   13 14 15 16 17 18   20 21   23 (c(iparmj),iparmj=1,nparmc)
3   5   7 8 9   11   13 14 15 16 17 18   20 21   23 (c(iparmj),iparmj=1,nparmc)
3   5   7 8 9   11   13 14 15 16 17 18   20 21   23 (c(iparmj),iparmj=1,nparmc)
end

Start by optimizing the Jastrow factor and perform a “quick” optimization. The following champ input file (vmc_quick.inp) contains the parameters for such a “quick” optimization.

%module optwf
    ioptwf        1
    ioptci        0
    ioptjas       1
    ioptorb       0
    method        'sr_n'

    ncore         0
    nextorb       600
    nblk_max      1000

    nopt_iter     20
    sr_tau        0.05
    sr_eps        0.01
    sr_adiag      0.01
%endmodule


%module blocking_vmc
    vmc_nstep     20
    vmc_nblk      20
    vmc_nblkeq    1
    vmc_nconf_new 0
%endmodule

Move the jastrow_optimal.1.iter20 file to jastrow_optimal.rough_GS and load this optimized Jastrow factor. You can now optimize also the CI coefficients together with the Jastrow factor by setting:

ioptci        1

Use some more Monte Carlo steps to perform a more strict optimization. Use nopt_iter 10.

%module blocking_vmc
    vmc_nstep     20
    vmc_nblk      100
    vmc_nblkeq    1
    vmc_nconf_new 0
%endmodule

In your directory, you will now have jastrow_optimal.1.iterX and det_optimal.1.iterX files.

Set up a DMC calculation where you use the optimal Jastrow and CI coefficients. Adjust the etrial to be a bit below the VMC energy. Recall that you will have to generate the mc_configs file.

Optimization of the excited state

Create a new directory, and copy the COH2_ES.trexio TREXIO file inside it. Apply the same procedure as for the ground state.

Repeat what you have done for the ground state. Start to perform a quick optimization of the Jastrow factor but do not start from zero’s: start from the Jastrow factor you have for the ground state, namely, jastrow_optimal.rough_GS.

Do all step until when you obtain the DMC energy.

Compute the VMC and DMC excitation energies. Recall that if your energies are \[ E\rm GS+δ E\rm GS \text{ and } E\rm ES+δ E\rm ES, \] where $δ E$ is the statistical error, the error on $Δ E= E\rm ES-E\rm GS$ is given by \[ \sqrt{δ E\text{GS}^2+δ E\text{ES}^2}. \]