diff --git a/docs/_archives/recipes/electronicdynamics/driving/dftb_in.hsd b/docs/_archives/recipes/electronicdynamics/driving/dftb_in.hsd index 5fc92546..4e8930d4 100644 --- a/docs/_archives/recipes/electronicdynamics/driving/dftb_in.hsd +++ b/docs/_archives/recipes/electronicdynamics/driving/dftb_in.hsd @@ -1,39 +1,37 @@ InputVersion = 20.1 Geometry = GenFormat { - <<< "coords.gen" + <<< "coords.gen" } -Driver = {} - Hamiltonian = DFTB { - SCC = Yes - SCCTolerance = 1.0e-7 - SlaterKosterFiles = Type2FileNames { - Prefix = "../../slakos/download/3ob/3ob-3-1/" - Separator = "-" - Suffix = ".skf" - } - MaxAngularMomentum = { - Mg = "p" - C = "p" - N = "p" - O = "p" - H = "s" - } - Filling = Fermi { - Temperature [K] = 300 - } + Scc = Yes + SccTolerance = 1.0e-7 + SlaterKosterFiles = Type2FileNames { + Prefix = "../../slakos/download/3ob/3ob-3-1/" + Separator = "-" + Suffix = ".skf" + } + MaxAngularMomentum { + Mg = "p" + C = "p" + N = "p" + O = "p" + H = "s" + } + Filling = Fermi { + Temperature [K] = 300 + } } -ElectronDynamics = { - Steps = 60000 - TimeStep [au] = 0.2 - Perturbation = Laser { - PolarizationDirection = -0.08808129 0.99564018 -0.03069709 - LaserEnergy [eV] = 1.94944 - } - FieldStrength [V/A] = 0.0001 - Populations = Yes - WriteFrequency = 100 +ElectronDynamics { + Steps = 60000 + TimeStep [au] = 0.2 + Perturbation = Laser { + PolarizationDirection = -0.08808129 0.99564018 -0.03069709 + LaserEnergy [eV] = 1.94944 + } + FieldStrength [V/A] = 0.0001 + Populations = Yes + WriteFrequency = 100 } diff --git a/docs/_archives/recipes/electronicdynamics/ehrenfest/dftb_in.hsd b/docs/_archives/recipes/electronicdynamics/ehrenfest/dftb_in.hsd index 81b47344..b8010977 100644 --- a/docs/_archives/recipes/electronicdynamics/ehrenfest/dftb_in.hsd +++ b/docs/_archives/recipes/electronicdynamics/ehrenfest/dftb_in.hsd @@ -1,38 +1,38 @@ InputVersion = 20.1 Geometry = GenFormat { - <<< "coords.gen" + <<< "coords.gen" } Hamiltonian = DFTB { - SCC = Yes - SCCTolerance = 1.0E-9 - MaxAngularMomentum = { - C = "p" - H = "s" - } - Filling = Fermi { - Temperature [Kelvin] = 30 - } - SlaterKosterFiles = Type2FileNames { - Prefix = "../../slakos/download/3ob/3ob-3-1/" - Separator = "-" - Suffix = ".skf" - } + Scc = Yes + SccTolerance = 1.0E-9 + MaxAngularMomentum { + C = "p" + H = "s" + } + Filling = Fermi { + Temperature [Kelvin] = 30 + } + SlaterKosterFiles = Type2FileNames { + Prefix = "../../slakos/download/3ob/3ob-3-1/" + Separator = "-" + Suffix = ".skf" + } } -ElectronDynamics = { - Steps = 100000 - TimeStep [au] = 0.1 - Perturbation = Laser { - PolarizationDirection = 0.00000001 0.61419463 -0.78915459 - LaserEnergy [eV] = 6.834 - } - EnvelopeShape = Sin2 { - Time1 [fs] = 10.0 - } - FieldStrength [V/A] = 0.10 - IonDynamics = Yes - InitialTemperature [K] = 0.0 - Populations = Yes +ElectronDynamics { + Steps = 100000 + TimeStep [au] = 0.1 + Perturbation = Laser { + PolarizationDirection = 0.00000001 0.61419463 -0.78915459 + LaserEnergy [eV] = 6.834 + } + EnvelopeShape = Sin2 { + Time1 [fs] = 10.0 + } + FieldStrength [V/A] = 0.10 + IonDynamics = Yes + InitialTemperature [K] = 0.0 + Populations = Yes } diff --git a/docs/_archives/recipes/electronicdynamics/spectrum/dftb_in.hsd b/docs/_archives/recipes/electronicdynamics/spectrum/dftb_in.hsd index 2851ce86..302a35af 100644 --- a/docs/_archives/recipes/electronicdynamics/spectrum/dftb_in.hsd +++ b/docs/_archives/recipes/electronicdynamics/spectrum/dftb_in.hsd @@ -1,37 +1,36 @@ InputVersion = 20.1 Geometry = GenFormat { - <<< "coords.gen" + <<< "coords.gen" } -Driver = {} +Driver {} Hamiltonian = DFTB { - SCC = Yes - SCCTolerance = 1.0e-7 - SlaterKosterFiles = Type2FileNames { - Prefix = "../../slakos/download/3ob/3ob-3-1/" - Separator = "-" - Suffix = ".skf" - } - MaxAngularMomentum = { - Mg = "p" - C = "p" - N = "p" - O = "p" - H = "s" - } - Charge = 0.0 - Filling = Fermi { - Temperature [K] = 300 - } + Scc = Yes + SccTolerance = 1.0e-7 + SlaterKosterFiles = Type2FileNames { + Prefix = "../../slakos/download/3ob/3ob-3-1/" + Separator = "-" + Suffix = ".skf" + } + MaxAngularMomentum { + Mg = "p" + C = "p" + N = "p" + O = "p" + H = "s" + } + Filling = Fermi { + Temperature [K] = 300 + } } -ElectronDynamics = { - Steps = 20000 - TimeStep [au] = 0.2 - Perturbation = Kick { - PolarizationDirection = all - } - FieldStrength [V/A] = 0.001 +ElectronDynamics { + Steps = 20000 + TimeStep [au] = 0.2 + Perturbation = Kick { + PolarizationDirection = "all" + } + FieldStrength [V/A] = 0.001 } diff --git a/docs/_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/01_carbazole/01_spectrum/coords.gen b/docs/_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/01_carbazole/01_spectrum/coords.gen new file mode 100644 index 00000000..ee4238d8 --- /dev/null +++ b/docs/_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/01_carbazole/01_spectrum/coords.gen @@ -0,0 +1,24 @@ +22 C +C H N + 1 1 -5.1728644000E-01 -7.2571119000E-01 5.5846500000E-03 + 2 1 8.5078177000E-01 -1.1301429800E+00 2.0378600000E-03 + 3 1 1.2261304100E+00 -2.4865873900E+00 -1.5372900000E-03 + 4 1 1.9994598000E-01 -3.4347336900E+00 -4.3233500000E-03 + 5 2 2.2839472400E+00 -2.7882631200E+00 -3.3389800000E-03 + 6 1 -1.1562943300E+00 -3.0498598500E+00 -2.9476600000E-03 + 7 2 4.5464746000E-01 -4.5055579500E+00 -8.7991900000E-03 + 8 1 -1.5299440000E+00 -1.7037797500E+00 2.9104100000E-03 + 9 2 -1.9330937600E+00 -3.8293745100E+00 -7.3501000000E-03 + 10 2 -2.5921016000E+00 -1.4158925700E+00 3.5784700000E-03 + 11 1 -5.1730828000E-01 7.2567935000E-01 5.8213800000E-03 + 12 1 8.5080047000E-01 1.1301031400E+00 0.0000000000E+00 + 13 3 1.6513735600E+00 -1.0210000000E-05 0.0000000000E+00 + 14 1 -1.5297530300E+00 1.7038648900E+00 8.4112200000E-03 + 15 1 -1.1559873900E+00 3.0499477100E+00 1.8125700000E-03 + 16 2 -2.5920072900E+00 1.4162563500E+00 1.4849170000E-02 + 17 1 2.0031694000E-01 3.4347032300E+00 -7.4452800000E-03 + 18 2 -1.9327718800E+00 3.8294924100E+00 2.8904500000E-03 + 19 1 1.2263781800E+00 2.4864970000E+00 -7.6315500000E-03 + 20 2 2.2841771200E+00 2.7882250200E+00 -1.4735950000E-02 + 21 2 4.5487270000E-01 4.5055017500E+00 -1.5258710000E-02 + 22 2 2.6797365300E+00 -1.0210000000E-05 -4.1508500000E-03 diff --git a/docs/_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/01_carbazole/01_spectrum/dftb_in.hsd_spec b/docs/_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/01_carbazole/01_spectrum/dftb_in.hsd_spec new file mode 100644 index 00000000..eafba6e4 --- /dev/null +++ b/docs/_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/01_carbazole/01_spectrum/dftb_in.hsd_spec @@ -0,0 +1,29 @@ +InputVersion = 21.2 + +Geometry = GenFormat { + <<< "coords.gen" +} + +Hamiltonian = DFTB { + Scc = Yes + SccTolerance = 1e-7 + MaxAngularMomentum { + C = "p" + H = "s" + N = "p" + } + SlaterKosterFiles = Type2FileNames { + Prefix = "../../../../../slakos/download/mio/mio-1-1/" + Separator = "-" + Suffix = ".skf" + } +} + +ElectronDynamics { + Steps = # define the time window + TimeStep [au] = # resolution of the spectrum + Perturbation = Kick { # must be a kick (Dirac delta) + PolarizationDirection = # desired direction/s + } + FieldStrength [V/A] = # field strength of the perturbation +} diff --git a/docs/_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/01_carbazole/02_laser/coords.gen b/docs/_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/01_carbazole/02_laser/coords.gen new file mode 100644 index 00000000..ee4238d8 --- /dev/null +++ b/docs/_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/01_carbazole/02_laser/coords.gen @@ -0,0 +1,24 @@ +22 C +C H N + 1 1 -5.1728644000E-01 -7.2571119000E-01 5.5846500000E-03 + 2 1 8.5078177000E-01 -1.1301429800E+00 2.0378600000E-03 + 3 1 1.2261304100E+00 -2.4865873900E+00 -1.5372900000E-03 + 4 1 1.9994598000E-01 -3.4347336900E+00 -4.3233500000E-03 + 5 2 2.2839472400E+00 -2.7882631200E+00 -3.3389800000E-03 + 6 1 -1.1562943300E+00 -3.0498598500E+00 -2.9476600000E-03 + 7 2 4.5464746000E-01 -4.5055579500E+00 -8.7991900000E-03 + 8 1 -1.5299440000E+00 -1.7037797500E+00 2.9104100000E-03 + 9 2 -1.9330937600E+00 -3.8293745100E+00 -7.3501000000E-03 + 10 2 -2.5921016000E+00 -1.4158925700E+00 3.5784700000E-03 + 11 1 -5.1730828000E-01 7.2567935000E-01 5.8213800000E-03 + 12 1 8.5080047000E-01 1.1301031400E+00 0.0000000000E+00 + 13 3 1.6513735600E+00 -1.0210000000E-05 0.0000000000E+00 + 14 1 -1.5297530300E+00 1.7038648900E+00 8.4112200000E-03 + 15 1 -1.1559873900E+00 3.0499477100E+00 1.8125700000E-03 + 16 2 -2.5920072900E+00 1.4162563500E+00 1.4849170000E-02 + 17 1 2.0031694000E-01 3.4347032300E+00 -7.4452800000E-03 + 18 2 -1.9327718800E+00 3.8294924100E+00 2.8904500000E-03 + 19 1 1.2263781800E+00 2.4864970000E+00 -7.6315500000E-03 + 20 2 2.2841771200E+00 2.7882250200E+00 -1.4735950000E-02 + 21 2 4.5487270000E-01 4.5055017500E+00 -1.5258710000E-02 + 22 2 2.6797365300E+00 -1.0210000000E-05 -4.1508500000E-03 diff --git a/docs/_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/01_carbazole/02_laser/dftb_in.hsd_laser b/docs/_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/01_carbazole/02_laser/dftb_in.hsd_laser new file mode 100644 index 00000000..dbacbfb9 --- /dev/null +++ b/docs/_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/01_carbazole/02_laser/dftb_in.hsd_laser @@ -0,0 +1,39 @@ +InputVersion = 21.2 + +Geometry = GenFormat { + <<< "coords.gen" +} + +Hamiltonian = DFTB { + Scc = Yes + SccTolerance = 1e-7 + MaxAngularMomentum { + C = "p" + H = "s" + N = "p" + } + SlaterKosterFiles = Type2FileNames { + Prefix = "../../../../slakos/download/mio-1-1/" + Separator = "-" + Suffix = ".skf" + } +} + +ElectronDynamics { + Steps = 10000 + TimeStep [au] = 0.2 + Perturbation = Laser { # Laser type perturbation + PolarizationDirection = # calculate with calc_timeprop_maxpoldir + LaserEnergy [eV] = # energy of interest + } + FieldStrength [V/A] = 0.001 + Populations = Yes # to write GS-MP projected populations during dynamic +} + +Options { + WriteDetailedXml = Yes # needed for waveplot +} + +Analysis { + WriteEigenvectors = Yes # needed for waveplot +} diff --git a/docs/_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/01_carbazole/02_laser/waveplot_in.hsd_ b/docs/_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/01_carbazole/02_laser/waveplot_in.hsd_ new file mode 100644 index 00000000..ce881875 --- /dev/null +++ b/docs/_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/01_carbazole/02_laser/waveplot_in.hsd_ @@ -0,0 +1,29 @@ +# General options + +Options { + RealComponent = Yes # Plot real component of the wavefunction + PlottedSpins = 1 -1 + PlottedLevels = ### Levels (Orbitals) to plot + PlottedRegion = OptimalCuboid {} # Region to plot + + NrOfPoints = 50 50 50 # Number of grid points in each direction + NrOfCachedGrids = -1 # Nr of cached grids (speeds up things) + Verbose = Yes # Wanna see a lot of messages? +} + +DetailedXml = "detailed.xml" # File containing the detailed xml output + # of DFTB+ +EigenvecBin = "eigenvec.bin" # File cointaining the binary eigenvecs + # Both files must be asked for the user in the + # input for DFTB+ calculation (they are not default + # printed) + + +# Definition of the basis +Basis { + Resolution = 0.01 + # Including mio-1-1.hsd. (If you use a set, which depends on other sets, + # the wfc.*.hsd files for each required set must be included in a similar + # way.) + <<+ "../../../../slakos/wfc/wfc.mio-1-1.hsd" ### Path for Wave function coeffiecients for waveplot +} diff --git a/docs/_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/02_PDI/coords.gen b/docs/_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/02_PDI/coords.gen new file mode 100644 index 00000000..6bb60f85 --- /dev/null +++ b/docs/_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/02_PDI/coords.gen @@ -0,0 +1,42 @@ +40 C +C H N O + 1 1 -2.8702011600E+00 0.0000000000E+00 0.0000000000E+00 + 2 1 -1.4362663100E+00 0.0000000000E+00 1.3000000000E-07 + 3 1 -3.5889101500E+00 -1.2350464400E+00 -2.3000000000E-07 + 4 1 -2.8813199700E+00 -2.4379174600E+00 -2.1000000000E-07 + 5 1 -1.4787678500E+00 -2.4440123700E+00 1.1000000000E-07 + 6 1 -7.3366388000E-01 -1.2519893100E+00 3.1000000000E-07 + 7 1 -3.5889101500E+00 1.2350464400E+00 0.0000000000E+00 + 8 1 -2.8813199600E+00 2.4379174600E+00 5.0000000000E-08 + 9 1 -1.4787678400E+00 2.4440123900E+00 0.0000000000E+00 + 10 1 -7.3366389000E-01 1.2519893100E+00 2.0000000000E-08 + 11 1 7.3366387000E-01 -1.2519893000E+00 5.5000000000E-07 + 12 1 1.4362663200E+00 1.0000000000E-08 2.6000000000E-07 + 13 1 7.3366387000E-01 1.2519893100E+00 -7.0000000000E-08 + 14 1 1.4787678400E+00 -2.4440123700E+00 9.5000000000E-07 + 15 1 2.8813199500E+00 -2.4379174700E+00 9.2000000000E-07 + 16 1 3.5889101400E+00 -1.2350464400E+00 5.1000000000E-07 + 17 1 2.8702011700E+00 2.0000000000E-08 2.3000000000E-07 + 18 1 3.5889101600E+00 1.2350464500E+00 -1.2000000000E-07 + 19 1 2.8813199600E+00 2.4379174700E+00 -5.4000000000E-07 + 20 1 1.4787678400E+00 2.4440123700E+00 -5.2000000000E-07 + 21 2 -3.4335673000E+00 -3.3896396100E+00 -4.6000000000E-07 + 22 2 -9.7502556000E-01 -3.4212878700E+00 1.4000000000E-07 + 23 2 -3.4335673300E+00 3.3896396100E+00 9.0000000000E-08 + 24 2 -9.7502557000E-01 3.4212879000E+00 -4.0000000000E-08 + 25 2 9.7502555000E-01 -3.4212878600E+00 1.2900000000E-06 + 26 2 3.4335673000E+00 -3.3896396100E+00 1.2100000000E-06 + 27 2 9.7502554000E-01 3.4212878700E+00 -8.9000000000E-07 + 28 2 3.4335672900E+00 3.3896396300E+00 -8.6000000000E-07 + 29 1 -5.0766344400E+00 -1.2425131600E+00 -6.6000000000E-07 + 30 1 -5.0766344500E+00 1.2425131500E+00 -4.0000000000E-08 + 31 1 5.0766344400E+00 -1.2425131700E+00 2.2000000000E-07 + 32 1 5.0766344600E+00 1.2425131600E+00 -6.0000000000E-08 + 33 3 -5.7159981400E+00 0.0000000000E+00 -4.1000000000E-07 + 34 3 5.7159981500E+00 -1.0000000000E-08 6.0000000000E-08 + 35 4 -5.7484785000E+00 -2.2718608200E+00 -1.2300000000E-06 + 36 4 -5.7484785300E+00 2.2718608200E+00 2.2000000000E-07 + 37 4 5.7484785100E+00 -2.2718608300E+00 1.1000000000E-07 + 38 4 5.7484785500E+00 2.2718607900E+00 -1.6000000000E-07 + 39 2 -6.7494873900E+00 0.0000000000E+00 -5.7000000000E-07 + 40 2 6.7494873800E+00 -4.0000000000E-08 -2.0000000000E-08 diff --git a/docs/_archives/recipes/electronicdynamics/tutorial/02_photoinduced_CT/01_aggregate_spec/coords.gen b/docs/_archives/recipes/electronicdynamics/tutorial/02_photoinduced_CT/01_aggregate_spec/coords.gen new file mode 100644 index 00000000..8cc5e96a --- /dev/null +++ b/docs/_archives/recipes/electronicdynamics/tutorial/02_photoinduced_CT/01_aggregate_spec/coords.gen @@ -0,0 +1,85 @@ +83 C +H C O N + 1 1 -7.5120000000E+00 -8.6200000000E-01 -6.3900000000E-01 + 2 1 -7.5140000000E+00 9.0200000000E-01 -5.6500000000E-01 + 3 2 -7.1380000000E+00 -2.0000000000E-03 -3.8000000000E-02 + 4 3 -5.7070000000E+00 -2.2740000000E+00 1.2000000000E-02 + 5 4 -5.6920000000E+00 1.0000000000E-03 -3.2000000000E-02 + 6 2 -5.0880000000E+00 -1.2620000000E+00 -2.0000000000E-03 + 7 3 -5.7050000000E+00 2.2760000000E+00 2.4000000000E-02 + 8 2 -5.0890000000E+00 1.2640000000E+00 4.0000000000E-03 + 9 2 -3.5790000000E+00 -1.2240000000E+00 -2.0000000000E-03 + 10 2 -2.8730000000E+00 -2.4250000000E+00 -1.0000000000E-03 + 11 1 -3.4320000000E+00 -3.3710000000E+00 -1.0000000000E-03 + 12 2 -3.5790000000E+00 1.2240000000E+00 3.0000000000E-03 + 13 2 -2.8570000000E+00 0.0000000000E+00 0.0000000000E+00 + 14 2 -1.4710000000E+00 -2.4370000000E+00 -1.0000000000E-03 + 15 2 -2.8730000000E+00 2.4250000000E+00 8.0000000000E-03 + 16 2 -1.4290000000E+00 0.0000000000E+00 0.0000000000E+00 + 17 1 -3.4320000000E+00 3.3710000000E+00 1.2000000000E-02 + 18 2 -7.3100000000E-01 -1.2480000000E+00 -1.0000000000E-03 + 19 1 -9.5900000000E-01 -3.4080000000E+00 -1.0000000000E-03 + 20 2 -1.4720000000E+00 2.4370000000E+00 7.0000000000E-03 + 21 2 -7.3100000000E-01 1.2480000000E+00 2.0000000000E-03 + 22 2 7.3100000000E-01 -1.2480000000E+00 0.0000000000E+00 + 23 1 7.3970000000E+00 -1.0140000000E+00 -1.8860000000E+00 + 24 2 1.4710000000E+00 -2.4370000000E+00 -2.0000000000E-03 + 25 1 7.3950000000E+00 7.5400000000E-01 -1.9960000000E+00 + 26 2 7.3100000000E-01 1.2480000000E+00 0.0000000000E+00 + 27 1 9.5900000000E-01 -3.4080000000E+00 -3.0000000000E-03 + 28 1 -9.6000000000E-01 3.4080000000E+00 9.0000000000E-03 + 29 2 1.4290000000E+00 0.0000000000E+00 0.0000000000E+00 + 30 2 2.8730000000E+00 -2.4250000000E+00 -2.0000000000E-03 + 31 2 1.4710000000E+00 2.4370000000E+00 -3.0000000000E-03 + 32 2 7.7620000000E+00 -9.5000000000E-02 -1.3830000000E+00 + 33 2 2.8570000000E+00 0.0000000000E+00 0.0000000000E+00 + 34 1 9.5900000000E-01 3.4080000000E+00 -4.0000000000E-03 + 35 2 3.5790000000E+00 -1.2240000000E+00 0.0000000000E+00 + 36 2 2.8730000000E+00 2.4250000000E+00 -5.0000000000E-03 + 37 2 9.2900000000E+00 -9.4000000000E-02 -1.3640000000E+00 + 38 2 3.5790000000E+00 1.2240000000E+00 -3.0000000000E-03 + 39 1 3.4320000000E+00 -3.3710000000E+00 -3.0000000000E-03 + 40 2 5.0880000000E+00 -1.2620000000E+00 -2.0000000000E-03 + 41 3 5.7070000000E+00 -2.2740000000E+00 -1.6000000000E-02 + 42 2 5.0890000000E+00 1.2640000000E+00 -6.0000000000E-03 + 43 1 3.4320000000E+00 3.3710000000E+00 -9.0000000000E-03 + 44 4 5.6920000000E+00 1.0000000000E-03 2.8000000000E-02 + 45 3 5.7050000000E+00 2.2760000000E+00 -2.6000000000E-02 + 46 2 7.1390000000E+00 -7.0000000000E-03 2.4000000000E-02 + 47 1 9.6570000000E+00 -9.4100000000E-01 -7.4600000000E-01 + 48 1 9.6560000000E+00 8.2600000000E-01 -8.5900000000E-01 + 49 1 7.5140000000E+00 -8.5700000000E-01 6.3700000000E-01 + 50 1 7.5200000000E+00 9.0500000000E-01 5.3400000000E-01 + 51 1 -7.4666400000E+00 -4.5350000000E-02 9.7936000000E-01 + 52 1 9.6345700000E+00 -1.5942000000E-01 -2.3748900000E+00 + 53 1 1.5081470000E+01 -8.2919100000E+00 -3.0163600000E+00 + 54 1 1.5717470000E+01 -5.8730100000E+00 -3.0153600000E+00 + 55 2 1.4302470000E+01 -7.5190100000E+00 -3.0193600000E+00 + 56 2 1.4661470000E+01 -6.1730100000E+00 -3.0173600000E+00 + 57 1 1.5720470000E+01 -3.1039100000E+00 -3.0123600000E+00 + 58 2 1.2951470000E+01 -7.9059100000E+00 -3.0253600000E+00 + 59 1 1.2701470000E+01 -8.9759100000E+00 -3.0293600000E+00 + 60 2 1.3643470000E+01 -5.2089100000E+00 -3.0193600000E+00 + 61 2 1.4665470000E+01 -2.8009100000E+00 -3.0133600000E+00 + 62 2 1.3644470000E+01 -3.7630100000E+00 -3.0173600000E+00 + 63 2 1.1925470000E+01 -6.9639100000E+00 -3.0253600000E+00 + 64 2 1.2270470000E+01 -5.5999100000E+00 -3.0193600000E+00 + 65 1 1.0874470000E+01 -7.2809100000E+00 -3.0313600000E+00 + 66 2 1.2273470000E+01 -3.3670100000E+00 -3.0163600000E+00 + 67 4 1.1479470000E+01 -4.4829100000E+00 -3.0303600000E+00 + 68 1 9.8134700000E+00 -5.4159100000E+00 -1.0313600000E+00 + 69 2 1.1931470000E+01 -2.0030100000E+00 -3.0183600000E+00 + 70 2 9.4504700000E+00 -4.5169100000E+00 -1.5473600000E+00 + 71 1 9.8154700000E+00 -3.6460100000E+00 -9.8736000000E-01 + 72 2 1.0059470000E+01 -4.4829100000E+00 -2.9733600000E+00 + 73 1 9.6774700000E+00 -5.3540100000E+00 -3.5323600000E+00 + 74 1 1.0881470000E+01 -1.6829100000E+00 -3.0233600000E+00 + 75 2 7.9344700000E+00 -4.5149100000E+00 -1.5243600000E+00 + 76 1 9.6784700000E+00 -3.5860100000E+00 -3.4893600000E+00 + 77 1 7.5764700000E+00 -5.3839100000E+00 -2.0933600000E+00 + 78 1 7.5784700000E+00 -3.6149100000E+00 -2.0473600000E+00 + 79 1 1.5091470000E+01 -6.8291000000E-01 -3.0063600000E+00 + 80 2 1.4309470000E+01 -1.4539100000E+00 -3.0113600000E+00 + 81 2 1.2959470000E+01 -1.0630100000E+00 -3.0163600000E+00 + 82 1 1.2712470000E+01 7.0900000000E-03 -3.0173600000E+00 + 83 1 7.5833600000E+00 -4.5407800000E+00 -5.1394000000E-01 diff --git a/docs/_archives/recipes/electronicdynamics/tutorial/02_photoinduced_CT/01_aggregate_spec/dftb_in.hsd_spec b/docs/_archives/recipes/electronicdynamics/tutorial/02_photoinduced_CT/01_aggregate_spec/dftb_in.hsd_spec new file mode 100644 index 00000000..9b88f2a8 --- /dev/null +++ b/docs/_archives/recipes/electronicdynamics/tutorial/02_photoinduced_CT/01_aggregate_spec/dftb_in.hsd_spec @@ -0,0 +1,30 @@ +InputVersion = 21.2 + +Geometry = GenFormat { + <<< "coords.gen" +} + +Hamiltonian = DFTB { + Scc = Yes + SccTolerance = 1e-7 + MaxAngularMomentum { + C = "p" + H = "s" + N = "p" + O = "p" + } + SlaterKosterFiles = Type2FileNames { + Prefix = "../../../slakos/download/mio-1-1/" + Separator = "-" + Suffix = ".skf" + } +} + +ElectronDynamics { + Steps = 10000 # define the time window + TimeStep [au] = 0.2 # resolution of the spectrum + Perturbation = Kick { # must be a kick (Dirac delta) + PolarizationDirection = "all" # desired direction/s + } + FieldStrength [V/A] = 0.001 # field strength of the perturbation +} diff --git a/docs/_archives/recipes/electronicdynamics/tutorial/02_photoinduced_CT/02_aggregate_CT/calc_timeprop_charges.py b/docs/_archives/recipes/electronicdynamics/tutorial/02_photoinduced_CT/02_aggregate_CT/calc_timeprop_charges.py new file mode 100755 index 00000000..bc2f0266 --- /dev/null +++ b/docs/_archives/recipes/electronicdynamics/tutorial/02_photoinduced_CT/02_aggregate_CT/calc_timeprop_charges.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python3 + +''' +Charge per fragment of DFTB+ TD data +''' + +import sys +import optparse +import numpy as np + +USAGE = """usage: %prog -l ii:jj,ll:mm + +Reads output from TD calculation with external laser and produces net charges per fragment +(subtracting value at time = 0). + +Needs qsvst.dat file present in working directory.""" + +def main(): + parser = optparse.OptionParser(usage=USAGE) + parser.add_option("-l", "--list", type='str', action="store", dest="at_list", + help="list of atom indices starting from 1 (initial and final index separated by colons, ranges separated by commas)") + + (options, args) = parser.parse_args() + + print(options.at_list) + list_ranges = options.at_list.split(',') + nfrag = len(list_ranges) #number of fragments + idx_ini = np.zeros(nfrag, dtype=int) + idx_end = np.zeros(nfrag, dtype=int) + for ii, ir in enumerate(list_ranges): + ini_end = ir.split(':') + idx_ini[ii] = int(ini_end[0]) - 1 # because first index is 0 + idx_end[ii] = int(ini_end[1]) - 1 + + qsdata = np.genfromtxt('qsvst.dat') + time = qsdata[:,0] + natoms = qsdata.shape[1] - 2 + print ('Number of atoms = {}'.format(natoms)) + if any(idx_ini > natoms) or any(idx_end) > natoms+1: + print('List ranges above total number of atoms = {}'.format(natoms)) + sys.exit() + + for ii in range(nfrag): #sum of the atomic charges inside each fragment + print ('Fragment {}: from atom {} till {}'.format(ii, idx_ini[ii]+1, idx_end[ii]+1)) + q_fragment = qsdata[:,2+idx_ini[ii]:2+idx_end[ii]+1].sum(axis=1) + np.savetxt("charge_frag%s.dat"%(ii+1), np.column_stack((time, q_fragment-q_fragment[0]))) + +if __name__ == "__main__": + main() + diff --git a/docs/_archives/recipes/electronicdynamics/tutorial/02_photoinduced_CT/02_aggregate_CT/coords.gen b/docs/_archives/recipes/electronicdynamics/tutorial/02_photoinduced_CT/02_aggregate_CT/coords.gen new file mode 100644 index 00000000..8cc5e96a --- /dev/null +++ b/docs/_archives/recipes/electronicdynamics/tutorial/02_photoinduced_CT/02_aggregate_CT/coords.gen @@ -0,0 +1,85 @@ +83 C +H C O N + 1 1 -7.5120000000E+00 -8.6200000000E-01 -6.3900000000E-01 + 2 1 -7.5140000000E+00 9.0200000000E-01 -5.6500000000E-01 + 3 2 -7.1380000000E+00 -2.0000000000E-03 -3.8000000000E-02 + 4 3 -5.7070000000E+00 -2.2740000000E+00 1.2000000000E-02 + 5 4 -5.6920000000E+00 1.0000000000E-03 -3.2000000000E-02 + 6 2 -5.0880000000E+00 -1.2620000000E+00 -2.0000000000E-03 + 7 3 -5.7050000000E+00 2.2760000000E+00 2.4000000000E-02 + 8 2 -5.0890000000E+00 1.2640000000E+00 4.0000000000E-03 + 9 2 -3.5790000000E+00 -1.2240000000E+00 -2.0000000000E-03 + 10 2 -2.8730000000E+00 -2.4250000000E+00 -1.0000000000E-03 + 11 1 -3.4320000000E+00 -3.3710000000E+00 -1.0000000000E-03 + 12 2 -3.5790000000E+00 1.2240000000E+00 3.0000000000E-03 + 13 2 -2.8570000000E+00 0.0000000000E+00 0.0000000000E+00 + 14 2 -1.4710000000E+00 -2.4370000000E+00 -1.0000000000E-03 + 15 2 -2.8730000000E+00 2.4250000000E+00 8.0000000000E-03 + 16 2 -1.4290000000E+00 0.0000000000E+00 0.0000000000E+00 + 17 1 -3.4320000000E+00 3.3710000000E+00 1.2000000000E-02 + 18 2 -7.3100000000E-01 -1.2480000000E+00 -1.0000000000E-03 + 19 1 -9.5900000000E-01 -3.4080000000E+00 -1.0000000000E-03 + 20 2 -1.4720000000E+00 2.4370000000E+00 7.0000000000E-03 + 21 2 -7.3100000000E-01 1.2480000000E+00 2.0000000000E-03 + 22 2 7.3100000000E-01 -1.2480000000E+00 0.0000000000E+00 + 23 1 7.3970000000E+00 -1.0140000000E+00 -1.8860000000E+00 + 24 2 1.4710000000E+00 -2.4370000000E+00 -2.0000000000E-03 + 25 1 7.3950000000E+00 7.5400000000E-01 -1.9960000000E+00 + 26 2 7.3100000000E-01 1.2480000000E+00 0.0000000000E+00 + 27 1 9.5900000000E-01 -3.4080000000E+00 -3.0000000000E-03 + 28 1 -9.6000000000E-01 3.4080000000E+00 9.0000000000E-03 + 29 2 1.4290000000E+00 0.0000000000E+00 0.0000000000E+00 + 30 2 2.8730000000E+00 -2.4250000000E+00 -2.0000000000E-03 + 31 2 1.4710000000E+00 2.4370000000E+00 -3.0000000000E-03 + 32 2 7.7620000000E+00 -9.5000000000E-02 -1.3830000000E+00 + 33 2 2.8570000000E+00 0.0000000000E+00 0.0000000000E+00 + 34 1 9.5900000000E-01 3.4080000000E+00 -4.0000000000E-03 + 35 2 3.5790000000E+00 -1.2240000000E+00 0.0000000000E+00 + 36 2 2.8730000000E+00 2.4250000000E+00 -5.0000000000E-03 + 37 2 9.2900000000E+00 -9.4000000000E-02 -1.3640000000E+00 + 38 2 3.5790000000E+00 1.2240000000E+00 -3.0000000000E-03 + 39 1 3.4320000000E+00 -3.3710000000E+00 -3.0000000000E-03 + 40 2 5.0880000000E+00 -1.2620000000E+00 -2.0000000000E-03 + 41 3 5.7070000000E+00 -2.2740000000E+00 -1.6000000000E-02 + 42 2 5.0890000000E+00 1.2640000000E+00 -6.0000000000E-03 + 43 1 3.4320000000E+00 3.3710000000E+00 -9.0000000000E-03 + 44 4 5.6920000000E+00 1.0000000000E-03 2.8000000000E-02 + 45 3 5.7050000000E+00 2.2760000000E+00 -2.6000000000E-02 + 46 2 7.1390000000E+00 -7.0000000000E-03 2.4000000000E-02 + 47 1 9.6570000000E+00 -9.4100000000E-01 -7.4600000000E-01 + 48 1 9.6560000000E+00 8.2600000000E-01 -8.5900000000E-01 + 49 1 7.5140000000E+00 -8.5700000000E-01 6.3700000000E-01 + 50 1 7.5200000000E+00 9.0500000000E-01 5.3400000000E-01 + 51 1 -7.4666400000E+00 -4.5350000000E-02 9.7936000000E-01 + 52 1 9.6345700000E+00 -1.5942000000E-01 -2.3748900000E+00 + 53 1 1.5081470000E+01 -8.2919100000E+00 -3.0163600000E+00 + 54 1 1.5717470000E+01 -5.8730100000E+00 -3.0153600000E+00 + 55 2 1.4302470000E+01 -7.5190100000E+00 -3.0193600000E+00 + 56 2 1.4661470000E+01 -6.1730100000E+00 -3.0173600000E+00 + 57 1 1.5720470000E+01 -3.1039100000E+00 -3.0123600000E+00 + 58 2 1.2951470000E+01 -7.9059100000E+00 -3.0253600000E+00 + 59 1 1.2701470000E+01 -8.9759100000E+00 -3.0293600000E+00 + 60 2 1.3643470000E+01 -5.2089100000E+00 -3.0193600000E+00 + 61 2 1.4665470000E+01 -2.8009100000E+00 -3.0133600000E+00 + 62 2 1.3644470000E+01 -3.7630100000E+00 -3.0173600000E+00 + 63 2 1.1925470000E+01 -6.9639100000E+00 -3.0253600000E+00 + 64 2 1.2270470000E+01 -5.5999100000E+00 -3.0193600000E+00 + 65 1 1.0874470000E+01 -7.2809100000E+00 -3.0313600000E+00 + 66 2 1.2273470000E+01 -3.3670100000E+00 -3.0163600000E+00 + 67 4 1.1479470000E+01 -4.4829100000E+00 -3.0303600000E+00 + 68 1 9.8134700000E+00 -5.4159100000E+00 -1.0313600000E+00 + 69 2 1.1931470000E+01 -2.0030100000E+00 -3.0183600000E+00 + 70 2 9.4504700000E+00 -4.5169100000E+00 -1.5473600000E+00 + 71 1 9.8154700000E+00 -3.6460100000E+00 -9.8736000000E-01 + 72 2 1.0059470000E+01 -4.4829100000E+00 -2.9733600000E+00 + 73 1 9.6774700000E+00 -5.3540100000E+00 -3.5323600000E+00 + 74 1 1.0881470000E+01 -1.6829100000E+00 -3.0233600000E+00 + 75 2 7.9344700000E+00 -4.5149100000E+00 -1.5243600000E+00 + 76 1 9.6784700000E+00 -3.5860100000E+00 -3.4893600000E+00 + 77 1 7.5764700000E+00 -5.3839100000E+00 -2.0933600000E+00 + 78 1 7.5784700000E+00 -3.6149100000E+00 -2.0473600000E+00 + 79 1 1.5091470000E+01 -6.8291000000E-01 -3.0063600000E+00 + 80 2 1.4309470000E+01 -1.4539100000E+00 -3.0113600000E+00 + 81 2 1.2959470000E+01 -1.0630100000E+00 -3.0163600000E+00 + 82 1 1.2712470000E+01 7.0900000000E-03 -3.0173600000E+00 + 83 1 7.5833600000E+00 -4.5407800000E+00 -5.1394000000E-01 diff --git a/docs/_archives/recipes/electronicdynamics/tutorial/02_photoinduced_CT/02_aggregate_CT/dftb_in.hsd_pulse b/docs/_archives/recipes/electronicdynamics/tutorial/02_photoinduced_CT/02_aggregate_CT/dftb_in.hsd_pulse new file mode 100644 index 00000000..4c411214 --- /dev/null +++ b/docs/_archives/recipes/electronicdynamics/tutorial/02_photoinduced_CT/02_aggregate_CT/dftb_in.hsd_pulse @@ -0,0 +1,45 @@ +InputVersion = 21.2 + +Geometry = GenFormat { + <<< "coords.gen" +} + +Hamiltonian = DFTB { + Scc = Yes + SccTolerance = 1e-7 + MaxAngularMomentum { + C = "p" + H = "s" + N = "p" + O = "p" + } + SlaterKosterFiles = Type2FileNames { + Prefix = "../../../slakos/download/mio-1-1/" + Separator = "-" + Suffix = ".skf" + } +} + +ElectronDynamics { + Steps = 20000 + TimeStep [au] = 0.2 + Perturbation = Laser { + PolarizationDirection = # calculate with calc_timeprop_maxpoldir + # for the energy of interest + LaserEnergy [nm] = + } + EnvelopeShape = Sin2 { # envelope shape type + Time1 [fs] = 30.0 # pulse duration (assuming Time0 = 0, by default) + } + FieldStrength [V/A] = 0.02 # field strength bigger than spectrum case (0.001) + WriteEnergyAndCharges = Yes + Populations = Yes +} + +Options { + WriteDetailedXML = Yes # needed for waveplot +} + +Analysis { + WriteEigenvectors = Yes # needed for waveplot +} diff --git a/docs/_figures/elecdynamics/tutorial/PDI+carbazole.png b/docs/_figures/elecdynamics/tutorial/PDI+carbazole.png new file mode 100644 index 00000000..2c691670 Binary files /dev/null and b/docs/_figures/elecdynamics/tutorial/PDI+carbazole.png differ diff --git a/docs/_figures/elecdynamics/tutorial/PDI.png b/docs/_figures/elecdynamics/tutorial/PDI.png new file mode 100644 index 00000000..4fde62c5 Binary files /dev/null and b/docs/_figures/elecdynamics/tutorial/PDI.png differ diff --git a/docs/_figures/elecdynamics/tutorial/carbazole.png b/docs/_figures/elecdynamics/tutorial/carbazole.png new file mode 100644 index 00000000..c107bd75 Binary files /dev/null and b/docs/_figures/elecdynamics/tutorial/carbazole.png differ diff --git a/docs/_figures/elecdynamics/tutorial/charge-vs-time.png b/docs/_figures/elecdynamics/tutorial/charge-vs-time.png new file mode 100644 index 00000000..466c112d Binary files /dev/null and b/docs/_figures/elecdynamics/tutorial/charge-vs-time.png differ diff --git a/docs/_figures/elecdynamics/tutorial/molpopul-CT.png b/docs/_figures/elecdynamics/tutorial/molpopul-CT.png new file mode 100644 index 00000000..4b293204 Binary files /dev/null and b/docs/_figures/elecdynamics/tutorial/molpopul-CT.png differ diff --git a/docs/_figures/elecdynamics/tutorial/molpopul-carbazole.png b/docs/_figures/elecdynamics/tutorial/molpopul-carbazole.png new file mode 100644 index 00000000..8737c1e2 Binary files /dev/null and b/docs/_figures/elecdynamics/tutorial/molpopul-carbazole.png differ diff --git a/docs/_figures/elecdynamics/tutorial/mu-carbazole-components.png b/docs/_figures/elecdynamics/tutorial/mu-carbazole-components.png new file mode 100644 index 00000000..d0d30b0f Binary files /dev/null and b/docs/_figures/elecdynamics/tutorial/mu-carbazole-components.png differ diff --git a/docs/_figures/elecdynamics/tutorial/spec-nm-carbazole.png b/docs/_figures/elecdynamics/tutorial/spec-nm-carbazole.png new file mode 100644 index 00000000..b813c8d2 Binary files /dev/null and b/docs/_figures/elecdynamics/tutorial/spec-nm-carbazole.png differ diff --git a/docs/_figures/elecdynamics/tutorial/specs-compar-A+D.png b/docs/_figures/elecdynamics/tutorial/specs-compar-A+D.png new file mode 100644 index 00000000..37c55973 Binary files /dev/null and b/docs/_figures/elecdynamics/tutorial/specs-compar-A+D.png differ diff --git a/docs/_figures/elecdynamics/tutorial/specs-comparison-damp.png b/docs/_figures/elecdynamics/tutorial/specs-comparison-damp.png new file mode 100644 index 00000000..e1b88bde Binary files /dev/null and b/docs/_figures/elecdynamics/tutorial/specs-comparison-damp.png differ diff --git a/docs/electronicdynamics/driving.rst b/docs/electronicdynamics/driving.rst index 4b48d17d..821e14c6 100644 --- a/docs/electronicdynamics/driving.rst +++ b/docs/electronicdynamics/driving.rst @@ -1,4 +1,5 @@ .. highlight:: none +.. _sec-driving: ************************************************ Driving electronic dynamics with external fields @@ -26,26 +27,19 @@ the eigenvector of the polarizability tensor at that energy that has the largest eigenvalue. It is equivalent to a principal axis of inertia in rigid body rotation. -Using the ``ElectronDynamics`` block that follows:: +Using the ``ElectronDynamics`` block that follows: - ElectronDynamics = { - Steps = 60000 - TimeStep [au] = 0.2 - Perturbation = Laser { - PolarizationDirection = -0.08808129 0.99564018 -0.03069709 - LaserEnergy [eV] = 1.94944 - } - FieldStrength [V/A] = 0.0001 - } +.. literalinclude:: ../_archives/recipes/electronicdynamics/driving/dftb_in.hsd + :lines: 27-37 We resonantly excite the Q band along the direction of its maximum polarizability. The obtained magnitude of the dipole moment as a function of time is shown in the following figure: - .. figure:: ../_figures/elecdynamics/muvst.png - :height: 40ex - :align: center - :alt: Dipole moment as a function of time. +.. figure:: ../_figures/elecdynamics/muvst.png + :height: 40ex + :align: center + :alt: Dipole moment as a function of time. An initial transient, the dipole moment maxima and minima grow in absolute value as a linear function of time after, confirming that the applied field is in @@ -60,11 +54,11 @@ Off-resonant excitation An *off resonance* excitation at 1.9 eV produces the following result for the dipole moment: - .. figure:: ../_figures/elecdynamics/muvst-oot.png - :height: 40ex - :align: center - :alt: Dipole moment as a function of time. - +.. figure:: ../_figures/elecdynamics/muvst-oot.png + :height: 40ex + :align: center + :alt: Dipole moment as a function of time. + showing characteristic *beats*, the frequency of which are related to the amount of *detuning*. The amplitude of the dipole moment change caused by the illumination is also much smaller that when the laser is *in tune* with the diff --git a/docs/electronicdynamics/ehrenfest.rst b/docs/electronicdynamics/ehrenfest.rst index bef0d182..ff93804f 100644 --- a/docs/electronicdynamics/ehrenfest.rst +++ b/docs/electronicdynamics/ehrenfest.rst @@ -24,23 +24,10 @@ Benzene example As an example of Ehrenfest dynamics, starting from the equilibrium geometry we can excite the lowest-lying :math:`\pi-\pi^*` excitation of a benzene molecule using a short laser pulse, and explicitly allow the ions to move. In this case, -the ``ElectronDynamics`` blocks is as follows:: +the ``ElectronDynamics`` blocks is as follows: - ElectronDynamics = { - Steps = 100000 - TimeStep [au] = 0.1 - Perturbation = Laser { - PolarizationDirection = 0.00000001 0.61419463 -0.78915459 - LaserEnergy [eV] = 6.834 # pi-pi* transition energy - } - EnvelopeShape = Sin2 { - Time1 [fs] = 10.0 # end-time of the pulse - } - FieldStrength [V/A] = 0.10 - IonDynamics = Yes - InitialTemperature [K] = 0.0 - Populations = Yes - } +.. literalinclude:: ../_archives/recipes/electronicdynamics/ehrenfest/dftb_in.hsd + :lines: 24-38 The keyword ``IonDynamics`` is set to ``Yes`` and for this example, we are starting with zero initial atomic velocities. The short, but strong, laser pulse @@ -49,11 +36,11 @@ electronic structure impulsively drives the nuclei to move. In the following figure, we plot the distances between neighbouring carbon atoms in the benzene ring: - .. figure:: ../_figures/elecdynamics/CC-dist.png - :height: 60ex - :align: center - :alt: Carbon-carbon distances for benzene following excitation by a laser - pulse. +.. figure:: ../_figures/elecdynamics/CC-dist.png + :height: 60ex + :align: center + :alt: Carbon-carbon distances for benzene following excitation by a laser + pulse. After the short excitation, all carbon atoms move in a *breathing* motion with all distances increasing and decreasing periodically. The breathing is not diff --git a/docs/electronicdynamics/index.rst b/docs/electronicdynamics/index.rst index 1b1e9d87..03ef7aac 100644 --- a/docs/electronicdynamics/index.rst +++ b/docs/electronicdynamics/index.rst @@ -24,3 +24,4 @@ and driving of nuclear motion via electronic excitation. spectra.rst driving.rst ehrenfest.rst + tutorial.rst diff --git a/docs/electronicdynamics/introduction.rst b/docs/electronicdynamics/introduction.rst index 18d12e09..c0cec815 100644 --- a/docs/electronicdynamics/introduction.rst +++ b/docs/electronicdynamics/introduction.rst @@ -1,5 +1,5 @@ .. _sec-electrondynamics: - + ******************* Electronic dynamics ******************* @@ -37,7 +37,7 @@ The EOM for the density matrix is integrated using a Leapfrog scheme in which the density matrix at time :math:`t_{i+i}` is obtained from its value a t time :math:`t_{i-1}` and its derivative at time :math:`t_i`: - :math:`\rho_{i+1}=\rho_{i-1}+2\Delta t \dot{\rho}_i.` +.. math:: \rho_{i+1}=\rho_{i-1}+2\Delta t \dot{\rho}_i. The nuclear motion is integrated using a velocity Verlet algorithm. @@ -46,7 +46,7 @@ calculation of absorption spectra, to study the response to constant or pulsed excitation and even the simulation of pump-probe spectroscopy. All input related to electronic dynamics is located within the -*ElectronDynamics* block of the input file. Electron dynamics is run after +``ElectronDynamics`` block of the input file. Electron dynamics is run after ground state self consistency is achieved, with the possibility of reading previously converged charges for the ground state or the state of the time-evolving density matrix to continue time propagation. diff --git a/docs/electronicdynamics/spectra.rst b/docs/electronicdynamics/spectra.rst index 76bfce08..29cbc51e 100644 --- a/docs/electronicdynamics/spectra.rst +++ b/docs/electronicdynamics/spectra.rst @@ -1,4 +1,5 @@ .. highlight:: none +.. _sec-spectra: ******************************************** Calculation of electronic absorption spectra @@ -20,35 +21,9 @@ The input [Input: `recipes/electronicdynamics/spectrum/`] The following input can be used to calculate the absorption spectrum of -chlorophyll a:: - - Geometry = GenFormat { - <<< "coords.gen" - } - - Hamiltonian = DFTB { - SCC = Yes - SCCTolerance = 1.0e-7 - MaxAngularMomentum = { - Mg = "p" - C = "p" - N = "p" - O = "p" - H = "s" - } - Filling = Fermi { - Temperature [K] = 300 - } - } - - ElectronDynamics = { - Steps = 20000 - TimeStep [au] = 0.2 - Perturbation = Kick { - PolarizationDirection = all - } - FieldStrength [v/a] = 0.001 - } +chlorophyll a: + +.. literalinclude:: ../_archives/recipes/electronicdynamics/spectrum/dftb_in.hsd The optimised geometry is located in the *coords.gen* file. Note that for this example the long *phytol* chain present in the natural molecule has been @@ -57,11 +32,11 @@ influence on the absorption spectrum. For the calculation of absorption spectra, an initial kick of the system is made using a Dirac delta type perturbation. The input specifies that after the -initial perturbation of *Kick* type, twenty thousand steps of dynamics will be -executed using a time step of 0.2 atomic units. The *Kick* perturbation can be -applied in any of the Cartesian directions (*x*, *y* or *z*). The use of *all* -here in the input instructs the code to run three independent dynamic -calculations, one with an initial *Kick* in each Cartesian direction. +initial perturbation of ``Kick`` type, twenty thousand steps of dynamics will be +executed using a time step of 0.2 atomic units. The ``Kick`` perturbation can be +applied in any of the Cartesian directions (``x``, ``y`` or ``z``). The use of +``all`` here in the input instructs the code to run three independent dynamic +calculations, one with an initial ``Kick`` in each Cartesian direction. After self consistency has been achieved and the ground state density matrix is obtained, the perturbation is applied and then the propagation starts, the @@ -121,7 +96,7 @@ of induced dipole moment of the molecule in the presence of an external time dependent field (within the linear response range) is related to the Fourier transform of said field in the following manner: -:math:`\mathbf{mu}(\omega)=\overset\leftrightarrow{\alpha}(\omega)\mathbf{E}(\omega)` +.. math:: \mathbf{\mu}(\omega)=\overset\leftrightarrow{\alpha}(\omega)\,\mathbf{E}(\omega) since the Fourier transform of a Dirac delta is a constant at all frequencies, the polarizability tensor :math:`\overset\leftrightarrow{\alpha}(\omega)` can be @@ -146,10 +121,10 @@ equivalent to using a *windowing* function. The spectrum is located in the output files *spec-ev* and *spec-nm*. In this case the spectrum looks as follows: - .. figure:: ../_figures/elecdynamics/spectrum.png - :height: 40ex - :align: center - :alt: Absorption spectrum of chlorophyll a. +.. figure:: ../_figures/elecdynamics/spectrum.png + :height: 40ex + :align: center + :alt: Absorption spectrum of chlorophyll a. The band between 400 and 500 nm is called the Soret band and the one between 600 and 700 nm is the Q band. This band is the band that provides is responsible for diff --git a/docs/electronicdynamics/tutorial.rst b/docs/electronicdynamics/tutorial.rst new file mode 100644 index 00000000..34fbd3ef --- /dev/null +++ b/docs/electronicdynamics/tutorial.rst @@ -0,0 +1,463 @@ +.. highlight:: none + +******************************************************************* +Tutorial: Photoinduced charge transfer in a donor-acceptor complex. +******************************************************************* + +This is the tutorial given at the DFTB+ School 2022 in Daresbury, UK. The idea is to get familiar +with the real-time TDDFTB method applied to molecules and molecular complexes, learning the basics of absorption spectra calculations and photoinduced processes such as charge transfer under laser irradiation. +The tutorial is based on the following work: **Photoinduced charge-transfer dynamics simulations in noncovalently bonded molecular aggregates.** Medrano, C. R., Oviedo, M. B., & Sánchez, C. G. (2016). Physical Chemistry Chemical Physics, 18(22), 14840–14849. `https://doi.org/10.1039/c6cp00231e `_ + + +Spectra and analysis +==================== + +We will first calculate the absorption spectra of two different molecules and +analyse them using the tools provided by DFTB+. + + +Calculation of the absorption spectrum of carbazole +--------------------------------------------------- + +[Input: `recipes/electronicdynamics/tutorial/01_spectra_and_laser/01_carbazole/01_spectrum`] + +We will calculate the absorption spectrum of the carbazole molecule, following the procedure described in :ref:`sec-spectra`. + +1. Take a look at the input coordinates *coords.gen*. The *.gen* format + is the one used for DFTB+ code (see section :ref:`gen_format` for more details). In order to visualize the molecule, + you can use the ``gen2xyz`` script, provided in the installation of the + DFTB+ code, by running:: + + gen2xyz coords.gen + + This will generate a *coords.xyz* that you can open with VMD, Avogadro or + any other molecular visualization software of your choice. An image of the + carbazole molecule made with VMD is presented in :numref:`fig_carbazole`. + + .. _fig_carbazole: + .. figure:: ../_figures/elecdynamics/tutorial/carbazole.png + :height: 30ex + :align: center + :alt: Carbazole molecule. + + Carbazole molecule + +2. Open the *dftb_in.hsd_spec* file. This is a template for the calculation + of the absorption spectrum. + + - Take a look at the ``ElectronDynamics`` block at the end of the file: + + .. literalinclude:: ../_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/01_carbazole/01_spectrum/dftb_in.hsd_spec + :lines: 22-29 + + - The input variables to be considered for the calculation of the spectrum are four: + + * ``Steps`` (integer): the number of steps of the dynamics. The longer the dynamics, the lower the + energies that can be resolved in the spectrum (the total time is also afected by the ``TimeStep``, of course). Here, we will use 10000 steps. + + * ``TimeStep`` (float): the time step in time units. Here we use 0.2 a.u (0.0048 fs), which is normally stable for simulations of a few tens of thousands of steps. In case there is instability in the dynamics, the time step shuld be decreased. + + * ``Perturbation``: In this case we need a Dirac-delta perturbation (AKA kick) and we need to + specify the ``PolarizationDirection`` that could be *X*, *Y*, *Z* (if we are interested in + one particular direction) or ``all`` if we want to calculate the three kicks consequtively and then calculate the spherically-averaged spectrum, accounting for random molecular orientations. + Hence, we set it as ``all``. + + * ``FieldStrength`` (float): the field strength of the perturbation applied. For the + calculation of the absorption spectrum, it must be within the linear response regime, + i.e. usually 0.001 :math:`V/Å` or lower. + + - Complete the template file, copy it to *dftb_in.hsd* and run the calculation. + +3. Once the dynamics ends, we will have calculated the time-resolved dipole moment using 3 field polarization directions (*mux.dat*, muy.dat, *muz.dat*). We need to average and Fourier-transform (or the other way around, as these are linear operations) these dipole components + in order to obtain the absorption spectrum of the molecule. To do this, we will use the + ``calc_timeprop_spectrum`` tool available after installation of DFTB+ under: + *dftbplus/tools/misc/*. In the folder + where you have the dipole files just type:: + + calc_timeprop_spectrum -d 4 -f 0.001 + + where the option ``-d`` is for the damping constant (artificial lifetime, in fs), which is equivalent to convoluting each resonance with a Lorentzian in time domain. + The option ``-f`` is the field strength of the kick (in :math:`V/Å`) applied during dynamics. + +4. After running the script you will find two new files: *spec-nm.dat* and *spec-ev.dat* which are + the absorption spectra in nm and eV, respectively. Plot the spectrum file with the plotting tool + of your choice and look at the lowest energy transitions. You should then see + an absorption spectrum similar to :numref:`fig_carbazole_spec`. + + .. _fig_carbazole_spec: + .. figure:: ../_figures/elecdynamics/tutorial/spec-nm-carbazole.png + :width: 60% + :align: center + :alt: Absorption spectrum of carbazole molecule + + Absorption spectrum of carbazole molecule + +5. Change the damping constant for a higher value, recalculate the spectrum and plot both spectra + together. What is the effect of the damping time in the spectrum? + In :numref:`fig_carbazole_spec_damp` can be seen the same spectrum calculated with + different values of the damping constant. + + .. _fig_carbazole_spec_damp: + .. figure:: ../_figures/elecdynamics/tutorial/specs-comparison-damp.png + :width: 60% + :align: center + :alt: Influence of the damping constant value ``d`` in the absorption spectrum. + + Influence of the damping constant value ``d`` in the absorption spectrum. + + +Analysis of the absorption spectrum of carbazole: driving the system with a laser +--------------------------------------------------------------------------------- + +[Input: `recipes/electronicdynamics/tutorial/01_spectra_and_laser/01_carbazole/02_laser`] + +We will consider a laser perturbation in tune with the lowest energy +transition of the molecule in order to study the photodynamic +process of absorption in this transition. In order to do this, we +will follow the same procedure as described in :ref:`sec-driving`, +finding first the lowest energy transition of the molecule in the spectrum plotted in the previous calculation, and then calculating the direction of maximal polarization of the transition. + +1. Open the *dftb_in.hsd_laser* file. This is a template for the calculation + of a laser perturbation. + + - Take a look at the ``ElectronDynamics`` block at the end of the file: + + .. literalinclude:: ../_archives/recipes/electronicdynamics/tutorial/01_spectra_and_laser/01_carbazole/02_laser/dftb_in.hsd_laser + :lines: 22-31 + + Now, the ``Perturbation`` type is a continuous-wave ``laser``, for which we need to specify two parameters: + + * ``LaserEnergy`` (float): the energy of the applied laser that may be + the transition energy of interest. This value must be in energy units + like eV but also a wavelength in nm is allowed. + + * ``PolarizationDirection`` (vector): in the case of a laser, the + ``PolarizationDirection`` is a 3-components vector. + + Note that we turned on the ``Populations`` flag in order to write + the occupations during the dynamics. Also note that we are asking for + the detailed xml and the eigenvectors with the ``WriteDetailedXML`` + and ``WriteEigenvectors`` options. We will need them to plot the orbitals + with waveplot in the following sections. + +2. To complete the input template for the laser, we need to provide + the ``LaserEnergy`` and the ``PolarizationDirection`` of the laser. Based on + our previous calculated spectrum, calculate the direction of maximal + polarization of the lowest energy transition of the molecule. + + - Help: use the tool ``calc_timeprop_maxpoldir`` already available in + your installation (under: *dftbplus/tools/misc/*). To know how this + tool work the user can just type:: + + calc_timeprop_maxpoldir -h + + - Along which axis/axes is the polarization of the molecule oriented? Why? + + - Hint: try to visualize the molecule and see how it is oriented with respect + to the cartesian axes. + + - Solution: If you choose the lower energy transition of carbazole you may do:: + + calc_timeprop_maxpoldir -10 -w 326 + + and you will obtain the following transition dipole vector:: + + PolarizationDirection = 0.99999 0.00101 -0.003815 + + which is essentially paralel to the *X* cartesian direction (because + of the molecules orientation with respect to the cartesian axes) + +3. Prepare the input for the dynamics under a continuous laser perturbation. + Use the energy obtained from the spectrum as the ``LaserEnergy`` + and the vector obtained above as the ``PolarizationDirection`` of the + laser. + + - Why we should use this laser polarization instead of any other? + +4. After the dynamics, take a look at the *mu.dat* file. You could plot the 3 + componets of the dipole moment by doing:: + + xmgrace -nxy mu.dat + + In :numref:`fig_carbazole_mu` the dipole moment is plotted. + + - Is the dipole moment increasing linearly? + + .. _fig_carbazole_mu: + .. figure:: ../_figures/elecdynamics/tutorial/mu-carbazole-components.png + :width: 60% + :align: center + :alt: mu components + + Dipole moment components vs time for the laser dynamics. + +5. Take a look at the *molpopul1.dat* file + generated. This file contains the populations projected on the GS orbitals during the dynamics:: + + # GS molecular orbital populations, spin channel : 1 + #time (fs) | population (orb 1) | population (orb 2) | ... | population (orb N) | + 0.237050663997490 1.999999999825206 1.999999999780047 1.999999999771997 ... + 0.478939096647990 1.999999999978780 1.999999999983538 1.999999999962606 ... + 0.720827529298490 1.999999999870651 1.999999999913354 1.999999999904491 ... + + - Which orbitals are involved in the transition? + Help: you can plot the *molpopul1.dat* file using `xmgrace`:: + + xmgrace -nxy molpopul1.dat + + Look at the populations initially at y=2 (occupied orbitals in the GS basis) and find + which curves are decreasing over time, these are the orbitals + being depopulated. + Look at the populations initially at y=0 (unoccopied orbitals in the GS basis) and find + the orbitals being populated over time. + + You could also check in the *band.out* file generated from the SCC + calculation the states numbers. Close to the Fermi energy, you + should see something like:: + + 29 -6.641 2.00000 + 30 -5.809 2.00000 + 31 -5.512 2.00000 #HOMO + 32 -1.983 0.00000 #LUMO + 33 -1.358 0.00000 + 34 -0.501 0.00000 + + where it is clear that states 31 and 32 are the HOMO + and LUMO of the molecule, respectively. + +6. Let's visualize those orbitals using ``waveplot``. For a complete description please check :ref:`sec-basics-waveplot`. + + - Look at the *waveplot_in.hsd_* template input file for waveplot: + + - Which files are needed? + + - In which orbitals are we interested? + + - After editing this file, just rename it to *waveplot_in.hsd* and run + ``waveplot`` using your current installed executable, which should be in the same installation directory as the `dftbplus` executable. + + - After running waveplot, a number of files would be generated starting with "wp-1-1". + +7. Let's plot these orbitals: + + - Open the cube files that correspond to the HOMO and LUMO and plot them as an isosurface. + For that there are several software options. Particularly, we give here some links for VMD and VESTA: + For a tutorial on the `Basics of VMD `_ and/or plotting an `isosurface `_ method please refer to these links. + `VESTA `_ allows the user to open directly cube files showing the isosurface immediately + with some default parameters, making it a really good option for quick inspections. + +As a reference, we plotted the populations obtained from the laser dynamics +and the orbitals involved in the transition in :numref:`fig_carbazole_pops`. + +.. _fig_carbazole_pops: +.. figure:: ../_figures/elecdynamics/tutorial/molpopul-carbazole.png + :width: 100% + :align: center + :alt: molpopul1-carbazole + + (left) Populations vs time for the laser dynamics. (right) Orbitals involved + in the lower energy transition of the carbazole molecule. + +Now it's your turn! + + +Calculation of PDI absorption spectrum +-------------------------------------- + +[Input: `recipes/electronicdynamics/tutorial/01_spectra_and_laser/02_PDI/``] + +We will repeat the procedure used for the carbazole molecule with a new +molecule, PDI. + +1. Based on the calculations that you ran before. + + - Calculate the absorption spectrum with a proper *dftb_in.hsd* input file. + + - Find the lowest energy transition. + + - Apply a laser tuned with this transition. + + - Obtain the orbitals involved in the transition using waveplot and plot them. + +The reference results are plotted in :numref:`fig_PDI` + +.. _fig_PDI: +.. figure:: ../_figures/elecdynamics/tutorial/PDI.png + :width: 100% + :align: center + :alt: PDI + + \(a\) Absorption spectrum of the PDI molecule. \(b\) PDI molecule structure. \(c\) Dipole + moment components vs time during a laser dynamics at 548 nm (note that in + this case the dipole moment in the *X* direction increases linearly). \(d\) Populations + vs time for the laser dynamics. \(e\) Orbitals involved in the transition. + + +Photoinduced charge transfer +============================ + +Calculate the absorption spectrum of a donor-acceptor aggregate +----------------------------------------------------------------- + +[Input: `recipes/electronicdynamics/tutorial/02_photoinduced_CT/01_aggregate_spec/`] + +1. Visualize the coordinates file *coords.xyz*. + + .. _fig_aggregate: + .. figure:: ../_figures/elecdynamics/tutorial/PDI+carbazole.png + :width: 60% + :align: center + :alt: PDI+carbazole aggregate + + PDI+carbazole derivatives aggregate + + It is an aggregate of the two previous molecules, in which the carbazole and + PDI derivatives act as donor and acceptor of electrons, respectively. + + - Convert the coordinates into *gen* format (using the ``xyz2gen`` script) and + calculate the absorption spectrum using the *dftb_in.hsd_spec* as a template + for the input (copy this file or rename it as *dftb_in.hsd*). + +2. Compare the calculated spectrum with the individual ones (you can use the spectra + calculated before or recalculate them from these derivatives). For the comparison to be valid, + you should use the same damping constant for all spectra. Are there relevant differences? + See :numref:`fig_specs_AD`. + + .. _fig_specs_AD: + .. figure:: ../_figures/elecdynamics/tutorial/specs-compar-A+D.png + :width: 60% + :align: center + :alt: A+D spectrum + + Absorption spectrum of the PDI+carbazole derivatives aggregate (in black), + compared to the individual spectrum for the PDI moiety (in orange) and + the carbazole moiety (in red). + +3. We are interested in the dynamics upon ilumination of the acceptor molecule. For such + puropose, we will perform a driven simulation in next step and for it, we need to calculate + the transition dipole direction of the absorption band at ~530 nm. Calculate this vector + using the ``calc_timeprop_maxpoldir`` tool. You shold obtain something similar to:: + + PolarizationDirection = -0.99977 0.01777 0.01122 + + which is essentially the *X* direction (since the PDI molecule axis is + paralel to the *X* axis in the coordinates). + + +Laser dynamics on the donor-acceptor aggregate and charge transfer +------------------------------------------------------------------ + +[Input: `recipes/electronicdynamics/tutorial/02_photoinduced_CT/02_aggregate_CT/`] + +1. With the transition dipole moment vector calculated previously, prepare + your input file for a laser-driven electron dynamics in tune with the acceptor (PDI) + lowest energy excitation. Use the *dftb_in.hsd_pulse* as a template. Note + that this time we add an envelope function to the laser perturbation in order + to mimic a laser pulse: + + .. literalinclude:: ../_archives/recipes/electronicdynamics/tutorial/02_photoinduced_CT/02_aggregate_CT/dftb_in.hsd_pulse + :lines: 23-37 + + Now in the ElectronDynamics we added the ``Sin2`` ``EnvelopeShape`` with + a duration of 30 fs starting at the beginning of the dynamics. We will + also ask the code to print the populations during dynamics to study the + mechanism of charge transfer. Complete the input template filling the + ``PolarizationDirection`` and ``LaserEnergy`` obtained before and run the + code (don't forget to rename the template to *dftb_in.hsd*). + +2. After running the electron dynamics, let inspect the *qsvst.dat* + file:: + + #time (fs) | total net charge (e) | charge (atom_1) (e) | ... | charge (atom_N) (e)| + 0.000000000000000 -0.000000000000055 0.075753114169209 0.077680106829215 ... + 0.241888432650500 -0.000000000000048 0.075753940652948 0.077680933651269 ... + 0.483776865301000 -0.000000000000049 0.075758821681684 0.077685768802125 ... + + The first column of the file is the time and the second one is the total net charge + of the system at each time step (which should be always close to zero, within numerical error). After that, each column is the net atomic charge at each time step. + Making use of the file *qsvst.dat* one may potencially get information + about partial charge motion during dynamics. If you are interested in what is + happening with the charge of one molecule in your system, you can sum the + net atomic charges of the atoms of such a molecule to get the net molecular charge over time. + +3. As we are interested in the charge transfer between both molecules we want to analyse the net + charge of each molecule during the dynamics. For this purpose, you could write your own + script but we also provide you with a simple script which works fine for this case. The provided tool ``calc_timeprop_charges.py``, which you can find in the same directory as the template input file, will do the job. + + Try:: + + ./calc_timeprop_charges.py --help + + to get info about how to use the script:: + + usage: calc_timeprop_charges.py -l ii:jj,ll:mm + + Reads output from TD calculation with external laser and produces net charges per fragment + (subtracting value at time = 0). + + Needs qsvst.dat file present in working directory. + + Options: + -h, --help show this help message and exit + -l AT_LIST, --list=AT_LIST + list of atom indices starting from 1 (initial and + final index separated by colons, ranges separated by + commas) + + You will have to define the ranges of atoms that correspond to each of + the two molecules. In our case, the PDI derivative is between atom 1 and 52 + and the carbazole derivative is between atom 53 and 83. Then, you may run:: + + ./calc_timeprop_charges.py -l 1:52,53:83 + + After runing the script, two files may be generated: *charge_frag1.dat* and + *charge_frag2.dat* with the corresponding charges of each defined fragment. + If you plot it you will get something like in :numref:`fig_CT_AD`. + + .. _fig_CT_AD: + .. figure:: ../_figures/elecdynamics/tutorial/charge-vs-time.png + :width: 60% + :align: center + :alt: charge vs time + + Charge vs time for the accpetor and donor molecules. + + where it is clear that the PDI molecule act as + an acceptor of electrons (net charge goes negative), while the carbazole is donating electrons (net charge goes positive). + + If we follow the protocol from before, ploting the populations and searching + for the orbitals involved in the transition, we should be able to get some + insigths on the mechanism of the charge transfer (follow the steps in the + previous sections). As it is shown in :numref:`fig_molpopul-CT`. + + .. _fig_molpopul-CT: + .. figure:: ../_figures/elecdynamics/tutorial/molpopul-CT.png + :width: 100% + :align: center + :alt: molpopul CT + + (left)Populations vs time for pulse-driven dynamics. (right) Orbitals involved + in the excitation during the dynamics. + + the orbitals involved in the excitation with the pulse are localized in the + PDI molecule, i.e. we can confirm that we are exciting the PDI molecule in + its own HOMO-LUMO transition (and not an HOMO-LUMO transition of the whole + system). Comparing with the previous figure of the charges dynamics, we can + also see that the CT process start after a certain amount of electrons + are excited in the PDI molecule (more or less 30 fs, the duration of the pulse + used). So we could in principle divide the mechanism in two steps. The first + one, from 0 to ~30 fs where the PDI is beeing excited. The second step is the + charge transfer from the carbazole to the PDI once the latter is already excited. + +We hope that this tutorial is helpful for those interested in get into the real-time TDDFTB +method using ``DFTB+``. Of course, these are just the basics and there are many more possibilities in terms of calculating optical properties and photoinduced processes within this approach for a wide range of materials and system like *graphene nanoribbons*, *plasmonic nanoparticles*, *glod nanoclusters*, +*semiconductor nanoparticles* and *organic solar cells*. As an inspiration, we give you some references of +recent works performed with this method in ``DFTB+``: + +**Fano Resonance and Incoherent Interlayer Excitons in Molecular van der Waals Heterostructures.** Lien-Medrano, C. R., Bonafé, F. P., Yam, C. Y., Palma, C.-A., Sánchez, C. G., & Frauenheim, T. (2022). Nano Letters, 22(3), 911–917. `https://doi.org/10.1021/acs.nanolett.1c03441 `_ + +**Dynamical evolution of the Schottky barrier as a determinant contribution to electron-hole pair stabilization and photocatalysis of plasmon-induced hot carriers.** Berdakin, M., Soldano, G., Bonafé, F. P., Liubov, V., Aradi, B., Frauenheim, T., & Sánchez, C. G. (2022). Nanoscale, 14(7), 2816–2825. `https://doi.org/10.1039/d1nr04699c `_ + +**Photoinduced charge-transfer in chromophore-labeled gold nanoclusters: quantum evidence of the critical role of ligands and vibronic couplings.** Domínguez-Castro, A., Lien-Medrano, C. R., Maghrebi, K., Messaoudi, S., Frauenheim, T., & Fihey, A. (2021). Nanoscale, 13(14), 6786–6797. `https://doi.org/10.1039/D1NR00213A `_ + +**Plasmon-driven sub-picosecond breathing of metal nanoparticles.** Bonafé, F. P., Aradi, B., Guan, M., Douglas-Gallardo, O. A., Lian, C., Meng, S., Frauenheim, T., & Sánchez, C. G. (2017). Nanoscale, 9(34), 12391–12397. `https://doi.org/10.1039/C7NR04536K `_