MALBECC / lio

Linear implementation of DFT calculations (CPU and GPU)
GNU General Public License v2.0
26 stars 18 forks source link

How to use the code and analyze the UV/VIS spectrum ? #359

Open c00jsw00 opened 4 years ago

c00jsw00 commented 4 years ago

How to use the code and analyze the UV/VIS spectrum ?

fedepedron commented 4 years ago

Hello Phil! Please refer to our wiki for LIO installation. You'll want to have a CUDA-enabled gpu in order to take advantage of our full parallelization.

Once installed, obtaining UV/VIS spectra should be fairly easy to do with RT-TDDFT. To run lio, you should execute:

source PATH/TO/LIO/liohome.sh
liosolo -i inputfile -c coordinates.xyz

Where inputfile is a file containing LIO options, and coordinates.xyz is an XYZ file with atomic coordinates. Both can be named in any way you like, please refer to the tests in /test/LIO_test for sample runs.

In order to get the spectrum of a molecule, you will need to run RT-TDDFT calculations (timedep = 1) adding a small electric perturbation in the X, Y and Z axis (i.e. you need three runs, one for each). You can achieve this by adding the following options to the &lio namelist:

     timedep = 1
     field = t
     Fx = 0.05
     Fy = 0.00
     Fz = 0.00

You should exchange the values of Fx-Fy-Fz accodingly for each run. How many steps to run (ntdstep) may depend on your system, usually 100000 steps is more than enough. A word of warning though, the output you need is in a file called "dipole_moment_td", which might get overwritten if you run all XYZ perturbations in the same folder.

After getting all three dipole_moment_td files, you should analyze them with the tdanalyze tool (included in the regular LIO installation) for all three of them by executing:

tdanalyze dipolefile lambda_min lambda_max damp_factor x/y/z

The dipole_file is the output you obtained previously, lambda_min/_max refer to the bounds of the spectra you want to get (in nm). damp_factor smoothes the spectrum obtained, but leave it to 0 unless you know what you're doing. Finally x/y/z should be a single-digit number indicating the direction of the field (1 for X, 2 for Y, 3 for Z). For example, in the case of a perturbation in the X axis:

tdanalyze dipole_moment_td 100.0 1000.0 0.0 1

And to get the full spectrum, you finally average the spectrums in the X, Y, and Z directions.