This is an old revision of the document!
In this exercise, we will learn how to optimise a MOLOPT basis set from molecular reference calculations using the OPTIMIZE_BASIS module which has been implemented in the CP2K code.
The relevant files can be downloaded from here.
Copy the file to your Linux machine and uncompress it by:
tar xzvf basis_set_opt.tar.gz
And then enter the directory which contains the input file (optbas.inp) for basis set optimisation:
cd basis_set_opt/dzvp
The main input file for basis set optimisation (OPTIMIZE_BASIS) looks like this:
&GLOBAL
PROJECT optbas
PROGRAM_NAME OPTIMIZE_BASIS
PRINT_LEVEL HIGH
&END GLOBAL
&OPTIMIZE_BASIS
BASIS_TEMPLATE_FILE BASIS_SET_TEMPLATE
BASIS_WORK_FILE WORK_BASIS_STRUCTURE
BASIS_OUTPUT_FILE Na_FIT_temp
WRITE_FREQUENCY 10
&OPTIMIZATION
MAX_FUN 50000
&END
&TRAINING_FILES
DIRECTORY ../na3n
INPUT_FILE_NAME na3n.inp
&END
&TRAINING_FILES
DIRECTORY ../na2o
INPUT_FILE_NAME na2o.inp
&END
&TRAINING_FILES
DIRECTORY ../nacl
INPUT_FILE_NAME nacl.inp
&END
&TRAINING_FILES
DIRECTORY ../naf
INPUT_FILE_NAME naf.inp
&END
&TRAINING_FILES
DIRECTORY ../nah
INPUT_FILE_NAME nah.inp
&END
&FIT_KIND Na
BASIS_SET DZVP
INITIAL_DEGREES_OF_FREEDOM COEFFICIENTS
&END FIT_KIND
&END OPTIMIZE_BASIS
In this exercise, we want to add an additional set of d functions to the current 'DZVP-MOLOPT-SR-GTH' basis set for Na (with only s and p basis functions):
Na DZVP-MOLOPT-SR-GTH DZVP-MOLOPT-SR-GTH-q9
1
2 0 1 7 3 2
23.518800761960 0.037798268053 0.005040470618 0.037779070657 -0.041235150854 -0.005410838671
11.135656103275 0.180415272016 0.031210048356 -0.119614429319 -0.102704065658 -0.017609338317
4.647813820246 -0.084235489885 -0.021214584887 0.224302495702 -0.276507156374 -0.043803008653
1.866708259982 -0.502007239468 -0.088006426680 -0.183779813212 -0.405087985600 -0.067844235623
0.734683697196 -0.487454712994 -0.241562643580 1.641649867502 -0.345669762598 -0.085057974012
0.275672995860 -0.088909855778 0.046069503612 -2.281564821968 -0.128294724774 0.159527770719
0.049895108245 -0.000245624853 1.008694292400 0.801660990981 -0.002074313963 0.982149424568
In the 'BASIS_SET_TEMPLATE' file, I have provided the following content as an initial guess for the new basis set:
Na DZVP
1
2 0 2 7 3 2 1
23.518800761960 0.037798268053 0.005040470618 0.037779070657 -0.041235150854 -0.005410838671 0.5
11.135656103275 0.180415272016 0.031210048356 -0.119614429319 -0.102704065658 -0.017609338317 0.5
4.647813820246 -0.084235489885 -0.021214584887 0.224302495702 -0.276507156374 -0.043803008653 0.5
1.866708259982 -0.502007239468 -0.088006426680 -0.183779813212 -0.405087985600 -0.067844235623 0.0
0.734683697196 -0.487454712994 -0.241562643580 1.641649867502 -0.345669762598 -0.085057974012 0.0
0.275672995860 -0.088909855778 0.046069503612 -2.281564821968 -0.128294724774 0.159527770719 0.0
0.049895108245 -0.000245624853 1.008694292400 0.801660990981 -0.002074313963 0.982149424568 0.0
The last column corresponds to a set of d functions with unoptimised contraction coefficients. I have also changed the second line from
2 0 1 7 3 2
to
2 0 2 7 3 2 1
It means now we have s, p as well as d basis functions in the new basis set.
In this excecise, we would like to optimise the contraction coefficients only, so I have set:
INITIAL_DEGREES_OF_FREEDOM COEFFICIENTS
in the main input file, see &FIT_KIND subsection.
The basis set optimisation calculation can be started with the following command (or using the parallel executable cp2k.popt):
cp2k.sopt optbas.inp > optbas.out.DZVP
The optimised basis set will be in the file 'Na_FIT_temp', see 'BASIS_OUTPUT_FILE' keyword in the main input file 'optbas.inp'.
