Real time approach to linear response: Difference between revisions
No edit summary |
No edit summary |
||
Line 5: | Line 5: | ||
== | ==DFT calculations== | ||
In this example, we will consider a single later of hexagonal boron nitride (hBN). The first input file is a self-consistent(SCF) calculation that is used to generate the density of the system. The second input file is a non-self consistent(NSCF) calculation to diagonalize the KS Hamiltonian, which depends on the density of the first run, on for a given number of bands and k-points. Notice that parameters in the NSCF calculation determine the number of k-points and the maximum number of bands that can be used in Lumen. Run this calculation with the command: | In this example, we will consider a single later of hexagonal boron nitride (hBN). The first input file is a self-consistent(SCF) calculation that is used to generate the density of the system. The second input file is a non-self consistent(NSCF) calculation to diagonalize the KS Hamiltonian, which depends on the density of the first run, on for a given number of bands and k-points. Notice that parameters in the NSCF calculation determine the number of k-points and the maximum number of bands that can be used in Lumen. Run this calculation with the command: | ||
Line 15: | Line 15: | ||
== | ==Import the wave-functions== | ||
If you used QuantumEspresso go in the folder <code>hBN_2D.save</code>. Then import the wave-function with the command | If you used QuantumEspresso go in the folder <code>hBN_2D.save</code>. Then import the wave-function with the command | ||
Line 25: | Line 25: | ||
== | ==Setup== | ||
Generate the setup input file with the command <code>yambo_nl -i -V RL -F setup.in</code>, then run yambo_nl -F setup.in. You can reduce the number of G-vectors in the setup in such a way to speed up calculations. I advise reducing G-vector to 1000 (about 50% of the initial ones). | Generate the setup input file with the command <code>yambo_nl -i -V RL -F setup.in</code>, then run yambo_nl -F setup.in. You can reduce the number of G-vectors in the setup in such a way to speed up calculations. I advise reducing G-vector to 1000 (about 50% of the initial ones). | ||
== | ==Reduce symmetries== | ||
Since in real-time simulation we introduce a finite electric field in the Hamiltonian, the number of the symmetries of the original system is reduced due to the presence of this field. Using the tool <code>ypp -y</code> to generate the input file: | Since in real-time simulation we introduce a finite electric field in the Hamiltonian, the number of the symmetries of the original system is reduced due to the presence of this field. Using the tool <code>ypp -y</code> to generate the input file: | ||
Line 48: | Line 48: | ||
== | ==Setup again== | ||
Go in the <code>FixSymm</code> directory and run the setup again <code>yambo_nl -F ../setup.in</code>. Now everything is ready for the real-time simulations! | Go in the <code>FixSymm</code> directory and run the setup again <code>yambo_nl -F ../setup.in</code>. Now everything is ready for the real-time simulations! | ||
== | ==Real-time dynamics== | ||
In order to calculate linear-response in real-time, we will perturb the system with a delta function in time external field. Use the command <code>yambo_nl -u -F input_lr.in</code> to generate the input: | In order to calculate linear-response in real-time, we will perturb the system with a delta function in time external field. Use the command <code>yambo_nl -u -F input_lr.in</code> to generate the input: | ||
Line 89: | Line 89: | ||
== | ==Results Analysis== | ||
Now we can use ypp_nl -u to analyze the results: | Now we can use ypp_nl -u to analyze the results: |
Revision as of 10:56, 10 January 2020
Linear response in real-time
Notice that for the real-time response using the Time-Dependent Schroedinger Equation(TDSE) you need to compile yambo_nl
and ypp_nl
in double precision using the flag --enable-dp
in the configure
. If you have problems in the compilation please have a look to compiling yambo.
The tutorial on the linear response from real-time Schödinger equation is divided into 8 steps:
DFT calculations
In this example, we will consider a single later of hexagonal boron nitride (hBN). The first input file is a self-consistent(SCF) calculation that is used to generate the density of the system. The second input file is a non-self consistent(NSCF) calculation to diagonalize the KS Hamiltonian, which depends on the density of the first run, on for a given number of bands and k-points. Notice that parameters in the NSCF calculation determine the number of k-points and the maximum number of bands that can be used in Lumen. Run this calculation with the command:
pw.x -inp hBN_2D_scf.in > output_scf pw.x -inp hBN_2D_nscf.nscf.in > output_nscf
Notice that in the NSCF file of QuantumEspresso we use the flag force_symmorphic=.true.
to exclude the non-symmorphic symmetries that are not supported by Yambo.
Import the wave-functions
If you used QuantumEspresso go in the folder hBN_2D.save
. Then import the wave-function with the command
for QuantumEspresso:
p2y -F data-file.xml
Setup
Generate the setup input file with the command yambo_nl -i -V RL -F setup.in
, then run yambo_nl -F setup.in. You can reduce the number of G-vectors in the setup in such a way to speed up calculations. I advise reducing G-vector to 1000 (about 50% of the initial ones).
Reduce symmetries
Since in real-time simulation we introduce a finite electric field in the Hamiltonian, the number of the symmetries of the original system is reduced due to the presence of this field. Using the tool ypp -y
to generate the input file:
fixsyms # [R] Reduce Symmetries % Efield1 0.00 | 1.00 | 0.00 | # First external Electric Field % % Efield2 0.00 | 0.00 | 0.00 | # Additional external Electric Field % #RmAllSymm # Remove all symmetries RmTimeRev # Remove Time Reversal
Set the external field in the y-direction and uncomment the Time Reversal flag, as shown in red above. Run ypp
and it will create a new folder called FixSymm
with the reduced symmetries wave-functions.
Setup again
Go in the FixSymm
directory and run the setup again yambo_nl -F ../setup.in
. Now everything is ready for the real-time simulations!
Real-time dynamics
In order to calculate linear-response in real-time, we will perturb the system with a delta function in time external field. Use the command yambo_nl -u -F input_lr.in
to generate the input:
nlinear # [R NL] Non-linear optics NL_Threads= 1 # [OPENMP/NL] Number of threads for nl-optics % NLBands 3 | 6 | # [NL] Bands % NLstep= 0.0100 fs # [NL] Real Time step length NLtime=55.000000 fs # [NL] Simulation Time NLverbosity= "high" # [NL] Verbosity level (low | high) NLintegrator= "INVINT" # [NL] Integrator ("EULEREXP/RK4/RK2EXP/HEUN/INVINT/CRANKNIC") NLCorrelation= "IPA" # [NL] Correlation ("IPA/HARTREE/TDDFT/LRC/JGM/SEX/HF") NLLrcAlpha= 0.000000 # [NL] Long Range Correction % NLEnRange 0.200000 | 8.000000 | eV # [NL] Energy range % NLEnSteps= 1 # [NL] Energy steps NLDamping= 0.000000 eV # [NL] Damping % ExtF_Dir 0.000000 | 1.000000 | 0.000000 | # [NL ExtF] Versor % ExtF_kind= "DELTA" # [NL ExtF] Kind(SIN|SOFTSIN|RES|ANTIRES|GAUSS|DELTA|QSSIN)
The standard input of Lumen is thought for the non-linear response so we have to change some parameters in order to calculate the linear response. Set the field direction along y, the field type to DELTA
, the length of the simulation to 55 fs, number of bands from 3 to 6 dephasing to zero and the number of energy steps to one, as shown above in red.
We set the verbosity to "high" in such a way to print real-time output files.
We set the differential equation integrator to INVINT
that is faster but less accurate than the default (see PRB 88, 235113(R)) . This integrator is ok in case of independent partcicles but I advise you to use CRANKNIC
integrator when correlation effects are present. Now run yambo_nl -F input_lr.in
The code will produce different files: o.polarization_F1
that contains the polarization, o.external_potential_F1 the external field we used, and finally r_optics_nloptics a report with all information about the simulation. If you plot the third column of o.polarization_F1
versus the first one (time-variable) you will get the time-dependent polarization along the y-direction:
Results Analysis
Now we can use ypp_nl -u to analyze the results:
nonlinear # [R] NonLinear Optics Post-Processing Xorder= 1 # Max order of the response functions % TimeRange -1.000000 |-1.000000 | fs # Time-window where processing is done % ETStpsRt= 200 # Total Energy steps % EnRngeRt 0.00000 | 10.00000 | eV # Energy range % DampMode= "LORENTZIAN" # Damping type ( NONE | LORENTZIAN | GAUSSIAN ) DampFactor= 0.10000 eV # Damping parameter
where we set a Lorentzian smearing corresponding to 0.1 eV. Notice that due to the finite time of our simulation smearing is always necessary to Fourier transform the result. Then we run ypp_nl
and obtain the following files: the dielectric constant along with the field direction o.YPP-eps_along_E, the EELS along with the same direction o.YPP-eels_along_E, and the damped polarization o.YPP-damped_polarization.
Now we can plot the dielectric constant and compare it with the linear response:
The input for the linear response can be downloaded [[1]]. Notice that in a real-time simulation we obtain directly the
[math]\displaystyle{ \chi(\omega) = \frac{P(\omega)}{E(\omega)} }[/math]
that is realted to the dielectric constant throught the relation [math]\displaystyle{ \epsilon(\omega) = 1 + 4 \pi \chi(\omega) }[/math]