diff --git a/docs/en/.buildinfo b/docs/en/.buildinfo new file mode 100644 index 0000000..bb74f86 --- /dev/null +++ b/docs/en/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 856ce3be643e22a910bf9df9e6b1ddda +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/en/SALMONdocument.pdf b/docs/en/SALMONdocument.pdf new file mode 100644 index 0000000..adb77bf Binary files /dev/null and b/docs/en/SALMONdocument.pdf differ diff --git a/docs/en/_images/C_rps_pot.png b/docs/en/_images/C_rps_pot.png new file mode 100644 index 0000000..3cab0d0 Binary files /dev/null and b/docs/en/_images/C_rps_pot.png differ diff --git a/docs/en/_images/Dns.png b/docs/en/_images/Dns.png new file mode 100644 index 0000000..8470440 Binary files /dev/null and b/docs/en/_images/Dns.png differ diff --git a/docs/en/_images/Elf.png b/docs/en/_images/Elf.png new file mode 100644 index 0000000..cc75b00 Binary files /dev/null and b/docs/en/_images/Elf.png differ diff --git a/docs/en/_images/HOMO.png b/docs/en/_images/HOMO.png new file mode 100644 index 0000000..ddbf016 Binary files /dev/null and b/docs/en/_images/HOMO.png differ diff --git a/docs/en/_images/acetylene.png b/docs/en/_images/acetylene.png new file mode 100644 index 0000000..b48eb44 Binary files /dev/null and b/docs/en/_images/acetylene.png differ diff --git a/docs/en/_images/acetylene_grid.png b/docs/en/_images/acetylene_grid.png new file mode 100644 index 0000000..2219e82 Binary files /dev/null and b/docs/en/_images/acetylene_grid.png differ diff --git a/docs/en/_images/exc2-dipole.png b/docs/en/_images/exc2-dipole.png new file mode 100644 index 0000000..4c80acb Binary files /dev/null and b/docs/en/_images/exc2-dipole.png differ diff --git a/docs/en/_images/exc2-response.png b/docs/en/_images/exc2-response.png new file mode 100644 index 0000000..e53fd47 Binary files /dev/null and b/docs/en/_images/exc2-response.png differ diff --git a/docs/en/_images/exc3-Eex.png b/docs/en/_images/exc3-Eex.png new file mode 100644 index 0000000..6885dd1 Binary files /dev/null and b/docs/en/_images/exc3-Eex.png differ diff --git a/docs/en/_images/exc3-Efield.png b/docs/en/_images/exc3-Efield.png new file mode 100644 index 0000000..e99e97b Binary files /dev/null and b/docs/en/_images/exc3-Efield.png differ diff --git a/docs/en/_images/exc3-dipole.png b/docs/en/_images/exc3-dipole.png new file mode 100644 index 0000000..2b1b975 Binary files /dev/null and b/docs/en/_images/exc3-dipole.png differ diff --git a/docs/en/_images/exc3-spectrum.png b/docs/en/_images/exc3-spectrum.png new file mode 100644 index 0000000..4ffa34d Binary files /dev/null and b/docs/en/_images/exc3-spectrum.png differ diff --git a/docs/en/_images/exc3a-Eex.png b/docs/en/_images/exc3a-Eex.png new file mode 100644 index 0000000..3b92dca Binary files /dev/null and b/docs/en/_images/exc3a-Eex.png differ diff --git a/docs/en/_images/exc3a-Efield.png b/docs/en/_images/exc3a-Efield.png new file mode 100644 index 0000000..f45cbb6 Binary files /dev/null and b/docs/en/_images/exc3a-Efield.png differ diff --git a/docs/en/_images/exc3a-dipole.png b/docs/en/_images/exc3a-dipole.png new file mode 100644 index 0000000..b2458eb Binary files /dev/null and b/docs/en/_images/exc3a-dipole.png differ diff --git a/docs/en/_images/exc4-diamond.png b/docs/en/_images/exc4-diamond.png new file mode 100644 index 0000000..294c7de Binary files /dev/null and b/docs/en/_images/exc4-diamond.png differ diff --git a/docs/en/_images/exc5-current.png b/docs/en/_images/exc5-current.png new file mode 100644 index 0000000..3cea808 Binary files /dev/null and b/docs/en/_images/exc5-current.png differ diff --git a/docs/en/_images/exc5-eps-im.png b/docs/en/_images/exc5-eps-im.png new file mode 100644 index 0000000..7dd5970 Binary files /dev/null and b/docs/en/_images/exc5-eps-im.png differ diff --git a/docs/en/_images/exc5-eps-re.png b/docs/en/_images/exc5-eps-re.png new file mode 100644 index 0000000..d3000ad Binary files /dev/null and b/docs/en/_images/exc5-eps-re.png differ diff --git a/docs/en/_images/exc6-current.png b/docs/en/_images/exc6-current.png new file mode 100644 index 0000000..87cf489 Binary files /dev/null and b/docs/en/_images/exc6-current.png differ diff --git a/docs/en/_images/exc6-efield.png b/docs/en/_images/exc6-efield.png new file mode 100644 index 0000000..3ea2c65 Binary files /dev/null and b/docs/en/_images/exc6-efield.png differ diff --git a/docs/en/_images/exc6-energy.png b/docs/en/_images/exc6-energy.png new file mode 100644 index 0000000..8652696 Binary files /dev/null and b/docs/en/_images/exc6-energy.png differ diff --git a/docs/en/_images/exc6-pulse.png b/docs/en/_images/exc6-pulse.png new file mode 100644 index 0000000..1aa390d Binary files /dev/null and b/docs/en/_images/exc6-pulse.png differ diff --git a/docs/en/_images/exc7-efield-x.png b/docs/en/_images/exc7-efield-x.png new file mode 100644 index 0000000..b249d18 Binary files /dev/null and b/docs/en/_images/exc7-efield-x.png differ diff --git a/docs/en/_images/exc7-efield.png b/docs/en/_images/exc7-efield.png new file mode 100644 index 0000000..07cfa88 Binary files /dev/null and b/docs/en/_images/exc7-efield.png differ diff --git a/docs/en/_images/exc7-efield2.png b/docs/en/_images/exc7-efield2.png new file mode 100644 index 0000000..3e4b811 Binary files /dev/null and b/docs/en/_images/exc7-efield2.png differ diff --git a/docs/en/_images/exc7-energy2.png b/docs/en/_images/exc7-energy2.png new file mode 100644 index 0000000..b2e2ea7 Binary files /dev/null and b/docs/en/_images/exc7-energy2.png differ diff --git a/docs/en/_images/top1.png b/docs/en/_images/top1.png new file mode 100644 index 0000000..717fd72 Binary files /dev/null and b/docs/en/_images/top1.png differ diff --git a/docs/en/_sources/acknowledgements.rst.txt b/docs/en/_sources/acknowledgements.rst.txt new file mode 100644 index 0000000..611d67d --- /dev/null +++ b/docs/en/_sources/acknowledgements.rst.txt @@ -0,0 +1,19 @@ +.. _acknowledgements: + +Acknowledgements +------------------ + +SALMON has been developed by the SALMON developers under supports by +Center for Computational Sciences, University of Tsukuba, and +National Institute for Quantum and Radiological Science and Technology. +SALMON has been supported by Strategic Basic +Research Programs, CREST, Japan Science and Technology Agency, under the +Grand Number JPMJCR16N5, in the research area of Advanced core +technology for creation and practical utilization of innovative +properties and functions based upon optics and photonics. SALMON was +also supported by Ministry of Education, Culture, Sports and +Technology of Japan as a social and scientific priority issue (Creation +of new functional devices and high-performance materials to support +next-generation industries: CDMSI) to be tackled by using post-K +computer. + diff --git a/docs/en/_sources/exercises.rst.txt b/docs/en/_sources/exercises.rst.txt new file mode 100644 index 0000000..cb3ec1c --- /dev/null +++ b/docs/en/_sources/exercises.rst.txt @@ -0,0 +1,4671 @@ +====.. _Exercises: + +Exercises +==================== + + +Getting started +--------------- + +Welcome to SALMON Exercises! + +In these exercises, we explain the use of SALMON from the very +beginning, taking a few samples that cover applications of SALMON in +several directions. We assume that you are in the computational +environment of UNIX/Linux OS. First you need to download and install +SALMON in your computational environment. If you have not yet done it, +do it following the instruction, `download `_ +and :any:`install-and-run`. + +As described in :any:`install-and-run`, you are required +to prepare at least an input file and pseudopotential files to run +SALMON. In the following, we present input files for several sample +calculations and provide a brief explanation of the input keywords +that appear in the input files. You may modify the input files to +execute for your own calculations. Pseudopotential files of elements +that appear in the samples are also attached. We also present +explanations of main output files. + +We present 11 exercises. + +First 3 exercises (Exercise-1 ~ 3) are for an isolated molecule, +acetylene C2H2. If you are interested in learning electron dynamics +calculations in isolated systems, please look into these exercises. In +SALMON, we usually calculate the ground state solution first using a +static density functional theory (DFT). This is +illustrated in :any:`Exercise-1 `. +After finishing the ground state calculation, two exercises of electron +dynamics calculations based on time-dependent density functional theory (TDDFT) +are prepared. +:any:`Exercise-2 ` +illustrates the calculation of linear optical responses in real time, +obtaining polarizability and photoabsorption of the molecule. +:any:`Exercise-3 ` +illustrates the calculation of electron dynamics in the molecule under a +pulsed electric field. + +Next 3 exercises (Exercise-4 ~ 6) are for a crystalline solid, silicon. +If you are interested in learning electron dynamics calculations in +extended periodic systems, please look into these exercises. +:any:`Exercise-4 ` +illustrates the ground state calculation of the crystalline silicon based on DFT. +:any:`Exercise-5 ` +illustrates the calculation of linear response properties of the crystalline +silicon based on TDDFT to obtain the dielectric function. +:any:`Exercise-6 ` +illustrates the calculation of electron dynamics in the crystalline +silicon induced by a pulsed electric field. + +Exercise-7 is for a simultaneous calculation of the propagation +of a pulsed light and electronic motion in a bulk silicon, +coupling Maxwell equations for the +electromagnetic fields of the pulsed light and the electron dynamics in +the unit cells based on TDDFT. This calculation is quite time-consuming and is +recommended to execute using massively parallel supercomputers. +:any:`Exercise-7 ` +illustrates the calculation of a linearly polarized pulsed light +irradiating normally on a surface of a bulk silicon. + +Next 2 exercises (Exercise-8 ~ 9) are for geometry optimization based on DFT and +Ehrenfest molecular dynamics based on TDDFT +for an isolated molecule, acetylene C2H2. +:any:`Exercise-8 ` +illustrates the geometry optimization in the ground state. +:any:`Exercise-9 ` +illustrates the Ehrenfest molecular dynamics induced by a pulsed electric field. + +Next 2 exercises (Exercise-10 ~ 11) are for a macroscopic light propagation through +a metallic nanosphere solving Maxwell equations. +The optical response of the nanoparticle is described by a dielectric function. +Finite-Difference Time-Domain (FDTD) method is used to calculated the three-dimensional +light propagation. +:any:`Exercise-10 ` illustrates the calculation of absorption-, scattering-, +and extinction-cross-sections for an isolated Au nanoparticle. +:any:`Exercise-11 ` illustrates the calculation of absorption-, reflection-, +and transmission-rates for a metasurface in which Au nanoparticles are periodically arrayed +in two-dimension. + +Input files of exercises are included in SALMON, in the directory +``SALMON/samples/exercise_##_/``. + +C2H2 (isolated molecules) +------------------------- + +.. _exercise-1: + +Exercise-1: Ground state of C2H2 molecule +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In this exercise, we learn the calculation of the ground state +of acetylene (C2H2) molecule, solving the static Kohn-Sham equation. +This exercise will be useful to learn how to set up calculations in +SALMON for any isolated systems such as molecules and nanoparticles. + +Acetylene molecule is a linear chain molecule composed of two Carbon atoms +and two Hydrogen atoms. + + .. image:: images/exc1/acetylene.png + :scale: 20% + +In SALMON, we use a three-dimensional (3D) uniform grid system +to express physical quantities such as electron orbitals. + + .. image:: images/exc1/acetylene_grid.png + :scale: 20% + +Input files +^^^^^^^^^^^ + +To run the code, following files in the directory ``SALMON/samples/exercise_01_C2H2_gs/`` are used: + ++-----------------------------------+-----------------------------------+ +| file name | description | ++-----------------------------------+-----------------------------------+ +| *C2H2_gs.inp* | input file that contains input | +| | keywords and their values | ++-----------------------------------+-----------------------------------+ +| *C_rps.dat* | pseodupotential file for carbon | +| | atom | ++-----------------------------------+-----------------------------------+ +| *H_rps.dat* | pseudopotential file for hydrogen | +| | atom | ++-----------------------------------+-----------------------------------+ + +Pseudopotential files are needed for two elements, Carbon (C) and Hydrogen (H). +The pseudopoential depends on the angular momentum, and looks as follows (for Carbon). + + .. image:: images/exc1/C_rps_pot.png + :scale: 40% + + +In the input file ``C2H2_gs.inp``, input keywords are specified. +Most of them are mandatory to execute the ground state calculation. +This will help you to prepare an input file for other systems that you +want to calculate. A complete list of the input keywords that can be +used in the input file can be found in +:any:`List of input keywords `. + +:: + + !########################################################################################! + ! Excercise 01: Ground state of C2H2 molecule ! + !----------------------------------------------------------------------------------------! + ! * The detail of this excercise is explained in our manual(see chapter: 'Exercises'). ! + ! The manual can be obtained from: https://salmon-tddft.jp/documents.html ! + ! * Input format consists of group of keywords like: ! + ! &group ! + ! input keyword = xxx ! + ! / ! + ! (see chapter: 'List of input keywords' in the manual) ! + !----------------------------------------------------------------------------------------! + ! * Conversion from unit_system = 'a.u.' to 'A_eV_fs': ! + ! Length: 1 [a.u.] = 0.52917721067 [Angstrom] ! + ! Energy: 1 [a.u.] = 27.21138505 [eV] ! + ! Time : 1 [a.u.] = 0.02418884326505 [fs] ! + !########################################################################################! + + &calculation + !type of theory + theory = 'dft' + / + +| :any:`theory ` specifies which theoretical method is used in the calculation. + +:: + + &control + !common name of output files + sysname = 'C2H2' + / + +| :any:`sysname ` is a prefix for filenames of output files. + +:: + + &units + !units used in input and output files + unit_system = 'A_eV_fs' + / + +| :any:`unit_system ` specifies which unit system is used in the input and output files. + +:: + + &system + !periodic boundary condition + yn_periodic = 'n' + + !number of elements, atoms, electrons and states(orbitals) + nelem = 2 + natom = 4 + nelec = 10 + nstate = 6 + / + +| :any:`yn_periodic ` specifies whether or not periodic boundary condition is applied. +| :any:`nelem ` is the number of elements in the system. +| :any:`natom ` is the number of atoms in the system. +| :any:`nelec ` is the number of electrons in the system. +| :any:`nstate ` is the number of orbitals that are used in the calculation. + +:: + + &pseudo + !name of input pseudo potential file + file_pseudo(1) = './C_rps.dat' + file_pseudo(2) = './H_rps.dat' + + !atomic number of element + izatom(1) = 6 + izatom(2) = 1 + + !angular momentum of pseudopotential that will be treated as local + lloc_ps(1) = 1 + lloc_ps(2) = 0 + !--- Caution ---------------------------------------! + ! Indices must correspond to those in &atomic_coor. ! + !---------------------------------------------------! + / + +| :any:`file_pseudo(n) ` specifies the filename of the pseudopotential file of the n-th element. +| :any:`izatom(n) ` is the atomic number of the n-th element. +| :any:`lloc_ps(n) ` specifies which angular momentum component is chosen as the local potential for the n-th element. + +:: + + &functional + !functional('PZ' is Perdew-Zunger LDA: Phys. Rev. B 23, 5048 (1981).) + xc = 'PZ' + / + +| :any:`xc ` specifies the exchange-correlation potential to be used in the calculation. + +:: + + &rgrid + !spatial grid spacing(x,y,z) + dl(1:3) = 0.25d0, 0.25d0, 0.25d0 + + !number of spatial grids(x,y,z) + num_rgrid(1:3) = 64, 64, 64 + / + +| :any:`dl(i) ` specifies the spatial grid spacing in i-th direction. +| :any:`num_rgrid(i) ` specifies the number of grid points in i-th direction. + +:: + + &scf + !maximum number of scf iteration and threshold of convergence + nscf = 300 + threshold = 1.0d-9 + / + +| :any:`nscf ` specifies the maximum number of SCF iterations. +| :any:`threshold ` specifies the threshold to judge the convergence. + +:: + + &analysis + !output of all orbitals, density, + !density of states, projected density of states, + !and electron localization function + yn_out_psi = 'y' + yn_out_dns = 'y' + yn_out_dos = 'y' + yn_out_pdos = 'y' + yn_out_elf = 'y' + / + +| :any:`yn_out_psi `, :any:`yn_out_dns `, :any:`yn_out_dos `, :any:`yn_out_pdos `, :any:`yn_out_elf ` specify output files that are generated after the calculation. + +:: + + &atomic_coor + !cartesian atomic coodinates + 'C' 0.000000 0.000000 0.599672 1 + 'H' 0.000000 0.000000 1.662257 2 + 'C' 0.000000 0.000000 -0.599672 1 + 'H' 0.000000 0.000000 -1.662257 2 + !--- Format ---------------------------------------------------! + ! 'symbol' x y z index(correspond to that of pseudo potential) ! + !--------------------------------------------------------------! + / + +| :any:`&atomic_coor <&atomic_coor>` specifies spatial coordinates of atoms. + +Execusion +^^^^^^^^^ + +In a multiprocess environment, calculation will be executed as:: + + $ mpiexec -n NPROC salmon < C2H2_gs.inp > C2H2_gs.out + +where NPROC is the number of MPI processes. A standard output will be stored in the file ``C2H2_gs.out``. + +.. _output-files-1: + +Output files +^^^^^^^^^^^^ + +After the calculation, following output files and a directory are created in the +directory that you run the code in addition to the standard output file, + ++-------------------------------------+-----------------------------------+ +| name | description | ++-------------------------------------+-----------------------------------+ +| *C2H2_info.data* | information on ground state | +| | solution | ++-------------------------------------+-----------------------------------+ +| *C2H2_eigen.data* | orbital energies | ++-------------------------------------+-----------------------------------+ +| *C2H2_k.data* | k-point distribution | +| | (for isolated systems, only | +| | gamma point is described) | ++-------------------------------------+-----------------------------------+ +| *data_for_restart* | directory where files used in | +| | the real-time calculation are | +| | contained | ++-------------------------------------+-----------------------------------+ +| *psi_ob1.cube*, *psi_ob2.cube*, ... | electron orbitals | ++-------------------------------------+-----------------------------------+ +| *dns.cube* | a cube file for electron density | ++-------------------------------------+-----------------------------------+ +| *dos.data* | density of states | ++-------------------------------------+-----------------------------------+ +| *pdos1.data*, *pdos2.data*, ... | projected density of states | ++-------------------------------------+-----------------------------------+ +| *elf.cube* | electron localization function | +| | (ELF) | ++-------------------------------------+-----------------------------------+ +| *PS_C_KY_n.dat* | information on pseodupotential | +| | file for carbon atom | ++-------------------------------------+-----------------------------------+ +| *PS_H_KY_n.dat* | information on pseodupotential | +| | file for hydrogen atom | ++-------------------------------------+-----------------------------------+ + +| You may download the above files (zipped file, except for the directory *data_for_restart*) from: +| https://salmon-tddft.jp/webmanual/v_2_0_1/exercise_zip_files/01_C2H2_gs.zip + + +We first explain the standard output file. In the beginning of the file, input variables used in the calculation are shown. + +:: + + ############################################################################## + # SALMON: Scalable Ab-initio Light-Matter simulator for Optics and Nanoscience + # + # Version 2.0.1 + # + ############################################################################## + Libxc: [disabled] + theory= dft + use of real value orbitals = T + ====== + MPI distribution: + nproc_k : 1 + nproc_ob : 1 + nproc_rgrid : 1 1 2 + OpenMP parallelization: + number of threads : 256 + ......... + +After that, the SCF loop starts. At each iteration step, the total energy as well as +orbital energies and some other quantities are displayed. + +:: + + ----------------------------------------------- + iter= 1 Total Energy= -197.59254070 Gap= -20.17834599 Vh iter= 234 + 1 -29.9707 2 -28.3380 3 -13.0123 4 5.8457 + 5 -9.9213 6 -14.3326 + iter and int_x|rho_i(x)-rho_i-1(x)|dx/nelec = 1 0.31853198E+00 + Ne= 10.0000000000000 + ----------------------------------------------- + iter= 2 Total Energy= -280.97950515 Gap= -9.59770609 Vh iter= 247 + 1 -17.4334 2 -24.4941 3 -20.1872 4 0.8020 + 5 -3.4058 6 -8.7957 + iter and int_x|rho_i(x)-rho_i-1(x)|dx/nelec = 2 0.54493263E+00 + Ne= 10.0000000000000 + ----------------------------------------------- + iter= 3 Total Energy= -295.67034640 Gap= -6.90359156 Vh iter= 229 + 1 -16.0251 2 -19.7759 3 -17.6765 4 -0.9015 + 5 -2.9323 6 -7.8050 + iter and int_x|rho_i(x)-rho_i-1(x)|dx/nelec = 3 0.13010987E+00 + Ne= 10.0000000000000 + +When the convergence criterion is satisfied, the SCF calculation ends. + +:: + + ----------------------------------------------- + iter= 162 Total Energy= -339.69525272 Gap= 6.78870999 Vh iter= 1 + 1 -18.4106 2 -13.9966 3 -12.4163 4 -7.3386 + 5 -7.3386 6 -0.5498 + iter and int_x|rho_i(x)-rho_i-1(x)|dx/nelec = 162 0.50237787E-08 + Ne= 9.99999999999999 + ----------------------------------------------- + iter= 163 Total Energy= -339.69525269 Gap= 6.78870999 Vh iter= 1 + 1 -18.4106 2 -13.9966 3 -12.4163 4 -7.3386 + 5 -7.3386 6 -0.5498 + iter and int_x|rho_i(x)-rho_i-1(x)|dx/nelec = 163 0.69880308E-09 + Ne= 9.99999999999999 + #GS converged at 164 : 0.69880308E-09 + +Next, the force acting on ions and some other information related to orbital energies are shown. + +:: + + ===== force ===== + 1 -0.33652081E-05 0.16854696E-04 -0.59496450E+00 + 2 -0.59222259E-06 0.24915590E-05 0.57651725E+00 + 3 -0.37839836E-05 0.20304090E-04 0.59493028E+00 + 4 -0.86779607E-06 0.39560274E-05 -0.57651738E+00 + orbital energy information------------------------------- + Lowest occupied orbital -0.676576619015730 + Highest occupied orbital (HOMO) -0.269686750876529 + Lowest unoccupied orbital (LUMO) -2.020624936948345E-002 + Highest unoccupied orbital -2.020624936948345E-002 + HOMO-LUMO gap 0.249480501507045 + Physicaly upper bound of eps(omega) 0.656370369646246 + --------------------------------------------------------- + Lowest occupied orbital[eV] -18.4105868958642 + Highest occupied orbital (HOMO)[eV] -7.33855002098465 + Lowest unoccupied orbital (LUMO)[eV] -0.549840032009334 + Highest unoccupied orbital[eV] -0.549840032009334 + HOMO-LUMO gap[eV] 6.78870998897532 + Physicaly upper bound of eps(omega)[eV] 17.8607468638548 + --------------------------------------------------------- + writing restart data... + writing completed. + +In the directory ``data_for_restart``, files that will be used in the next-step +time evolution calculations are stored. + +Other output files include following information. + +**C2H2_info.data** + +Calculated orbital and total energies as well as parameters specified in +the input file are shown. + +**C2H2_eigen.data** + +Orbital energies. + +:: + + #esp: single-particle energies (eigen energies) + #occ: occupation numbers, io: orbital index + # 1:io, 2:esp[eV], 3:occ + +**C2H2_k.data** + +k-point distribution(for isolated systems, only gamma point is described). + +:: + + # ik: k-point index + # kx,ky,kz: Reduced coordinate of k-points + # wk: Weight of k-point + # 1:ik[none] 2:kx[none] 3:ky[none] 4:kz[none] 5:wk[none] + # coefficients (2*pi/a [a.u.]) in kx, ky, kz + +**psi_ob1.cube, psi_ob2.cube, ...** + +Cube files for electron orbitals. The number in the filename indicates +the index of the orbital. Atomic unit is adopted in all cube files. + +**dns.cube** + +A cube file for electron density. + +**dos.data** + +A file for density of states. The units used in this file are affected +by the input parameter, ``unit_system`` in ``&unit``. + +**elf.cube** + +A cube file for electron localization function (ELF). + +We show several image that are created from the output files. + +* **Highest occupied molecular orbital (HOMO)** + + The output files ``psi_ob1.cube``, ``psi_ob2.cube``, ... are used to create the image. + + .. image:: images/exc1/HOMO.png + :scale: 20% + +* **Electron density** + + The output files ``dns.cube``, ... are used to create the image. + + .. image:: images/exc1/Dns.png + :scale: 20% + +* **Electron localization function** + + The output files ``elf.cube``, ... are used to create the image. + + .. image:: images/exc1/Elf.png + :scale: 20% + + +.. _exercise-2: + +Exercise-2: Polarizability and photoabsorption of C2H2 molecule +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In this exercise, we learn the linear response calculation in the +acetylene (C2H2) molecule, solving the time-dependent Kohn-Sham +equation. The linear response calculation provides the polarizability +and the oscillator strength distribution of the molecule. This exercise +should be carried out after finishing the ground state calculation that +was explained in :any:`Exercise-1 `. + +Polarizability :math:`\alpha_{\mu \nu}(t)` is the basic quantity +that characterizes optical responses of molecules and nano-particles, +where :math:`\mu, \nu` indicate Cartesian components, :math:`\mu, \nu = x,y,z`. +The polarizability :math:`\alpha_{\mu \nu}(t)` relates the :math:`\mu` +component of the electric dipole moment at time :math:`t`, :math:`p_{\mu}(t)`, +with the :math:`\nu` component of the electric field at time :math:`t'`, + +:math:`p_{\mu}(t) = \sum_{\nu=x,y,z} \alpha_{\mu \nu}(t-t') E_{\nu}(t').` + +We introduce a frequency-dependent polarizability by the time-frequency +Fourier transformation of the polarizability, + +:math:`\tilde \alpha_{\mu \nu}(\omega) = \int dt e^{i\omega t} \alpha_{\mu \nu}(t).` + +The imaginary part of the frequency-dependent polarizability is +related to the photoabsorption cross section :math:`\sigma(\omega)` by + +:math:`\sigma(\omega) = \frac{4\pi \omega}{c} \frac{1}{3} \sum_{\mu=x,y,z} {\rm Im} \tilde \alpha_{\mu \mu}(\omega).` + +The photoabsorption cross section is also related to the oscillator strength +distribution by + +:math:`\sigma(\omega) = \frac{2\pi^2 e^2}{mc} \frac{df(\omega)}{d\omega}.` + +In SALMON, the polarizability is calculated in time domain. +First the ground state orbital :math:`\phi_i(\mathbf{r})` that +satisfies the Kohn-Sham equation, + +:math:`H_{\rm KS} \phi_i(\mathbf{r}) = \epsilon_i \phi_i(\mathbf{r}),` + +is prepared. Then an impulsive force given by the potential + +:math:`V_{\rm ext}(\mathbf{r},t) = I \delta(t) z,` + +is applied to all electrons in the C2H2 molecule along the molecular axis +which we take :math:`z` axis. :math:`I` is the magnitude of the impulse, +and :math:`\delta(t)` is the Dirac's delta function. +The orbital is distorted by the impulsive force at :math:`t=0`. +Immediately after the impulse is applied, the orbital becomes + +:math:`\psi_i(\mathbf{r},t=0_+) = e^{iIz/\hbar} \phi_i(\mathbf{r}).` + +After the impulsive force is applied at :math:`t=0`, +a time evolution calculation is carried out without any external fields, + +:math:`i\hbar \frac{\partial}{\partial t} \psi_i(\mathbf{r},t) = H_{\rm KS}(t) \psi_i(\mathbf{r},t).` + +During the time evolution, the electric dipole moment given by + +:math:`p_z(t) = \int d\mathbf{r} (-ez) \sum_i \vert \psi_i(\mathbf{r},t) \vert^2,` + +is monitored. After the time evolution calculation, +a time-frequency Fourier transformation is carried out for the +electric dipole moment to obtain the frequency-dependent polarizability by + +:math:`\tilde \alpha_{zz}(\omega) = - \frac{e}{I} \int dt e^{i\omega t} p_z(t).` + +.. _input-files-1: + +Input files +^^^^^^^^^^^ + +To run the code, following files are necessary: + ++-----------------------------------+-----------------------------------+ +| file name | description | ++-----------------------------------+-----------------------------------+ +| *C2H2_response.inp* | input file that contains input | +| | keywords and their values | ++-----------------------------------+-----------------------------------+ +| *C_rps.dat* | pseodupotential file for carbon | +| | atom | ++-----------------------------------+-----------------------------------+ +| *H_rps.dat* | pseudopotential file for hydrogen | +| | atom | ++-----------------------------------+-----------------------------------+ +| *restart* | | directory created in the ground | +| | state calculation | +| | | (rename the directory from | +| | *data_for_restart* to *restart*)| ++-----------------------------------+-----------------------------------+ + +First three files are prepared in the directory ``SALMON/samples/exercise_02_C2H2_lr/``. +The file ``C2H2_rt_response.inp`` that contains input keywords and their values. +The pseudopotential files should be the same as those used in the ground state calculation. +In the directory ``restart``, those files created in the ground state calculation and stored +in the directory ``data_for_restart`` are included. +Therefore, copy the directory as ``cp -R data_for_restart restart`` +if you calculate at the same directory as you did the ground state calculation. + + +In the input file ``C2H2_rt_response.inp``, input keywords are specified. +Most of them are mandatory to execute the linear response calculation. +This will help you to prepare the input file for other systems that you +want to calculate. A complete list of the input keywords that can be +used in the input file can be found in +:any:`List of input keywords `. + + +:: + + !########################################################################################! + ! Excercise 02: Polarizability and photoabsorption of C2H2 molecule ! + !----------------------------------------------------------------------------------------! + ! * The detail of this excercise is explained in our manual(see chapter: 'Exercises'). ! + ! The manual can be obtained from: https://salmon-tddft.jp/documents.html ! + ! * Input format consists of group of keywords like: ! + ! &group ! + ! input keyword = xxx ! + ! / ! + ! (see chapter: 'List of input keywords' in the manual) ! + !----------------------------------------------------------------------------------------! + ! * Conversion from unit_system = 'a.u.' to 'A_eV_fs': ! + ! Length: 1 [a.u.] = 0.52917721067 [Angstrom] ! + ! Energy: 1 [a.u.] = 27.21138505 [eV] ! + ! Time : 1 [a.u.] = 0.02418884326505 [fs] ! + !----------------------------------------------------------------------------------------! + ! * Copy the ground state data directory('data_for_restart') (or make symbolic link) ! + ! calculated in 'samples/exercise_01_C2H2_gs/' and rename the directory to 'restart/' ! + ! in the current directory. ! + !########################################################################################! + + &calculation + !type of theory + theory = 'tddft_response' + / + +| :any:`theory ` specifies which theoretical method is used in the calculation. + +:: + + &control + !common name of output files + sysname = 'C2H2' + / + +| :any:`sysname ` is a prefix for filenames of output files. + +:: + + &units + !units used in input and output files + unit_system = 'A_eV_fs' + / + +| :any:`unit_system ` specifies which unit system is used in the input and output files. + +:: + + &system + !periodic boundary condition + yn_periodic = 'n' + + !number of elements, atoms, electrons and states(orbitals) + nelem = 2 + natom = 4 + nelec = 10 + nstate = 6 + / + +| :any:`yn_periodic ` specifies whether or not periodic boundary condition is applied. +| :any:`nelem ` is the number of elements in the system. +| :any:`natom ` is the number of atoms in the system. +| :any:`nelec ` is the number of electrons in the system. +| :any:`nstate ` is the number of orbitals that are used in the calculation. + +:: + + &pseudo + !name of input pseudo potential file + file_pseudo(1) = './C_rps.dat' + file_pseudo(2) = './H_rps.dat' + + !atomic number of element + izatom(1) = 6 + izatom(2) = 1 + + !angular momentum of pseudopotential that will be treated as local + lloc_ps(1) = 1 + lloc_ps(2) = 0 + !--- Caution ---------------------------------------! + ! Indices must correspond to those in &atomic_coor. ! + !---------------------------------------------------! + / + +| :any:`file_pseudo(n) ` specifies the filename of the pseudopotential file of the n-th element. +| :any:`izatom(n) ` is the atomic number of the n-th element. +| :any:`lloc_ps(n) ` specifies which angular momentum component is chosen as the local potential for the n-th element. + +:: + + &functional + !functional('PZ' is Perdew-Zunger LDA: Phys. Rev. B 23, 5048 (1981).) + xc = 'PZ' + / + +| :any:`xc ` specifies the exchange-correlation potential to be used in the calculation. + +:: + + &rgrid + !spatial grid spacing(x,y,z) + dl(1:3) = 0.25d0, 0.25d0, 0.25d0 + + !number of spatial grids(x,y,z) + num_rgrid(1:3) = 64, 64, 64 + / + +| :any:`dl(i) ` specifies the spatial grid spacing in i-th direction. +| :any:`num_rgrid(i) ` specifies the number of grid points in i-th direction. + +:: + + &tgrid + !time step size and number of time grids(steps) + dt = 1.25d-3 + nt = 5000 + / + +| :any:`dt` specifies the time step. +| :any:`nt` is the number of time steps for the time propagation. + +:: + + &emfield + !envelope shape of the incident pulse('impulse': impulsive field) + ae_shape1 = 'impulse' + + !polarization unit vector(real part) for the incident pulse(x,y,z) + epdir_re1(1:3) = 0.0d0, 0.0d0, 1.0d0 + !--- Caution ---------------------------------------------------------! + ! Definition of the incident pulse is written in: ! + ! https://www.sciencedirect.com/science/article/pii/S0010465518303412 ! + !---------------------------------------------------------------------! + / + +| :any:`ae_shape1 ` specifies the envelope of the field. For a linear response calculation, ``as_shape1='impulse'`` is used. It indicates that a weak impulsive perturbation is applied at :math:`t=0`. +| :any:`epdir_re1(i) ` specifies the i-th component of the real part of the polarization unit vector. + +:: + + &analysis + !energy grid size and number of energy grids for output files + de = 1.0d-2 + nenergy = 3000 + / + +| :any:`de` specifies the energy grid size for frequency-domain analysis. +| :any:`nenergy` specifies the number of energy grid points for frequency-domain analysis. + +:: + + &atomic_coor + !cartesian atomic coodinates + 'C' 0.000000 0.000000 0.599672 1 + 'H' 0.000000 0.000000 1.662257 2 + 'C' 0.000000 0.000000 -0.599672 1 + 'H' 0.000000 0.000000 -1.662257 2 + !--- Format ---------------------------------------------------! + ! 'symbol' x y z index(correspond to that of pseudo potential) ! + !--------------------------------------------------------------! + / + +| :any:`&atomic_coor <&atomic_coor>` specifies spatial coordinates of atoms. + +Execusion +^^^^^^^^^ + +Before execusion, remember to copy the directory ``restart`` that is created in the ground +state calculation as ``data_for_restart`` in the present directory. +In a multiprocess environment, calculation will be executed as:: + + $ mpiexec -n NPROC salmon < C2H2_rt_response.inp > C2H2_rt_response.out + +where NPROC is the number of MPI processes. +A standard output will be stored in the file ``C2H2_rt_response.out``. + +.. _output-files-2: + +Output files +^^^^^^^^^^^^ + +After the calculation, following output files are created in the +directory that you run the code in addition to the standard output file, + ++-----------------------------------+-----------------------------------+ +| file name | description | ++-----------------------------------+-----------------------------------+ +| *C2H2_response.data* | polarizability and oscillator | +| | strength distribution as | +| | functions of energy | ++-----------------------------------+-----------------------------------+ +| *C2H2_rt.data* | | components of | +| | change of dipole moment | +| | (electrons/plus definition) | +| | | and total dipole moment | +| | (electrons/minus + ions/plus) | +| | as functions of time | ++-----------------------------------+-----------------------------------+ +| *C2H2_rt_energy.data* | total energy and electronic | +| | excitation energy | +| | as functions of time | ++-----------------------------------+-----------------------------------+ +| *PS_C_KY_n.dat* | information on pseodupotential | +| | file for carbon atom | ++-----------------------------------+-----------------------------------+ +| *PS_H_KY_n.dat* | information on pseodupotential | +| | file for hydrogen atom | ++-----------------------------------+-----------------------------------+ + +| You may download the above files (zipped file) from: +| https://salmon-tddft.jp/webmanual/v_2_0_1/exercise_zip_files/02_C2H2_lr.zip + +We first explain the standard output file. In the beginning of the file, +input variables used in the calculation are shown. + +:: + + ############################################################################## + # SALMON: Scalable Ab-initio Light-Matter simulator for Optics and Nanoscience + # + # Version 2.0.1 + ############################################################################## + Libxc: [disabled] + theory= tddft_response + + Total time step = 5000 + Time step[fs] = 1.250000000000000E-003 + Energy range = 3000 + Energy resolution[eV]= 1.000000000000000E-002 + Field strength[a.u.] = 1.000000000000000E-002 + use of real value orbitals = F + ====== + ......... + +After that, the time evolution loop starts. At every 10 iteration steps, +the time, dipole moments in three Cartesian directions, the total number +of electrons, the total energy, and the number of iterations solving +the Poisson equation are displayed. + +:: + + time-step time[fs] Dipole moment(xyz)[A] electrons Total energy[eV] iterVh + #---------------------------------------------------------------------- + 10 0.01250000 -0.56521137E-07 -0.28812833E-07 -0.25558983E-01 10.00000000 -339.68150366 34 + 20 0.02500000 -0.19835467E-06 -0.10147641E-06 -0.45169126E-01 9.99999999 -339.68147442 49 + 30 0.03750000 -0.37937911E-06 -0.19537418E-06 -0.57843871E-01 9.99999999 -339.68146891 45 + 40 0.05000000 -0.56465010E-06 -0.29324906E-06 -0.64072126E-01 9.99999999 -339.68146804 38 + 50 0.06250000 -0.73343753E-06 -0.38431758E-06 -0.65208422E-01 9.99999999 -339.68146679 25 + 60 0.07500000 -0.87559727E-06 -0.46276791E-06 -0.62464066E-01 9.99999999 -339.68146321 35 + 70 0.08750000 -0.98769124E-06 -0.52594670E-06 -0.56740338E-01 9.99999998 -339.68145535 20 + 80 0.10000000 -0.10701350E-05 -0.57309375E-06 -0.48483747E-01 9.99999998 -339.68144840 40 + 90 0.11250000 -0.11253992E-05 -0.60455485E-06 -0.38296037E-01 9.99999998 -339.68144186 21 + +Explanations of other output files are given below: + +**C2H2_rt.data** + +Results of time evolution calculation for vector potential, electric field, and dipole moment. +In the first several lines, explanations of included data are given. + +:: + + # Real time calculation: + # Ac_ext: External vector potential field + # E_ext: External electric field + # Ac_tot: Total vector potential field + # E_tot: Total electric field + # ddm_e: Change of dipole moment (electrons/plus definition) + # dm: Total dipole moment (electrons/minus + ions/plus) + # 1:Time[fs] 2:Ac_ext_x[fs*V/Angstrom] 3:Ac_ext_y[fs*V/Angstrom] 4:Ac_ext_z[fs*V/Angstrom] + # 5:E_ext_x[V/Angstrom] 6:E_ext_y[V/Angstrom] 7:E_ext_z[V/Angstrom] + # 8:Ac_tot_x[fs*V/Angstrom] 9:Ac_tot_y[fs*V/Angstrom] 10:Ac_tot_z[fs*V/Angstrom] + # 11:E_tot_x[V/Angstrom] 12:E_tot_y[V/Angstrom] 13:E_tot_z[V/Angstrom] + # 14:ddm_e_x[Angstrom] 15:ddm_e_y[Angstrom] 16:ddm_e_z[Angstrom] 17:dm_x[Angstrom] + # 18:dm_y[Angstrom] 19:dm_z[Angstrom] + +Using first column (time in femtosecond) and 19th column (dipole moment in :math:`z` direction), +the following graph can be drawn. + + .. image:: images/exc2/exc2-dipole.png + :scale: 40% + +The dipole moment shows oscillations in femtosecond time scale that reflec electronic excitations. + +**C2H2_response.data** + +Time-frequency Fourier transformation of the dipole moment gives +the polarizability and the strength function. + +:: + + # Fourier-transform spectra: + # alpha: Polarizability + # df/dE: Strength function + # 1:Energy[eV] 2:Re(alpha_x)[Augstrom^2/V] 3:Re(alpha_y)[Augstrom^2/V] + # 4:Re(alpha_z)[Augstrom^2/V] 5:Im(alpha_x)[Augstrom^2/V] 6:Im(alpha_y)[Augstrom^2/V] + # 7:Im(alpha_z)[Augstrom^2/V] 8:df_x/dE[none] 9:df_y/dE[none] 10:df_z/dE[none] + +Using first column (energy in electron-volt) and 10th column (oscillator strength distribution in :math:`z` direction), +the following graph can be drawn. + + .. image:: images/exc2/exc2-response.png + :scale: 40% + +There appears many peaks above the HOMO-LUMO gap energy. +The strong excitation appears at around 9.3 eV. + +**C2H2_rt_energy.data** + +Energies are stored as functions of time. + +:: + + # Real time calculation: + # Eall: Total energy + # Eall0: Initial energy + # 1:Time[fs] 2:Eall[eV] 3:Eall-Eall0[eV] + +*Eall* and *Eall-Eall0* are total energy and electronic excitation energy, respectively. + +.. _exercise-3: + +Exercise-3: Electron dynamics in C2H2 molecule under a pulsed electric field +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In this exercise, we learn the calculation of the electron dynamics in +the acetylene (C2H2) molecule under a pulsed electric field, solving the +time-dependent Kohn-Sham equation. As outputs of the calculation, such +quantities as the total energy and the electric dipole moment of the +system as functions of time are calculated. This tutorial should be +carried out after finishing the ground state calculation that was +explained in :any:`Exercise-1 `. + +In the calculation, a pulsed electric field specified by the following +vector potential will be used, + +:math:`A(t) = - \frac{E_0}{\omega} \hat z \cos^2 \frac{\pi}{T} \left( t - \frac{T}{2} \right) \sin \omega \left( t - \frac{T}{2} \right), \hspace{5mm} (0 < t < T).` + + +The electric field is given by :math:`E(t) = -(1/c)(dA(t)/dt)`. +The parameters that characterize the pulsed field such as the amplitude :math:`E_0`, +frequency :math:`\omega`, pulse duration :math:`T`, polarization direction :math:`\hat z`, +are specified in the input file. +In the time dependent Kohn-Sham equation, the external field is included as +the scalar potential, :math:`V_{\rm ext}(\mathbf{r},t) = eE(t)z`. + +.. _input-files-2: + +Input files +^^^^^^^^^^^ + +To run the code, following files are necessary: + ++-----------------------------------+---------------------------------------------------------------+ +| file name | description | ++-----------------------------------+---------------------------------------------------------------+ +| *C2H2_rt_pulse.inp* | input file that contain input | +| | keywords and their values. | ++-----------------------------------+---------------------------------------------------------------+ +| *C_rps.dat* | pseodupotential file for carbon | ++-----------------------------------+---------------------------------------------------------------+ +| *H_rps.dat* | pseudopotential file for hydrogen | ++-----------------------------------+---------------------------------------------------------------+ +| *restart* | | directory created in the ground state calculation | +| | | (rename the directory from *data_for_restart* to *restart*) | ++-----------------------------------+---------------------------------------------------------------+ + +First three files are prepared in the directory ``SALMON/samples/exercise_03_C2H2_rt/``. +The file ``C2H2_rt_pulse.inp`` that contains input keywords and their values. +The pseudopotential files should be the same as those used in the ground state calculation. +In the directory ``restart``, those files created in the ground state calculation and stored +in the directory ``data_for_restart`` are included. +Therefore, copy the directory as ``cp -R data_for_restart restart`` +if you calculate at the same directory as you did the ground state calculation. + +In the input file ``C2H2_rt_pulse.inp``, input keywords are specified. +Most of them are mandatory to execute the calculation of +electron dynamics induced by a pulsed electric field. +This will help you to prepare the input file for other systems and other +pulsed electric fields that you want to calculate. A complete list of +the input keywords that can be used in the input file can be found in +:any:`List of input keywords `. + +:: + + !########################################################################################! + ! Excercise 03: Electron dynamics in C2H2 molecule under a pulsed electric field ! + !----------------------------------------------------------------------------------------! + ! * The detail of this excercise is explained in our manual(see chapter: 'Exercises'). ! + ! The manual can be obtained from: https://salmon-tddft.jp/documents.html ! + ! * Input format consists of group of keywords like: ! + ! &group ! + ! input keyword = xxx ! + ! / ! + ! (see chapter: 'List of input keywords' in the manual) ! + !----------------------------------------------------------------------------------------! + ! * Conversion from unit_system = 'a.u.' to 'A_eV_fs': ! + ! Length: 1 [a.u.] = 0.52917721067 [Angstrom] ! + ! Energy: 1 [a.u.] = 27.21138505 [eV] ! + ! Time : 1 [a.u.] = 0.02418884326505 [fs] ! + !----------------------------------------------------------------------------------------! + ! * Copy the ground state data directory('data_for_restart') (or make symbolic link) ! + ! calculated in 'samples/exercise_01_C2H2_gs/' and rename the directory to 'restart/' ! + ! in the current directory. ! + !########################################################################################! + + &calculation + !type of theory + theory = 'tddft_pulse' + / + +| :any:`theory ` specifies which theoretical method is used in the calculation. + +:: + + &control + !common name of output files + sysname = 'C2H2' + / + +| :any:`sysname ` is a prefix for filenames of output files. + +:: + + &units + !units used in input and output files + unit_system = 'A_eV_fs' + / + +| :any:`unit_system ` specifies which unit system is used in the input and output files. + +:: + + &system + !periodic boundary condition + yn_periodic = 'n' + + !number of elements, atoms, electrons and states(orbitals) + nelem = 2 + natom = 4 + nelec = 10 + nstate = 6 + / + +| :any:`yn_periodic ` specifies whether or not periodic boundary condition is applied. +| :any:`nelem ` is the number of elements in the system. +| :any:`natom ` is the number of atoms in the system. +| :any:`nelec ` is the number of electrons in the system. +| :any:`nstate ` is the number of orbitals that are used in the calculation. + +:: + + &pseudo + !name of input pseudo potential file + file_pseudo(1) = './C_rps.dat' + file_pseudo(2) = './H_rps.dat' + + !atomic number of element + izatom(1) = 6 + izatom(2) = 1 + + !angular momentum of pseudopotential that will be treated as local + lloc_ps(1) = 1 + lloc_ps(2) = 0 + !--- Caution ---------------------------------------! + ! Indices must correspond to those in &atomic_coor. ! + !---------------------------------------------------! + / + +| :any:`file_pseudo(n) ` specifies the filename of the pseudopotential file of the n-th element. +| :any:`izatom(n) ` is the atomic number of the n-th element. +| :any:`lloc_ps(n) ` specifies which angular momentum component is chosen as the local potential for the n-th element. + +:: + + &functional + !functional('PZ' is Perdew-Zunger LDA: Phys. Rev. B 23, 5048 (1981).) + xc = 'PZ' + / + +| :any:`xc ` specifies the exchange-correlation potential to be used in the calculation. + +:: + + &rgrid + !spatial grid spacing(x,y,z) + dl(1:3) = 0.25d0, 0.25d0, 0.25d0 + + !number of spatial grids(x,y,z) + num_rgrid(1:3) = 64, 64, 64 + / + +| :any:`dl(i) ` specifies the spatial grid spacing in i-th direction. +| :any:`num_rgrid(i) ` specifies the number of grid points in i-th direction. + +:: + + &tgrid + !time step size and number of time grids(steps) + dt = 1.25d-3 + nt = 5000 + / + +| :any:`dt` specifies the time step. +| :any:`nt` is the number of time steps for the time propagation. + +:: + + &emfield + !envelope shape of the incident pulse('Ecos2': cos^2 type envelope for scalar potential) + ae_shape1 = 'Acos2' + + !peak intensity(W/cm^2) of the incident pulse + I_wcm2_1 = 5.00d13 + + !duration of the incident pulse + tw1 = 6.00d0 + + !mean photon energy(average frequency multiplied by the Planck constant) of the incident pulse + omega1 = 3.10d0 + + !polarization unit vector(real part) for the incident pulse(x,y,z) + epdir_re1(1:3) = 0.00d0, 0.00d0, 1.00d0 + !--- Caution ---------------------------------------------------------! + ! Definition of the incident pulse is written in: ! + ! https://www.sciencedirect.com/science/article/pii/S0010465518303412 ! + !---------------------------------------------------------------------! + / + +| :any:`ae_shape1 ` specifies the envelope of the field. +| :any:`I_wcm2_1 ` specify the intensity of the pulse in unit of W/cm\ :sup:`2`\. +| :any:`tw1 ` specifies the duration of the pulse. +| :any:`omega1 ` specifies the mean photon energy of the pulse. +| :any:`epdir_re1(i) ` specifies the i-th component of the real part of the polarization unit vector. + +:: + + &analysis + !energy grid size and number of energy grids for output files + de = 1.0d-2 + nenergy = 10000 + / + +| :any:`de` specifies the energy grid size for frequency-domain analysis. +| :any:`nenergy` specifies the number of energy grid points for frequency-domain analysis. + +:: + + &atomic_coor + !cartesian atomic coodinates + 'C' 0.000000 0.000000 0.599672 1 + 'H' 0.000000 0.000000 1.662257 2 + 'C' 0.000000 0.000000 -0.599672 1 + 'H' 0.000000 0.000000 -1.662257 2 + !--- Format ---------------------------------------------------! + ! 'symbol' x y z index(correspond to that of pseudo potential) ! + !--------------------------------------------------------------! + / + +| :any:`&atomic_coor <&atomic_coor>` specifies spatial coordinates of atoms. + +Execusion +^^^^^^^^^ + +Before execusion, remember to copy the directory ``restart`` that is created in the ground +state calculation as ``data_for_restart`` in the present directory. +In a multiprocess environment, calculation will be executed as:: + + $ mpiexec -n NPROC salmon < C2H2_rt_pulse.inp > C2H2_rt_pulse.out + +where NPROC is the number of MPI processes. +A standard output will be stored in the file ``C2H2_rt_pulse.out``. + + +.. _output-files-3: + +Output files +^^^^^^^^^^^^ + +After the calculation, following output files are created in the +directory that you run the code in addition to the standard output file, + ++-----------------------------------+-----------------------------------+ +| file name | description | ++-----------------------------------+-----------------------------------+ +| *C2H2_pulse.data* | time-frequency Fourier transform | +| | of dipole moment | ++-----------------------------------+-----------------------------------+ +| *C2H2_rt.data* | | components of | +| | change of dipole moment | +| | (electrons/plus definition) | +| | | and total dipole moment | +| | (electrons/minus + ions/plus) | +| | as functions of time | ++-----------------------------------+-----------------------------------+ +| *C2H2_rt_energy.data* | total energy and electronic | +| | excitation energy | +| | as functions of time | ++-----------------------------------+-----------------------------------+ +| *PS_C_KY_n.dat* | information on pseodupotential | +| | file for carbon atom | ++-----------------------------------+-----------------------------------+ +| *PS_H_KY_n.dat* | information on pseodupotential | +| | file for hydrogen atom | ++-----------------------------------+-----------------------------------+ + +| You may download the above files (zipped file) from: +| https://salmon-tddft.jp/webmanual/v_2_0_1/exercise_zip_files/03_C2H2_rt.zip + +We first explain the standard output file. In the beginning of the file, input variables +used in the calculation are shown. + +:: + + ############################################################################## + # SALMON: Scalable Ab-initio Light-Matter simulator for Optics and Nanoscience + # + # Version 2.0.1 + ############################################################################## + Libxc: [disabled] + theory= tddft_pulse + + Total time step = 5000 + Time step[fs] = 1.250000000000000E-003 + Energy range = 10000 + Energy resolution[eV]= 1.000000000000000E-002 + Laser frequency = 3.10[eV] + Pulse width of laser= 6.00000000[fs] + Laser intensity = 0.50000000E+14[W/cm^2] + use of real value orbitals = F + ====== + ........ + +After that, the time evolution loop starts. At every 10 iteration steps, +the time, dipole moments in three Cartesian directions, the total number of electrons, +the total energy, and the number of iterations solving the Poisson equation +are displayed. + +:: + + time-step time[fs] Dipole moment(xyz)[A] electrons Total energy[eV] iterVh + #---------------------------------------------------------------------- + 10 0.01250000 -0.57275542E-07 -0.29197105E-07 -0.74600728E-06 10.00000000 -339.69524047 1 + 20 0.02500000 -0.20616352E-06 -0.10537273E-06 -0.10256205E-04 10.00000000 -339.69524348 1 + 30 0.03750000 -0.40063325E-06 -0.20597522E-06 -0.47397133E-04 10.00000000 -339.69524090 3 + 40 0.05000000 -0.59093535E-06 -0.30630513E-06 -0.13774845E-03 10.00000000 -339.69524287 1 + 50 0.06250000 -0.75588343E-06 -0.39552925E-06 -0.31097825E-03 10.00000000 -339.69523949 5 + 60 0.07500000 -0.89221538E-06 -0.47142217E-06 -0.59735355E-03 10.00000000 -339.69523784 11 + 70 0.08750000 -0.99769538E-06 -0.53192187E-06 -0.10253308E-02 10.00000000 -339.69523285 5 + 80 0.10000000 -0.10738281E-05 -0.57676878E-06 -0.16195168E-02 9.99999999 -339.69522482 19 + 90 0.11250000 -0.11250289E-05 -0.60722757E-06 -0.23985719E-02 9.99999999 -339.69521092 2 + +Explanations of other output files are given below: + +**C2H2_rt.data** + +Results of time evolution calculation for vector potential, electric field, and dipole moment. +In the first several lines, explanations of data included data are given. + +:: + + # Real time calculation: + # Ac_ext: External vector potential field + # E_ext: External electric field + # Ac_tot: Total vector potential field + # E_tot: Total electric field + # ddm_e: Change of dipole moment (electrons/plus definition) + # dm: Total dipole moment (electrons/minus + ions/plus) + # 1:Time[fs] 2:Ac_ext_x[fs*V/Angstrom] 3:Ac_ext_y[fs*V/Angstrom] 4:Ac_ext_z[fs*V/Angstrom] + # 5:E_ext_x[V/Angstrom] 6:E_ext_y[V/Angstrom] 7:E_ext_z[V/Angstrom] + # 8:Ac_tot_x[fs*V/Angstrom] 9:Ac_tot_y[fs*V/Angstrom] 10:Ac_tot_z[fs*V/Angstrom] + # 11:E_tot_x[V/Angstrom] 12:E_tot_y[V/Angstrom] 13:E_tot_z[V/Angstrom] + # 14:ddm_e_x[Angstrom] 15:ddm_e_y[Angstrom] 16:ddm_e_z[Angstrom] 17:dm_x[Angstrom] + # 18:dm_y[Angstrom] 19:dm_z[Angstrom] + +The applied electric field is drawn using the first column (time in femtosecond) and the 7th column +(electric field in :math:`z` direction in Volt per Angstrom). + + .. image:: images/exc3/exc3-Efield.png + :scale: 40% + +The induced dipole moment is drawn using the first column (time in femtosecond) and 19th column +(dipole moment in :math:`z` direction). +It shows an oscillation similar to the applied electric field. However, the response is not linear +since the applied electric field is rather strong. + + .. image:: images/exc3/exc3-dipole.png + :scale: 40% + +**C2H2_pulse.data** + +Time-frequency Fourier transformation of the dipole moment. +In the first several lines, explanations of data included data are given. + +:: + + # Fourier-transform spectra: + # energy: Frequency + # dm: Dopile moment + # 1:energy[eV] 2:Re(dm_x)[fs*Angstrom] 3:Re(dm_y)[fs*Angstrom] 4:Re(dm_z)[fs*Angstrom] + # 5:Im(dm_x)[fs*Angstrom] 6:Im(dm_y)[fs*Angstrom] 7:Im(dm_z)[fs*Angstrom] + # 8:|dm_x|^2[fs^2*Angstrom^2] 9:|dm_y|^2[fs^2*Angstrom^2] 10:|dm_z|^2[fs^2*Angstrom^2] + +The spectrum of the induced dipole moment, :math:`|d(\omega)|^2` is shown in logarithmic scale as a function +of the energy, :math:`\hbar \omega`. High harmonic generations are visible in the spectrum. + + .. image:: images/exc3/exc3-spectrum.png + :scale: 40% + +**C2H2_rt_energy.data** + +Energies are stored as functions of time. +In the first several lines, explanations of data included data are given. + +:: + + # Real time calculation: + # Eall: Total energy + # Eall0: Initial energy + # 1:Time[fs] 2:Eall[eV] 3:Eall-Eall0[eV] + +*Eall* and *Eall-Eall0* are total energy and electronic excitation energy, respectively. +The figure below shows the electronic excitation energy as a function of time, +using the first column (time in femtosecond) and the 3rd column (*Eall-Eall0*). +Although the frequency is below the HOMO-LUMO gap energy, electronic excitations take +place because of nonlinear absorption process. + + .. image:: images/exc3/exc3-Eex.png + :scale: 40% + + +Additional exercise +^^^^^^^^^^^^^^^^^^^ + +If we change parameters of the applied electric field, we find a drastic change +in the electronic excitations. In the example below, we increase the intensity +from ``I_wcm2_1 = 5.00d13`` to ``I_wcm2_1 = 1.00d12`` and changes the frequency +from ``omega1 = 3.10d0`` to ``omega1 = 9.28d0``. The new frequency corresponds +to the resonant excitation energy seen in the linear response analysis shown in +in :any:`Exercise-2 `. + +The change in the input file is shown below. + +:: + + &emfield + !envelope shape of the incident pulse('Ecos2': cos^2 type envelope for scalar potential) + ae_shape1 = 'Acos2' + + !peak intensity(W/cm^2) of the incident pulse + I_wcm2_1 = 1.00d12 + + !duration of the incident pulse + tw1 = 6.00d0 + + !mean photon energy(average frequency multiplied by the Planck constant) of the incident pulse + omega1 = 9.28d0 + + !polarization unit vector(real part) for the incident pulse(x,y,z) + epdir_re1(1:3) = 0.00d0, 0.00d0, 1.00d0 + + +The applied electric field shows a rapid oscillation. + + .. image:: images/exc3a/exc3a-Efield.png + :scale: 40% + +The induced dipole moment also shows a rapid oscillation and does not +decrease even though the electric field decreases. This is because the frequency of the +applied electric field coincides with the excitation energy of the molecule. + + .. image:: images/exc3a/exc3a-dipole.png + :scale: 40% + +The electronic excitation energy also shows a monotonic increase. +Although the strength of the applied electric field is much smaller than +the previous case, the amount of the excitation energy is larger, again +due to the resonant excitation. + + .. image:: images/exc3a/exc3a-Eex.png + :scale: 40% + + +Crystalline silicon (periodic solids) +------------------------------------- + +.. _exercise-4: + +Exercise-4: Ground state of crystalline silicon +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In this exercise, we learn the the ground state calculation of the crystalline silicon that has a diamond structure. +A cubic unit cell that contains eight silicon atoms is adopted in the calculation. + + .. image:: images/exc4/exc4-diamond.png + :scale: 80% + +This exercise will be useful to learn how to set up calculations in SALMON for any periodic systems such as crystalline solid. + +Input files +^^^^^^^^^^^ + +To run the code, following files in the directory ``SALMON/samples/exercise_04_bulkSi_gs/`` are used: + ++-----------------------------------+-----------------------------------+ +| file name | description | ++-----------------------------------+-----------------------------------+ +| *Si_gs.inp* | input file that contains input | +| | keywords and their values | ++-----------------------------------+-----------------------------------+ +| *Si_rps.dat* | pseodupotential file for silicon | +| | atom | ++-----------------------------------+-----------------------------------+ + +In the input file ``Si_gs.inp``, input keywords are specified. +Most of them are mandatory to execute the ground state calculation. +This will help you to prepare an input file for other systems that you +want to calculate. A complete list of the input keywords that can be +used in the input file can be found in +:any:`List of input keywords `. + +:: + + !########################################################################################! + ! Excercise 04: Ground state of crystalline silicon(periodic solids) ! + !----------------------------------------------------------------------------------------! + ! * The detail of this excercise is explained in our manual(see chapter: 'Exercises'). ! + ! The manual can be obtained from: https://salmon-tddft.jp/documents.html ! + ! * Input format consists of group of keywords like: ! + ! &group ! + ! input keyword = xxx ! + ! / ! + ! (see chapter: 'List of input keywords' in the manual) ! + !----------------------------------------------------------------------------------------! + ! * Conversion from unit_system = 'a.u.' to 'A_eV_fs': ! + ! Length: 1 [a.u.] = 0.52917721067 [Angstrom] ! + ! Energy: 1 [a.u.] = 27.21138505 [eV] ! + ! Time : 1 [a.u.] = 0.02418884326505 [fs] ! + !########################################################################################! + + &calculation + !type of theory + theory = 'dft' + / + +| :any:`theory ` specifies which theoretical method is used in the calculation. + +:: + + &control + !common name of output files + sysname = 'Si' + / + +| :any:`sysname ` is a prefix for filenames of output files. + +:: + + &units + !units used in input and output files + unit_system = 'A_eV_fs' + / + +| :any:`unit_system ` specifies which unit system is used in the input and output files. + +:: + + &system + !periodic boundary condition + yn_periodic = 'y' + + !grid box size(x,y,z) + al(1:3) = 5.43d0, 5.43d0, 5.43d0 + + !number of elements, atoms, electrons and states(bands) + nelem = 1 + natom = 8 + nelec = 32 + nstate = 32 + / + +| :any:`yn_periodic ` specifies whether or not periodic boundary condition is applied. +| :any:`al(i) ` specifies the side length of the unit cell. +| :any:`nelem ` is the number of elements in the system. +| :any:`natom ` is the number of atoms in the system. +| :any:`nelec ` is the number of electrons in the system. +| :any:`nstate ` is the number of orbitals that are used in the calculation. + +:: + + &pseudo + !name of input pseudo potential file + file_pseudo(1) = './Si_rps.dat' + + !atomic number of element + izatom(1) = 14 + + !angular momentum of pseudopotential that will be treated as local + lloc_ps(1) = 2 + !--- Caution -------------------------------------------! + ! Index must correspond to those in &atomic_red_coor. ! + !-------------------------------------------------------! + / + +| :any:`file_pseudo(n) ` specifies the filename of the pseudopotential file of the n-th element. +| :any:`izatom(n) ` is the atomic number of the n-th element. +| :any:`lloc_ps(n) ` specifies which angular momentum component is chosen as the local potential for the n-th element. + +:: + + &functional + !functional('PZ' is Perdew-Zunger LDA: Phys. Rev. B 23, 5048 (1981).) + xc = 'PZ' + / + +| :any:`xc ` specifies the exchange-correlation potential to be used in the calculation. + +:: + + &rgrid + !number of spatial grids(x,y,z) + num_rgrid(1:3) = 12, 12, 12 + / + +| :any:`num_rgrid(i) ` specifies the number of real-space grid point in i-th direction. + +:: + + &kgrid + !number of k-points(x,y,z) + num_kgrid(1:3) = 4, 4, 4 + / + +| :any:`num_kgrid(i) ` specifies the number of k-points for i-th direction discretizing the Brillouin zone. + +:: + + &scf + !maximum number of scf iteration and threshold of convergence + nscf = 300 + threshold = 1.0d-9 + / + +| :any:`nscf ` specifies the maximum number of SCF iterations. +| :any:`threshold ` specifies the threshold to judge the convergence. + +:: + + &atomic_red_coor + !cartesian atomic reduced coodinates + 'Si' .0 .0 .0 1 + 'Si' .25 .25 .25 1 + 'Si' .5 .0 .5 1 + 'Si' .0 .5 .5 1 + 'Si' .5 .5 .0 1 + 'Si' .75 .25 .75 1 + 'Si' .25 .75 .75 1 + 'Si' .75 .75 .25 1 + !--- Format ---------------------------------------------------! + ! 'symbol' x y z index(correspond to that of pseudo potential) ! + !--------------------------------------------------------------! + / + +| :any:`&atomic_red_coor <&atomic_red_coor>` specifies spatial coordinates of atoms in reduced coordinate system. + +Execusion +^^^^^^^^^ + +In a multiprocess environment, calculation will be executed as:: + + $ mpiexec -n NPROC salmon < Si_gs.inp > Si_gs.out + +where NPROC is the number of MPI processes. A standard output will be stored in the file ``Si_gs.out``. + +.. _output-files-4: + +Output files +^^^^^^^^^^^^ + +After the calculation, following output files and a directory are created in the +directory that you run the code in addition to the standard output file, + ++-----------------------------------+-----------------------------------+ +| name | description | ++-----------------------------------+-----------------------------------+ +| *Si_info.data* | information on ground state | +| | solution | ++-----------------------------------+-----------------------------------+ +| *Si_eigen.data* | energy eigenvalues of orbitals | ++-----------------------------------+-----------------------------------+ +| *Si_k.data* | k-point distribution | ++-----------------------------------+-----------------------------------+ +| *PS_Si_KY_n.dat* | information on pseodupotential | +| | file for silicon atom | ++-----------------------------------+-----------------------------------+ +| *data_for_restart* | directory where files used in | +| | the real-time calculation are | +| | contained | ++-----------------------------------+-----------------------------------+ + +| You may download the above files (zipped file, except for the directory ``data_for_restart``) from: +| https://salmon-tddft.jp/webmanual/v_2_0_1/exercise_zip_files/04_bulkSi_gs.zip + +We first explain the standard output file. In the beginning of the file, +input variables used in the calculation are shown. + +:: + + ############################################################################## + # SALMON: Scalable Ab-initio Light-Matter simulator for Optics and Nanoscience + # + # Version 2.0.1 + ############################################################################## + Libxc: [disabled] + theory= dft + use of real value orbitals = F + r-space parallelization: off + ====== + MPI distribution: + nproc_k : 16 + nproc_ob : 1 + nproc_rgrid : 1 1 1 + OpenMP parallelization: + number of threads : 64 + ......... + +After that, the SCF loop starts. At each iteration step, the total energy as well as orbital +energies and some other quantities are displayed. + +:: + + ----------------------------------------------- + iter= 1 Total Energy= 314.78493406 Gap= -95.88543131 + k= 1 + 1 37.5762 2 63.8589 3 58.1850 4 43.0042 + 5 61.5347 6 29.5604 7 41.5986 8 39.3545 + 9 48.5641 10 68.0003 11 75.5196 12 85.4113 + .......... + 21 94.1224 22 53.0821 23 72.0170 24 46.7797 + 25 88.6077 26 98.2698 27 42.8071 28 65.0812 + 29 60.3648 30 39.6787 31 83.5629 32 62.7365 + + iter and int_x|rho_i(x)-rho_i-1(x)|dx/nelec = 1 0.49478519E+00 + Ne= 32.0000000000000 + ----------------------------------------------- + iter= 2 Total Energy= 62.72724688 Gap= -77.31200657 + k= 1 + 1 14.4913 2 32.6869 3 30.3561 4 20.6816 + 5 30.3907 6 16.9184 7 22.2967 8 18.5338 + 9 29.0117 10 41.9687 11 42.3490 12 54.6262 + .......... + +When the convergence criterion is satisfied, the SCF calculation ends. + +:: + + iter= 60 Total Energy= -850.76385275 Gap= 1.06020364 + k= 1 + 1 -3.7745 2 -3.0158 3 -3.0158 4 -3.0158 + 5 -0.4300 6 -0.4300 7 -0.4300 8 0.3765 + 9 3.9530 10 3.9530 11 3.9530 12 4.6110 + .......... + 21 9.6233 22 9.6233 23 9.6956 24 9.9111 + 25 11.0259 26 11.0259 27 11.4165 28 11.5976 + 29 11.9826 30 11.9887 31 12.0967 32 12.3585 + + iter and int_x|rho_i(x)-rho_i-1(x)|dx/nelec = 60 0.77889300E-09 + Ne= 32.0000000000000 + #GS converged at 61 : 0.77889300E-09 + ===== force ===== + 1 0.60775985E-08 0.15425240E-07 -0.22474791E-07 + 2 -0.10689345E-06 0.88233132E-07 0.35122981E-09 + 3 0.39762202E-07 -0.23921918E-07 0.11855231E-07 + 4 -0.79441825E-07 -0.28978042E-07 -0.34109698E-07 + 5 0.37990526E-07 0.67211638E-08 0.20384753E-07 + 6 0.96418986E-07 -0.70404285E-07 0.10198912E-06 + 7 0.16145540E-07 0.30561301E-07 -0.63738382E-07 + 8 0.26042178E-07 0.30977639E-07 -0.40587816E-07 + band information----------------------------------------- + Bottom of VB -0.194818046940532 + Top of VB 0.216611832367042 + Bottom of CB 0.255573599266334 + Top of CB 0.533770712688357 + Fundamental gap 3.896176689929157E-002 + BG between same k-point 3.896176691206812E-002 + Physicaly upper bound of CB for DOS 0.453918744010958 + Physicaly upper bound of eps(omega) 0.609598295602846 + --------------------------------------------------------- + Bottom of VB[eV] -5.30126888998779 + Top of VB[eV] 5.89430797692564 + Bottom of CB[eV] 6.95451161825061 + Top of CB[eV] 14.5246403913758 + Fundamental gap[eV] 1.06020364132497 + BG between same k-point[eV] 1.06020364167264 + Physicaly upper bound of CB for DOS[eV] 12.3517577246945 + Physicaly upper bound of eps(omega)[eV] 16.5880139474728 + --------------------------------------------------------- + writing restart data... + writing completed. + +In the directory ``data_for_restart``, files that will be used in the next-step +time evolution calculations are stored. + +Other output files include following information. + +**Si_info.data** + +Orbital and total energies as well as parameters specified in the input file. + +:: + + Total number of iteration = 60 + + Number of states = 32 + Number of electrons = 32 + + Total energy (eV) = -850.763852754463 + 1-particle energies (eV) + 1 -3.7745 2 -3.0158 3 -3.0158 4 -3.0158 + 5 -0.4300 6 -0.4300 7 -0.4300 8 0.3765 + 9 3.9530 10 3.9530 11 3.9530 12 4.6110 + +**Si_eigen.data** + +Orbital energies. + +:: + + #esp: single-particle energies (eigen energies) + #occ: occupation numbers, io: orbital index + # 1:io, 2:esp[eV], 3:occ + k= 1, spin= 1 + 1 -0.3774501171245852E+001 0.2000000000000000E+001 + 2 -0.3015778973884847E+001 0.2000000000000000E+001 + 3 -0.3015778969794385E+001 0.2000000000000000E+001 + +**Si_k.data** + +Data of k-points. + +:: + + # k-point distribution + # ik: k-point index + # kx,ky,kz: Reduced coordinate of k-points + # wk: Weight of k-point + # 1:ik[none] 2:kx[none] 3:ky[none] 4:kz[none] 5:wk[none] + 1 -0.375000000000000E+000 -0.375000000000000E+000 -0.375000000000000E+000 0.156250000000000E-001 + 2 -0.125000000000000E+000 -0.375000000000000E+000 -0.375000000000000E+000 0.156250000000000E-001 + 3 0.125000000000000E+000 -0.375000000000000E+000 -0.375000000000000E+000 0.156250000000000E-001 + +.. _exercise-5: + +Exercise-5: Dielectric function of crystalline silicon +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In this exercise, we learn the linear response calculation of the crystalline silicon. +A cubic unit cell that contains eight silicon atoms is used in the calculation. +This exercise should be carried out after finishing the ground state calculation +that was explained in :any:`Exercise-4 `. + +In this exercise, we calculate a dielectric function of silicon as a final object. +We first summarize definitions of relevant quantities. +We introduce a conductivity in time domain, :math:`\sigma_{\mu \nu}(t)`, +where :math:`\mu, \nu` indicate Cartesian components, :math:`\mu, \nu = x,y,z`. +It relates the applied electric field :math:`E_{\nu}(t)` with the induced +current density averaged over the unit cell volume, :math:`J_{\mu}(t)`, + +:math:`J_{\mu}(t) = \sum_{\nu=x,y,z} \int dt' \sigma_{\mu \nu}(t-t') E_{\nu}(t').` + +Integrating the current density over time, we obtain the polarization density as a functioon of time, + +:math:`P_{\mu}(t) = \int^t dt' J_{\mu}(t').` + +Then, the dielectric function is introduced by + +:math:`D_{\mu}(t) = E_{\mu}(t)+4\pi P_{\mu}(t) = \sum_{\nu} \int^t dt' \epsilon_{\mu \nu}(t-t') E_{\nu}(t').` + +Frequency-dependent dielectric function :math:`\epsilon_{\mu \nu}(\omega)` +is obtained from :math:`\epsilon_{\mu \nu}(t)` by taking time-frequency +Fourier transformation. + +In SALMON, the dielectric function is calculated in the following way. +First the ground state Bloch orbitals :math:`u_{n{\bf k}}({\bf r})` that satisfies the +Kohn-Sham equation, + +:math:`H_{\bf k} u_{n{\bf k}}({\bf r}) = \epsilon_{n{\bf k}}({\bf r}),` + +is calculated. +Then an impulsive force characterized by the magnitude of the +impulse :math:`I` is applied to all electrons in :math:`z` direction. +This is equivalent to shift the wave vector by +:math:`{\bf k} \rightarrow {\bf k} + I/\hbar \hat z`, +where :math:`\hat z` is a unit vector in :math:`z` direction. +We make a time evolution calculation with the shifted wave vector as + +:math:`i\hbar \frac{\partial}{\partial t} u_{n{\bf k}}({\bf r},t) += +H_{{\bf k} + I/\hbar \hat z}(t) u_{n{\bf k}}({\bf r},t).` + +During the time evolution, the electric current density given by + +:math:`{\bf J}(t) = \frac{-e}{m \Omega} \int d{\bf r} +u_{n{\bf k}}^* \left( -i\hbar\nabla + \hbar {\bf k} + I \hat z \right) u_{n{\bf k}} ++ \delta {\bf J}(t).` + +is monitored, where :math:`\Omega` is the volume of the unit cell +and :math:`\delta {\bf J}(t)` is a current component coming from +nonlocal pseudopootential. + +After the time evolution calculation, a time-frequency Fourier +transformation is carried out for the electric current density to obtain the +frequency-dependent conductivity by + +:math:`\tilde \sigma_{zz}(\omega) = -\frac{e}{I} \int dt e^{i\omega t} J_z(t).` + +The dielectric function and the conductivity is related in frequency representation by + +:math:`\epsilon_{\mu \nu}(\omega) = \delta_{\mu \nu} + \frac{4\pi i \sigma_{\mu \nu}(\omega)}{\omega}.` + +We note that the dielectric function of a crystalline silicon is isotropic, +:math:`\epsilon_{\mu \nu} = \delta_{\mu \nu} \epsilon(\omega)`. + +.. _input-files-3: + +Input files +^^^^^^^^^^^ + +To run the code, following files are necessary: + ++-----------------------------------+-----------------------------------+ +| file name | description | ++-----------------------------------+-----------------------------------+ +| *C2H2_response.inp* | input file that contains input | +| | keywords and their values | ++-----------------------------------+-----------------------------------+ +| *Si_rps.dat* | pseodupotential file for silicon | +| | atom | ++-----------------------------------+-----------------------------------+ +| *restart* | | directory created in the ground | +| | state calculation | +| | | (rename the directory from | +| | *data_for_restart* to *restart*)| ++-----------------------------------+-----------------------------------+ + +First two files are prepared in the directory ``SALMON/samples/exercise_05_bulkSi_lr/``. +The file ``Si_rt_response.inp`` contains input keywords and their values. +The pseudoopotential file should be the same as that used in the ground state calculation. +In the directory ``restart``, those files created in the ground state calculation +and stored in the directory ``data_for_restart`` are included. +Therefore, coopy the directory as ``cp -R data_for_restart restart`` +if you calculate at the same directory as you did the ground state calculation. + +In the input file ``Si_rt_response.inp``, input keywords are specified. +Most of them are mandatory to execute the linear response calculation. +This will help you to prepare the input file for other systems that you want to calculate. +A complete list of the input keywords that can be used in the input file +can be found in :any:`List of input keywords `. + +:: + + !########################################################################################! + ! Excercise 05: Dielectric function of crystalline silicon ! + !----------------------------------------------------------------------------------------! + ! * The detail of this excercise is explained in our manual(see chapter: 'Exercises'). ! + ! The manual can be obtained from: https://salmon-tddft.jp/documents.html ! + ! * Input format consists of group of keywords like: ! + ! &group ! + ! input keyword = xxx ! + ! / ! + ! (see chapter: 'List of input keywords' in the manual) ! + !----------------------------------------------------------------------------------------! + ! * Conversion from unit_system = 'a.u.' to 'A_eV_fs': ! + ! Length: 1 [a.u.] = 0.52917721067 [Angstrom] ! + ! Energy: 1 [a.u.] = 27.21138505 [eV] ! + ! Time : 1 [a.u.] = 0.02418884326505 [fs] ! + !----------------------------------------------------------------------------------------! + ! * Copy the ground state data directory('data_for_restart') (or make symbolic link) ! + ! calculated in 'samples/exercise_04_bulkSi_gs/' and rename the directory to 'restart/'! + ! in the current directory. ! + !########################################################################################! + + &calculation + !type of theory + theory = 'tddft_response' + / + +| :any:`theory ` specifies which theoretical method is used in the calculation. + +:: + + &control + !common name of output files + sysname = 'Si' + / + +| :any:`sysname ` is a prefix for filenames of output files. + +:: + + &units + !units used in input and output files + unit_system = 'A_eV_fs' + / + +| :any:`unit_system ` specifies which unit system is used in the input and output files. + +:: + + &system + !periodic boundary condition + yn_periodic = 'y' + + !grid box size(x,y,z) + al(1:3) = 5.43d0, 5.43d0, 5.43d0 + + !number of elements, atoms, electrons and states(bands) + nelem = 1 + natom = 8 + nelec = 32 + nstate = 32 + / + +| :any:`yn_periodic ` specifies whether or not periodic boundary condition is applied. +| :any:`al(i) ` specifies the side length of the unit cell. +| :any:`nelem ` is the number of elements in the system. +| :any:`natom ` is the number of atoms in the system. +| :any:`nelec ` is the number of electrons in the system. +| :any:`nstate ` is the number of orbitals that are used in the calculation. + +:: + + &pseudo + !name of input pseudo potential file + file_pseudo(1) = './Si_rps.dat' + + !atomic number of element + izatom(1) = 14 + + !angular momentum of pseudopotential that will be treated as local + lloc_ps(1) = 2 + !--- Caution -------------------------------------------! + ! Index must correspond to those in &atomic_red_coor. ! + !-------------------------------------------------------! + / + +| :any:`file_pseudo(n) ` specifies the filename of the pseudopotential file of the n-th element. +| :any:`izatom(n) ` is the atomic number of the n-th element. +| :any:`lloc_ps(n) ` specifies which angular momentum component is chosen as the local potential for the n-th element. + +:: + + &functional + !functional('PZ' is Perdew-Zunger LDA: Phys. Rev. B 23, 5048 (1981).) + xc = 'PZ' + / + +| :any:`xc ` specifies the exchange-correlation potential to be used in the calculation. + +:: + + &rgrid + !number of spatial grids(x,y,z) + num_rgrid(1:3) = 12, 12, 12 + / + +| :any:`num_rgrid(i) ` specifies the number of real-space grid point in i-th direction. + +:: + + &kgrid + !number of k-points(x,y,z) + num_kgrid(1:3) = 4, 4, 4 + / + +| :any:`num_kgrid(i) ` specifies the number of k-points for i-th direction discretizing the Brillouin zone. + +:: + + &tgrid + !time step size and number of time grids(steps) + dt = 0.002d0 + nt = 6000 + / + +| :any:`dt` specifies the time step. +| :any:`nt` is the number of time steps for the time propagation. + +:: + + &emfield + !envelope shape of the incident pulse('impulse': impulsive field) + ae_shape1 = 'impulse' + + !polarization unit vector(real part) for the incident pulse(x,y,z) + epdir_re1(1:3) = 0.00d0, 0.00d0, 1.00d0 + !--- Caution ---------------------------------------------------------! + ! Definition of the incident pulse is written in: ! + ! https://www.sciencedirect.com/science/article/pii/S0010465518303412 ! + !---------------------------------------------------------------------! + / + +| :any:`ae_shape1 ` specifies the envelope of the field. For a linear response calculation, ``as_shape1='impulse'`` is used. It indicates that a weak impulsive perturbation is applied at :math:`t=0`. +| :any:`epdir_re1(i) ` specifies the i-th component of the real part of the polarization unit vector. + +:: + + &analysis + !energy grid size and number of energy grids for output files + de = 0.01d0 + nenergy = 2000 + / + +| :any:`de` specifies the energy grid size for frequency-domain analysis. +| :any:`nenergy` specifies the number of energy grid points for frequency-domain analysis. + +:: + + &atomic_red_coor + !cartesian atomic reduced coodinates + 'Si' .0 .0 .0 1 + 'Si' .25 .25 .25 1 + 'Si' .5 .0 .5 1 + 'Si' .0 .5 .5 1 + 'Si' .5 .5 .0 1 + 'Si' .75 .25 .75 1 + 'Si' .25 .75 .75 1 + 'Si' .75 .75 .25 1 + !--- Format ---------------------------------------------------! + ! 'symbol' x y z index(correspond to that of pseudo potential) ! + !--------------------------------------------------------------! + / + +| :any:`&atomic_red_coor <&atomic_red_coor>` specifies spatial coordinates of atoms in reduced coordinate system. + +Execusion +^^^^^^^^^ + +In a multiprocess environment, calculation will be executed as:: + + $ mpiexec -n NPROC salmon < Si_rt_response.inp > Si_rt_response.out + +where NPROC is the number of MPI processes. A standard output will be stored in the file ``Si_rt_response.out``. + +.. _output-files-5: + +Output files +^^^^^^^^^^^^ + +After the calculation, following output files are created in the directory that +you run the code in addition to the standard output file, + ++-----------------------------------+------------------------------------------+ +| file name | description | ++-----------------------------------+------------------------------------------+ +| *Si_response.data* | conductivity and dielectric function | +| | as functions of energy | ++-----------------------------------+------------------------------------------+ +| *Si_rt.data* | vector potential, electric field, | +| | and matter current as functions of time | ++-----------------------------------+------------------------------------------+ +| *Si_rt_energy* | total energy and electronic excitation | +| | energy as functions of time | ++-----------------------------------+------------------------------------------+ +| *PS_Si_KY_n.dat* | information on pseodupotential | +| | file for silicon atom | ++-----------------------------------+------------------------------------------+ + +| You may download the above files (zipped file) from: +| https://salmon-tddft.jp/webmanual/v_2_0_1/exercise_zip_files/05_bulkSi_lr.zip + +We first explain the standard output file. In the beginning of the file, +input variables used in the calculation are shown. + +:: + + ############################################################################## + # SALMON: Scalable Ab-initio Light-Matter simulator for Optics and Nanoscience + # + # Version 2.0.1 + ############################################################################## + Libxc: [disabled] + theory= tddft_response + + Total time step = 6000 + Time step[fs] = 2.000000000000000E-003 + Energy range = 2000 + Energy resolution[eV]= 1.000000000000000E-002 + Field strength[a.u.] = 1.000000000000000E-002 + use of real value orbitals = F + r-space parallelization: off + ====== + ........ + +After that, the time evolution loop starts. At every 10 iteration steps, +electric current density in three Cartesian direction, the total number +of electrons, and total energy are displayed. + +:: + + time-step time[fs] Current(xyz)[a.u.] electrons Total energy[eV] + #---------------------------------------------------------------------- + 10 0.02000000 0.11911770E-11 -0.40018285E-13 0.24902126E-03 32.00000000 -850.72273308 + 20 0.04000000 0.17745321E-11 0.13712105E-12 0.21977876E-03 31.99999999 -850.72273319 + 30 0.06000000 0.31016197E-11 0.24481043E-12 0.20049151E-03 31.99999999 -850.72272966 + 40 0.08000000 0.36611565E-11 0.49184860E-12 0.17937042E-03 31.99999999 -850.72272925 + 50 0.10000000 0.36920991E-11 0.63805259E-12 0.15246564E-03 31.99999998 -850.72272922 + 60 0.12000000 0.32347636E-11 0.11280947E-11 0.12248647E-03 31.99999998 -850.72272655 + 70 0.14000000 0.25978450E-11 0.15550074E-11 0.91933957E-04 31.99999998 -850.72272293 + 80 0.16000000 0.20087959E-11 0.17983589E-11 0.62968342E-04 31.99999997 -850.72272036 + 90 0.18000000 0.90623268E-12 0.18067974E-11 0.38824129E-04 31.99999997 -850.72271918 + +Explanations of other output files are given below: + +**Si_rt.data** + +Results of time evolution calculation for vector potential, electric field, and matter current density are shown. In the first several lines, explanations of included data are given. + +:: + + # Real time calculation: + # Ac_ext: External vector potential field + # E_ext: External electric field + # Ac_tot: Total vector potential field + # E_tot: Total electric field + # Jm: Matter current density (electrons) + # 1:Time[fs] 2:Ac_ext_x[fs*V/Angstrom] 3:Ac_ext_y[fs*V/Angstrom] 4:Ac_ext_z[fs*V/Angstrom] + # 5:E_ext_x[V/Angstrom] 6:E_ext_y[V/Angstrom] 7:E_ext_z[V/Angstrom] 8:Ac_tot_x[fs*V/Angstrom] + # 9:Ac_tot_y[fs*V/Angstrom] 10:Ac_tot_z[fs*V/Angstrom] 11:E_tot_x[V/Angstrom] + # 12:E_tot_y[V/Angstrom] 13:E_tot_z[V/Angstrom] 14:Jm_x[1/fs*Angstrom^2] + # 15:Jm_y[1/fs*Angstrom^2] 16:Jm_z[1/fs*Angstrom^2] + +Using first column (time in femtosecond) and 16th column (matter current density in +*z* direction), the following graph can be drawn. + + .. image:: images/exc5/exc5-current.png + :scale: 60% + +**Si_response.data** + +Time-frequency Fourier transformation of the macroscopic current density gives +the conductivity of the system. The dielectric function is then calculated +from the conductivity. They are stored in this file. + +:: + + # Fourier-transform spectra: + # sigma: Conductivity + # eps: Dielectric constant + # 1:Energy[eV] 2:Re(sigma_x)[1/fs*V*Angstrom] 3:Re(sigma_y)[1/fs*V*Angstrom] + # 4:Re(sigma_z)[1/fs*V*Angstrom] 5:Im(sigma_x)[1/fs*V*Angstrom] + # 6:Im(sigma_y)[1/fs*V*Angstrom] 7:Im(sigma_z)[1/fs*V*Angstrom] 8:Re(eps_x)[none] + # 9:Re(eps_y)[none] 10:Re(eps_z)[none] 11:Im(eps_x)[none] 12:Im(eps_y)[none] + # 13:Im(eps_z)[none] + +Using first column (energy in eV) and 10th (real part of the dielectric function) +and 13th (imaginary part), we obtain the following graph. + + .. image:: images/exc5/exc5-eps-re.png + :scale: 50% + + .. image:: images/exc5/exc5-eps-im.png + :scale: 50% + +The imaginary part appears above the direct bandgap energy that is about +2.4 eV in the present calculation using local density approximation. +Dielectric function below 1 eV are not accurate and and are not shown. + +**Si_rt_energy** + +*Eall* and *Eall-Eall0* are total energy and electronic excitation energy, respectively. + +:: + + # Real time calculation: + # Eall: Total energy + # Eall0: Initial energy + # 1:Time[fs] 2:Eall[eV] 3:Eall-Eall0[eV] + +.. _exercise-6: + +Exercise-6: Electron dynamics in crystalline silicon under a pulsed electric field +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In this exercise, we learn the calculation of electron dynamics in crystalline silicon. +A cubic unit cell that contains eight silicon atoms is used in the calculation. +This exercise should be carried out after finishing the ground state calculation +that was explained in :any:`Exercise-4 `. + +In the calculation, a pulsed electric field specified by the following vector +potential will be used, + +:math:`A(t) = - \frac{E_0}{\omega} \hat z \cos^2 \frac{\pi}{T} \left( t - \frac{T}{2} \right) \sin \omega \left( t - \frac{T}{2} \right), \hspace{5mm} (0 < t < T).` + +The electric field is given by :math:`E(t) = -(1/c)(dA(t)/dt)`. +The parameters that characterize the pulsed field such as the amplitude :math:`E_0`, +frequency :math:`\omega`, pulse duration :math:`T`, polarization direction :math:`\hat z`, +are specified in the input file. +Time-dependent Kohn-Sham equation for Bloch orbitals are calculated in real time, + +:math:`i\hbar \frac{\partial}{\partial t} u_{n{\bf k}}({\bf r},t) += +H_{{\bf k} + (e/\hbar c){\bf A}(t)} u_{n{\bf k}}({\bf r},t).` + + +.. _input-files-4: + +Input files +^^^^^^^^^^^ + +To run the code, following files in samples are necessary: + ++-----------------------------------+-------------------------------------+ +| file name | description | ++-----------------------------------+-------------------------------------+ +| *Si_rt_pulse.inp* | input file that contain input | +| | keywords and their values | ++-----------------------------------+-------------------------------------+ +| *Si_rps.dat* | pseodupotential file for Carbon | ++-----------------------------------+-------------------------------------+ +| *restart* | | directory created in the ground | +| | state calculation | +| | | (rename the directory from | +| | *data_for_restart* to *restart*) | ++-----------------------------------+-------------------------------------+ + +First two files are prepared in the directory ``SALMON/samples/exercise_06_bulkSi_rt/``. +The file ``Si_rt_pulse.inp`` contains input keywords and their values. +The pseudoopotential file should be the same as that used in the ground state calculation. +In the directory ``restart``, those files created in the ground state calculation +and stored in the directory ``data_for_restart`` are included. +Therefore, coopy the directory as ``cp -R data_for_restart restart`` +if you calculate at the same directory as you did the ground state calculation. + +In the input file ``Si_rt_pulse.inp``, input keywords are specified. +Most of them are mandatory to execute the electron dynamics calculation. +This will help you to prepare the input file for other systems that you want to calculate. +A complete list of the input keywords that can be used in the input file +can be found in :any:`List of input keywords `. + +:: + + !########################################################################################! + ! Excercise 06: Electron dynamics in crystalline silicon under a pulsed electric field ! + !----------------------------------------------------------------------------------------! + ! * The detail of this excercise is explained in our manual(see chapter: 'Exercises'). ! + ! The manual can be obtained from: https://salmon-tddft.jp/documents.html ! + ! * Input format consists of group of keywords like: ! + ! &group ! + ! input keyword = xxx ! + ! / ! + ! (see chapter: 'List of input keywords' in the manual) ! + !----------------------------------------------------------------------------------------! + ! * Conversion from unit_system = 'a.u.' to 'A_eV_fs': ! + ! Length: 1 [a.u.] = 0.52917721067 [Angstrom] ! + ! Energy: 1 [a.u.] = 27.21138505 [eV] ! + ! Time : 1 [a.u.] = 0.02418884326505 [fs] ! + !----------------------------------------------------------------------------------------! + ! * Copy the ground state data directory('data_for_restart') (or make symbolic link) ! + ! calculated in 'samples/exercise_04_bulkSi_gs/' and rename the directory to 'restart/'! + ! in the current directory. ! + !########################################################################################! + + &calculation + !type of theory + theory = 'tddft_pulse' + / + +| :any:`theory ` specifies which theoretical method is used in the calculation. + +:: + + &control + !common name of output files + sysname = 'Si' + / + +| :any:`sysname ` is a prefix for filenames of output files. + +:: + + &units + !units used in input and output files + unit_system = 'A_eV_fs' + / + +| :any:`unit_system ` specifies which unit system is used in the input and output files. + +:: + + &system + !periodic boundary condition + yn_periodic = 'y' + + !grid box size(x,y,z) + al(1:3) = 5.43d0, 5.43d0, 5.43d0 + + !number of elements, atoms, electrons and states(bands) + nelem = 1 + natom = 8 + nelec = 32 + nstate = 32 + / + +| :any:`yn_periodic ` specifies whether or not periodic boundary condition is applied. +| :any:`al(i) ` specifies the side length of the unit cell. +| :any:`nelem ` is the number of elements in the system. +| :any:`natom ` is the number of atoms in the system. +| :any:`nelec ` is the number of electrons in the system. +| :any:`nstate ` is the number of orbitals that are used in the calculation. + +:: + + &pseudo + !name of input pseudo potential file + file_pseudo(1) = './Si_rps.dat' + + !atomic number of element + izatom(1) = 14 + + !angular momentum of pseudopotential that will be treated as local + lloc_ps(1) = 2 + !--- Caution -------------------------------------------! + ! Index must correspond to those in &atomic_red_coor. ! + !-------------------------------------------------------! + / + +| :any:`file_pseudo(n) ` specifies the filename of the pseudopotential file of the n-th element. +| :any:`izatom(n) ` is the atomic number of the n-th element. +| :any:`lloc_ps(n) ` specifies which angular momentum component is chosen as the local potential for the n-th element. + +:: + + &functional + !functional('PZ' is Perdew-Zunger LDA: Phys. Rev. B 23, 5048 (1981).) + xc = 'PZ' + / + +| :any:`xc ` specifies the exchange-correlation potential to be used in the calculation. + +:: + + &rgrid + !number of spatial grids(x,y,z) + num_rgrid(1:3) = 12, 12, 12 + / + +| :any:`num_rgrid(i) ` specifies the number of real-space grid point in i-th direction. + +:: + + &kgrid + !number of k-points(x,y,z) + num_kgrid(1:3) = 4, 4, 4 + / + +| :any:`num_kgrid(i) ` specifies the number of k-points for i-th direction discretizing the Brillouin zone. + +:: + + &tgrid + !time step size and number of time grids(steps) + dt = 0.002d0 + nt = 6000 + / + +| :any:`dt` specifies the time step. +| :any:`nt` is the number of time steps for the time propagation. + +:: + + &emfield + !envelope shape of the incident pulse('Acos2': cos^2 type envelope for vector potential) + ae_shape1 = 'Acos2' + + !peak intensity(W/cm^2) of the incident pulse + I_wcm2_1 = 1.0d12 + + !duration of the incident pulse + tw1 = 10.672d0 + + !mean photon energy(average frequency multiplied by the Planck constant) of the incident pulse + omega1 = 1.55d0 + + !polarization unit vector(real part) for the incident pulse(x,y,z) + epdir_re1(1:3) = 0.0d0, 0.0d0, 1.0d0 + !--- Caution ---------------------------------------------------------! + ! Definition of the incident pulse is written in: ! + ! https://www.sciencedirect.com/science/article/pii/S0010465518303412 ! + !---------------------------------------------------------------------! + / + +| :any:`ae_shape1 ` specifies the envelope of the field. +| :any:`I_wcm2_1 ` specify the intensity of the pulse in unit of W/cm\ :sup:`2`\. +| :any:`tw1 ` specifies the duration of the pulse. +| :any:`omega1 ` specifies the mean photon energy of the pulse. +| :any:`epdir_re1(i) ` specifies the i-th component of the real part of the polarization unit vector. + +:: + + &analysis + !energy grid size and number of energy grids for output files + de = 0.01d0 + nenergy = 3000 + / + +| :any:`de` specifies the energy grid size for frequency-domain analysis. +| :any:`nenergy` specifies the number of energy grid points for frequency-domain analysis. + +:: + + &atomic_red_coor + !cartesian atomic reduced coodinates + 'Si' .0 .0 .0 1 + 'Si' .25 .25 .25 1 + 'Si' .5 .0 .5 1 + 'Si' .0 .5 .5 1 + 'Si' .5 .5 .0 1 + 'Si' .75 .25 .75 1 + 'Si' .25 .75 .75 1 + 'Si' .75 .75 .25 1 + !--- Format ---------------------------------------------------! + ! 'symbol' x y z index(correspond to that of pseudo potential) ! + !--------------------------------------------------------------! + / + +| :any:`&atomic_red_coor <&atomic_red_coor>` specifies spatial coordinates of atoms in reduced coordinate system. + +Execusion +^^^^^^^^^ + +In a multiprocess environment, calculation will be executed as:: + + $ mpiexec -n NPROC salmon < Si_rt_pulse.inp > Si_rt_pulse.out + +where NPROC is the number of MPI processes. A standard output will be stored in the file ``Si_rt_pulse.out``. + +.. _output-files-6: + +Output files +^^^^^^^^^^^^ + +After the calculation, following output files are created in the +directory that you run the code in addition to the standard output file, + ++-----------------------------------+------------------------------------------+ +| file name | description | ++-----------------------------------+------------------------------------------+ +| *Si_pulse.data* | time-frequency Fourier transform of | +| | matter current and electric field | ++-----------------------------------+------------------------------------------+ +| *Si_rt.data* | vector potential, electric field, | +| | and matter current as functions of time | ++-----------------------------------+------------------------------------------+ +| *Si_rt_energy* | total energy and electronic excitation | +| | energy as functions of time | ++-----------------------------------+------------------------------------------+ +| *PS_Si_KY_n.dat* | information on pseodupotential | +| | file for silicon atom | ++-----------------------------------+------------------------------------------+ + +| You may download the above files (zipped file) from: +| https://salmon-tddft.jp/webmanual/v_2_0_1/exercise_zip_files/06_bulkSi_rt.zip + +We first explain the standard output file. In the beginning of the file, +input variables used in the calculation are shown. + +:: + + ############################################################################## + # SALMON: Scalable Ab-initio Light-Matter simulator for Optics and Nanoscience + # + # Version 2.0.1 + ############################################################################## + Libxc: [disabled] + theory= tddft_pulse + + Total time step = 6000 + Time step[fs] = 2.000000000000000E-003 + Energy range = 3000 + Energy resolution[eV]= 1.000000000000000E-002 + Laser frequency = 1.55[eV] + Pulse width of laser= 10.67200000[fs] + Laser intensity = 0.10000000E+13[W/cm^2] + use of real value orbitals = F + r-space parallelization: off + ====== + ........ + +After that, the time evolution loop starts. At every 10 iterations, the time, +current in three Cartesian directions, the number of electrons, and the +total energy are displayed. + +:: + + time-step time[fs] Current(xyz)[a.u.] electrons Total energy[eV] + #---------------------------------------------------------------------- + 10 0.02000000 0.11847131E-11 -0.47534543E-13 -0.43120486E-08 32.00000000 -850.76385276 + 20 0.04000000 0.17733186E-11 0.12820952E-12 -0.33012195E-07 32.00000000 -850.76385276 + 30 0.06000000 0.30965601E-11 0.23626542E-12 -0.10736819E-06 32.00000000 -850.76385275 + 40 0.08000000 0.36612711E-11 0.47687574E-12 -0.24607217E-06 32.00000000 -850.76385272 + 50 0.10000000 0.36958981E-11 0.62315158E-12 -0.46548014E-06 32.00000000 -850.76385263 + 60 0.12000000 0.32186097E-11 0.11429104E-11 -0.77911390E-06 32.00000000 -850.76385239 + 70 0.14000000 0.25712602E-11 0.15689467E-11 -0.11971541E-05 32.00000000 -850.76385186 + 80 0.16000000 0.19447699E-11 0.18250920E-11 -0.17261976E-05 32.00000000 -850.76385082 + 90 0.18000000 0.80514520E-12 0.18683828E-11 -0.23692381E-05 32.00000000 -850.76384896 + + + +Explanations of other output files are given below: + +**Si_rt.data** + +Results of time evolution calculation for vector potential, electric field, and matter current density. + +:: + + # Real time calculation: + # Ac_ext: External vector potential field + # E_ext: External electric field + # Ac_tot: Total vector potential field + # E_tot: Total electric field + # Jm: Matter current density (electrons) + # 1:Time[fs] 2:Ac_ext_x[fs*V/Angstrom] 3:Ac_ext_y[fs*V/Angstrom] 4:Ac_ext_z[fs*V/Angstrom] + # 5:E_ext_x[V/Angstrom] 6:E_ext_y[V/Angstrom] 7:E_ext_z[V/Angstrom] + # 8:Ac_tot_x[fs*V/Angstrom] 9:Ac_tot_y[fs*V/Angstrom] 10:Ac_tot_z[fs*V/Angstrom] + # 11:E_tot_x[V/Angstrom] 12:E_tot_y[V/Angstrom] 13:E_tot_z[V/Angstrom] + # 14:Jm_x[1/fs*Angstrom^2] 15:Jm_y[1/fs*Angstrom^2] 16:Jm_z[1/fs*Angstrom^2] + +The applied electric field is drawn using the first column (time in femtosecond) +and the 7th column (electric field in *z* direction). + + .. image:: images/exc6/exc6-efield.png + :scale: 60% + +The matter current density is drawn using the first column (time in femtosecond) +and 16th column (matter current density in *z* direction). + + .. image:: images/exc6/exc6-current.png + :scale: 60% + +**Si_pulse.data** + +Time-frequency Fourier transformation of the matter current and electric field. + +:: + + # Fourier-transform spectra: + # energy: Frequency + # Jm: Matter current + # E_ext: External electric field + # E_tot: Total electric field + # 1:energy[eV] 2:Re(Jm_x)[1/Angstrom^2] 3:Re(Jm_y)[1/Angstrom^2] 4:Re(Jm_z)[1/Angstrom^2] + # 5:Im(Jm_x)[1/Angstrom^2] 6:Im(Jm_y)[1/Angstrom^2] 7:Im(Jm_z)[1/Angstrom^2] + # 8:|Jm_x|^2[1/Angstrom^4] 9:|Jm_y|^2[1/Angstrom^4] 10:|Jm_z|^2[1/Angstrom^4] + # 11:Re(E_ext_x)[fs*V/Angstrom] 12:Re(E_ext_y)[fs*V/Angstrom] + # 13:Re(E_ext_z)[fs*V/Angstrom] 14:Im(E_ext_x)[fs*V/Angstrom] + # 15:Im(E_ext_y)[fs*V/Angstrom] 16:Im(E_ext_z)[fs*V/Angstrom] + # 17:|E_ext_x|^2[fs^2*V^2/Angstrom^2] 18:|E_ext_y|^2[fs^2*V^2/Angstrom^2] + # 19:|E_ext_z|^2[fs^2*V^2/Angstrom^2] 20:Re(E_tot_x)[fs*V/Angstrom] + # 21:Re(E_tot_y)[fs*V/Angstrom] 22:Re(E_tot_z)[fs*V/Angstrom] + # 23:Im(E_tot_x)[fs*V/Angstrom] 24:Im(E_tot_y)[fs*V/Angstrom] + # 25:Im(E_tot_z)[fs*V/Angstrom] 26:|E_tot_x|^2[fs^2*V^2/Angstrom^2] + # 27:|E_tot_y|^2[fs^2*V^2/Angstrom^2] 28:|E_tot_z|^2[fs^2*V^2/Angstrom^2] + +The power spectrum of the matter current density, :math:`|J(\omega)|^2` +is shown in logarithmic scale as a function of the energy, :math:`\hbar\omega`. +High harmonic generations are visible in the spectrum. + + .. image:: images/exc6/exc6-pulse.png + :scale: 60% + +**Si_rt_energy** + +Energies are stored as functions of time. + +:: + + # Real time calculation: + # Eall: Total energy + # Eall0: Initial energy + # 1:Time[a.u.] 2:Eall[a.u.] 3:Eall-Eall0[a.u.] + +*Eall* and *Eall-Eall0* are total energy and electronic excitation energy, respectively. +The figure below shows the electronic excitation energy per unit cell volume as a +function of time, using the first column (time in femtosecond) and the 3rd column +(*Eall-Eall0*). Although the frequency is below the direct bandgap of silicon +(2.4 eV in the LDA calculation), electronic excitations take place because of +nonlinear absorption process. + + .. image:: images/exc6/exc6-energy.png + :scale: 60% + +Maxwell + TDDFT multiscale simulation +------------------------------------- + +.. _exercise-7: + +Exercise-7: Pulsed-light propagation through a silicon thin film +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In this exercise, we learn the calculation of a propagation of +pulsed light through a thin film of crystalline silicon. +We consider an irradiation of a few-cycle, linearly polarized pulsed light +normally on a thin film of 40 nm thickness. +This exercise should be carried out after finishing the ground state calculation +that was explained in :any:`Exercise-4 `. + +In the calculation, macroscopic Maxwell equation that describes the light +propagation and microscopic time-dependent Kohn-Sham equation that describes +the electron dynamics are solved simultaneously. +The light propagation is described by a one-dimensional +light-propagation equation for the vector potential, + +:math:`\frac{1}{c^2} \frac{\partial^2}{\partial X^2} A(X,t) +- \frac{\partial^2}{\partial X^2} A(X,t) = \frac{4\pi}{c} I(X,t).` + +The direction of the propagation is set to *x* direction and the +polarization of the pulse is set to *z* direction. +The time profile of an incident pulse is given by + +:math:`A(t) = - \frac{E_0}{\omega} \hat z \cos^2 \frac{\pi}{T} \left( t - \frac{T}{2} \right) \sin \omega \left( t - \frac{T}{2} \right), \hspace{5mm} (0 < t < T),` + +and is set in the vacuum region in front of the thin film. +The parameters that characterize the pulsed field such as the amplitude :math:`E_0`, +frequency :math:`\omega`, pulse duration :math:`T` are specified in the input file. + +To discribe the light propagation, macroscopic coordinate :math:`X` is discretized as +:math:`X_i`. At each grid point inside the silicon thin film, for which we take +eight points :math:`i=1 \cdots 8` in this exercise, time-dependent Kohn-Sham +equation for Bloch orbitals are calculated in real time, + +:math:`i\hbar \frac{\partial}{\partial t} u_{i n{\bf k}}({\bf r},t) += +H_{{\bf k} + (e/\hbar c){\bf A}_i(t)} u_{i n{\bf k}}({\bf r},t).` + +From the Bloch orbital :math:`u_{in{\bf k}}({\bf r},t)`, we calculate the electric +current :math:`I(X_i,t)`. We thus obtain a closed set of equations. +Solving these equations simultaneously, we can describe macroscopic light propagation +and microscopic electron dynamics at the same time. + +.. _input-files-5: + +Input files +^^^^^^^^^^^ + +To run the code, following files in samples are used: + ++-----------------------------------+-------------------------------------+ +| file name | description | ++-----------------------------------+-------------------------------------+ +| *Si_rt_multiscale.inp* | input file that contain input | +| | keywords and their values. | ++-----------------------------------+-------------------------------------+ +| *Si_rps.dat* | pseodupotential file for silicon | ++-----------------------------------+-------------------------------------+ +| *restart* | | directory created in the ground | +| | state calculation | +| | | (rename the directory from | +| | *data_for_restart* to *restart*) | ++-----------------------------------+-------------------------------------+ + +First two files are prepared in the directory +``SALMON/samples/exercise_07_bulkSi_multiscale/``. +The file ``Si_rt_multiscale.inp`` contains input keywords and their values. +The pseudoopotential file should be the same as that used in the ground state calculation. +In the directory ``restart``, those files created in the ground state calculation +and stored in the directory *data_for_restart* are included. +Therefore, coopy the directory as ``cp -R data_for_restart restart`` +if you calculate at the same directory as you did the ground state calculation. + +In the input file ``Si_rt_multiscale.inp``, input keywords are specified. +Most of them are mandatory to execute the electron dynamics calculation. +This will help you to prepare the input file for other systems that you want to calculate. +A complete list of the input keywords that can be used in the input file +can be found in :any:`List of input keywords `. + +:: + + !########################################################################################! + ! Excercise 07: Maxwell+TDDFT multiscale simulation ! + ! (Pulsed-light propagation through a silicon thin film) ! + !----------------------------------------------------------------------------------------! + ! * The detail of this excercise is explained in our manual(see chapter: 'Exercises'). ! + ! The manual can be obtained from: https://salmon-tddft.jp/documents.html ! + ! * Input format consists of group of keywords like: ! + ! &group ! + ! input keyword = xxx ! + ! / ! + ! (see chapter: 'List of input keywords' in the manual) ! + !----------------------------------------------------------------------------------------! + ! * Conversion from unit_system = 'a.u.' to 'A_eV_fs': ! + ! Length: 1 [a.u.] = 0.52917721067 [Angstrom] ! + ! Energy: 1 [a.u.] = 27.21138505 [eV] ! + ! Time : 1 [a.u.] = 0.02418884326505 [fs] ! + !----------------------------------------------------------------------------------------! + ! * Copy the ground state data directory('data_for_restart') (or make symbolic link) ! + ! calculated in 'samples/exercise_04_bulkSi_gs/' and rename the directory to 'restart/'! + ! in the current directory. ! + !########################################################################################! + + &calculation + !type of theory + theory = 'multi_scale_maxwell_tddft' + / + +| :any:`theory ` specifies which theoretical method is used in the calculation. + +:: + + &control + !common name of output files + sysname = 'Si' + / + +| :any:`sysname ` is a prefix for filenames of output files. + +:: + + &units + !units used in input and output files + unit_system = 'A_eV_fs' + / + +| :any:`unit_system ` specifies which unit system is used in the input and output files. + +:: + + &system + !periodic boundary condition + yn_periodic = 'y' + + !grid box size(x,y,z) + al(1:3) = 5.43d0, 5.43d0, 5.43d0 + + !number of elements, atoms, electrons and states(bands) + nelem = 1 + natom = 8 + nelec = 32 + nstate = 32 + / + +| :any:`yn_periodic ` specifies whether or not periodic boundary condition is applied. +| :any:`al(i) ` specifies the side length of the unit cell. +| :any:`nelem ` is the number of elements in the system. +| :any:`natom ` is the number of atoms in the system. +| :any:`nelec ` is the number of electrons in the system. +| :any:`nstate ` is the number of orbitals that are used in the calculation. + +:: + + &pseudo + !name of input pseudo potential file + file_pseudo(1) = './Si_rps.dat' + + !atomic number of element + izatom(1) = 14 + + !angular momentum of pseudopotential that will be treated as local + lloc_ps(1) = 2 + !--- Caution -------------------------------------------! + ! Index must correspond to those in &atomic_red_coor. ! + !-------------------------------------------------------! + / + +| :any:`file_pseudo(n) ` specifies the filename of the pseudopotential file of the n-th element. +| :any:`izatom(n) ` is the atomic number of the n-th element. +| :any:`lloc_ps(n) ` specifies which angular momentum component is chosen as the local potential for the n-th element. + +:: + + &functional + !functional('PZ' is Perdew-Zunger LDA: Phys. Rev. B 23, 5048 (1981).) + xc = 'PZ' + / + +| :any:`xc ` specifies the exchange-correlation potential to be used in the calculation. + +:: + + &rgrid + !number of spatial grids(x,y,z) + num_rgrid(1:3) = 12, 12, 12 + / + +| :any:`num_rgrid(i) ` specifies the number of real-space grid point in i-th direction. + +:: + + &kgrid + !number of k-points(x,y,z) + num_kgrid(1:3) = 4, 4, 4 + / + +| :any:`num_kgrid(i) ` specifies the number of k-points for i-th direction discretizing the Brillouin zone. + +:: + + &tgrid + !time step size and number of time grids(steps) + dt = 0.002d0 + nt = 8000 + / + +| :any:`dt` specifies the time step. +| :any:`nt` is the number of time steps for the time propagation. + +:: + + &emfield + !envelope shape of the incident pulse('Acos2': cos^2 type envelope for vector potential) + ae_shape1 = 'Acos2' + + !peak intensity(W/cm^2) of the incident pulse + I_wcm2_1 = 1.0d12 + + !duration of the incident pulse + tw1 = 10.672d0 + + !mean photon energy(average frequency multiplied by the Planck constant) of the incident pulse + omega1 = 1.55d0 + + !polarization unit vector(real part) for the incident pulse(x,y,z) + epdir_re1(1:3) = 0.0d0, 0.0d0, 1.0d0 + !--- Caution ---------------------------------------------------------! + ! Defenition of the incident pulse is written in: ! + ! https://www.sciencedirect.com/science/article/pii/S0010465518303412 ! + !---------------------------------------------------------------------! + / + +| :any:`ae_shape1 ` specifies the envelope of the field. +| :any:`I_wcm2_1 ` specify the intensity of the pulse in unit of W/cm\ :sup:`2`\. +| :any:`tw1 ` specifies the duration of the pulse. +| :any:`omega1 ` specifies the mean photon energy of the pulse. +| :any:`epdir_re1(i) ` specifies the i-th component of the real part of the polarization unit vector. + +:: + + &multiscale + !number of macro grids in electromagnetic analysis for x, y, and z directions + nx_m = 8 + ny_m = 1 + nz_m = 1 + + !macro grid spacing for x, y, and z directions + hx_m = 50.0d0 + hy_m = 50.0d0 + hz_m = 50.0d0 + + !number of macroscopic grids for vacumm region + !(nxvacl_m is for negative x-direction in front of material) + !(nxvacr_m is for positive x-direction behind material) + nxvacl_m = 1000 + nxvacr_m = 1000 + / + +| :any:`nx_m `, :any:`ny_m `, :any:`nz_m ` specify the number of macroscopic grid points inside the material. +| :any:`hx_m `, :any:`hy_m `, :any:`hz_m ` specify the grid spacing of macroscopic coordinates. +| :any:`nxvacl_m ` / :any:`nxvacr_m ` specifies the number of grid points in the vacuum region in the left / right side of the material. + +:: + + &maxwell + !boundary condition of electromagnetic analysis + !first index(1-3 rows) corresponds to x, y, and z directions + !second index(1-2 columns) corresponds to bottom and top of the directions + !('abc' is absorbing boundary condition) + boundary_em(1,1) = 'abc' + boundary_em(1,2) = 'abc' + / + +| :any:`boundary_em(i,n) ` specifies the boundary condition for the electromagnetic analysis. The first index i corresponds to the x,y, and z direction. The second index n specifies left or right side of the material. + +:: + + &atomic_red_coor + !cartesian atomic reduced coodinates + 'Si' .0 .0 .0 1 + 'Si' .25 .25 .25 1 + 'Si' .5 .0 .5 1 + 'Si' .0 .5 .5 1 + 'Si' .5 .5 .0 1 + 'Si' .75 .25 .75 1 + 'Si' .25 .75 .75 1 + 'Si' .75 .75 .25 1 + !--- Format ---------------------------------------------------! + ! 'symbol' x y z index(correspond to that of pseudo potential) ! + !--------------------------------------------------------------! + / + +| :any:`&atomic_red_coor <&atomic_red_coor>` specifies spatial coordinates of atoms in reduced coordinate system. + +Execusion +^^^^^^^^^ + +In a multiprocess environment, calculation will be executed as:: + + $ mpiexec -n NPROC salmon < Si_rt_multiscale.inp > Si_rt_multiscale.out + +where NPROC is the number of MPI processes. A standard output will be stored in the file ``Si_rt_multiscale.out``. + +.. _output-files-7: + +Output files +^^^^^^^^^^^^ + +After the calculation, following output files and directories are created in the +directory that you run the code in addition to the standard output file. + ++-----------------------------------+------------------------------------+ +| file name | description | ++-----------------------------------+------------------------------------+ +| *Si_m/mxxxxxx/Si_rt.data* | | vector potential, electric field,| +| | and matter current | +| | | at macroscopic position *xxxxxx* | +| | as functions of time | ++-----------------------------------+------------------------------------+ +| *Si_m/mxxxxxx/Si_rt_energy.data* | | total energy and electronic | +| | excitation energy | +| | | at macroscopic position *xxxxxx* | +| | as functions of time | ++-----------------------------------+------------------------------------+ +| *Si_m/mxxxxxx/PS_Si_KY_n.dat* | | information on pseodupotential | +| | file for silicon atom | +| | | at macroscopic position *xxxxxx* | ++-----------------------------------+------------------------------------+ +| *Si_RT_Ac/Si_Ac_yyyyyy.data* | | vector potential, | +| | electric field, | +| | magnetic field, | +| | | electromagnetic current density | +| | at time step *yyyyyy* | +| | | as function of spatial position | ++-----------------------------------+------------------------------------+ +| *Si_wave.data* | waveform of incident, reflected, | +| | and transmitted waves | ++-----------------------------------+------------------------------------+ + +| You may download the above files (zipped file) from: +| https://salmon-tddft.jp/webmanual/v_2_0_1/exercise_zip_files/07_bulkSi_ms.zip + +We first explain the standard output file. In the beginning of the file, +input variables used in the calculation are shown. + +:: + + ############################################################################## + # SALMON: Scalable Ab-initio Light-Matter simulator for Optics and Nanoscience + # + # Version 2.0.1 + ############################################################################## + Libxc: [disabled] + theory= multi_scale_maxwell_tddft + Initializing macropoint: 1- 8 + + Total time step = 8000 + Time step[fs] = 2.000000000000000E-003 + Energy range = 1000 + Energy resolution[eV]= 1.000000000000000E-002 + Laser frequency = 1.55[eV] + Pulse width of laser= 10.67200000[fs] + Laser intensity = 0.10000000E+13[W/cm^2] + use of real value orbitals = F + r-space parallelization: off + ====== + ......... + +After that, the time evolution loop starts. At every 100 iterations, the step, +grid point index, time, current in three Cartesian directions, the number of electrons, +and the total energy are displayed. + +:: + + Step Macro Time Current Electrons Eabs/cell + fs 1/fs*Angstrom^2 eV + #------------------------------------------------------------------------------------------ + 100 1 0.200 5.45E-010 -4.60E-011 2.70E-004 32.00000000 2.36E-006 + 100 2 0.200 5.45E-010 -1.56E-011 1.83E-004 32.00000000 1.06E-006 + 100 3 0.200 5.45E-010 7.19E-012 1.23E-004 32.00000000 4.62E-007 + 100 4 0.200 5.45E-010 2.11E-011 8.14E-005 32.00000000 1.97E-007 + 100 5 0.200 5.45E-010 2.11E-011 5.28E-005 32.00000000 8.04E-008 + 100 6 0.200 5.45E-010 7.20E-012 3.34E-005 32.00000000 3.11E-008 + 100 7 0.200 5.45E-010 -1.56E-011 2.03E-005 32.00000000 1.10E-008 + 100 8 0.200 5.45E-010 -4.60E-011 1.13E-005 32.00000000 3.27E-009 + 200 1 0.400 1.77E-011 -2.93E-013 9.70E-004 32.00000000 5.80E-005 + 200 2 0.400 1.78E-011 -3.64E-011 7.50E-004 32.00000000 3.25E-005 + 200 3 0.400 1.78E-011 -5.58E-011 5.75E-004 32.00000000 1.80E-005 + 200 4 0.400 1.78E-011 -6.66E-011 4.38E-004 32.00000000 9.89E-006 + + +Explanations of other output files are given below: + +**Si_wave.data** + +Waveforms of incident, reflected, and transmitted waves. + +:: + + # 1D multiscale calculation: + # E_inc: E-field amplitude of incident wave + # E_ref: E-field amplitude of reflected wave + # E_tra: E-field amplitude of transmitted wave + # 1:Time[fs] 2:E_inc_x[V/Angstrom] 3:E_inc_y[V/Angstrom] 4:E_inc_z[V/Angstrom] + # 5:E_ref_x[V/Angstrom] 6:E_ref_y[V/Angstrom] 7:E_ref_z[V/Angstrom] 8:E_tra_x[V/Angstrom] + # 9:E_tra_y[V/Angstrom] 10:E_tra_z[V/Angstrom] + +The figure below shows the incident, reflected, and transmitted electric fields +that are drawn using the first column (time in femtosecond) and the 4th column (incident), +7th column (reflected), and 10th column (transmitted). + + .. image:: images/exc7/exc7-efield.png + :scale: 60% + +We find that the amplitude of the reflected pulse is comparable to the amplitude +of the incudent pulse, while the phase is different by :math:`\pi`. +The amplitude of the transmitted pulse is smaller than the incident pulse. + +**Si_m/mxxxxxx/Si_rt.data** + +The number *xxxxxx* in the directory name *mxxxxxx* specifies the position of +macroscopic grid point. Vector potential, electric field, and matter current density +as functions of time are included in the file. + +:: + + # Real time calculation: + # Ac_ext: External vector potential field + # E_ext: External electric field + # Ac_tot: Total vector potential field + # E_tot: Total electric field + # Jm: Matter current density (electrons) + # 1:Time[fs] 2:Ac_ext_x[fs*V/Angstrom] 3:Ac_ext_y[fs*V/Angstrom] 4:Ac_ext_z[fs*V/Angstrom] + # 5:E_ext_x[V/Angstrom] 6:E_ext_y[V/Angstrom] 7:E_ext_z[V/Angstrom] 8:Ac_tot_x[fs*V/Angstrom] + # 9:Ac_tot_y[fs*V/Angstrom] 10:Ac_tot_z[fs*V/Angstrom] 11:E_tot_x[V/Angstrom] + # 12:E_tot_y[V/Angstrom] 13:E_tot_z[V/Angstrom] 14:Jm_x[1/fs*Angstrom^2] + # 15:Jm_y[1/fs*Angstrom^2] 16:Jm_z[1/fs*Angstrom^2] + +The figure below shows the electric field at front and back surfaces. +Using 1st column (time in femtosecond) and 13th column (total electric field in *z* direction), +electric field at a macroscopic poisition inside the thin film can be plotted. +Using the file ``/m000001/Si_rt.data``, electric field at the front surface is drawn +by red curve. Using the file ``/m000008/Si_rt.data``, electric field at the back surface +is drawn by blue curve. + + .. image:: images/exc7/exc7-efield2.png + :scale: 60% + +We find that the amplitude of the electric field at the front surface is small. +It is consistent with the previous figure that showed incident and reflected pulses +with a similar amplitude and opposite phase. + +**Si_m/mxxxxxx/Si_rt_energy.data** + +The number *xxxxxx* in the directory name *mxxxxxx* specifies the position of +macroscopic grid point. +*Eall* and *Eall-Eall0* are total energy and electronic excitation energy, respectively. + +:: + + # Real time calculation: + # Eall: Total energy + # Eall0: Initial energy + # 1:Time[fs] 2:Eall[eV] 3:Eall-Eall0[eV] + +The figure below shows the electronic excitation energy per unit cell volume +at front and back surfaces using 1st columnn (time in femtosecond) and 3rd column +(*Eall-Eall0*). +Using the file ``/m000001/Si_rt_energy.data``, the excitation energy at the +front surface is drawn by red curve. Using the file ``/m000008/Si_rt_energy.data``, +the excitation energy at the back surface is drawn by blue curve. + + .. image:: images/exc7/exc7-energy2.png + :scale: 60% + +The excitation energy is much larger at the back surface compared with the energy +at the front surface. This is because the amplitude of the electric field +at the back surface is larger than that of the front surface, as seen in the +previous figure, and the excitation is a nonlinear process. + +**Si_RT_Ac/Si_Ac_yyyyyy.data** + +The number *yyyyyy* in the file name ``Si_Ac_yyyyyy.data`` specifies the time step. +Various quantities at the time step are included in the file as functions of macroscopic +position index. + +:: + + # Multiscale TDDFT calculation + # IX, IY, IZ: FDTD Grid index + # x, y, z: Coordinates + # Ac: Vector potential field + # E: Electric field + # J_em: Electromagnetic current density + # 1:IX[none] 2:IY[none] 3:IZ[none] 4:Ac_x[fs*V/Angstrom] 5:Ac_y[fs*V/Angstrom] + # 6:Ac_z[fs*V/Angstrom] 7:E_x[V/Angstrom] 8:E_y[V/Angstrom] 9:E_z[V/Angstrom] 10:B_x[a.u.] + # 11:B_y[a.u.] 12:B_z[a.u.] 13:Jem_x[1/fs*Angstrom^2] 14:Jem_y[1/fs*Angstrom^2] + # 15:Jem_z[1/fs*Angstrom^2] 16:E_em[eV/vol] 17:E_abs[eV/vol] + +The figure below shows spatial dependence of the electric field at three times, +:math:`t=0` fs (initial), :math:`t=8` fs (pulse goes through the film), and +:math:`t=16` fs (final). It is drawn using the first column multiplied by the +step size of :math:`X` and 9th column (electric field). + + .. image:: images/exc7/exc7-efield-x.png + :scale: 60% + + + + +Geometry optimization and Ehrenfest molecular dynamics +------------------------------------------------------ + +.. _exercise-8: + +Exercise-8: Geometry optimization of C2H2 molecule +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In this exercise, we learn the calculation of geometry optimization of acetylene (C2H2) molecule, +solving the static Kohn-Sham equation. +This exercise will be useful to learn how to set up calculations in +SALMON for any isolated systems such as molecules and nanoparticles. + +Input files +^^^^^^^^^^^ + +To run the code, following files in samples are used: + ++-----------------------------------+-----------------------------------+ +| file name | description | ++-----------------------------------+-----------------------------------+ +| *C2H2_opt.inp* | input file that contains input | +| | keywords and their values | ++-----------------------------------+-----------------------------------+ +| *C_rps.dat* | pseodupotential file for carbon | +| | atom | ++-----------------------------------+-----------------------------------+ +| *H_rps.dat* | pseudopotential file for hydrogen | +| | atom | ++-----------------------------------+-----------------------------------+ + +In the input file ``C2H2_opt.inp``, input keywords are specified. +Most of them are mandatory to execute the geometry optimization. +This will help you to prepare an input file for other systems that you +want to calculate. A complete list of the input keywords that can be +used in the input file can be found in +:any:`List of input keywords `. + +:: + + !########################################################################################! + ! Excercise 08: Geometry optimization of C2H2 molecule ! + !----------------------------------------------------------------------------------------! + ! * The detail of this excercise is expained in our manual(see chapter: 'Exercises'). ! + ! The manual can be obtained from: https://salmon-tddft.jp/documents.html ! + ! * Input format consists of group of keywords like: ! + ! &group ! + ! input keyword = xxx ! + ! / ! + ! (see chapter: 'List of input keywords' in the manual) ! + !----------------------------------------------------------------------------------------! + ! * Conversion from unit_system = 'a.u.' to 'A_eV_fs': ! + ! Length: 1 [a.u.] = 0.52917721067 [Angstrom] ! + ! Energy: 1 [a.u.] = 27.21138505 [eV] ! + ! Time : 1 [a.u.] = 0.02418884326505 [fs] ! + !########################################################################################! + + &calculation + !type of theory + theory = 'dft' + + !geometry optimization option + yn_opt = 'y' + / + +| :any:`theory ` specifies which theoretical method is used in the calculation. +| :any:`yn_opt ` is a switch to carry out the structure optimization. + +:: + + &control + !common name of output files + sysname = 'C2H2' + / + +| :any:`sysname ` is a prefix for filenames of output files. + +:: + + &units + !units used in input and output files + unit_system = 'A_eV_fs' + / + +| :any:`unit_system ` specifies which unit system is used in the input and output files. + +:: + + &system + !periodic boundary condition + yn_periodic = 'n' + + !grid box size(x,y,z) + al(1:3) = 12.0d0, 12.0d0, 16.0d0 + + !number of elements, atoms, electrons and states(orbitals) + nelem = 2 + natom = 4 + nelec = 10 + nstate = 6 + / + +| :any:`yn_periodic ` specifies whether or not periodic boundary condition is applied. +| :any:`al(i) ` specifies the spatial box size of the cubiod cell. +| :any:`nelem ` is the number of elements in the system. +| :any:`natom ` is the number of atoms in the system. +| :any:`nelec ` is the number of electrons in the system. +| :any:`nstate ` is the number of orbitals that are used in the calculation. + +:: + + &pseudo + !name of input pseudo potential file + file_pseudo(1) = './C_rps.dat' + file_pseudo(2) = './H_rps.dat' + + !atomic number of element + izatom(1) = 6 + izatom(2) = 1 + + !angular momentum of pseudopotential that will be treated as local + lloc_ps(1) = 1 + lloc_ps(2) = 0 + !--- Caution ---------------------------------------! + ! Indices must correspond to those in &atomic_coor. ! + !---------------------------------------------------! + / + +| :any:`file_pseudo(n) ` specifies the filename of the pseudopotential file of the n-th element. +| :any:`izatom(n) ` is the atomic number of the n-th element. +| :any:`lloc_ps(n) ` specifies which angular momentum component is chosen as the local potential for the n-th element. + +:: + + &functional + !functional('PZ' is Perdew-Zunger LDA: Phys. Rev. B 23, 5048 (1981).) + xc = 'PZ' + / + +| :any:`xc ` specifies the exchange-correlation potential to be used in the calculation. + +:: + + &rgrid + !spatial grid spacing(x,y,z) + dl(1:3) = 0.20d0, 0.20d, 0.20d0 + / + +| :any:`dl(i) ` specifies the spatial grid spacing in i-th direction. + +:: + + &scf + !maximum number of scf iteration and threshold of convergence for ground state calculation + nscf = 300 + threshold = 1.0d-9 + / + +| :any:`nscf ` specifies the maximum number of SCF iterations. +| :any:`threshold ` specifies the threshold to judge the convergence. + +:: + + &opt + !threshold(maximum force on atom) of convergence for geometry optimization + convrg_opt_fmax = 1.0d-3 + / + + &atomic_coor + !cartesian atomic coodinates + 'C' 0.0 0.0 0.6 1 y + 'H' 0.0 0.0 1.7 2 y + 'C' 0.0 0.0 -0.6 1 y + 'H' 0.0 0.0 -1.7 2 y + !--- Format -------------------------------------------------------! + ! 'symbol' x y z index(correspond to that of pseudo potential) y/n ! + !--- Caution ------------------------------------------------------! + ! final index(y/n) determines free/fix for the atom coordinate. ! + !------------------------------------------------------------------! + / + +| :any:`&atomic_coor <&atomic_coor>` specifies spatial coordinates of atoms. + +.. _output-files-8: + +Output files +^^^^^^^^^^^^ + +After the calculation, following output files and a directory are created in the +directory that you run the code, + ++-------------------------------------+------------------------------------+ +| name | description | ++-------------------------------------+------------------------------------+ +| *C2H2_info.data* | information on ground state | +| | solution | ++-------------------------------------+------------------------------------+ +| *C2H2_eigen.data* | 1 particle energies | ++-------------------------------------+------------------------------------+ +| *C2H2_trj.xyz* | atomic coordinates during the | +| | geometry optimization | ++-------------------------------------+------------------------------------+ +| *C2H2_k.data* | k-point distribution | +| | (for isolated systems, only | +| | gamma point is described) | ++-------------------------------------+------------------------------------+ +| *data_for_restart* | directory where files used in | +| | the real-time calculation are | +| | contained | ++-------------------------------------+------------------------------------+ +| *PS_C_KY_n.dat* | information on pseodupotential | +| | file for carbon atom | ++-------------------------------------+------------------------------------+ +| *PS_H_KY_n.dat* | information on pseodupotential | +| | file for hydrogen atom | ++-------------------------------------+------------------------------------+ + +| You may download the above files (zipped file, except for the directory ``data_for_restart``) from: +| https://salmon-tddft.jp/webmanual/v_2_0_1/exercise_zip_files/08_C2H2_opt.zip + +Main results of the calculation such as orbital energies are included in ``C2H2_info.data``. +Explanations of the *C2H2_info.data* and other output files are below: + +**C2H2_info.data** + +Calculated orbital and total energies as well as parameters specified in +the input file are shown in this file. + +**C2H2_eigen.data** + +1 particle energies. + +:: + + #esp: single-particle energies (eigen energies) + #occ: occupation numbers, io: orbital index + # 1:io, 2:esp[eV], 3:occ + +**C2H2_trj.xyz** + +The atomic coordinates during the geometry optimization in xyz format. + +**C2H2_k.data** + +k-point distribution(for isolated systems, only gamma point is described). + +:: + + # ik: k-point index + # kx,ky,kz: Reduced coordinate of k-points + # wk: Weight of k-point + # 1:ik[none] 2:kx[none] 3:ky[none] 4:kz[none] 5:wk[none] + # coefficients (2*pi/a [a.u.]) in kx, ky, kz + +.. _exercise-9: + +Exercise-9: Ehrenfest molecular dynamics of C2H2 molecule +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In this exercise, we learn the calculation of the molecular dynamics in +the acetylene (C2H2) molecule under a pulsed electric field, solving the +time-dependent Kohn-Sham equation and the Newtonian equation. +As outputs of the calculation, time-evolution of the electron density as well as molecular structures +and associated quantities such as the electron and ion kinetic energies, the electric dipole moment of the +system and temperature as functions of time are calculated.. +This tutorial should be carried out after finishing the geometry optimization that was +explained in :any:`Exercise-8 `. +In the calculation, a pulsed electric field that has :math:`\cos^2` envelope shape is applied. +The parameters that characterize the pulsed field such as magnitude, frequency, polarization direction, +and carrier envelope phase are specified in the input file. + +Input files +^^^^^^^^^^^ + +To run the code, following files in samples are used. +The directory ``restart`` is created in the ground state calculation as ``data_for_restart``. +Pseudopotential files are already used in the geometry optimization. +Therefore, ``C2H2_md.inp`` that specifies input keywords and their values +for the pulsed electric field and molecular dynamics calculations +is the only file that the users need to prepare. + ++-----------------------------------+-------------------------------------+ +| file name | description | ++-----------------------------------+-------------------------------------+ +| *C2H2_md.inp* | input file that contain input | +| | keywords and their values. | ++-----------------------------------+-------------------------------------+ +| *C_rps.dat* | pseodupotential file for carbon | ++-----------------------------------+-------------------------------------+ +| *H_rps.dat* | pseudopotential file for hydrogen | ++-----------------------------------+-------------------------------------+ +| *restart* | | directory created in the geometry | +| | optimization | +| | | (rename the directory from | +| | *data_for_restart* to *restart*) | ++-----------------------------------+-------------------------------------+ + +In the input file ``C2H2_md.inp``, input keywords are specified. +Most of them are mandatory to execute the calculation of +electron dynamics induced by a pulsed electric field. +This will help you to prepare the input file for other systems and other +pulsed electric fields with molecular dynamics calculation that you want to calculate. +A complete list of the input keywords that can be used in the input file can be found in +:any:`List of input keywords `. + +:: + + !########################################################################################! + ! Excercise 09: Ehrenfest molecular dynamics of C2H2 molecule ! + !----------------------------------------------------------------------------------------! + ! * The detail of this excercise is expained in our manual(see chapter: 'Exercises'). ! + ! The manual can be obtained from: https://salmon-tddft.jp/documents.html ! + ! * Input format consists of group of keywords like: ! + ! &group ! + ! input keyword = xxx ! + ! / ! + ! (see chapter: 'List of input keywords' in the manual) ! + !----------------------------------------------------------------------------------------! + ! * Conversion from unit_system = 'a.u.' to 'A_eV_fs': ! + ! Length: 1 [a.u.] = 0.52917721067 [Angstrom] ! + ! Energy: 1 [a.u.] = 27.21138505 [eV] ! + ! Time : 1 [a.u.] = 0.02418884326505 [fs] ! + !----------------------------------------------------------------------------------------! + ! * Ehrenfest-MD option is still trial. ! + ! * Copy the ground state data directory ('data_for_restart') (or make symbolic link) ! + ! calculated in 'samples/exercise_08_C2H2_opt/' and rename the directory to 'restart/' ! + ! in the current directory. ! + !########################################################################################! + + &calculation + !type of theory + theory = 'tddft_pulse' + + !molecular dynamics option + yn_md = 'y' + / + +| :any:`theory ` specifies which theoretical method is used in the calculation. +| :any:`yn_md ` is a switch for Ehrenfest molecular dynamics. + +:: + + &control + !common name of output files + sysname = 'C2H2' + / + +| :any:`sysname ` is a prefix for filenames of output files. + +:: + + &units + !units used in input and output files + unit_system = 'A_eV_fs' + / + +| :any:`unit_system ` specifies which unit system is used in the input and output files. + +:: + + &system + !periodic boundary condition + yn_periodic = 'n' + + !grid box size(x,y,z) + al(1:3) = 12.0d0, 12.0d0, 16.0d0 + + !number of elements, atoms, electrons and states(orbitals) + nelem = 2 + natom = 4 + nelec = 10 + nstate = 6 + / + +| :any:`yn_periodic ` specifies whether or not periodic boundary condition is applied. +| :any:`al(i) ` specifies the spatial box size of the cubiod cell. +| :any:`nelem ` is the number of elements in the system. +| :any:`natom ` is the number of atoms in the system. +| :any:`nelec ` is the number of electrons in the system. +| :any:`nstate ` is the number of orbitals that are used in the calculation. + +:: + + &pseudo + !name of input pseudo potential file + file_pseudo(1) = './C_rps.dat' + file_pseudo(2) = './H_rps.dat' + + !atomic number of element + izatom(1) = 6 + izatom(2) = 1 + + !angular momentum of pseudopotential that will be treated as local + lloc_ps(1) = 1 + lloc_ps(2) = 0 + !--- Caution ---------------------------------------! + ! Indices must correspond to those in &atomic_coor. ! + !---------------------------------------------------! + / + +| :any:`file_pseudo(n) ` specifies the filename of the pseudopotential file of the n-th element. +| :any:`izatom(n) ` is the atomic number of the n-th element. +| :any:`lloc_ps(n) ` specifies which angular momentum component is chosen as the local potential for the n-th element. + +:: + + &functional + !functional('PZ' is Perdew-Zunger LDA: Phys. Rev. B 23, 5048 (1981).) + xc = 'PZ' + / + +| :any:`xc ` specifies the exchange-correlation potential to be used in the calculation. + +:: + + &rgrid + !spatial grid spacing(x,y,z) + dl(1:3) = 0.20d0, 0.20d0, 0.20d0 + / + +| :any:`dl(i) ` specifies the spatial grid spacing in i-th direction. + +:: + + &tgrid + !time step size and number of time grids(steps) + dt = 1.00d-3 + nt = 5000 + / + +| :any:`dt` specifies the time step. +| :any:`nt` is the number of time steps for the time propagation. + +:: + + &emfield + !envelope shape of the incident pulse('Ecos2': cos^2 type envelope for scalar potential) + ae_shape1 = 'Ecos2' + + !peak intensity(W/cm^2) of the incident pulse + I_wcm2_1 = 1.00d8 + + !duration of the incident pulse + tw1 = 6.00d0 + + !mean photon energy(average frequency multiplied by the Planck constant) of the incident pulse + omega1 = 9.28d0 + + !polarization unit vector(real part) for the incident pulse(x,y,z) + epdir_re1(1:3) = 0.00d0, 0.00d0, 1.00d0 + + !carrier emvelope phase of the incident pulse + !(phi_cep1 must be 0.25 + 0.5 * n(integer) when ae_shape1 = 'Ecos2') + phi_cep1 = 0.75d0 + !--- Caution ---------------------------------------------------------! + ! Defenition of the incident pulse is wrriten in: ! + ! https://www.sciencedirect.com/science/article/pii/S0010465518303412 ! + !---------------------------------------------------------------------! + / + +| :any:`ae_shape1 ` specifies the envelope of the field. +| :any:`I_wcm2_1 ` specify the intensity of the pulse in unit of W/cm\ :sup:`2`\. +| :any:`tw1 ` specifies the duration of the pulse. +| :any:`omega1 ` specifies the mean photon energy of the pulse. +| :any:`epdir_re1(i) ` specifies the i-th component of the real part of the polarization unit vector. +| :any:`phi_cep1 ` specifies the carrier-envelope phase of the pulse. + +:: + + &md + !ensemble + ensemble = 'NVE' + + !set of initial velocities + yn_set_ini_velocity = 'y' + + !setting temperature [K] for NVT ensemble, velocity scaling, + !and generating initial velocities + temperature0_ion_k = 300.0d0 + + !time step interval for updating pseudopotential + step_update_ps = 20 + / + +| :any:`ensemble ` specifies the choice of the ensemble. +| :any:`yn_set_ini_velocity ` is a switch to prepare initial velocity for atoms. +| :any:`temperature0_ion_k ` specifies the temperature that is used to generate initial velocity of ions. +| :any:`step_update_ps ` specifies the time step interval to update projector for the nonlocal pseudopotential. + +.. _output-files-9: + +Output files +^^^^^^^^^^^^ + +After the calculation, following output files are created in the +directory that you run the code, + ++-------------------------------------+------------------------------------+ +| file name | description | ++-------------------------------------+------------------------------------+ +| *C2H2_pulse.data* | dipole moment as | +| | functions of energy | ++-------------------------------------+------------------------------------+ +| *C2H2_rt.data* | | components of | +| | change of dipole moment | +| | (electrons/plus definition) | +| | | and total dipole moment | +| | (electrons/minus + ions/plus) | +| | as functions of time | ++-------------------------------------+------------------------------------+ +| *C2H2_rt_energy.data* | components of | +| | total energy | +| | and difference of total energy | +| | as functions of time | ++-------------------------------------+------------------------------------+ +| *C2H2_trj.xyz* | Trajectory of atoms(ions): | +| | Atomic coordinates, velocities, | +| | and forces are printed | ++-------------------------------------+------------------------------------+ +| *PS_C_KY_n.dat* | information on pseodupotential | +| | file for carbon atom | ++-------------------------------------+------------------------------------+ +| *PS_H_KY_n.dat* | information on pseodupotential | +| | file for hydrogen atom | ++-------------------------------------+------------------------------------+ + +| You may download the above files (zipped file) from: +| https://salmon-tddft.jp/webmanual/v_2_0_1/exercise_zip_files/09_C2H2_md.zip + +Explanations of the files are described below: + +**C2H2_pulse.data** + +Time-frequency Fourier transformation of the dipole moment. + +:: + + # Fourier-transform spectra: + # energy: Frequency + # dm: Dopile moment + # 1:energy[eV] 2:Re(dm_x)[fs*Angstrom] 3:Re(dm_y)[fs*Angstrom] 4:Re(dm_z)[fs*Angstrom] 5:Im(dm_x)[fs*Angstrom] 6:Im(dm_y)[fs*Angstrom] 7:Im(dm_z)[fs*Angstrom] 8:|dm_x|^2[fs^2*Angstrom^2] 9:|dm_y|^2[fs^2*Angstrom^2] 10:|dm_z|^2[fs^2*Angstrom^2] + +**C2H2_rt.data** + +Results of time evolution calculation for vector potential, electric field, and dipole moment. + +:: + + # Real time calculation: + # Ac_ext: External vector potential field + # E_ext: External electric field + # Ac_tot: Total vector potential field + # E_tot: Total electric field + # ddm_e: Change of dipole moment (electrons/plus definition) + # dm: Total dipole moment (electrons/minus + ions/plus) + # 1:Time[fs] 2:Ac_ext_x[fs*V/Angstrom] 3:Ac_ext_y[fs*V/Angstrom] 4:Ac_ext_z[fs*V/Angstrom] 5:E_ext_x[V/Angstrom] 6:E_ext_y[V/Angstrom] 7:E_ext_z[V/Angstrom] 8:Ac_tot_x[fs*V/Angstrom] 9:Ac_tot_y[fs*V/Angstrom] 10:Ac_tot_z[fs*V/Angstrom] 11:E_tot_x[V/Angstrom] 12:E_tot_y[V/Angstrom] 13:E_tot_z[V/Angstrom] 14:ddm_e_x[Angstrom] 15:ddm_e_y[Angstrom] 16:ddm_e_z[Angstrom] 17:dm_x[Angstrom] 18:dm_y[Angstrom] 19:dm_z[Angstrom] + +**C2H2_rt_energy.data** + +*Eall* and *Eall-Eall0* are total energy and electronic excitation energy, respectively. + +:: + + # Real time calculation: + # Eall: Total energy + # Eall0: Initial energy + # Tion: Kinetic energy of ions + # Temperature_ion: Temperature of ions + # E_work: Work energy of ions(sum f*dr) + # 1:Time[fs] 2:Eall[eV] 3:Eall-Eall0[eV] # 4:Tion[eV] 5:Temperature_ion[K] 6:E_work[eV] + +**C2H2_trj.xyz** + +Atomic coordinates [Angstrom], velocities [a.u.] and forces [a.u.] are printed along the time evolution in xyz format. + +FDTD simulation(electromagnetic analysis) +----------------------------------------- + +.. _exercise-10: + +Exercise-10: Absorption-, Scattering-, and Extinction-cross-sections of an Au nanoparticle in FDTD simulation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In this exercise, we learn the calculation of the absorption-, scattering-, and extinction-cross-sections of an Au nanoparticle, +by applying the incident pulse in the time-dependent Maxwell equations. +As outputs of the calculation, those cross-sections and the time response of the electromagnetic field are calculated. +A pulsed electric field that has :math:`\cos^2` envelope shape is applied. +The parameters that characterize the pulsed field such as magnitude, frequency, polarization direction, and carrier envelope phase are specified in the input file. + +Input files +^^^^^^^^^^^ +To run the code, the input file ``AuNP_fdtd.inp`` is used: + ++-----------------------------------+------------------------------------+ +| file name | description | ++-----------------------------------+------------------------------------+ +| *AuNP_fdtd.inp* | input file that contains input | +| | keywords and their values. | ++-----------------------------------+------------------------------------+ + +In the input file ``AuNP_fdtd.inp``, input keywords are specified. +Most of them are mandatory to execute this exercise. +This will help you to prepare the input file for other systems that you want to calculate. +A complete list of the input keywords that can be used in the input file +can be found in :any:`List of input keywords `. + +:: + + !########################################################################################! + ! Excercise 10: Absorption-, Scattering-, and Extinction-cross-sections ! + ! of an Au nanoparticle in FDTD simulation ! + !----------------------------------------------------------------------------------------! + ! * The detail of this excercise is explained in our manual(see chapter: 'Exercises'). ! + ! The manual can be obtained from: https://salmon-tddft.jp/documents.html ! + ! * Input format consists of group of keywords like: ! + ! &group ! + ! input keyword = xxx ! + ! / ! + ! (see chapter: 'List of input keywords' in the manual) ! + !----------------------------------------------------------------------------------------! + ! * Conversion from unit_system = 'a.u.' to 'A_eV_fs': ! + ! Length: 1 [a.u.] = 0.52917721067 [Angstrom] ! + ! Energy: 1 [a.u.] = 27.21138505 [eV] ! + ! Time : 1 [a.u.] = 0.02418884326505 [fs] ! + !########################################################################################! + + &calculation + !type of theory + theory = 'maxwell' + / + +| :any:`theory ` specifies which theoretical method is used in the calculation. + +:: + + &control + !common name of output files + sysname = 'AuNP' + + !name of directory where output files are contained + base_directory = 'result' + / + +| :any:`sysname ` is a prefix for filenames of output files. +| :any:`base_directory ` specifies the directory name where output files are generated. + +:: + + &units + !units used in input and output files + unit_system = 'A_eV_fs' + / + +| :any:`unit_system ` specifies which unit system is used in the input and output files. + +:: + + &system + !periodic boundary condition + yn_periodic = 'n' + / + +| :any:`yn_periodic ` specifies whether or not periodic boundary condition is applied. + +:: + + &emfield + !envelope shape of the incident pulse('Ecos2': cos^2 type envelope for scalar potential) + ae_shape1 = 'Ecos2' + + !peak intensity(W/cm^2) of the incident pulse + I_wcm2_1 = 1.00d6 + + !duration of the incident pulse + tw1 = 7.50d0 + + !mean photon energy(average frequency multiplied by the Planck constant) of the incident pulse + omega1 = 2.30d0 + + !polarization unit vector(real part) for the incident pulse(x,y,z) + epdir_re1(1:3) = 1.00d0, 0.00d0, 0.00d0 + + !carrier emvelope phase of the incident pulse + !(phi_cep1 must be 0.25 + 0.5 * n(integer) when ae_shape1 = 'Ecos2') + phi_cep1 = 0.75d0 + !--- Caution ---------------------------------------------------------! + ! Definition of the incident pulse is written in: ! + ! https://www.sciencedirect.com/science/article/pii/S0010465518303412 ! + !---------------------------------------------------------------------! + / + +| :any:`ae_shape1 ` specifies the envelope of the field. +| :any:`I_wcm2_1 ` specify the intensity of the pulse in unit of W/cm\ :sup:`2`\. +| :any:`tw1 ` specifies the duration of the pulse. +| :any:`omega1 ` specifies the mean photon energy of the pulse. +| :any:`epdir_re1(i) ` specifies the i-th component of the real part of the polarization unit vector. +| :any:`phi_cep1 ` specifies the carrier-envelope phase of the pulse. + +:: + + &maxwell + !grid box size(x,y,z) and number of spatial grids(x,y,z) + al_em(1:3) = 600.0d1, 600.0d1, 600.0d1 + num_rgrid_em(1:3) = 100, 100, 100 + !--- Caution ---------------------------------------------------------! + ! Copumutational domain is set as: ! + ! -al_em/2 ~ al_em/2 for yn_periodic='n' ! + ! whereas 0 ~ al_em for yn_periodic='y'. ! + !---------------------------------------------------------------------! + + !total time + at_em = 50.0d0 + !--- TIPS ------------------------------------------------------------! + ! Two of at_em, dt_em, and nt_em must be set. ! + ! Otherwise, both at_em and nt_em or either of those must be set. ! + ! The latter automatically determines dt_em from CFL condition. ! + !---------------------------------------------------------------------! + + !*** SHAPE INFORMATION(START) ****************************************! + !make and output shape file + yn_make_shape = 'y' + yn_output_shape = 'y' + + !number of shape-template + n_s = 1 + + !media ID and type of shape-template(shape ID) + id_s(1) = 1 + typ_s(1) = 'ellipsoid' + + !information and origin of shape-template: + !inf_s(shape ID,x-diameter,y-diameter,z-diameter) + !ori_s(shape ID,x,y,z) + inf_s(1,1:3) = 200.0d1, 200.0d1, 200.0d1 + ori_s(1,1:3) = 0.000d1, 0.000d1, 0.000d1 + !--- TIPS ------------------------------------------------------------! + ! * shape file can be generated by also an external program ! + ! 'FDTD_make_shape' in SALMON utilities ! + ! (https://salmon-tddft.jp/utilities.html). ! + ! The generated shape file can be read by an input keyword ! + ! 'shape_file' in &maxwell. ! + ! * More complex shapes can be generated by other input keywords ! + ! which are in common with those used in 'FDTD_make_shape'. ! + !---------------------------------------------------------------------! + !*** SHAPE INFORMATION(END) ******************************************! + + !*** MEDIA INFORMATION(START) ****************************************! + !number and type of media(media ID) + media_num = 1 + media_type(1) = 'lorentz-drude' + !--- Au described by Lorentz-Drude model -----------------------------! + ! The parameters are determined from: ! + ! (https://doi.org/10.1364/AO.37.005271) ! + !---------------------------------------------------------------------! + + !number of poles and plasma frequency of LD media(media ID) + pole_num_ld(1) = 6 + omega_p_ld(1) = 9.030d0 + + !oscillator strength, collision frequency, + !and oscillator frequency of LD media(media ID,pole ID) + f_ld(1,1:6) = 0.760d0, 0.024d0, 0.010d0, 0.071d0, 0.601d0, 4.384d0 + gamma_ld(1,1:6) = 0.053d0, 0.241d0, 0.345d0, 0.870d0, 2.494d0, 2.214d0 + omega_ld(1,1:6) = 0.000d0, 0.415d0, 0.830d0, 2.969d0, 4.304d0, 13.32d0 + !--- TIPS ------------------------------------------------------------! + ! If you calclate a metallic nanoparticle surrounded by something ! + ! other than vacuum/air, such as Au nanoparticle in water solution, ! + ! you should change 'epsilon_em(0)' in &maxwell, ! + ! which specifies the permittivity of surrounding medium. ! + !---------------------------------------------------------------------! + !*** MEDIA INFORMATION(END) ******************************************! + + !*** SOURCE INFORMATION(START) ***************************************! + !type of method to generate the incident pulse + !('source': incident current source) + wave_input = 'source' + + !location of source(x,y,z) + source_loc1(1:3) = 0.000d1, 0.000d1, -200.0d1 + + !propagation direction of the incident pulse(x,y,z) + ek_dir1(1:3) = 0.000d0, 0.000d0, 1.000d0 + !*** SOURCE INFORMATION(END) *****************************************! + + !*** ASE INFORMATION(START) ******************************************! + !number of wavelength grid points + !for Absorption-, Scattering-, and Extinction-cross-sections(ASE) + !normalized by the spectral distribution of the incident pulse + ase_num_em = 100 + + !minimum and maximum values of wavelength for ASE + ase_wav_min_em = 400.0d1 + ase_wav_max_em = 800.0d1 + !--- TIPS ------------------------------------------------------------! + ! ase_ene_min_em and ase_wav_max_em can also be available. ! + ! If those are used, ASE are outputed for energy axis. ! + !---------------------------------------------------------------------! + + !size of a closed surface (box shape) to calculate ASE(x-size,y-size,z-size) + ase_box_size_em(1:3) = 300.0d1, 300.0d1, 300.0d1 + !*** ASE INFORMATION(END) *********************************************! + + !*** OBSERVATION INFORMATION(START) ***********************************! + !number of observation points + obs_num_em = 1 + + !location of observation point(observation ID,x,y,z) + obs_loc_em(1,1:3) = 0.0d0, 0.0d0, 0.0d0 + !--- TIPS ------------------------------------------------------------! + ! * If you specify yn_obs_plane_em(1) = 'y', ! + ! animation files can be made by an external program ! + ! 'FDTD_make_figani' in SALMON utilities. ! + ! (https://salmon-tddft.jp/utilities.html). ! + ! The animation file visualizes electromagnetic field distributions ! + ! on the cross-section including the observation point ! + ! whose location is determined by obs_loc_em. ! + ! * If you specify obs_plane_ene_em(1,1:n) by certain values ! + ! space-energy distribution of electromagnetic field is outputed ! + !---------------------------------------------------------------------! + !*** OBSERVATION INFORMATION(END) ************************************! + / + +| :any:`al_em(i) ` specifies the lengths of three sides of the cuboid where the grid points are prepared. +| :any:`num_rgrid_em(i) ` specifies the number of grid points in i-th direction. +| :any:`at_em ` specifies total time for electromagnetic analysis. +| :any:`yn_make_shape ` is a switch for making shape. This is same functionality for ``FDTD_make_shape`` in SALMON utilities (https://salmon-tddft.jp/utilities.html). +| :any:`yn_output_shape ` is a switch for outputing shape in cube file format. +| :any:`n_s ` specifies number of shape-template. +| :any:`id_s(n) ` specifies media ID for n-th shape-template. +| :any:`typ_s(n) ` specifies type for n-th shape-template. +| :any:`inf_s(n,i) ` specifies i-th information for n-th shape-template. +| :any:`ori_s(n,i) ` specifies origin for n-th shape-template. +| :any:`media_num ` specifies the number of the types of media that is provided in the shape file. +| :any:`media_type(n) ` specifies the type of the n-th media. +| :any:`pole_num_ld(n) ` and :any:`omega_p_ld(n) ` specify the number of poles and the plasmal frequency of the n-th media, respectively. +| :any:`f_ld(n,m) `, :any:`omega_ld(n,m) `, :any:`gamma_ld(n,m) ` specify the oscillator strength, oscillator frequency, and collision frequency of the m-th pole of the n-th media, respectively. +| :any:`wave_input ` specifies an electric current source that is used for the generation of the pulse. +| :any:`source_loc1(i) ` specifies the coordinate of the current source. +| :any:`ek_dir1(i) ` specifies the propagation direction of the pulse. +| :any:`ase_num_em ` specifies number of wavelength grid points for Absorption-, Scattering-, and Extinction-cross-sections(ASE). +| :any:`ase_wav_min_em ` specifies minimum value of wavelength for ASE. +| :any:`ase_wav_max_em ` specifies maximum value of wavelength for ASE. +| :any:`ase_box_size_em ` specifies size of a closed surface (box shape) to calculate ASE. +| :any:`obs_num_em ` specifies the number of the observing point. +| :any:`obs_loc_em(n,i) ` specifies the coordinate of n-th observing point. + +.. _output-files-10: + +Output files +^^^^^^^^^^^^ + +After the calculation, following output files are created in the directory ``result``, + ++-------------------------------------+-----------------------------------+ +| file name | description | ++-------------------------------------+-----------------------------------+ +| *AuNP_ase_with_wf.data* | A-, S-, and E-corss-sections | +| | as functions of wavelength, | +| | where window function is applied | +| | in Fourier transformation | ++-------------------------------------+-----------------------------------+ +| *AuNP_ase_without_wf.data* | A-, S-, and E-corss-sections | +| | as functions of wavelength, | +| | where window function is not | +| | applied in Fourier transformation | ++-------------------------------------+-----------------------------------+ +| *obs1_at_point_rt.data* | components of | +| | electric and magnetic fields | +| | as functions of time | ++-------------------------------------+-----------------------------------+ +| *shape.cube* | shape file for fdtd | ++-------------------------------------+-----------------------------------+ + +Explanations of the files are described below: + +**AuNP_ase_with_wf.data** + +Results of A-, S-, and E-cross-sections normalized by the spectral distribution of the incident pulse. +Also the spectral distribution for pointing vector of incident pulse is included. +Window function is applied in Fourier transformation. + +:: + + # Absorption-, Scattering-, and Extinction-cross-sections normalized by the spectral distribution of the incident pulse (with window function): + # sigma_a: Absorption cross-section + # sigma_s: Scattering cross-section + # sigma_e: Extinction cross-section + # S: Pointing vector of incident pulse along propagation direction + # 1:Wavelength[Angstrom] 2:sigma_a[Angstrom^2] 3:sigma_s[Angstrom^2] 4:sigma_e[Angstrom^2] 5:S[VA/Angstrom^2*fs^2] + +**AuNP_ase_without_wf.data** + +Results of A-, S-, and E-cross-sections normalized by the spectral distribution of the incident pulse. +Also the spectral distribution for pointing vector of incident pulse is included. +Window function is not applied in Fourier transformation. + +:: + + # Absorption-, Scattering-, and Extinction-cross-sections normalized by the spectral distribution of the incident pulse (without window function): + # sigma_a: Absorption cross-section + # sigma_s: Scattering cross-section + # sigma_e: Extinction cross-section + # S: Pointing vector of incident pulse along propagation direction + # 1:Wavelength[Angstrom] 2:sigma_a[Angstrom^2] 3:sigma_s[Angstrom^2] 4:sigma_e[Angstrom^2] 5:S[VA/Angstrom^2*fs^2] + +**obs0_info.data** + +This file is used to generate animation files by using SALMON utilities with :any:`yn_obs_plane_em `: https://salmon-tddft.jp/utilities.html + +**obs1_at_point_rt.data** + +Results of time evolution calculation for electric and magnetic fields at observation point 1. + +:: + + # Real time calculation: + # E: Electric field + # H: Magnetic field + # 1:Time[fs] 2:E_x[V/Angstrom] 3:E_y[V/Angstrom] 4:E_z[V/Angstrom] 5:H_x[A/Angstrom] 6:H_y[A/Angstrom] 7:H_z[A/Angstrom] + +**shape.cube** + +Shape file generated by :any:`yn_make_shape `. + + +.. _exercise-11: + +Exercise-11: Absorption-, Reflection-, and Transmission-rates of an Au nanoparticles metasurface in FDTD simulation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In this exercise, we learn the calculation ofthe absorption-, reflection-, and transmission-rates of a metasurface, +in which Au nanoparticles are periodically arrayed in two-dimension, +by applying the incident pulse in the time-dependent Maxwell equations. +As outputs of the calculation, those rates and the time response of the electromagnetic field are calculated. +A pulsed electric field that has :math:`\cos^2` envelope shape is applied. +The parameters that characterize the pulsed field such as magnitude, frequency, polarization direction, and carrier envelope phase are specified in the input file. + +Input files +^^^^^^^^^^^ +To run the code, the input file ``AuNP_fdtd.inp`` is used: + ++-----------------------------------+------------------------------------+ +| file name | description | ++-----------------------------------+------------------------------------+ +| *AuNPs_fdtd.inp* | input file that contains input | +| | keywords and their values. | ++-----------------------------------+------------------------------------+ + +In the input file ``AuNPs_fdtd.inp``, input keywords are specified. +Most of them are mandatory to execute this exercise. +This will help you to prepare the input file for other systems that you want to calculate. +A complete list of the input keywords that can be used in the input file +can be found in :any:`List of input keywords `. + +:: + + !########################################################################################! + ! Excercise 11: Absorption-, Reflection-, and Transmission-rates ! + ! of an Au nanoparticles metasurface in FDTD simulation ! + !----------------------------------------------------------------------------------------! + ! * The detail of this excercise is explained in our manual(see chapter: 'Exercises'). ! + ! The manual can be obtained from: https://salmon-tddft.jp/documents.html ! + ! * Input format consists of group of keywords like: ! + ! &group ! + ! input keyword = xxx ! + ! / ! + ! (see chapter: 'List of input keywords' in the manual) ! + !----------------------------------------------------------------------------------------! + ! * Conversion from unit_system = 'a.u.' to 'A_eV_fs': ! + ! Length: 1 [a.u.] = 0.52917721067 [Angstrom] ! + ! Energy: 1 [a.u.] = 27.21138505 [eV] ! + ! Time : 1 [a.u.] = 0.02418884326505 [fs] ! + !########################################################################################! + + &calculation + !type of theory + theory = 'maxwell' + / + +| :any:`theory ` specifies which theoretical method is used in the calculation. + +:: + + &control + !common name of output files + sysname = 'AuNPs' + + !name of directory where output files are contained + base_directory = 'result' + / + +| :any:`sysname ` is a prefix for filenames of output files. +| :any:`base_directory ` specifies the directory name where output files are generated. + +:: + + &units + !units used in input and output files + unit_system = 'A_eV_fs' + / + +| :any:`unit_system ` specifies which unit system is used in the input and output files. + +:: + + &system + !periodic boundary condition + yn_periodic = 'y' + / + +| :any:`yn_periodic ` specifies whether or not periodic boundary condition is applied. + +:: + + &emfield + !envelope shape of the incident pulse('Ecos2': cos^2 type envelope for scalar potential) + ae_shape1 = 'Ecos2' + + !peak intensity(W/cm^2) of the incident pulse + I_wcm2_1 = 1.00d6 + + !duration of the incident pulse + tw1 = 7.50d0 + + !mean photon energy(average frequency multiplied by the Planck constant) of the incident pulse + omega1 = 2.30d0 + + !polarization unit vector(real part) for the incident pulse(x,y,z) + epdir_re1(1:3) = 1.00d0, 0.00d0, 0.00d0 + + !carrier emvelope phase of the incident pulse + !(phi_cep1 must be 0.25 + 0.5 * n(integer) when ae_shape1 = 'Ecos2') + phi_cep1 = 0.75d0 + !--- Caution ---------------------------------------------------------! + ! Definition of the incident pulse is written in: ! + ! https://www.sciencedirect.com/science/article/pii/S0010465518303412 ! + !---------------------------------------------------------------------! + / + +| :any:`ae_shape1 ` specifies the envelope of the field. +| :any:`I_wcm2_1 ` specify the intensity of the pulse in unit of W/cm\ :sup:`2`\. +| :any:`tw1 ` specifies the duration of the pulse. +| :any:`omega1 ` specifies the mean photon energy of the pulse. +| :any:`epdir_re1(i) ` specifies the i-th component of the real part of the polarization unit vector. +| :any:`phi_cep1 ` specifies the carrier-envelope phase of the pulse. + +:: + + &maxwell + !grid box size(x,y,z) and number of spatial grids(x,y,z) + al_em(1:3) = 300.0d1, 300.0d1, 600.0d1 + num_rgrid_em(1:3) = 50, 50, 100 + !--- Caution ---------------------------------------------------------! + ! Copumutational domain is set as: ! + ! -al_em/2 ~ al_em/2 for yn_periodic='n' ! + ! whereas 0 ~ al_em for yn_periodic='y'. ! + !---------------------------------------------------------------------! + + !total time + at_em = 50.0d0 + !--- TIPS ------------------------------------------------------------! + ! Two of at_em, dt_em, and nt_em must be set. ! + ! Otherwise, both at_em and nt_em or either of those must be set. ! + ! The latter automatically determines dt_em from CFL condition. ! + !---------------------------------------------------------------------! + + !absorbing boudnary conditions at bottom and top on z axis + boundary_em(3,1) = 'abc' + boundary_em(3,2) = 'abc' + + !*** SHAPE INFORMATION(START) ****************************************! + !make and output shape file + yn_make_shape = 'y' + yn_output_shape = 'y' + + !number of shape-template + n_s = 1 + + !media ID and type of shape-template(shape ID) + id_s(1) = 1 + typ_s(1) = 'ellipsoid' + + !information and origin of shape-template: + !inf_s(shape ID,x-diameter,y-diameter,z-diameter) + !ori_s(shape ID,x,y,z) + inf_s(1,1:3) = 200.0d1, 200.0d1, 200.0d1 + ori_s(1,1:3) = 150.0d1, 150.0d1, 300.0d1 + !--- TIPS ------------------------------------------------------------! + ! * shape file can be generated by also an external program ! + ! 'FDTD_make_shape' in SALMON utilities ! + ! (https://salmon-tddft.jp/utilities.html). ! + ! The generated shape file can be read by an input keyword ! + ! 'shape_file' in &maxwell. ! + ! * More complex shapes can be generated by other input keywords ! + ! which are in common with those used in 'FDTD_make_shape'. ! + !---------------------------------------------------------------------! + !*** SHAPE INFORMATION(END) ******************************************! + + !*** MEDIA INFORMATION(START) ****************************************! + !number and type of media(media ID) + media_num = 1 + media_type(1) = 'lorentz-drude' + !--- Au described by Lorentz-Drude model -----------------------------! + ! The parameters are determined from: ! + ! (https://doi.org/10.1364/AO.37.005271) ! + !---------------------------------------------------------------------! + + !number of poles and plasma frequency of LD media(media ID) + pole_num_ld(1) = 6 + omega_p_ld(1) = 9.030d0 + + !oscillator strength, collision frequency, + !and oscillator frequency of LD media(media ID,pole ID) + f_ld(1,1:6) = 0.760d0, 0.024d0, 0.010d0, 0.071d0, 0.601d0, 4.384d0 + gamma_ld(1,1:6) = 0.053d0, 0.241d0, 0.345d0, 0.870d0, 2.494d0, 2.214d0 + omega_ld(1,1:6) = 0.000d0, 0.415d0, 0.830d0, 2.969d0, 4.304d0, 13.32d0 + !--- TIPS ------------------------------------------------------------! + ! If you calclate a metallic nanoparticles surrounded by something ! + ! other than vacuum/air, such as Au nanoparticles in water solution, ! + ! you should change 'epsilon_em(0)' in &maxwell, ! + ! which specifies the permittivity of surrounding medium. ! + !---------------------------------------------------------------------! + !*** MEDIA INFORMATION(END) ******************************************! + + !*** SOURCE INFORMATION(START) ***************************************! + !type of method to generate the incident pulse + !('source': incident current source) + wave_input = 'source' + + !location of source(x,y,z) + source_loc1(1:3) = 0.000d1, 0.000d1, 100.0d1 + + !propagation direction of the incident pulse(x,y,z) + ek_dir1(1:3) = 0.000d0, 0.000d0, 1.000d0 + !*** SOURCE INFORMATION(END) *****************************************! + + !*** ART INFORMATION(START) ******************************************! + !number of wavelength grid points + !for Absorption-, Reflection-, and Transmission-rates(ART) + !normalized by the spectral distribution of the incident pulse + art_num_em = 100 + + !minimum and maximum values of wavelength for ART + art_wav_min_em = 400.0d1 + art_wav_max_em = 800.0d1 + !--- TIPS ------------------------------------------------------------! + ! art_ene_min_em and art_wav_max_em also can be available. ! + ! If those are used, ART are outputed for energy axis. ! + !---------------------------------------------------------------------! + + !location of bottom and top planes on the propagation axis to calculate ART(x,y,z) + art_plane_bot_em(1:3) = 150.0d1, 150.0d1, 150.0d1 + art_plane_top_em(1:3) = 150.0d1, 150.0d1, 450.0d1 + !*** ART INFORMATION(END) *********************************************! + + !*** OBSERVATION INFORMATION(START) ***********************************! + !number of observation points + obs_num_em = 1 + + !location of observation point(observation ID,x,y,z) + obs_loc_em(1,1:3) = 150.0d1, 150.0d1, 300.0d1 + !--- TIPS ------------------------------------------------------------! + ! * If you specify yn_obs_plane_em(1) = 'y', ! + ! animation files can be made by an external program ! + ! 'FDTD_make_figani' in SALMON utilities. ! + ! (https://salmon-tddft.jp/utilities.html). ! + ! The animation file visualizes electromagnetic field distributions ! + ! on the cross-section including the observation point ! + ! whose location is determined by obs_loc_em. ! + ! * If you specify obs_plane_ene_em(1,1:n) by certain values ! + ! space-energy distribution of electromagnetic field is outputed ! + !---------------------------------------------------------------------! + !*** OBSERVATION INFORMATION(END) ************************************! + / + +| :any:`al_em(i) ` specifies the lengths of three sides of the cuboid where the grid points are prepared. +| :any:`num_rgrid_em(i) ` specifies the number of grid points in i-th direction. +| :any:`at_em ` specifies total time for electromagnetic analysis. +| :any:`boundary_em(i,n) ` specifies the boundary condition for the electromagnetic analysis. The first index i corresponds to the x,y, and z direction. The second index n specifies bottom or top of the material. +| :any:`yn_make_shape ` is a switch for making shape. This is same functionality for ``FDTD_make_shape`` in SALMON utilities (https://salmon-tddft.jp/utilities.html). +| :any:`yn_output_shape ` is a switch for outputing shape in cube file format. +| :any:`n_s ` specifies number of shape-template. +| :any:`id_s(n) ` specifies media ID for n-th shape-template. +| :any:`typ_s(n) ` specifies type for n-th shape-template. +| :any:`inf_s(n,i) ` specifies i-th information for n-th shape-template. +| :any:`ori_s(n,i) ` specifies origin for n-th shape-template. +| :any:`media_num ` specifies the number of the types of media that is provided in the shape file. +| :any:`media_type(n) ` specifies the type of the n-th media. +| :any:`pole_num_ld(n) ` and :any:`omega_p_ld(n) ` specify the number of poles and the plasmal frequency of the n-th media, respectively. +| :any:`f_ld(n,m) `, :any:`omega_ld(n,m) `, :any:`gamma_ld(n,m) ` specify the oscillator strength, oscillator frequency, and collision frequency of the m-th pole of the n-th media, respectively. +| :any:`wave_input ` specifies an electric current source that is used for the generation of the pulse. +| :any:`source_loc1(i) ` specifies the coordinate of the current source. +| :any:`ek_dir1(i) ` specifies the propagation direction of the pulse. + +| :any:`art_num_em ` specifies number of wavelength grid points for Absorption-, Reflection-, and Transmission-rates(ART). +| :any:`art_wav_min_em ` specifies minimum value of wavelength for ART. +| :any:`art_wav_max_em ` specifies maximum value of wavelength for ART. +| :any:`art_plane_bot_em ` specifies location of bottom plane on the propagation axis to calculate ART +| :any:`art_plane_top_em ` specifies location of top plane on the propagation axis to calculate ART +| :any:`obs_num_em ` specifies the number of the observing point. +| :any:`obs_loc_em(n,i) ` specifies the coordinate of n-th observing point. + +.. _output-files-10: + +Output files +^^^^^^^^^^^^ + +After the calculation, following output files are created in the directory ``result``, + ++-------------------------------------+-----------------------------------+ +| file name | description | ++-------------------------------------+-----------------------------------+ +| *AuNPs_art_with_wf.data* | A-, R-, and T-rates | +| | as functions of wavelength, | +| | where window function is applied | +| | in Fourier transformation | ++-------------------------------------+-----------------------------------+ +| *AuNPs_art_without_wf.data* | A-, R-, and T-rates | +| | as functions of wavelength, | +| | where window function is not | +| | applied in Fourier transformation | ++-------------------------------------+-----------------------------------+ +| *obs1_at_point_rt.data* | components of | +| | electric and magnetic fields | +| | as functions of time | ++-------------------------------------+-----------------------------------+ +| *shape.cube* | shape file for fdtd | ++-------------------------------------+-----------------------------------+ + +Explanations of the files are described below: + +**AuNPs_art_with_wf.data** + +Results of A-, R-, and T-rates normalized by the spectral distribution of the incident pulse. +Also the spectral distribution for pointing vector of incident pulse is included. +Window function is applied in Fourier transformation. + +:: + + # Absorption-, Reflection-, and Transmission-rates normalized by the spectral distribution of the incident pulse (with window function): + # A: Absorption rate + # R: Reflection rate + # T: Transmission rate + # S: Pointing vector of incident pulse along propagation direction + # 1:Wavelength[Angstrom] 2:A % 3:R % 4:T % 5:S[VA/Angstrom^2*fs^2] + +**AuNPs_art_without_wf.data** + +Results of A-, R-, and T-rates normalized by the spectral distribution of the incident pulse. +Also the spectral distribution for pointing vector of incident pulse is included. +Window function is not applied in Fourier transformation. + +:: + + # Absorption-, Reflection-, and Transmission-rates normalized by the spectral distribution of the incident pulse (without window function): + # A: Absorption rate + # R: Reflection rate + # T: Transmission rate + # S: Pointing vector of incident pulse along propagation direction + # 1:Wavelength[Angstrom] 2:A % 3:R % 4:T % 5:S[VA/Angstrom^2*fs^2] + +**obs0_info.data** + +This file is used to generate animation files by using SALMON utilities with :any:`yn_obs_plane_em `: https://salmon-tddft.jp/utilities.html + +**obs1_at_point_rt.data** + +Results of time evolution calculation for electric and magnetic fields at observation point 1. + +:: + + # Real time calculation: + # E: Electric field + # H: Magnetic field + # 1:Time[fs] 2:E_x[V/Angstrom] 3:E_y[V/Angstrom] 4:E_z[V/Angstrom] 5:H_x[A/Angstrom] 6:H_y[A/Angstrom] 7:H_z[A/Angstrom] + +**shape.cube** + +Shape file generated by :any:`yn_make_shape `. + +[Trial] Semiconductor Bloch equation +--------------------- + +The SALMON program includes a time evolution calculation feature based on the Semiconductor Bloch Equation (SBE), which was added starting from version 2.2.0. +The SBE calculation feature is currently an experimental implementation, and the developers cannot guarantee its behavior. +To activate the SBE calculation feature, specify the value ``sbe`` or ``sbe_maxwell`` for the :any:`theory` option in the input file; these feature includes both a real-time calculation feature equivalent to "tddft_pulse" and a multiscale calculation feature equivalent to "multi_scale_maxwell_tddft" that are already available in the program. + +.. _exercise-x1: + +[Trial] Exercise-x1: Semiconductor Bloch equation (SBE) calculation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +To run the code, following files in the directory ``SALMON/samples/exercise_x1_bulkSi_sbe_gs_rt/`` are used: + ++-----------------------------------+-----------------------------------------+ +| file name | description | ++-----------------------------------+-----------------------------------------+ +| *Si_gs.inp* | input file for ground state calculation | +| | keywords and their values | ++-----------------------------------+-----------------------------------------+ +| *Si_rps.dat* | pseodupotential file for silicon atom | ++-----------------------------------+-----------------------------------------+ +| *Si_sbe_rt.inp* | input file for real time calculation | +| | keywords and their values | ++-----------------------------------+-----------------------------------------+ + + + +Ground state calculation +^^^^^^^^^^^^^^^^^^^^^^^^ + + + +Before performing SBE calculations, various information of ground state such as the eigenenergy and transition dipole moment imust be prepared. +The conditions for the ground state calculation are specified in ``Si_gs.inp``; +please refer to +:any:`Exercise-4: Ground state of crystalline silicon ` +for more details. +Note that it is necessary to set ``yn_out_tm`` parameter to output the transition dipole moment. + +:: + + &analysis + yn_out_tm = "y" + / + + + + +Output files of ground state calculation +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +After the calculation, a few output files are created; on particular, the following three files are important for SBE calculations. + ++-----------------------------------+------------------------------------------+ +| file name | description | ++-----------------------------------+------------------------------------------+ +| *Si_k.data* | sampled k-point coordinates in BZ | ++-----------------------------------+------------------------------------------+ +| *Si_eigen.data* | Eigenenergies | ++-----------------------------------+------------------------------------------+ +| *Si_tm.data* | Transition dipole moment matrix | ++-----------------------------------+------------------------------------------+ + + +Real-time SBE calculation +^^^^^^^^^^^^^^^^^^^^^^^^^ + + +To perform real-time calculations, it is necessary to place the three data files from the ground-state calculation, ``SYSNAME_k.data``, ``SYSNAME_eigen.data``, and ``SYSNAME_tm.data``, in the same directory. If the real-time calculation is performed in a different directory from the ground-state calculation, it is necessary to manually copy (or link) the above files. + +:: + + &calculation + theory = 'sbe' + / + +The parameter ``theory='sbe'`` must be specified. + +:: + + &control + sysname = 'Si' + / + + &units + unit_system = 'au' + / + + &system + yn_periodic = 'y' + al(1:3) = 10.26d0, 10.26d0, 10.26d0 + nelem = 1 + natom = 8 + nelec = 32 + nstate = 32 + / + + &kgrid + num_kgrid(1:3) = 8, 8, 8 + / + + &tgrid + dt = 0.05d0 + nt = 20000 + / + + &emfield + ae_shape1 = "Acos2" + epdir_re1(1:3) = 0.0d0, 0.0d0, 1.0d0 + I_wcm2_1 = 1.0d+12 + tw1 = 1000.0d0 + omega1 = 0.056d0 + / + + +The above section shares the same parameters as the time-evolution calculations for bulk crystals. +please refer to +:any:`Exercise-6: Electron dynamics in crystalline silicon under a pulsed electric field ` +for more details. + + +.. _exercise-x2: + +[Trial] Exercise-x2: Multiscale Maxwell semiconductor Bloch equation (Maxwell+SBE) calculation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To run the code, following files in the directory SALMON/samples/exercise_x2_bulkSi_bloch_gs_ms/ are used: + ++-----------------------------------+------------------------------------------+ +| file name | description | ++-----------------------------------+------------------------------------------+ +| *Si_gs.inp* | Inputfile for ground state calculation | ++-----------------------------------+------------------------------------------+ +| *Si_sbe_ms_1d_film.inp* | Inputfile for 1D multiscale calculation | ++-----------------------------------+------------------------------------------+ +| *Si_sbe_ms_2d_cylinder.inp* | Inputfile for 2D multiscale calculation | ++-----------------------------------+------------------------------------------+ + +To perform Maxwell+SBE multiscale calculations, various data of the ground state, such as eigenenergy and transition dipole moment, are required. It is necessary to perform the ground-state calculation: ``Si_gs.inp`` before executing multiscale calculations. +See +:any:`Exercise-x1 ` +. + + +Multiscale calculation for laser pulse propagation in silicon nano-film (1D calculation) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +***Si_sbe_ms_1d_film.inp** + + +:: + + &calculation + theory = 'maxwell_sbe' + / + +The parameter ``theory='maxwell_sbe'`` must be specified. + + +:: + + &system + yn_periodic = 'y' + al(1:3) = 10.26d0, 10.26d0, 10.26d0 + nelem = 1 + natom = 8 + nelec = 32 + nstate = 32 + / + + &emfield + ae_shape1 = "Acos2" + epdir_re1(1:3) = 0.0d0, 0.0d0, 1.0d0 + I_wcm2_1 = 1.0d+12 + tw1 = 1000.0d0 + omega1 = 0.056d0 + / + + &multiscale + nx_m = 20 + ny_m = 1 + nz_m = 1 + hx_m = 94.52 ! 5nm + hy_m = 94.52 ! 5nm + hz_m = 94.52 ! 5nm + nxvac_m(1) = 2000 + nxvac_m(2) = 2000 + / + +The above section shares the same parameters as the time-evolution calculations for bulk crystals. +Please refer to +:any:`Exercise-7: Pulsed-light propagation through a silicon thin film ` +for more details. + + + +Multiscale calculation for laser pulse incident on arbitrary-shaped nanostructures (2D calculation) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +The multidimensional multiscale method (2D or 3D) can handle the light-matter interaction with arbitrarily shaped nanostructures. +As a example, the periodically arranged silicon nanocylinder array is considered + +***Si_sbe_ms_2d_cylinder.inp** + +Most parts of the input file are common with the previous 1D calculatio. + +:: + + &multiscale + fdtddim = "3d" + hx_m = 189.0 ! 5nm + hy_m = 189.0 ! 5nm + hz_m = 189.0 ! 5nm + nx_m = 80 + ny_m = 80 + nz_m = 1 + nxvac_m(1) = 2000 + nxvac_m(2) = 2000 + / + +This section defines a 2D computational domain of 80 cells x 80 cells (400 nm x 400 nm). +Furthermore, a vacuum region of 2000 cells (10 um) is added along the x-axis to surround the computational domain. + + +:: + + &maxwell + ! Media 1 + media_type(1) = "multiscale" + ! Shaper + n_s = 1 + ! Object 1 + id_s(1) = 1 + typ_s(1) = "ellipsoid" + ori_s(1,1:3) = 7561.43, 7561.43, 94.52 + inf_s(1,1:3) = 7561.43, 7561.43, 10000.0 + ! Detectors + obs_num_em=3 + obs_loc_em(1, 1:3) = 7561.43, 7561.43, 94.52 + obs_loc_em(2, 1:3) = 11342.145, 7561.43, 94.52 + obs_loc_em(3, 1:3) = 15122.86, 7561.43, 94.52 + / + +This section defines the shape, coordinates and arrangement of the macroscopic objects. +The most of parameters are common with ``theory='maxwell'``. +Please refer to +:any:`Exercise-10 ` +for more details. + +Note that if you want to treat the medium with electron dynamics calculations (TDDFT or SBE), specify``media_type`` as ``'multiscale'``. \ No newline at end of file diff --git a/docs/en/_sources/index.rst.txt b/docs/en/_sources/index.rst.txt new file mode 100644 index 0000000..3645ef3 --- /dev/null +++ b/docs/en/_sources/index.rst.txt @@ -0,0 +1,19 @@ +Manual for SALMON-v.2.2.0 +========================= + + |today| + +SALMON (Scalable Ab initio Light-Matter simulator for Optics and Nanoscience) is an open-source software based on first-principles time-dependent density functional theory to describe optical responses and electron dynamics in matters induced by light electromagnetic fields. + +.. toctree:: + :maxdepth: 2 + + introduction + install_and_run + exercises + input_keyword_list + release_log + acknowledgements + +.. troubleshooting_install +.. sandbox diff --git a/docs/en/_sources/input_keyword_list.rst.txt b/docs/en/_sources/input_keyword_list.rst.txt new file mode 100644 index 0000000..25ffb76 --- /dev/null +++ b/docs/en/_sources/input_keyword_list.rst.txt @@ -0,0 +1,3398 @@ +.. _List of input keywords: + +List of input keywords +====================== + + +'[Trial]' : These options are not tested well + +.. _&calculation: + +&calculation +------------ + +.. _theory: + +theory +^^^^^^ + + +character, default='' + + | Choice of a theory to be used in the calculation. + | Options: + | ``dft`` / ground state calculation based on DFT + | ``dft_md`` / ab initio MD simulations based on DFT (electronic ground state) + | ``tddft_response`` / linear response TDDFT calculation in real time + | ``tddft_pulse`` / simulations under pulsed electric field based on TDDFT + | ``single_scale_maxwell_tddft`` / single-scale simulation coupling Maxwell and TDDFT + | ``multi_scale_maxwell_tddft`` / multiscale simulation coupling Maxwell and TDDFT + | ``maxwell`` / electromagnetic analysis using finite difference time domain (FDTD) method + | ``dft_k_expand`` / convert checkpoint data of dft with k-points calculation to that of larger supercell system with gamma-point + | ``sbe`` / [Trial] simulations under pulsed electric field based in semiconductor Bloch equation + | ``maxwell_sbe`` / [Trial] multiscale simulation coupling Maxwell and semiconductor Bloch equation + +.. _yn_md: + +yn_md +^^^^^ + +[Trial] character, default='n' + + | Available for ``theory='dft'`` (ground-state MD) and ``theory='tddft_pulse'`` (Ehrenfest MD). + | Switch for molecular dynamics calculation. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _yn_opt: + +yn_opt +^^^^^^ + + +[Trial] character, default='n' + + | Available for ``theory='dft'``. + | Switch for geometry optimization. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _&control: + +&control +-------- + +.. _sysname: + +sysname +^^^^^^^ + +character, default='default' + + | Available for all options of ``theory``. + | A prefix of output files. + +.. _base_directory: + +base_directory +^^^^^^^^^^^^^^ + +character, default='./' + + | Available for all options of ``theory``. + | Name of a directory where major output files are stored. + +.. _yn_restart: + +yn_restart +^^^^^^^^^^ + +character, default='n' + + | Available for the DFT/TDDFT based options of ``theory`` and ``theory='maxwell'``. + | Whether to continue previous calculation (restart) or start a new calculation. + | Options: + | ``'y'`` / enable (restart) + | ``'n'`` / disable (new calculation) + +.. _directory_read_data: + +directory_read_data +^^^^^^^^^^^^^^^^^^^ + +character, default='restart/' + + | Available for ``yn_restart='y'``. + | Directory name to read data that are required in the present calculation (restart) and were generated in previous calculations. For TDDFT based options, it specifies the name of the directory containing ground state results that were stored in 'data_for_restart'. When restarting from a checkpoint, it specifies the name of the directory that contains the checkpoint data. + +.. _yn_self_checkpoinnt: + +yn_self_checkpoint +^^^^^^^^^^^^^^^^^^ + +character, default='n' + + | Available for the DFT/TDDFT based options of ``theory``. + | With this option, each process writes/reads the restart (and checkpoint) data independently (self data format) so that the restart cost is reduced for large systems. Note that the number of processes and their assignments must be unchanged in restarting. The data is written out into 'checkpoint_gs_XXXXXX/' (DFT) or 'checkpoint_rt_XXXXXX/' (TDDFT). + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _checkpoint_interval: + +checkpoint_interval +^^^^^^^^^^^^^^^^^^^ + +integer, default=-1 + + | Available for the DFT/TDDFT based options of ``theory`` and ``theory='maxwell'``. + | Interval of time steps (iteration steps) to write down the checkpoint data during the time-propagation (SCF iteration). Checkpoint data will not be written if a negative value is set. + +.. _yn_reset_step_restart: + +yn_reset_step_restart +^^^^^^^^^^^^^^^^^^^^^ + +character, default='n' + + | Available for ``yn_restart='y'`` in the DFT/TDDFT based options of ``theory``. + | With this option, the counter of the SCF iteration step (for DFT) or the counter of the time propagation step (for TDDFT) is reset to 0 at the restart. In the SCF iteration, the density data in the previous SCF iteration step are abondoned. + +.. _read_gs_restart_data: + +read_gs_restart_data +^^^^^^^^^^^^^^^^^^^^ + +character, default='all' + + | Available for ``yn_restart='y'`` with ``theory='dft'``. + | Specify which data are read in the restart. Specified data that are generated in the previous calculation and are contained in the restart (or checkpoint) directory are used in restarting the SCF iteration of DFT. The default option ``'all'`` indicates the complete restart. In other options, a part of restart data are used (other data are prepared in the same way as in the initial SCF step). + | Options: + | ``all`` / all of restart data are read + | ``all:single`` / same as ``all`` option but the data is read in the single file format even though the self data format is specified with ``yn_self_checkpoint='y'`` (i.e., the restart data is read in the single file format while written out in the self format) + | ``rho_inout`` / only electron densities including those of previous iteration steps are read (from rho_inout.bin file) + | ``rho_inout:single`` / same as ``rho_inout`` option but the data is read in the single file format even though the self data format is specified with ``yn_self_checkpoint='y'`` + | ``rho`` / only the latest electron density is read (from user-made data) + | ``wfn`` / only orbital wavefunctions are read + +.. _write_gs_restart_data: + +write_gs_restart_data +^^^^^^^^^^^^^^^^^^^^^ + +character, default='all' + + | Available for ``theory='dft'``. + | Options + | ``all`` / all of restart data are written out + | ``rho_inout`` / only electron densities including those of previous iteration steps are written out + | ``wfn`` / only orbital wavefunctions are written out + | ``checkpoint_only`` / the restart data are outputted only in the self data format (separated data for each process) at the last step into 'checkpoint_gs_XXXXXX/' directory (``yn_self_checkpoint='y'`` is required) without generating the restart data into 'data_for_restart/' directory in the single file format. + | Output data files are written out in the restart (or checkpoint) directory. + | The default option ``'all'`` gives the complete set of restart data. + +.. _time_shutdown: + +time_shutdown +^^^^^^^^^^^^^^ + +[Trial] real(8), default=-1d0 + + | Available for the DFT/TDDFT based options of ``theory``. + | Timer for automatic shutdown. The unit is second. + | If a negative time is set, the automatic shutdown will not be performed. + +.. _method_wf_distributor: + +method_wf_distributor +^^^^^^^^^^^^^^^^^^^^^ + +character, default='single' + + | Available for the DFT/TDDFT based options of ``theory``. + | A method to save/load orbital wavefunctions. + | Options + | ``single``: all orbital wavefunctions are saved(loaded) to(from) a single file. + | ``slice`` : each orbital wavefunction is saved(loaded) to(from) a file. This choice reduces the I/O costs, and increase the flexiblility in handling files for large systems. + +.. _nblock_wf_distribute: + +nblock_wf_distribute +^^^^^^^^^^^^^^^^^^^^ + +integer, default='16' + + | Available for ``method_wf_distributor='slice'``. + | In the 'slice' mode, ``nblock_wf_distribute`` files are saved in one directory. + +.. _&units: + +&units +------ + +.. _unit_system: + +unit_system +^^^^^^^^^^^ + +character, default='au' + + | Unit system to be used in input variables and some of output files. + | If ``unit_system = 'A_eV_fs'`` is chosen, Angstrom for length, eV for energy, and fs for time are adopted. + | For isolated systems specified by ``yn_periodic = 'n'`` in ``&system``, a unit of 1/eV is used for the output files of DOS and PDOS if ``unit_system = 'A_eV_fs'`` is specified, while atomic unit is used if not. For other output files, the Angstrom/eV/fs units are used irrespective of the input keyword. For periodic systems specified by ``yn_periodic = 'n'`` in ``&system``, the unit system specified by this input keyword is used for most output files. To confirm the unit, see the first few lines of output files. + | Options: + | ``'au'`` or ``'a.u.'`` / atomic unit system + | ``'A_eV_fs'`` / Angstrom-eV-fs unit system + +.. _¶llel: + +¶llel +--------- + +.. _nproc_k: + +nproc_k +^^^^^^^ + +.. _nproc_ob: + +nproc_ob +^^^^^^^^ + +.. _nproc_rgrid(3): + +nproc_rgrid(3) +^^^^^^^^^^^^^^ + +integer, default=0 + + | Options: + | ``nproc_k``/ Number of MPI parallelization for k-points of electron orbitals. + | ``nproc_ob``/ Number of MPI parallelization for orbital index of electron orbitals. + | ``nproc_rgrid(3)'``/ Number of MPI parallelization for each direction of real-space grid that are used for electron orbitals and density. + | + | Defaults are ``0`` for ``nproc_k``/``nproc_ob`` and ``(0,0,0)`` for ``nproc_rgrid``. In the default choice, MPI assignment is achieved atomatically. Users can specify ``nproc_k``, ``nproc_ob``, and ``nproc_rgrid`` manually. In that case, there are several constraints that should be fulfilled: + | ``nproc_k`` must be set to ``1`` for ``&system/yn_periodic='n'``. + | ``nproc_k`` and ``nproc_ob`` must be set to ``1`` for ``theory='maxwell'``. + | ``nproc_k`` \* ``nproc_ob`` \* ``nproc_rgrid(1)`` \* ``nproc_rgrid(2)`` \* ``nproc_rgrid(3)`` \= total number of processes. + +.. _yn_ffte: + +yn_ffte +^^^^^^^ + +character, default='n' + + | Available for the DFT/TDDFT based options of ``theory`` with ``&system/yn_periodic='y'`` + | For periodic systems, SALMON uses Fourier transformation to solve a poisson equation. + | This switch selects if FFTE library is used or not. If FFTE is not used, the Fourier transformation in a simple algorithm is carried out. + | Options + | ``'y'`` / enable + | ``'n'`` / disable + | + | To enable it, following relations must be satisfied. + | ``mod(num_rgrid(1), nproc_rgrid(2)) == 0`` + | ``mod(num_rgrid(2), nproc_rgrid(2)) == 0`` + | ``mod(num_rgrid(2), nproc_rgrid(3)) == 0`` + | ``mod(num_rgrid(3), nproc_rgrid(3)) == 0`` + +.. _yn_fftw: + +yn_fftw +^^^^^^^ + +character, default='n' + + | Available for the DFT/TDDFT based options of ``theory`` with both ``&system/yn_periodic='y'`` and ``&system/yn_periodic='n'``. + | For isolated systems, this option is effective when ``&poisson/method_poisson='ft'`` + | This switch selects if FFTW library is used or not. If FFTW is not used, the discrete Fourier transformation in a simple algorithm is carried out. + | Caution: This variable is effective only when ``--enable-fftw`` is specified at the configure. + | Options + | ``'y'`` / enable + | ``'n'`` / disable + +.. _yn_scalapack: + +yn_scalapack +^^^^^^^^^^^^ + +character, default='n' + + | Available for ``&calculation/theory='dft' or 'dft_md'`` + | To calculate large systems, an eigenvalue problem in the subspace diagonalization becomes a bottle-neck in the ground state calculation. In SALMON, ScaLAPACK library can be used to solve the eigenvalue problem. + | To enable it, it is necessary to link ScaLAPACK library when you build SALMON. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _yn_gramschmidt_blas: + +yn_gramschmidt_blas +^^^^^^^^^^^^^^^^^^^ + +character, default='y' + + | Available for ``&calculation/theory='dft' or 'dft_md'`` + | This switch selects if BLAS library is used or not in Gram Schmidt routines. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _yn_eigenexa: + +yn_eigenexa +^^^^^^^^^^^ + +character, default='n' + + | Available for ``&calculation/theory='dft' or 'dft_md'`` + | SALMON can use RIKEN R-CCS EigenExa library to solve eigenvalue problem in subspace diagonalization. It is more efficient than ScaLAPACK to diagonalize matrices of large dimension. To enable it, it is necessary to link both ScaLAPACK and EigenExa libraries when you build SALMON. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _yn_diagonalization_red_mem: + +yn_diagonalization_red_mem +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +character, Default='n' + + | Available for ``¶llel/yn_scalapack='y'`` or ``¶llel/yn_eigenexa='y'`` + | This option reduces memory consumption in using ScaLAPACK/EigenExa libraries. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _process_allocation: + +process_allocation +^^^^^^^^^^^^^^^^^^ + +character, default='grid_sequential' + + | This controlls the order of process allocation. + | Options: + | ``'grid_sequential'`` / real-space grid major ordering. + | ``'orbital_sequential'`` / orbital-space major ordering. + | + | Suggestion: + | ``&calculation/theory='dft' or 'dft_md'`` / ``'orbital_sequential'`` + | ``&calculation/theory='tddft*' or '*maxwell_tddft'`` / ``'grid_sequential'`` + +.. _&system: + +&system +------- + +.. _yn_periodic: + +yn_periodic +^^^^^^^^^^^ + +character, default='n' + + | Available for all options of ``theory``. + | Specify boundary condition for electron orbitals. + | Options: + | ``'y'`` / periodic systems (crystalline solids) + | ``'n'`` / isolated systems (molecules and nano-particles) + +.. _spin: + +spin +^^^^ + +character, default='unpolarized' + + | Available for the DFT/TDDFT based options of ``theory``. + | It specifies the spin state of the system, spin-unpolarized (closed shell) or spin-polarized (open shell). + | Options + | ``'unpolarized'`` / spin-unpolarized systems (default) + | ``'polarized'`` / spin-polarized systems + | ``'noncollinear'`` / noncollinear spin systems (see ``yn_spinorbit``) + +.. _al(3): + +al(3) +^^^^^ + +real(8), default=0d0 + + | Available for the DFT/TDDFT based options of ``theory``. + | Spatial box size or lattice constants for cuboid cell (x, y, z). + | For nonorthogonal cell, see ``al_vec1(3)``, ``al_vec2(3)``, ``al_vec3(3)``. + +.. _al_vec1(3): + +al_vec1(3) +^^^^^^^^^^ + +.. _al_vec2(3): + +al_vec2(3) +^^^^^^^^^^ + +.. _al_vec3(3): + +al_vec3(3) +^^^^^^^^^^ + +real(8), default=0d0 + + | Available for ``yn_periodic = 'y'`` in the DFT/TDDFT based options of ``theory``. + | Primitive lattice vectors for nonorthogonal cell. For cuboid cell, see ``al(3)``. + +.. _nstate: + +nstate +^^^^^^ + +integer, default=0 + + | Available for the DFT/TDDFT based options of ``theory``. + | of orbitals/bands to be calculated. In the time evolution calculation of dielectrics, only occupied orbitals are evolved even when more ``nstate`` is specified. + +.. _nelec: + +nelec +^^^^^ + +integer, default=0 + + | Available for the DFT/TDDFT based options of ``theory``. + | Number of valence electrons in the system. + +.. _nelec_spin(2): + +nelec_spin(2) +^^^^^^^^^^^^^ + +integer, Default=0 + + | Available for the DFT/TDDFT based options of ``theory``. + | Number of up/down-spin electrons are specified by ``nelec_spin(1)/nelec_spin(2)``. + | This option is incompatible with ``nelec``. (If ``nelec_spin`` is specified, ``nelec`` is ignored.) + +.. _temperature: + +temperature +^^^^^^^^^^^ + +real(8), default=-1d0 + + | Available for DFT-based options of ``theory``. + | It specifies the temperature for electrons. The value must be given using the unit of energy as specified in ``&units/unit_system``. + | The kelvin unit can also be used by the keyword ``temperature_k`` instead of ``temperature`` (see next). + | Occupation numbers are updated in every SCF step in the following way. + | ``temperature < 0`` / the occupation numbers are fixed by ``nelec`` (appropriate for systems with energy gap). + | ``temperature = 0`` / redistribution of the occupation numbers by the step function (metallic system at zero temperature). + | ``temperature > 0`` / redistribution of the occupation numbers by the Fermi-Dirac distribution function. + +.. _temperature_k: + +temperature_k +^^^^^^^^^^^^^ + +real(8), default=-1d0 + + | Available for DFT-based options of ``theory``. + | The same as ``temperature`` but kelvin is used as the unit. + +.. _nelem: + +nelem +^^^^^ + +integer, default=0 + + | Available for the DFT/TDDFT based options of ``theory``. + | Number of atomic elements in the system. + +.. _natom: + +natom +^^^^^ + +integer, default=0 + + | Available for the DFT/TDDFT based options of ``theory``. + | Number of atoms in the system. + +.. _file_atom_red_coor: + +file_atom_red_coor +^^^^^^^^^^^^^^^^^^ + +[Trial] character, default='none' + + | Available for the DFT/TDDFT based options of ``theory``. + | Name of the file that contains atomic positions given in reduced coordinates. This option is incompatible with ``&system/file_atom_coor``, ``&atomic_coor``, and ``&atomic_red_coor``. + +.. _file_atom_coor: + +file_atom_coor +^^^^^^^^^^^^^^ + +[Trial] character, default='none' + + | Available for the DFT/TDDFT based options of ``theory``. + | Name of the file that contains atomic Cartesian coordinates (The unit is specified by ``&units/unit_system``). This option is incompatible with ``&system/file_atom_coor``, ``&atomic_coor``, and ``&atomic_red_coor``. + +.. _yn_spinorbit: + +yn_spinorbit +^^^^^^^^^^^^ + +character, default='n' + + | Available for the DFT/TDDFT based options of ``theory``. + | Option for the spin-orbit coupling using the j-dependent pseudopotential formalism [Theurich & Hill, PRB 64, 073106 (2001)]. For pseudopotential(s), the UPF or VPS file format is required. + + | Options + | ``'y'`` / enable (``spin='noncollinear'`` is required. For ``theory='dft’`` mode, ``method_mixing='simple’`` is recommended.) + | ``'n'`` / disable (default) + +.. _yn_symmetry: + +yn_symmetry +^^^^^^^^^^^ + +[Trial] character, default='n' + + | Available for orthogonal cell system with the DFT/TDDFT based options of ``theory``. + | Symmetry option. Pre-generated input file, "sym.dat", is necessary. (details are not explained in the current manual) + + | Options + | (e.g.) ``'yyn'`` / symmetry option is applied for the x and y direction (under applied electric field in the z-direction) + | ``'n'`` / disable + +.. _absorbing_boundary: + +absorbing_boundary +^^^^^^^^^^^^^^^^^^ + +[Trial] character, default='none' + + | Available for the TDDFT based option of ``theory`` with orthogonal unit cell. + | Absorbing boundary condition for electrons. (T. Nakatsukasa et al., J. Chem. Phys., 114, 2550 (2001)) + | Options: + | ``'none'`` / disable (default) + | ``'z'`` / absorbing boundary region is set in z direction for ``'yn_periodic = 'y'`` + +.. _imagonary_potential_w0: + +imaginary_potential_w0 +^^^^^^^^^^^^^^^^^^^^^^ + +real(8), default='0d0' + + | Available when ``absorbing_boundary`` options is not ``'none'``. + | Strength of the absorbing (imaginary) potential. + +.. _imaginary_potential_dr: + +imaginary_potential_dr +^^^^^^^^^^^^^^^^^^^^^^ + +real(8), default='0d0' + + | Available when ``absorbing_boundary`` options is not ``'none'``. + | Thickness of the absorbing (imaginary) potential. For ``absorbing_boundary='z'``, the absorbing region is 0 < z < ``imagnary_potential_dr`` and ``al(3)``-``imagnary_potential_dr`` < z < ``al(3)`` + +.. _&atomic_red_coor: + +&atomic_red_coor +---------------- + + | Atomic coordinates in periodic systems (``'yn_periodoc = 'y'``) are specified in reduced coordinates using the following format: + | + | 'Si' 0.00 0.00 0.00 1 + | 'Si' 0.25 0.25 0.25 1 + | ... + | + | Here, the information of atoms is ordered in row, the first row for the first atom, etc. The number of rows must be equal to ``&system/natom``. Atomic spicies are written in the first column although they are not used in the calculation. The second, third and fourth columns are reduced coordinates for the first, second and third directions, respectively. The fifth column is a serial number of the atom spieces, which is defined in ``&pseudo``. + | This option is incompatible with ``&system/file_atom_red_coor``, ``&system/file_atom_coor``, and ``&atomic_coor``. + +.. _&atomic_coor: + +&atomic_coor +------------ + + | Atomic coordinates are specified in the same way as ``atomic_red_coor`` but with length dimension. The unit chosen by ``&units/unit_length`` is applied. + | This option is incompatible with ``&system/file_atom_red_coor``, ``&system/file_atom_coor``, and ``&atomic_red_coor``. + +.. _&pseudo: + +&pseudo +------- + +.. _izatom(:): + +izatom(:) +^^^^^^^^^ + +integer, default=-1 + + | Available for the DFT/TDDFT based options of ``theory``. + | Atomic number of the element. The size of array is equal to ``&system/nelem``. + +.. _file_pseudo(:): + +file_pseudo(:) +^^^^^^^^^^^^^^ + +character, default='none' + + | Available for the DFT/TDDFT based options of ``theory``. + | File name of the pseudopotential file. The size of array is equal to ``&system/nelem``. + +.. _lmax_ps(:): + +lmax_ps(:) +^^^^^^^^^^ + +integer, default=-1 + + | Available for the DFT/TDDFT based options of ``theory``. + | Maximum angular momentum of pseudopotential projectors. + | If not given, values specified in the pseudopotential file will be used. The size of array is equal to ``&system/nelem``. + +.. _lloc_ps(:): + +lloc_ps(:) +^^^^^^^^^^ + +integer, default=-1 + + | Available for the DFT/TDDFT based options of ``theory``. + | Angular momentum of the pseudopotential that will be treated as local. The size of array is equal to ``&system/nelem``. + +.. _yn_psmask(:): + +yn_psmask(:) +^^^^^^^^^^^^ + +[Trial] character, default='n' + + | Available for the DFT/TDDFT based options of ``theory``. + | Fourier filtering for pseudopotentials. The size of array is equal to ``&system/nelem``. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _alpha_mask(:): + +alpha_mask(:) +^^^^^^^^^^^^^ + +[Trial] real(8), default=0.8d0 + + | Available for the DFT/TDDFT based options of ``theory``. + | Parameter for the Fourier filtering of the pseudopotential. The size of array is equal to ``&system/nelem``. + +.. _gamma_mask(:): + +gamma_mask(:) +^^^^^^^^^^^^^ + +[Trial] real(8), default=1.8d0) + + | Available for the DFT/TDDFT based options of ``theory``. + | Parameter for the Fourier filtering of the pseudopotential. The size of array is equal to ``&system/nelem``. + +.. _eta_mask(:): + +eta_mask(:) +^^^^^^^^^^^ + +[Trial] real(8), default=15.0d0 + + | Available for the DFT/TDDFT based options of ``theory``. + | Parameter for the Fourier filtering of the pseudopotential. The size of array is equal to ``&system/nelem``. + +.. _&functional: + +&functional +----------- + +.. _xc: + +xc +^^ + +character, default='none' + + | Available for the DFT/TDDFT based options of ``theory``. + | Exchange-correlation functional to be used. + | In the present version, functionals 'PZ', 'PZM' and 'TBmBJ' are available for both ``yn_periodic = 'y' and 'n'`` calculations in the adiabatic approximation. + | Options: + | ``'PZ'``: Perdew-Zunger LDA :Phys. Rev. B 23, 5048 (1981). + | ``'PZM'``: Perdew-Zunger LDA with modification to improve sooth connection between high density form and low density one. :J. P. Perdew and Alex Zunger, Phys. Rev. B 23, 5048 (1981). + | ``'TBmBJ'``: Tran-Blaha meta-GGA exchange with Perdew-Wang correlation. :Fabien Tran and Peter Blaha, Phys. Rev. Lett. 102, 226401 (2008). John P. Perdew and Yue Wang, Phys. Rev. B 45, 13244 (1992). This potential is known to provide a reasonable description for the bandgap of various insulators. For this choice, the additional mixing parameter 'cval' may be specified. See below. + +.. _cval: + +cval +^^^^ + +real(8), default=-1d0 + + | Available for ``xc='TBmBJ'``. + | Mixing parameter in Tran-Blaha meta-GGA exchange potential. If ``cval`` is set to a minus value, the mixing-parameter is evaluated by the formula in the original paper [Phys. Rev. Lett. 102, 226401 (2008)], :math:`\left\langle |\nabla \rho(\mathbf{r};t)| / \rho(\mathbf{r};t) \right\rangle`. However, note that the value may be different from that in all electron calculations. + +.. _cname: + +cname +^^^^^ + +.. _xname: + +xname +^^^^^ + +character, default='none' + + | Available for ``theory='XXX'``. + | XXX + +.. _alibxc: + +alibxc +^^^^^^ + +.. _alibx: + +alibx +^^^^^ + +.. _alibc: + +alibc +^^^^^ + +character, default='none' + + | Available for the DFT/TDDFT based options of ``theory``. + | Since version 1.1.0, exchange-correlation functionals in Libxc library (http://www.tddft.org/programs/libxc/) have been usable in SALMON. At present, usable functionals are limited to LDA and GGA. For periodic systems, meta-GGA functionals are usable as well. To specify the exchange-correlation potentials of Libxc library, there are two ways. If the exchange and correlation potentials are given separately, you need to specify both ``alibx`` and ``alibc`` separately. If the exchange and correlation potentials are given as a combined set, you need to specify ``alibxc``. We show below an example: + | &functional + | alibx = 'LDA_X' + | alibc = 'LDA_C_PZ' + | Note that, the hybrid functionals (hybrid gga/mgga) are not supported. + | + | To use libxc libraries, ``--enable-libxc`` option must be added in excecuting configure. The available option of the exchange-correlation functionals are listed in the LibXC website. [See http://www.tddft.org/programs/libxc/functionals/] + +.. _&rgrid: + +&rgrid +------ + +.. _dl(3): + +dl(3) +^^^^^ + +real(8), default=0d0 + + | Available for the DFT/TDDFT based options of ``theory``. + | Spacing of real-space grids. + | This cannot be used together with ``&rgrid/num_rgrid``. + +.. _num_rgrid(3): + +num_rgrid(3) +^^^^^^^^^^^^ + +integer, default=0 + + | Available for the DFT/TDDFT based options of ``theory``. + | Number of real-space grids for each direction. + | This cannot be used together with ``&rgrid/dl``. + +.. _&kgrid: + +&kgrid +------ + +.. _num_kgrid(3): + +num_kgrid(3) +^^^^^^^^^^^^ + +integer, default=1 + + | Available for ``yn_periodic='y'`` in the DFT/TDDFT based options of ``theory``. + | Number of k-points (grid points of k-vector) for each direction discretizing the Brillouin zone. + +.. _file_kw: + +file_kw +^^^^^^^ + +character, default='none' + + | Available for ``yn_periodic='y'`` in the DFT/TDDFT based options of ``theory``. + | File name for a file that includes user specified k-points. This file will be read if ``num_kgrid`` is equal to 0 or negative values. The file should be described in the following format : + | + | 8 #(number of k-points) + | 1 -0.50 -0.50 -0.50 0.1250 #(id, kx, ky, kz, weight) + | 2 -0.50 -0.50 0.00 0.1250 + | 3 -0.50 0.00 -0.50 0.1250 + | 4 -0.50 0.00 0.00 0.1250 + | 5 0.00 -0.50 -0.50 0.1250 + | 6 0.00 -0.50 0.00 0.1250 + | 7 0.00 0.00 -0.50 0.1250 + | 8 0.00 0.00 0.00 0.1250 + +.. /&tgrid: + +&tgrid +------ + +.. _nt: + +nt +^^ + +integer, Default=0 + + | Available for 'dft_md' and TDDFT-based options of ``theory``. + | Number of total time steps for real-time propagation. + +.. _dt: + +dt +^^ + +real(8), Default=0d0 + + | Available for 'dft_md' and TDDFT-based options of ``theory``. + | Time step size. + +.. _gram_schmidt_interval: + +gram_schmidt_interval +^^^^^^^^^^^^^^^^^^^^^ + +integer, default=-1 + + | Available for TDDFT-based options of ``theory``. + | Interval of a time step for the Gram-Schmidt orthonormalization of the orbitals during time evolution calculations. If this is set to a negative value, no Gram-Schmidt orthogonalization will be achieved. If this is set to zero, the Gram-Schumidt orthogonalization is carried out once at the initial step only. Usually this Gram-Schmidt orthogonalization is not necessary and should not be used. + +.. _&propagation: + +&propagation +------------ + +.. _n_hamil: + +n_hamil +^^^^^^^ + +integer, default=4 + | Available for TDDFT-based options of ``theory``. + | Order of the Taylor expansion adopted for the propagation operator. + +.. _propagator: + +propagator +^^^^^^^^^^ + +character, default=middlepoint + + | Available for TDDFT-based options of ``theory``. + | Choice of the propagator in the time evolution calculation. + | Options: + | ``middlepoint`` / Hamiltoinan at midpoint of two-times is used in the propagation if ``yn_predictor_corrector = 'y'``. Hamiltoian at the time :math:`t` is used if ``yn_predictor_corrector = 'n'``. + | ``aetrs`` / time-reversal symmetry propagator. [M.A.L. Marques, A. Castro, G.F. Bertsch, and A. Rubio, Comput. Phys. Commun., 151 60 (2003)]. + +.. _yn_predictor_corrector: + +yn_predictor_corrector +^^^^^^^^^^^^^^^^^^^^^^ + +character, default='n' + | Available for TDDFT-based options of ``theory``. + | Switch of the predictor-corrector method of TDDFT. + | For meta-GGA functionals (``xc='tbmbj'``), the predictor corrector is automatically used even with ``yn_predictor_corrector='n'``. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _yn_fix_func: + +yn_fix_func +^^^^^^^^^^^ + +character, default='n' + | Available for 'dft_md' and TDDFT-based options of ``theory``. + | Switch not to update the Hamiltonian during the time evolution, i.e., ground state Hamiltonian is used during the propagation. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _&scf: + +&scf +---- + +.. _method_init_wf: + +method_init_wf +^^^^^^^^^^^^^^ + +character, default='gauss' + + | Available for 'dft' and 'dft_md' options of ``theory``. + | The generation method of the initial orbitals at the begening of the SCF iteration in DFT calculations. For a stable calculation of very large systems, multiple gaussian functions are preferred for a stable calculation. + | Options: + | ``gauss`` / single gauss function per orbital centered at a position determined by random numbers + | ``gauss2`` / two gauss functions per orbital centered at positions determined by random numbers + | ``gauss3`` / three gauss functions per orbital centered at positions determined by random numbers + | ``gauss4`` / four gauss functions per orbital centered at positions determined by random numbers + | ``gauss5`` / five gauss functions per orbital centered at positions determined by random numbers + | ``gauss10`` / ten gauss functions per orbital centered at positions determined by random numbers + | ``random`` / a random number is assigned at each real-space grid point of orbitals + +.. _method_init_density: + +method_init_density +^^^^^^^^^^^^^^^^^^^ + +[Trial] character, default='wf' + + | Available for 'dft' and 'dft_md' options of ``theory``. + | Specifying how to generate the initial density to start the SCF iteration in the DFT calculation. + | Options: + | ``wf`` / generate from the initial wavefunctions (cf. ``method_init_wf``). + | ``pp`` / generate from a superposition of the pseudo-atom densities. Supported for limited formats of pseudopotentials ('KY' and 'UPF'). + | ``read_dns_cube`` / read the initial density from ``dns.cube`` file (Gaussian cube file format). The definition of r-grid & cell coordinate should be consistent. + +.. _iseed_number_change: + +iseed_number_change +^^^^^^^^^^^^^^^^^^^ + +integer, default=0 + + | Available for 'dft' and 'dft_md' options of ``theory``. + | Change a seed of random numbers that are used to generate initial orbitals. The value specified by this parameter is added to the seed. + +.. _nscf: + +nscf +^^^^ + +integer, Default=300 + + | Available for 'dft' and 'dft_md' options of ``theory``. + | Number of maximum SCF iterations in the DFT calculation. + +.. _method_min: + +method_min +^^^^^^^^^^ + +character, Default='cg' + + | Available for 'dft' and 'dft_md' options of ``theory``. + | Method for updating orbitals in the SCF iteration. At present only confjugate gradient method is implemented. + | Options: + | ``cg`` / Conjugate-Gradient(CG) method + +.. _ncg: + +ncg +^^^ + +integer, default=4 + + | Available for 'dft' and 'dft_md' options of ``theory``. + | Number of interations of conjugate-gradient method in the SCF iteration. + +.. _ncg_init: + +ncg_init +^^^^^^^^ + +integer, default=4 + + | Available for 'dft' and 'dft_md' options of ``theory``. + | Number of interations of conjugate-gradient method for the first SCF step. + +.. _method_mixing: + +method_mixing +^^^^^^^^^^^^^ + +character, default='broyden' + + | Available for 'dft' and 'dft_md' options of ``theory``. + | Method to update density/potential in the scf iteration. + | Options: + | ``simple`` / Simple mixing method + | ``broyden`` / modified Broyden method + | ``pulay`` / Pulay method + +.. _mixrate: + +mixrate +^^^^^^^ + +real(8), default=0.5d0 + + | Available for ``method_mixing='simple'`` in 'dft' and 'dft_md' options of ``theory``. + | Mixing ratio for simple mixing. + +.. _nmemory_mb: + +nmemory_mb +^^^^^^^^^^ + +integer, default=8 + + | Available for ``method_mixing='broyden'`` in 'dft' and 'dft_md' options of ``theory``. + | Number of previous densities to be stored in the SCF iteration using the modified Broyden method. This must be less than 21. + +.. _alpha_mb: + +alpha_mb +^^^^^^^^ + +real(8), default=0.75d0 + + | Available for ``method_mixing='broyden'`` in 'dft' and 'dft_md' options of ``theory``. + | A parameter of the modified Broyden method. + +.. _nmemory_p: + +nmemory_p +^^^^^^^^^ + +integer, default=4 + + | Available for ``method_mixing='pulay'`` in 'dft' and 'dft_md' options of ``theory``. + | Number of previous densities to be stored in the SCF iteration using the Pulay method. + +.. _beta_p: + +beta_p +^^^^^^ + +real(8), default=0.75d0 + + | Available for ``method_mixing='pulay'`` in 'dft' and 'dft_md' options of ``theory``. + | A parameter of the mixing rate of the Pulay method. + +.. _yn_auto_mixing: + +yn_auto_mixing +^^^^^^^^^^^^^^ + +character, default='n' + + | Available for 'dft' and 'dft_md' options of ``theory``. + | Switch to change the mixing rate automatically (i.e. automatic adjustments of ``mixrate``/``alpha_mb``/``beta_p``) + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _update_mixing_ratio: + +update_mixing_ratio +^^^^^^^^^^^^^^^^^^^ + +real(8), default=3.0d0 + + | Available for ``yn_auto_mixing='y'`` in 'dft' and 'dft_md' options of ``theory``. + | Threshold for the change of the mixing rate in ``yn_auto_mixing='y'`` option. The mixing-rate is reduced to half when the ratio of the density differences between the current and previous iteration steps is larger than ``update_mixing_ratio``. + +.. _yn_subspace_diagonalization: + +yn_subspace_diagonalization +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +character, default='y' + + | Available for 'dft' and 'dft_md' options of ``theory``. + | Switch for the subspace diagonalization during SCF iterations. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _convergence: + +convergence +^^^^^^^^^^^ + +character, default='rho_dne' + + | Available for 'dft' and 'dft_md' options of ``theory``. + | Specify a quantity that is used for convergence check of the SCF iteration. + | Options: + | ``'rho_dne'``/ Convergence is checked by sum_ix|rho(ix,iter)-rho(ix,iter-1)|dx/N. N is ``&system/nelec``. + | ``'norm_rho'``/ Convergence is checked by the square of the norm of the density difference, ||rho_iter(ix)-rho_iter-1(ix)||\ :sup:`2`\=sum_ix|rho(ix,iter)-rho(ix,iter-1)|\ :sup:`2`\. + | ``'norm_rho_dng'``/ Convergence is checked by ||rho_iter(ix)-rho_iter-1(ix)||\ :sup:`2`\/(number of grids). "dng" means "devided by number of grids". + | ``'norm_pot'``/ Convergence is checked by ||Vlocal_iter(ix)-Vlocal_iter-1(ix)||\ :sup:`2`\, where Vlocal is Vh + Vxc + Vps_local. + | ``'pot_dng'``/ Convergence is checked by ||Vlocal_iter(ix)-Vlocal_iter-1(ix)||\ :sup:`2`\/(number of grids). + +.. _threshold: + +threshold +^^^^^^^^^ + +real(8), default=1d-17 [a.u.] (for ``convergence='rho_dne'``) and -1 (for other options of ``convergence``)) + + | Available for 'dft' and 'dft_md' options of ``theory``. + | Threshold of convergence that is specified by ``convergence`` keyword. + +.. _nscf_init_redistribution: + +nscf_init_redistribution +^^^^^^^^^^^^^^^^^^^^^^^^ + +integer, default=10 + + | Available for 'dft' and 'dft_md' options of ``theory``. + | Number of initial iterations during which a redistribution of the occupation number is suppressed in the finite temperature calculation. + +.. _nscf_init_no_diagonal: + +nscf_init_no_diagonal +^^^^^^^^^^^^^^^^^^^^^ + +integer, default=10 + + | Available for ``&scf/yn_subspace_diagonalization='y'`` in 'dft' option of ``theory``. + | Number of initial iterations during which the subspace diagonalization will not be carried out. + +.. _nscf_init_mix_zero: + +nscf_init_mix_zero +^^^^^^^^^^^^^^^^^^ + +integer, default=-1 + + | Available for 'dft' option of ``theory``. + | The density will not be mixed (i.e. fixed) during the given number of the SCF iteration, that is, orbitals are optimized without updating the density. + +.. _conv_gap_mix_zero: + +conv_gap_mix_zero +^^^^^^^^^^^^^^^^^ + +real(8), default=99999d0 + + | Available if ``nscf_init_mix_zero`` is positive value in the 'dft' option of ``theory``. + | Specify a condition to quit the fixed density iteration forced by ``step_initial_mix_zero`` option. Mixing of the density will start after the band-gap energy exceeds this parameter for consecutive five SCF iteration steps. + +.. _yn_preconditioning: + +yn_preconditioning +^^^^^^^^^^^^^^^^^^^^^^^ + +character, Default='n' + + | Available for ``theory='dft'``. + | Switch for preconditioning. The low-filter preconditioner is used when ``&scf/yn_preconditioning='y'``. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _alpha_pre: + +alpha_pre +^^^^^^^^^^^^^^^^^^^^^^^ + +real(8), Default=0.6d0 + + | Available for ``theory='dft'``. + | The certain factor used in preconditioning. + +.. _&emfield: + +&emfield +-------- + +.. _trans_longi: + +trans_longi +^^^^^^^^^^^ + +character, default='tr' + + | Available for ``yn_periodic='y'`` in 'maxwell' and TDDFT based options of ``theory``. + | Specify the treatment of the polarization in the time evolution calculation. + | Options: + | ``'tr'`` / Transverse + | ``'lo'`` / Longitudinal + | ``'2d'`` / 2D maxwell-TDDFT (2D approximation) method (for more details, see ``film_thickness`` of &maxwell) + +.. _ae_shape1: + +ae_shape1 +^^^^^^^^^ + +.. _ae_shape2: + +ae_shape2 +^^^^^^^^^ + +character, Default='none' + + | Available for 'maxwell' and TDDFT based options of ``theory``. + | Envelope shape of the first/second pulse. 'Acos2' indicates a cosine square envelope for vector potential, and 'Ecos2' a cosine square envelope for electric field. + | Options: + | ``'impulse'`` / A weak impulsive field is applied at :math:`t=0`. This will be used to explore linear response properties. The magnitude of the impulse can be specified by ``e_impulse``. + | ``'Acos2'`` / Envelope of cos\ :sup:`2`\ for a vector potential. + | ``'Acos3'`` / Envelope of cos\ :sup:`3`\ for a vector potential. + | ``'Acos4'`` / Envelope of cos\ :sup:`4`\ for a vector potential. + | ``'Acos6'`` / Envelope of cos\ :sup:`6`\ for a vector potential. + | ``'Acos8'`` / Envelope of cos\ :sup:`8`\ for a vector potential. + | ``'Ecos2'`` / Envelope of cos\ :sup:`2`\ for an electric field. + | ``'Asin2cos'`` [Trial] / Envelope of sin\ :sup:`2`\ with cosine type oscillation for a vector potential. + | ``'Asin2_cw'`` [Trial] / Envelope of sin\ :sup:`2`\ at the beginning and continuous wave after that for a vector potential (for 'ae_shape1' only). + | ``'input'`` [Trial] / read the vector potential as a numerical table with ``file_input1`` option (for 'ae_shape1' only). + | ``'none'`` / no incident field is applied. + | + | If 'Ecos2' is adopted, 'phi_cep1' must be chosen either 0.75 or 0.25, since otherwise the time integral of the electric field (vector potential at the end of the pulse) does not vanishi. There is no such restriction for 'Acos2' pulses. + | + | For ``yn_periodic='n'``, available choices are limited to ``'impulse'``, ``'Acos2'``, and ``'Ecos2'``. + +.. _file_input1: + +file_input1 +^^^^^^^^^^^ + +character, default='' + + | Available if ``ae_shape1='input'`` is specified and ``theory='tddft_pulse'``. + | Name of an input file that contains user-defined vector potential. The file must be a numerical table separated by blank, having four columns; the first column is time and second to fourth columns are Ax/c, Ay/c, Az/c, repsectively. All the quantities are written using the units specified by ``unit_system``. '#' and '!' may be used for a comment line. + | Note that a linear interpolation will be applied when the time step differs from that used in the calculation. + +.. _e_impulse: + +e_impulse +^^^^^^^^^ + +real(8), Default=1d-2 a.u. + + | Available for 'maxwell' and TDDFT based options of ``theory``. + | Magnitude of the impulse in the impulsive perturbation. This valiable has the dimention of momentum, energy*time/length. + +.. + #(commented out: not implemented yet) + #- **t_impulse** + # | Available for ``theory='XXX'``. + # not yet implemented XXX +.. + +.. _E_amplitude1: + +E_amplitude1 +^^^^^^^^^^^^ + +.. _E_amplitude2: + +E_amplitude2 +^^^^^^^^^^^^ + +real(8), default=0d0 + + | Available for 'maxwell' and TDDFT based options of ``theory``. + | Maximum amplitude of electric field for the first/second pulse. This valiable has the dimension of electric field, energy/(length*charge). This cannot be set with ``&emfield/I_wcm2_1`` (``I_wcm2_2``) simultaneously. + +.. _I_wcm2_1: + +I_wcm2_1 +^^^^^^^^ + +.. _I_wcm2_2: + +I_wcm2_2 +^^^^^^^^ + +real(8), default=-1d0 + + | Available for 'maxwell' and TDDFT based options of ``theory``. + | Maximum intensity (W/cm\ :sup:`2`\) of the first/second pulse. This valiable cannot be set with ``&emfield/E_amplitude1`` (``E_amplitude2``) simultaneously. For this quantity, a unit of W/cm\ :sup:`2`\ is adopted irrespective of ``&units\unit_system``. + +.. _tw1: + +tw1 +^^^ + +.. _tw2: + +tw2 +^^^ + +real(8), default=0d0 + + | Available for 'maxwell' and TDDFT based options of ``theory``. + | Duration of the first/second pulse (edge-to-edge time length). + | Note that this is not the FWHM duration. + +.. _omega1: + +omega1 +^^^^^^ + +.. _omega2: + +omega2 +^^^^^^ + +real(8), default=0d0 + + | Available for 'maxwell' and TDDFT based options of ``theory``. + | Mean photon energy (average frequency multiplied by the Planck constant) of the first/second pulse. + +.. _epdir_re1(3): + +epdir_re1(3) +^^^^^^^^^^^^ + +.. _epdir_re2(3): + +epdir_re2(3) +^^^^^^^^^^^^ + +real(8), default=1d0, 0d0, 0d0 + + | Available for 'maxwell' and TDDFT based options of ``theory``. + | Real part of the polarization unit vector for the first/second pulse. + +.. _epdir_im1(3): + +epdir_im1(3) +^^^^^^^^^^^^ + +.. _epdir_im2(3): + +epdir_im2(3) +^^^^^^^^^^^^ + +real(8), default=0d0 + + | Available for 'maxwell' and TDDFT based options of ``theory``. + | Imaginary part of the polarization unit vector for the first/second pulse. Using both real 'epdir_re1' and imaginary 'epdir_im1' parts of the polarization vector, circularly and general ellipsoidary polarized pulses may be described. + +.. _phi_cep1: + +phi_cep1 +^^^^^^^^ + +.. _phi_cep2: + +phi_cep2 +^^^^^^^^ + +real(8), default=0d0 + + | Available for 'maxwell' and TDDFT based options of ``theory``. + | Carrier envelope phase of the first/second pulse. It specifies the CEP in unit of :math:`2\pi`. + +.. _t1_t2: + +t1_t2 +^^^^^ + +real(8), default=0d0 + | Available for 'maxwell' and TDDFT based options of ``theory``. + | Time-delay between the first and the second pulses. + +.. _t1_start: + +t1_start +^^^^^^^^ + +real(8), default=0d0 + + | Available for 'maxwell' and TDDFT based options of ``theory``. + | Shift the starting time of the first pulse. (this is not available for multiscale option). + +.. _num_dipole_source: + +num_dipole_source +^^^^^^^^^^^^^^^^^ + +integer, default=0 + + | Available for TDDFT based options of ``theory``. + | Number of radiation sources to mimic optical near fields. Maximum number is ``2``. + +.. _vec_dipole_source(3,num_dipole_source): + +vec_dipole_source(3,num_dipole_source) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +real(8), default=0d0 + + | Available for TDDFT based options of ``theory``. + | Dipole vectors of the radiation sources mimicing optical near fields. + +.. _cood_dipole_source(3,num_dipole_source): + +cood_dipole_source(3,num_dipole_source) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +real(8), default=0d0 + + | Available for TDDFT based options of ``theory``. + | Coordinates of the radiation sources mimicing optical near fields. + +.. _rad_dipole_diele: + +rad_dipole_diele +^^^^^^^^^^^^^^^^ + +real(8), default=2d0 [a.u.] + + | Available for TDDFT based options of ``theory``. + | Radii of dielectric spheres of the radiation sources mimicing optical near fields. + +.. _&singlescale[Trial]: + +&singlescale[Trial] +------------------- + +.. _method_singlescale: + +method_singlescale +^^^^^^^^^^^^^^^^^^ + +character, default='3d' + + | Available for ``theory='single_scale_maxwell_tddft'``. + | Type of single-scale Maxwell-TDDFT method. + | Options: + | ``'3d'`` / 3-dimensional FDTD + TDDFT + | ``'1d'`` / 1-dimensional FDTD (along the z axis) + TDDFT + | ``'1d_fourier'`` / ``'1d'`` with 3D Fourier component of the vector potential + +.. _cutoff_G2_emfield: + +cutoff_G2_emfield +^^^^^^^^^^^^^^^^^ + +real(8), default=-1d0 + + | Available for ``theory='single_scale_maxwell_tddft'``. + | Cutoff energy of Fourier component of the vector potential when method_singlescale='1d_fourier'. + +.. _yn_symmetrized_stencil: + +yn_symmetrized_stencil +^^^^^^^^^^^^^^^^^^^^^^ + +[Trial] character, default='n' + + | Available for ``theory='single_scale_maxwell_tddft'``. + | Switch to symmetrize the finite differences for the product of vector potential and orbitals, :math:`(\nabla A(r) \cdot \psi(r))`. This option improves hermiticity of the Hamiltonian although computational cost increases. + +.. _yn_put_wall_z_boundary: + +yn_put_wall_z_boundary +^^^^^^^^^^^^^^^^^^^^^^ + +[Trial] character, default='n' + + | Available for DFT/TDDFT based options of ``theory``. + | Option to put potential wall near the boundary planes at *z*\ =0 and *z*\ =``&system/al(3)``. This potential prevents electrons from crossing the *z*\ -boundary plane. In the single-scale Maxwell-TDDFT method, the electron density on the *z*\ -boundary plane harms the norm conservation of electrons due to the discontinuity of the vectorpotential. The wall is described using the square of cosine function. + | Options: + | ``'y'`` / put the potential wall + | ``'n'`` / no potential wall + +.. _wall_height: + +wall_height +^^^^^^^^^^^ + +real(8), default=100.0 [eV] + + | Available for ``yn_put_wall_z_boundary='y'``. + | The height of the potential wall. + +.. _wall_width: + +wall_width +^^^^^^^^^^ + +real(8), default=5.0 [Angstrom] + + | Available for ``yn_put_wall_z_boundary='y'``. + | The width of the potential wall defined by the length from the potential peak (\ *z*\ =0 and *z*\ =``&system/al(3)``) to the edge. + +.. _&multiscale: + +&multiscale +----------- + +.. _fdtddim: + +fdtddim +^^^^^^^ + +[Trial] character, default='1d' + + | Available for ``theory='multi_scale_maxwell_tddft'`` with ``yn_periodic='y'`` and ``theory='maxwell_sbe'`` + | Dimension of macroscopic scale system (Maxwell(FDTD) calculation) in multiscale Maxwell-TDDFT method. + | Options: + | ``'3d'`` / 3-dimensional FDTD for macroscopic electromagnetism [currently not available] + | ``'1d'`` / 1-dimensional FDTD (along the *x*\ -axis) for macroscopic electromagnetism + +.. _nx_m: + +nx_m +^^^^ + +integer, default=1 + + | Available for ``theory='multi_scale_maxwell_tddft'`` with ``yn_periodic='y'`` and ``theory='maxwell_sbe'`` + | Number of macroscopic grid points inside materials for *x*\ -direction. + +.. _ny_m: + +ny_m +^^^^ + +integer, default=1 + + | Available for ``theory='multi_scale_maxwell_tddft'`` with ``yn_periodic='y'`` and ``theory='maxwell_sbe'`` + | Number of macroscopic grid points inside materials for *y*\ -direction. + +.. _nz_m: + +nz_m +^^^^ + +[Trial] integer, default=1) + + | Available for ``theory='multi_scale_maxwell_tddft'`` with ``yn_periodic='y'`` or ``theory='maxwell_sbe'`` + | Number of macroscopic grid points inside materials for (\ *y*\ /\ *z*\ )-direction. + +.. _hx_m: + +hx_m +^^^^ + +real(8), default=0d0 + | Available for ``theory='multi_scale_maxwell_tddft'`` with ``yn_periodic='y'`` or ``theory='maxwell_sbe'`` + | Grid spacing of macroscopic coordinate for *x*\ -direction. + | Variable ``hx_m`` is deprecated, and will be moved to ``&units/dl_em(1)`` + +.. _hy_m: + +hy_m + +.. _hz_m: + +hz_m +^^^^ + +[Trial] real(8), default=0d0 + + | Available for ``theory='multi_scale_maxwell_tddft'`` with ``yn_periodic='y'`` or ``theory='maxwell_sbe'`` + | Grid spacing of macroscopic coordinate for (\ *y*\ /\ *z*\ )-direction. + | Variable ``hy_m`` and ``hz_m`` are deprecated, and will be moved to ``&units/dl_em(2:3)`` + +.. _nxvacl_m: + +nxvacl_m +^^^^^^^^ +integer, default=1/0 + + | Available for ``theory='multi_scale_maxwell_tddft'`` or ``'maxwell_sbe'`` + | The parameter ``nxvacl_m`` will be replaced by ``nxvac_m`` and eventually removed in the future. + +.. _nxvacr_m: + +nxvacr_m +^^^^^^^^ + +integer, default=1/0 + + | Available for ``theory='multi_scale_maxwell_tddft'`` or ``'maxwell_sbe'`` + | The parameter ``nxvacr_m`` will be replaced by ``nxvac_m`` and eventually removed in the future. + +.. _nxvac_m(2): + +nxvac_m(2) +^^^^^^^^ +integer, default=0 + + | Available for ``theory='multi_scale_maxwell_tddft'`` or ``'maxwell_sbe'`` + | Represents the number of vacuum cells between the edge of the material region and the computational boundary. The first element of the array represents the number of cells from the leftmost cell (ix=1) on the x-axis to the left boundary. The second element represents the number of cells from the rightmost cell on the x-axis to the right boundary. + +nyvac_m(2) +^^^^^^^^ +integer, default=0 + + | Available for ``theory='multi_scale_maxwell_tddft'`` or ``'maxwell_sbe'`` + | Provides same functionality of ``nxvac_m(2)`` for y-direction. + +nzvac_m(2) +^^^^^^^^ +integer, default=0 + + | Available for ``theory='multi_scale_maxwell_tddft'`` or ``'maxwell_sbe'`` + | Provides same functionality of ``nxvac_m(2)`` for z-direction. + + +.. _&maxwell: + + +&maxwell +-------- + +.. _al_em(3): + +al_em(3) +^^^^^^^^ + +real(8), default=0d0 + + | Available for ``theory='maxwell'``. + | Size of simulation box in electromagnetic analysis. + | Only two of ``al_em``, ``dl_em``, and ``num_rgrid_em`` must be set. + +.. _dl_em(3): + +dl_em(3) +^^^^^^^^ + +real(8), default=0d0 + + | Available for ``theory='maxwell'`` and ``theory='multi_scale_maxwell_tddft'``. + | Spacing of real-space grids in electromagnetic analysis. + | Only two of ``al_em``, ``dl_em``, and ``num_rgrid_em`` must be set. + +.. _num_rgrid_em(3): + +num_rgrid_em(3) +^^^^^^^^^^^^^^^ + +integer, default=0 + + | Available for ``theory='maxwell'``. + | Number of real-space grids in electromagnetic analysis. + | Only two of ``al_em``, ``dl_em``, and ``num_rgrid_em`` must be set. + +.. _at_em: + +at_em +^^^^^ + +real(8), default=0d0 + + | Available for ``theory='maxwell'``. + | Total time for electromagnetic analysis. + | Two of ``at_em``, ``dt_em``, and ``nt_em`` must be set. + | Otherwise, both ``at_em`` and ``nt_em`` or either of those must be set. + | (For the latter, ``dt_em`` is automatically determined from CFL condition) + +.. _dt_em: + +dt_em +^^^^^ + +real(8), default=0d0 + + | Available for ``theory='maxwell'``. + | Time step size for electromagnetic analysis. + | If default is selected, this is automatically determined from CFL condition. + +.. _nt_em: + +nt_em +^^^^^ + +integer, default=0 + + | Available for ``theory='maxwell'``. + | Number of total time steps of time propagation in electromagnetic analysis. + +.. _boundary_em(3,2): + +boundary_em(3,2) +^^^^^^^^^^^^^^^^ + +character, default='default' + + | Available for ``theory='maxwell'`` and ``theory='multi_scale_maxwell_tddft'`` and ``theory='maxwell_sbe'`` + | Boundary condition in electromagnetic analysis. The first index(1-3 rows) corresponds to *x*\ , *y*\ , and *z* axes. The second index(1-2 columns) corresponds to bottom and top of the axes. + | Options: + | ``'abc'`` / absorbing boundary + | ``'pec'`` / perfect electric conductor + | ``'periodic'`` / periodic boundary + | + | If ``&system/yn_periodic='n'``, ``'default'``, ``'abc'``, and ``'pec'`` can be chosen, where ``'default'`` automatically chooses ``'abc'``. If ``&system/yn_periodic='y'``, ``'default'``, ``'abc'``, and ``'periodic'`` can be chosen, where ``'default'`` automatically chooses ``'periodic'``. | When ``theory='maxwell'``, perfectly matched layer(PML) is used for ``'abc'``. + +.. _shape_file: + +shape_file +^^^^^^^^^^ + +character, default='none' + + | Available for ``theory='maxwell'``. + | Name of input shape file in electromagnetic analysis. The shape file can be generated by using ``FDTD_make_shape`` in SALMON utilities (https://salmon-tddft.jp/utilities.html). + +.. _media_num: + +media_num +^^^^^^^^^ + +integer, default=0 + + | Available for ``theory='maxwell'`` and ``theory='maxwell_sbe'``. + | Number of media in electromagnetic analysis. + +.. _media_type(:): + +media_type(:) +^^^^^^^^^^^^^ + +character, default='vacuum' + + | Available for ``theory='maxwell'`` and ``theory='maxwell_sbe'`` + | ``media_type(n)`` spesifies type of n-th media in electromagnetic analysis. + | Options: + | ``'vacuum'`` + | ``'constant media'`` + | ``'pec'`` + | ``'lorentz-drude'`` + | If ``'lorentz-drude'`` is chosen, linear response calculation is feasible by setting ``&emfield/ae_shape1 or ae_shape2='impulse'``. + | Besides, in the case of ``theory='maxwell_sbe'``, ``'multiscale'`` is also available. + +.. _epsilon_em(:): + +epsilon_em(:) +^^^^^^^^^^^^^ + +real(8), Default=1d0 + + | Available for ``theory='maxwell'``, ``theory='maxwell_sbe'`` and for TDDFT based options of ``theory`` with ``trans_longi='2d'``. + | For ``theory='maxwell'``, ``epsilon_em(n)`` spesifies relative permittivity of n-th media in electromagnetic analysis. + | For TDDFT based options of ``theory`` with ``trans_longi='2d'``, the relative permittivity of the transparent media on both sides of the film is specified by ``epsilon_em(1)`` and ``epsilon_em(2)``, respectively. + +.. _mu_em(:): + +mu_em(:) +^^^^^^^^ + +real(8), default=1d0 + + | Available for ``theory='maxwell'``. + | ``mu_em(n)`` spesifies relative permeability of n-th media in electromagnetic analysis. + +.. _sigma_em(:): + +sigma_em(:) +^^^^^^^^^^^ + +real(8), default=0d0 + + | Available for ``theory='maxwell'``. + | ``sigma_em(n)`` spesifies conductivity of n-th media in electromagnetic analysis. + +.. _pole_num_ld(:): + +pole_num_ld(:) +^^^^^^^^^^^^^^ + +integer, default=1 + + | Available for ``theory='maxwell'``. + | ``pole_num_ld(n)`` spesifies number of poles of n-th media, available for ``type_media(n)='lorentz-drude'`` in electromagnetic analysis. + +.. _omega_p_ld(:): + +omega_p_ld(:) +^^^^^^^^^^^^^ + +real(8), default=0d0 + + | Available for ``theory='maxwell'``. + | ``omega_p_ld(n)`` spesifies plasma frequency of n-th media, available for ``type_media(n)='lorentz-drude'`` in electromagnetic analysis. + +.. _f_ld(:,:): + +f_ld(:,:) +^^^^^^^^^ + +real(8), default=0d0 + + | Available for ``theory='maxwell'``. + | ``f_ld(n,m)`` spesifies m-th oscillator strength of n-th media, available for ``type_media='lorentz-drude'`` in electromagnetic analysis. The first index is the media ID whose maximum value is given by ``media_num``. The second index is the pole ID whose maximum value is given by ``pole_num_ld(n)``. + +.. _gamma_ld(:,:): + +gamma_ld(:,:) +^^^^^^^^^^^^^ + +real(8), default=0d0 + + | Available for ``theory='maxwell'``. + | ``gamma_ld(n,m)`` spesifies m-th collision frequency of n-th media, available for ``type_media(n)='lorentz-drude'`` in electromagnetic analysis. The first index is the media ID whose maximum value is given by ``media_num``. The second index is the pole ID whose maximum value is given by ``pole_num_ld(n)``. + +.. _omega_ld(:,:): + +omega_ld(:,:) +^^^^^^^^^^^^^ + +real(8), default=0d0 + + | Available for ``theory='maxwell'``. + | ``omega_ld(n,m)`` spesifies m-th oscillator frequency of n-th media, available for ``type_media(n)='lorentz-drude'`` in electromagnetic analysis. The first index is the media ID whose maximum value is given by ``media_num``. The second index is the pole ID whose maximum value is given by ``pole_num_ld(n)``. + +.. _wave_input: + +wave_input +^^^^^^^^^^ + +character, default='none' + + | Available for ``theory='maxwell'``. + | If ``'source'``, the incident pulse in electromagnetic analysis is generated by the incident current source. + +.. _ek_dir1(3): + +ek_dir1(3) +^^^^^^^^^^ + +.. _ek_dir2(3): + +ek_dir2(3) +^^^^^^^^^^ + +real(8), default=0d0 + + | Available for ``theory='maxwell'``. + | Propagation direction of the first/second pulse (\ *x*\ , *y*\ , and *z* directions). Each component must be 0d0 or 1d0. + +.. _source_loc1(3): + +source_loc1(3) +^^^^^^^^^^^^^^ + +.. _source_loc2(3): + +source_loc2(3) +^^^^^^^^^^^^^^ + +real(8), default=0d0 + + | Available for ``theory='maxwell'``. + | Location of the incident current source of the first/second pulse. Note that the coordinate system ranges from ``-al_em/2`` to ``al_em/2`` for ``&system/yn_periodic='n'`` while ranges from ``0`` to ``al_em`` for ``&system/yn_periodic='y'``. + +.. _gbeam_sigma_plane1(3): + +gbeam_sigma_plane1(3) +^^^^^^^^^^^^^^^^^^^^^ + +.. _gbeam_sigma_plane2(3): + +gbeam_sigma_plane2(3) +^^^^^^^^^^^^^^^^^^^^^ + +.. _gbeam_sigma_line1(3): + +gbeam_sigma_line1(3) +^^^^^^^^^^^^^^^^^^^^ +.. _gbeam_sigma_line2(3): + +gbeam_sigma_line2(3) +^^^^^^^^^^^^^^^^^^^^ + +[Trial] real(8), default=-1d0 + + | Available for ``theory='maxwell'`` with ``wave_input='source'``. + | These input keywords specify the width of Gauss function, exp(-0.5(abs(r-r_0)/sigma)^2), applied for the incident current source to generate the first/second pulse. These input keywords work only when their values > 0.0d0. The center of the Gauss function, r_0, is specified by ``source_loc1/2``. ``gbeam_sigma_plane1/2`` specifies the width of 2D Gauss function (\ *xy*\ , *yz*\ , and *xz* planes). ``gbeam_sigma_line1/2`` specifies the width of 1D Gauss function (\ *x*\ , *y*\ , and *z* axes). + +.. _obs_num_em: + +obs_num_em +^^^^^^^^^^ + +integer, default=0 + + | Available for ``theory='maxwell'``. + | Number of observation points in electromagnetic analysis. From the obtained results, figure and animation files can be generated by using SALMON utilities (https://salmon-tddft.jp/utilities.html). + +.. _obs_samp_em: + +obs_samp_em +^^^^^^^^^^^ + +integer, default=0 + + | Available for ``theory='maxwell'``. + | Sampling time-step of the observation in electromagnetic analysis. + | If default is selected, this is automatically determined. + +.. _obs_loc_em(:,3): + +obs_loc_em(:,3) +^^^^^^^^^^^^^^^ + +real(8), default=0d0 + + | Available for ``theory='maxwell'``. + | ``obs_loc_em(n,1:3)=x,y,z`` spesifies location of the n-th observation point in electromagnetic analysis. Note that the coordinate system ranges from ``-al_em/2`` to ``al_em/2`` for ``&system/yn_periodic='n'`` while ranges from ``0`` to ``al_em`` for ``&system/yn_periodic='y'``. + +.. _obs_plane_ene_em(:,:): + +obs_plane_ene_em(:,:) +^^^^^^^^^^^^^^^^^^^^^ + +real(8), default=-1d0 + + | Available for ``theory='maxwell'``. + | ``obs_loc_em(n,:)=energy1,energy2,energy3,...`` spesifies energy value of the n-th observation point in electromagnetic analysis. At the spesified energies, Fourier-transformed spatial distributions on the xy, yz, and xz plans are outputed. This input keyword must be larger than 0. + +.. _yn_obs_plane_em(:): + +yn_obs_plane_em(:) +^^^^^^^^^^^^^^^^^^ + +character, default='n' + + | Available for ``theory='maxwell'``. + | Spesify whether or not to generate output of the electrmagnetic fields on the planes (\ *xy*\ , *yz*\ , and *xz* planes) for n-th observation point. This option must be ``'y'`` for generating animation files by using ``FDTD_make_figani`` in SALMON utilities (https://salmon-tddft.jp/utilities.html). + | Options: + | ``'y'`` + | ``'n'`` + +.. _yn_obs_plane_integral_em(:): + +yn_obs_plane_integral_em(:) +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +character, default='n' + + | Available for ``theory='maxwell'``. + | Specify whether or not to generate output of the spatial integration of electromagnetic fields on the planes (\ *xy*\ , *yz*\ , and *xz* planes) for n-th observation point. + | Options: + | ``'y'`` + | ``'n'`` + +.. _yn_wf_em: + +yn_wf_em +^^^^^^^^ + +character, default='y' + + | Available for ``theory='maxwell'``. + | Switch of a window function for linear response calculation. + | Options: + | ``'y'`` + | ``'n'`` + +.. _film_thickness: + +film_thickness +^^^^^^^^^^^^^^ + +real(8), default=0d0 + + | Available for TDDFT based options of ``theory`` with ``trans_longi='2d'``. + | Thickness of the film for the 2D maxwell-TDDFT (2D approximation) method [S. Yamada and K. Yabana, PRB 103, 155426 (2021)]. + | For a slab system, ``film_thickness`` should be set to the side length of the calculation cell, i.e., the thickness of the slab plus the length of the vacuum region [S. Yamada et al., PRB 98, 245147 (2018)]. + | The relative permittivity of the transparent media on both sides of the film can be specified by ``epsilon_em(1)`` and ``epsilon_em(2)``, respectively (default=vacuum). + +.. _media_id_pml(3:2): + +media_id_pml(3:2) +^^^^^^^^^^^^^^^^^ + +integer, default=0 + + | Available for ``theory='maxwell'``. + | Media ID used in PML. The first index(1-3 rows) corresponds to *x*\ , *y*\ , and *z* axes. The second index(1-2 columns) corresponds to bottom and top of the axes. + +.. _media_id_source1: + +media_id_source1 +^^^^^^^^^^^^^^^^ + +.. _media_id_source2: + +media_id_source2 +^^^^^^^^^^^^^^^^ + +integer, default=0 + | Available for ``theory='maxwell'``. + | Media ID used in incident current source1/source2 to generate the first/second pulse. + +.. _bloch_k_em: + +bloch_k_em(3) +^^^^^^^^^^^^^ + +[Trial] real(8), default=0d0 + + | Available for ``theory='maxwell'`` with ``yn_periodic='y'``. + | Wavenumber used in Bloch boundary conditions. When sum(|bloch_k_em(:)|)>0, Bloch boundary conditions are automatically applied. + +.. _bloch_k_em: + +bloch_real_imag_em(3) +^^^^^^^^^^^^^^^^^^^^^ + +[Trial] character, default='real' + + | Available for ``theory='maxwell'`` with ``yn_periodic='y'`` and sum(|bloch_k_em(:)|)>0. + | Specify real or imaginary parts for exp(ikr) used in Bloch boundary conditions. + | Options: + | ``'real'`` + | ``'imag'`` + +.. _ase_num_em: + +ase_num_em +^^^^^^^^^^ + +integer, default=0 + + | Available for ``theory='maxwell'`` with ``yn_periodic='n'``. + | Number of energy or wavelength grid points specified by ``ase_ene_min_em/ase_ene_max_em`` or ``ase_wav_min_em/ase_wav_max_em``. + | If this is specified as larger than 0, Absorption-, Scattering-, and Extinction-cross-sections will be outputed at the end of calculation. + | Those are normalized by the spectral distribution of the incident pulse. + +.. _ase_ene_min_em: + +ase_ene_min_em +^^^^^^^^^^^^^^ +.. _ase_ene_max_em: + +ase_ene_max_em +^^^^^^^^^^^^^^ + +real(8), default=-1d0 + + | Available for ``theory='maxwell'`` with ``ase_num_em>0`` and ``yn_periodic='n'``. + | Energy range for Absorption-, Scattering-, and Extinction-cross-sections. + +.. _ase_wav_min_em: + +ase_wav_min_em +^^^^^^^^^^^^^^ +.. _ase_wav_max_em: + +ase_wav_max_em +^^^^^^^^^^^^^^ + +real(8), default=-1d0 + + | Available for ``theory='maxwell'`` with ``ase_num_em>0`` and ``yn_periodic='n'``. + | Wavelength range for Absorption-, Scattering-, and Extinction-cross-sections. + +.. _ase_smedia_id_em: + +ase_smedia_id_em +^^^^^^^^^^^^^^^^ + +integer, default=0 + + | Available for ``theory='maxwell'`` with ``ase_num_em>0`` and ``yn_periodic='n'``. + | Media ID used as surrounding media. + +.. _ase_box_cent_em(3): + +ase_box_cent_em(3) +^^^^^^^^^^^^^^^^^^ + +real(8), default=0d0 + + | Available for ``theory='maxwell'`` with ``ase_num_em>0`` and ``yn_periodic='n'``. + | ``ase_box_cent_em(1:3)=x,y,z`` spesifies location of the center of a closed surface (box shape) to calculate Absorption-, Scattering-, and Extinction-cross-sections. + +.. _ase_box_size_em(3): + +ase_box_size_em(3) +^^^^^^^^^^^^^^^^^^ + +real(8), default=-1d0 + + | Available for ``theory='maxwell'`` with ``ase_num_em>0`` and ``yn_periodic='n'``. + | ``ase_box_size_em(1:3)=X,Y,Z`` spesifies size of a closed surface (box shape) to calculate Absorption-, Scattering-, and Extinction-cross-sections. + +.. _art_num_em: + +art_num_em +^^^^^^^^^^ + +integer, default=0 + + | Available for ``theory='maxwell'`` with ``yn_periodic='y'``. + | Number of energy or wavelength grid points specified by ``art_ene_min_em/art_ene_max_em`` or ``art_wav_min_em/art_wav_max_em``. + | If this is specified as larger than 0, Absorption-, Reflection-, and Transmission-ratas will be outputed at the end of calculation. + | Those are normalized by the spectral distribution of the incident pulse. + +.. _art_ene_min_em: + +art_ene_min_em +^^^^^^^^^^^^^^ +.. _art_ene_max_em: + +art_ene_max_em +^^^^^^^^^^^^^^ + +real(8), default=-1d0 + + | Available for ``theory='maxwell'`` with ``art_num_em>0`` and ``yn_periodic='y'``. + | Energy range for Absorption-, Reflection-, and Transmission-ratas. + +.. _art_wav_min_em: + +art_wav_min_em +^^^^^^^^^^^^^^ +.. _art_wav_max_em: + +art_wav_max_em +^^^^^^^^^^^^^^ + +real(8), default=-1d0 + + | Available for ``theory='maxwell'`` with ``art_num_em>0`` and ``yn_periodic='y'``. + | Wavelength range for Absorption-, Reflection-, and Transmission-ratas. + +.. _art_smedia_id_em: + +art_smedia_id_em +^^^^^^^^^^^^^^^^ + +integer, default=0 + + | Available for ``theory='maxwell'`` with ``art_num_em>0`` and ``yn_periodic='y'``. + | Media ID used as surrounding media. + +.. _art_plane_bot_em(3): + +art_plane_bot_em(3) +^^^^^^^^^^^^^^^^^^ +.. _art_plane_top_em(3): + +art_plane_top_em(3) +^^^^^^^^^^^^^^^^^^ + +real(8), default=0d0 + + | Available for ``theory='maxwell'`` with ``art_num_em>0`` and ``yn_periodic='y'``. + | ``art_plane_bot_em(1:3)=x1,y1,z1`` and ``art_plane_top_em(1:3)=x2,y2,z2`` spesify location of bottom and top planes on the propagation axis to calculate Absorption-, Reflection-, and Transmission-ratas. + +.. _yn_make_shape: + +yn_make_shape +^^^^^^^^^^^^^ + +character, default='n' + + | Available for ``theory='maxwell'``. + | Switch for making shape. This is same functionality for ``FDTD_make_shape`` in SALMON utilities (https://salmon-tddft.jp/utilities.html). + | Options: + | ``'y'`` + | ``'n'`` + +.. _yn_output_shape: + +yn_output_shape +^^^^^^^^^^^^^^^^^ + +character, default='n' + + | Available for ``theory='maxwell'``. + | Switch for outputing shape file in cube format when ``yn_make_shape='y'``. + | Options: + | ``'y'`` + | ``'n'`` + +.. _yn_copy_x: + +yn_copy_x +^^^^^^^^^ +.. _yn_copy_y: + +yn_copy_y +^^^^^^^^^ +.. _yn_copy_z: + +yn_copy_z +^^^^^^^^^ +character, default='n' + + | Available for ``theory='maxwell'``. + | See ``FDTD_make_shape`` in SALMON utilities (https://salmon-tddft.jp/utilities.html). + | Options: + | ``'y'`` + | ``'n'`` + +.. _rot_type: + +rot_type +^^^^^^^^ +character, default='radian' + + | Available for ``theory='maxwell'``. + | See ``FDTD_make_shape`` in SALMON utilities (https://salmon-tddft.jp/utilities.html). + | Options: + | ``'radian'`` + | ``'degree'`` + +.. _n_s: + +n_s +^^^ +integer, default=0 + + | Available for ``theory='maxwell'`` and ``theory='maxwell_sbe'``. + | See ``FDTD_make_shape`` in SALMON utilities (https://salmon-tddft.jp/utilities.html). + +.. _typ_s(:): + +typ_s(:) +^^^^^^^^ +character, default='none' + + | Available for ``theory='maxwell'`` and ``theory='maxwell_sbe'``. + | See ``FDTD_make_shape`` in SALMON utilities (https://salmon-tddft.jp/utilities.html). + +.. _id_s(:): + +id_s(:) +^^^^^^^ +integer, default=0 + + | Available for ``theory='maxwell'`` and ``theory='maxwell_sbe'``. + | See ``FDTD_make_shape`` in SALMON utilities (https://salmon-tddft.jp/utilities.html). + +.. _inf_s(:,10): + +inf_s(:,10) +^^^^^^^^^^^ +real(8), default=0 + + | Available for ``theory='maxwell'`` and ``theory='maxwell_sbe'``. + | See ``FDTD_make_shape`` in SALMON utilities (https://salmon-tddft.jp/utilities.html). + +.. _ori_s(:,3): + +ori_s(:,3) +^^^^^^^^^^ +.. _rot_s(:,3): + +rot_s(:,3) +^^^^^^^^^^ +real(8), default=0d0 + + | Available for ``theory='maxwell'`` + | See ``FDTD_make_shape`` in SALMON utilities (https://salmon-tddft.jp/utilities.html). + +.. _&analysis: + +&analysis +--------- + +.. _projection_option: + +projection_option +^^^^^^^^^^^^^^^^^ + +character, default='no' + + | Available for TDDFT based options of ``theory``. + | Methods of projection to analyze the excited states (e.g. the number of excited electrons). + | Output files: SYSname_nex.data, SYSname_ovlp.data + | Options: + | ``'no'`` / no projection. + | ``'gs'`` / projection to eigenstates of the ground-state Hamiltonian whose k-point is shifted as k+A(t)/c (i.e. Houston functions). + | ``'td'`` / projection to instantaneous eigenstates of the time-dependent Hamiltonian. + +.. _out_projection_step: + +out_projection_step +^^^^^^^^^^^^^^^^^^^ + +integer, default=100 + + | Available when ``projection_option`` is specified. + | Resuts of the projection analysis will be outputted every ``out_projection_step`` steps during the time-propagation. + +.. _threshold_projection: + +threshold_projection +^^^^^^^^^^^^^^^^^^^^ + +real(8), default=1e-6 + + | Available when ``projection_option`` is specified. + | Convergence threshold for the iteration of the eigenstates calculation.z + +.. _yn_out_intraband_current: + +yn_out_intraband_current +^^^^^^^^^^^^^^^^^^^^^^^^ + +character, default='n' + + | Available when ``projection_option`` is specified. + | Switch for output of the intra-band current density [T. Otobe, Phys. Rev. B 94, 235152 (2016).]. + | Output file: SYSname_intra_current.data + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _nenergy: + +nenergy +^^^^^^^ + +integer, default=1000 + + | Number of energy grid points for frequency-domain analysis. This parameter is used, for examples, in ``theory='tddft_response'`` and ``theory='maxwell'``. + +.. _de: + +de +^^ + +real(8), Default=0.01d0 (eV) + + | Energy grid size for frequency-domain analysis. + | This parameter is used, for examples, in ``theory='tddft_response'`` and ``theory='maxwell'``. + +.. _out_rt_energy_step: + +out_rt_energy_step +^^^^^^^^^^^^^^^^^^ + +integer, default=10 + + | Available for the TDDFT based option of ``theory``. + | Total energy is calculated and printed every ``out_rt_energy_step`` time steps. + +.. _yn_out_psi: + +yn_out_psi +^^^^^^^^^^ + +character, default='n' + + | Available for ``theory='dft'``. + | Switch for output of orbitals. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + | The format of the output is specified by &analysis/``format_voxel_data``. + +.. _yn_out_dos: + +yn_out_dos +^^^^^^^^^^ + +character, default='n' + + | Available for ``theory='dft'``. + | Switch for output of density of states. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _yn_out_pdos: + +yn_out_pdos +^^^^^^^^^^^ + +character, default='n' + + | Available for ``theory='dft'``. + | Switch for output of projected density of states. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _yn_out_dos_set_fe_origin: + +yn_out_dos_set_fe_origin +^^^^^^^^^^^^^^^^^^^^^^^^ + +character, default='n' + + | Available when ``yn_out_dos='y'`` or ``yn_out_pdos='y'``. + | Switch to set the Fermi energy to zero in the energy axis of DoS. + | If the temperature is not specified, this option sets the valence band maximum to zero. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _out_dos_start: + +out_dos_start +^^^^^^^^^^^^^ + +real(8), default=-1d10 (eV) + +.. _out_dos_end: + +out_dos_end +^^^^^^^^^^^ + +real(8), default=1d10 (eV) + + | Available when ``yn_out_dos='y'`` or ``yn_out_pdos='y'``. + | Lower/Upper bound of the energy range for the density of states spectra. + | If this value is lower/higher than a specific value near the lowest/highest energy level, this parameter is re-set to the value. + +.. _out_dos_nenergy: + +out_dos_nenergy +^^^^^^^^^^^^^^^ + +integer, default=601 + + | Available when ``yn_out_dos='y'`` or ``yn_out_pdos='y'``. + | Number of energy points sampled in the density of states spectra. + +.. _out_dos_function: + +out_dos_function +^^^^^^^^^^^^^^^^ + +character, default='gaussian' + + | Available when ``yn_out_dos='y'`` or ``yn_out_pdos='y'``. + | Choice of the smearing function for the density of states spectra. + | Options: + | ``gaussian`` / Gaussian function + | ``lorentzian`` / Lorentzian function + +.. _out_dos_width: + +out_dos_width +^^^^^^^^^^^^^ + +real(8), default=0.1d0 [eV] + + | Available when ``yn_out_dos='y'`` or ``yn_out_pdos='y'``. + | Smearing width used in the density of states spectra. + +.. _yn_out_dns: + +yn_out_dns +^^^^^^^^^^ + +character, default='n' + + | Available for ``theory='dft'``. + | Switch to output electron density distribution of the ground state. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _yn_out_dns_rt: + +yn_out_dns_rt +^^^^^^^^^^^^^ + +character, default='n' + + | Available when ``theory='dft_md' or 'theory=tddft_pulse'``. + | Switch to output electron density distribution during the time-propagation. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _out_dns_rt_step: + +out_dns_rt_step +^^^^^^^^^^^^^^^^^^ + +integer, default=50 + + | Available when ``theory='dft_md' or 'theory=tddft_pulse'``. + | Density is outputted every ``out_dns_rt_step`` steps. + +.. _yn_out_dns_ac_je: + +yn_out_dns_ac_je +^^^^^^^^^^^^^^^^ + +character, default='n' + + | Available for ``theory='single_scale_maxwell_tddft'``. + | Switch to print the electron density, vector potential, electronic current, and ionic coordinates every ``out_dns_ac_je_step`` time steps. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + | The data written in binary format are divided into files corresponding to the space-grid parallelization number. + +.. _out_dns_ac_je_step: + +out_dns_ac_je_step +^^^^^^^^^^^^^^^^^^ + +integer, default=50 + + | Available for ``theory='single_scale_maxwell_tddft'``. + | Electron density, vector potential, electronic current, and ionic coordinates are outputted every ``outdns_dns_ac_je_step`` time steps. + +.. _yn_out_micro_je: + +yn_out_micro_je +^^^^^^^^^^^^^^^ + +character, default='n' + + | Available for TDDFT based methods. + | Switch to print the microscopic electron current density (``je_micro_***`` files) at every ``out_micro_je_step`` time steps. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _out_micro_je_step: + +out_micro_je_step +^^^^^^^^^^^^^^^^^ + +integer, default=50 + + | Available for TDDFT based methods with ``yn_out_micro_je='y'``. + | See ``yn_out_micro_je``. + + +.. _yn_out_dns_trans: + +yn_out_dns_trans +^^^^^^^^^^^^^^^^ + +[currently not available] character default='n' + + | Available for ``theory='tddft_pulse'``. + | Switch to calculate transition density at specified frequency omega (specified by ``out_dns_trans_energy``), drho(r,omega)=FT(rho(r,t)-rho_gs(r))/T. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _out_dns_trans_energy: + +out_dns_trans_energy +^^^^^^^^^^^^^^^^^^^^ + +[currently not available] real(8), default=1.55d0 [eV] + + | Available for ``theory='tddft_pulse'``. + | A frequency to output drho(r,omega)=FT(rho(r,t)-rho_gs(r))/T. + +.. _yn_out_elf: + +yn_out_elf +^^^^^^^^^^ + +character, default='n' + + | Available for ``theory='dft'``. + | Switch to output the electron localization function. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _yn_out_elf_rt: + +yn_out_elf_rt +^^^^^^^^^^^^^ + +character, default='n' + + | Available for ``theory='dft_md', 'tddft_pulse'``. + | Switch to output the electron localization function during the time propagation every ``out_elf_rt_step`` time steps. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _out_elf_rt_step: + +out_elf_rt_step +^^^^^^^^^^^^^^^ + +integer, default=50 + + | Available for ``theory='dft_md', 'tddft_pulse'``. + | Electron localization function during the time propagation is outputted every ``out_elf_rt_step`` time steps. + +.. _yn_out_estatic_rt: + +yn_out_estatic_rt +^^^^^^^^^^^^^^^^^ + +character, default='n' + + | Available for ``theory='tddft_pulse'``. + | Switch to print the static electric field during the time propagation every ``out_estatic_rt_step`` time steps. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _out_estatic_rt_step: + +out_estatic_rt_step +^^^^^^^^^^^^^^^^^^^ + +integer, default=50 + + | Available for ``theory='tddft_pulse'``. + | The static electric field during the time propagation is outputed every ``out_estatic_rt_step`` time steps. + +.. _yn_out_rvf_rt: + +yn_out_rvf_rt +^^^^^^^^^^^^^ + +character, default='n' + + | Available for TDDFT based options and 'dft_md' option of ``theory``. + | Switch to print the coordinates[A], velocities[au], forces[au] of atoms during time-propagation in ``SYSname``\_trj.xyz every ``out_rvf_rt_step`` time steps. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + | If ``yn_md='y'``, this option is automatically turned on. + +.. _out_rvf_rt_step: + +out_rvf_rt_step +^^^^^^^^^^^^^^^ + +integer, default=10 + + | Available for TDDFT based options and 'dft_md' option of ``theory``. + | The coordinates[A], velocities[au], forces[au] of atoms during time-propagation are outputed in ``SYSname``\_trj.xyz every ``out_rvf_rt_step`` time steps. + +.. _yn_out_tm: + +yn_out_tm +^^^^^^^^^ + +[Trial] character, default='n' + + | Available for ``yn_periodic='y'`` with ``theory='dft'``. + | Switch to calculate and print the transition matrix elements between occupied and virtual orbitals to ``SYSname``\_tm.data after the ground state calculation. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _yn_out_gs_sgm_eps: + +yn_out_gs_sgm_eps +^^^^^^^^^^^^^^^^^ + +[Trial] character, default='n' + + | Available for ``theory='dft'``. + | Switch to calculate and print conductivity (sigma) and dielectric function (epsilon) based on transition moment after convergence of the ground state calculation. These are printed in the output files, ``SYSname``\_sigma.data and ``SYSname``\_epsilon.data + | ``'y'`` / enable + | ``'n'`` / disable + +.. _out_gs_sgm_eps_mu_nu + +out_gs_sgm_eps_mu_nu +^^^^^^^^^^^^^^^^^^^^ + +integer, default=3,3 + + | Available for ``yn_out_gs_sgm_eps='y'`` with ``theory='dft'``. + | Index of conductibity and dielectric tensol element calculated in this option. Default of (3,3) means zz element. + +.. _out_gs_sgm_eps_width + +out_gs_sgm_eps_width +^^^^^^^^^^^^^^^^^^^^ + +real(8), default=0.015d0 [eV] + + | Available for ``yn_out_gs_sgm_eps='y'`` with ``theory='dft'``. + | Smearing width used in conductivity and dielectric function + +.. _out_ms_step: + +out_ms_step +^^^^^^^^^^^ + +integer, default=100 + + | Available for ``theory='multi_scale_maxwell_tddft'``. + | Some quantities are printed every ``out_ms_step`` time step in the Maxwell-TDDFT multiscale calculations. + +.. _format_voxel_data: + +format_voxel_data +^^^^^^^^^^^^^^^^^ + +character, default='cube' + + | Available for ``yn_out_psi='y'``, ``yn_out_dns(_rt)='y'``, ``yn_out_dns_ac_je='y'``, ``yn_out_elf(_rt)='y'``, ``yn_out_estatic_rt='y'``. + | Option of the file format for three-dimensional volumetric data. + | ``'avs'`` / AVS format + | ``'cube'`` / cube format + | ``'vtk'`` / vtk format + +.. _nsplit_voxel_data: + +nsplit_voxel_data +^^^^^^^^^^^^^^^^^ + +integer, default=1 + + | Available for ``format_voxel_data='avs'``. + | Number of separated files for three dimensional data. + +.. _yn_lr_w0_correction: + +yn_lr_w0_correction +^^^^^^^^^^^^^^^^^^^ + +[Trial] character, default='n' + + | Available for ``yn_periodic='y'`` and ``trans_longi='tr'`` with ``theory='tddft_response'``. + | Apply correction around zero frequency of dielectric function to suppress numerical error. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _yn_out_current_decomposed: + +yn_out_current_decomposed +^^^^^^^^^^^^^^^^^^^^^^^^^ + +character, default='n' + + | Available for TDDFT based options of ``theory``. + | Switch to output docomposed elements of the electron current density. + | The sum of the docomposed elements is equal to the current density in SYSname_rt.data. + | Output file: SYSname_current_decomposed.data + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _out_current_decomposed_step: + +out_current_decomposed_step +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +integer, default=100 + + | Available when ``yn_out_current_decomposed='y'``. + | The decomposed current data is outputted every ``out_current_decomposed_step`` step. + +.. _out_rt_spin_step: + +out_rt_spin_step +^^^^^^^^^^^^^^^^ + +integer, default=100 + + | Available for TDDFT based methods with ``spin='noncollinear'``. + | The spin magnetization and spin current density are outputted every ``out_rt_spin_step`` time steps in the output file SYSname_rt_spin.data. + | For the definition of the spin current, see [N. Tancogne-Dejean et al, npj Computational Materials 8, 145 (2022).]. + +.. _yn_out_mag_decomposed_rt: + +yn_out_mag_decomposed_rt +^^^^^^^^^^^^^^^^^^^^^^^^ + +character, default='n' + + | Available for TDDFT based methods with ``spin='noncollinear'``. + | Switch to output docomposed elements of the time-dependent spin magnetization at every ``out_rt_spin_step`` time steps. + | Output file: SYSname_mag_decomposed_rt.data + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _yn_out_mag_micro_rt: + +yn_out_mag_micro_rt +^^^^^^^^^^^^^^^^^^^ + +character, default='n' + + | Available for TDDFT based methods with ``spin='noncollinear'``. + | Switch to output voxel data files of the microscopic magnetization at every ``out_rt_spin_step`` time steps. + | Output files: mag_micro_[xyz]_000001. etc. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _yn_out_spin_current_decomposed: + +yn_out_spin_current_decomposed +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +character, default='n' + + | Available for TDDFT based methods with ``spin='noncollinear'``. + | Switch to output docomposed elements of the spin current density at every ``out_rt_spin_step`` time steps. + | Output file: SYSname_spin_current_decomposed.data + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _yn_out_spin_current_micro: + +yn_out_spin_current_micro +^^^^^^^^^^^^^^^^^^^^^^^^^ + +character, default='n' + + | Available for TDDFT based methods with ``spin='noncollinear'``. + | Switch to output voxel data files of the microscopic spin-current density at every ``out_rt_spin_step`` time steps. + | Output files: spin_curr_micro_[xyz]_[xyz]_000001. etc. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _yn_out_perflog: + +yn_out_perflog +^^^^^^^^^^^^^^ + +character, default='y' + + | Available for all ``theory`` + | Switch to print the performance log of routines and modules. + | Options: + | ``'y'`` / enable + | ``'n'`` / disable + +.. _format_perflog: + +format_perflog +^^^^^^^^^^^^^^ + +character, default='stdout' + + | Available for ``yn_out_perflog = 'y'`` + | The output format of performance log. + | Options: + | ``'stdout'`` / standard output unit + | ``'text'`` / save as a text file + | ``'csv'`` / save as a csv format file + +.. _&poisson: + +&poisson +-------- + +.. _method_poisson: + +method_poisson +^^^^^^^^^^^^^^^^ + +character, Default='cg' + + | Available for ``yn_periodic='n'`` in DFT and TDDFT based options of ``theory``. + | This papameter specify how to solve the Poisson equation. + | Options: + | ``cg``/ Conjugate-Gradient(CG) method + | ``ft``/ Fourier transformation method + | ``dirichlet``/ Dirichlet boundary condition method + +.. _layout_multipole: + +layout_multipole +^^^^^^^^^^^^^^^^ + +character, Default=3 + + | Available for ``yn_periodic='n'`` in DFT and TDDFT based options of ``theory``. + | This papameter specify how to achieve multipole expansioin in the Hartree potential calculation. + | Options: + | ``1``/ A single pole at the center. + | ``2``/ Multipoles are set at each center of atoms. + | ``3``/ Multipoles are set at the center of mass of electrons in prepared cuboids in each process. + +.. _num_multipole_xyz(3): + +num_multipole_xyz(3) +^^^^^^^^^^^^^^^^^^^^ + +integer, default=0 + + | Available for ``yn_periodic='n'`` in DFT and TDDFT based options of ``theory``. + | Number of multipoles. When default is set, the number of multipoles is calculated automatically. + +.. _lmax_multipole: + +lmax_multipole +^^^^^^^^^^^^^^ + +[Trial] integer, default=4 + + | Available for ``yn_periodic='n'`` in DFT and TDDFT based options of ``theory``. + | A maximum order of the multipole expansion to prepare boundary condition of Poisson equation. + +.. _threshold_cg: + +threshold_cg +^^^^^^^^^^^^ + +real(8), default=1d-15 [a.u.] + + | Available for ``yn_periodic='n'`` in DFT and TDDFT based options of ``theory``. + | A threshold for the convergence of the Hartree-cg calculation. A quantity examined is given by ||tVh(i)-tVh(i-1)||^2/(number of grids). + +.. _&ewald: + +&ewald +------ + +.. _newald: + +newald +^^^^^^ + +integer, default=4 + + | Available for ``yn_periodic='y'`` in DFT/TDDFT based options of ``theory``. + | Parameter of the Ewald method for the ion-ion Coulombic interaction. Short-range part of the Ewald sum is calculated within ``newald``-th nearlist neighbor cells. + +.. _aewald: + +aewald +^^^^^^ + +real(8), default=0.5d0 [a.u.] + + | Available for ``yn_periodic='y'`` in DFT/TDDFT based options of ``theory``. + | Square of range separation parameter for Ewald method (This parameter is given only in atomic unit). + +.. _cutoff_r: + +cutoff_r +^^^^^^^^ + +real(8), default=-1d0 + + | Available for ``yn_periodic='y'`` in DFT/TDDFT based options of ``theory``. + | Cut-off length in real-space. The length is automatically determined if ``cutoff_r`` < 0. + +.. _cutoff_r_buff: + +cutoff_r_buff +^^^^^^^^^^^^^ + +real(8), default=2d0 [a.u.] + + | Available for ``yn_periodic='y'`` in ``yn_md='y'`` or in ``theory='dft_md'``. + | Buffer length in radius for book-keeping for real-space interaction. + +.. _cutoff_g: + +cutoff_g +^^^^^^^^ + +real(8), Default=-1d0 + + | Available for ``yn_periodic='y'`` in DFT/TDDFT based options of ``thddeory``. + | Cut-off in G-space in the Ewald method. No cut-off in default. + +.. _&opt[Trial]: + +&opt[Trial] +----------- + +.. _nopt: + +nopt +^^^^ + +integer, default=100 + + | Available for ``yn_opt='y'`` in ``theory='dft'``. + | The maximum step number of geometry optimization. + +.. _convrg_opt_fmax: + +convrg_opt_fmax +^^^^^^^^^^^^^^^ + +real(8), default=1d-3 (a.u.) + + | Available for ``yn_opt='y'`` in ``theory='dft'``. + | Convergence threshold of geometry optimization is specified for the maximum force acting on atoms. + +.. _max_step_len_adjust: + +max_step_len_adjust +^^^^^^^^^^^^^^^^^^^ + +real(8), default=-1d0 + + | Available for ``yn_opt='y'`` in ``theory='dft'``. + | Set maximum optimization step length (if positive number is given) + +.. _&md[Trial]: + +&md[Trial] +----------- + +.. _ensemble: + +ensemble +^^^^^^^^ + +character, default='NVE' + + | Available for ``yn_md='y'`` or ``theory='dft_md'``. + | Ensemble in MD option: + | Options: + | ``NVE``/ NVE ensemble (constant energy and volume system) + | ``NVT``/ NVT ensemble (constant temperature and volume system) + +.. _thermostat: + +thermostat +^^^^^^^^^^ + +character, default='nose-hoover' + + | Available for ``yn_md='y'`` or ``theory='dft_md'``. + | Thermostat in "NVT" option: + | Options: + | ``nose-hoover``/ Nose-Hoover thermostat + +.. _step_velocity_scaling: + +step_velocity_scaling +^^^^^^^^^^^^^^^^^^^^^ + +integer, default=-1 + + | Available for ``yn_md='y'`` or ``theory='dft_md'``. + | Time step interval for velocity-scaling. Velocity-scaling is applied if this is set to positive. + +.. _step_update_ps: + +step_update_ps +^^^^^^^^^^^^^^ + +integer, default=10 + + | Available for ``yn_md='y'`` or ``theory='dft_md'``. + | Time step interval for updating pseudopotential (Larger number reduces computational time but increases inaccuracy). + +.. _temperature0_ion_k: + +temperature0_ion_k +^^^^^^^^^^^^^^^^^^ + +real(8), Default=298.15d0 [K] + + | Available for ``yn_md='y'`` or ``theory='dft_md'``. + | Setting ionic temperature in unit of [K] for NVT ensemble, velocity scaling and generating initial velocities. + +.. _yn_set_ini_velocity: + +yn_set_ini_velocity +^^^^^^^^^^^^^^^^^^^ + +character, Default='n' + + | Available for ``yn_md='y'`` or ``theory='dft_md'``. + | Switch to generate initial velocities. + | Options: + | ``y``/ Generate initial velocity with Maxwell-Bortzman distribution + | ``n``/ disable + +.. _file_ini_velocity: + +file_ini_velocity +^^^^^^^^^^^^^^^^^ + +[Trial] character, default='none' + + | Available for ``yn_md='y'`` or ``theory='dft_md'``. + | File name for reading initial velocities. This is read if the file name is given, then, the priority is higher than use of ``set_ini_velocity`` and restart data of velocities. The format is simply vx(iatom) vy(iatom) vz(iatom) in each line. The order of atoms must be the same as the given coordinates in the main input file. In case of using nose-hoover thermostat, a thermostat variable should be put at the last line (all atomic unit). + +.. _thermostat_tau: + +thermostat_tau +^^^^^^^^^^^^^^ + +real(8), default=1d0 [fs] + | Available for ``yn_md='y'`` or ``theory='dft_md'``. + | Parameter in Nose-Hoover method: controlling time constant for temperature. + +.. + #XXX removed?# + - **seed_ini_velocity** (integer, Default=123) + | Available for ``yn_md='y'`` or ``theory='dft_md'``. + | Random seed (integer number) to generate initial velocity if ``set_ini_velocity`` is set to y. + Default is ``123``. +.. + +.. _yn_stop_system_mom: + +yn_stop_system_mom +^^^^^^^^^^^^^^^^^^ + +character, default='n' + + | Available for ``yn_md='y'`` or ``theory='dft_md'``. + | Center of mass is fixed every time step. + | Options: + | ``y``/ enable + | ``n``/ disable + +.. _&jellium: + +&jellium +-------- + +.. _yn_jm: + +yn_jm +^^^^^ + +character, default='n' + + | Available for the DFT/TDDFT based options of ``theory``. + | Switch to use jellium model. + | Options: + | ``y``/ enable + | ``n``/ disable + | When ``yn_jm='y'``, ``&functional/xc`` must be ``'pz'``. + +.. _yn_charge_neutral_jm: + +yn_charge_neutral_jm +^^^^^^^^^^^^^^^^^^^^ + +character, default='y' + + | Available for ``yn_jm='y'`` in the DFT/TDDFT based options of ``theory``. + | Option to enforce exact charge neutrality : + | Options: + | ``y``/ enable. ``rs_bohr_jm`` is modified to fulfill exact charge neutrality. + | ``n``/ disable. ``rs_bohr_jm`` is not modified, and there may appears small charge-neutrality error. + +.. _yn_output_dns_jm: + +yn_output_dns_jm +^^^^^^^^^^^^^^^^ + +character, default='y' + + | Available for ``yn_jm='y'`` in the DFT/TDDFT based options of ``theory``. + | Switch to output positive background charge density. + | Options: + | ``y``/ enable + | ``n``/ disable + +.. _shape_file_jm: + +shape_file_jm +^^^^^^^^^^^^^ + +character, default='none' + + | Available for ``yn_jm='y'`` in the DFT/TDDFT based options of ``theory``. + | Name of input shape file that contains positive background charge density to be used in the jellium model calculations. The shape file can be generated by using ``FDTD_make_shape`` in SALMON utilities (https://salmon-tddft.jp/utilities.html). When ``shape_file_jm='none'``, the shape of the positive background charge density is specified by ``sphere_nion_jm`` and ``sphere_loc_jm`` which generate spherical shapes. + +.. _num_jm: + +num_jm +^^^^^^ + +integer, Default=0 + + | Available for ``yn_jm='y'`` in the DFT/TDDFT based options of ``theory``. + | When ``shape_file_jm`` is not 'none', ``num_jm`` specifies number of media used in the jellium model. When ``shape_file_jm='none'``, ``num_jm`` specifies number of spherical shapes. + +.. _rs_bohr_jm(:): + +rs_bohr_jm(:) +^^^^^^^^^^^^^ + +real(8), default=0d0 + + | Available for ``yn_jm='y'`` in the DFT/TDDFT based options of ``theory``. + | When ``shape_file_jm`` is not 'none', ``rs_bohr_jm(n)`` spesifies the Wigner-Seitz radius of n-th media. When ``shape_file_jm='none'``, ``rs_bohr_jm(n)`` spesifies the Wigner-Seitz radius of n-th sphere. + +.. _sphere_nelec_jm(:): + +sphere_nion_jm(:) +^^^^^^^^^^^^^^^^^^ + +integer, default=0 + + | Available for ``yn_jm='y'`` and ``shape_file_jm='none'`` in the DFT/TDDFT based options of ``theory``. ``sphere_nion_jm(n)`` spesifies ion number for n-th sphere. At present, only neutral systems can be treated. + +.. _sphere_loc_jm(:,3): + +sphere_loc_jm(:,3) +^^^^^^^^^^^^^^^^^^ + +real(8), default=0d0 + + | Available for ``yn_jm='y'`` and ``shape_file_jm='none'`` in the DFT/TDDFT based options of ``theory``. ``sphere_loc_jm(n,1:3)=x,y,z`` spesifies location of center of mass for n-th sphere. Note that the coordinate system ranges from ``-al/2`` to ``al/2`` for ``&system/yn_periodic='n'`` while ranges from ``0`` to ``al`` for ``&system/yn_periodic='y'``. + +.. _&code: + +&code +----- + +.. _yn_want_stencil_hand_vectorization: + +yn_want_stencil_hand_vectorization +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +character, default='y' + + | Switch to use hand-vectorized optimization code of stencil in the hamiltonian calculation. + | SALMON checks if the calculation can use the hand-vectorized code. If it fails, SALMON will use a typical implementation. + +.. _yn_want_communication_overlapping: + +yn_want_communication_overlapping +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +character, default='n' + + | Available for ``theory='tddft*' or '*maxwell_tddft'`` + | Switch to use computation/communication overlap algorithm to improve the performance of stencil in the hamiltonian calculation. + | SALMON checks if the calculation can use the overlap algorithm. If it fails, SALMON will uses a non-overlap algorithm. + +.. _stencil_openmp_mode: + +stencil_openmp_mode +^^^^^^^^^^^^^^^^^^^ + +character, default='auto' + + | This option selects an OpenMP parallelization mode of stencil in the hamiltonian calculation. + | Options: + | ``auto`` / SALMON decides the parallelization target automatically. + | ``orbital`` / OpenMP parallelization is applied to orbital (and k-point) loop. + | ``rgrid`` / OpenMP parallelization is applied to real-space grid loop. + +.. _current_openmp_mode: + +current_openmp_mode +^^^^^^^^^^^^^^^^^^^ + +character, default='auto' + + | This selects an OpenMP parallelization mode of the current calculation. + | Options: + | ``auto`` / SALMON decides the parallelization target automatically. + | ``orbital`` / OpenMP parallelization is applied to orbital (and k-point) loop. + | ``rgrid`` / OpenMP parallelization is applied to real-space grid loop. + +.. _force_openmp_mode: + +force_openmp_mode +^^^^^^^^^^^^^^^^^ + +character, default='auto' + + | This selects an OpenMP parallelization mode of the force calculation. + | Options: + | ``auto`` / SALMON decides the parallelization target automatically. + | ``orbital`` / OpenMP parallelization is applied to orbital (and k-point) loop. + | ``rgrid`` / OpenMP parallelization is applied to real-space grid loop. + +.. _&sbe: + +&sbe +----- + +.. _num_sbe: + +num_sbe +^^^^^^^^^^^^^^^^^ + +integer, default=1 + + | Number of materials in the Maxwell-SBE calculations. + +.. _sysname_sbe: + +sysname_sbe(:) +^^^^^^^^^^^^^^^^^ + +character, default='default' + + | System name of each material in the Maxwell-SBE calculations. The index is the media ID whose maximum value is given by ``num_sbe``. + +.. _nk_sbe: + +nk_sbe(:) +^^^^^^^^^^^^^^^^^ + +integer, default=-1 + + | Total number of k-points in each material in the Maxwell-SBE calculations. The index is the media ID whose maximum value is given by ``num_sbe``. + +.. _nstate_sbe: + +nstate_sbe(:) +^^^^^^^^^^^^^^^^^ + +integer, default=-1 + + | orbitals/bands to be calculated in each material in the Maxwell-SBE calculations. The index is the media ID whose maximum value is given by ``num_sbe``. + +.. _nelec_sbe: + +nelec_sbe(:) +^^^^^^^^^^^^^^^^^ + +integer, default=-1 + + | Number of valence electrons in each material in the Maxwell-SBE calculations. The index is the media ID whose maximum value is given by ``num_sbe``. + +.. _al_sbe: + +al_sbe(:,:) +^^^^^^^^^^^^^^^^^ + +real(8), default=0.d0 + + | Spatial box size or lattice constants for cuboid cell (x, y, z) in each material in the Maxwell-SBE calculations. The first index(1-3 rows) corresponds to *x*\ , *y*\ , and *z* axes. The second index is the media ID whose maximum value is given by ``num_sbe``. + +.. _al_vec1_sbe: + +al_vec_1_sbe(:,:) +^^^^^^^^^^^^^^^^^ + +.. _al_vec2_sbe: + +al_vec_2_sbe(:,:) +^^^^^^^^^^^^^^^^^ + +.. _al_vec3_sbe: + +al_vec_3_sbe(:,:) +^^^^^^^^^^^^^^^^^ + +integer, default=-1 + + | Primitive lattice vectors for nonorthogonal cell in each material in the Maxwell-SBE calculations. The first index(1-3 rows) corresponds to *x*\ , *y*\ , and *z* components of the lattice vectors. The second index is the media ID whose maximum value is given by ``num_sbe``. + +.. + #### Following keywords are commented out as these are originated from GCEED and supposed to be removed #### + **Following variables are moved from the isolated part. Some of them may be added to common input, be combined to it, and be removed.** + + &group_fundamental[Trial] + ------------------------- + + - **iwrite_projection** (integer, Default=0)[Trial] + | Available for ``theory='XXX'``. + A variable for projection. + + - **itwproj** (integer, Default=-1)[Trial] + | Available for ``theory='XXX'``. + The projection is calculated every ``itwproj`` time steps. + + - **iwrite_projnum** (integer, Default=0)[Trial] + | Available for ``theory='XXX'``. + There is a malfunction in this variable. + + &group_others[Trial] + --------------------- + + - **num_projection** (Interger, Default=1)[Trial] + | Available for ``theory='XXX'``. + | of orbitals for projections. + + - **iwrite_projection_ob(200)** (Interger, Default=1, 2, 3, ..., 200)[Trial] + | Available for ``theory='XXX'``. + Orbital number to be written as projections. + + - **iwrite_projection_k(200)** (Interger, Default=1)[Trial] + | Available for ``theory='XXX'``. + This variable will be removed. diff --git a/docs/en/_sources/install_and_run.rst.txt b/docs/en/_sources/install_and_run.rst.txt new file mode 100644 index 0000000..ddd099a --- /dev/null +++ b/docs/en/_sources/install_and_run.rst.txt @@ -0,0 +1,605 @@ +.. _install-and-run: + +Install and Run +================ + +Prerequisites +---------------- + +In this guide, it is assumed that readers have a basic knowledge of Linux and its command line operations. +For the installation of SALMON, following packages are required. + +- Fortran90/C compiler. SALMON assumes users have one of the following compilers: + + - GCC (Gnu Compiler Collection) + - Intel Compiler + - Fujitsu Compiler (at FX100 and A64FX) + - Nvidia HPC SDK Compiler + +- One of the following library packages for linear algebra: + + - Netlib BLAS/LAPACK/ScaLAPACK + - Intel Math Kernel Library (MKL) + - Fujitsu Scientific Subroutine Library 2 (SSL-II) + +- Build tools: + + - CMake + +If you use other compilers, you may need to change build scripts (CMake). See :any:`additional-options-in-configure`. +If no numerical library is installed on your computer system, you may need to install BLAS/LAPACK by yourself. +See :any:`troubleshooting-install`. + +For the installation of SALMON, we adopt the CMake tools as the first option. +If there were any problems to use CMake tools in your environment, you may use the GNU make tools. +See :any:`troubleshooting-install`. + +Download +----------------- + +The newest version of SALMON can be downloaded from `download page `__. +You can also get the file by:: + + $ wget http://salmon-tddft.jp/download/SALMON-.tar.gz + +To extract files from the downloaded file ``SALMON-.tar.gz``, type the following command in the command-line:: + + $ tar -zxvf ./SALMON-.tar.gz + +After the extraction, the following directories will be created:: + + SALMON + |- src Source codes + |- example Samples + |- cmakefiles CMake related files + |- gnumakefiles GNU Makefiles for building + + +Build and Install +------------------ + +To compile SALMON to create executable the binary files, we adopt to use CMake tools as the first option. +In case you fail to build SALMON using CMake in your environment, we may use Gnu Make. See :any:`build-gnu-make`. + + +Checking CMake availability +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +First, examine whether CMake is usable in your environment or not. +Type the following in Linux command-line:: + + $ cmake --version + +If CMake is not installed in your system, an error message such as ``cmake: command not found`` will appear. +If CMake is installed on your system, the version number will be shown. +To build SALMON, CMake of version 3.14.0 or later is required. +If you confirm that CMake of version 3.14.0 or later is installed in your system, proceed to :any:`build-cmake`. +However, we realize that old versions of CMake are installed in many systems. +If CMake is not installed or CMake of older versions is installed in your system, you need to install the new version by yourself. +It is a simple procedure and explained below. + + +Installation of CMake (pre-compiled binary of Linux) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +`CMake `_ is a cross-platform build tool. +The simplest way to make CMake usable in your environment is to get `the binary distribution of CMake from the download page `_. (The file name of the binary distribution will be ``cmake--.tar.gz``). In standard Linux environment, a file for the platform of Linux x86_64 will be appropriate. + +To download the file, proceed as follows: We assume that you are in the directory that you extracted files from the downloaded file of SALMON, +and that you will use the version 3.16.8. First get the URL of the download link from your browser, and use ``wget`` command in your Linux command-line:: + + $ wget https://cmake.org/files/v3.16/cmake-3.16.8-Linux-x86_64.tar.gz + +Next, unpack the archive by:: + + $ tar -zxvf cmake-3.16.8-Linux-x86_64.tar.gz + +and you will have the binary ``make-3.16.8-Linux-x86_64/bin/cmake`` in your directory. + +To make the ``cmake`` command usable in your command-line, you need to modify the environment variable ``$PATH`` so that the executable of CMake are settled inside the directory specified in your ``$PATH``. +If you use the bash shell, you need to modify the file ``~/.bashrc`` that specifies the ``$PATH`` variable. It can be done by typing the following command in your login directory:: + + $ export PATH=/cmake-3.16.8-Linux-x86_64/bin:$PATH + +and then reload the configuration by typing:: + + $ source ~/.bashrc + +See :any:`installation-cmake` describes Other way of the installation. + + +.. _build-cmake: + +Build using CMake +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Confirming that CMake of version 3.14.0 or later can be usable in your environment, proceed the following steps. +We assume that you are in the directory SALMON. + +1. Create a new temporary directory ``build`` and move to the directory:: + + $ mkdir build + $ cd build + + +2. Execute the python script ''configure.py'' and then make:: + + $ python ../configure.py --arch=ARCHITECTURE --prefix=../ + $ make + $ make install + + +In executing the python script, you need to specify ``ARCHITECTURE`` that indicates the architecture of the CPU in your computer system such as ``intel-avx``. The options of the ``ARCHITECUTRE`` are as follows: + +================== ======================================= =================== ================= +arch Detail Compiler Numerical Library +================== ======================================= =================== ================= +intel-knl Intel Knights Landing Intel Compiler Intel MKL +intel-knc Intel Knights Corner Intel Compiler Intel MKL +intel-avx Intel Processer (Ivy-, Sandy-Bridge) Intel Compiler Intel MKL +intel-avx2 Intel Processer (Haswell, Broadwell ..) Intel Compiler Intel MKL +intel-avx512 Intel Processer (Skylake-SP) Intel Compiler Intel MKL +fujitsu-fx100 FX100 Supercomputer Fujitsu Compiler SSL-II +fujitsu-a64fx-ea A64FX processor (Fugaku, FX1000, FX700) Fujitsu Compiler SSL-II +nvhpc-openmp NVHPC OpenMP (CPU) Nvidia HPC Compiler Nvidia HPC SDK +nvhpc-openacc NVHPC OpenACC (GPU) Nvidia HPC Compiler Nvidia HPC SDK +nvhpc-openacc-cuda NVHPC OpenACC+CUDA (GPU) Nvidia HPC Compiler Nvidia HPC SDK +================== ======================================= =================== ================= + +If the build is successful, you will get a file ``salmon`` at the top-level build directory. + + +Files necessary to run SALMON +------------------------------------ + +To run SALMON, at least two kinds of files are required for any calculations. +One is an input file with the filename extension ``*.inp`` that should be read from the standard input ``stdin``. +This file should be prepared in the Fortran90 namelist format. +Pseudopotential files of relevant elements are also required. +Depending on your purpose, some other files may also be necessary. +For example, coordinates of atomic positions of the target material may be either written in the input file or prepared as a separate file. + + +Pseudopotentials +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +SALMON utilizes norm-conserving (NC) pseudpotentials. +Filenames of pseudopotentials should be written in the input file. + +You may find pseudopotentials of some elements in the samples prepared in :any:`Exercises`. +In SALMON, several formats of pseudopotentials may be usable (listed below). +For example, pseudopotentials with an extension ``.fhi`` can be obtained from the ABINIT website (this is a part of previous atomic data files for the ABINIT code). + +========================================================= ============= ===================================================================================== +Pseudopotential extension Website +========================================================= ============= ===================================================================================== +Fritz-Haber-Institute (FHI) pseudopotentials ``.fhi`` https://www.abinit.org/sites/default/files/PrevAtomicData/psp-links/lda_fhi.html + (for LDA), + https://www.abinit.org/sites/default/files/PrevAtomicData/psp-links/gga_fhi.html + (for GGA) +Pseudopotentials for the OpenMX code ``.vps`` https://t-ozaki.issp.u-tokyo.ac.jp/vps_pao2019/ +Format 8 for ABINIT norm-conserving pseudopotentials ``.psp8`` https://www.abinit.org/psps_abinit , + http://www.pseudo-dojo.org/ +Unified-pseudopotential-format (NC type only in SALMON) ``.upf`` http://www.quantum-espresso.org/pseudopotentials/unified-pseudopotential-format , + http://www.pseudo-dojo.org/ +========================================================= ============= ===================================================================================== + + +input file +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Input files are composed of several blocks of namelists:: + + &namelist1 + variable1 = int_value + variable2 = 'char_value' + / + &namelist2 + variable1 = real8_value + variable2 = int_value1, int_value2, int_value3 + / + +A block of namelists starts with ``&namelist`` line and ends with ``/`` line. +The blocks may appear in any order. + +Between two lines of ``&namelist`` and ``/``, descriptions of variables and their values appear. +Note that many variables have their default values so that it is not necessary to give values for all variables. +Descriptions of the variables may appear at any position if they are between ``&namelist`` and ``/``. + +SALMON describes electron dynamics in systems with both isolated and periodic boundary conditions. +The boundary condition is specified by the variable ``iperiodic`` in the namelist ``&system``. + +Calculations are usually achieved in two steps; first, the ground state calculation is carried out and then electron dynamics calculations in real time is carried out. A choice of the calculation mode or theory in the calculation is specified by the variable ``theory`` in the namelist ``&calculation``. +In the typical way, the ground state calculation based on DFT is first carried out specifying ``theory = 'dft'``. +Then the real-time electron dynamics calculation based on TDDFT is carried out specifying ``theory = 'tddft_pulse'``. + +In :any:`Exercises`, we prepare six exercises that cover typical calculations feasible by SALMON. +We prepare explanations of the input files of the exercises that will help to prepare input files of your own interests. + +There are more than 20 groups of namelists. A complete list of namelist variables is given in the file ``SALMON/manual/input_variables.md``. +Namelist variables that are used in our exercises are explained at :any:`Inputs`. + + +Run SALMON +----------------------------------- + +Before running SALMON, the following preparations are required as described above: The executable file of ``salmon`` should be built from the source file of SALMON. An input file ``inputfile.inp`` and pseudopotential files should also be prepared. + +The execution of the calculation can be done as follows: In single process environment, type the following command:: + + $ salmon < inputfile.inp > fileout.out + +In multiprocess environment in which the command to execute parallel calculations using MPI is ``mpiexec``, type the following command:: + + $ mpiexec -n NPROC salmon < inputfile.inp > fileout.out + +where NPROC is the number of MPI processes that you will use. + +The execution command and the job submission procedure depends much on local environment. We summarize general conditions to execute SALMON: + +- SALMON runs in both single-process and multi-process environments using MPI. +- Executable file is prepared as ``salmon`` in the standard build procedure. +- To start calculations, ``inputfile.inp`` should be read through ``stdin``. + + +MPI process distribution +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +SALMON provides three variables to determine the process distribution/allocation. + +- ``nproc_k`` +- ``nproc_ob`` +- ``nproc_rgrid(3)`` + +In SALMON, the process distribution is determined automatically as default. +However, in many situations, an explicit assignment of the process distribution +will provide a better performance than the default setting. + +We recommend to distribute the processes as follows, + +If you use k-points ( the number of k-points is greater than 1) and the number of +the real-space grid (``num_rgrid``) is not very large (about 16^3): + + - First, assign many processes to ``nproc_k``. + - Then, assign the remaining processes to ``nproc_ob``. + - Not dividing the spatial grid, ``nproc_rgrid = 1, 1, 1``. + +Else: + + - First, assign the processes to ``nproc_ob``. + - Then, assign the remaining processes to ``nproc_rgrid``. + + - If real-space grid size (``num_rgrid(1:3) = al(1:3) / dl(1:3)``) is equal to or larger than about 64^3, + you should find a balanced distribution between ``nproc_rgrid`` and ``nproc_ob``. + + +.. _for_large_scale_simulation: + +Tips for large-scale calculation +----------------------------------- + +We explain below some tips that will be useful to improve performance when you carry out +large scale simulations using world top-level supercomputers. +Therefore, the following contents will only be useful only for limited users. + +Improve the performance of the eigenvalues solver +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In DFT calculations of large systems, subspace diagonalization becomes the performance bottleneck +in the entire calculation. Therefore, it is important to use a parallel eigenvalues solver. +In SALMON, a LAPACK routine without parallelization is used for the diagonalization as default. +As parallelized solvers, ScaLAPACK and EigenExa are usable. +To use them, it is necessary to rebuild SALMON enabling ScaLAPACK/EigenExa. +You can find the instruction in :any:`install-and-run`. + +To execute SALMON using ScaLAPACK/EigenExa, either ``yn_scalapack = 'y'`` or ``yn_eigenexa = 'y'`` should be +included in the inputfile:: + + ¶llel + yn_scalapack = 'y' ! use ScaLAPACK for diagonalization + !yn_eigenexa = 'y' ! use EigenExa + / + +ScaLAPACK/EigenExa solves the eigenvalue problem with ``nproc_ob`` process distribution. +If ``nproc_ob = 1``, ScaLAPACK/EigenExa will perform in the same way as the LAPACK library. + +Improve the performance of Hartree solver +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For periodic systems, a Fourier transformation is used to solve the Poisson equation (to calculate the Hartree potential). +In SALMON, a simple Fourier transformation without Fast Fourier Transformation (FFT) is used as default. +In SALMON, a parallelized FFT routine, FFTE, is usable and works efficiently for large systems. +In using FFTE, the following conditions should be satisfied:: + + num_rgrid(1) mod nproc_rgrid(2) = 0 + num_rgrid(2) mod nproc_rgrid(2) = 0 + num_rgrid(2) mod nproc_rgrid(3) = 0 + num_rgrid(3) mod nproc_rgrid(3) = 0 + + In addition, the prime factors for the number of real-space grid of each direction (num_rgrid(1:3)) must be a combination of 2, 3 or 5. + + +To use FFTE, ``yn_ffte = 'y'`` should be included in the input file:: + + ¶llel + yn_ffte = 'y' + / + +Improve IO performance (write/read wavefunction) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Almost all supercomputer systems provide distributed filesystems such as Lustre. +Distributed filesystems are equipped with a meta-data server (MDS) and an object-storage server (OST). +The OST stores real user data files, and the MDS stores the address of the user date files in the OST. +When accessing to the data files in the OST, the process send a query about the OST address to MDS. +Then, a network contention may occur in the query process. + +In most implementations of the filesystem, the MDS that replies to the query is determined by the directory structure. +For a calculation in which k-point is not used, +``method_wf_distributor`` and ``nblock_wf_distribute`` are prepared to reduce the network contention:: + + &control + method_wf_distributor = 'slice' ! every orbital function is stored as a single file. + nblock_wf_distribute = 32 ! files of 32 orbital functions are stored in one directory. + / + +Improve the communication performance for mesh-torus network system +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Large-scale supercomputers often adopt a mesh-torus network system such as Cray dragon-fly and Fujitsu Tofu to achieve +high scalability with relatively low cost. +In SALMON, a special MPI process distribution (communicator creation rule) is prepared to improve the performance +in large-scale mesh-torus network systems. + +Currently, we provide the communicator creation rule for "Supercomputer Fugaku", +which is developed by RIKEN R-CCS and Fujitsu limited. +Fugaku is equipped with a 6-D mesh-torus network which is called "Tofu-D". +Users may control it as a 3-D logical network. +SALMON utilizes 5-D array (wavefunction(x, y, z, orbital, k-point)) as a domain for parallelization. +We create a map that connects the 3-D network to the 5-D array distribution. + +We introduce the following variables and conditons to assign the 3-D mesh-torus network to the 5-D array distribution:: + + PW = nproc_ob * nproc_k + (PX, PY, PZ) = nproc_rgrid + PPN = '# of process per node' (we recommend the value 4 in Fugaku) + + Requested process shape: (PX, PY, PZ, PW) + Tofu-D network shape: (TX, TY, TZ) + Actual process shape: (TX * PPN, TY, TZ) + + if (process_allocation == 'grid_sequential'): + PW = PW1 * PW2 * PW3 + PW1 = (TX * PPN) / PX + PW2 = TY / PY + PW3 = TZ / PZ + TX = (PX * PW1) / PPN + TY = PY * PW2 + TZ = PZ * PW3 + + else if (process_allocation == 'orbital_sequential'): + PX = PX1 * PX2 * PX3 + PX1 = (TX * PPN) / PW + PX2 = TY / PY + PX3 = TZ / PZ + TX = (PW * PX1) / PPN + TY = PY * PX2 + TZ = PZ * PX3 + +From these conditions, you can determine the suitable process distribution and the Tofu-D network shape (compute node shape). +``process_allocation`` input variable controls the order of the process distribution. +It indicates which communications should be executed in closer processes. + +- ``process_allocation = 'grid_sequential'`` + + - ``(PX, PY, PZ, PW)``, ``nproc_rgrid`` major ordering + - improves ``nproc_rgrid`` related communication performance + - communicator: ``s_parallel_info::icomm_r, icomm_x, icomm_y, icomm_z, icomm_xy`` + - suitable ``theory``: ``'dft'`` and ``'dft_md'`` + +- ``process_allocation = 'orbital_sequential'`` + + - ``(PW, PY, PZ, PX)``, ``nproc_ob`` major ordering + - improves ``nproc_ob`` related communication performance + - communicator: ``s_parallel_info::icomm_o and icomm_ko`` + - suitable ``theory``: ``'tddft_response', 'tddft_pulse', 'single_scale_maxwell_tddft'`` and ``'multi_scale_maxwell_tddft'`` + + +.. _troubleshooting-install: + +Troubleshooting of the Installation Process +------------------------------------------- + +.. _installation-cmake: + +Installation of CMake +~~~~~~~~~~~~~~~~~~~~~ + +The `CMake `_ is a cross-platform build tool. In order to build the +SALMON from the source code, the CMake of version 3.14.0 or later is +required. You may install it following one of the three instructions +below. + + +Installation by package manager +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If your system has a built-in package manager, you may conveniently +install the CMake tools as below: + +**Debian/Ubuntu Linux** + +:: + + sudo apt-get install cmake + +**Fedora Linux/CentOS** + +:: + + sudo yum install cmake + +**openSUSE Linux** + +:: + + sudo zypper install cmake + + +Installation from source code +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +You can get the source code distribution from the `download page `__. In +this time, we will use the cmake version 3.16.8 as an example. Download +the archive by ``wget`` comamnd and unpack it as below: + +:: + + wget https://cmake.org/files/v3.16/cmake-3.16.8.tar.gz + tar -zxvf cmake-3.16.8.tar.gz + +And, move to the unpacked directory and build. + +:: + + + cd cmake-3.16.8 + ./configure --prefix=INSTALLATION_DIRECTORY + make + make install + +(replace ``INSTALLATION_DIRECTORY`` to your installation directory.) + +Next, to utilize the ``cmake`` command, it is required that the +executable are settled inside the directory specified in your ``$PATH``. +If you use the bash shell, edit ``~/.bashrc`` and append the line: + +:: + + export PATH=INSTALLATION_DIRECTORY/bin:$PATH + +and reload the configuration: + +:: + + source ~/.bashrc + + +Appendix +------------ + +.. _additional-options-in-configure: + +Additional options in configure.py script +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Manual specifications of compiler and environment variables +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In executing ``configure.py``, you may manually specify compiler and environment variables instead of specifying the architecture, for example:: + + $ python ../configure.py FC=mpiifort CC=mpiicc FFLAGS="-xAVX" CFLAGS="-restrict -xAVX" + +The list of options of ``configure.py`` can be found by:: + + $ python ../configure.py --help + +The major options are as follows: + +======================================= =================================================== +Commandline switch Detail +======================================= =================================================== +-a ARCH, --arch=ARCH Target architecture +--enable-mpi, --disable-mpi enable/disable MPI parallelization +--enable-scalapack, --disable-scalapack enable/disable computations with ScaLAPACK library +--enable-eigenexa, --disable-eigenexa enable/disable computations with RIKEN R-CCS EigenExa library +--enable-libxc, --disable-libxc enable/disable computations with Libxc library +--with-lapack specified LAPACK/ScaLAPACK installed directory +--with-libxc specified Libxc installed directory +--debug enable debug build +--release enable release build +FC, FFLAGS User-defined Fortran Compiler, and the compiler options +CC, CFLAGS User-defined C Compiler, and the compiler options +======================================= =================================================== + +In the build procedure by CMake, they search the following libraries. +If the libraries don't found in the path that is specified by environment variables, they will build the required libraries automatically. + +- Netlib LAPACK (includes BLAS), and ScaLAPACK + + - We will download and build the Netlib libraries as the typical implementation. + - http://www.netlib.org/lapack/ + - http://www.netlib.org/scalapack/ + +- Libxc + + - https://www.tddft.org/programs/libxc/ + +EigenExa will download and build automatically even if the library is installed to your machine. + + +Build for single process calculations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +When using the ``--arch`` option, MPI parallelization is enabled as default. +If you use a single processor machine, explicitly specify ``--disable-mpi`` in executing the python script:: + + $ python ../configure.py --arch= --disable-mpi + + +Build by user-specified compiler +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If you want that specify the compiler, set the ``FC`` and ``CC`` flags in executing the python script:: + + $ python ../configure.py FC=gfortran CC=gcc + +When ``--arch`` option is not used, MPI parallelization is disabled as default. + +.. _GPU: + +Compilation for GPU acceleration +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +GPU acceleration (OpenACC or OpenACC+CUDA) for the basic part (such as DFT & TDDFT for spin-unpolarized systems) is available. +Specify ``--arch=nvhpc-openacc`` (OpenACC) or ``--arch=nvhpc-openacc-cuda`` (OpenACC+CUDA) option when executing ``configure.py``. +This option is currently under development and tested only for NVIDIA HPC SDK compiler ver 21.2 and 21.5 with NVIDIA Tesla V100 and A100 GPUs. + +.. _FFTW: + +Compilation with FFTW library +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For solving the Poisson equation for the Hartree potential, SALMON uses the discrete Fourier transform. +FFTW library (https://www.fftw.org) is available for fast calculation. +When executing ``configure.py``, specify ``--enable-fftw`` option and linker flags for FFTW such as ``LDFLAGS="-lfftw3_mpi -lfftw3"``. + +Exapmle:: + + $ python ../configure.py --arch=ARCHITECTURE --enable-fftw LDFLAGS="-lfftw3_mpi -lfftw3" + +.. _build-gnu-make: + +Build using GNU Makefile +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If CMake build fails in your environment, we recommend you to try to use Gnu Make for the build process. +First, enter the directory ``gnumakefiles``:: + + $ cd SALMON/gnumakefiles + +In the directory, ``Makefile`` files are prepared for several architectures: + +- gnu-mpi +- intel-mpi +- gnu-without-mpi +- intel-without-mpi + +``Makefile`` files with ``*-without-mpi`` indicate that they are for single processor environment. +Choose ``Makefile`` appropriate for your environment, and execute the make command:: + + $ make -f Makefile.PLATFORM + +If the make proceeds successful, a binary file is created in the directory ``SALMON/bin/``. + + diff --git a/docs/en/_sources/introduction.rst.txt b/docs/en/_sources/introduction.rst.txt new file mode 100644 index 0000000..b48128a --- /dev/null +++ b/docs/en/_sources/introduction.rst.txt @@ -0,0 +1,188 @@ +########################### +Introduction +########################### + +Overview +----------- + +SALMON is an open-source computer program for ab-initio +quantum-mechanical calculations of electron dynamics at the nanoscale +that takes place in various situations of light-matter interactions. It +is based on time-dependent density functional theory, solving +time-dependent Kohn-Sham equation in real time and real space with +norm-conserving pseudopotentials. + +SALMON was born by unifying two scientific programs: ARTED, developed by +Univ. Tsukuba group, that describes electron dynamics in crystalline +solids, and GCEED, developed by Institute for Molecular Science group, +that describes electron dynamics in molecules and nanostructures. It can +thus describe electron dynamics in both isolated and periodic systems. +It can also describe coupled dynamics of electrons and light-wave +electromagnetic fields. + +To run the program, SALMON requires MPI Fortran/C compiller with LAPACK +libraries. SALMON has been tested and optimized to run in a number of +platforms, including Linux PC Cluster with x86-64 CPU, supercomputer +systems with Fujitsu FX100 and A64FX processors, and supercomputer system +with Intel Xeon Phi (Knights Landing). + +SALMON features +------------------- + +In the microscopic scale, SALMON describes electron dynamics in both +isolated (molecules and nanostructures) and periodic (crystalline solids) +systems, solving time-dependent Kohn-Sham equation in real time and real space +with norm-conserving pseudopotential. +SALMON first carries out ground-state calculations in the density functional theory +to prepare initial configurations. SALMON then calculates electron +dynamics induced by applied electric field. Employing a weak impulsive +external field, SALMON can be used to calculate linear response +properties such as a polarizability of molecules and a dielectric +function of crystalline solids. Using pulsed electric fields, SALMON +describes electron dynamics in matters induced by intense and ultrashort +laser pulses. + +SALMON is also capable of describing a propagation of electromagnetic fields +of light using finite-difference time-domain method. As a unique feature +of SALMON, it is possible to carry out calculations of a coupled dynamics +of light electromagnetic fields and electron dynamics simultaneously. + + +Efficient parallelizations are implemented in the code by dividing spatial +grids, orbital index, and k-points. +SALMON shows a good scalability when it runs in parallel supercomputers, +both for the ground state and the time evolution calculations. + +- Ground state calculations + + - Kohn-Sham orbitals and energies + - density of states + - projected density of states + - electron localization function + +- Optical properties + + - Oscillator strength distribution (absorption spectrum) + - dielectric function + +- Light-induced electron dynamics + + - time evolution of Kohn-Sham orbitals + - density, current + - excitation energy + - number density of excited carriers + +- Propagation of light electromagnetic fields + + - Drude-Lorentz model + - optical response of metasurfaces + +- Simultaneous description of electron dynamics and light pulse + propagation + + - light pulse propagation as well as time evolution of Kohn-Sham + orbitals + - energy transfer from pulsed light to electrons + + +License +----------- + +SALMON is available under Apache License version 2.0. + + Copyright 2017 SALMON developers + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + + +SALMON at Github +-------------------- + +SALMON is developed at `GitHub.com `__ + +List of developers +---------------------- + +(Alphabetic order) + +* Isabella Floss (TU Wien, Austria) +* Yuta Hirokawa (Prometech Software, Inc., Japan) +* Kenji Iida (Hokkaido University, Japan) +* Jun-Ichi Iwata (Advance Soft Co., Japan) +* Yuki Ito (Fixstars Corporation, Japan) +* Masashi Noda (Academeia, Japan) +* Tomohito Otobe (National Institutes for Quantum and Radiological Science and Technology, Japan) +* Shunsuke Sato (University of Tsukuba, Japan) +* Yasushi Shinohara (University of Tokyo, Japan) +* Takashi Takeuchi (University of Tsukuba, Japan) +* Mitsuharu Uemoto (Kobe University, Japan) +* Kazuhiro Yabana (University of Tsukuba, Japan) +* Atsushi Yamada (University of Tsukuba, Japan) +* Shunsuke Yamada (University of Tsukuba, Japan) + +Former developers +---------------------- + +* Kazuya Ishimura +* Kyung-Min Lee +* Katsuyuki Nobusada +* Xiao-Min Tong +* Maiku Yamaguchi + + +.. + We use sphinxcontrib-bibtex package for citing papers + https://sphinxcontrib-bibtex.readthedocs.io/en/latest/index.html + + +.. _reference: + +How to cite SALMON +-------------------- + +Suggested Citations +~~~~~~~~~~~~~~~~~~~~~ +If you publish a paper in which SALMON makes an important contribution, please cite the SALMON code paper, +Ref. :cite:`Noda2019` +published in Computer Physics Communications. + +We also suggest you to cite the following papers depending on your usage of SALMON. + +* If you use SALMON for electron dynamics calculations of a large-size system, + Ref. :cite:`Noda2014` + that discusses massively parallel implementation utilizing spatial divisions will be appropriate. + +* if you use SALMON to calculate electron dynamics in a unit cell of crystalline solid, + Ref. :cite:`Bertsch2000` + discussing formalism and numerical implementation will be appropriate. + +* Ref. :cite:`Yabana1996` + is one of the first implementations of the real-time time-dependent density functional calculation, in particular, instantaneous kick for the linear response calculations. + +* If you use multiscale calculation coupling Maxwell equations for the electromagnetic fields of light and electron dynamics, + Ref. :cite:`Yabana2012` + discussing the formalism and the numerical implementation will be appropriate. + +* Ref. :cite:`Sato2014JASSE` + describes parallelization method for the coupled Maxwell - TDDFT calculations. + +* Ref. :cite:`Hirokawa2016` + describes computational aspects of electron dynamics calculations for periodic systems in many-core processors: + + +.. bibliography:: reference.bib + :cited: + :style: unsrt + + diff --git a/docs/en/_sources/release_log.rst.txt b/docs/en/_sources/release_log.rst.txt new file mode 100644 index 0000000..04cf44c --- /dev/null +++ b/docs/en/_sources/release_log.rst.txt @@ -0,0 +1,105 @@ +########################### +Release History +########################### + +Release Notes +------------- + + +* Release note of SALMON ver. 2: + + https://github.com/SALMON-TDDFT/SALMON2/releases + +* Release note of SALMON ver. 0 and 1: + + https://github.com/SALMON-TDDFT/SALMON/releases + + +Details of Minor Changes +------------------------ + +Followings are history of fixed bugs and changes of models/inputs/outputs after releasing v.2.0.0. (not complete list currently) + +Fixed bugs +========== + +(Fixed in v.2.2.0) + +* For the incident pulse for isolated systems (``yn_periodic=’n’``), the circular polarization was not defined and the CEP for Acos2 envelope was wrong. +* For spin-unpolarized systems (``spin=‘unpolarized’``), the initial value of the occupation rate was wrong when the electron number (``nelec``) is odd. +* When ``unit_system=‘A_eV_fs’`` is specified, ``temperature`` was mistakenly defined in the atomic unit. +* For isolated systems (``yn_periodic=’n’``), the multipole expansion for the boundary conditions of the Hartree potential (Poisson equation) was wrong. +* For periodic systems (``yn_periodic=’y’``), ``al_vec[123]`` for orthogonal cells yielded unintended error. +* For spin-noncollinear systems (``spin=‘noncollinear’``), the band-decomposition of the spin magnetization in ***_mag.data files was wrong. + +(Fixed in v.2.1.0) + +* Non-local term of the transition moment printed by the option of "yn_out_tm=y" has been fixed (just printing issue). +* Parallelization for orbitals for calculation of transition moment by "yn_out_tm=y" has been suported +* Bug of the segmentation fault occurred by "yn_ffte=y" with parallelization for orbitals using isolated system has been fixed. +* Reading of CIF file format for symmetry option has been improved. +* Combination of non-uniform user-defined k-points and symmetry option has been supported. + + +(Fixed in v.2.0.2) + +* Small noise on the total energy in TDDFT calculation (that is seen with weak pulse around e.g. I=1d9 W/cm2) has been removed. +* The printed absolute values of electron density in cube format has been fixed.. +* Printing of the external field in TDDFT calculation of the isolated system has a bug in v.2.0.0 and v.2.0.1. It has been fixed in v.2.0.2. +* The file reading option of the external electric field in TDDFT calculation ("file_input1" in &emfield) has been fixed. +* Invalid occupation number printed in SYSNAME_ovlp.data file for projection option with non-uniform k-points has been fixed. + +(Fixed in v.2.0.0) + +* The imaginary part of wavefunction was not printed in cube format until v.1.2.1 + +(Fixed in v.?.?.?) + +* Abnormal calculation that sometimes happens if zero value is included in the atomic coordinate in the input with "A_eV_fs" has been fiexd. + + +Changes of models/inputs/outputs +================================ + +(v.2.2.0) + +* New theory options for SBE and Maxwell-SBE are added. + + * ``theory = 'sbe'`` + * ``theory = 'maxwell_sbe'`` + +* Input keywords for the Poisson equation solver are added. + + * ``method_poisson`` + * ``yn_fftw`` + +* New TDDFT analysis options are added. + + * ``yn_fix_func`` + * ``projection_option=‘td’`` + * ``threshold_projection`` + * ``yn_out_intraband_current`` + * ``yn_out_current_decomposed``, ``out_current_decomposed_step`` + * ``yn_out_micro_je``, ``out_micro_je_step`` + + +(v.2.1.0) + +* Input variables for Spin-orbit coupling are added + + * "yn_spinorbit" + * "spin = noncollinear" + * "out_magnetization_step" + +* New options for calculation of dielectric function and conductivity based on transition moments at the end of the GS calculation is added. The related input variables are + + * "yn_out_gs_sgm_eps" + * "out_gs_sgm_eps_mu_nu" + * "out_gs_sgm_eps_width" + + +(v.2.0.2) + +* The definition of the total energy of the periodic system printed in TDDFT calculation has changed: + The electric field energy is included until v.2.0.1. It has not been included from v.2.0.2. +* The directory names generated by "method_wf_distributor=slice" option have changed from v.2.0.2. diff --git a/docs/en/_sources/sandbox.rst.txt b/docs/en/_sources/sandbox.rst.txt new file mode 100644 index 0000000..b653d00 --- /dev/null +++ b/docs/en/_sources/sandbox.rst.txt @@ -0,0 +1,53 @@ +Sandbox +======================= + +Image +----------- + +.. image:: images/top1.png + + +List and Link +--------------------- + +* :any:`install_and_run` +* `SALMON website `_ + + +Code and syntax highlights +----------------------------- + +* Example 1:: + + subroutine func1(a) + implicit none + integer :: a + end subroutine + +* Example 2 + + .. code-block:: fortran + + subroutine func2(b) + implicit none + real(8) :: b + end subroutine + + +Table +------------------ + +====== ================ +Header Description +====== ================ +A D +B E +C F +====== ================ + + +Citation +-------------- + +- if you use SALMON to calculate electron dynamics in a unit cell of crystalline solid, :cite:`SALMON-unit-cell`: discussing formalism and numerical implementation will be appropriate. +- if you use SALMON for electron dynamics calculations of a large-size system, :cite:`SALMON-large-system`: that discusses massively parallel implementation utilizing spatial divisions will be appropriate. diff --git a/docs/en/_static/ajax-loader.gif b/docs/en/_static/ajax-loader.gif new file mode 100644 index 0000000..61faf8c Binary files /dev/null and b/docs/en/_static/ajax-loader.gif differ diff --git a/docs/en/_static/basic.css b/docs/en/_static/basic.css new file mode 100644 index 0000000..0807176 --- /dev/null +++ b/docs/en/_static/basic.css @@ -0,0 +1,676 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist td { + vertical-align: top; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +dl { + margin-bottom: 15px; +} + +dd p { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/docs/en/_static/comment-bright.png b/docs/en/_static/comment-bright.png new file mode 100644 index 0000000..15e27ed Binary files /dev/null and b/docs/en/_static/comment-bright.png differ diff --git a/docs/en/_static/comment-close.png b/docs/en/_static/comment-close.png new file mode 100644 index 0000000..4d91bcf Binary files /dev/null and b/docs/en/_static/comment-close.png differ diff --git a/docs/en/_static/comment.png b/docs/en/_static/comment.png new file mode 100644 index 0000000..dfbc0cb Binary files /dev/null and b/docs/en/_static/comment.png differ diff --git a/docs/en/_static/css/badge_only.css b/docs/en/_static/css/badge_only.css new file mode 100644 index 0000000..c718cee --- /dev/null +++ b/docs/en/_static/css/badge_only.css @@ -0,0 +1 @@ +.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} \ No newline at end of file diff --git a/docs/en/_static/css/fonts/Roboto-Slab-Bold.woff b/docs/en/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 0000000..6cb6000 Binary files /dev/null and b/docs/en/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/docs/en/_static/css/fonts/Roboto-Slab-Bold.woff2 b/docs/en/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 0000000..7059e23 Binary files /dev/null and b/docs/en/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/docs/en/_static/css/fonts/Roboto-Slab-Regular.woff b/docs/en/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 0000000..f815f63 Binary files /dev/null and b/docs/en/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/docs/en/_static/css/fonts/Roboto-Slab-Regular.woff2 b/docs/en/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 0000000..f2c76e5 Binary files /dev/null and b/docs/en/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/docs/en/_static/css/fonts/fontawesome-webfont.eot b/docs/en/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..e9f60ca Binary files /dev/null and b/docs/en/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/docs/en/_static/css/fonts/fontawesome-webfont.svg b/docs/en/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..855c845 --- /dev/null +++ b/docs/en/_static/css/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/en/_static/css/fonts/fontawesome-webfont.ttf b/docs/en/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..35acda2 Binary files /dev/null and b/docs/en/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/docs/en/_static/css/fonts/fontawesome-webfont.woff b/docs/en/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..400014a Binary files /dev/null and b/docs/en/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/docs/en/_static/css/fonts/fontawesome-webfont.woff2 b/docs/en/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..4d13fc6 Binary files /dev/null and b/docs/en/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/docs/en/_static/css/fonts/lato-bold-italic.woff b/docs/en/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 0000000..88ad05b Binary files /dev/null and b/docs/en/_static/css/fonts/lato-bold-italic.woff differ diff --git a/docs/en/_static/css/fonts/lato-bold-italic.woff2 b/docs/en/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 0000000..c4e3d80 Binary files /dev/null and b/docs/en/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/docs/en/_static/css/fonts/lato-bold.woff b/docs/en/_static/css/fonts/lato-bold.woff new file mode 100644 index 0000000..c6dff51 Binary files /dev/null and b/docs/en/_static/css/fonts/lato-bold.woff differ diff --git a/docs/en/_static/css/fonts/lato-bold.woff2 b/docs/en/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 0000000..bb19504 Binary files /dev/null and b/docs/en/_static/css/fonts/lato-bold.woff2 differ diff --git a/docs/en/_static/css/fonts/lato-normal-italic.woff b/docs/en/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 0000000..76114bc Binary files /dev/null and b/docs/en/_static/css/fonts/lato-normal-italic.woff differ diff --git a/docs/en/_static/css/fonts/lato-normal-italic.woff2 b/docs/en/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 0000000..3404f37 Binary files /dev/null and b/docs/en/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/docs/en/_static/css/fonts/lato-normal.woff b/docs/en/_static/css/fonts/lato-normal.woff new file mode 100644 index 0000000..ae1307f Binary files /dev/null and b/docs/en/_static/css/fonts/lato-normal.woff differ diff --git a/docs/en/_static/css/fonts/lato-normal.woff2 b/docs/en/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 0000000..3bf9843 Binary files /dev/null and b/docs/en/_static/css/fonts/lato-normal.woff2 differ diff --git a/docs/en/_static/css/theme.css b/docs/en/_static/css/theme.css new file mode 100644 index 0000000..19a446a --- /dev/null +++ b/docs/en/_static/css/theme.css @@ -0,0 +1,4 @@ +html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}[hidden],audio:not([controls]){display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;text-decoration:none}ins,mark{color:#000}mark{background:#ff0;font-style:italic;font-weight:700}.rst-content code,.rst-content tt,code,kbd,pre,samp{font-family:monospace,serif;_font-family:courier new,monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:after,q:before{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}dl,ol,ul{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure,form{margin:0}label{cursor:pointer}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type=button],input[type=reset],input[type=submit]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}textarea{resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none!important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{body,html,section{background:none!important}*{box-shadow:none!important;text-shadow:none!important;filter:none!important;-ms-filter:none!important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}@page{margin:.5cm}.rst-content .toctree-wrapper>p.caption,h2,h3,p{orphans:3;widows:3}.rst-content .toctree-wrapper>p.caption,h2,h3{page-break-after:avoid}}.btn,.fa:before,.icon:before,.rst-content .admonition,.rst-content .admonition-title:before,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .code-block-caption .headerlink:before,.rst-content .danger,.rst-content .eqno .headerlink:before,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-alert,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before,input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week],select,textarea{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713);src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix&v=4.7.0) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#fontawesomeregular) format("svg");font-weight:400;font-style:normal}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14286em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14286em;width:2.14286em;top:.14286em;text-align:center}.fa-li.fa-lg{left:-1.85714em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa-pull-left.icon,.fa.fa-pull-left,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content .eqno .fa-pull-left.headerlink,.rst-content .fa-pull-left.admonition-title,.rst-content code.download span.fa-pull-left:first-child,.rst-content dl dt .fa-pull-left.headerlink,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content p .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.wy-menu-vertical li.current>a button.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-left.toctree-expand,.wy-menu-vertical li button.fa-pull-left.toctree-expand{margin-right:.3em}.fa-pull-right.icon,.fa.fa-pull-right,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content .eqno .fa-pull-right.headerlink,.rst-content .fa-pull-right.admonition-title,.rst-content code.download span.fa-pull-right:first-child,.rst-content dl dt .fa-pull-right.headerlink,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content p .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.wy-menu-vertical li.current>a button.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a button.fa-pull-right.toctree-expand,.wy-menu-vertical li button.fa-pull-right.toctree-expand{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.pull-left.icon,.rst-content .code-block-caption .pull-left.headerlink,.rst-content .eqno .pull-left.headerlink,.rst-content .pull-left.admonition-title,.rst-content code.download span.pull-left:first-child,.rst-content dl dt .pull-left.headerlink,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content p .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.wy-menu-vertical li.current>a button.pull-left.toctree-expand,.wy-menu-vertical li.on a button.pull-left.toctree-expand,.wy-menu-vertical li button.pull-left.toctree-expand{margin-right:.3em}.fa.pull-right,.pull-right.icon,.rst-content .code-block-caption .pull-right.headerlink,.rst-content .eqno .pull-right.headerlink,.rst-content .pull-right.admonition-title,.rst-content code.download span.pull-right:first-child,.rst-content dl dt .pull-right.headerlink,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content p .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.wy-menu-vertical li.current>a button.pull-right.toctree-expand,.wy-menu-vertical li.on a button.pull-right.toctree-expand,.wy-menu-vertical li button.pull-right.toctree-expand{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);-ms-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scaleY(-1);-ms-transform:scaleY(-1);transform:scaleY(-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-close:before,.fa-remove:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-cog:before,.fa-gear:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-repeat:before,.fa-rotate-right:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.rst-content .admonition-title:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-exclamation-triangle:before,.fa-warning:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-cogs:before,.fa-gears:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-floppy-o:before,.fa-save:before{content:""}.fa-square:before{content:""}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.icon-caret-down:before,.wy-dropdown .caret:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-sort:before,.fa-unsorted:before{content:""}.fa-sort-desc:before,.fa-sort-down:before{content:""}.fa-sort-asc:before,.fa-sort-up:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-gavel:before,.fa-legal:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-bolt:before,.fa-flash:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-clipboard:before,.fa-paste:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-chain-broken:before,.fa-unlink:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:""}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:""}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:""}.fa-eur:before,.fa-euro:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-inr:before,.fa-rupee:before{content:""}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:""}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:""}.fa-krw:before,.fa-won:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-try:before,.fa-turkish-lira:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li button.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-bank:before,.fa-institution:before,.fa-university:before{content:""}.fa-graduation-cap:before,.fa-mortar-board:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:""}.fa-file-archive-o:before,.fa-file-zip-o:before{content:""}.fa-file-audio-o:before,.fa-file-sound-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:""}.fa-empire:before,.fa-ge:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-paper-plane:before,.fa-send:before{content:""}.fa-paper-plane-o:before,.fa-send-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-bed:before,.fa-hotel:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-y-combinator:before,.fa-yc:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-television:before,.fa-tv:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:""}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-sign-language:before,.fa-signing:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-address-card:before,.fa-vcard:before{content:""}.fa-address-card-o:before,.fa-vcard-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.icon,.rst-content .admonition-title,.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content code.download span:first-child,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li button.toctree-expand{font-family:inherit}.fa:before,.icon:before,.rst-content .admonition-title:before,.rst-content .code-block-caption .headerlink:before,.rst-content .eqno .headerlink:before,.rst-content code.download span:first-child:before,.rst-content dl dt .headerlink:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content p .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-menu-vertical li.current>a button.toctree-expand:before,.wy-menu-vertical li.on a button.toctree-expand:before,.wy-menu-vertical li button.toctree-expand:before{font-family:FontAwesome;display:inline-block;font-style:normal;font-weight:400;line-height:1;text-decoration:inherit}.rst-content .code-block-caption a .headerlink,.rst-content .eqno a .headerlink,.rst-content a .admonition-title,.rst-content code.download a span:first-child,.rst-content dl dt a .headerlink,.rst-content h1 a .headerlink,.rst-content h2 a .headerlink,.rst-content h3 a .headerlink,.rst-content h4 a .headerlink,.rst-content h5 a .headerlink,.rst-content h6 a .headerlink,.rst-content p.caption a .headerlink,.rst-content p a .headerlink,.rst-content table>caption a .headerlink,.rst-content tt.download a span:first-child,.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand,.wy-menu-vertical li a button.toctree-expand,a .fa,a .icon,a .rst-content .admonition-title,a .rst-content .code-block-caption .headerlink,a .rst-content .eqno .headerlink,a .rst-content code.download span:first-child,a .rst-content dl dt .headerlink,a .rst-content h1 .headerlink,a .rst-content h2 .headerlink,a .rst-content h3 .headerlink,a .rst-content h4 .headerlink,a .rst-content h5 .headerlink,a .rst-content h6 .headerlink,a .rst-content p.caption .headerlink,a .rst-content p .headerlink,a .rst-content table>caption .headerlink,a .rst-content tt.download span:first-child,a .wy-menu-vertical li button.toctree-expand{display:inline-block;text-decoration:inherit}.btn .fa,.btn .icon,.btn .rst-content .admonition-title,.btn .rst-content .code-block-caption .headerlink,.btn .rst-content .eqno .headerlink,.btn .rst-content code.download span:first-child,.btn .rst-content dl dt .headerlink,.btn .rst-content h1 .headerlink,.btn .rst-content h2 .headerlink,.btn .rst-content h3 .headerlink,.btn .rst-content h4 .headerlink,.btn .rst-content h5 .headerlink,.btn .rst-content h6 .headerlink,.btn .rst-content p .headerlink,.btn .rst-content table>caption .headerlink,.btn .rst-content tt.download span:first-child,.btn .wy-menu-vertical li.current>a button.toctree-expand,.btn .wy-menu-vertical li.on a button.toctree-expand,.btn .wy-menu-vertical li button.toctree-expand,.nav .fa,.nav .icon,.nav .rst-content .admonition-title,.nav .rst-content .code-block-caption .headerlink,.nav .rst-content .eqno .headerlink,.nav .rst-content code.download span:first-child,.nav .rst-content dl dt .headerlink,.nav .rst-content h1 .headerlink,.nav .rst-content h2 .headerlink,.nav .rst-content h3 .headerlink,.nav .rst-content h4 .headerlink,.nav .rst-content h5 .headerlink,.nav .rst-content h6 .headerlink,.nav .rst-content p .headerlink,.nav .rst-content table>caption .headerlink,.nav .rst-content tt.download span:first-child,.nav .wy-menu-vertical li.current>a button.toctree-expand,.nav .wy-menu-vertical li.on a button.toctree-expand,.nav .wy-menu-vertical li button.toctree-expand,.rst-content .btn .admonition-title,.rst-content .code-block-caption .btn .headerlink,.rst-content .code-block-caption .nav .headerlink,.rst-content .eqno .btn .headerlink,.rst-content .eqno .nav .headerlink,.rst-content .nav .admonition-title,.rst-content code.download .btn span:first-child,.rst-content code.download .nav span:first-child,.rst-content dl dt .btn .headerlink,.rst-content dl dt .nav .headerlink,.rst-content h1 .btn .headerlink,.rst-content h1 .nav .headerlink,.rst-content h2 .btn .headerlink,.rst-content h2 .nav .headerlink,.rst-content h3 .btn .headerlink,.rst-content h3 .nav .headerlink,.rst-content h4 .btn .headerlink,.rst-content h4 .nav .headerlink,.rst-content h5 .btn .headerlink,.rst-content h5 .nav .headerlink,.rst-content h6 .btn .headerlink,.rst-content h6 .nav .headerlink,.rst-content p .btn .headerlink,.rst-content p .nav .headerlink,.rst-content table>caption .btn .headerlink,.rst-content table>caption .nav .headerlink,.rst-content tt.download .btn span:first-child,.rst-content tt.download .nav span:first-child,.wy-menu-vertical li .btn button.toctree-expand,.wy-menu-vertical li.current>a .btn button.toctree-expand,.wy-menu-vertical li.current>a .nav button.toctree-expand,.wy-menu-vertical li .nav button.toctree-expand,.wy-menu-vertical li.on a .btn button.toctree-expand,.wy-menu-vertical li.on a .nav button.toctree-expand{display:inline}.btn .fa-large.icon,.btn .fa.fa-large,.btn .rst-content .code-block-caption .fa-large.headerlink,.btn .rst-content .eqno .fa-large.headerlink,.btn .rst-content .fa-large.admonition-title,.btn .rst-content code.download span.fa-large:first-child,.btn .rst-content dl dt .fa-large.headerlink,.btn .rst-content h1 .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.btn .rst-content p .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.btn .wy-menu-vertical li button.fa-large.toctree-expand,.nav .fa-large.icon,.nav .fa.fa-large,.nav .rst-content .code-block-caption .fa-large.headerlink,.nav .rst-content .eqno .fa-large.headerlink,.nav .rst-content .fa-large.admonition-title,.nav .rst-content code.download span.fa-large:first-child,.nav .rst-content dl dt .fa-large.headerlink,.nav .rst-content h1 .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.nav .rst-content p .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.nav .wy-menu-vertical li button.fa-large.toctree-expand,.rst-content .btn .fa-large.admonition-title,.rst-content .code-block-caption .btn .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.rst-content .eqno .btn .fa-large.headerlink,.rst-content .eqno .nav .fa-large.headerlink,.rst-content .nav .fa-large.admonition-title,.rst-content code.download .btn span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.rst-content dl dt .btn .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.rst-content p .btn .fa-large.headerlink,.rst-content p .nav .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.rst-content tt.download .btn span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.wy-menu-vertical li .btn button.fa-large.toctree-expand,.wy-menu-vertical li .nav button.fa-large.toctree-expand{line-height:.9em}.btn .fa-spin.icon,.btn .fa.fa-spin,.btn .rst-content .code-block-caption .fa-spin.headerlink,.btn .rst-content .eqno .fa-spin.headerlink,.btn .rst-content .fa-spin.admonition-title,.btn .rst-content code.download span.fa-spin:first-child,.btn .rst-content dl dt .fa-spin.headerlink,.btn .rst-content h1 .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.btn .rst-content p .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.btn .wy-menu-vertical li button.fa-spin.toctree-expand,.nav .fa-spin.icon,.nav .fa.fa-spin,.nav .rst-content .code-block-caption .fa-spin.headerlink,.nav .rst-content .eqno .fa-spin.headerlink,.nav .rst-content .fa-spin.admonition-title,.nav .rst-content code.download span.fa-spin:first-child,.nav .rst-content dl dt .fa-spin.headerlink,.nav .rst-content h1 .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.nav .rst-content p .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.nav .wy-menu-vertical li button.fa-spin.toctree-expand,.rst-content .btn .fa-spin.admonition-title,.rst-content .code-block-caption .btn .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.rst-content .eqno .btn .fa-spin.headerlink,.rst-content .eqno .nav .fa-spin.headerlink,.rst-content .nav .fa-spin.admonition-title,.rst-content code.download .btn span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.rst-content dl dt .btn .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.rst-content p .btn .fa-spin.headerlink,.rst-content p .nav .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.rst-content tt.download .btn span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.wy-menu-vertical li .btn button.fa-spin.toctree-expand,.wy-menu-vertical li .nav button.fa-spin.toctree-expand{display:inline-block}.btn.fa:before,.btn.icon:before,.rst-content .btn.admonition-title:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content .eqno .btn.headerlink:before,.rst-content code.download span.btn:first-child:before,.rst-content dl dt .btn.headerlink:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content p .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.wy-menu-vertical li button.btn.toctree-expand:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.btn.icon:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content .eqno .btn.headerlink:hover:before,.rst-content code.download span.btn:first-child:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content p .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.wy-menu-vertical li button.btn.toctree-expand:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .icon:before,.btn-mini .rst-content .admonition-title:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.btn-mini .rst-content .eqno .headerlink:before,.btn-mini .rst-content code.download span:first-child:before,.btn-mini .rst-content dl dt .headerlink:before,.btn-mini .rst-content h1 .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.btn-mini .rst-content p .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.btn-mini .wy-menu-vertical li button.toctree-expand:before,.rst-content .btn-mini .admonition-title:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.rst-content .eqno .btn-mini .headerlink:before,.rst-content code.download .btn-mini span:first-child:before,.rst-content dl dt .btn-mini .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.rst-content p .btn-mini .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.rst-content tt.download .btn-mini span:first-child:before,.wy-menu-vertical li .btn-mini button.toctree-expand:before{font-size:14px;vertical-align:-15%}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning,.wy-alert{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.rst-content .admonition-title,.wy-alert-title{font-weight:700;display:block;color:#fff;background:#6ab0de;padding:6px 12px;margin:-12px -12px 12px}.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.admonition,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.wy-alert.wy-alert-danger{background:#fdf3f2}.rst-content .danger .admonition-title,.rst-content .danger .wy-alert-title,.rst-content .error .admonition-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .admonition-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.wy-alert.wy-alert-danger .wy-alert-title{background:#f29f97}.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .warning,.rst-content .wy-alert-warning.admonition,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.note,.rst-content .wy-alert-warning.seealso,.rst-content .wy-alert-warning.tip,.wy-alert.wy-alert-warning{background:#ffedcc}.rst-content .admonition-todo .admonition-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .attention .admonition-title,.rst-content .attention .wy-alert-title,.rst-content .caution .admonition-title,.rst-content .caution .wy-alert-title,.rst-content .warning .admonition-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.admonition .admonition-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.wy-alert.wy-alert-warning .wy-alert-title{background:#f0b37e}.rst-content .note,.rst-content .seealso,.rst-content .wy-alert-info.admonition,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.wy-alert.wy-alert-info{background:#e7f2fa}.rst-content .note .admonition-title,.rst-content .note .wy-alert-title,.rst-content .seealso .admonition-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .admonition-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.wy-alert.wy-alert-info .wy-alert-title{background:#6ab0de}.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.admonition,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.warning,.wy-alert.wy-alert-success{background:#dbfaf4}.rst-content .hint .admonition-title,.rst-content .hint .wy-alert-title,.rst-content .important .admonition-title,.rst-content .important .wy-alert-title,.rst-content .tip .admonition-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .admonition-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.wy-alert.wy-alert-success .wy-alert-title{background:#1abc9c}.rst-content .wy-alert-neutral.admonition,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.wy-alert.wy-alert-neutral{background:#f3f6f6}.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .admonition-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.wy-alert.wy-alert-neutral .wy-alert-title{color:#404040;background:#e1e4e5}.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.wy-alert.wy-alert-neutral a{color:#2980b9}.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .note p:last-child,.rst-content .seealso p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.wy-alert p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27ae60}.wy-tray-container li.wy-tray-item-info{background:#2980b9}.wy-tray-container li.wy-tray-item-warning{background:#e67e22}.wy-tray-container li.wy-tray-item-danger{background:#e74c3c}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width:768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px;color:#fff;border:1px solid rgba(0,0,0,.1);background-color:#27ae60;text-decoration:none;font-weight:400;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 2px -1px hsla(0,0%,100%,.5),inset 0 -2px 0 0 rgba(0,0,0,.1);outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:inset 0 -1px 0 0 rgba(0,0,0,.05),inset 0 2px 0 0 rgba(0,0,0,.1);padding:8px 12px 6px}.btn:visited{color:#fff}.btn-disabled,.btn-disabled:active,.btn-disabled:focus,.btn-disabled:hover,.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980b9!important}.btn-info:hover{background-color:#2e8ece!important}.btn-neutral{background-color:#f3f6f6!important;color:#404040!important}.btn-neutral:hover{background-color:#e5ebeb!important;color:#404040}.btn-neutral:visited{color:#404040!important}.btn-success{background-color:#27ae60!important}.btn-success:hover{background-color:#295!important}.btn-danger{background-color:#e74c3c!important}.btn-danger:hover{background-color:#ea6153!important}.btn-warning{background-color:#e67e22!important}.btn-warning:hover{background-color:#e98b39!important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f!important}.btn-link{background-color:transparent!important;color:#2980b9;box-shadow:none;border-color:transparent!important}.btn-link:active,.btn-link:hover{background-color:transparent!important;color:#409ad5!important;box-shadow:none}.btn-link:visited{color:#9b59b6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:after,.wy-btn-group:before{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:1px solid #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980b9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:1px solid #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type=search]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980b9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned .wy-help-inline,.wy-form-aligned input,.wy-form-aligned label,.wy-form-aligned select,.wy-form-aligned textarea{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{margin:0}fieldset,legend{border:0;padding:0}legend{width:100%;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label,legend{display:block}label{margin:0 0 .3125em;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;max-width:1200px;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:after,.wy-control-group:before{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#e74c3c}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full input[type=color],.wy-control-group .wy-form-full input[type=date],.wy-control-group .wy-form-full input[type=datetime-local],.wy-control-group .wy-form-full input[type=datetime],.wy-control-group .wy-form-full input[type=email],.wy-control-group .wy-form-full input[type=month],.wy-control-group .wy-form-full input[type=number],.wy-control-group .wy-form-full input[type=password],.wy-control-group .wy-form-full input[type=search],.wy-control-group .wy-form-full input[type=tel],.wy-control-group .wy-form-full input[type=text],.wy-control-group .wy-form-full input[type=time],.wy-control-group .wy-form-full input[type=url],.wy-control-group .wy-form-full input[type=week],.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves input[type=color],.wy-control-group .wy-form-halves input[type=date],.wy-control-group .wy-form-halves input[type=datetime-local],.wy-control-group .wy-form-halves input[type=datetime],.wy-control-group .wy-form-halves input[type=email],.wy-control-group .wy-form-halves input[type=month],.wy-control-group .wy-form-halves input[type=number],.wy-control-group .wy-form-halves input[type=password],.wy-control-group .wy-form-halves input[type=search],.wy-control-group .wy-form-halves input[type=tel],.wy-control-group .wy-form-halves input[type=text],.wy-control-group .wy-form-halves input[type=time],.wy-control-group .wy-form-halves input[type=url],.wy-control-group .wy-form-halves input[type=week],.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds input[type=color],.wy-control-group .wy-form-thirds input[type=date],.wy-control-group .wy-form-thirds input[type=datetime-local],.wy-control-group .wy-form-thirds input[type=datetime],.wy-control-group .wy-form-thirds input[type=email],.wy-control-group .wy-form-thirds input[type=month],.wy-control-group .wy-form-thirds input[type=number],.wy-control-group .wy-form-thirds input[type=password],.wy-control-group .wy-form-thirds input[type=search],.wy-control-group .wy-form-thirds input[type=tel],.wy-control-group .wy-form-thirds input[type=text],.wy-control-group .wy-form-thirds input[type=time],.wy-control-group .wy-form-thirds input[type=url],.wy-control-group .wy-form-thirds input[type=week],.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full{float:left;display:block;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.35765%;width:48.82117%}.wy-control-group .wy-form-halves:last-child,.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(odd){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.35765%;width:31.76157%}.wy-control-group .wy-form-thirds:last-child,.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control,.wy-control-no-input{margin:6px 0 0;font-size:90%}.wy-control-no-input{display:inline-block}.wy-control-group.fluid-input input[type=color],.wy-control-group.fluid-input input[type=date],.wy-control-group.fluid-input input[type=datetime-local],.wy-control-group.fluid-input input[type=datetime],.wy-control-group.fluid-input input[type=email],.wy-control-group.fluid-input input[type=month],.wy-control-group.fluid-input input[type=number],.wy-control-group.fluid-input input[type=password],.wy-control-group.fluid-input input[type=search],.wy-control-group.fluid-input input[type=tel],.wy-control-group.fluid-input input[type=text],.wy-control-group.fluid-input input[type=time],.wy-control-group.fluid-input input[type=url],.wy-control-group.fluid-input input[type=week]{width:100%}.wy-form-message-inline{padding-left:.3em;color:#666;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;*overflow:visible}input[type=color],input[type=date],input[type=datetime-local],input[type=datetime],input[type=email],input[type=month],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],input[type=week]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type=datetime-local]{padding:.34375em .625em}input[disabled]{cursor:default}input[type=checkbox],input[type=radio]{padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type=checkbox],input[type=radio],input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}input[type=color]:focus,input[type=date]:focus,input[type=datetime-local]:focus,input[type=datetime]:focus,input[type=email]:focus,input[type=month]:focus,input[type=number]:focus,input[type=password]:focus,input[type=search]:focus,input[type=tel]:focus,input[type=text]:focus,input[type=time]:focus,input[type=url]:focus,input[type=week]:focus{outline:0;outline:thin dotted\9;border-color:#333}input.no-focus:focus{border-color:#ccc!important}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:thin dotted #333;outline:1px auto #129fea}input[type=color][disabled],input[type=date][disabled],input[type=datetime-local][disabled],input[type=datetime][disabled],input[type=email][disabled],input[type=month][disabled],input[type=number][disabled],input[type=password][disabled],input[type=search][disabled],input[type=tel][disabled],input[type=text][disabled],input[type=time][disabled],input[type=url][disabled],input[type=week][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,select:focus:invalid,textarea:focus:invalid{color:#e74c3c;border:1px solid #e74c3c}input:focus:invalid:focus,select:focus:invalid:focus,textarea:focus:invalid:focus{border-color:#e74c3c}input[type=checkbox]:focus:invalid:focus,input[type=file]:focus:invalid:focus,input[type=radio]:focus:invalid:focus{outline-color:#e74c3c}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}input[readonly],select[disabled],select[readonly],textarea[disabled],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type=checkbox][disabled],input[type=radio][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:1px solid #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{left:0;top:0;width:36px;height:12px;background:#ccc}.wy-switch:after,.wy-switch:before{position:absolute;content:"";display:block;border-radius:4px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{width:18px;height:18px;background:#999;left:-3px;top:-3px}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27ae60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#e74c3c}.wy-control-group.wy-control-group-error input[type=color],.wy-control-group.wy-control-group-error input[type=date],.wy-control-group.wy-control-group-error input[type=datetime-local],.wy-control-group.wy-control-group-error input[type=datetime],.wy-control-group.wy-control-group-error input[type=email],.wy-control-group.wy-control-group-error input[type=month],.wy-control-group.wy-control-group-error input[type=number],.wy-control-group.wy-control-group-error input[type=password],.wy-control-group.wy-control-group-error input[type=search],.wy-control-group.wy-control-group-error input[type=tel],.wy-control-group.wy-control-group-error input[type=text],.wy-control-group.wy-control-group-error input[type=time],.wy-control-group.wy-control-group-error input[type=url],.wy-control-group.wy-control-group-error input[type=week],.wy-control-group.wy-control-group-error textarea{border:1px solid #e74c3c}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27ae60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#e74c3c}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#e67e22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980b9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width:480px){.wy-form button[type=submit]{margin:.7em 0 0}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=text],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week],.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type=color],.wy-form input[type=date],.wy-form input[type=datetime-local],.wy-form input[type=datetime],.wy-form input[type=email],.wy-form input[type=month],.wy-form input[type=number],.wy-form input[type=password],.wy-form input[type=search],.wy-form input[type=tel],.wy-form input[type=time],.wy-form input[type=url],.wy-form input[type=week]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0}.wy-form-message,.wy-form-message-inline,.wy-form .wy-help-inline{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width:768px){.tablet-hide{display:none}}@media screen and (max-width:480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.rst-content table.docutils,.rst-content table.field-list,.wy-table{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.rst-content table.docutils caption,.rst-content table.field-list caption,.wy-table caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.rst-content table.docutils td,.rst-content table.docutils th,.rst-content table.field-list td,.rst-content table.field-list th,.wy-table td,.wy-table th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.rst-content table.docutils td:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list td:first-child,.rst-content table.field-list th:first-child,.wy-table td:first-child,.wy-table th:first-child{border-left-width:0}.rst-content table.docutils thead,.rst-content table.field-list thead,.wy-table thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.rst-content table.docutils thead th,.rst-content table.field-list thead th,.wy-table thead th{font-weight:700;border-bottom:2px solid #e1e4e5}.rst-content table.docutils td,.rst-content table.field-list td,.wy-table td{background-color:transparent;vertical-align:middle}.rst-content table.docutils td p,.rst-content table.field-list td p,.wy-table td p{line-height:18px}.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child,.wy-table td p:last-child{margin-bottom:0}.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min,.wy-table .wy-table-cell-min{width:1%;padding-right:0}.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:grey;font-size:90%}.wy-table-tertiary{color:grey;font-size:80%}.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td,.wy-table-backed,.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td{background-color:#f3f6f6}.rst-content table.docutils,.wy-table-bordered-all{border:1px solid #e1e4e5}.rst-content table.docutils td,.wy-table-bordered-all td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.rst-content table.docutils tbody>tr:last-child td,.wy-table-bordered-all tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0!important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980b9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9b59b6}html{height:100%}body,html{overflow-x:hidden}body{font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;font-weight:400;color:#404040;min-height:100%;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#e67e22!important}a.wy-text-warning:hover{color:#eb9950!important}.wy-text-info{color:#2980b9!important}a.wy-text-info:hover{color:#409ad5!important}.wy-text-success{color:#27ae60!important}a.wy-text-success:hover{color:#36d278!important}.wy-text-danger{color:#e74c3c!important}a.wy-text-danger:hover{color:#ed7669!important}.wy-text-neutral{color:#404040!important}a.wy-text-neutral:hover{color:#595959!important}.rst-content .toctree-wrapper>p.caption,h1,h2,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif}p{line-height:24px;font-size:16px;margin:0 0 24px}h1{font-size:175%}.rst-content .toctree-wrapper>p.caption,h2{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}.rst-content code,.rst-content tt,code{white-space:nowrap;max-width:100%;background:#fff;border:1px solid #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#e74c3c;overflow-x:auto}.rst-content tt.code-large,code.code-large{font-size:90%}.rst-content .section ul,.rst-content .toctree-wrapper ul,.rst-content section ul,.wy-plain-list-disc,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.rst-content .section ul li,.rst-content .toctree-wrapper ul li,.rst-content section ul li,.wy-plain-list-disc li,article ul li{list-style:disc;margin-left:24px}.rst-content .section ul li p:last-child,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li p:last-child,.rst-content .toctree-wrapper ul li ul,.rst-content section ul li p:last-child,.rst-content section ul li ul,.wy-plain-list-disc li p:last-child,.wy-plain-list-disc li ul,article ul li p:last-child,article ul li ul{margin-bottom:0}.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,.rst-content section ul li li,.wy-plain-list-disc li li,article ul li li{list-style:circle}.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,.rst-content section ul li li li,.wy-plain-list-disc li li li,article ul li li li{list-style:square}.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,.rst-content section ul li ol li,.wy-plain-list-disc li ol li,article ul li ol li{list-style:decimal}.rst-content .section ol,.rst-content .section ol.arabic,.rst-content .toctree-wrapper ol,.rst-content .toctree-wrapper ol.arabic,.rst-content section ol,.rst-content section ol.arabic,.wy-plain-list-decimal,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.rst-content .section ol.arabic li,.rst-content .section ol li,.rst-content .toctree-wrapper ol.arabic li,.rst-content .toctree-wrapper ol li,.rst-content section ol.arabic li,.rst-content section ol li,.wy-plain-list-decimal li,article ol li{list-style:decimal;margin-left:24px}.rst-content .section ol.arabic li ul,.rst-content .section ol li p:last-child,.rst-content .section ol li ul,.rst-content .toctree-wrapper ol.arabic li ul,.rst-content .toctree-wrapper ol li p:last-child,.rst-content .toctree-wrapper ol li ul,.rst-content section ol.arabic li ul,.rst-content section ol li p:last-child,.rst-content section ol li ul,.wy-plain-list-decimal li p:last-child,.wy-plain-list-decimal li ul,article ol li p:last-child,article ol li ul{margin-bottom:0}.rst-content .section ol.arabic li ul li,.rst-content .section ol li ul li,.rst-content .toctree-wrapper ol.arabic li ul li,.rst-content .toctree-wrapper ol li ul li,.rst-content section ol.arabic li ul li,.rst-content section ol li ul li,.wy-plain-list-decimal li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:after,.wy-breadcrumbs:before{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs>li{display:inline-block;padding-top:5px}.wy-breadcrumbs>li.wy-breadcrumbs-aside{float:right}.rst-content .wy-breadcrumbs>li code,.rst-content .wy-breadcrumbs>li tt,.wy-breadcrumbs>li .rst-content tt,.wy-breadcrumbs>li code{all:inherit;color:inherit}.breadcrumb-item:before{content:"/";color:#bbb;font-size:13px;padding:0 6px 0 3px}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width:480px){.wy-breadcrumbs-extra,.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:after,.wy-menu-horiz:before{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz li,.wy-menu-horiz ul{display:inline-block}.wy-menu-horiz li:hover{background:hsla(0,0%,100%,.1)}.wy-menu-horiz li.divide-left{border-left:1px solid #404040}.wy-menu-horiz li.divide-right{border-right:1px solid #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#55a5d9;height:32px;line-height:32px;padding:0 1.618em;margin:12px 0 0;display:block;font-weight:700;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:1px solid #404040}.wy-menu-vertical li.divide-bottom{border-bottom:1px solid #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:grey;border-right:1px solid #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.rst-content .wy-menu-vertical li tt,.wy-menu-vertical li .rst-content tt,.wy-menu-vertical li code{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li button.toctree-expand{display:block;float:left;margin-left:-1.2em;line-height:18px;color:#4d4d4d;border:none;background:none;padding:0}.wy-menu-vertical li.current>a,.wy-menu-vertical li.on a{color:#404040;font-weight:700;position:relative;background:#fcfcfc;border:none;padding:.4045em 1.618em}.wy-menu-vertical li.current>a:hover,.wy-menu-vertical li.on a:hover{background:#fcfcfc}.wy-menu-vertical li.current>a:hover button.toctree-expand,.wy-menu-vertical li.on a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.current>a button.toctree-expand,.wy-menu-vertical li.on a button.toctree-expand{display:block;line-height:18px;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:1px solid #c9c9c9;border-top:1px solid #c9c9c9}.wy-menu-vertical .toctree-l1.current .toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .toctree-l11>ul{display:none}.wy-menu-vertical .toctree-l1.current .current.toctree-l2>ul,.wy-menu-vertical .toctree-l2.current .current.toctree-l3>ul,.wy-menu-vertical .toctree-l3.current .current.toctree-l4>ul,.wy-menu-vertical .toctree-l4.current .current.toctree-l5>ul,.wy-menu-vertical .toctree-l5.current .current.toctree-l6>ul,.wy-menu-vertical .toctree-l6.current .current.toctree-l7>ul,.wy-menu-vertical .toctree-l7.current .current.toctree-l8>ul,.wy-menu-vertical .toctree-l8.current .current.toctree-l9>ul,.wy-menu-vertical .toctree-l9.current .current.toctree-l10>ul,.wy-menu-vertical .toctree-l10.current .current.toctree-l11>ul{display:block}.wy-menu-vertical li.toctree-l3,.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a,.wy-menu-vertical li.toctree-l5 a,.wy-menu-vertical li.toctree-l6 a,.wy-menu-vertical li.toctree-l7 a,.wy-menu-vertical li.toctree-l8 a,.wy-menu-vertical li.toctree-l9 a,.wy-menu-vertical li.toctree-l10 a{color:#404040}.wy-menu-vertical li.toctree-l2 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l3 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l4 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l5 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l6 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l7 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l8 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l9 a:hover button.toctree-expand,.wy-menu-vertical li.toctree-l10 a:hover button.toctree-expand{color:grey}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a,.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a,.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a,.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a,.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a,.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a,.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a,.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{display:block}.wy-menu-vertical li.toctree-l2.current>a{padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{padding:.4045em 1.618em .4045em 4.045em}.wy-menu-vertical li.toctree-l3.current>a{padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{padding:.4045em 1.618em .4045em 5.663em}.wy-menu-vertical li.toctree-l4.current>a{padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l4.current li.toctree-l5>a{padding:.4045em 1.618em .4045em 7.281em}.wy-menu-vertical li.toctree-l5.current>a{padding:.4045em 7.281em}.wy-menu-vertical li.toctree-l5.current li.toctree-l6>a{padding:.4045em 1.618em .4045em 8.899em}.wy-menu-vertical li.toctree-l6.current>a{padding:.4045em 8.899em}.wy-menu-vertical li.toctree-l6.current li.toctree-l7>a{padding:.4045em 1.618em .4045em 10.517em}.wy-menu-vertical li.toctree-l7.current>a{padding:.4045em 10.517em}.wy-menu-vertical li.toctree-l7.current li.toctree-l8>a{padding:.4045em 1.618em .4045em 12.135em}.wy-menu-vertical li.toctree-l8.current>a{padding:.4045em 12.135em}.wy-menu-vertical li.toctree-l8.current li.toctree-l9>a{padding:.4045em 1.618em .4045em 13.753em}.wy-menu-vertical li.toctree-l9.current>a{padding:.4045em 13.753em}.wy-menu-vertical li.toctree-l9.current li.toctree-l10>a{padding:.4045em 1.618em .4045em 15.371em}.wy-menu-vertical li.toctree-l10.current>a{padding:.4045em 15.371em}.wy-menu-vertical li.toctree-l10.current li.toctree-l11>a{padding:.4045em 1.618em .4045em 16.989em}.wy-menu-vertical li.toctree-l2.current>a,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{background:#c9c9c9}.wy-menu-vertical li.toctree-l2 button.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3.current>a,.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{background:#bdbdbd}.wy-menu-vertical li.toctree-l3 button.toctree-expand{color:#969696}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:400}.wy-menu-vertical a{line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover button.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980b9;cursor:pointer;color:#fff}.wy-menu-vertical a:active button.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980b9;text-align:center;color:#fcfcfc}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-side-nav-search .wy-dropdown>a,.wy-side-nav-search>a{color:#fcfcfc;font-size:100%;font-weight:700;display:inline-block;padding:4px 6px;margin-bottom:.809em;max-width:100%}.wy-side-nav-search .wy-dropdown>a:hover,.wy-side-nav-search>a:hover{background:hsla(0,0%,100%,.1)}.wy-side-nav-search .wy-dropdown>a img.logo,.wy-side-nav-search>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search .wy-dropdown>a.icon img.logo,.wy-side-nav-search>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:400;color:hsla(0,0%,100%,.3)}.wy-nav .wy-menu-vertical header{color:#2980b9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980b9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980b9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:after,.wy-nav-top:before{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:700}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980b9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:grey}footer p{margin-bottom:12px}.rst-content footer span.commit tt,footer span.commit .rst-content tt,footer span.commit code{padding:0;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:1em;background:none;border:none;color:grey}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:after,.rst-footer-buttons:before{width:100%;display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:after,.rst-breadcrumbs-buttons:before{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:1px solid #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:1px solid #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:grey;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width:768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-menu.wy-menu-vertical,.wy-side-nav-search,.wy-side-scroll{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width:1100px){.wy-nav-content-wrap{background:rgba(0,0,0,.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,.wy-nav-side,footer{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60;*zoom:1}.rst-versions .rst-current-version:after,.rst-versions .rst-current-version:before{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-content .eqno .rst-versions .rst-current-version .headerlink,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-content p .rst-versions .rst-current-version .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .icon,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-versions .rst-current-version .rst-content .eqno .headerlink,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-versions .rst-current-version .rst-content p .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-versions .rst-current-version .wy-menu-vertical li button.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version button.toctree-expand{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content .toctree-wrapper>p.caption,.rst-content h1,.rst-content h2,.rst-content h3,.rst-content h4,.rst-content h5,.rst-content h6{margin-bottom:24px}.rst-content img{max-width:100%;height:auto}.rst-content div.figure,.rst-content figure{margin-bottom:24px}.rst-content div.figure .caption-text,.rst-content figure .caption-text{font-style:italic}.rst-content div.figure p:last-child.caption,.rst-content figure p:last-child.caption{margin-bottom:0}.rst-content div.figure.align-center,.rst-content figure.align-center{text-align:center}.rst-content .section>a>img,.rst-content .section>img,.rst-content section>a>img,.rst-content section>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"\f08e";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;display:block;overflow:auto}.rst-content div[class^=highlight],.rst-content pre.literal-block{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px}.rst-content div[class^=highlight] div[class^=highlight],.rst-content pre.literal-block div[class^=highlight]{padding:0;border:none;margin:0}.rst-content div[class^=highlight] td.code{width:100%}.rst-content .linenodiv pre{border-right:1px solid #e6e9ea;margin:0;padding:12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^=highlight] pre{white-space:pre;margin:0;padding:12px;display:block;overflow:auto}.rst-content div[class^=highlight] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content .linenodiv pre,.rst-content div[class^=highlight] pre,.rst-content pre.literal-block{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;font-size:12px;line-height:1.4}.rst-content div.highlight .gp,.rst-content div.highlight span.linenos{user-select:none;pointer-events:none}.rst-content div.highlight span.linenos{display:inline-block;padding-left:0;padding-right:12px;margin-right:12px;border-right:1px solid #e6e9ea}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^=highlight],.rst-content div[class^=highlight] pre{white-space:pre-wrap}}.rst-content .admonition,.rst-content .admonition-todo,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .note,.rst-content .seealso,.rst-content .tip,.rst-content .warning{clear:both}.rst-content .admonition-todo .last,.rst-content .admonition-todo>:last-child,.rst-content .admonition .last,.rst-content .admonition>:last-child,.rst-content .attention .last,.rst-content .attention>:last-child,.rst-content .caution .last,.rst-content .caution>:last-child,.rst-content .danger .last,.rst-content .danger>:last-child,.rst-content .error .last,.rst-content .error>:last-child,.rst-content .hint .last,.rst-content .hint>:last-child,.rst-content .important .last,.rst-content .important>:last-child,.rst-content .note .last,.rst-content .note>:last-child,.rst-content .seealso .last,.rst-content .seealso>:last-child,.rst-content .tip .last,.rst-content .tip>:last-child,.rst-content .warning .last,.rst-content .warning>:last-child{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent!important;border-color:rgba(0,0,0,.1)!important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha>li,.rst-content .toctree-wrapper ol.loweralpha,.rst-content .toctree-wrapper ol.loweralpha>li,.rst-content section ol.loweralpha,.rst-content section ol.loweralpha>li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha>li,.rst-content .toctree-wrapper ol.upperalpha,.rst-content .toctree-wrapper ol.upperalpha>li,.rst-content section ol.upperalpha,.rst-content section ol.upperalpha>li{list-style:upper-alpha}.rst-content .section ol li>*,.rst-content .section ul li>*,.rst-content .toctree-wrapper ol li>*,.rst-content .toctree-wrapper ul li>*,.rst-content section ol li>*,.rst-content section ul li>*{margin-top:12px;margin-bottom:12px}.rst-content .section ol li>:first-child,.rst-content .section ul li>:first-child,.rst-content .toctree-wrapper ol li>:first-child,.rst-content .toctree-wrapper ul li>:first-child,.rst-content section ol li>:first-child,.rst-content section ul li>:first-child{margin-top:0}.rst-content .section ol li>p,.rst-content .section ol li>p:last-child,.rst-content .section ul li>p,.rst-content .section ul li>p:last-child,.rst-content .toctree-wrapper ol li>p,.rst-content .toctree-wrapper ol li>p:last-child,.rst-content .toctree-wrapper ul li>p,.rst-content .toctree-wrapper ul li>p:last-child,.rst-content section ol li>p,.rst-content section ol li>p:last-child,.rst-content section ul li>p,.rst-content section ul li>p:last-child{margin-bottom:12px}.rst-content .section ol li>p:only-child,.rst-content .section ol li>p:only-child:last-child,.rst-content .section ul li>p:only-child,.rst-content .section ul li>p:only-child:last-child,.rst-content .toctree-wrapper ol li>p:only-child,.rst-content .toctree-wrapper ol li>p:only-child:last-child,.rst-content .toctree-wrapper ul li>p:only-child,.rst-content .toctree-wrapper ul li>p:only-child:last-child,.rst-content section ol li>p:only-child,.rst-content section ol li>p:only-child:last-child,.rst-content section ul li>p:only-child,.rst-content section ul li>p:only-child:last-child{margin-bottom:0}.rst-content .section ol li>ol,.rst-content .section ol li>ul,.rst-content .section ul li>ol,.rst-content .section ul li>ul,.rst-content .toctree-wrapper ol li>ol,.rst-content .toctree-wrapper ol li>ul,.rst-content .toctree-wrapper ul li>ol,.rst-content .toctree-wrapper ul li>ul,.rst-content section ol li>ol,.rst-content section ol li>ul,.rst-content section ul li>ol,.rst-content section ul li>ul{margin-bottom:12px}.rst-content .section ol.simple li>*,.rst-content .section ol.simple li ol,.rst-content .section ol.simple li ul,.rst-content .section ul.simple li>*,.rst-content .section ul.simple li ol,.rst-content .section ul.simple li ul,.rst-content .toctree-wrapper ol.simple li>*,.rst-content .toctree-wrapper ol.simple li ol,.rst-content .toctree-wrapper ol.simple li ul,.rst-content .toctree-wrapper ul.simple li>*,.rst-content .toctree-wrapper ul.simple li ol,.rst-content .toctree-wrapper ul.simple li ul,.rst-content section ol.simple li>*,.rst-content section ol.simple li ol,.rst-content section ol.simple li ul,.rst-content section ul.simple li>*,.rst-content section ul.simple li ol,.rst-content section ul.simple li ul{margin-top:0;margin-bottom:0}.rst-content .line-block{margin-left:0;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0}.rst-content .topic-title{font-weight:700;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0 0 24px 24px}.rst-content .align-left{float:left;margin:0 24px 24px 0}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content .code-block-caption .headerlink,.rst-content .eqno .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink,.rst-content dl dt .headerlink,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content p.caption .headerlink,.rst-content p .headerlink,.rst-content table>caption .headerlink{opacity:0;font-size:14px;font-family:FontAwesome;margin-left:.5em}.rst-content .code-block-caption .headerlink:focus,.rst-content .code-block-caption:hover .headerlink,.rst-content .eqno .headerlink:focus,.rst-content .eqno:hover .headerlink,.rst-content .toctree-wrapper>p.caption .headerlink:focus,.rst-content .toctree-wrapper>p.caption:hover .headerlink,.rst-content dl dt .headerlink:focus,.rst-content dl dt:hover .headerlink,.rst-content h1 .headerlink:focus,.rst-content h1:hover .headerlink,.rst-content h2 .headerlink:focus,.rst-content h2:hover .headerlink,.rst-content h3 .headerlink:focus,.rst-content h3:hover .headerlink,.rst-content h4 .headerlink:focus,.rst-content h4:hover .headerlink,.rst-content h5 .headerlink:focus,.rst-content h5:hover .headerlink,.rst-content h6 .headerlink:focus,.rst-content h6:hover .headerlink,.rst-content p.caption .headerlink:focus,.rst-content p.caption:hover .headerlink,.rst-content p .headerlink:focus,.rst-content p:hover .headerlink,.rst-content table>caption .headerlink:focus,.rst-content table>caption:hover .headerlink{opacity:1}.rst-content p a{overflow-wrap:anywhere}.rst-content .wy-table td p,.rst-content .wy-table td ul,.rst-content .wy-table th p,.rst-content .wy-table th ul,.rst-content table.docutils td p,.rst-content table.docutils td ul,.rst-content table.docutils th p,.rst-content table.docutils th ul,.rst-content table.field-list td p,.rst-content table.field-list td ul,.rst-content table.field-list th p,.rst-content table.field-list th ul{font-size:inherit}.rst-content .btn:focus{outline:2px solid}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:1px solid #e1e4e5}.rst-content .sidebar dl,.rst-content .sidebar p,.rst-content .sidebar ul{font-size:90%}.rst-content .sidebar .last,.rst-content .sidebar>:last-child{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:Roboto Slab,ff-tisa-web-pro,Georgia,Arial,sans-serif;font-weight:700;background:#e1e4e5;padding:6px 12px;margin:-24px -24px 24px;font-size:100%}.rst-content .highlighted{background:#f1c40f;box-shadow:0 0 0 2px #f1c40f;display:inline;font-weight:700}.rst-content .citation-reference,.rst-content .footnote-reference{vertical-align:baseline;position:relative;top:-.4em;line-height:0;font-size:90%}.rst-content .citation-reference>span.fn-bracket,.rst-content .footnote-reference>span.fn-bracket{display:none}.rst-content .hlist{width:100%}.rst-content dl dt span.classifier:before{content:" : "}.rst-content dl dt span.classifier-delimiter{display:none!important}html.writer-html4 .rst-content table.docutils.citation,html.writer-html4 .rst-content table.docutils.footnote{background:none;border:none}html.writer-html4 .rst-content table.docutils.citation td,html.writer-html4 .rst-content table.docutils.citation tr,html.writer-html4 .rst-content table.docutils.footnote td,html.writer-html4 .rst-content table.docutils.footnote tr{border:none;background-color:transparent!important;white-space:normal}html.writer-html4 .rst-content table.docutils.citation td.label,html.writer-html4 .rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{display:grid;grid-template-columns:auto minmax(80%,95%)}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{display:inline-grid;grid-template-columns:max-content auto}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{display:grid;grid-template-columns:auto auto minmax(.65rem,auto) minmax(40%,95%)}html.writer-html5 .rst-content aside.citation>span.label,html.writer-html5 .rst-content aside.footnote>span.label,html.writer-html5 .rst-content div.citation>span.label{grid-column-start:1;grid-column-end:2}html.writer-html5 .rst-content aside.citation>span.backrefs,html.writer-html5 .rst-content aside.footnote>span.backrefs,html.writer-html5 .rst-content div.citation>span.backrefs{grid-column-start:2;grid-column-end:3;grid-row-start:1;grid-row-end:3}html.writer-html5 .rst-content aside.citation>p,html.writer-html5 .rst-content aside.footnote>p,html.writer-html5 .rst-content div.citation>p{grid-column-start:4;grid-column-end:5}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.field-list,html.writer-html5 .rst-content dl.footnote{margin-bottom:24px}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dt{padding-left:1rem}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.field-list>dd,html.writer-html5 .rst-content dl.field-list>dt,html.writer-html5 .rst-content dl.footnote>dd,html.writer-html5 .rst-content dl.footnote>dt{margin-bottom:0}html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{font-size:.9rem}html.writer-html5 .rst-content dl.citation>dt,html.writer-html5 .rst-content dl.footnote>dt{margin:0 .5rem .5rem 0;line-height:1.2rem;word-break:break-all;font-weight:400}html.writer-html5 .rst-content dl.citation>dt>span.brackets:before,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:before{content:"["}html.writer-html5 .rst-content dl.citation>dt>span.brackets:after,html.writer-html5 .rst-content dl.footnote>dt>span.brackets:after{content:"]"}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a{word-break:keep-all}html.writer-html5 .rst-content dl.citation>dt>span.fn-backref>a:not(:first-child):before,html.writer-html5 .rst-content dl.footnote>dt>span.fn-backref>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content dl.citation>dd,html.writer-html5 .rst-content dl.footnote>dd{margin:0 0 .5rem;line-height:1.2rem}html.writer-html5 .rst-content dl.citation>dd p,html.writer-html5 .rst-content dl.footnote>dd p{font-size:.9rem}html.writer-html5 .rst-content aside.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content div.citation{padding-left:1rem;padding-right:1rem;font-size:.9rem;line-height:1.2rem}html.writer-html5 .rst-content aside.citation p,html.writer-html5 .rst-content aside.footnote p,html.writer-html5 .rst-content div.citation p{font-size:.9rem;line-height:1.2rem;margin-bottom:12px}html.writer-html5 .rst-content aside.citation span.backrefs,html.writer-html5 .rst-content aside.footnote span.backrefs,html.writer-html5 .rst-content div.citation span.backrefs{text-align:left;font-style:italic;margin-left:.65rem;word-break:break-word;word-spacing:-.1rem;max-width:5rem}html.writer-html5 .rst-content aside.citation span.backrefs>a,html.writer-html5 .rst-content aside.footnote span.backrefs>a,html.writer-html5 .rst-content div.citation span.backrefs>a{word-break:keep-all}html.writer-html5 .rst-content aside.citation span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content aside.footnote span.backrefs>a:not(:first-child):before,html.writer-html5 .rst-content div.citation span.backrefs>a:not(:first-child):before{content:" "}html.writer-html5 .rst-content aside.citation span.label,html.writer-html5 .rst-content aside.footnote span.label,html.writer-html5 .rst-content div.citation span.label{line-height:1.2rem}html.writer-html5 .rst-content aside.citation-list,html.writer-html5 .rst-content aside.footnote-list,html.writer-html5 .rst-content div.citation-list{margin-bottom:24px}html.writer-html5 .rst-content dl.option-list kbd{font-size:.9rem}.rst-content table.docutils.footnote,html.writer-html4 .rst-content table.docutils.citation,html.writer-html5 .rst-content aside.footnote,html.writer-html5 .rst-content aside.footnote-list aside.footnote,html.writer-html5 .rst-content div.citation-list>div.citation,html.writer-html5 .rst-content dl.citation,html.writer-html5 .rst-content dl.footnote{color:grey}.rst-content table.docutils.footnote code,.rst-content table.docutils.footnote tt,html.writer-html4 .rst-content table.docutils.citation code,html.writer-html4 .rst-content table.docutils.citation tt,html.writer-html5 .rst-content aside.footnote-list aside.footnote code,html.writer-html5 .rst-content aside.footnote-list aside.footnote tt,html.writer-html5 .rst-content aside.footnote code,html.writer-html5 .rst-content aside.footnote tt,html.writer-html5 .rst-content div.citation-list>div.citation code,html.writer-html5 .rst-content div.citation-list>div.citation tt,html.writer-html5 .rst-content dl.citation code,html.writer-html5 .rst-content dl.citation tt,html.writer-html5 .rst-content dl.footnote code,html.writer-html5 .rst-content dl.footnote tt{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}html.writer-html5 .rst-content table.docutils th{border:1px solid #e1e4e5}html.writer-html5 .rst-content table.docutils td>p,html.writer-html5 .rst-content table.docutils th>p{line-height:1rem;margin-bottom:0;font-size:.9rem}.rst-content table.docutils td .last,.rst-content table.docutils td .last>:last-child{margin-bottom:0}.rst-content table.field-list,.rst-content table.field-list td{border:none}.rst-content table.field-list td p{line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content code,.rst-content tt{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;padding:2px 5px}.rst-content code big,.rst-content code em,.rst-content tt big,.rst-content tt em{font-size:100%!important;line-height:normal}.rst-content code.literal,.rst-content tt.literal{color:#e74c3c;white-space:normal}.rst-content code.xref,.rst-content tt.xref,a .rst-content code,a .rst-content tt{font-weight:700;color:#404040;overflow-wrap:normal}.rst-content kbd,.rst-content pre,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace}.rst-content a code,.rst-content a tt{color:#2980b9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:700;margin-bottom:12px}.rst-content dl ol,.rst-content dl p,.rst-content dl table,.rst-content dl ul{margin-bottom:12px}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl dd>ol:last-child,.rst-content dl dd>p:last-child,.rst-content dl dd>table:last-child,.rst-content dl dd>ul:last-child{margin-bottom:0}html.writer-html4 .rst-content dl:not(.docutils),html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple){margin-bottom:24px}html.writer-html4 .rst-content dl:not(.docutils)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980b9;border-top:3px solid #6ab0de;padding:6px;position:relative}html.writer-html4 .rst-content dl:not(.docutils)>dt:before,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:before{color:#6ab0de}html.writer-html4 .rst-content dl:not(.docutils)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt{margin-bottom:6px;border:none;border-left:3px solid #ccc;background:#f0f0f0;color:#555}html.writer-html4 .rst-content dl:not(.docutils) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) dl:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt .headerlink{color:#404040;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils)>dt:first-child,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple)>dt:first-child{margin-top:0}html.writer-html4 .rst-content dl:not(.docutils) code.descclassname,html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descclassname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{background-color:transparent;border:none;padding:0;font-size:100%!important}html.writer-html4 .rst-content dl:not(.docutils) code.descname,html.writer-html4 .rst-content dl:not(.docutils) tt.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) code.descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) tt.descname{font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .optional,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:700}html.writer-html4 .rst-content dl:not(.docutils) .property,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .property{display:inline-block;padding-right:8px;max-width:100%}html.writer-html4 .rst-content dl:not(.docutils) .k,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .k{font-style:italic}html.writer-html4 .rst-content dl:not(.docutils) .descclassname,html.writer-html4 .rst-content dl:not(.docutils) .descname,html.writer-html4 .rst-content dl:not(.docutils) .sig-name,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descclassname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .descname,html.writer-html5 .rst-content dl[class]:not(.option-list):not(.field-list):not(.footnote):not(.citation):not(.glossary):not(.simple) .sig-name{font-family:SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,Courier,monospace;color:#000}.rst-content .viewcode-back,.rst-content .viewcode-link{display:inline-block;color:#27ae60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:700}.rst-content code.download,.rst-content tt.download{background:inherit;padding:inherit;font-weight:400;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content code.download span:first-child,.rst-content tt.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content code.download span:first-child:before,.rst-content tt.download span:first-child:before{margin-right:4px}.rst-content .guilabel,.rst-content .menuselection{font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .guilabel,.rst-content .menuselection{border:1px solid #7fbbe3;background:#e7f2fa}.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>.kbd,.rst-content :not(dl.option-list)>:not(dt):not(kbd):not(.kbd)>kbd{color:inherit;font-size:80%;background-color:#fff;border:1px solid #a6a6a6;border-radius:4px;box-shadow:0 2px grey;padding:2.4px 6px;margin:auto 0}.rst-content .versionmodified{font-style:italic}@media screen and (max-width:480px){.rst-content .sidebar{width:100%}}span[id*=MathJax-Span]{color:#404040}.math{text-align:center}@font-face{font-family:Lato;src:url(fonts/lato-normal.woff2?bd03a2cc277bbbc338d464e679fe9942) format("woff2"),url(fonts/lato-normal.woff?27bd77b9162d388cb8d4c4217c7c5e2a) format("woff");font-weight:400;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold.woff2?cccb897485813c7c256901dbca54ecf2) format("woff2"),url(fonts/lato-bold.woff?d878b6c29b10beca227e9eef4246111b) format("woff");font-weight:700;font-style:normal;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-bold-italic.woff2?0b6bb6725576b072c5d0b02ecdd1900d) format("woff2"),url(fonts/lato-bold-italic.woff?9c7e4e9eb485b4a121c760e61bc3707c) format("woff");font-weight:700;font-style:italic;font-display:block}@font-face{font-family:Lato;src:url(fonts/lato-normal-italic.woff2?4eb103b4d12be57cb1d040ed5e162e9d) format("woff2"),url(fonts/lato-normal-italic.woff?f28f2d6482446544ef1ea1ccc6dd5892) format("woff");font-weight:400;font-style:italic;font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:400;src:url(fonts/Roboto-Slab-Regular.woff2?7abf5b8d04d26a2cafea937019bca958) format("woff2"),url(fonts/Roboto-Slab-Regular.woff?c1be9284088d487c5e3ff0a10a92e58c) format("woff");font-display:block}@font-face{font-family:Roboto Slab;font-style:normal;font-weight:700;src:url(fonts/Roboto-Slab-Bold.woff2?9984f4a9bda09be08e83f2506954adbe) format("woff2"),url(fonts/Roboto-Slab-Bold.woff?bed5564a116b05148e3b3bea6fb1162a) format("woff");font-display:block} \ No newline at end of file diff --git a/docs/en/_static/doctools.js b/docs/en/_static/doctools.js new file mode 100644 index 0000000..344db17 --- /dev/null +++ b/docs/en/_static/doctools.js @@ -0,0 +1,315 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var bbox = span.getBBox(); + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + var parentOfText = node.parentNode.parentNode; + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { + this.initOnKeyListeners(); + } + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keyup(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/docs/en/_static/documentation_options.js b/docs/en/_static/documentation_options.js new file mode 100644 index 0000000..76b3c81 --- /dev/null +++ b/docs/en/_static/documentation_options.js @@ -0,0 +1,10 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: 'v.2.2.0', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + FILE_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, +}; \ No newline at end of file diff --git a/docs/en/_static/down-pressed.png b/docs/en/_static/down-pressed.png new file mode 100644 index 0000000..5756c8c Binary files /dev/null and b/docs/en/_static/down-pressed.png differ diff --git a/docs/en/_static/down.png b/docs/en/_static/down.png new file mode 100644 index 0000000..1b3bdad Binary files /dev/null and b/docs/en/_static/down.png differ diff --git a/docs/en/_static/file.png b/docs/en/_static/file.png new file mode 100644 index 0000000..a858a41 Binary files /dev/null and b/docs/en/_static/file.png differ diff --git a/docs/en/_static/jquery-3.2.1.js b/docs/en/_static/jquery-3.2.1.js new file mode 100644 index 0000000..d2d8ca4 --- /dev/null +++ b/docs/en/_static/jquery-3.2.1.js @@ -0,0 +1,10253 @@ +/*! + * jQuery JavaScript Library v3.2.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2017-03-20T18:59Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var document = window.document; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + + + + function DOMEval( code, doc ) { + doc = doc || document; + + var script = doc.createElement( "script" ); + + script.text = code; + doc.head.appendChild( script ).parentNode.removeChild( script ); + } +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.2.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android <=4.0 only + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // As of jQuery 3.0, isNumeric is limited to + // strings and numbers (primitives or objects) + // that can be coerced to finite numbers (gh-2662) + var type = jQuery.type( obj ); + return ( type === "number" || type === "string" ) && + + // parseFloat NaNs numeric-cast false positives ("") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + !isNaN( obj - parseFloat( obj ) ); + }, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + + /* eslint-disable no-unused-vars */ + // See https://github.com/eslint/eslint/issues/6125 + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + DOMEval( code ); + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE <=9 - 11, Edge 12 - 13 + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android <=4.0 only + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.3 + * https://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-08-08 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + disabledAncestor = addCombinator( + function( elem ) { + return elem.disabled === true && ("form" in elem || "label" in elem); + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[i] = "#" + nid + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement("fieldset"); + + try { + return !!fn( el ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + disabledAncestor( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( preferredDoc !== document && + (subWindow = document.defaultView) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( el ) { + el.className = "i"; + return !el.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( el ) { + el.appendChild( document.createComment("") ); + return !el.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID filter and find + if ( support.getById ) { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( (elem = elems[i++]) ) { + node = elem.getAttributeNode("id"); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( el ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll(":enabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll(":disabled").length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( el ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return (sel + "").replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( (oldCache = uniqueCache[ key ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( el ) { + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement("fieldset") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( el ) { + return el.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Simple selector that can be filtered directly, removing non-Elements + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + // Complex selector, compare the two sets, removing non-Elements + qualifier = jQuery.filter( qualifier, elements ); + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1; + } ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( nodeName( elem, "iframe" ) ) { + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && jQuery.isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && jQuery.isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( jQuery.isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + jQuery.isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ jQuery.camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ jQuery.camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( jQuery.camelCase ); + } else { + key = jQuery.camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + jQuery.contains( elem.ownerDocument, elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + +var swap = function( elem, options, callback, args ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.apply( elem, args || [] ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i ); + +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE <=9 only + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +// Support: IE <=9 only +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); +var documentElement = document.documentElement; + + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 only +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + // Make a writable jQuery.Event from the native event object + var event = jQuery.event.fix( nativeEvent ); + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: jQuery.isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + /* eslint-disable max-len */ + + // See https://github.com/eslint/eslint/issues/3229 + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi, + + /* eslint-enable */ + + // Support: IE <=10 - 11, Edge 12 - 13 + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( ">tbody", elem )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rmargin = ( /^margin/ ); + +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + div.style.cssText = + "box-sizing:border-box;" + + "position:relative;display:block;" + + "margin:auto;border:1px;padding:1px;" + + "top:1%;width:50%"; + div.innerHTML = ""; + documentElement.appendChild( container ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = divStyle.marginLeft === "2px"; + boxSizingReliableVal = divStyle.width === "4px"; + + // Support: Android 4.0 - 4.3 only + // Some styles come back with percentage values, even though they shouldn't + div.style.marginRight = "50%"; + pixelMarginRightVal = divStyle.marginRight === "4px"; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" + + "padding:0;margin-top:1px;position:absolute"; + container.appendChild( div ); + + jQuery.extend( support, { + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelMarginRight: function() { + computeStyleTests(); + return pixelMarginRightVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }, + + cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style; + +// Return a css property mapped to a potentially vendor prefixed property +function vendorPropName( name ) { + + // Shortcut for names that are not vendor prefixed + if ( name in emptyStyle ) { + return name; + } + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a property mapped along what jQuery.cssProps suggests or to +// a vendor prefixed property. +function finalPropName( name ) { + var ret = jQuery.cssProps[ name ]; + if ( !ret ) { + ret = jQuery.cssProps[ name ] = vendorPropName( name ) || name; + } + return ret; +} + +function setPositiveNumber( elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { + var i, + val = 0; + + // If we already have the right measurement, avoid augmentation + if ( extra === ( isBorderBox ? "border" : "content" ) ) { + i = 4; + + // Otherwise initialize for horizontal or vertical properties + } else { + i = name === "width" ? 1 : 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin, so add it if we want it + if ( extra === "margin" ) { + val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); + } + + if ( isBorderBox ) { + + // border-box includes padding, so remove it if we want content + if ( extra === "content" ) { + val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // At this point, extra isn't border nor margin, so remove border + if ( extra !== "margin" ) { + val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } else { + + // At this point, extra isn't content, so add padding + val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // At this point, extra isn't content nor padding, so add border + if ( extra !== "padding" ) { + val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + return val; +} + +function getWidthOrHeight( elem, name, extra ) { + + // Start with computed style + var valueIsBorderBox, + styles = getStyles( elem ), + val = curCSS( elem, name, styles ), + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Computed unit is not pixels. Stop here and return. + if ( rnumnonpx.test( val ) ) { + return val; + } + + // Check for style in case a browser which returns unreliable values + // for getComputedStyle silently falls back to the reliable elem.style + valueIsBorderBox = isBorderBox && + ( support.boxSizingReliable() || val === elem.style[ name ] ); + + // Fall back to offsetWidth/Height when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + if ( val === "auto" ) { + val = elem[ "offset" + name[ 0 ].toUpperCase() + name.slice( 1 ) ]; + } + + // Normalize "", auto, and prepare for extra + val = parseFloat( val ) || 0; + + // Use the active box-sizing model to add/subtract irrelevant styles + return ( val + + augmentWidthOrHeight( + elem, + name, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: { + "float": "cssFloat" + }, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + if ( type === "number" ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = jQuery.camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( i, name ) { + jQuery.cssHooks[ name ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, name, extra ); + } ) : + getWidthOrHeight( elem, name, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = extra && getStyles( elem ), + subtract = extra && augmentWidthOrHeight( + elem, + name, + extra, + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + styles + ); + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ name ] = value; + value = jQuery.css( elem, name ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( !rmargin.test( prefix ) ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && + ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || + jQuery.cssHooks[ tween.prop ] ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = jQuery.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 13 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = jQuery.camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( jQuery.isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + jQuery.proxy( result.stop, result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( jQuery.isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( jQuery.isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + jQuery.isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( jQuery.isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue && type !== false ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = jQuery.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://html.spec.whatwg.org/multipage/infrastructure.html#strip-and-collapse-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( jQuery.isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + if ( typeof value === "string" && value ) { + classes = value.match( rnothtmlwhite ) || []; + + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value; + + if ( typeof stateVal === "boolean" && type === "string" ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( jQuery.isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( type === "string" ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = value.match( rnothtmlwhite ) || []; + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, isFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + isFunction = jQuery.isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( isFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + elem[ type ](); + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " + + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + + "change select submit keydown keypress keyup contextmenu" ).split( " " ), + function( i, name ) { + + // Handle event binding + jQuery.fn[ name ] = function( data, fn ) { + return arguments.length > 0 ? + this.on( name, null, data, fn ) : + this.trigger( name ); + }; +} ); + +jQuery.fn.extend( { + hover: function( fnOver, fnOut ) { + return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + } +} ); + + + + +support.focusin = "onfocusin" in window; + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = jQuery.now(); + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && jQuery.type( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = jQuery.isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( jQuery.isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ]; + } + } + match = responseHeaders[ key.toLowerCase() ]; + } + return match == null ? null : match; + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 13 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available, append data to url + if ( s.data ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( jQuery.isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + + +jQuery._evalUrl = function( url ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + "throws": true + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( jQuery.isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( jQuery.isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var isFunction = jQuery.isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain requests + if ( s.crossDomain ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Acknowledgements

+

SALMON has been developed by the SALMON developers under supports by +Center for Computational Sciences, University of Tsukuba, and +National Institute for Quantum and Radiological Science and Technology. +SALMON has been supported by Strategic Basic +Research Programs, CREST, Japan Science and Technology Agency, under the +Grand Number JPMJCR16N5, in the research area of Advanced core +technology for creation and practical utilization of innovative +properties and functions based upon optics and photonics. SALMON was +also supported by Ministry of Education, Culture, Sports and +Technology of Japan as a social and scientific priority issue (Creation +of new functional devices and high-performance materials to support +next-generation industries: CDMSI) to be tackled by using post-K +computer.

+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/en/exercises.html b/docs/en/exercises.html new file mode 100644 index 0000000..e697b28 --- /dev/null +++ b/docs/en/exercises.html @@ -0,0 +1,4752 @@ + + + + + + Exercises — SALMON software manual v.2.2.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +

====.. _Exercises:

+
+

Exercises

+
+

Getting started

+

Welcome to SALMON Exercises!

+

In these exercises, we explain the use of SALMON from the very +beginning, taking a few samples that cover applications of SALMON in +several directions. We assume that you are in the computational +environment of UNIX/Linux OS. First you need to download and install +SALMON in your computational environment. If you have not yet done it, +do it following the instruction, download +and Install and Run.

+

As described in Install and Run, you are required +to prepare at least an input file and pseudopotential files to run +SALMON. In the following, we present input files for several sample +calculations and provide a brief explanation of the input keywords +that appear in the input files. You may modify the input files to +execute for your own calculations. Pseudopotential files of elements +that appear in the samples are also attached. We also present +explanations of main output files.

+

We present 11 exercises.

+

First 3 exercises (Exercise-1 ~ 3) are for an isolated molecule, +acetylene C2H2. If you are interested in learning electron dynamics +calculations in isolated systems, please look into these exercises. In +SALMON, we usually calculate the ground state solution first using a +static density functional theory (DFT). This is +illustrated in Exercise-1. +After finishing the ground state calculation, two exercises of electron +dynamics calculations based on time-dependent density functional theory (TDDFT) +are prepared. +Exercise-2 +illustrates the calculation of linear optical responses in real time, +obtaining polarizability and photoabsorption of the molecule. +Exercise-3 +illustrates the calculation of electron dynamics in the molecule under a +pulsed electric field.

+

Next 3 exercises (Exercise-4 ~ 6) are for a crystalline solid, silicon. +If you are interested in learning electron dynamics calculations in +extended periodic systems, please look into these exercises. +Exercise-4 +illustrates the ground state calculation of the crystalline silicon based on DFT. +Exercise-5 +illustrates the calculation of linear response properties of the crystalline +silicon based on TDDFT to obtain the dielectric function. +Exercise-6 +illustrates the calculation of electron dynamics in the crystalline +silicon induced by a pulsed electric field.

+

Exercise-7 is for a simultaneous calculation of the propagation +of a pulsed light and electronic motion in a bulk silicon, +coupling Maxwell equations for the +electromagnetic fields of the pulsed light and the electron dynamics in +the unit cells based on TDDFT. This calculation is quite time-consuming and is +recommended to execute using massively parallel supercomputers. +Exercise-7 +illustrates the calculation of a linearly polarized pulsed light +irradiating normally on a surface of a bulk silicon.

+

Next 2 exercises (Exercise-8 ~ 9) are for geometry optimization based on DFT and +Ehrenfest molecular dynamics based on TDDFT +for an isolated molecule, acetylene C2H2. +Exercise-8 +illustrates the geometry optimization in the ground state. +Exercise-9 +illustrates the Ehrenfest molecular dynamics induced by a pulsed electric field.

+

Next 2 exercises (Exercise-10 ~ 11) are for a macroscopic light propagation through +a metallic nanosphere solving Maxwell equations. +The optical response of the nanoparticle is described by a dielectric function. +Finite-Difference Time-Domain (FDTD) method is used to calculated the three-dimensional +light propagation. +Exercise-10 illustrates the calculation of absorption-, scattering-, +and extinction-cross-sections for an isolated Au nanoparticle. +Exercise-11 illustrates the calculation of absorption-, reflection-, +and transmission-rates for a metasurface in which Au nanoparticles are periodically arrayed +in two-dimension.

+

Input files of exercises are included in SALMON, in the directory +SALMON/samples/exercise_##_<description>/.

+
+
+

C2H2 (isolated molecules)

+
+

Exercise-1: Ground state of C2H2 molecule

+

In this exercise, we learn the calculation of the ground state +of acetylene (C2H2) molecule, solving the static Kohn-Sham equation. +This exercise will be useful to learn how to set up calculations in +SALMON for any isolated systems such as molecules and nanoparticles.

+

Acetylene molecule is a linear chain molecule composed of two Carbon atoms +and two Hydrogen atoms.

+
+
_images/acetylene.png +
+

In SALMON, we use a three-dimensional (3D) uniform grid system +to express physical quantities such as electron orbitals.

+
+
_images/acetylene_grid.png +
+
+

Input files

+

To run the code, following files in the directory SALMON/samples/exercise_01_C2H2_gs/ are used:

+ ++++ + + + + + + + + + + + + + + +
file namedescription
C2H2_gs.inpinput file that contains input +keywords and their values
C_rps.datpseodupotential file for carbon +atom
H_rps.datpseudopotential file for hydrogen +atom
+

Pseudopotential files are needed for two elements, Carbon (C) and Hydrogen (H). +The pseudopoential depends on the angular momentum, and looks as follows (for Carbon).

+
+
_images/C_rps_pot.png +
+

In the input file C2H2_gs.inp, input keywords are specified. +Most of them are mandatory to execute the ground state calculation. +This will help you to prepare an input file for other systems that you +want to calculate. A complete list of the input keywords that can be +used in the input file can be found in +List of input keywords.

+
!########################################################################################!
+! Excercise 01: Ground state of C2H2 molecule                                            !
+!----------------------------------------------------------------------------------------!
+! * The detail of this excercise is explained in our manual(see chapter: 'Exercises').   !
+!   The manual can be obtained from: https://salmon-tddft.jp/documents.html              !
+! * Input format consists of group of keywords like:                                     !
+!     &group                                                                             !
+!       input keyword = xxx                                                              !
+!     /                                                                                  !
+!   (see chapter: 'List of input keywords' in the manual)                                !
+!----------------------------------------------------------------------------------------!
+! * Conversion from unit_system = 'a.u.' to 'A_eV_fs':                                   !
+!   Length: 1 [a.u.] = 0.52917721067    [Angstrom]                                       !
+!   Energy: 1 [a.u.] = 27.21138505      [eV]                                             !
+!   Time  : 1 [a.u.] = 0.02418884326505 [fs]                                             !
+!########################################################################################!
+
+&calculation
+  !type of theory
+  theory = 'dft'
+/
+
+
+
+
theory specifies which theoretical method is used in the calculation.
+
+
&control
+  !common name of output files
+  sysname = 'C2H2'
+/
+
+
+
+
sysname is a prefix for filenames of output files.
+
+
&units
+  !units used in input and output files
+  unit_system = 'A_eV_fs'
+/
+
+
+
+
unit_system specifies which unit system is used in the input and output files.
+
+
&system
+  !periodic boundary condition
+  yn_periodic = 'n'
+
+  !number of elements, atoms, electrons and states(orbitals)
+  nelem  = 2
+  natom  = 4
+  nelec  = 10
+  nstate = 6
+/
+
+
+
+
yn_periodic specifies whether or not periodic boundary condition is applied.
+
nelem is the number of elements in the system.
+
natom is the number of atoms in the system.
+
nelec is the number of electrons in the system.
+
nstate is the number of orbitals that are used in the calculation.
+
+
&pseudo
+  !name of input pseudo potential file
+  file_pseudo(1) = './C_rps.dat'
+  file_pseudo(2) = './H_rps.dat'
+
+  !atomic number of element
+  izatom(1) = 6
+  izatom(2) = 1
+
+  !angular momentum of pseudopotential that will be treated as local
+  lloc_ps(1) = 1
+  lloc_ps(2) = 0
+  !--- Caution ---------------------------------------!
+  ! Indices must correspond to those in &atomic_coor. !
+  !---------------------------------------------------!
+/
+
+
+
+
file_pseudo(n) specifies the filename of the pseudopotential file of the n-th element.
+
izatom(n) is the atomic number of the n-th element.
+
lloc_ps(n) specifies which angular momentum component is chosen as the local potential for the n-th element.
+
+
&functional
+  !functional('PZ' is Perdew-Zunger LDA: Phys. Rev. B 23, 5048 (1981).)
+  xc = 'PZ'
+/
+
+
+
+
xc specifies the exchange-correlation potential to be used in the calculation.
+
+
&rgrid
+  !spatial grid spacing(x,y,z)
+  dl(1:3) = 0.25d0, 0.25d0, 0.25d0
+
+  !number of spatial grids(x,y,z)
+  num_rgrid(1:3) = 64, 64, 64
+/
+
+
+
+
dl(i) specifies the spatial grid spacing in i-th direction.
+
num_rgrid(i) specifies the number of grid points in i-th direction.
+
+
&scf
+  !maximum number of scf iteration and threshold of convergence
+  nscf      = 300
+  threshold = 1.0d-9
+/
+
+
+
+
nscf specifies the maximum number of SCF iterations.
+
threshold specifies the threshold to judge the convergence.
+
+
&analysis
+  !output of all orbitals, density,
+  !density of states, projected density of states,
+  !and electron localization function
+  yn_out_psi  = 'y'
+  yn_out_dns  = 'y'
+  yn_out_dos  = 'y'
+  yn_out_pdos = 'y'
+  yn_out_elf  = 'y'
+/
+
+
+
+
yn_out_psi, yn_out_dns, yn_out_dos, yn_out_pdos, yn_out_elf specify output files that are generated after the calculation.
+
+
&atomic_coor
+  !cartesian atomic coodinates
+  'C'    0.000000    0.000000    0.599672  1
+  'H'    0.000000    0.000000    1.662257  2
+  'C'    0.000000    0.000000   -0.599672  1
+  'H'    0.000000    0.000000   -1.662257  2
+  !--- Format ---------------------------------------------------!
+  ! 'symbol' x y z index(correspond to that of pseudo potential) !
+  !--------------------------------------------------------------!
+/
+
+
+
+
&atomic_coor specifies spatial coordinates of atoms.
+
+
+
+

Execusion

+

In a multiprocess environment, calculation will be executed as:

+
$ mpiexec -n NPROC salmon < C2H2_gs.inp > C2H2_gs.out
+
+
+

where NPROC is the number of MPI processes. A standard output will be stored in the file C2H2_gs.out.

+
+
+

Output files

+

After the calculation, following output files and a directory are created in the +directory that you run the code in addition to the standard output file,

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
namedescription
C2H2_info.datainformation on ground state +solution
C2H2_eigen.dataorbital energies
C2H2_k.datak-point distribution +(for isolated systems, only +gamma point is described)
data_for_restartdirectory where files used in +the real-time calculation are +contained
psi_ob1.cube, psi_ob2.cube, ...electron orbitals
dns.cubea cube file for electron density
dos.datadensity of states
pdos1.data, pdos2.data, ...projected density of states
elf.cubeelectron localization function +(ELF)
PS_C_KY_n.datinformation on pseodupotential +file for carbon atom
PS_H_KY_n.datinformation on pseodupotential +file for hydrogen atom
+
+
You may download the above files (zipped file, except for the directory data_for_restart) from:
+ +
+

We first explain the standard output file. In the beginning of the file, input variables used in the calculation are shown.

+
##############################################################################
+# SALMON: Scalable Ab-initio Light-Matter simulator for Optics and Nanoscience
+#
+#                             Version 2.0.1
+#
+##############################################################################
+  Libxc: [disabled]
+   theory= dft
+   use of real value orbitals =  T
+ ======
+ MPI distribution:
+   nproc_k     :           1
+   nproc_ob    :           1
+   nproc_rgrid :           1           1           2
+ OpenMP parallelization:
+   number of threads :         256
+ .........
+
+
+

After that, the SCF loop starts. At each iteration step, the total energy as well as +orbital energies and some other quantities are displayed.

+
-----------------------------------------------
+iter=     1     Total Energy=      -197.59254070     Gap=   -20.17834599     Vh iter= 234
+    1       -29.9707      2       -28.3380      3       -13.0123      4         5.8457
+    5        -9.9213      6       -14.3326
+iter and int_x|rho_i(x)-rho_i-1(x)|dx/nelec        =      1 0.31853198E+00
+Ne=   10.0000000000000
+-----------------------------------------------
+iter=     2     Total Energy=      -280.97950515     Gap=    -9.59770609     Vh iter= 247
+    1       -17.4334      2       -24.4941      3       -20.1872      4         0.8020
+    5        -3.4058      6        -8.7957
+iter and int_x|rho_i(x)-rho_i-1(x)|dx/nelec        =      2 0.54493263E+00
+Ne=   10.0000000000000
+-----------------------------------------------
+iter=     3     Total Energy=      -295.67034640     Gap=    -6.90359156     Vh iter= 229
+    1       -16.0251      2       -19.7759      3       -17.6765      4        -0.9015
+    5        -2.9323      6        -7.8050
+iter and int_x|rho_i(x)-rho_i-1(x)|dx/nelec        =      3 0.13010987E+00
+Ne=   10.0000000000000
+
+
+

When the convergence criterion is satisfied, the SCF calculation ends.

+
-----------------------------------------------
+iter=   162     Total Energy=      -339.69525272     Gap=     6.78870999     Vh iter=   1
+    1       -18.4106      2       -13.9966      3       -12.4163      4        -7.3386
+    5        -7.3386      6        -0.5498
+iter and int_x|rho_i(x)-rho_i-1(x)|dx/nelec        =    162 0.50237787E-08
+Ne=   9.99999999999999
+-----------------------------------------------
+iter=   163     Total Energy=      -339.69525269     Gap=     6.78870999     Vh iter=   1
+    1       -18.4106      2       -13.9966      3       -12.4163      4        -7.3386
+    5        -7.3386      6        -0.5498
+iter and int_x|rho_i(x)-rho_i-1(x)|dx/nelec        =    163 0.69880308E-09
+Ne=   9.99999999999999
+ #GS converged at   164  : 0.69880308E-09
+
+
+

Next, the force acting on ions and some other information related to orbital energies are shown.

+
===== force =====
+    1 -0.33652081E-05  0.16854696E-04 -0.59496450E+00
+    2 -0.59222259E-06  0.24915590E-05  0.57651725E+00
+    3 -0.37839836E-05  0.20304090E-04  0.59493028E+00
+    4 -0.86779607E-06  0.39560274E-05 -0.57651738E+00
+orbital energy information-------------------------------
+Lowest occupied orbital -0.676576619015730
+Highest occupied orbital (HOMO) -0.269686750876529
+Lowest unoccupied orbital (LUMO) -2.020624936948345E-002
+Highest unoccupied orbital -2.020624936948345E-002
+HOMO-LUMO gap  0.249480501507045
+Physicaly upper bound of eps(omega)  0.656370369646246
+---------------------------------------------------------
+Lowest occupied orbital[eV]  -18.4105868958642
+Highest occupied orbital (HOMO)[eV]  -7.33855002098465
+Lowest unoccupied orbital (LUMO)[eV] -0.549840032009334
+Highest unoccupied orbital[eV] -0.549840032009334
+HOMO-LUMO gap[eV]   6.78870998897532
+Physicaly upper bound of eps(omega)[eV]   17.8607468638548
+---------------------------------------------------------
+ writing restart data...
+ writing completed.
+
+
+

In the directory data_for_restart, files that will be used in the next-step +time evolution calculations are stored.

+

Other output files include following information.

+

C2H2_info.data

+

Calculated orbital and total energies as well as parameters specified in +the input file are shown.

+

C2H2_eigen.data

+

Orbital energies.

+
#esp: single-particle energies (eigen energies)
+#occ: occupation numbers, io: orbital index
+# 1:io, 2:esp[eV], 3:occ
+
+
+

C2H2_k.data

+

k-point distribution(for isolated systems, only gamma point is described).

+
# ik: k-point index
+# kx,ky,kz: Reduced coordinate of k-points
+# wk: Weight of k-point
+# 1:ik[none] 2:kx[none] 3:ky[none] 4:kz[none] 5:wk[none]
+# coefficients (2*pi/a [a.u.]) in kx, ky, kz
+
+
+

psi_ob1.cube, psi_ob2.cube, ...

+

Cube files for electron orbitals. The number in the filename indicates +the index of the orbital. Atomic unit is adopted in all cube files.

+

dns.cube

+

A cube file for electron density.

+

dos.data

+

A file for density of states. The units used in this file are affected +by the input parameter, unit_system in &unit.

+

elf.cube

+

A cube file for electron localization function (ELF).

+

We show several image that are created from the output files.

+
    +
  • Highest occupied molecular orbital (HOMO)

    +

    The output files psi_ob1.cube, psi_ob2.cube, ... are used to create the image.

    +_images/HOMO.png +
  • +
  • Electron density

    +

    The output files dns.cube, ... are used to create the image.

    +_images/Dns.png +
  • +
  • Electron localization function

    +

    The output files elf.cube, ... are used to create the image.

    +_images/Elf.png +
  • +
+
+
+
+

Exercise-2: Polarizability and photoabsorption of C2H2 molecule

+

In this exercise, we learn the linear response calculation in the +acetylene (C2H2) molecule, solving the time-dependent Kohn-Sham +equation. The linear response calculation provides the polarizability +and the oscillator strength distribution of the molecule. This exercise +should be carried out after finishing the ground state calculation that +was explained in Exercise-1.

+

Polarizability \(\alpha_{\mu \nu}(t)\) is the basic quantity +that characterizes optical responses of molecules and nano-particles, +where \(\mu, \nu\) indicate Cartesian components, \(\mu, \nu = x,y,z\). +The polarizability \(\alpha_{\mu \nu}(t)\) relates the \(\mu\) +component of the electric dipole moment at time \(t\), \(p_{\mu}(t)\), +with the \(\nu\) component of the electric field at time \(t'\),

+

\(p_{\mu}(t) = \sum_{\nu=x,y,z} \alpha_{\mu \nu}(t-t') E_{\nu}(t').\)

+

We introduce a frequency-dependent polarizability by the time-frequency +Fourier transformation of the polarizability,

+

\(\tilde \alpha_{\mu \nu}(\omega) = \int dt e^{i\omega t} \alpha_{\mu \nu}(t).\)

+

The imaginary part of the frequency-dependent polarizability is +related to the photoabsorption cross section \(\sigma(\omega)\) by

+

\(\sigma(\omega) = \frac{4\pi \omega}{c} \frac{1}{3} \sum_{\mu=x,y,z} {\rm Im} \tilde \alpha_{\mu \mu}(\omega).\)

+

The photoabsorption cross section is also related to the oscillator strength +distribution by

+

\(\sigma(\omega) = \frac{2\pi^2 e^2}{mc} \frac{df(\omega)}{d\omega}.\)

+

In SALMON, the polarizability is calculated in time domain. +First the ground state orbital \(\phi_i(\mathbf{r})\) that +satisfies the Kohn-Sham equation,

+

\(H_{\rm KS} \phi_i(\mathbf{r}) = \epsilon_i \phi_i(\mathbf{r}),\)

+

is prepared. Then an impulsive force given by the potential

+

\(V_{\rm ext}(\mathbf{r},t) = I \delta(t) z,\)

+

is applied to all electrons in the C2H2 molecule along the molecular axis +which we take \(z\) axis. \(I\) is the magnitude of the impulse, +and \(\delta(t)\) is the Dirac's delta function. +The orbital is distorted by the impulsive force at \(t=0\). +Immediately after the impulse is applied, the orbital becomes

+

\(\psi_i(\mathbf{r},t=0_+) = e^{iIz/\hbar} \phi_i(\mathbf{r}).\)

+

After the impulsive force is applied at \(t=0\), +a time evolution calculation is carried out without any external fields,

+

\(i\hbar \frac{\partial}{\partial t} \psi_i(\mathbf{r},t) = H_{\rm KS}(t) \psi_i(\mathbf{r},t).\)

+

During the time evolution, the electric dipole moment given by

+

\(p_z(t) = \int d\mathbf{r} (-ez) \sum_i \vert \psi_i(\mathbf{r},t) \vert^2,\)

+

is monitored. After the time evolution calculation, +a time-frequency Fourier transformation is carried out for the +electric dipole moment to obtain the frequency-dependent polarizability by

+

\(\tilde \alpha_{zz}(\omega) = - \frac{e}{I} \int dt e^{i\omega t} p_z(t).\)

+
+

Input files

+

To run the code, following files are necessary:

+ ++++ + + + + + + + + + + + + + + + + + +
file namedescription
C2H2_response.inpinput file that contains input +keywords and their values
C_rps.datpseodupotential file for carbon +atom
H_rps.datpseudopotential file for hydrogen +atom
restart
+
directory created in the ground +state calculation
+
(rename the directory from +data_for_restart to restart)
+
+
+

First three files are prepared in the directory SALMON/samples/exercise_02_C2H2_lr/. +The file C2H2_rt_response.inp that contains input keywords and their values. +The pseudopotential files should be the same as those used in the ground state calculation. +In the directory restart, those files created in the ground state calculation and stored +in the directory data_for_restart are included. +Therefore, copy the directory as cp -R data_for_restart restart +if you calculate at the same directory as you did the ground state calculation.

+

In the input file C2H2_rt_response.inp, input keywords are specified. +Most of them are mandatory to execute the linear response calculation. +This will help you to prepare the input file for other systems that you +want to calculate. A complete list of the input keywords that can be +used in the input file can be found in +List of input keywords.

+
!########################################################################################!
+! Excercise 02: Polarizability and photoabsorption of C2H2 molecule                      !
+!----------------------------------------------------------------------------------------!
+! * The detail of this excercise is explained in our manual(see chapter: 'Exercises').   !
+!   The manual can be obtained from: https://salmon-tddft.jp/documents.html              !
+! * Input format consists of group of keywords like:                                     !
+!     &group                                                                             !
+!       input keyword = xxx                                                              !
+!     /                                                                                  !
+!   (see chapter: 'List of input keywords' in the manual)                                !
+!----------------------------------------------------------------------------------------!
+! * Conversion from unit_system = 'a.u.' to 'A_eV_fs':                                   !
+!   Length: 1 [a.u.] = 0.52917721067    [Angstrom]                                       !
+!   Energy: 1 [a.u.] = 27.21138505      [eV]                                             !
+!   Time  : 1 [a.u.] = 0.02418884326505 [fs]                                             !
+!----------------------------------------------------------------------------------------!
+! * Copy the ground state data directory('data_for_restart') (or make symbolic link)     !
+!   calculated in 'samples/exercise_01_C2H2_gs/' and rename the directory to 'restart/'  !
+!   in the current directory.                                                            !
+!########################################################################################!
+
+&calculation
+  !type of theory
+  theory = 'tddft_response'
+/
+
+
+
+
theory specifies which theoretical method is used in the calculation.
+
+
&control
+  !common name of output files
+  sysname = 'C2H2'
+/
+
+
+
+
sysname is a prefix for filenames of output files.
+
+
&units
+  !units used in input and output files
+  unit_system = 'A_eV_fs'
+/
+
+
+
+
unit_system specifies which unit system is used in the input and output files.
+
+
&system
+  !periodic boundary condition
+  yn_periodic = 'n'
+
+  !number of elements, atoms, electrons and states(orbitals)
+  nelem  = 2
+  natom  = 4
+  nelec  = 10
+  nstate = 6
+/
+
+
+
+
yn_periodic specifies whether or not periodic boundary condition is applied.
+
nelem is the number of elements in the system.
+
natom is the number of atoms in the system.
+
nelec is the number of electrons in the system.
+
nstate is the number of orbitals that are used in the calculation.
+
+
&pseudo
+  !name of input pseudo potential file
+  file_pseudo(1) = './C_rps.dat'
+  file_pseudo(2) = './H_rps.dat'
+
+  !atomic number of element
+  izatom(1) = 6
+  izatom(2) = 1
+
+  !angular momentum of pseudopotential that will be treated as local
+  lloc_ps(1) = 1
+  lloc_ps(2) = 0
+  !--- Caution ---------------------------------------!
+  ! Indices must correspond to those in &atomic_coor. !
+  !---------------------------------------------------!
+/
+
+
+
+
file_pseudo(n) specifies the filename of the pseudopotential file of the n-th element.
+
izatom(n) is the atomic number of the n-th element.
+
lloc_ps(n) specifies which angular momentum component is chosen as the local potential for the n-th element.
+
+
&functional
+  !functional('PZ' is Perdew-Zunger LDA: Phys. Rev. B 23, 5048 (1981).)
+  xc = 'PZ'
+/
+
+
+
+
xc specifies the exchange-correlation potential to be used in the calculation.
+
+
&rgrid
+  !spatial grid spacing(x,y,z)
+  dl(1:3) = 0.25d0, 0.25d0, 0.25d0
+
+  !number of spatial grids(x,y,z)
+  num_rgrid(1:3) = 64, 64, 64
+/
+
+
+
+
dl(i) specifies the spatial grid spacing in i-th direction.
+
num_rgrid(i) specifies the number of grid points in i-th direction.
+
+
&tgrid
+  !time step size and number of time grids(steps)
+  dt = 1.25d-3
+  nt = 5000
+/
+
+
+
+
dt specifies the time step.
+
nt is the number of time steps for the time propagation.
+
+
&emfield
+  !envelope shape of the incident pulse('impulse': impulsive field)
+  ae_shape1 = 'impulse'
+
+  !polarization unit vector(real part) for the incident pulse(x,y,z)
+  epdir_re1(1:3) = 0.0d0, 0.0d0, 1.0d0
+  !--- Caution ---------------------------------------------------------!
+  ! Definition of the incident pulse is written in:                     !
+  ! https://www.sciencedirect.com/science/article/pii/S0010465518303412 !
+  !---------------------------------------------------------------------!
+/
+
+
+
+
ae_shape1 specifies the envelope of the field. For a linear response calculation, as_shape1='impulse' is used. It indicates that a weak impulsive perturbation is applied at \(t=0\).
+
epdir_re1(i) specifies the i-th component of the real part of the polarization unit vector.
+
+
&analysis
+  !energy grid size and number of energy grids for output files
+  de      = 1.0d-2
+  nenergy = 3000
+/
+
+
+
+
de specifies the energy grid size for frequency-domain analysis.
+
nenergy specifies the number of energy grid points for frequency-domain analysis.
+
+
&atomic_coor
+  !cartesian atomic coodinates
+  'C'    0.000000    0.000000    0.599672  1
+  'H'    0.000000    0.000000    1.662257  2
+  'C'    0.000000    0.000000   -0.599672  1
+  'H'    0.000000    0.000000   -1.662257  2
+  !--- Format ---------------------------------------------------!
+  ! 'symbol' x y z index(correspond to that of pseudo potential) !
+  !--------------------------------------------------------------!
+/
+
+
+
+
&atomic_coor specifies spatial coordinates of atoms.
+
+
+
+

Execusion

+

Before execusion, remember to copy the directory restart that is created in the ground +state calculation as data_for_restart in the present directory. +In a multiprocess environment, calculation will be executed as:

+
$ mpiexec -n NPROC salmon < C2H2_rt_response.inp > C2H2_rt_response.out
+
+
+

where NPROC is the number of MPI processes. +A standard output will be stored in the file C2H2_rt_response.out.

+
+
+

Output files

+

After the calculation, following output files are created in the +directory that you run the code in addition to the standard output file,

+ ++++ + + + + + + + + + + + + + + + + + + + + +
file namedescription
C2H2_response.datapolarizability and oscillator +strength distribution as +functions of energy
C2H2_rt.data
+
components of +change of dipole moment +(electrons/plus definition)
+
and total dipole moment +(electrons/minus + ions/plus) +as functions of time
+
+
C2H2_rt_energy.datatotal energy and electronic +excitation energy +as functions of time
PS_C_KY_n.datinformation on pseodupotential +file for carbon atom
PS_H_KY_n.datinformation on pseodupotential +file for hydrogen atom
+
+
You may download the above files (zipped file) from:
+ +
+

We first explain the standard output file. In the beginning of the file, +input variables used in the calculation are shown.

+
##############################################################################
+# SALMON: Scalable Ab-initio Light-Matter simulator for Optics and Nanoscience
+#
+#                             Version 2.0.1
+##############################################################################
+  Libxc: [disabled]
+   theory= tddft_response
+
+ Total time step      =        5000
+ Time step[fs]        =  1.250000000000000E-003
+ Energy range         =        3000
+ Energy resolution[eV]=  1.000000000000000E-002
+ Field strength[a.u.] =  1.000000000000000E-002
+   use of real value orbitals =  F
+ ======
+ .........
+
+
+

After that, the time evolution loop starts. At every 10 iteration steps, +the time, dipole moments in three Cartesian directions, the total number +of electrons, the total energy, and the number of iterations solving +the Poisson equation are displayed.

+
 time-step    time[fs]                           Dipole moment(xyz)[A]      electrons  Total energy[eV]    iterVh
+#----------------------------------------------------------------------
+      10    0.01250000 -0.56521137E-07 -0.28812833E-07 -0.25558983E-01    10.00000000     -339.68150366   34
+      20    0.02500000 -0.19835467E-06 -0.10147641E-06 -0.45169126E-01     9.99999999     -339.68147442   49
+      30    0.03750000 -0.37937911E-06 -0.19537418E-06 -0.57843871E-01     9.99999999     -339.68146891   45
+      40    0.05000000 -0.56465010E-06 -0.29324906E-06 -0.64072126E-01     9.99999999     -339.68146804   38
+      50    0.06250000 -0.73343753E-06 -0.38431758E-06 -0.65208422E-01     9.99999999     -339.68146679   25
+      60    0.07500000 -0.87559727E-06 -0.46276791E-06 -0.62464066E-01     9.99999999     -339.68146321   35
+      70    0.08750000 -0.98769124E-06 -0.52594670E-06 -0.56740338E-01     9.99999998     -339.68145535   20
+      80    0.10000000 -0.10701350E-05 -0.57309375E-06 -0.48483747E-01     9.99999998     -339.68144840   40
+      90    0.11250000 -0.11253992E-05 -0.60455485E-06 -0.38296037E-01     9.99999998     -339.68144186   21
+
+
+

Explanations of other output files are given below:

+

C2H2_rt.data

+

Results of time evolution calculation for vector potential, electric field, and dipole moment. +In the first several lines, explanations of included data are given.

+
# Real time calculation:
+# Ac_ext: External vector potential field
+# E_ext: External electric field
+# Ac_tot: Total vector potential field
+# E_tot: Total electric field
+# ddm_e: Change of dipole moment (electrons/plus definition)
+# dm: Total dipole moment (electrons/minus + ions/plus)
+# 1:Time[fs] 2:Ac_ext_x[fs*V/Angstrom] 3:Ac_ext_y[fs*V/Angstrom] 4:Ac_ext_z[fs*V/Angstrom]
+# 5:E_ext_x[V/Angstrom] 6:E_ext_y[V/Angstrom] 7:E_ext_z[V/Angstrom]
+# 8:Ac_tot_x[fs*V/Angstrom] 9:Ac_tot_y[fs*V/Angstrom] 10:Ac_tot_z[fs*V/Angstrom]
+# 11:E_tot_x[V/Angstrom] 12:E_tot_y[V/Angstrom] 13:E_tot_z[V/Angstrom]
+# 14:ddm_e_x[Angstrom] 15:ddm_e_y[Angstrom] 16:ddm_e_z[Angstrom] 17:dm_x[Angstrom]
+# 18:dm_y[Angstrom] 19:dm_z[Angstrom]
+
+
+

Using first column (time in femtosecond) and 19th column (dipole moment in \(z\) direction), +the following graph can be drawn.

+
+
_images/exc2-dipole.png +
+

The dipole moment shows oscillations in femtosecond time scale that reflec electronic excitations.

+

C2H2_response.data

+

Time-frequency Fourier transformation of the dipole moment gives +the polarizability and the strength function.

+
# Fourier-transform spectra:
+# alpha: Polarizability
+# df/dE: Strength function
+# 1:Energy[eV] 2:Re(alpha_x)[Augstrom^2/V] 3:Re(alpha_y)[Augstrom^2/V]
+# 4:Re(alpha_z)[Augstrom^2/V] 5:Im(alpha_x)[Augstrom^2/V] 6:Im(alpha_y)[Augstrom^2/V]
+# 7:Im(alpha_z)[Augstrom^2/V] 8:df_x/dE[none] 9:df_y/dE[none] 10:df_z/dE[none]
+
+
+

Using first column (energy in electron-volt) and 10th column (oscillator strength distribution in \(z\) direction), +the following graph can be drawn.

+
+
_images/exc2-response.png +
+

There appears many peaks above the HOMO-LUMO gap energy. +The strong excitation appears at around 9.3 eV.

+

C2H2_rt_energy.data

+

Energies are stored as functions of time.

+
# Real time calculation:
+# Eall: Total energy
+# Eall0: Initial energy
+# 1:Time[fs] 2:Eall[eV] 3:Eall-Eall0[eV]
+
+
+

Eall and Eall-Eall0 are total energy and electronic excitation energy, respectively.

+
+
+
+

Exercise-3: Electron dynamics in C2H2 molecule under a pulsed electric field

+

In this exercise, we learn the calculation of the electron dynamics in +the acetylene (C2H2) molecule under a pulsed electric field, solving the +time-dependent Kohn-Sham equation. As outputs of the calculation, such +quantities as the total energy and the electric dipole moment of the +system as functions of time are calculated. This tutorial should be +carried out after finishing the ground state calculation that was +explained in Exercise-1.

+

In the calculation, a pulsed electric field specified by the following +vector potential will be used,

+

\(A(t) = - \frac{E_0}{\omega} \hat z \cos^2 \frac{\pi}{T} \left( t - \frac{T}{2} \right) \sin \omega \left( t - \frac{T}{2} \right), \hspace{5mm} (0 < t < T).\)

+

The electric field is given by \(E(t) = -(1/c)(dA(t)/dt)\). +The parameters that characterize the pulsed field such as the amplitude \(E_0\), +frequency \(\omega\), pulse duration \(T\), polarization direction \(\hat z\), +are specified in the input file. +In the time dependent Kohn-Sham equation, the external field is included as +the scalar potential, \(V_{\rm ext}(\mathbf{r},t) = eE(t)z\).

+
+

Input files

+

To run the code, following files are necessary:

+ ++++ + + + + + + + + + + + + + + + + + +
file namedescription
C2H2_rt_pulse.inpinput file that contain input +keywords and their values.
C_rps.datpseodupotential file for carbon
H_rps.datpseudopotential file for hydrogen
restart
+
directory created in the ground state calculation
+
(rename the directory from data_for_restart to restart)
+
+
+

First three files are prepared in the directory SALMON/samples/exercise_03_C2H2_rt/. +The file C2H2_rt_pulse.inp that contains input keywords and their values. +The pseudopotential files should be the same as those used in the ground state calculation. +In the directory restart, those files created in the ground state calculation and stored +in the directory data_for_restart are included. +Therefore, copy the directory as cp -R data_for_restart restart +if you calculate at the same directory as you did the ground state calculation.

+

In the input file C2H2_rt_pulse.inp, input keywords are specified. +Most of them are mandatory to execute the calculation of +electron dynamics induced by a pulsed electric field. +This will help you to prepare the input file for other systems and other +pulsed electric fields that you want to calculate. A complete list of +the input keywords that can be used in the input file can be found in +List of input keywords.

+
!########################################################################################!
+! Excercise 03:  Electron dynamics in C2H2 molecule under a pulsed electric field        !
+!----------------------------------------------------------------------------------------!
+! * The detail of this excercise is explained in our manual(see chapter: 'Exercises').   !
+!   The manual can be obtained from: https://salmon-tddft.jp/documents.html              !
+! * Input format consists of group of keywords like:                                     !
+!     &group                                                                             !
+!       input keyword = xxx                                                              !
+!     /                                                                                  !
+!   (see chapter: 'List of input keywords' in the manual)                                !
+!----------------------------------------------------------------------------------------!
+! * Conversion from unit_system = 'a.u.' to 'A_eV_fs':                                   !
+!   Length: 1 [a.u.] = 0.52917721067    [Angstrom]                                       !
+!   Energy: 1 [a.u.] = 27.21138505      [eV]                                             !
+!   Time  : 1 [a.u.] = 0.02418884326505 [fs]                                             !
+!----------------------------------------------------------------------------------------!
+! * Copy the ground state data directory('data_for_restart') (or make symbolic link)     !
+!   calculated in 'samples/exercise_01_C2H2_gs/' and rename the directory to 'restart/'  !
+!   in the current directory.                                                            !
+!########################################################################################!
+
+&calculation
+  !type of theory
+  theory = 'tddft_pulse'
+/
+
+
+
+
theory specifies which theoretical method is used in the calculation.
+
+
&control
+  !common name of output files
+  sysname = 'C2H2'
+/
+
+
+
+
sysname is a prefix for filenames of output files.
+
+
&units
+  !units used in input and output files
+  unit_system = 'A_eV_fs'
+/
+
+
+
+
unit_system specifies which unit system is used in the input and output files.
+
+
&system
+  !periodic boundary condition
+  yn_periodic = 'n'
+
+  !number of elements, atoms, electrons and states(orbitals)
+  nelem  = 2
+  natom  = 4
+  nelec  = 10
+  nstate = 6
+/
+
+
+
+
yn_periodic specifies whether or not periodic boundary condition is applied.
+
nelem is the number of elements in the system.
+
natom is the number of atoms in the system.
+
nelec is the number of electrons in the system.
+
nstate is the number of orbitals that are used in the calculation.
+
+
&pseudo
+  !name of input pseudo potential file
+  file_pseudo(1) = './C_rps.dat'
+  file_pseudo(2) = './H_rps.dat'
+
+  !atomic number of element
+  izatom(1) = 6
+  izatom(2) = 1
+
+  !angular momentum of pseudopotential that will be treated as local
+  lloc_ps(1) = 1
+  lloc_ps(2) = 0
+  !--- Caution ---------------------------------------!
+  ! Indices must correspond to those in &atomic_coor. !
+  !---------------------------------------------------!
+/
+
+
+
+
file_pseudo(n) specifies the filename of the pseudopotential file of the n-th element.
+
izatom(n) is the atomic number of the n-th element.
+
lloc_ps(n) specifies which angular momentum component is chosen as the local potential for the n-th element.
+
+
&functional
+  !functional('PZ' is Perdew-Zunger LDA: Phys. Rev. B 23, 5048 (1981).)
+  xc = 'PZ'
+/
+
+
+
+
xc specifies the exchange-correlation potential to be used in the calculation.
+
+
&rgrid
+  !spatial grid spacing(x,y,z)
+  dl(1:3) = 0.25d0, 0.25d0, 0.25d0
+
+  !number of spatial grids(x,y,z)
+  num_rgrid(1:3) = 64, 64, 64
+/
+
+
+
+
dl(i) specifies the spatial grid spacing in i-th direction.
+
num_rgrid(i) specifies the number of grid points in i-th direction.
+
+
&tgrid
+  !time step size and number of time grids(steps)
+  dt = 1.25d-3
+  nt = 5000
+/
+
+
+
+
dt specifies the time step.
+
nt is the number of time steps for the time propagation.
+
+
&emfield
+  !envelope shape of the incident pulse('Ecos2': cos^2 type envelope for scalar potential)
+  ae_shape1 = 'Acos2'
+
+  !peak intensity(W/cm^2) of the incident pulse
+  I_wcm2_1 = 5.00d13
+
+  !duration of the incident pulse
+  tw1 = 6.00d0
+
+  !mean photon energy(average frequency multiplied by the Planck constant) of the incident pulse
+  omega1 = 3.10d0
+
+  !polarization unit vector(real part) for the incident pulse(x,y,z)
+  epdir_re1(1:3) = 0.00d0, 0.00d0, 1.00d0
+  !--- Caution ---------------------------------------------------------!
+  ! Definition of the incident pulse is written in:                     !
+  ! https://www.sciencedirect.com/science/article/pii/S0010465518303412 !
+  !---------------------------------------------------------------------!
+/
+
+
+
+
ae_shape1 specifies the envelope of the field.
+
I_wcm2_1 specify the intensity of the pulse in unit of W/cm2.
+
tw1 specifies the duration of the pulse.
+
omega1 specifies the mean photon energy of the pulse.
+
epdir_re1(i) specifies the i-th component of the real part of the polarization unit vector.
+
+
&analysis
+  !energy grid size and number of energy grids for output files
+  de      = 1.0d-2
+  nenergy = 10000
+/
+
+
+
+
de specifies the energy grid size for frequency-domain analysis.
+
nenergy specifies the number of energy grid points for frequency-domain analysis.
+
+
&atomic_coor
+  !cartesian atomic coodinates
+  'C'    0.000000    0.000000    0.599672  1
+  'H'    0.000000    0.000000    1.662257  2
+  'C'    0.000000    0.000000   -0.599672  1
+  'H'    0.000000    0.000000   -1.662257  2
+  !--- Format ---------------------------------------------------!
+  ! 'symbol' x y z index(correspond to that of pseudo potential) !
+  !--------------------------------------------------------------!
+/
+
+
+
+
&atomic_coor specifies spatial coordinates of atoms.
+
+
+
+

Execusion

+

Before execusion, remember to copy the directory restart that is created in the ground +state calculation as data_for_restart in the present directory. +In a multiprocess environment, calculation will be executed as:

+
$ mpiexec -n NPROC salmon < C2H2_rt_pulse.inp > C2H2_rt_pulse.out
+
+
+

where NPROC is the number of MPI processes. +A standard output will be stored in the file C2H2_rt_pulse.out.

+
+
+

Output files

+

After the calculation, following output files are created in the +directory that you run the code in addition to the standard output file,

+ ++++ + + + + + + + + + + + + + + + + + + + + +
file namedescription
C2H2_pulse.datatime-frequency Fourier transform +of dipole moment
C2H2_rt.data
+
components of +change of dipole moment +(electrons/plus definition)
+
and total dipole moment +(electrons/minus + ions/plus) +as functions of time
+
+
C2H2_rt_energy.datatotal energy and electronic +excitation energy +as functions of time
PS_C_KY_n.datinformation on pseodupotential +file for carbon atom
PS_H_KY_n.datinformation on pseodupotential +file for hydrogen atom
+
+
You may download the above files (zipped file) from:
+ +
+

We first explain the standard output file. In the beginning of the file, input variables +used in the calculation are shown.

+
##############################################################################
+# SALMON: Scalable Ab-initio Light-Matter simulator for Optics and Nanoscience
+#
+#                             Version 2.0.1
+##############################################################################
+  Libxc: [disabled]
+   theory= tddft_pulse
+
+ Total time step      =        5000
+ Time step[fs]        =  1.250000000000000E-003
+ Energy range         =       10000
+ Energy resolution[eV]=  1.000000000000000E-002
+Laser frequency     = 3.10[eV]
+Pulse width of laser=      6.00000000[fs]
+Laser intensity     =  0.50000000E+14[W/cm^2]
+   use of real value orbitals =  F
+ ======
+ ........
+
+
+

After that, the time evolution loop starts. At every 10 iteration steps, +the time, dipole moments in three Cartesian directions, the total number of electrons, +the total energy, and the number of iterations solving the Poisson equation +are displayed.

+
 time-step    time[fs]                           Dipole moment(xyz)[A]      electrons  Total energy[eV]    iterVh
+#----------------------------------------------------------------------
+      10    0.01250000 -0.57275542E-07 -0.29197105E-07 -0.74600728E-06    10.00000000     -339.69524047    1
+      20    0.02500000 -0.20616352E-06 -0.10537273E-06 -0.10256205E-04    10.00000000     -339.69524348    1
+      30    0.03750000 -0.40063325E-06 -0.20597522E-06 -0.47397133E-04    10.00000000     -339.69524090    3
+      40    0.05000000 -0.59093535E-06 -0.30630513E-06 -0.13774845E-03    10.00000000     -339.69524287    1
+      50    0.06250000 -0.75588343E-06 -0.39552925E-06 -0.31097825E-03    10.00000000     -339.69523949    5
+      60    0.07500000 -0.89221538E-06 -0.47142217E-06 -0.59735355E-03    10.00000000     -339.69523784   11
+      70    0.08750000 -0.99769538E-06 -0.53192187E-06 -0.10253308E-02    10.00000000     -339.69523285    5
+      80    0.10000000 -0.10738281E-05 -0.57676878E-06 -0.16195168E-02     9.99999999     -339.69522482   19
+      90    0.11250000 -0.11250289E-05 -0.60722757E-06 -0.23985719E-02     9.99999999     -339.69521092    2
+
+
+

Explanations of other output files are given below:

+

C2H2_rt.data

+

Results of time evolution calculation for vector potential, electric field, and dipole moment. +In the first several lines, explanations of data included data are given.

+
# Real time calculation:
+# Ac_ext: External vector potential field
+# E_ext: External electric field
+# Ac_tot: Total vector potential field
+# E_tot: Total electric field
+# ddm_e: Change of dipole moment (electrons/plus definition)
+# dm: Total dipole moment (electrons/minus + ions/plus)
+# 1:Time[fs] 2:Ac_ext_x[fs*V/Angstrom] 3:Ac_ext_y[fs*V/Angstrom] 4:Ac_ext_z[fs*V/Angstrom]
+# 5:E_ext_x[V/Angstrom] 6:E_ext_y[V/Angstrom] 7:E_ext_z[V/Angstrom]
+# 8:Ac_tot_x[fs*V/Angstrom] 9:Ac_tot_y[fs*V/Angstrom] 10:Ac_tot_z[fs*V/Angstrom]
+# 11:E_tot_x[V/Angstrom] 12:E_tot_y[V/Angstrom] 13:E_tot_z[V/Angstrom]
+# 14:ddm_e_x[Angstrom] 15:ddm_e_y[Angstrom] 16:ddm_e_z[Angstrom] 17:dm_x[Angstrom]
+# 18:dm_y[Angstrom] 19:dm_z[Angstrom]
+
+
+

The applied electric field is drawn using the first column (time in femtosecond) and the 7th column +(electric field in \(z\) direction in Volt per Angstrom).

+
+
_images/exc3-Efield.png +
+

The induced dipole moment is drawn using the first column (time in femtosecond) and 19th column +(dipole moment in \(z\) direction). +It shows an oscillation similar to the applied electric field. However, the response is not linear +since the applied electric field is rather strong.

+
+
_images/exc3-dipole.png +
+

C2H2_pulse.data

+

Time-frequency Fourier transformation of the dipole moment. +In the first several lines, explanations of data included data are given.

+
# Fourier-transform spectra:
+# energy: Frequency
+# dm: Dopile moment
+# 1:energy[eV] 2:Re(dm_x)[fs*Angstrom] 3:Re(dm_y)[fs*Angstrom] 4:Re(dm_z)[fs*Angstrom]
+# 5:Im(dm_x)[fs*Angstrom] 6:Im(dm_y)[fs*Angstrom] 7:Im(dm_z)[fs*Angstrom]
+# 8:|dm_x|^2[fs^2*Angstrom^2] 9:|dm_y|^2[fs^2*Angstrom^2] 10:|dm_z|^2[fs^2*Angstrom^2]
+
+
+

The spectrum of the induced dipole moment, \(|d(\omega)|^2\) is shown in logarithmic scale as a function +of the energy, \(\hbar \omega\). High harmonic generations are visible in the spectrum.

+
+
_images/exc3-spectrum.png +
+

C2H2_rt_energy.data

+

Energies are stored as functions of time. +In the first several lines, explanations of data included data are given.

+
# Real time calculation:
+# Eall: Total energy
+# Eall0: Initial energy
+# 1:Time[fs] 2:Eall[eV] 3:Eall-Eall0[eV]
+
+
+

Eall and Eall-Eall0 are total energy and electronic excitation energy, respectively. +The figure below shows the electronic excitation energy as a function of time, +using the first column (time in femtosecond) and the 3rd column (Eall-Eall0). +Although the frequency is below the HOMO-LUMO gap energy, electronic excitations take +place because of nonlinear absorption process.

+
+
_images/exc3-Eex.png +
+
+
+

Additional exercise

+

If we change parameters of the applied electric field, we find a drastic change +in the electronic excitations. In the example below, we increase the intensity +from I_wcm2_1 = 5.00d13 to I_wcm2_1 = 1.00d12 and changes the frequency +from omega1 = 3.10d0 to omega1 = 9.28d0. The new frequency corresponds +to the resonant excitation energy seen in the linear response analysis shown in +in Exercise-2.

+

The change in the input file is shown below.

+
&emfield
+  !envelope shape of the incident pulse('Ecos2': cos^2 type envelope for scalar potential)
+  ae_shape1 = 'Acos2'
+
+  !peak intensity(W/cm^2) of the incident pulse
+  I_wcm2_1 = 1.00d12
+
+  !duration of the incident pulse
+  tw1 = 6.00d0
+
+  !mean photon energy(average frequency multiplied by the Planck constant) of the incident pulse
+  omega1 = 9.28d0
+
+  !polarization unit vector(real part) for the incident pulse(x,y,z)
+  epdir_re1(1:3) = 0.00d0, 0.00d0, 1.00d0
+
+
+

The applied electric field shows a rapid oscillation.

+
+
_images/exc3a-Efield.png +
+

The induced dipole moment also shows a rapid oscillation and does not +decrease even though the electric field decreases. This is because the frequency of the +applied electric field coincides with the excitation energy of the molecule.

+
+
_images/exc3a-dipole.png +
+

The electronic excitation energy also shows a monotonic increase. +Although the strength of the applied electric field is much smaller than +the previous case, the amount of the excitation energy is larger, again +due to the resonant excitation.

+
+
_images/exc3a-Eex.png +
+
+
+
+
+

Crystalline silicon (periodic solids)

+
+

Exercise-4: Ground state of crystalline silicon

+

In this exercise, we learn the the ground state calculation of the crystalline silicon that has a diamond structure. +A cubic unit cell that contains eight silicon atoms is adopted in the calculation.

+
+
_images/exc4-diamond.png +
+

This exercise will be useful to learn how to set up calculations in SALMON for any periodic systems such as crystalline solid.

+
+

Input files

+

To run the code, following files in the directory SALMON/samples/exercise_04_bulkSi_gs/ are used:

+ ++++ + + + + + + + + + + + +
file namedescription
Si_gs.inpinput file that contains input +keywords and their values
Si_rps.datpseodupotential file for silicon +atom
+

In the input file Si_gs.inp, input keywords are specified. +Most of them are mandatory to execute the ground state calculation. +This will help you to prepare an input file for other systems that you +want to calculate. A complete list of the input keywords that can be +used in the input file can be found in +List of input keywords.

+
!########################################################################################!
+! Excercise 04: Ground state of crystalline silicon(periodic solids)                     !
+!----------------------------------------------------------------------------------------!
+! * The detail of this excercise is explained in our manual(see chapter: 'Exercises').   !
+!   The manual can be obtained from: https://salmon-tddft.jp/documents.html              !
+! * Input format consists of group of keywords like:                                     !
+!     &group                                                                             !
+!       input keyword = xxx                                                              !
+!     /                                                                                  !
+!   (see chapter: 'List of input keywords' in the manual)                                !
+!----------------------------------------------------------------------------------------!
+! * Conversion from unit_system = 'a.u.' to 'A_eV_fs':                                   !
+!   Length: 1 [a.u.] = 0.52917721067    [Angstrom]                                       !
+!   Energy: 1 [a.u.] = 27.21138505      [eV]                                             !
+!   Time  : 1 [a.u.] = 0.02418884326505 [fs]                                             !
+!########################################################################################!
+
+&calculation
+  !type of theory
+  theory = 'dft'
+/
+
+
+
+
theory specifies which theoretical method is used in the calculation.
+
+
&control
+  !common name of output files
+  sysname = 'Si'
+/
+
+
+
+
sysname is a prefix for filenames of output files.
+
+
&units
+  !units used in input and output files
+  unit_system = 'A_eV_fs'
+/
+
+
+
+
unit_system specifies which unit system is used in the input and output files.
+
+
&system
+  !periodic boundary condition
+  yn_periodic = 'y'
+
+  !grid box size(x,y,z)
+  al(1:3) = 5.43d0, 5.43d0, 5.43d0
+
+  !number of elements, atoms, electrons and states(bands)
+  nelem  = 1
+  natom  = 8
+  nelec  = 32
+  nstate = 32
+/
+
+
+
+
yn_periodic specifies whether or not periodic boundary condition is applied.
+
al(i) specifies the side length of the unit cell.
+
nelem is the number of elements in the system.
+
natom is the number of atoms in the system.
+
nelec is the number of electrons in the system.
+
nstate is the number of orbitals that are used in the calculation.
+
+
&pseudo
+  !name of input pseudo potential file
+  file_pseudo(1) = './Si_rps.dat'
+
+  !atomic number of element
+  izatom(1) = 14
+
+  !angular momentum of pseudopotential that will be treated as local
+  lloc_ps(1) = 2
+  !--- Caution -------------------------------------------!
+  ! Index must correspond to those in &atomic_red_coor.   !
+  !-------------------------------------------------------!
+/
+
+
+
+
file_pseudo(n) specifies the filename of the pseudopotential file of the n-th element.
+
izatom(n) is the atomic number of the n-th element.
+
lloc_ps(n) specifies which angular momentum component is chosen as the local potential for the n-th element.
+
+
&functional
+  !functional('PZ' is Perdew-Zunger LDA: Phys. Rev. B 23, 5048 (1981).)
+  xc = 'PZ'
+/
+
+
+
+
xc specifies the exchange-correlation potential to be used in the calculation.
+
+
&rgrid
+  !number of spatial grids(x,y,z)
+  num_rgrid(1:3) = 12, 12, 12
+/
+
+
+
+
num_rgrid(i) specifies the number of real-space grid point in i-th direction.
+
+
&kgrid
+  !number of k-points(x,y,z)
+  num_kgrid(1:3) = 4, 4, 4
+/
+
+
+
+
num_kgrid(i) specifies the number of k-points for i-th direction discretizing the Brillouin zone.
+
+
&scf
+  !maximum number of scf iteration and threshold of convergence
+  nscf      = 300
+  threshold = 1.0d-9
+/
+
+
+
+
nscf specifies the maximum number of SCF iterations.
+
threshold specifies the threshold to judge the convergence.
+
+
&atomic_red_coor
+  !cartesian atomic reduced coodinates
+  'Si'       .0      .0      .0      1
+  'Si'       .25     .25     .25     1
+  'Si'       .5      .0      .5      1
+  'Si'       .0      .5      .5      1
+  'Si'       .5      .5      .0      1
+  'Si'       .75     .25     .75     1
+  'Si'       .25     .75     .75     1
+  'Si'       .75     .75     .25     1
+  !--- Format ---------------------------------------------------!
+  ! 'symbol' x y z index(correspond to that of pseudo potential) !
+  !--------------------------------------------------------------!
+/
+
+
+
+
&atomic_red_coor specifies spatial coordinates of atoms in reduced coordinate system.
+
+
+
+

Execusion

+

In a multiprocess environment, calculation will be executed as:

+
$ mpiexec -n NPROC salmon < Si_gs.inp > Si_gs.out
+
+
+

where NPROC is the number of MPI processes. A standard output will be stored in the file Si_gs.out.

+
+
+

Output files

+

After the calculation, following output files and a directory are created in the +directory that you run the code in addition to the standard output file,

+ ++++ + + + + + + + + + + + + + + + + + + + + +
namedescription
Si_info.datainformation on ground state +solution
Si_eigen.dataenergy eigenvalues of orbitals
Si_k.datak-point distribution
PS_Si_KY_n.datinformation on pseodupotential +file for silicon atom
data_for_restartdirectory where files used in +the real-time calculation are +contained
+
+
You may download the above files (zipped file, except for the directory data_for_restart) from:
+ +
+

We first explain the standard output file. In the beginning of the file, +input variables used in the calculation are shown.

+
##############################################################################
+# SALMON: Scalable Ab-initio Light-Matter simulator for Optics and Nanoscience
+#
+#                             Version 2.0.1
+##############################################################################
+  Libxc: [disabled]
+   theory= dft
+   use of real value orbitals =  F
+ r-space parallelization: off
+ ======
+ MPI distribution:
+   nproc_k     :          16
+   nproc_ob    :           1
+   nproc_rgrid :           1           1           1
+ OpenMP parallelization:
+   number of threads :          64
+ .........
+
+
+

After that, the SCF loop starts. At each iteration step, the total energy as well as orbital +energies and some other quantities are displayed.

+
-----------------------------------------------
+ iter=     1     Total Energy=       314.78493406     Gap=   -95.88543131
+ k=           1
+     1        37.5762      2        63.8589      3        58.1850      4        43.0042
+     5        61.5347      6        29.5604      7        41.5986      8        39.3545
+     9        48.5641     10        68.0003     11        75.5196     12        85.4113
+ ..........
+    21        94.1224     22        53.0821     23        72.0170     24        46.7797
+    25        88.6077     26        98.2698     27        42.8071     28        65.0812
+    29        60.3648     30        39.6787     31        83.5629     32        62.7365
+
+ iter and int_x|rho_i(x)-rho_i-1(x)|dx/nelec        =      1 0.49478519E+00
+ Ne=   32.0000000000000
+ -----------------------------------------------
+ iter=     2     Total Energy=        62.72724688     Gap=   -77.31200657
+ k=           1
+     1        14.4913      2        32.6869      3        30.3561      4        20.6816
+     5        30.3907      6        16.9184      7        22.2967      8        18.5338
+     9        29.0117     10        41.9687     11        42.3490     12        54.6262
+..........
+
+
+

When the convergence criterion is satisfied, the SCF calculation ends.

+
 iter=    60     Total Energy=      -850.76385275     Gap=     1.06020364
+ k=           1
+     1        -3.7745      2        -3.0158      3        -3.0158      4        -3.0158
+     5        -0.4300      6        -0.4300      7        -0.4300      8         0.3765
+     9         3.9530     10         3.9530     11         3.9530     12         4.6110
+..........
+    21         9.6233     22         9.6233     23         9.6956     24         9.9111
+    25        11.0259     26        11.0259     27        11.4165     28        11.5976
+    29        11.9826     30        11.9887     31        12.0967     32        12.3585
+
+ iter and int_x|rho_i(x)-rho_i-1(x)|dx/nelec        =     60 0.77889300E-09
+ Ne=   32.0000000000000
+  #GS converged at    61  : 0.77889300E-09
+ ===== force =====
+     1  0.60775985E-08  0.15425240E-07 -0.22474791E-07
+     2 -0.10689345E-06  0.88233132E-07  0.35122981E-09
+     3  0.39762202E-07 -0.23921918E-07  0.11855231E-07
+     4 -0.79441825E-07 -0.28978042E-07 -0.34109698E-07
+     5  0.37990526E-07  0.67211638E-08  0.20384753E-07
+     6  0.96418986E-07 -0.70404285E-07  0.10198912E-06
+     7  0.16145540E-07  0.30561301E-07 -0.63738382E-07
+     8  0.26042178E-07  0.30977639E-07 -0.40587816E-07
+ band information-----------------------------------------
+ Bottom of VB -0.194818046940532
+ Top of VB  0.216611832367042
+ Bottom of CB  0.255573599266334
+ Top of CB  0.533770712688357
+ Fundamental gap  3.896176689929157E-002
+ BG between same k-point  3.896176691206812E-002
+ Physicaly upper bound of CB for DOS  0.453918744010958
+ Physicaly upper bound of eps(omega)  0.609598295602846
+ ---------------------------------------------------------
+ Bottom of VB[eV]  -5.30126888998779
+ Top of VB[eV]   5.89430797692564
+ Bottom of CB[eV]   6.95451161825061
+ Top of CB[eV]   14.5246403913758
+ Fundamental gap[eV]   1.06020364132497
+ BG between same k-point[eV]   1.06020364167264
+ Physicaly upper bound of CB for DOS[eV]   12.3517577246945
+ Physicaly upper bound of eps(omega)[eV]   16.5880139474728
+ ---------------------------------------------------------
+  writing restart data...
+  writing completed.
+
+
+

In the directory data_for_restart, files that will be used in the next-step +time evolution calculations are stored.

+

Other output files include following information.

+

Si_info.data

+

Orbital and total energies as well as parameters specified in the input file.

+
Total number of iteration =           60
+
+Number of states =           32
+Number of electrons =           32
+
+Total energy (eV) =   -850.763852754463
+1-particle energies (eV)
+    1        -3.7745      2        -3.0158      3        -3.0158      4        -3.0158
+    5        -0.4300      6        -0.4300      7        -0.4300      8         0.3765
+    9         3.9530     10         3.9530     11         3.9530     12         4.6110
+
+
+

Si_eigen.data

+

Orbital energies.

+
#esp: single-particle energies (eigen energies)
+#occ: occupation numbers, io: orbital index
+# 1:io, 2:esp[eV], 3:occ
+k=     1,  spin=     1
+     1  -0.3774501171245852E+001   0.2000000000000000E+001
+     2  -0.3015778973884847E+001   0.2000000000000000E+001
+     3  -0.3015778969794385E+001   0.2000000000000000E+001
+
+
+

Si_k.data

+

Data of k-points.

+
# k-point distribution
+# ik: k-point index
+# kx,ky,kz: Reduced coordinate of k-points
+# wk: Weight of k-point
+# 1:ik[none] 2:kx[none] 3:ky[none] 4:kz[none] 5:wk[none]
+     1 -0.375000000000000E+000 -0.375000000000000E+000 -0.375000000000000E+000  0.156250000000000E-001
+     2 -0.125000000000000E+000 -0.375000000000000E+000 -0.375000000000000E+000  0.156250000000000E-001
+     3  0.125000000000000E+000 -0.375000000000000E+000 -0.375000000000000E+000  0.156250000000000E-001
+
+
+
+
+
+

Exercise-5: Dielectric function of crystalline silicon

+

In this exercise, we learn the linear response calculation of the crystalline silicon. +A cubic unit cell that contains eight silicon atoms is used in the calculation. +This exercise should be carried out after finishing the ground state calculation +that was explained in Exercise-4.

+

In this exercise, we calculate a dielectric function of silicon as a final object. +We first summarize definitions of relevant quantities. +We introduce a conductivity in time domain, \(\sigma_{\mu \nu}(t)\), +where \(\mu, \nu\) indicate Cartesian components, \(\mu, \nu = x,y,z\). +It relates the applied electric field \(E_{\nu}(t)\) with the induced +current density averaged over the unit cell volume, \(J_{\mu}(t)\),

+

\(J_{\mu}(t) = \sum_{\nu=x,y,z} \int dt' \sigma_{\mu \nu}(t-t') E_{\nu}(t').\)

+

Integrating the current density over time, we obtain the polarization density as a functioon of time,

+

\(P_{\mu}(t) = \int^t dt' J_{\mu}(t').\)

+

Then, the dielectric function is introduced by

+

\(D_{\mu}(t) = E_{\mu}(t)+4\pi P_{\mu}(t) = \sum_{\nu} \int^t dt' \epsilon_{\mu \nu}(t-t') E_{\nu}(t').\)

+

Frequency-dependent dielectric function \(\epsilon_{\mu \nu}(\omega)\) +is obtained from \(\epsilon_{\mu \nu}(t)\) by taking time-frequency +Fourier transformation.

+

In SALMON, the dielectric function is calculated in the following way. +First the ground state Bloch orbitals \(u_{n{\bf k}}({\bf r})\) that satisfies the +Kohn-Sham equation,

+

\(H_{\bf k} u_{n{\bf k}}({\bf r}) = \epsilon_{n{\bf k}}({\bf r}),\)

+

is calculated. +Then an impulsive force characterized by the magnitude of the +impulse \(I\) is applied to all electrons in \(z\) direction. +This is equivalent to shift the wave vector by +\({\bf k} \rightarrow {\bf k} + I/\hbar \hat z\), +where \(\hat z\) is a unit vector in \(z\) direction. +We make a time evolution calculation with the shifted wave vector as

+

\(i\hbar \frac{\partial}{\partial t} u_{n{\bf k}}({\bf r},t) += +H_{{\bf k} + I/\hbar \hat z}(t) u_{n{\bf k}}({\bf r},t).\)

+

During the time evolution, the electric current density given by

+

\({\bf J}(t) = \frac{-e}{m \Omega} \int d{\bf r} +u_{n{\bf k}}^* \left( -i\hbar\nabla + \hbar {\bf k} + I \hat z \right) u_{n{\bf k}} ++ \delta {\bf J}(t).\)

+

is monitored, where \(\Omega\) is the volume of the unit cell +and \(\delta {\bf J}(t)\) is a current component coming from +nonlocal pseudopootential.

+

After the time evolution calculation, a time-frequency Fourier +transformation is carried out for the electric current density to obtain the +frequency-dependent conductivity by

+

\(\tilde \sigma_{zz}(\omega) = -\frac{e}{I} \int dt e^{i\omega t} J_z(t).\)

+

The dielectric function and the conductivity is related in frequency representation by

+

\(\epsilon_{\mu \nu}(\omega) = \delta_{\mu \nu} + \frac{4\pi i \sigma_{\mu \nu}(\omega)}{\omega}.\)

+

We note that the dielectric function of a crystalline silicon is isotropic, +\(\epsilon_{\mu \nu} = \delta_{\mu \nu} \epsilon(\omega)\).

+
+

Input files

+

To run the code, following files are necessary:

+ ++++ + + + + + + + + + + + + + + +
file namedescription
C2H2_response.inpinput file that contains input +keywords and their values
Si_rps.datpseodupotential file for silicon +atom
restart
+
directory created in the ground +state calculation
+
(rename the directory from +data_for_restart to restart)
+
+
+

First two files are prepared in the directory SALMON/samples/exercise_05_bulkSi_lr/. +The file Si_rt_response.inp contains input keywords and their values. +The pseudoopotential file should be the same as that used in the ground state calculation. +In the directory restart, those files created in the ground state calculation +and stored in the directory data_for_restart are included. +Therefore, coopy the directory as cp -R data_for_restart restart +if you calculate at the same directory as you did the ground state calculation.

+

In the input file Si_rt_response.inp, input keywords are specified. +Most of them are mandatory to execute the linear response calculation. +This will help you to prepare the input file for other systems that you want to calculate. +A complete list of the input keywords that can be used in the input file +can be found in List of input keywords.

+
!########################################################################################!
+! Excercise 05: Dielectric function of crystalline silicon                               !
+!----------------------------------------------------------------------------------------!
+! * The detail of this excercise is explained in our manual(see chapter: 'Exercises').   !
+!   The manual can be obtained from: https://salmon-tddft.jp/documents.html              !
+! * Input format consists of group of keywords like:                                     !
+!     &group                                                                             !
+!       input keyword = xxx                                                              !
+!     /                                                                                  !
+!   (see chapter: 'List of input keywords' in the manual)                                !
+!----------------------------------------------------------------------------------------!
+! * Conversion from unit_system = 'a.u.' to 'A_eV_fs':                                   !
+!   Length: 1 [a.u.] = 0.52917721067    [Angstrom]                                       !
+!   Energy: 1 [a.u.] = 27.21138505      [eV]                                             !
+!   Time  : 1 [a.u.] = 0.02418884326505 [fs]                                             !
+!----------------------------------------------------------------------------------------!
+! * Copy the ground state data directory('data_for_restart') (or make symbolic link)     !
+!   calculated in 'samples/exercise_04_bulkSi_gs/' and rename the directory to 'restart/'!
+!   in the current directory.                                                            !
+!########################################################################################!
+
+&calculation
+  !type of theory
+  theory = 'tddft_response'
+/
+
+
+
+
theory specifies which theoretical method is used in the calculation.
+
+
&control
+  !common name of output files
+  sysname = 'Si'
+/
+
+
+
+
sysname is a prefix for filenames of output files.
+
+
&units
+  !units used in input and output files
+  unit_system = 'A_eV_fs'
+/
+
+
+
+
unit_system specifies which unit system is used in the input and output files.
+
+
&system
+  !periodic boundary condition
+  yn_periodic = 'y'
+
+  !grid box size(x,y,z)
+  al(1:3) = 5.43d0, 5.43d0, 5.43d0
+
+  !number of elements, atoms, electrons and states(bands)
+  nelem  = 1
+  natom  = 8
+  nelec  = 32
+  nstate = 32
+/
+
+
+
+
yn_periodic specifies whether or not periodic boundary condition is applied.
+
al(i) specifies the side length of the unit cell.
+
nelem is the number of elements in the system.
+
natom is the number of atoms in the system.
+
nelec is the number of electrons in the system.
+
nstate is the number of orbitals that are used in the calculation.
+
+
&pseudo
+  !name of input pseudo potential file
+  file_pseudo(1) = './Si_rps.dat'
+
+  !atomic number of element
+  izatom(1) = 14
+
+  !angular momentum of pseudopotential that will be treated as local
+  lloc_ps(1) = 2
+  !--- Caution -------------------------------------------!
+  ! Index must correspond to those in &atomic_red_coor.   !
+  !-------------------------------------------------------!
+/
+
+
+
+
file_pseudo(n) specifies the filename of the pseudopotential file of the n-th element.
+
izatom(n) is the atomic number of the n-th element.
+
lloc_ps(n) specifies which angular momentum component is chosen as the local potential for the n-th element.
+
+
&functional
+  !functional('PZ' is Perdew-Zunger LDA: Phys. Rev. B 23, 5048 (1981).)
+  xc = 'PZ'
+/
+
+
+
+
xc specifies the exchange-correlation potential to be used in the calculation.
+
+
&rgrid
+  !number of spatial grids(x,y,z)
+  num_rgrid(1:3) = 12, 12, 12
+/
+
+
+
+
num_rgrid(i) specifies the number of real-space grid point in i-th direction.
+
+
&kgrid
+  !number of k-points(x,y,z)
+  num_kgrid(1:3) = 4, 4, 4
+/
+
+
+
+
num_kgrid(i) specifies the number of k-points for i-th direction discretizing the Brillouin zone.
+
+
&tgrid
+  !time step size and number of time grids(steps)
+  dt = 0.002d0
+  nt = 6000
+/
+
+
+
+
dt specifies the time step.
+
nt is the number of time steps for the time propagation.
+
+
&emfield
+  !envelope shape of the incident pulse('impulse': impulsive field)
+  ae_shape1 = 'impulse'
+
+  !polarization unit vector(real part) for the incident pulse(x,y,z)
+  epdir_re1(1:3) = 0.00d0, 0.00d0, 1.00d0
+  !--- Caution ---------------------------------------------------------!
+  ! Definition of the incident pulse is written in:                     !
+  ! https://www.sciencedirect.com/science/article/pii/S0010465518303412 !
+  !---------------------------------------------------------------------!
+/
+
+
+
+
ae_shape1 specifies the envelope of the field. For a linear response calculation, as_shape1='impulse' is used. It indicates that a weak impulsive perturbation is applied at \(t=0\).
+
epdir_re1(i) specifies the i-th component of the real part of the polarization unit vector.
+
+
&analysis
+  !energy grid size and number of energy grids for output files
+  de      = 0.01d0
+  nenergy = 2000
+/
+
+
+
+
de specifies the energy grid size for frequency-domain analysis.
+
nenergy specifies the number of energy grid points for frequency-domain analysis.
+
+
&atomic_red_coor
+  !cartesian atomic reduced coodinates
+  'Si'       .0      .0      .0      1
+  'Si'       .25     .25     .25     1
+  'Si'       .5      .0      .5      1
+  'Si'       .0      .5      .5      1
+  'Si'       .5      .5      .0      1
+  'Si'       .75     .25     .75     1
+  'Si'       .25     .75     .75     1
+  'Si'       .75     .75     .25     1
+  !--- Format ---------------------------------------------------!
+  ! 'symbol' x y z index(correspond to that of pseudo potential) !
+  !--------------------------------------------------------------!
+/
+
+
+
+
&atomic_red_coor specifies spatial coordinates of atoms in reduced coordinate system.
+
+
+
+

Execusion

+

In a multiprocess environment, calculation will be executed as:

+
$ mpiexec -n NPROC salmon < Si_rt_response.inp > Si_rt_response.out
+
+
+

where NPROC is the number of MPI processes. A standard output will be stored in the file Si_rt_response.out.

+
+
+

Output files

+

After the calculation, following output files are created in the directory that +you run the code in addition to the standard output file,

+ ++++ + + + + + + + + + + + + + + + + + +
file namedescription
Si_response.dataconductivity and dielectric function +as functions of energy
Si_rt.datavector potential, electric field, +and matter current as functions of time
Si_rt_energytotal energy and electronic excitation +energy as functions of time
PS_Si_KY_n.datinformation on pseodupotential +file for silicon atom
+
+
You may download the above files (zipped file) from:
+ +
+

We first explain the standard output file. In the beginning of the file, +input variables used in the calculation are shown.

+
##############################################################################
+# SALMON: Scalable Ab-initio Light-Matter simulator for Optics and Nanoscience
+#
+#                             Version 2.0.1
+##############################################################################
+  Libxc: [disabled]
+   theory= tddft_response
+
+ Total time step      =        6000
+ Time step[fs]        =  2.000000000000000E-003
+ Energy range         =        2000
+ Energy resolution[eV]=  1.000000000000000E-002
+ Field strength[a.u.] =  1.000000000000000E-002
+   use of real value orbitals =  F
+ r-space parallelization: off
+ ======
+ ........
+
+
+

After that, the time evolution loop starts. At every 10 iteration steps, +electric current density in three Cartesian direction, the total number +of electrons, and total energy are displayed.

+
  time-step  time[fs]                               Current(xyz)[a.u.]      electrons Total energy[eV]
+#----------------------------------------------------------------------
+      10    0.02000000  0.11911770E-11 -0.40018285E-13  0.24902126E-03    32.00000000     -850.72273308
+      20    0.04000000  0.17745321E-11  0.13712105E-12  0.21977876E-03    31.99999999     -850.72273319
+      30    0.06000000  0.31016197E-11  0.24481043E-12  0.20049151E-03    31.99999999     -850.72272966
+      40    0.08000000  0.36611565E-11  0.49184860E-12  0.17937042E-03    31.99999999     -850.72272925
+      50    0.10000000  0.36920991E-11  0.63805259E-12  0.15246564E-03    31.99999998     -850.72272922
+      60    0.12000000  0.32347636E-11  0.11280947E-11  0.12248647E-03    31.99999998     -850.72272655
+      70    0.14000000  0.25978450E-11  0.15550074E-11  0.91933957E-04    31.99999998     -850.72272293
+      80    0.16000000  0.20087959E-11  0.17983589E-11  0.62968342E-04    31.99999997     -850.72272036
+      90    0.18000000  0.90623268E-12  0.18067974E-11  0.38824129E-04    31.99999997     -850.72271918
+
+
+

Explanations of other output files are given below:

+

Si_rt.data

+

Results of time evolution calculation for vector potential, electric field, and matter current density are shown. In the first several lines, explanations of included data are given.

+
# Real time calculation:
+# Ac_ext: External vector potential field
+# E_ext: External electric field
+# Ac_tot: Total vector potential field
+# E_tot: Total electric field
+# Jm: Matter current density (electrons)
+# 1:Time[fs] 2:Ac_ext_x[fs*V/Angstrom] 3:Ac_ext_y[fs*V/Angstrom] 4:Ac_ext_z[fs*V/Angstrom]
+# 5:E_ext_x[V/Angstrom] 6:E_ext_y[V/Angstrom] 7:E_ext_z[V/Angstrom] 8:Ac_tot_x[fs*V/Angstrom]
+# 9:Ac_tot_y[fs*V/Angstrom] 10:Ac_tot_z[fs*V/Angstrom] 11:E_tot_x[V/Angstrom]
+# 12:E_tot_y[V/Angstrom] 13:E_tot_z[V/Angstrom]  14:Jm_x[1/fs*Angstrom^2]
+# 15:Jm_y[1/fs*Angstrom^2] 16:Jm_z[1/fs*Angstrom^2]
+
+
+

Using first column (time in femtosecond) and 16th column (matter current density in +z direction), the following graph can be drawn.

+
+
_images/exc5-current.png +
+

Si_response.data

+

Time-frequency Fourier transformation of the macroscopic current density gives +the conductivity of the system. The dielectric function is then calculated +from the conductivity. They are stored in this file.

+
# Fourier-transform spectra:
+# sigma: Conductivity
+# eps: Dielectric constant
+# 1:Energy[eV] 2:Re(sigma_x)[1/fs*V*Angstrom] 3:Re(sigma_y)[1/fs*V*Angstrom]
+# 4:Re(sigma_z)[1/fs*V*Angstrom] 5:Im(sigma_x)[1/fs*V*Angstrom]
+# 6:Im(sigma_y)[1/fs*V*Angstrom] 7:Im(sigma_z)[1/fs*V*Angstrom] 8:Re(eps_x)[none]
+# 9:Re(eps_y)[none] 10:Re(eps_z)[none] 11:Im(eps_x)[none] 12:Im(eps_y)[none]
+# 13:Im(eps_z)[none]
+
+
+

Using first column (energy in eV) and 10th (real part of the dielectric function) +and 13th (imaginary part), we obtain the following graph.

+
+
_images/exc5-eps-re.png +_images/exc5-eps-im.png +
+

The imaginary part appears above the direct bandgap energy that is about +2.4 eV in the present calculation using local density approximation. +Dielectric function below 1 eV are not accurate and and are not shown.

+

Si_rt_energy

+

Eall and Eall-Eall0 are total energy and electronic excitation energy, respectively.

+
# Real time calculation:
+# Eall: Total energy
+# Eall0: Initial energy
+# 1:Time[fs] 2:Eall[eV] 3:Eall-Eall0[eV]
+
+
+
+
+
+

Exercise-6: Electron dynamics in crystalline silicon under a pulsed electric field

+

In this exercise, we learn the calculation of electron dynamics in crystalline silicon. +A cubic unit cell that contains eight silicon atoms is used in the calculation. +This exercise should be carried out after finishing the ground state calculation +that was explained in Exercise-4.

+

In the calculation, a pulsed electric field specified by the following vector +potential will be used,

+

\(A(t) = - \frac{E_0}{\omega} \hat z \cos^2 \frac{\pi}{T} \left( t - \frac{T}{2} \right) \sin \omega \left( t - \frac{T}{2} \right), \hspace{5mm} (0 < t < T).\)

+

The electric field is given by \(E(t) = -(1/c)(dA(t)/dt)\). +The parameters that characterize the pulsed field such as the amplitude \(E_0\), +frequency \(\omega\), pulse duration \(T\), polarization direction \(\hat z\), +are specified in the input file. +Time-dependent Kohn-Sham equation for Bloch orbitals are calculated in real time,

+

\(i\hbar \frac{\partial}{\partial t} u_{n{\bf k}}({\bf r},t) += +H_{{\bf k} + (e/\hbar c){\bf A}(t)} u_{n{\bf k}}({\bf r},t).\)

+
+

Input files

+

To run the code, following files in samples are necessary:

+ ++++ + + + + + + + + + + + + + + +
file namedescription
Si_rt_pulse.inpinput file that contain input +keywords and their values
Si_rps.datpseodupotential file for Carbon
restart
+
directory created in the ground +state calculation
+
(rename the directory from +data_for_restart to restart)
+
+
+

First two files are prepared in the directory SALMON/samples/exercise_06_bulkSi_rt/. +The file Si_rt_pulse.inp contains input keywords and their values. +The pseudoopotential file should be the same as that used in the ground state calculation. +In the directory restart, those files created in the ground state calculation +and stored in the directory data_for_restart are included. +Therefore, coopy the directory as cp -R data_for_restart restart +if you calculate at the same directory as you did the ground state calculation.

+

In the input file Si_rt_pulse.inp, input keywords are specified. +Most of them are mandatory to execute the electron dynamics calculation. +This will help you to prepare the input file for other systems that you want to calculate. +A complete list of the input keywords that can be used in the input file +can be found in List of input keywords.

+
!########################################################################################!
+! Excercise 06: Electron dynamics in crystalline silicon under a pulsed electric field   !
+!----------------------------------------------------------------------------------------!
+! * The detail of this excercise is explained in our manual(see chapter: 'Exercises').   !
+!   The manual can be obtained from: https://salmon-tddft.jp/documents.html              !
+! * Input format consists of group of keywords like:                                     !
+!     &group                                                                             !
+!       input keyword = xxx                                                              !
+!     /                                                                                  !
+!   (see chapter: 'List of input keywords' in the manual)                                !
+!----------------------------------------------------------------------------------------!
+! * Conversion from unit_system = 'a.u.' to 'A_eV_fs':                                   !
+!   Length: 1 [a.u.] = 0.52917721067    [Angstrom]                                       !
+!   Energy: 1 [a.u.] = 27.21138505      [eV]                                             !
+!   Time  : 1 [a.u.] = 0.02418884326505 [fs]                                             !
+!----------------------------------------------------------------------------------------!
+! * Copy the ground state data directory('data_for_restart') (or make symbolic link)     !
+!   calculated in 'samples/exercise_04_bulkSi_gs/' and rename the directory to 'restart/'!
+!   in the current directory.                                                            !
+!########################################################################################!
+
+&calculation
+  !type of theory
+  theory = 'tddft_pulse'
+/
+
+
+
+
theory specifies which theoretical method is used in the calculation.
+
+
&control
+  !common name of output files
+  sysname = 'Si'
+/
+
+
+
+
sysname is a prefix for filenames of output files.
+
+
&units
+  !units used in input and output files
+  unit_system = 'A_eV_fs'
+/
+
+
+
+
unit_system specifies which unit system is used in the input and output files.
+
+
&system
+  !periodic boundary condition
+  yn_periodic = 'y'
+
+  !grid box size(x,y,z)
+  al(1:3) = 5.43d0, 5.43d0, 5.43d0
+
+  !number of elements, atoms, electrons and states(bands)
+  nelem  = 1
+  natom  = 8
+  nelec  = 32
+  nstate = 32
+/
+
+
+
+
yn_periodic specifies whether or not periodic boundary condition is applied.
+
al(i) specifies the side length of the unit cell.
+
nelem is the number of elements in the system.
+
natom is the number of atoms in the system.
+
nelec is the number of electrons in the system.
+
nstate is the number of orbitals that are used in the calculation.
+
+
&pseudo
+  !name of input pseudo potential file
+  file_pseudo(1) = './Si_rps.dat'
+
+  !atomic number of element
+  izatom(1) = 14
+
+  !angular momentum of pseudopotential that will be treated as local
+  lloc_ps(1) = 2
+  !--- Caution -------------------------------------------!
+  ! Index must correspond to those in &atomic_red_coor.   !
+  !-------------------------------------------------------!
+/
+
+
+
+
file_pseudo(n) specifies the filename of the pseudopotential file of the n-th element.
+
izatom(n) is the atomic number of the n-th element.
+
lloc_ps(n) specifies which angular momentum component is chosen as the local potential for the n-th element.
+
+
&functional
+  !functional('PZ' is Perdew-Zunger LDA: Phys. Rev. B 23, 5048 (1981).)
+  xc = 'PZ'
+/
+
+
+
+
xc specifies the exchange-correlation potential to be used in the calculation.
+
+
&rgrid
+  !number of spatial grids(x,y,z)
+  num_rgrid(1:3) = 12, 12, 12
+/
+
+
+
+
num_rgrid(i) specifies the number of real-space grid point in i-th direction.
+
+
&kgrid
+  !number of k-points(x,y,z)
+  num_kgrid(1:3) = 4, 4, 4
+/
+
+
+
+
num_kgrid(i) specifies the number of k-points for i-th direction discretizing the Brillouin zone.
+
+
&tgrid
+  !time step size and number of time grids(steps)
+  dt = 0.002d0
+  nt = 6000
+/
+
+
+
+
dt specifies the time step.
+
nt is the number of time steps for the time propagation.
+
+
&emfield
+  !envelope shape of the incident pulse('Acos2': cos^2 type envelope for vector potential)
+  ae_shape1 = 'Acos2'
+
+  !peak intensity(W/cm^2) of the incident pulse
+  I_wcm2_1 = 1.0d12
+
+  !duration of the incident pulse
+  tw1 = 10.672d0
+
+  !mean photon energy(average frequency multiplied by the Planck constant) of the incident pulse
+  omega1 = 1.55d0
+
+  !polarization unit vector(real part) for the incident pulse(x,y,z)
+  epdir_re1(1:3) = 0.0d0, 0.0d0, 1.0d0
+  !--- Caution ---------------------------------------------------------!
+  ! Definition of the incident pulse is written in:                     !
+  ! https://www.sciencedirect.com/science/article/pii/S0010465518303412 !
+  !---------------------------------------------------------------------!
+/
+
+
+
+
ae_shape1 specifies the envelope of the field.
+
I_wcm2_1 specify the intensity of the pulse in unit of W/cm2.
+
tw1 specifies the duration of the pulse.
+
omega1 specifies the mean photon energy of the pulse.
+
epdir_re1(i) specifies the i-th component of the real part of the polarization unit vector.
+
+
&analysis
+  !energy grid size and number of energy grids for output files
+  de      = 0.01d0
+  nenergy = 3000
+/
+
+
+
+
de specifies the energy grid size for frequency-domain analysis.
+
nenergy specifies the number of energy grid points for frequency-domain analysis.
+
+
&atomic_red_coor
+  !cartesian atomic reduced coodinates
+  'Si'       .0      .0      .0      1
+  'Si'       .25     .25     .25     1
+  'Si'       .5      .0      .5      1
+  'Si'       .0      .5      .5      1
+  'Si'       .5      .5      .0      1
+  'Si'       .75     .25     .75     1
+  'Si'       .25     .75     .75     1
+  'Si'       .75     .75     .25     1
+  !--- Format ---------------------------------------------------!
+  ! 'symbol' x y z index(correspond to that of pseudo potential) !
+  !--------------------------------------------------------------!
+/
+
+
+
+
&atomic_red_coor specifies spatial coordinates of atoms in reduced coordinate system.
+
+
+
+

Execusion

+

In a multiprocess environment, calculation will be executed as:

+
$ mpiexec -n NPROC salmon < Si_rt_pulse.inp > Si_rt_pulse.out
+
+
+

where NPROC is the number of MPI processes. A standard output will be stored in the file Si_rt_pulse.out.

+
+
+

Output files

+

After the calculation, following output files are created in the +directory that you run the code in addition to the standard output file,

+ ++++ + + + + + + + + + + + + + + + + + +
file namedescription
Si_pulse.datatime-frequency Fourier transform of +matter current and electric field
Si_rt.datavector potential, electric field, +and matter current as functions of time
Si_rt_energytotal energy and electronic excitation +energy as functions of time
PS_Si_KY_n.datinformation on pseodupotential +file for silicon atom
+
+
You may download the above files (zipped file) from:
+ +
+

We first explain the standard output file. In the beginning of the file, +input variables used in the calculation are shown.

+
##############################################################################
+# SALMON: Scalable Ab-initio Light-Matter simulator for Optics and Nanoscience
+#
+#                             Version 2.0.1
+##############################################################################
+  Libxc: [disabled]
+   theory= tddft_pulse
+
+ Total time step      =        6000
+ Time step[fs]        =  2.000000000000000E-003
+ Energy range         =        3000
+ Energy resolution[eV]=  1.000000000000000E-002
+Laser frequency     = 1.55[eV]
+Pulse width of laser=     10.67200000[fs]
+Laser intensity     =  0.10000000E+13[W/cm^2]
+   use of real value orbitals =  F
+ r-space parallelization: off
+ ======
+ ........
+
+
+

After that, the time evolution loop starts. At every 10 iterations, the time, +current in three Cartesian directions, the number of electrons, and the +total energy are displayed.

+
  time-step  time[fs]                               Current(xyz)[a.u.]      electrons Total energy[eV]
+#----------------------------------------------------------------------
+      10    0.02000000  0.11847131E-11 -0.47534543E-13 -0.43120486E-08    32.00000000     -850.76385276
+      20    0.04000000  0.17733186E-11  0.12820952E-12 -0.33012195E-07    32.00000000     -850.76385276
+      30    0.06000000  0.30965601E-11  0.23626542E-12 -0.10736819E-06    32.00000000     -850.76385275
+      40    0.08000000  0.36612711E-11  0.47687574E-12 -0.24607217E-06    32.00000000     -850.76385272
+      50    0.10000000  0.36958981E-11  0.62315158E-12 -0.46548014E-06    32.00000000     -850.76385263
+      60    0.12000000  0.32186097E-11  0.11429104E-11 -0.77911390E-06    32.00000000     -850.76385239
+      70    0.14000000  0.25712602E-11  0.15689467E-11 -0.11971541E-05    32.00000000     -850.76385186
+      80    0.16000000  0.19447699E-11  0.18250920E-11 -0.17261976E-05    32.00000000     -850.76385082
+      90    0.18000000  0.80514520E-12  0.18683828E-11 -0.23692381E-05    32.00000000     -850.76384896
+
+
+

Explanations of other output files are given below:

+

Si_rt.data

+

Results of time evolution calculation for vector potential, electric field, and matter current density.

+
# Real time calculation:
+# Ac_ext: External vector potential field
+# E_ext: External electric field
+# Ac_tot: Total vector potential field
+# E_tot: Total electric field
+# Jm: Matter current density (electrons)
+# 1:Time[fs] 2:Ac_ext_x[fs*V/Angstrom] 3:Ac_ext_y[fs*V/Angstrom] 4:Ac_ext_z[fs*V/Angstrom]
+# 5:E_ext_x[V/Angstrom] 6:E_ext_y[V/Angstrom] 7:E_ext_z[V/Angstrom]
+# 8:Ac_tot_x[fs*V/Angstrom] 9:Ac_tot_y[fs*V/Angstrom] 10:Ac_tot_z[fs*V/Angstrom]
+# 11:E_tot_x[V/Angstrom] 12:E_tot_y[V/Angstrom] 13:E_tot_z[V/Angstrom]
+# 14:Jm_x[1/fs*Angstrom^2] 15:Jm_y[1/fs*Angstrom^2] 16:Jm_z[1/fs*Angstrom^2]
+
+
+

The applied electric field is drawn using the first column (time in femtosecond) +and the 7th column (electric field in z direction).

+
+
_images/exc6-efield.png +
+

The matter current density is drawn using the first column (time in femtosecond) +and 16th column (matter current density in z direction).

+
+
_images/exc6-current.png +
+

Si_pulse.data

+

Time-frequency Fourier transformation of the matter current and electric field.

+
# Fourier-transform spectra:
+# energy: Frequency
+# Jm: Matter current
+# E_ext: External electric field
+# E_tot: Total electric field
+# 1:energy[eV] 2:Re(Jm_x)[1/Angstrom^2] 3:Re(Jm_y)[1/Angstrom^2] 4:Re(Jm_z)[1/Angstrom^2]
+# 5:Im(Jm_x)[1/Angstrom^2] 6:Im(Jm_y)[1/Angstrom^2] 7:Im(Jm_z)[1/Angstrom^2]
+# 8:|Jm_x|^2[1/Angstrom^4] 9:|Jm_y|^2[1/Angstrom^4] 10:|Jm_z|^2[1/Angstrom^4]
+# 11:Re(E_ext_x)[fs*V/Angstrom] 12:Re(E_ext_y)[fs*V/Angstrom]
+# 13:Re(E_ext_z)[fs*V/Angstrom] 14:Im(E_ext_x)[fs*V/Angstrom]
+# 15:Im(E_ext_y)[fs*V/Angstrom] 16:Im(E_ext_z)[fs*V/Angstrom]
+# 17:|E_ext_x|^2[fs^2*V^2/Angstrom^2] 18:|E_ext_y|^2[fs^2*V^2/Angstrom^2]
+# 19:|E_ext_z|^2[fs^2*V^2/Angstrom^2] 20:Re(E_tot_x)[fs*V/Angstrom]
+# 21:Re(E_tot_y)[fs*V/Angstrom] 22:Re(E_tot_z)[fs*V/Angstrom]
+# 23:Im(E_tot_x)[fs*V/Angstrom] 24:Im(E_tot_y)[fs*V/Angstrom]
+# 25:Im(E_tot_z)[fs*V/Angstrom] 26:|E_tot_x|^2[fs^2*V^2/Angstrom^2]
+# 27:|E_tot_y|^2[fs^2*V^2/Angstrom^2] 28:|E_tot_z|^2[fs^2*V^2/Angstrom^2]
+
+
+

The power spectrum of the matter current density, \(|J(\omega)|^2\) +is shown in logarithmic scale as a function of the energy, \(\hbar\omega\). +High harmonic generations are visible in the spectrum.

+
+
_images/exc6-pulse.png +
+

Si_rt_energy

+

Energies are stored as functions of time.

+
# Real time calculation:
+# Eall: Total energy
+# Eall0: Initial energy
+# 1:Time[a.u.] 2:Eall[a.u.] 3:Eall-Eall0[a.u.]
+
+
+

Eall and Eall-Eall0 are total energy and electronic excitation energy, respectively. +The figure below shows the electronic excitation energy per unit cell volume as a +function of time, using the first column (time in femtosecond) and the 3rd column +(Eall-Eall0). Although the frequency is below the direct bandgap of silicon +(2.4 eV in the LDA calculation), electronic excitations take place because of +nonlinear absorption process.

+
+
_images/exc6-energy.png +
+
+
+
+
+

Maxwell + TDDFT multiscale simulation

+
+

Exercise-7: Pulsed-light propagation through a silicon thin film

+

In this exercise, we learn the calculation of a propagation of +pulsed light through a thin film of crystalline silicon. +We consider an irradiation of a few-cycle, linearly polarized pulsed light +normally on a thin film of 40 nm thickness. +This exercise should be carried out after finishing the ground state calculation +that was explained in Exercise-4.

+

In the calculation, macroscopic Maxwell equation that describes the light +propagation and microscopic time-dependent Kohn-Sham equation that describes +the electron dynamics are solved simultaneously. +The light propagation is described by a one-dimensional +light-propagation equation for the vector potential,

+

\(\frac{1}{c^2} \frac{\partial^2}{\partial X^2} A(X,t) +- \frac{\partial^2}{\partial X^2} A(X,t) = \frac{4\pi}{c} I(X,t).\)

+

The direction of the propagation is set to x direction and the +polarization of the pulse is set to z direction. +The time profile of an incident pulse is given by

+

\(A(t) = - \frac{E_0}{\omega} \hat z \cos^2 \frac{\pi}{T} \left( t - \frac{T}{2} \right) \sin \omega \left( t - \frac{T}{2} \right), \hspace{5mm} (0 < t < T),\)

+

and is set in the vacuum region in front of the thin film. +The parameters that characterize the pulsed field such as the amplitude \(E_0\), +frequency \(\omega\), pulse duration \(T\) are specified in the input file.

+

To discribe the light propagation, macroscopic coordinate \(X\) is discretized as +\(X_i\). At each grid point inside the silicon thin film, for which we take +eight points \(i=1 \cdots 8\) in this exercise, time-dependent Kohn-Sham +equation for Bloch orbitals are calculated in real time,

+

\(i\hbar \frac{\partial}{\partial t} u_{i n{\bf k}}({\bf r},t) += +H_{{\bf k} + (e/\hbar c){\bf A}_i(t)} u_{i n{\bf k}}({\bf r},t).\)

+

From the Bloch orbital \(u_{in{\bf k}}({\bf r},t)\), we calculate the electric +current \(I(X_i,t)\). We thus obtain a closed set of equations. +Solving these equations simultaneously, we can describe macroscopic light propagation +and microscopic electron dynamics at the same time.

+
+

Input files

+

To run the code, following files in samples are used:

+ ++++ + + + + + + + + + + + + + + +
file namedescription
Si_rt_multiscale.inpinput file that contain input +keywords and their values.
Si_rps.datpseodupotential file for silicon
restart
+
directory created in the ground +state calculation
+
(rename the directory from +data_for_restart to restart)
+
+
+

First two files are prepared in the directory +SALMON/samples/exercise_07_bulkSi_multiscale/. +The file Si_rt_multiscale.inp contains input keywords and their values. +The pseudoopotential file should be the same as that used in the ground state calculation. +In the directory restart, those files created in the ground state calculation +and stored in the directory data_for_restart are included. +Therefore, coopy the directory as cp -R data_for_restart restart +if you calculate at the same directory as you did the ground state calculation.

+

In the input file Si_rt_multiscale.inp, input keywords are specified. +Most of them are mandatory to execute the electron dynamics calculation. +This will help you to prepare the input file for other systems that you want to calculate. +A complete list of the input keywords that can be used in the input file +can be found in List of input keywords.

+
!########################################################################################!
+! Excercise 07: Maxwell+TDDFT multiscale simulation                                      !
+!               (Pulsed-light propagation through a silicon thin film)                   !
+!----------------------------------------------------------------------------------------!
+! * The detail of this excercise is explained in our manual(see chapter: 'Exercises').   !
+!   The manual can be obtained from: https://salmon-tddft.jp/documents.html              !
+! * Input format consists of group of keywords like:                                     !
+!     &group                                                                             !
+!       input keyword = xxx                                                              !
+!     /                                                                                  !
+!   (see chapter: 'List of input keywords' in the manual)                                !
+!----------------------------------------------------------------------------------------!
+! * Conversion from unit_system = 'a.u.' to 'A_eV_fs':                                   !
+!   Length: 1 [a.u.] = 0.52917721067    [Angstrom]                                       !
+!   Energy: 1 [a.u.] = 27.21138505      [eV]                                             !
+!   Time  : 1 [a.u.] = 0.02418884326505 [fs]                                             !
+!----------------------------------------------------------------------------------------!
+! * Copy the ground state data directory('data_for_restart') (or make symbolic link)     !
+!   calculated in 'samples/exercise_04_bulkSi_gs/' and rename the directory to 'restart/'!
+!   in the current directory.                                                            !
+!########################################################################################!
+
+&calculation
+  !type of theory
+  theory = 'multi_scale_maxwell_tddft'
+/
+
+
+
+
theory specifies which theoretical method is used in the calculation.
+
+
&control
+  !common name of output files
+  sysname = 'Si'
+/
+
+
+
+
sysname is a prefix for filenames of output files.
+
+
&units
+  !units used in input and output files
+  unit_system = 'A_eV_fs'
+/
+
+
+
+
unit_system specifies which unit system is used in the input and output files.
+
+
&system
+  !periodic boundary condition
+  yn_periodic = 'y'
+
+  !grid box size(x,y,z)
+  al(1:3) = 5.43d0, 5.43d0, 5.43d0
+
+  !number of elements, atoms, electrons and states(bands)
+  nelem  = 1
+  natom  = 8
+  nelec  = 32
+  nstate = 32
+/
+
+
+
+
yn_periodic specifies whether or not periodic boundary condition is applied.
+
al(i) specifies the side length of the unit cell.
+
nelem is the number of elements in the system.
+
natom is the number of atoms in the system.
+
nelec is the number of electrons in the system.
+
nstate is the number of orbitals that are used in the calculation.
+
+
&pseudo
+  !name of input pseudo potential file
+  file_pseudo(1) = './Si_rps.dat'
+
+  !atomic number of element
+  izatom(1) = 14
+
+  !angular momentum of pseudopotential that will be treated as local
+  lloc_ps(1) = 2
+  !--- Caution -------------------------------------------!
+  ! Index must correspond to those in &atomic_red_coor.   !
+  !-------------------------------------------------------!
+/
+
+
+
+
file_pseudo(n) specifies the filename of the pseudopotential file of the n-th element.
+
izatom(n) is the atomic number of the n-th element.
+
lloc_ps(n) specifies which angular momentum component is chosen as the local potential for the n-th element.
+
+
&functional
+  !functional('PZ' is Perdew-Zunger LDA: Phys. Rev. B 23, 5048 (1981).)
+  xc = 'PZ'
+/
+
+
+
+
xc specifies the exchange-correlation potential to be used in the calculation.
+
+
&rgrid
+  !number of spatial grids(x,y,z)
+  num_rgrid(1:3) = 12, 12, 12
+/
+
+
+
+
num_rgrid(i) specifies the number of real-space grid point in i-th direction.
+
+
&kgrid
+  !number of k-points(x,y,z)
+  num_kgrid(1:3) = 4, 4, 4
+/
+
+
+
+
num_kgrid(i) specifies the number of k-points for i-th direction discretizing the Brillouin zone.
+
+
&tgrid
+  !time step size and number of time grids(steps)
+  dt = 0.002d0
+  nt = 8000
+/
+
+
+
+
dt specifies the time step.
+
nt is the number of time steps for the time propagation.
+
+
&emfield
+  !envelope shape of the incident pulse('Acos2': cos^2 type envelope for vector potential)
+  ae_shape1 = 'Acos2'
+
+  !peak intensity(W/cm^2) of the incident pulse
+  I_wcm2_1 = 1.0d12
+
+  !duration of the incident pulse
+  tw1 = 10.672d0
+
+  !mean photon energy(average frequency multiplied by the Planck constant) of the incident pulse
+  omega1 = 1.55d0
+
+  !polarization unit vector(real part) for the incident pulse(x,y,z)
+  epdir_re1(1:3) = 0.0d0, 0.0d0, 1.0d0
+  !--- Caution ---------------------------------------------------------!
+  ! Defenition of the incident pulse is written in:                     !
+  ! https://www.sciencedirect.com/science/article/pii/S0010465518303412 !
+  !---------------------------------------------------------------------!
+/
+
+
+
+
ae_shape1 specifies the envelope of the field.
+
I_wcm2_1 specify the intensity of the pulse in unit of W/cm2.
+
tw1 specifies the duration of the pulse.
+
omega1 specifies the mean photon energy of the pulse.
+
epdir_re1(i) specifies the i-th component of the real part of the polarization unit vector.
+
+
&multiscale
+  !number of macro grids in electromagnetic analysis for x, y, and z directions
+  nx_m = 8
+  ny_m = 1
+  nz_m = 1
+
+  !macro grid spacing for x, y, and z directions
+  hx_m = 50.0d0
+  hy_m = 50.0d0
+  hz_m = 50.0d0
+
+  !number of macroscopic grids for vacumm region
+  !(nxvacl_m is for negative x-direction in front of material)
+  !(nxvacr_m is for positive x-direction behind material)
+  nxvacl_m = 1000
+  nxvacr_m = 1000
+/
+
+
+
+
nx_m, ny_m, nz_m specify the number of macroscopic grid points inside the material.
+
hx_m, hy_m, hz_m specify the grid spacing of macroscopic coordinates.
+
nxvacl_m / nxvacr_m specifies the number of grid points in the vacuum region in the left / right side of the material.
+
+
&maxwell
+  !boundary condition of electromagnetic analysis
+  !first index(1-3 rows) corresponds to x, y, and z directions
+  !second index(1-2 columns) corresponds to bottom and top of the directions
+  !('abc' is absorbing boundary condition)
+  boundary_em(1,1) = 'abc'
+  boundary_em(1,2) = 'abc'
+/
+
+
+
+
boundary_em(i,n) specifies the boundary condition for the electromagnetic analysis. The first index i corresponds to the x,y, and z direction. The second index n specifies left or right side of the material.
+
+
&atomic_red_coor
+  !cartesian atomic reduced coodinates
+  'Si'      .0      .0      .0      1
+  'Si'      .25     .25     .25     1
+  'Si'      .5      .0      .5      1
+  'Si'      .0      .5      .5      1
+  'Si'      .5      .5      .0      1
+  'Si'      .75     .25     .75     1
+  'Si'      .25     .75     .75     1
+  'Si'      .75     .75     .25     1
+  !--- Format ---------------------------------------------------!
+  ! 'symbol' x y z index(correspond to that of pseudo potential) !
+  !--------------------------------------------------------------!
+/
+
+
+
+
&atomic_red_coor specifies spatial coordinates of atoms in reduced coordinate system.
+
+
+
+

Execusion

+

In a multiprocess environment, calculation will be executed as:

+
$ mpiexec -n NPROC salmon < Si_rt_multiscale.inp > Si_rt_multiscale.out
+
+
+

where NPROC is the number of MPI processes. A standard output will be stored in the file Si_rt_multiscale.out.

+
+
+

Output files

+

After the calculation, following output files and directories are created in the +directory that you run the code in addition to the standard output file.

+ ++++ + + + + + + + + + + + + + + + + + + + + +
file namedescription
Si_m/mxxxxxx/Si_rt.data
+
vector potential, electric field, +and matter current
+
at macroscopic position xxxxxx +as functions of time
+
+
Si_m/mxxxxxx/Si_rt_energy.data
+
total energy and electronic +excitation energy
+
at macroscopic position xxxxxx +as functions of time
+
+
Si_m/mxxxxxx/PS_Si_KY_n.dat
+
information on pseodupotential +file for silicon atom
+
at macroscopic position xxxxxx
+
+
Si_RT_Ac/Si_Ac_yyyyyy.data
+
vector potential, +electric field, +magnetic field,
+
electromagnetic current density +at time step yyyyyy
+
as function of spatial position
+
+
Si_wave.datawaveform of incident, reflected, +and transmitted waves
+
+
You may download the above files (zipped file) from:
+ +
+

We first explain the standard output file. In the beginning of the file, +input variables used in the calculation are shown.

+
##############################################################################
+# SALMON: Scalable Ab-initio Light-Matter simulator for Optics and Nanoscience
+#
+#                             Version 2.0.1
+##############################################################################
+  Libxc: [disabled]
+   theory= multi_scale_maxwell_tddft
+Initializing macropoint:     1-     8
+
+ Total time step      =        8000
+ Time step[fs]        =  2.000000000000000E-003
+ Energy range         =        1000
+ Energy resolution[eV]=  1.000000000000000E-002
+Laser frequency     = 1.55[eV]
+Pulse width of laser=     10.67200000[fs]
+Laser intensity     =  0.10000000E+13[W/cm^2]
+   use of real value orbitals =  F
+ r-space parallelization: off
+ ======
+ .........
+
+
+

After that, the time evolution loop starts. At every 100 iterations, the step, +grid point index, time, current in three Cartesian directions, the number of electrons, +and the total energy are displayed.

+
   Step  Macro     Time                          Current      Electrons  Eabs/cell
+                     fs                  1/fs*Angstrom^2                        eV
+#------------------------------------------------------------------------------------------
+    100      1    0.200  5.45E-010 -4.60E-011  2.70E-004    32.00000000  2.36E-006
+    100      2    0.200  5.45E-010 -1.56E-011  1.83E-004    32.00000000  1.06E-006
+    100      3    0.200  5.45E-010  7.19E-012  1.23E-004    32.00000000  4.62E-007
+    100      4    0.200  5.45E-010  2.11E-011  8.14E-005    32.00000000  1.97E-007
+    100      5    0.200  5.45E-010  2.11E-011  5.28E-005    32.00000000  8.04E-008
+    100      6    0.200  5.45E-010  7.20E-012  3.34E-005    32.00000000  3.11E-008
+    100      7    0.200  5.45E-010 -1.56E-011  2.03E-005    32.00000000  1.10E-008
+    100      8    0.200  5.45E-010 -4.60E-011  1.13E-005    32.00000000  3.27E-009
+    200      1    0.400  1.77E-011 -2.93E-013  9.70E-004    32.00000000  5.80E-005
+    200      2    0.400  1.78E-011 -3.64E-011  7.50E-004    32.00000000  3.25E-005
+    200      3    0.400  1.78E-011 -5.58E-011  5.75E-004    32.00000000  1.80E-005
+    200      4    0.400  1.78E-011 -6.66E-011  4.38E-004    32.00000000  9.89E-006
+
+
+

Explanations of other output files are given below:

+

Si_wave.data

+

Waveforms of incident, reflected, and transmitted waves.

+
# 1D multiscale calculation:
+# E_inc: E-field amplitude of incident wave
+# E_ref: E-field amplitude of reflected wave
+# E_tra: E-field amplitude of transmitted wave
+# 1:Time[fs] 2:E_inc_x[V/Angstrom] 3:E_inc_y[V/Angstrom] 4:E_inc_z[V/Angstrom]
+# 5:E_ref_x[V/Angstrom] 6:E_ref_y[V/Angstrom] 7:E_ref_z[V/Angstrom] 8:E_tra_x[V/Angstrom]
+# 9:E_tra_y[V/Angstrom] 10:E_tra_z[V/Angstrom]
+
+
+

The figure below shows the incident, reflected, and transmitted electric fields +that are drawn using the first column (time in femtosecond) and the 4th column (incident), +7th column (reflected), and 10th column (transmitted).

+
+
_images/exc7-efield.png +
+

We find that the amplitude of the reflected pulse is comparable to the amplitude +of the incudent pulse, while the phase is different by \(\pi\). +The amplitude of the transmitted pulse is smaller than the incident pulse.

+

Si_m/mxxxxxx/Si_rt.data

+

The number xxxxxx in the directory name mxxxxxx specifies the position of +macroscopic grid point. Vector potential, electric field, and matter current density +as functions of time are included in the file.

+
# Real time calculation:
+# Ac_ext: External vector potential field
+# E_ext: External electric field
+# Ac_tot: Total vector potential field
+# E_tot: Total electric field
+# Jm: Matter current density (electrons)
+# 1:Time[fs] 2:Ac_ext_x[fs*V/Angstrom] 3:Ac_ext_y[fs*V/Angstrom] 4:Ac_ext_z[fs*V/Angstrom]
+# 5:E_ext_x[V/Angstrom] 6:E_ext_y[V/Angstrom] 7:E_ext_z[V/Angstrom] 8:Ac_tot_x[fs*V/Angstrom]
+# 9:Ac_tot_y[fs*V/Angstrom] 10:Ac_tot_z[fs*V/Angstrom] 11:E_tot_x[V/Angstrom]
+# 12:E_tot_y[V/Angstrom] 13:E_tot_z[V/Angstrom]  14:Jm_x[1/fs*Angstrom^2]
+# 15:Jm_y[1/fs*Angstrom^2] 16:Jm_z[1/fs*Angstrom^2]
+
+
+

The figure below shows the electric field at front and back surfaces. +Using 1st column (time in femtosecond) and 13th column (total electric field in z direction), +electric field at a macroscopic poisition inside the thin film can be plotted. +Using the file /m000001/Si_rt.data, electric field at the front surface is drawn +by red curve. Using the file /m000008/Si_rt.data, electric field at the back surface +is drawn by blue curve.

+
+
_images/exc7-efield2.png +
+

We find that the amplitude of the electric field at the front surface is small. +It is consistent with the previous figure that showed incident and reflected pulses +with a similar amplitude and opposite phase.

+

Si_m/mxxxxxx/Si_rt_energy.data

+

The number xxxxxx in the directory name mxxxxxx specifies the position of +macroscopic grid point. +Eall and Eall-Eall0 are total energy and electronic excitation energy, respectively.

+
# Real time calculation:
+# Eall: Total energy
+# Eall0: Initial energy
+# 1:Time[fs] 2:Eall[eV] 3:Eall-Eall0[eV]
+
+
+

The figure below shows the electronic excitation energy per unit cell volume +at front and back surfaces using 1st columnn (time in femtosecond) and 3rd column +(Eall-Eall0). +Using the file /m000001/Si_rt_energy.data, the excitation energy at the +front surface is drawn by red curve. Using the file /m000008/Si_rt_energy.data, +the excitation energy at the back surface is drawn by blue curve.

+
+
_images/exc7-energy2.png +
+

The excitation energy is much larger at the back surface compared with the energy +at the front surface. This is because the amplitude of the electric field +at the back surface is larger than that of the front surface, as seen in the +previous figure, and the excitation is a nonlinear process.

+

Si_RT_Ac/Si_Ac_yyyyyy.data

+

The number yyyyyy in the file name Si_Ac_yyyyyy.data specifies the time step. +Various quantities at the time step are included in the file as functions of macroscopic +position index.

+
# Multiscale TDDFT calculation
+# IX, IY, IZ: FDTD Grid index
+# x, y, z: Coordinates
+# Ac: Vector potential field
+# E: Electric field
+# J_em: Electromagnetic current density
+# 1:IX[none] 2:IY[none] 3:IZ[none] 4:Ac_x[fs*V/Angstrom] 5:Ac_y[fs*V/Angstrom]
+# 6:Ac_z[fs*V/Angstrom] 7:E_x[V/Angstrom] 8:E_y[V/Angstrom] 9:E_z[V/Angstrom] 10:B_x[a.u.]
+# 11:B_y[a.u.] 12:B_z[a.u.] 13:Jem_x[1/fs*Angstrom^2] 14:Jem_y[1/fs*Angstrom^2]
+# 15:Jem_z[1/fs*Angstrom^2] 16:E_em[eV/vol] 17:E_abs[eV/vol]
+
+
+

The figure below shows spatial dependence of the electric field at three times, +\(t=0\) fs (initial), \(t=8\) fs (pulse goes through the film), and +\(t=16\) fs (final). It is drawn using the first column multiplied by the +step size of \(X\) and 9th column (electric field).

+
+
_images/exc7-efield-x.png +
+
+
+
+
+

Geometry optimization and Ehrenfest molecular dynamics

+
+

Exercise-8: Geometry optimization of C2H2 molecule

+

In this exercise, we learn the calculation of geometry optimization of acetylene (C2H2) molecule, +solving the static Kohn-Sham equation. +This exercise will be useful to learn how to set up calculations in +SALMON for any isolated systems such as molecules and nanoparticles.

+
+

Input files

+

To run the code, following files in samples are used:

+ ++++ + + + + + + + + + + + + + + +
file namedescription
C2H2_opt.inpinput file that contains input +keywords and their values
C_rps.datpseodupotential file for carbon +atom
H_rps.datpseudopotential file for hydrogen +atom
+

In the input file C2H2_opt.inp, input keywords are specified. +Most of them are mandatory to execute the geometry optimization. +This will help you to prepare an input file for other systems that you +want to calculate. A complete list of the input keywords that can be +used in the input file can be found in +List of input keywords.

+
!########################################################################################!
+! Excercise 08: Geometry optimization of C2H2 molecule                                   !
+!----------------------------------------------------------------------------------------!
+! * The detail of this excercise is expained in our manual(see chapter: 'Exercises').    !
+!   The manual can be obtained from: https://salmon-tddft.jp/documents.html              !
+! * Input format consists of group of keywords like:                                     !
+!     &group                                                                             !
+!       input keyword = xxx                                                              !
+!     /                                                                                  !
+!   (see chapter: 'List of input keywords' in the manual)                                !
+!----------------------------------------------------------------------------------------!
+! * Conversion from unit_system = 'a.u.' to 'A_eV_fs':                                   !
+!   Length: 1 [a.u.] = 0.52917721067    [Angstrom]                                       !
+!   Energy: 1 [a.u.] = 27.21138505      [eV]                                             !
+!   Time  : 1 [a.u.] = 0.02418884326505 [fs]                                             !
+!########################################################################################!
+
+&calculation
+  !type of theory
+  theory = 'dft'
+
+  !geometry optimization option
+  yn_opt = 'y'
+/
+
+
+
+
theory specifies which theoretical method is used in the calculation.
+
yn_opt is a switch to carry out the structure optimization.
+
+
&control
+  !common name of output files
+  sysname = 'C2H2'
+/
+
+
+
+
sysname is a prefix for filenames of output files.
+
+
&units
+  !units used in input and output files
+  unit_system = 'A_eV_fs'
+/
+
+
+
+
unit_system specifies which unit system is used in the input and output files.
+
+
&system
+  !periodic boundary condition
+  yn_periodic = 'n'
+
+  !grid box size(x,y,z)
+  al(1:3) = 12.0d0, 12.0d0, 16.0d0
+
+  !number of elements, atoms, electrons and states(orbitals)
+  nelem  = 2
+  natom  = 4
+  nelec  = 10
+  nstate = 6
+/
+
+
+
+
yn_periodic specifies whether or not periodic boundary condition is applied.
+
al(i) specifies the spatial box size of the cubiod cell.
+
nelem is the number of elements in the system.
+
natom is the number of atoms in the system.
+
nelec is the number of electrons in the system.
+
nstate is the number of orbitals that are used in the calculation.
+
+
&pseudo
+  !name of input pseudo potential file
+  file_pseudo(1) = './C_rps.dat'
+  file_pseudo(2) = './H_rps.dat'
+
+  !atomic number of element
+  izatom(1) = 6
+  izatom(2) = 1
+
+  !angular momentum of pseudopotential that will be treated as local
+  lloc_ps(1) = 1
+  lloc_ps(2) = 0
+  !--- Caution ---------------------------------------!
+  ! Indices must correspond to those in &atomic_coor. !
+  !---------------------------------------------------!
+/
+
+
+
+
file_pseudo(n) specifies the filename of the pseudopotential file of the n-th element.
+
izatom(n) is the atomic number of the n-th element.
+
lloc_ps(n) specifies which angular momentum component is chosen as the local potential for the n-th element.
+
+
&functional
+  !functional('PZ' is Perdew-Zunger LDA: Phys. Rev. B 23, 5048 (1981).)
+  xc = 'PZ'
+/
+
+
+
+
xc specifies the exchange-correlation potential to be used in the calculation.
+
+
&rgrid
+  !spatial grid spacing(x,y,z)
+  dl(1:3) = 0.20d0, 0.20d, 0.20d0
+/
+
+
+
+
dl(i) specifies the spatial grid spacing in i-th direction.
+
+
&scf
+  !maximum number of scf iteration and threshold of convergence for ground state calculation
+  nscf      = 300
+  threshold = 1.0d-9
+/
+
+
+
+
nscf specifies the maximum number of SCF iterations.
+
threshold specifies the threshold to judge the convergence.
+
+
&opt
+  !threshold(maximum force on atom) of convergence for geometry optimization
+  convrg_opt_fmax = 1.0d-3
+/
+
+&atomic_coor
+  !cartesian atomic coodinates
+  'C'    0.0    0.0    0.6  1  y
+  'H'    0.0    0.0    1.7  2  y
+  'C'    0.0    0.0   -0.6  1  y
+  'H'    0.0    0.0   -1.7  2  y
+  !--- Format -------------------------------------------------------!
+  ! 'symbol' x y z index(correspond to that of pseudo potential) y/n !
+  !--- Caution ------------------------------------------------------!
+  ! final index(y/n) determines free/fix for the atom coordinate.    !
+  !------------------------------------------------------------------!
+/
+
+
+
+
&atomic_coor specifies spatial coordinates of atoms.
+
+
+
+

Output files

+

After the calculation, following output files and a directory are created in the +directory that you run the code,

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + +
namedescription
C2H2_info.datainformation on ground state +solution
C2H2_eigen.data1 particle energies
C2H2_trj.xyzatomic coordinates during the +geometry optimization
C2H2_k.datak-point distribution +(for isolated systems, only +gamma point is described)
data_for_restartdirectory where files used in +the real-time calculation are +contained
PS_C_KY_n.datinformation on pseodupotential +file for carbon atom
PS_H_KY_n.datinformation on pseodupotential +file for hydrogen atom
+
+
You may download the above files (zipped file, except for the directory data_for_restart) from:
+ +
+

Main results of the calculation such as orbital energies are included in C2H2_info.data. +Explanations of the C2H2_info.data and other output files are below:

+

C2H2_info.data

+

Calculated orbital and total energies as well as parameters specified in +the input file are shown in this file.

+

C2H2_eigen.data

+

1 particle energies.

+
#esp: single-particle energies (eigen energies)
+#occ: occupation numbers, io: orbital index
+# 1:io, 2:esp[eV], 3:occ
+
+
+

C2H2_trj.xyz

+

The atomic coordinates during the geometry optimization in xyz format.

+

C2H2_k.data

+

k-point distribution(for isolated systems, only gamma point is described).

+
# ik: k-point index
+# kx,ky,kz: Reduced coordinate of k-points
+# wk: Weight of k-point
+# 1:ik[none] 2:kx[none] 3:ky[none] 4:kz[none] 5:wk[none]
+# coefficients (2*pi/a [a.u.]) in kx, ky, kz
+
+
+
+
+
+

Exercise-9: Ehrenfest molecular dynamics of C2H2 molecule

+

In this exercise, we learn the calculation of the molecular dynamics in +the acetylene (C2H2) molecule under a pulsed electric field, solving the +time-dependent Kohn-Sham equation and the Newtonian equation. +As outputs of the calculation, time-evolution of the electron density as well as molecular structures +and associated quantities such as the electron and ion kinetic energies, the electric dipole moment of the +system and temperature as functions of time are calculated.. +This tutorial should be carried out after finishing the geometry optimization that was +explained in Exercise-8. +In the calculation, a pulsed electric field that has \(\cos^2\) envelope shape is applied. +The parameters that characterize the pulsed field such as magnitude, frequency, polarization direction, +and carrier envelope phase are specified in the input file.

+
+

Input files

+

To run the code, following files in samples are used. +The directory restart is created in the ground state calculation as data_for_restart. +Pseudopotential files are already used in the geometry optimization. +Therefore, C2H2_md.inp that specifies input keywords and their values +for the pulsed electric field and molecular dynamics calculations +is the only file that the users need to prepare.

+ ++++ + + + + + + + + + + + + + + + + + +
file namedescription
C2H2_md.inpinput file that contain input +keywords and their values.
C_rps.datpseodupotential file for carbon
H_rps.datpseudopotential file for hydrogen
restart
+
directory created in the geometry +optimization
+
(rename the directory from +data_for_restart to restart)
+
+
+

In the input file C2H2_md.inp, input keywords are specified. +Most of them are mandatory to execute the calculation of +electron dynamics induced by a pulsed electric field. +This will help you to prepare the input file for other systems and other +pulsed electric fields with molecular dynamics calculation that you want to calculate. +A complete list of the input keywords that can be used in the input file can be found in +List of input keywords.

+
!########################################################################################!
+! Excercise 09: Ehrenfest molecular dynamics of C2H2 molecule                            !
+!----------------------------------------------------------------------------------------!
+! * The detail of this excercise is expained in our manual(see chapter: 'Exercises').    !
+!   The manual can be obtained from: https://salmon-tddft.jp/documents.html              !
+! * Input format consists of group of keywords like:                                     !
+!     &group                                                                             !
+!       input keyword = xxx                                                              !
+!     /                                                                                  !
+!   (see chapter: 'List of input keywords' in the manual)                                !
+!----------------------------------------------------------------------------------------!
+! * Conversion from unit_system = 'a.u.' to 'A_eV_fs':                                   !
+!   Length: 1 [a.u.] = 0.52917721067    [Angstrom]                                       !
+!   Energy: 1 [a.u.] = 27.21138505      [eV]                                             !
+!   Time  : 1 [a.u.] = 0.02418884326505 [fs]                                             !
+!----------------------------------------------------------------------------------------!
+! * Ehrenfest-MD option is still trial.                                                  !
+! * Copy the ground state data directory ('data_for_restart') (or make symbolic link)    !
+!   calculated in 'samples/exercise_08_C2H2_opt/' and rename the directory to 'restart/' !
+!   in the current directory.                                                            !
+!########################################################################################!
+
+&calculation
+  !type of theory
+  theory = 'tddft_pulse'
+
+  !molecular dynamics option
+  yn_md  = 'y'
+/
+
+
+
+
theory specifies which theoretical method is used in the calculation.
+
yn_md is a switch for Ehrenfest molecular dynamics.
+
+
&control
+  !common name of output files
+  sysname = 'C2H2'
+/
+
+
+
+
sysname is a prefix for filenames of output files.
+
+
&units
+  !units used in input and output files
+  unit_system = 'A_eV_fs'
+/
+
+
+
+
unit_system specifies which unit system is used in the input and output files.
+
+
&system
+  !periodic boundary condition
+  yn_periodic = 'n'
+
+  !grid box size(x,y,z)
+  al(1:3) = 12.0d0, 12.0d0, 16.0d0
+
+  !number of elements, atoms, electrons and states(orbitals)
+  nelem  = 2
+  natom  = 4
+  nelec  = 10
+  nstate = 6
+/
+
+
+
+
yn_periodic specifies whether or not periodic boundary condition is applied.
+
al(i) specifies the spatial box size of the cubiod cell.
+
nelem is the number of elements in the system.
+
natom is the number of atoms in the system.
+
nelec is the number of electrons in the system.
+
nstate is the number of orbitals that are used in the calculation.
+
+
&pseudo
+  !name of input pseudo potential file
+  file_pseudo(1) = './C_rps.dat'
+  file_pseudo(2) = './H_rps.dat'
+
+  !atomic number of element
+  izatom(1) = 6
+  izatom(2) = 1
+
+  !angular momentum of pseudopotential that will be treated as local
+  lloc_ps(1) = 1
+  lloc_ps(2) = 0
+  !--- Caution ---------------------------------------!
+  ! Indices must correspond to those in &atomic_coor. !
+  !---------------------------------------------------!
+/
+
+
+
+
file_pseudo(n) specifies the filename of the pseudopotential file of the n-th element.
+
izatom(n) is the atomic number of the n-th element.
+
lloc_ps(n) specifies which angular momentum component is chosen as the local potential for the n-th element.
+
+
&functional
+  !functional('PZ' is Perdew-Zunger LDA: Phys. Rev. B 23, 5048 (1981).)
+  xc = 'PZ'
+/
+
+
+
+
xc specifies the exchange-correlation potential to be used in the calculation.
+
+
&rgrid
+  !spatial grid spacing(x,y,z)
+  dl(1:3) = 0.20d0, 0.20d0, 0.20d0
+/
+
+
+
+
dl(i) specifies the spatial grid spacing in i-th direction.
+
+
&tgrid
+  !time step size and number of time grids(steps)
+  dt = 1.00d-3
+  nt = 5000
+/
+
+
+
+
dt specifies the time step.
+
nt is the number of time steps for the time propagation.
+
+
&emfield
+  !envelope shape of the incident pulse('Ecos2': cos^2 type envelope for scalar potential)
+  ae_shape1 = 'Ecos2'
+
+  !peak intensity(W/cm^2) of the incident pulse
+  I_wcm2_1 = 1.00d8
+
+  !duration of the incident pulse
+  tw1 = 6.00d0
+
+  !mean photon energy(average frequency multiplied by the Planck constant) of the incident pulse
+  omega1 = 9.28d0
+
+  !polarization unit vector(real part) for the incident pulse(x,y,z)
+  epdir_re1(1:3) = 0.00d0, 0.00d0, 1.00d0
+
+  !carrier emvelope phase of the incident pulse
+  !(phi_cep1 must be 0.25 + 0.5 * n(integer) when ae_shape1 = 'Ecos2')
+  phi_cep1 = 0.75d0
+  !--- Caution ---------------------------------------------------------!
+  ! Defenition of the incident pulse is wrriten in:                     !
+  ! https://www.sciencedirect.com/science/article/pii/S0010465518303412 !
+  !---------------------------------------------------------------------!
+/
+
+
+
+
ae_shape1 specifies the envelope of the field.
+
I_wcm2_1 specify the intensity of the pulse in unit of W/cm2.
+
tw1 specifies the duration of the pulse.
+
omega1 specifies the mean photon energy of the pulse.
+
epdir_re1(i) specifies the i-th component of the real part of the polarization unit vector.
+
phi_cep1 specifies the carrier-envelope phase of the pulse.
+
+
&md
+  !ensemble
+  ensemble = 'NVE'
+
+  !set of initial velocities
+  yn_set_ini_velocity = 'y'
+
+  !setting temperature [K] for NVT ensemble, velocity scaling,
+  !and generating initial velocities
+  temperature0_ion_k = 300.0d0
+
+  !time step interval for updating pseudopotential
+  step_update_ps = 20
+/
+
+
+
+
ensemble specifies the choice of the ensemble.
+
yn_set_ini_velocity is a switch to prepare initial velocity for atoms.
+
temperature0_ion_k specifies the temperature that is used to generate initial velocity of ions.
+
step_update_ps specifies the time step interval to update projector for the nonlocal pseudopotential.
+
+
+
+

Output files

+

After the calculation, following output files are created in the +directory that you run the code,

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + +
file namedescription
C2H2_pulse.datadipole moment as +functions of energy
C2H2_rt.data
+
components of +change of dipole moment +(electrons/plus definition)
+
and total dipole moment +(electrons/minus + ions/plus) +as functions of time
+
+
C2H2_rt_energy.datacomponents of +total energy +and difference of total energy +as functions of time
C2H2_trj.xyzTrajectory of atoms(ions): +Atomic coordinates, velocities, +and forces are printed
PS_C_KY_n.datinformation on pseodupotential +file for carbon atom
PS_H_KY_n.datinformation on pseodupotential +file for hydrogen atom
+
+
You may download the above files (zipped file) from:
+ +
+

Explanations of the files are described below:

+

C2H2_pulse.data

+

Time-frequency Fourier transformation of the dipole moment.

+
# Fourier-transform spectra:
+# energy: Frequency
+# dm: Dopile moment
+# 1:energy[eV] 2:Re(dm_x)[fs*Angstrom] 3:Re(dm_y)[fs*Angstrom] 4:Re(dm_z)[fs*Angstrom] 5:Im(dm_x)[fs*Angstrom] 6:Im(dm_y)[fs*Angstrom] 7:Im(dm_z)[fs*Angstrom] 8:|dm_x|^2[fs^2*Angstrom^2] 9:|dm_y|^2[fs^2*Angstrom^2] 10:|dm_z|^2[fs^2*Angstrom^2]
+
+
+

C2H2_rt.data

+

Results of time evolution calculation for vector potential, electric field, and dipole moment.

+
# Real time calculation:
+# Ac_ext: External vector potential field
+# E_ext: External electric field
+# Ac_tot: Total vector potential field
+# E_tot: Total electric field
+# ddm_e: Change of dipole moment (electrons/plus definition)
+# dm: Total dipole moment (electrons/minus + ions/plus)
+# 1:Time[fs] 2:Ac_ext_x[fs*V/Angstrom] 3:Ac_ext_y[fs*V/Angstrom] 4:Ac_ext_z[fs*V/Angstrom] 5:E_ext_x[V/Angstrom] 6:E_ext_y[V/Angstrom] 7:E_ext_z[V/Angstrom] 8:Ac_tot_x[fs*V/Angstrom] 9:Ac_tot_y[fs*V/Angstrom] 10:Ac_tot_z[fs*V/Angstrom] 11:E_tot_x[V/Angstrom] 12:E_tot_y[V/Angstrom] 13:E_tot_z[V/Angstrom] 14:ddm_e_x[Angstrom] 15:ddm_e_y[Angstrom] 16:ddm_e_z[Angstrom] 17:dm_x[Angstrom] 18:dm_y[Angstrom] 19:dm_z[Angstrom]
+
+
+

C2H2_rt_energy.data

+

Eall and Eall-Eall0 are total energy and electronic excitation energy, respectively.

+
# Real time calculation:
+# Eall: Total energy
+# Eall0: Initial energy
+# Tion: Kinetic energy of ions
+# Temperature_ion: Temperature of ions
+# E_work: Work energy of ions(sum f*dr)
+# 1:Time[fs] 2:Eall[eV] 3:Eall-Eall0[eV] # 4:Tion[eV] 5:Temperature_ion[K] 6:E_work[eV]
+
+
+

C2H2_trj.xyz

+

Atomic coordinates [Angstrom], velocities [a.u.] and forces [a.u.] are printed along the time evolution in xyz format.

+
+
+
+
+

FDTD simulation(electromagnetic analysis)

+
+

Exercise-10: Absorption-, Scattering-, and Extinction-cross-sections of an Au nanoparticle in FDTD simulation

+

In this exercise, we learn the calculation of the absorption-, scattering-, and extinction-cross-sections of an Au nanoparticle, +by applying the incident pulse in the time-dependent Maxwell equations. +As outputs of the calculation, those cross-sections and the time response of the electromagnetic field are calculated. +A pulsed electric field that has \(\cos^2\) envelope shape is applied. +The parameters that characterize the pulsed field such as magnitude, frequency, polarization direction, and carrier envelope phase are specified in the input file.

+
+

Input files

+

To run the code, the input file AuNP_fdtd.inp is used:

+ ++++ + + + + + + + + +
file namedescription
AuNP_fdtd.inpinput file that contains input +keywords and their values.
+

In the input file AuNP_fdtd.inp, input keywords are specified. +Most of them are mandatory to execute this exercise. +This will help you to prepare the input file for other systems that you want to calculate. +A complete list of the input keywords that can be used in the input file +can be found in List of input keywords.

+
!########################################################################################!
+! Excercise 10: Absorption-, Scattering-, and Extinction-cross-sections                  !
+!               of an Au nanoparticle in FDTD simulation                                 !
+!----------------------------------------------------------------------------------------!
+! * The detail of this excercise is explained in our manual(see chapter: 'Exercises').   !
+!   The manual can be obtained from: https://salmon-tddft.jp/documents.html              !
+! * Input format consists of group of keywords like:                                     !
+!     &group                                                                             !
+!       input keyword = xxx                                                              !
+!     /                                                                                  !
+!   (see chapter: 'List of input keywords' in the manual)                                !
+!----------------------------------------------------------------------------------------!
+! * Conversion from unit_system = 'a.u.' to 'A_eV_fs':                                   !
+!   Length: 1 [a.u.] = 0.52917721067    [Angstrom]                                       !
+!   Energy: 1 [a.u.] = 27.21138505      [eV]                                             !
+!   Time  : 1 [a.u.] = 0.02418884326505 [fs]                                             !
+!########################################################################################!
+
+&calculation
+  !type of theory
+  theory = 'maxwell'
+/
+
+
+
+
theory specifies which theoretical method is used in the calculation.
+
+
&control
+  !common name of output files
+  sysname = 'AuNP'
+
+  !name of directory where output files are contained
+  base_directory = 'result'
+/
+
+
+
+
sysname is a prefix for filenames of output files.
+
base_directory specifies the directory name where output files are generated.
+
+
&units
+  !units used in input and output files
+  unit_system = 'A_eV_fs'
+/
+
+
+
+
unit_system specifies which unit system is used in the input and output files.
+
+
&system
+  !periodic boundary condition
+  yn_periodic = 'n'
+/
+
+
+
+
yn_periodic specifies whether or not periodic boundary condition is applied.
+
+
&emfield
+  !envelope shape of the incident pulse('Ecos2': cos^2 type envelope for scalar potential)
+  ae_shape1 = 'Ecos2'
+
+  !peak intensity(W/cm^2) of the incident pulse
+  I_wcm2_1 = 1.00d6
+
+  !duration of the incident pulse
+  tw1 = 7.50d0
+
+  !mean photon energy(average frequency multiplied by the Planck constant) of the incident pulse
+  omega1 = 2.30d0
+
+  !polarization unit vector(real part) for the incident pulse(x,y,z)
+  epdir_re1(1:3) = 1.00d0, 0.00d0, 0.00d0
+
+  !carrier emvelope phase of the incident pulse
+  !(phi_cep1 must be 0.25 + 0.5 * n(integer) when ae_shape1 = 'Ecos2')
+  phi_cep1 = 0.75d0
+  !--- Caution ---------------------------------------------------------!
+  ! Definition of the incident pulse is written in:                     !
+  ! https://www.sciencedirect.com/science/article/pii/S0010465518303412 !
+  !---------------------------------------------------------------------!
+/
+
+
+
+
ae_shape1 specifies the envelope of the field.
+
I_wcm2_1 specify the intensity of the pulse in unit of W/cm2.
+
tw1 specifies the duration of the pulse.
+
omega1 specifies the mean photon energy of the pulse.
+
epdir_re1(i) specifies the i-th component of the real part of the polarization unit vector.
+
phi_cep1 specifies the carrier-envelope phase of the pulse.
+
+
&maxwell
+  !grid box size(x,y,z) and number of spatial grids(x,y,z)
+  al_em(1:3)        = 600.0d1, 600.0d1, 600.0d1
+  num_rgrid_em(1:3) = 100, 100, 100
+  !--- Caution ---------------------------------------------------------!
+  ! Copumutational domain is set as:                                    !
+  !         -al_em/2 ~ al_em/2 for yn_periodic='n'                      !
+  ! whereas        0 ~ al_em   for yn_periodic='y'.                     !
+  !---------------------------------------------------------------------!
+
+  !total time
+  at_em = 50.0d0
+  !--- TIPS ------------------------------------------------------------!
+  ! Two of at_em, dt_em, and nt_em must be set.                         !
+  ! Otherwise, both at_em and nt_em or either of those must be set.     !
+  ! The latter automatically determines dt_em from CFL condition.       !
+  !---------------------------------------------------------------------!
+
+  !*** SHAPE INFORMATION(START) ****************************************!
+  !make and output shape file
+  yn_make_shape   = 'y'
+  yn_output_shape = 'y'
+
+  !number of shape-template
+  n_s = 1
+
+  !media ID and type of shape-template(shape ID)
+  id_s(1)  = 1
+  typ_s(1) = 'ellipsoid'
+
+  !information and origin of shape-template:
+  !inf_s(shape ID,x-diameter,y-diameter,z-diameter)
+  !ori_s(shape ID,x,y,z)
+  inf_s(1,1:3) = 200.0d1, 200.0d1, 200.0d1
+  ori_s(1,1:3) = 0.000d1, 0.000d1, 0.000d1
+  !--- TIPS ------------------------------------------------------------!
+  ! * shape file can be generated by also an external program           !
+  !   'FDTD_make_shape' in SALMON utilities                             !
+  !   (https://salmon-tddft.jp/utilities.html).                         !
+  !   The generated shape file can be read by an input keyword          !
+  !   'shape_file' in &maxwell.                                         !
+  ! * More complex shapes can be generated by other input keywords      !
+  !   which are in common with those used in 'FDTD_make_shape'.         !
+  !---------------------------------------------------------------------!
+  !*** SHAPE INFORMATION(END) ******************************************!
+
+  !*** MEDIA INFORMATION(START) ****************************************!
+  !number and type of media(media ID)
+  media_num     = 1
+  media_type(1) = 'lorentz-drude'
+  !--- Au described by Lorentz-Drude model -----------------------------!
+  ! The parameters are determined from:                                 !
+  ! (https://doi.org/10.1364/AO.37.005271)                              !
+  !---------------------------------------------------------------------!
+
+  !number of poles and plasma frequency of LD media(media ID)
+  pole_num_ld(1) = 6
+  omega_p_ld(1)  = 9.030d0
+
+  !oscillator strength, collision frequency,
+  !and oscillator frequency of LD media(media ID,pole ID)
+  f_ld(1,1:6)     = 0.760d0, 0.024d0, 0.010d0, 0.071d0, 0.601d0, 4.384d0
+  gamma_ld(1,1:6) = 0.053d0, 0.241d0, 0.345d0, 0.870d0, 2.494d0, 2.214d0
+  omega_ld(1,1:6) = 0.000d0, 0.415d0, 0.830d0, 2.969d0, 4.304d0, 13.32d0
+  !--- TIPS ------------------------------------------------------------!
+  ! If you calclate a metallic nanoparticle surrounded by something     !
+  ! other than vacuum/air, such as Au nanoparticle in water solution,   !
+  ! you should change 'epsilon_em(0)' in &maxwell,                      !
+  ! which specifies the permittivity of surrounding medium.             !
+  !---------------------------------------------------------------------!
+  !*** MEDIA INFORMATION(END) ******************************************!
+
+  !*** SOURCE INFORMATION(START) ***************************************!
+  !type of method to generate the incident pulse
+  !('source': incident current source)
+  wave_input = 'source'
+
+  !location of source(x,y,z)
+  source_loc1(1:3) = 0.000d1, 0.000d1, -200.0d1
+
+  !propagation direction of the incident pulse(x,y,z)
+  ek_dir1(1:3) = 0.000d0, 0.000d0, 1.000d0
+  !*** SOURCE INFORMATION(END) *****************************************!
+
+  !*** ASE INFORMATION(START) ******************************************!
+  !number of wavelength grid points
+  !for Absorption-, Scattering-, and Extinction-cross-sections(ASE)
+  !normalized by the spectral distribution of the incident pulse
+  ase_num_em = 100
+
+  !minimum and maximum values of wavelength for ASE
+  ase_wav_min_em = 400.0d1
+  ase_wav_max_em = 800.0d1
+  !--- TIPS ------------------------------------------------------------!
+  ! ase_ene_min_em and ase_wav_max_em can also be available.            !
+  ! If those are used, ASE are outputed for energy axis.                !
+  !---------------------------------------------------------------------!
+
+  !size of a closed surface (box shape) to calculate ASE(x-size,y-size,z-size)
+  ase_box_size_em(1:3) = 300.0d1, 300.0d1, 300.0d1
+  !*** ASE INFORMATION(END) *********************************************!
+
+  !*** OBSERVATION INFORMATION(START) ***********************************!
+  !number of observation points
+  obs_num_em = 1
+
+  !location of observation point(observation ID,x,y,z)
+  obs_loc_em(1,1:3) = 0.0d0, 0.0d0, 0.0d0
+  !--- TIPS ------------------------------------------------------------!
+  ! * If you specify yn_obs_plane_em(1) = 'y',                          !
+  !   animation files can be made by an external program                !
+  !   'FDTD_make_figani' in SALMON utilities.                           !
+  !   (https://salmon-tddft.jp/utilities.html).                         !
+  !   The animation file visualizes electromagnetic field distributions !
+  !   on the cross-section including the observation point              !
+  !   whose location is determined by obs_loc_em.                       !
+  ! * If you specify obs_plane_ene_em(1,1:n) by certain values          !
+  !   space-energy distribution of electromagnetic field is outputed    !
+  !---------------------------------------------------------------------!
+  !*** OBSERVATION INFORMATION(END) ************************************!
+/
+
+
+
+
al_em(i) specifies the lengths of three sides of the cuboid where the grid points are prepared.
+
num_rgrid_em(i) specifies the number of grid points in i-th direction.
+
at_em specifies total time for electromagnetic analysis.
+
yn_make_shape is a switch for making shape. This is same functionality for FDTD_make_shape in SALMON utilities (https://salmon-tddft.jp/utilities.html).
+
yn_output_shape is a switch for outputing shape in cube file format.
+
n_s specifies number of shape-template.
+
id_s(n) specifies media ID for n-th shape-template.
+
typ_s(n) specifies type for n-th shape-template.
+
inf_s(n,i) specifies i-th information for n-th shape-template.
+
ori_s(n,i) specifies origin for n-th shape-template.
+
media_num specifies the number of the types of media that is provided in the shape file.
+
media_type(n) specifies the type of the n-th media.
+
pole_num_ld(n) and omega_p_ld(n) specify the number of poles and the plasmal frequency of the n-th media, respectively.
+
f_ld(n,m), omega_ld(n,m), gamma_ld(n,m) specify the oscillator strength, oscillator frequency, and collision frequency of the m-th pole of the n-th media, respectively.
+
wave_input specifies an electric current source that is used for the generation of the pulse.
+
source_loc1(i) specifies the coordinate of the current source.
+
ek_dir1(i) specifies the propagation direction of the pulse.
+
ase_num_em specifies number of wavelength grid points for Absorption-, Scattering-, and Extinction-cross-sections(ASE).
+
ase_wav_min_em specifies minimum value of wavelength for ASE.
+
ase_wav_max_em specifies maximum value of wavelength for ASE.
+
ase_box_size_em specifies size of a closed surface (box shape) to calculate ASE.
+
obs_num_em specifies the number of the observing point.
+
obs_loc_em(n,i) specifies the coordinate of n-th observing point.
+
+
+
+

Output files

+

After the calculation, following output files are created in the directory result,

+ ++++ + + + + + + + + + + + + + + + + + +
file namedescription
AuNP_ase_with_wf.dataA-, S-, and E-corss-sections +as functions of wavelength, +where window function is applied +in Fourier transformation
AuNP_ase_without_wf.dataA-, S-, and E-corss-sections +as functions of wavelength, +where window function is not +applied in Fourier transformation
obs1_at_point_rt.datacomponents of +electric and magnetic fields +as functions of time
shape.cubeshape file for fdtd
+

Explanations of the files are described below:

+

AuNP_ase_with_wf.data

+

Results of A-, S-, and E-cross-sections normalized by the spectral distribution of the incident pulse. +Also the spectral distribution for pointing vector of incident pulse is included. +Window function is applied in Fourier transformation.

+
# Absorption-, Scattering-, and Extinction-cross-sections normalized by the spectral distribution of the incident pulse (with window function):
+# sigma_a: Absorption cross-section
+# sigma_s: Scattering cross-section
+# sigma_e: Extinction cross-section
+# S: Pointing vector of incident pulse along propagation direction
+# 1:Wavelength[Angstrom] 2:sigma_a[Angstrom^2] 3:sigma_s[Angstrom^2] 4:sigma_e[Angstrom^2] 5:S[VA/Angstrom^2*fs^2]
+
+
+

AuNP_ase_without_wf.data

+

Results of A-, S-, and E-cross-sections normalized by the spectral distribution of the incident pulse. +Also the spectral distribution for pointing vector of incident pulse is included. +Window function is not applied in Fourier transformation.

+
# Absorption-, Scattering-, and Extinction-cross-sections normalized by the spectral distribution of the incident pulse (without window function):
+# sigma_a: Absorption cross-section
+# sigma_s: Scattering cross-section
+# sigma_e: Extinction cross-section
+# S: Pointing vector of incident pulse along propagation direction
+# 1:Wavelength[Angstrom] 2:sigma_a[Angstrom^2] 3:sigma_s[Angstrom^2] 4:sigma_e[Angstrom^2] 5:S[VA/Angstrom^2*fs^2]
+
+
+

obs0_info.data

+

This file is used to generate animation files by using SALMON utilities with yn_obs_plane_em: https://salmon-tddft.jp/utilities.html

+

obs1_at_point_rt.data

+

Results of time evolution calculation for electric and magnetic fields at observation point 1.

+
# Real time calculation:
+# E: Electric field
+# H: Magnetic field
+# 1:Time[fs] 2:E_x[V/Angstrom] 3:E_y[V/Angstrom] 4:E_z[V/Angstrom] 5:H_x[A/Angstrom] 6:H_y[A/Angstrom] 7:H_z[A/Angstrom]
+
+
+

shape.cube

+

Shape file generated by yn_make_shape.

+
+
+
+

Exercise-11: Absorption-, Reflection-, and Transmission-rates of an Au nanoparticles metasurface in FDTD simulation

+

In this exercise, we learn the calculation ofthe absorption-, reflection-, and transmission-rates of a metasurface, +in which Au nanoparticles are periodically arrayed in two-dimension, +by applying the incident pulse in the time-dependent Maxwell equations. +As outputs of the calculation, those rates and the time response of the electromagnetic field are calculated. +A pulsed electric field that has \(\cos^2\) envelope shape is applied. +The parameters that characterize the pulsed field such as magnitude, frequency, polarization direction, and carrier envelope phase are specified in the input file.

+
+

Input files

+

To run the code, the input file AuNP_fdtd.inp is used:

+ ++++ + + + + + + + + +
file namedescription
AuNPs_fdtd.inpinput file that contains input +keywords and their values.
+

In the input file AuNPs_fdtd.inp, input keywords are specified. +Most of them are mandatory to execute this exercise. +This will help you to prepare the input file for other systems that you want to calculate. +A complete list of the input keywords that can be used in the input file +can be found in List of input keywords.

+
!########################################################################################!
+! Excercise 11: Absorption-, Reflection-, and Transmission-rates                         !
+!               of an Au nanoparticles metasurface in FDTD simulation                    !
+!----------------------------------------------------------------------------------------!
+! * The detail of this excercise is explained in our manual(see chapter: 'Exercises').   !
+!   The manual can be obtained from: https://salmon-tddft.jp/documents.html              !
+! * Input format consists of group of keywords like:                                     !
+!     &group                                                                             !
+!       input keyword = xxx                                                              !
+!     /                                                                                  !
+!   (see chapter: 'List of input keywords' in the manual)                                !
+!----------------------------------------------------------------------------------------!
+! * Conversion from unit_system = 'a.u.' to 'A_eV_fs':                                   !
+!   Length: 1 [a.u.] = 0.52917721067    [Angstrom]                                       !
+!   Energy: 1 [a.u.] = 27.21138505      [eV]                                             !
+!   Time  : 1 [a.u.] = 0.02418884326505 [fs]                                             !
+!########################################################################################!
+
+&calculation
+  !type of theory
+  theory = 'maxwell'
+/
+
+
+
+
theory specifies which theoretical method is used in the calculation.
+
+
&control
+  !common name of output files
+  sysname = 'AuNPs'
+
+  !name of directory where output files are contained
+  base_directory = 'result'
+/
+
+
+
+
sysname is a prefix for filenames of output files.
+
base_directory specifies the directory name where output files are generated.
+
+
&units
+  !units used in input and output files
+  unit_system = 'A_eV_fs'
+/
+
+
+
+
unit_system specifies which unit system is used in the input and output files.
+
+
&system
+  !periodic boundary condition
+  yn_periodic = 'y'
+/
+
+
+
+
yn_periodic specifies whether or not periodic boundary condition is applied.
+
+
&emfield
+  !envelope shape of the incident pulse('Ecos2': cos^2 type envelope for scalar potential)
+  ae_shape1 = 'Ecos2'
+
+  !peak intensity(W/cm^2) of the incident pulse
+  I_wcm2_1 = 1.00d6
+
+  !duration of the incident pulse
+  tw1 = 7.50d0
+
+  !mean photon energy(average frequency multiplied by the Planck constant) of the incident pulse
+  omega1 = 2.30d0
+
+  !polarization unit vector(real part) for the incident pulse(x,y,z)
+  epdir_re1(1:3) = 1.00d0, 0.00d0, 0.00d0
+
+  !carrier emvelope phase of the incident pulse
+  !(phi_cep1 must be 0.25 + 0.5 * n(integer) when ae_shape1 = 'Ecos2')
+  phi_cep1 = 0.75d0
+  !--- Caution ---------------------------------------------------------!
+  ! Definition of the incident pulse is written in:                     !
+  ! https://www.sciencedirect.com/science/article/pii/S0010465518303412 !
+  !---------------------------------------------------------------------!
+/
+
+
+
+
ae_shape1 specifies the envelope of the field.
+
I_wcm2_1 specify the intensity of the pulse in unit of W/cm2.
+
tw1 specifies the duration of the pulse.
+
omega1 specifies the mean photon energy of the pulse.
+
epdir_re1(i) specifies the i-th component of the real part of the polarization unit vector.
+
phi_cep1 specifies the carrier-envelope phase of the pulse.
+
+
&maxwell
+  !grid box size(x,y,z) and number of spatial grids(x,y,z)
+  al_em(1:3)        = 300.0d1, 300.0d1, 600.0d1
+  num_rgrid_em(1:3) = 50, 50, 100
+  !--- Caution ---------------------------------------------------------!
+  ! Copumutational domain is set as:                                    !
+  !         -al_em/2 ~ al_em/2 for yn_periodic='n'                      !
+  ! whereas        0 ~ al_em   for yn_periodic='y'.                     !
+  !---------------------------------------------------------------------!
+
+  !total time
+  at_em = 50.0d0
+  !--- TIPS ------------------------------------------------------------!
+  ! Two of at_em, dt_em, and nt_em must be set.                         !
+  ! Otherwise, both at_em and nt_em or either of those must be set.     !
+  ! The latter automatically determines dt_em from CFL condition.       !
+  !---------------------------------------------------------------------!
+
+  !absorbing boudnary conditions at bottom and top on z axis
+  boundary_em(3,1) = 'abc'
+  boundary_em(3,2) = 'abc'
+
+  !*** SHAPE INFORMATION(START) ****************************************!
+  !make and output shape file
+  yn_make_shape   = 'y'
+  yn_output_shape = 'y'
+
+  !number of shape-template
+  n_s = 1
+
+  !media ID and type of shape-template(shape ID)
+  id_s(1)  = 1
+  typ_s(1) = 'ellipsoid'
+
+  !information and origin of shape-template:
+  !inf_s(shape ID,x-diameter,y-diameter,z-diameter)
+  !ori_s(shape ID,x,y,z)
+  inf_s(1,1:3) = 200.0d1, 200.0d1, 200.0d1
+  ori_s(1,1:3) = 150.0d1, 150.0d1, 300.0d1
+  !--- TIPS ------------------------------------------------------------!
+  ! * shape file can be generated by also an external program           !
+  !   'FDTD_make_shape' in SALMON utilities                             !
+  !   (https://salmon-tddft.jp/utilities.html).                         !
+  !   The generated shape file can be read by an input keyword          !
+  !   'shape_file' in &maxwell.                                         !
+  ! * More complex shapes can be generated by other input keywords      !
+  !   which are in common with those used in 'FDTD_make_shape'.         !
+  !---------------------------------------------------------------------!
+  !*** SHAPE INFORMATION(END) ******************************************!
+
+  !*** MEDIA INFORMATION(START) ****************************************!
+  !number and type of media(media ID)
+  media_num     = 1
+  media_type(1) = 'lorentz-drude'
+  !--- Au described by Lorentz-Drude model -----------------------------!
+  ! The parameters are determined from:                                 !
+  ! (https://doi.org/10.1364/AO.37.005271)                              !
+  !---------------------------------------------------------------------!
+
+  !number of poles and plasma frequency of LD media(media ID)
+  pole_num_ld(1) = 6
+  omega_p_ld(1)  = 9.030d0
+
+  !oscillator strength, collision frequency,
+  !and oscillator frequency of LD media(media ID,pole ID)
+  f_ld(1,1:6)     = 0.760d0, 0.024d0, 0.010d0, 0.071d0, 0.601d0, 4.384d0
+  gamma_ld(1,1:6) = 0.053d0, 0.241d0, 0.345d0, 0.870d0, 2.494d0, 2.214d0
+  omega_ld(1,1:6) = 0.000d0, 0.415d0, 0.830d0, 2.969d0, 4.304d0, 13.32d0
+  !--- TIPS ------------------------------------------------------------!
+  ! If you calclate a metallic nanoparticles surrounded by something    !
+  ! other than vacuum/air, such as Au nanoparticles in water solution,  !
+  ! you should change 'epsilon_em(0)' in &maxwell,                      !
+  ! which specifies the permittivity of surrounding medium.             !
+  !---------------------------------------------------------------------!
+  !*** MEDIA INFORMATION(END) ******************************************!
+
+  !*** SOURCE INFORMATION(START) ***************************************!
+  !type of method to generate the incident pulse
+  !('source': incident current source)
+  wave_input = 'source'
+
+  !location of source(x,y,z)
+  source_loc1(1:3) = 0.000d1, 0.000d1, 100.0d1
+
+  !propagation direction of the incident pulse(x,y,z)
+  ek_dir1(1:3) = 0.000d0, 0.000d0, 1.000d0
+  !*** SOURCE INFORMATION(END) *****************************************!
+
+  !*** ART INFORMATION(START) ******************************************!
+  !number of wavelength grid points
+  !for Absorption-, Reflection-, and Transmission-rates(ART)
+  !normalized by the spectral distribution of the incident pulse
+  art_num_em = 100
+
+  !minimum and maximum values of wavelength for ART
+  art_wav_min_em = 400.0d1
+  art_wav_max_em = 800.0d1
+  !--- TIPS ------------------------------------------------------------!
+  ! art_ene_min_em and art_wav_max_em also can be available.            !
+  ! If those are used, ART are outputed for energy axis.                !
+  !---------------------------------------------------------------------!
+
+  !location of bottom and top planes on the propagation axis to calculate ART(x,y,z)
+  art_plane_bot_em(1:3) = 150.0d1, 150.0d1, 150.0d1
+  art_plane_top_em(1:3) = 150.0d1, 150.0d1, 450.0d1
+  !*** ART INFORMATION(END) *********************************************!
+
+  !*** OBSERVATION INFORMATION(START) ***********************************!
+  !number of observation points
+  obs_num_em = 1
+
+  !location of observation point(observation ID,x,y,z)
+  obs_loc_em(1,1:3) = 150.0d1, 150.0d1, 300.0d1
+  !--- TIPS ------------------------------------------------------------!
+  ! * If you specify yn_obs_plane_em(1) = 'y',                          !
+  !   animation files can be made by an external program                !
+  !   'FDTD_make_figani' in SALMON utilities.                           !
+  !   (https://salmon-tddft.jp/utilities.html).                         !
+  !   The animation file visualizes electromagnetic field distributions !
+  !   on the cross-section including the observation point              !
+  !   whose location is determined by obs_loc_em.                       !
+  ! * If you specify obs_plane_ene_em(1,1:n) by certain values          !
+  !   space-energy distribution of electromagnetic field is outputed    !
+  !---------------------------------------------------------------------!
+  !*** OBSERVATION INFORMATION(END) ************************************!
+/
+
+
+
+
al_em(i) specifies the lengths of three sides of the cuboid where the grid points are prepared.
+
num_rgrid_em(i) specifies the number of grid points in i-th direction.
+
at_em specifies total time for electromagnetic analysis.
+
boundary_em(i,n) specifies the boundary condition for the electromagnetic analysis. The first index i corresponds to the x,y, and z direction. The second index n specifies bottom or top of the material.
+
yn_make_shape is a switch for making shape. This is same functionality for FDTD_make_shape in SALMON utilities (https://salmon-tddft.jp/utilities.html).
+
yn_output_shape is a switch for outputing shape in cube file format.
+
n_s specifies number of shape-template.
+
id_s(n) specifies media ID for n-th shape-template.
+
typ_s(n) specifies type for n-th shape-template.
+
inf_s(n,i) specifies i-th information for n-th shape-template.
+
ori_s(n,i) specifies origin for n-th shape-template.
+
media_num specifies the number of the types of media that is provided in the shape file.
+
media_type(n) specifies the type of the n-th media.
+
pole_num_ld(n) and omega_p_ld(n) specify the number of poles and the plasmal frequency of the n-th media, respectively.
+
f_ld(n,m), omega_ld(n,m), gamma_ld(n,m) specify the oscillator strength, oscillator frequency, and collision frequency of the m-th pole of the n-th media, respectively.
+
wave_input specifies an electric current source that is used for the generation of the pulse.
+
source_loc1(i) specifies the coordinate of the current source.
+
ek_dir1(i) specifies the propagation direction of the pulse.
+
+
+
art_num_em specifies number of wavelength grid points for Absorption-, Reflection-, and Transmission-rates(ART).
+
art_wav_min_em specifies minimum value of wavelength for ART.
+
art_wav_max_em specifies maximum value of wavelength for ART.
+
art_plane_bot_em specifies location of bottom plane on the propagation axis to calculate ART
+
art_plane_top_em specifies location of top plane on the propagation axis to calculate ART
+
obs_num_em specifies the number of the observing point.
+
obs_loc_em(n,i) specifies the coordinate of n-th observing point.
+
+
+
+

Output files

+

After the calculation, following output files are created in the directory result,

+ ++++ + + + + + + + + + + + + + + + + + +
file namedescription
AuNPs_art_with_wf.dataA-, R-, and T-rates +as functions of wavelength, +where window function is applied +in Fourier transformation
AuNPs_art_without_wf.dataA-, R-, and T-rates +as functions of wavelength, +where window function is not +applied in Fourier transformation
obs1_at_point_rt.datacomponents of +electric and magnetic fields +as functions of time
shape.cubeshape file for fdtd
+

Explanations of the files are described below:

+

AuNPs_art_with_wf.data

+

Results of A-, R-, and T-rates normalized by the spectral distribution of the incident pulse. +Also the spectral distribution for pointing vector of incident pulse is included. +Window function is applied in Fourier transformation.

+
# Absorption-, Reflection-, and Transmission-rates normalized by the spectral distribution of the incident pulse (with window function):
+# A: Absorption rate
+# R: Reflection rate
+# T: Transmission rate
+# S: Pointing vector of incident pulse along propagation direction
+# 1:Wavelength[Angstrom] 2:A % 3:R % 4:T % 5:S[VA/Angstrom^2*fs^2]
+
+
+

AuNPs_art_without_wf.data

+

Results of A-, R-, and T-rates normalized by the spectral distribution of the incident pulse. +Also the spectral distribution for pointing vector of incident pulse is included. +Window function is not applied in Fourier transformation.

+
# Absorption-, Reflection-, and Transmission-rates normalized by the spectral distribution of the incident pulse (without window function):
+# A: Absorption rate
+# R: Reflection rate
+# T: Transmission rate
+# S: Pointing vector of incident pulse along propagation direction
+# 1:Wavelength[Angstrom] 2:A % 3:R % 4:T % 5:S[VA/Angstrom^2*fs^2]
+
+
+

obs0_info.data

+

This file is used to generate animation files by using SALMON utilities with yn_obs_plane_em: https://salmon-tddft.jp/utilities.html

+

obs1_at_point_rt.data

+

Results of time evolution calculation for electric and magnetic fields at observation point 1.

+
# Real time calculation:
+# E: Electric field
+# H: Magnetic field
+# 1:Time[fs] 2:E_x[V/Angstrom] 3:E_y[V/Angstrom] 4:E_z[V/Angstrom] 5:H_x[A/Angstrom] 6:H_y[A/Angstrom] 7:H_z[A/Angstrom]
+
+
+

shape.cube

+

Shape file generated by yn_make_shape.

+
+
+
+
+

[Trial] Semiconductor Bloch equation

+

The SALMON program includes a time evolution calculation feature based on the Semiconductor Bloch Equation (SBE), which was added starting from version 2.2.0. +The SBE calculation feature is currently an experimental implementation, and the developers cannot guarantee its behavior. +To activate the SBE calculation feature, specify the value sbe or sbe_maxwell for the theory option in the input file; these feature includes both a real-time calculation feature equivalent to "tddft_pulse" and a multiscale calculation feature equivalent to "multi_scale_maxwell_tddft" that are already available in the program.

+
+

[Trial] Exercise-x1: Semiconductor Bloch equation (SBE) calculation

+

To run the code, following files in the directory SALMON/samples/exercise_x1_bulkSi_sbe_gs_rt/ are used:

+ ++++ + + + + + + + + + + + + + + +
file namedescription
Si_gs.inpinput file for ground state calculation +keywords and their values
Si_rps.datpseodupotential file for silicon atom
Si_sbe_rt.inpinput file for real time calculation +keywords and their values
+
+

Ground state calculation

+

Before performing SBE calculations, various information of ground state such as the eigenenergy and transition dipole moment imust be prepared. +The conditions for the ground state calculation are specified in Si_gs.inp; +please refer to +Exercise-4: Ground state of crystalline silicon +for more details. +Note that it is necessary to set yn_out_tm parameter to output the transition dipole moment.

+
&analysis
+   yn_out_tm = "y"
+/
+
+
+
+
+

Output files of ground state calculation

+

After the calculation, a few output files are created; on particular, the following three files are important for SBE calculations.

+ ++++ + + + + + + + + + + + + + + +
file namedescription
Si_k.datasampled k-point coordinates in BZ
Si_eigen.dataEigenenergies
Si_tm.dataTransition dipole moment matrix
+
+
+

Real-time SBE calculation

+

To perform real-time calculations, it is necessary to place the three data files from the ground-state calculation, SYSNAME_k.data, SYSNAME_eigen.data, and SYSNAME_tm.data, in the same directory. If the real-time calculation is performed in a different directory from the ground-state calculation, it is necessary to manually copy (or link) the above files.

+
&calculation
+   theory = 'sbe'
+/
+
+
+

The parameter theory='sbe' must be specified.

+
&control
+   sysname = 'Si'
+/
+
+&units
+   unit_system = 'au'
+/
+
+&system
+   yn_periodic = 'y'
+   al(1:3) = 10.26d0, 10.26d0, 10.26d0
+   nelem = 1
+   natom = 8
+   nelec = 32
+   nstate = 32
+/
+
+&kgrid
+   num_kgrid(1:3) = 8, 8, 8
+/
+
+&tgrid
+   dt = 0.05d0
+   nt = 20000
+/
+
+&emfield
+   ae_shape1 = "Acos2"
+   epdir_re1(1:3) = 0.0d0, 0.0d0, 1.0d0
+   I_wcm2_1 = 1.0d+12
+   tw1 = 1000.0d0
+   omega1 = 0.056d0
+/
+
+
+

The above section shares the same parameters as the time-evolution calculations for bulk crystals. +please refer to +Exercise-6: Electron dynamics in crystalline silicon under a pulsed electric field +for more details.

+
+
+
+

[Trial] Exercise-x2: Multiscale Maxwell semiconductor Bloch equation (Maxwell+SBE) calculation

+

To run the code, following files in the directory SALMON/samples/exercise_x2_bulkSi_bloch_gs_ms/ are used:

+ ++++ + + + + + + + + + + + + + + +
file namedescription
Si_gs.inpInputfile for ground state calculation
Si_sbe_ms_1d_film.inpInputfile for 1D multiscale calculation
Si_sbe_ms_2d_cylinder.inpInputfile for 2D multiscale calculation
+

To perform Maxwell+SBE multiscale calculations, various data of the ground state, such as eigenenergy and transition dipole moment, are required. It is necessary to perform the ground-state calculation: Si_gs.inp before executing multiscale calculations. +See +Exercise-x1 +.

+
+

Multiscale calculation for laser pulse propagation in silicon nano-film (1D calculation)

+

*Si_sbe_ms_1d_film.inp

+
&calculation
+   theory = 'maxwell_sbe'
+/
+
+
+

The parameter theory='maxwell_sbe' must be specified.

+
&system
+   yn_periodic = 'y'
+   al(1:3) = 10.26d0, 10.26d0, 10.26d0
+   nelem = 1
+   natom = 8
+   nelec = 32
+   nstate = 32
+/
+
+&emfield
+   ae_shape1 = "Acos2"
+   epdir_re1(1:3) = 0.0d0, 0.0d0, 1.0d0
+   I_wcm2_1 = 1.0d+12
+   tw1 = 1000.0d0
+   omega1 = 0.056d0
+/
+
+&multiscale
+   nx_m = 20
+   ny_m = 1
+   nz_m = 1
+   hx_m = 94.52 ! 5nm
+   hy_m = 94.52 ! 5nm
+   hz_m = 94.52 ! 5nm
+   nxvac_m(1) = 2000
+   nxvac_m(2) = 2000
+/
+
+
+

The above section shares the same parameters as the time-evolution calculations for bulk crystals. +Please refer to +Exercise-7: Pulsed-light propagation through a silicon thin film +for more details.

+
+
+

Multiscale calculation for laser pulse incident on arbitrary-shaped nanostructures (2D calculation)

+

The multidimensional multiscale method (2D or 3D) can handle the light-matter interaction with arbitrarily shaped nanostructures. +As a example, the periodically arranged silicon nanocylinder array is considered

+

*Si_sbe_ms_2d_cylinder.inp

+

Most parts of the input file are common with the previous 1D calculatio.

+
&multiscale
+   fdtddim = "3d"
+   hx_m = 189.0 ! 5nm
+   hy_m = 189.0 ! 5nm
+   hz_m = 189.0 ! 5nm
+   nx_m = 80
+   ny_m = 80
+   nz_m = 1
+   nxvac_m(1) = 2000
+   nxvac_m(2) = 2000
+/
+
+
+

This section defines a 2D computational domain of 80 cells x 80 cells (400 nm x 400 nm). +Furthermore, a vacuum region of 2000 cells (10 um) is added along the x-axis to surround the computational domain.

+
&maxwell
+   ! Media 1
+   media_type(1) = "multiscale"
+   ! Shaper
+   n_s = 1
+   ! Object 1
+   id_s(1) = 1
+   typ_s(1) = "ellipsoid"
+   ori_s(1,1:3) = 7561.43, 7561.43, 94.52
+   inf_s(1,1:3) =  7561.43,  7561.43, 10000.0
+   ! Detectors
+   obs_num_em=3
+   obs_loc_em(1, 1:3) = 7561.43, 7561.43, 94.52
+   obs_loc_em(2, 1:3) = 11342.145, 7561.43, 94.52
+   obs_loc_em(3, 1:3) = 15122.86, 7561.43, 94.52
+/
+
+
+

This section defines the shape, coordinates and arrangement of the macroscopic objects. +The most of parameters are common with theory='maxwell'. +Please refer to +Exercise-10 +for more details.

+

Note that if you want to treat the medium with electron dynamics calculations (TDDFT or SBE), specify``media_type`` as 'multiscale'.

+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/en/genindex.html b/docs/en/genindex.html new file mode 100644 index 0000000..5bff8fb --- /dev/null +++ b/docs/en/genindex.html @@ -0,0 +1,113 @@ + + + + + + + Index — SALMON software manual v.2.2.0 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + +

Index

+ +
+ +
+ + +
+
+
+ +
+ +
+

© Copyright 2017-2023, SALMON developers.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/en/index.html b/docs/en/index.html new file mode 100644 index 0000000..46fe48b --- /dev/null +++ b/docs/en/index.html @@ -0,0 +1,186 @@ + + + + + + Manual for SALMON-v.2.2.0 — SALMON software manual v.2.2.0 documentation + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+ + +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/en/input_keyword_list.html b/docs/en/input_keyword_list.html new file mode 100644 index 0000000..57b8f89 --- /dev/null +++ b/docs/en/input_keyword_list.html @@ -0,0 +1,3946 @@ + + + + + + List of input keywords — SALMON software manual v.2.2.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

List of input keywords

+

'[Trial]' : These options are not tested well

+
+

&calculation

+
+

theory

+

character, default=''

+
+
+
Choice of a theory to be used in the calculation.
+
Options:
+
+
dft / ground state calculation based on DFT
+
dft_md / ab initio MD simulations based on DFT (electronic ground state)
+
tddft_response / linear response TDDFT calculation in real time
+
tddft_pulse / simulations under pulsed electric field based on TDDFT
+
single_scale_maxwell_tddft / single-scale simulation coupling Maxwell and TDDFT
+
multi_scale_maxwell_tddft / multiscale simulation coupling Maxwell and TDDFT
+
maxwell / electromagnetic analysis using finite difference time domain (FDTD) method
+
dft_k_expand / convert checkpoint data of dft with k-points calculation to that of larger supercell system with gamma-point
+
sbe / [Trial] simulations under pulsed electric field based in semiconductor Bloch equation
+
maxwell_sbe / [Trial] multiscale simulation coupling Maxwell and semiconductor Bloch equation
+
+
+
+
+
+

yn_md

+

[Trial] character, default='n'

+
+
+
Available for theory='dft' (ground-state MD) and theory='tddft_pulse' (Ehrenfest MD).
+
Switch for molecular dynamics calculation.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

yn_opt

+

[Trial] character, default='n'

+
+
+
Available for theory='dft'.
+
Switch for geometry optimization.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+
+

&control

+
+

sysname

+

character, default='default'

+
+
+
Available for all options of theory.
+
A prefix of output files.
+
+
+
+
+

base_directory

+

character, default='./'

+
+
+
Available for all options of theory.
+
Name of a directory where major output files are stored.
+
+
+
+
+

yn_restart

+

character, default='n'

+
+
+
Available for the DFT/TDDFT based options of theory and theory='maxwell'.
+
Whether to continue previous calculation (restart) or start a new calculation.
+
Options:
+
+
'y' / enable (restart)
+
'n' / disable (new calculation)
+
+
+
+
+
+

directory_read_data

+

character, default='restart/'

+
+
+
Available for yn_restart='y'.
+
Directory name to read data that are required in the present calculation (restart) and were generated in previous calculations. For TDDFT based options, it specifies the name of the directory containing ground state results that were stored in 'data_for_restart'. When restarting from a checkpoint, it specifies the name of the directory that contains the checkpoint data.
+
+
+
+
+

yn_self_checkpoint

+

character, default='n'

+
+
+
Available for the DFT/TDDFT based options of theory.
+
With this option, each process writes/reads the restart (and checkpoint) data independently (self data format) so that the restart cost is reduced for large systems. Note that the number of processes and their assignments must be unchanged in restarting. The data is written out into 'checkpoint_gs_XXXXXX/' (DFT) or 'checkpoint_rt_XXXXXX/' (TDDFT).
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

checkpoint_interval

+

integer, default=-1

+
+
+
Available for the DFT/TDDFT based options of theory and theory='maxwell'.
+
Interval of time steps (iteration steps) to write down the checkpoint data during the time-propagation (SCF iteration). Checkpoint data will not be written if a negative value is set.
+
+
+
+
+

yn_reset_step_restart

+

character, default='n'

+
+
+
Available for yn_restart='y' in the DFT/TDDFT based options of theory.
+
With this option, the counter of the SCF iteration step (for DFT) or the counter of the time propagation step (for TDDFT) is reset to 0 at the restart. In the SCF iteration, the density data in the previous SCF iteration step are abondoned.
+
+
+
+
+

read_gs_restart_data

+

character, default='all'

+
+
+
Available for yn_restart='y' with theory='dft'.
+
Specify which data are read in the restart. Specified data that are generated in the previous calculation and are contained in the restart (or checkpoint) directory are used in restarting the SCF iteration of DFT. The default option 'all' indicates the complete restart. In other options, a part of restart data are used (other data are prepared in the same way as in the initial SCF step).
+
Options:
+
+
all / all of restart data are read
+
all:single / same as all option but the data is read in the single file format even though the self data format is specified with yn_self_checkpoint='y' (i.e., the restart data is read in the single file format while written out in the self format)
+
rho_inout / only electron densities including those of previous iteration steps are read (from rho_inout.bin file)
+
rho_inout:single / same as rho_inout option but the data is read in the single file format even though the self data format is specified with yn_self_checkpoint='y'
+
rho / only the latest electron density is read (from user-made data)
+
wfn / only orbital wavefunctions are read
+
+
+
+
+
+

write_gs_restart_data

+

character, default='all'

+
+
+
Available for theory='dft'.
+
Options
+
+
all / all of restart data are written out
+
rho_inout / only electron densities including those of previous iteration steps are written out
+
wfn / only orbital wavefunctions are written out
+
checkpoint_only / the restart data are outputted only in the self data format (separated data for each process) at the last step into 'checkpoint_gs_XXXXXX/' directory (yn_self_checkpoint='y' is required) without generating the restart data into 'data_for_restart/' directory in the single file format.
+
+
Output data files are written out in the restart (or checkpoint) directory.
+
The default option 'all' gives the complete set of restart data.
+
+
+
+
+

time_shutdown

+

[Trial] real(8), default=-1d0

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Timer for automatic shutdown. The unit is second.
+
If a negative time is set, the automatic shutdown will not be performed.
+
+
+
+
+

method_wf_distributor

+

character, default='single'

+
+
+
Available for the DFT/TDDFT based options of theory.
+
A method to save/load orbital wavefunctions.
+
Options
+
+
single: all orbital wavefunctions are saved(loaded) to(from) a single file.
+
slice : each orbital wavefunction is saved(loaded) to(from) a file. This choice reduces the I/O costs, and increase the flexiblility in handling files for large systems.
+
+
+
+
+
+

nblock_wf_distribute

+

integer, default='16'

+
+
+
Available for method_wf_distributor='slice'.
+
In the 'slice' mode, nblock_wf_distribute files are saved in one directory.
+
+
+
+
+
+

&units

+
+

unit_system

+

character, default='au'

+
+
+
Unit system to be used in input variables and some of output files.
+
If unit_system = 'A_eV_fs' is chosen, Angstrom for length, eV for energy, and fs for time are adopted.
+
For isolated systems specified by yn_periodic = 'n' in &system, a unit of 1/eV is used for the output files of DOS and PDOS if unit_system = 'A_eV_fs' is specified, while atomic unit is used if not. For other output files, the Angstrom/eV/fs units are used irrespective of the input keyword. For periodic systems specified by yn_periodic = 'n' in &system, the unit system specified by this input keyword is used for most output files. To confirm the unit, see the first few lines of output files.
+
Options:
+
+
'au' or 'a.u.' / atomic unit system
+
'A_eV_fs' / Angstrom-eV-fs unit system
+
+
+
+
+
+
+

&parallel

+
+

nproc_k

+
+
+

nproc_ob

+
+
+

nproc_rgrid(3)

+

integer, default=0

+
+
+
Options:
+
+
nproc_k/ Number of MPI parallelization for k-points of electron orbitals.
+
nproc_ob/ Number of MPI parallelization for orbital index of electron orbitals.
+
nproc_rgrid(3)'/ Number of MPI parallelization for each direction of real-space grid that are used for electron orbitals and density.
+

+
+
Defaults are 0 for nproc_k/nproc_ob and (0,0,0) for nproc_rgrid. In the default choice, MPI assignment is achieved atomatically. Users can specify nproc_k, nproc_ob, and nproc_rgrid manually. In that case, there are several constraints that should be fulfilled:
+
+
nproc_k must be set to 1 for &system/yn_periodic='n'.
+
nproc_k and nproc_ob must be set to 1 for theory='maxwell'.
+
nproc_k * nproc_ob * nproc_rgrid(1) * nproc_rgrid(2) * nproc_rgrid(3) = total number of processes.
+
+
+
+
+
+

yn_ffte

+

character, default='n'

+
+
+
Available for the DFT/TDDFT based options of theory with &system/yn_periodic='y'
+
For periodic systems, SALMON uses Fourier transformation to solve a poisson equation.
+
This switch selects if FFTE library is used or not. If FFTE is not used, the Fourier transformation in a simple algorithm is carried out.
+
Options
+
+
'y' / enable
+
'n' / disable
+

+
+
To enable it, following relations must be satisfied.
+
+
mod(num_rgrid(1), nproc_rgrid(2)) == 0
+
mod(num_rgrid(2), nproc_rgrid(2)) == 0
+
mod(num_rgrid(2), nproc_rgrid(3)) == 0
+
mod(num_rgrid(3), nproc_rgrid(3)) == 0
+
+
+
+
+
+

yn_fftw

+

character, default='n'

+
+
+
Available for the DFT/TDDFT based options of theory with both &system/yn_periodic='y' and &system/yn_periodic='n'.
+
For isolated systems, this option is effective when &poisson/method_poisson='ft'
+
This switch selects if FFTW library is used or not. If FFTW is not used, the discrete Fourier transformation in a simple algorithm is carried out.
+
Caution: This variable is effective only when --enable-fftw is specified at the configure.
+
Options
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

yn_scalapack

+

character, default='n'

+
+
+
Available for &calculation/theory='dft' or 'dft_md'
+
To calculate large systems, an eigenvalue problem in the subspace diagonalization becomes a bottle-neck in the ground state calculation. In SALMON, ScaLAPACK library can be used to solve the eigenvalue problem.
+
To enable it, it is necessary to link ScaLAPACK library when you build SALMON.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

yn_gramschmidt_blas

+

character, default='y'

+
+
+
Available for &calculation/theory='dft' or 'dft_md'
+
This switch selects if BLAS library is used or not in Gram Schmidt routines.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

yn_eigenexa

+

character, default='n'

+
+
+
Available for &calculation/theory='dft' or 'dft_md'
+
SALMON can use RIKEN R-CCS EigenExa library to solve eigenvalue problem in subspace diagonalization. It is more efficient than ScaLAPACK to diagonalize matrices of large dimension. To enable it, it is necessary to link both ScaLAPACK and EigenExa libraries when you build SALMON.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

yn_diagonalization_red_mem

+

character, Default='n'

+
+
+
Available for &parallel/yn_scalapack='y' or &parallel/yn_eigenexa='y'
+
This option reduces memory consumption in using ScaLAPACK/EigenExa libraries.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

process_allocation

+

character, default='grid_sequential'

+
+
+
This controlls the order of process allocation.
+
Options:
+
+
'grid_sequential' / real-space grid major ordering.
+
'orbital_sequential' / orbital-space major ordering.
+

+
+
Suggestion:
+
+
&calculation/theory='dft' or 'dft_md' / 'orbital_sequential'
+
&calculation/theory='tddft*' or '*maxwell_tddft' / 'grid_sequential'
+
+
+
+
+
+
+

&system

+
+

yn_periodic

+

character, default='n'

+
+
+
Available for all options of theory.
+
Specify boundary condition for electron orbitals.
+
Options:
+
+
'y' / periodic systems (crystalline solids)
+
'n' / isolated systems (molecules and nano-particles)
+
+
+
+
+
+

spin

+

character, default='unpolarized'

+
+
+
Available for the DFT/TDDFT based options of theory.
+
It specifies the spin state of the system, spin-unpolarized (closed shell) or spin-polarized (open shell).
+
Options
+
+
'unpolarized' / spin-unpolarized systems (default)
+
'polarized' / spin-polarized systems
+
'noncollinear' / noncollinear spin systems (see yn_spinorbit)
+
+
+
+
+
+

al(3)

+

real(8), default=0d0

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Spatial box size or lattice constants for cuboid cell (x, y, z).
+
For nonorthogonal cell, see al_vec1(3), al_vec2(3), al_vec3(3).
+
+
+
+
+

al_vec1(3)

+
+
+

al_vec2(3)

+
+
+

al_vec3(3)

+

real(8), default=0d0

+
+
+
Available for yn_periodic = 'y' in the DFT/TDDFT based options of theory.
+
Primitive lattice vectors for nonorthogonal cell. For cuboid cell, see al(3).
+
+
+
+
+

nstate

+

integer, default=0

+
+
+
Available for the DFT/TDDFT based options of theory.
+
+
of orbitals/bands to be calculated. In the time evolution calculation of dielectrics, only occupied orbitals are evolved even when more nstate is specified.
+
+
+
+
+
+

nelec

+

integer, default=0

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Number of valence electrons in the system.
+
+
+
+
+

nelec_spin(2)

+

integer, Default=0

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Number of up/down-spin electrons are specified by nelec_spin(1)/nelec_spin(2).
+
This option is incompatible with nelec. (If nelec_spin is specified, nelec is ignored.)
+
+
+
+
+

temperature

+

real(8), default=-1d0

+
+
+
Available for DFT-based options of theory.
+
It specifies the temperature for electrons. The value must be given using the unit of energy as specified in &units/unit_system.
+
The kelvin unit can also be used by the keyword temperature_k instead of temperature (see next).
+
Occupation numbers are updated in every SCF step in the following way.
+
+
temperature < 0 / the occupation numbers are fixed by nelec (appropriate for systems with energy gap).
+
temperature = 0 / redistribution of the occupation numbers by the step function (metallic system at zero temperature).
+
temperature > 0 / redistribution of the occupation numbers by the Fermi-Dirac distribution function.
+
+
+
+
+
+

temperature_k

+

real(8), default=-1d0

+
+
+
Available for DFT-based options of theory.
+
The same as temperature but kelvin is used as the unit.
+
+
+
+
+

nelem

+

integer, default=0

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Number of atomic elements in the system.
+
+
+
+
+

natom

+

integer, default=0

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Number of atoms in the system.
+
+
+
+
+

file_atom_red_coor

+

[Trial] character, default='none'

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Name of the file that contains atomic positions given in reduced coordinates. This option is incompatible with &system/file_atom_coor, &atomic_coor, and &atomic_red_coor.
+
+
+
+
+

file_atom_coor

+

[Trial] character, default='none'

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Name of the file that contains atomic Cartesian coordinates (The unit is specified by &units/unit_system). This option is incompatible with &system/file_atom_coor, &atomic_coor, and &atomic_red_coor.
+
+
+
+
+

yn_spinorbit

+

character, default='n'

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Option for the spin-orbit coupling using the j-dependent pseudopotential formalism [Theurich & Hill, PRB 64, 073106 (2001)]. For pseudopotential(s), the UPF or VPS file format is required.
+
+
+
Options
+
+
'y' / enable (spin='noncollinear' is required. For theory='dft’ mode, method_mixing='simple’ is recommended.)
+
'n' / disable (default)
+
+
+
+
+
+

yn_symmetry

+

[Trial] character, default='n'

+
+
+
Available for orthogonal cell system with the DFT/TDDFT based options of theory.
+
Symmetry option. Pre-generated input file, "sym.dat", is necessary. (details are not explained in the current manual)
+
+
+
Options
+
+
(e.g.) 'yyn' / symmetry option is applied for the x and y direction (under applied electric field in the z-direction)
+
'n' / disable
+
+
+
+
+
+

absorbing_boundary

+

[Trial] character, default='none'

+
+
+
Available for the TDDFT based option of theory with orthogonal unit cell.
+
Absorbing boundary condition for electrons. (T. Nakatsukasa et al., J. Chem. Phys., 114, 2550 (2001))
+
Options:
+
+
'none' / disable (default)
+
'z' / absorbing boundary region is set in z direction for 'yn_periodic = 'y'
+
+
+
+
+
+

imaginary_potential_w0

+

real(8), default='0d0'

+
+
+
Available when absorbing_boundary options is not 'none'.
+
Strength of the absorbing (imaginary) potential.
+
+
+
+
+

imaginary_potential_dr

+

real(8), default='0d0'

+
+
+
Available when absorbing_boundary options is not 'none'.
+
Thickness of the absorbing (imaginary) potential. For absorbing_boundary='z', the absorbing region is 0 < z < imagnary_potential_dr and al(3)-imagnary_potential_dr < z < al(3)
+
+
+
+
+
+

&atomic_red_coor

+
+
+
Atomic coordinates in periodic systems ('yn_periodoc = 'y') are specified in reduced coordinates using the following format:
+

+
+
'Si' 0.00 0.00 0.00 1
+
'Si' 0.25 0.25 0.25 1
+
...
+

+
+
Here, the information of atoms is ordered in row, the first row for the first atom, etc. The number of rows must be equal to &system/natom. Atomic spicies are written in the first column although they are not used in the calculation. The second, third and fourth columns are reduced coordinates for the first, second and third directions, respectively. The fifth column is a serial number of the atom spieces, which is defined in &pseudo.
+
This option is incompatible with &system/file_atom_red_coor, &system/file_atom_coor, and &atomic_coor.
+
+
+
+
+

&atomic_coor

+
+
+
Atomic coordinates are specified in the same way as atomic_red_coor but with length dimension. The unit chosen by &units/unit_length is applied.
+
This option is incompatible with &system/file_atom_red_coor, &system/file_atom_coor, and &atomic_red_coor.
+
+
+
+
+

&pseudo

+
+

izatom(:)

+

integer, default=-1

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Atomic number of the element. The size of array is equal to &system/nelem.
+
+
+
+
+

file_pseudo(:)

+

character, default='none'

+
+
+
Available for the DFT/TDDFT based options of theory.
+
File name of the pseudopotential file. The size of array is equal to &system/nelem.
+
+
+
+
+

lmax_ps(:)

+

integer, default=-1

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Maximum angular momentum of pseudopotential projectors.
+
If not given, values specified in the pseudopotential file will be used. The size of array is equal to &system/nelem.
+
+
+
+
+

lloc_ps(:)

+

integer, default=-1

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Angular momentum of the pseudopotential that will be treated as local. The size of array is equal to &system/nelem.
+
+
+
+
+

yn_psmask(:)

+

[Trial] character, default='n'

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Fourier filtering for pseudopotentials. The size of array is equal to &system/nelem.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

alpha_mask(:)

+

[Trial] real(8), default=0.8d0

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Parameter for the Fourier filtering of the pseudopotential. The size of array is equal to &system/nelem.
+
+
+
+
+

gamma_mask(:)

+

[Trial] real(8), default=1.8d0)

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Parameter for the Fourier filtering of the pseudopotential. The size of array is equal to &system/nelem.
+
+
+
+
+

eta_mask(:)

+

[Trial] real(8), default=15.0d0

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Parameter for the Fourier filtering of the pseudopotential. The size of array is equal to &system/nelem.
+
+
+
+
+
+

&functional

+
+

xc

+

character, default='none'

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Exchange-correlation functional to be used.
+
In the present version, functionals 'PZ', 'PZM' and 'TBmBJ' are available for both yn_periodic = 'y' and 'n' calculations in the adiabatic approximation.
+
Options:
+
+
'PZ': Perdew-Zunger LDA :Phys. Rev. B 23, 5048 (1981).
+
'PZM': Perdew-Zunger LDA with modification to improve sooth connection between high density form and low density one. :J. P. Perdew and Alex Zunger, Phys. Rev. B 23, 5048 (1981).
+
'TBmBJ': Tran-Blaha meta-GGA exchange with Perdew-Wang correlation. :Fabien Tran and Peter Blaha, Phys. Rev. Lett. 102, 226401 (2008). John P. Perdew and Yue Wang, Phys. Rev. B 45, 13244 (1992). This potential is known to provide a reasonable description for the bandgap of various insulators. For this choice, the additional mixing parameter 'cval' may be specified. See below.
+
+
+
+
+
+

cval

+

real(8), default=-1d0

+
+
+
Available for xc='TBmBJ'.
+
Mixing parameter in Tran-Blaha meta-GGA exchange potential. If cval is set to a minus value, the mixing-parameter is evaluated by the formula in the original paper [Phys. Rev. Lett. 102, 226401 (2008)], \(\left\langle |\nabla \rho(\mathbf{r};t)| / \rho(\mathbf{r};t) \right\rangle\). However, note that the value may be different from that in all electron calculations.
+
+
+
+
+

cname

+
+
+

xname

+

character, default='none'

+
+
+
Available for theory='XXX'.
+
XXX
+
+
+
+
+

alibxc

+
+
+

alibx

+
+
+

alibc

+

character, default='none'

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Since version 1.1.0, exchange-correlation functionals in Libxc library (http://www.tddft.org/programs/libxc/) have been usable in SALMON. At present, usable functionals are limited to LDA and GGA. For periodic systems, meta-GGA functionals are usable as well. To specify the exchange-correlation potentials of Libxc library, there are two ways. If the exchange and correlation potentials are given separately, you need to specify both alibx and alibc separately. If the exchange and correlation potentials are given as a combined set, you need to specify alibxc. We show below an example:
+
+
&functional
+
+
alibx = 'LDA_X'
+
alibc = 'LDA_C_PZ'
+
+
+
Note that, the hybrid functionals (hybrid gga/mgga) are not supported.
+

+
To use libxc libraries, --enable-libxc option must be added in excecuting configure. The available option of the exchange-correlation functionals are listed in the LibXC website. [See http://www.tddft.org/programs/libxc/functionals/]
+
+
+
+
+
+

&rgrid

+
+

dl(3)

+

real(8), default=0d0

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Spacing of real-space grids.
+
This cannot be used together with &rgrid/num_rgrid.
+
+
+
+
+

num_rgrid(3)

+

integer, default=0

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Number of real-space grids for each direction.
+
This cannot be used together with &rgrid/dl.
+
+
+
+
+
+

&kgrid

+
+

num_kgrid(3)

+

integer, default=1

+
+
+
Available for yn_periodic='y' in the DFT/TDDFT based options of theory.
+
Number of k-points (grid points of k-vector) for each direction discretizing the Brillouin zone.
+
+
+
+
+

file_kw

+

character, default='none'

+
+
+
Available for yn_periodic='y' in the DFT/TDDFT based options of theory.
+
File name for a file that includes user specified k-points. This file will be read if num_kgrid is equal to 0 or negative values. The file should be described in the following format :
+

+
+
8 #(number of k-points)
+
1 -0.50 -0.50 -0.50 0.1250 #(id, kx, ky, kz, weight)
+
2 -0.50 -0.50 0.00 0.1250
+
3 -0.50 0.00 -0.50 0.1250
+
4 -0.50 0.00 0.00 0.1250
+
5 0.00 -0.50 -0.50 0.1250
+
6 0.00 -0.50 0.00 0.1250
+
7 0.00 0.00 -0.50 0.1250
+
8 0.00 0.00 0.00 0.1250
+
+
+
+
+
+
+

&tgrid

+
+

nt

+

integer, Default=0

+
+
+
Available for 'dft_md' and TDDFT-based options of theory.
+
Number of total time steps for real-time propagation.
+
+
+
+
+

dt

+

real(8), Default=0d0

+
+
+
Available for 'dft_md' and TDDFT-based options of theory.
+
Time step size.
+
+
+
+
+

gram_schmidt_interval

+

integer, default=-1

+
+
+
Available for TDDFT-based options of theory.
+
Interval of a time step for the Gram-Schmidt orthonormalization of the orbitals during time evolution calculations. If this is set to a negative value, no Gram-Schmidt orthogonalization will be achieved. If this is set to zero, the Gram-Schumidt orthogonalization is carried out once at the initial step only. Usually this Gram-Schmidt orthogonalization is not necessary and should not be used.
+
+
+
+
+
+

&propagation

+
+

n_hamil

+
+
integer, default=4
+
+
Available for TDDFT-based options of theory.
+
Order of the Taylor expansion adopted for the propagation operator.
+
+
+
+
+
+

propagator

+

character, default=middlepoint

+
+
+
Available for TDDFT-based options of theory.
+
Choice of the propagator in the time evolution calculation.
+
Options:
+
+
middlepoint / Hamiltoinan at midpoint of two-times is used in the propagation if yn_predictor_corrector = 'y'. Hamiltoian at the time \(t\) is used if yn_predictor_corrector = 'n'.
+
aetrs / time-reversal symmetry propagator. [M.A.L. Marques, A. Castro, G.F. Bertsch, and A. Rubio, Comput. Phys. Commun., 151 60 (2003)].
+
+
+
+
+
+

yn_predictor_corrector

+
+
character, default='n'
+
+
Available for TDDFT-based options of theory.
+
Switch of the predictor-corrector method of TDDFT.
+
For meta-GGA functionals (xc='tbmbj'), the predictor corrector is automatically used even with yn_predictor_corrector='n'.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+
+

yn_fix_func

+
+
character, default='n'
+
+
Available for 'dft_md' and TDDFT-based options of theory.
+
Switch not to update the Hamiltonian during the time evolution, i.e., ground state Hamiltonian is used during the propagation.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+
+
+

&scf

+
+

method_init_wf

+

character, default='gauss'

+
+
+
Available for 'dft' and 'dft_md' options of theory.
+
The generation method of the initial orbitals at the begening of the SCF iteration in DFT calculations. For a stable calculation of very large systems, multiple gaussian functions are preferred for a stable calculation.
+
Options:
+
+
gauss / single gauss function per orbital centered at a position determined by random numbers
+
gauss2 / two gauss functions per orbital centered at positions determined by random numbers
+
gauss3 / three gauss functions per orbital centered at positions determined by random numbers
+
gauss4 / four gauss functions per orbital centered at positions determined by random numbers
+
gauss5 / five gauss functions per orbital centered at positions determined by random numbers
+
gauss10 / ten gauss functions per orbital centered at positions determined by random numbers
+
random / a random number is assigned at each real-space grid point of orbitals
+
+
+
+
+
+

method_init_density

+

[Trial] character, default='wf'

+
+
+
Available for 'dft' and 'dft_md' options of theory.
+
Specifying how to generate the initial density to start the SCF iteration in the DFT calculation.
+
Options:
+
+
wf / generate from the initial wavefunctions (cf. method_init_wf).
+
pp / generate from a superposition of the pseudo-atom densities. Supported for limited formats of pseudopotentials ('KY' and 'UPF').
+
read_dns_cube / read the initial density from dns.cube file (Gaussian cube file format). The definition of r-grid & cell coordinate should be consistent.
+
+
+
+
+
+

iseed_number_change

+

integer, default=0

+
+
+
Available for 'dft' and 'dft_md' options of theory.
+
Change a seed of random numbers that are used to generate initial orbitals. The value specified by this parameter is added to the seed.
+
+
+
+
+

nscf

+

integer, Default=300

+
+
+
Available for 'dft' and 'dft_md' options of theory.
+
Number of maximum SCF iterations in the DFT calculation.
+
+
+
+
+

method_min

+

character, Default='cg'

+
+
+
Available for 'dft' and 'dft_md' options of theory.
+
Method for updating orbitals in the SCF iteration. At present only confjugate gradient method is implemented.
+
Options:
+
+
cg / Conjugate-Gradient(CG) method
+
+
+
+
+
+

ncg

+

integer, default=4

+
+
+
Available for 'dft' and 'dft_md' options of theory.
+
Number of interations of conjugate-gradient method in the SCF iteration.
+
+
+
+
+

ncg_init

+

integer, default=4

+
+
+
Available for 'dft' and 'dft_md' options of theory.
+
Number of interations of conjugate-gradient method for the first SCF step.
+
+
+
+
+

method_mixing

+

character, default='broyden'

+
+
+
Available for 'dft' and 'dft_md' options of theory.
+
Method to update density/potential in the scf iteration.
+
Options:
+
+
simple / Simple mixing method
+
broyden / modified Broyden method
+
pulay / Pulay method
+
+
+
+
+
+

mixrate

+

real(8), default=0.5d0

+
+
+
Available for method_mixing='simple' in 'dft' and 'dft_md' options of theory.
+
Mixing ratio for simple mixing.
+
+
+
+
+

nmemory_mb

+

integer, default=8

+
+
+
Available for method_mixing='broyden' in 'dft' and 'dft_md' options of theory.
+
Number of previous densities to be stored in the SCF iteration using the modified Broyden method. This must be less than 21.
+
+
+
+
+

alpha_mb

+

real(8), default=0.75d0

+
+
+
Available for method_mixing='broyden' in 'dft' and 'dft_md' options of theory.
+
A parameter of the modified Broyden method.
+
+
+
+
+

nmemory_p

+

integer, default=4

+
+
+
Available for method_mixing='pulay' in 'dft' and 'dft_md' options of theory.
+
Number of previous densities to be stored in the SCF iteration using the Pulay method.
+
+
+
+
+

beta_p

+

real(8), default=0.75d0

+
+
+
Available for method_mixing='pulay' in 'dft' and 'dft_md' options of theory.
+
A parameter of the mixing rate of the Pulay method.
+
+
+
+
+

yn_auto_mixing

+

character, default='n'

+
+
+
Available for 'dft' and 'dft_md' options of theory.
+
Switch to change the mixing rate automatically (i.e. automatic adjustments of mixrate/alpha_mb/beta_p)
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

update_mixing_ratio

+

real(8), default=3.0d0

+
+
+
Available for yn_auto_mixing='y' in 'dft' and 'dft_md' options of theory.
+
Threshold for the change of the mixing rate in yn_auto_mixing='y' option. The mixing-rate is reduced to half when the ratio of the density differences between the current and previous iteration steps is larger than update_mixing_ratio.
+
+
+
+
+

yn_subspace_diagonalization

+

character, default='y'

+
+
+
Available for 'dft' and 'dft_md' options of theory.
+
Switch for the subspace diagonalization during SCF iterations.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

convergence

+

character, default='rho_dne'

+
+
+
Available for 'dft' and 'dft_md' options of theory.
+
Specify a quantity that is used for convergence check of the SCF iteration.
+
Options:
+
+
'rho_dne'/ Convergence is checked by sum_ix|rho(ix,iter)-rho(ix,iter-1)|dx/N. N is &system/nelec.
+
'norm_rho'/ Convergence is checked by the square of the norm of the density difference, ||rho_iter(ix)-rho_iter-1(ix)||2=sum_ix|rho(ix,iter)-rho(ix,iter-1)|2.
+
'norm_rho_dng'/ Convergence is checked by ||rho_iter(ix)-rho_iter-1(ix)||2/(number of grids). "dng" means "devided by number of grids".
+
'norm_pot'/ Convergence is checked by ||Vlocal_iter(ix)-Vlocal_iter-1(ix)||2, where Vlocal is Vh + Vxc + Vps_local.
+
'pot_dng'/ Convergence is checked by ||Vlocal_iter(ix)-Vlocal_iter-1(ix)||2/(number of grids).
+
+
+
+
+
+

threshold

+

real(8), default=1d-17 [a.u.] (for convergence='rho_dne') and -1 (for other options of convergence))

+
+
+
Available for 'dft' and 'dft_md' options of theory.
+
Threshold of convergence that is specified by convergence keyword.
+
+
+
+
+

nscf_init_redistribution

+

integer, default=10

+
+
+
Available for 'dft' and 'dft_md' options of theory.
+
Number of initial iterations during which a redistribution of the occupation number is suppressed in the finite temperature calculation.
+
+
+
+
+

nscf_init_no_diagonal

+

integer, default=10

+
+
+
Available for &scf/yn_subspace_diagonalization='y' in 'dft' option of theory.
+
Number of initial iterations during which the subspace diagonalization will not be carried out.
+
+
+
+
+

nscf_init_mix_zero

+

integer, default=-1

+
+
+
Available for 'dft' option of theory.
+
The density will not be mixed (i.e. fixed) during the given number of the SCF iteration, that is, orbitals are optimized without updating the density.
+
+
+
+
+

conv_gap_mix_zero

+

real(8), default=99999d0

+
+
+
Available if nscf_init_mix_zero is positive value in the 'dft' option of theory.
+
Specify a condition to quit the fixed density iteration forced by step_initial_mix_zero option. Mixing of the density will start after the band-gap energy exceeds this parameter for consecutive five SCF iteration steps.
+
+
+
+
+

yn_preconditioning

+

character, Default='n'

+
+
+
Available for theory='dft'.
+
Switch for preconditioning. The low-filter preconditioner is used when &scf/yn_preconditioning='y'.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

alpha_pre

+

real(8), Default=0.6d0

+
+
+
Available for theory='dft'.
+
The certain factor used in preconditioning.
+
+
+
+
+
+

&emfield

+
+

trans_longi

+

character, default='tr'

+
+
+
Available for yn_periodic='y' in 'maxwell' and TDDFT based options of theory.
+
Specify the treatment of the polarization in the time evolution calculation.
+
Options:
+
+
'tr' / Transverse
+
'lo' / Longitudinal
+
'2d' / 2D maxwell-TDDFT (2D approximation) method (for more details, see film_thickness of &maxwell)
+
+
+
+
+
+

ae_shape1

+
+
+

ae_shape2

+

character, Default='none'

+
+
+
Available for 'maxwell' and TDDFT based options of theory.
+
Envelope shape of the first/second pulse. 'Acos2' indicates a cosine square envelope for vector potential, and 'Ecos2' a cosine square envelope for electric field.
+
Options:
+
+
'impulse' / A weak impulsive field is applied at \(t=0\). This will be used to explore linear response properties. The magnitude of the impulse can be specified by e_impulse.
+
'Acos2' / Envelope of cos2for a vector potential.
+
'Acos3' / Envelope of cos3for a vector potential.
+
'Acos4' / Envelope of cos4for a vector potential.
+
'Acos6' / Envelope of cos6for a vector potential.
+
'Acos8' / Envelope of cos8for a vector potential.
+
'Ecos2' / Envelope of cos2for an electric field.
+
'Asin2cos' [Trial] / Envelope of sin2with cosine type oscillation for a vector potential.
+
'Asin2_cw' [Trial] / Envelope of sin2at the beginning and continuous wave after that for a vector potential (for 'ae_shape1' only).
+
'input' [Trial] / read the vector potential as a numerical table with file_input1 option (for 'ae_shape1' only).
+
'none' / no incident field is applied.
+

+
+
If 'Ecos2' is adopted, 'phi_cep1' must be chosen either 0.75 or 0.25, since otherwise the time integral of the electric field (vector potential at the end of the pulse) does not vanishi. There is no such restriction for 'Acos2' pulses.
+

+
For yn_periodic='n', available choices are limited to 'impulse', 'Acos2', and 'Ecos2'.
+
+
+
+
+

file_input1

+

character, default=''

+
+
+
Available if ae_shape1='input' is specified and theory='tddft_pulse'.
+
Name of an input file that contains user-defined vector potential. The file must be a numerical table separated by blank, having four columns; the first column is time and second to fourth columns are Ax/c, Ay/c, Az/c, repsectively. All the quantities are written using the units specified by unit_system. '#' and '!' may be used for a comment line.
+
Note that a linear interpolation will be applied when the time step differs from that used in the calculation.
+
+
+
+
+

e_impulse

+

real(8), Default=1d-2 a.u.

+
+
+
Available for 'maxwell' and TDDFT based options of theory.
+
Magnitude of the impulse in the impulsive perturbation. This valiable has the dimention of momentum, energy*time/length.
+
+
+
+
+

E_amplitude1

+
+
+

E_amplitude2

+

real(8), default=0d0

+
+
+
Available for 'maxwell' and TDDFT based options of theory.
+
Maximum amplitude of electric field for the first/second pulse. This valiable has the dimension of electric field, energy/(length*charge). This cannot be set with &emfield/I_wcm2_1 (I_wcm2_2) simultaneously.
+
+
+
+
+

I_wcm2_1

+
+
+

I_wcm2_2

+

real(8), default=-1d0

+
+
+
Available for 'maxwell' and TDDFT based options of theory.
+
Maximum intensity (W/cm2) of the first/second pulse. This valiable cannot be set with &emfield/E_amplitude1 (E_amplitude2) simultaneously. For this quantity, a unit of W/cm2is adopted irrespective of &units\unit_system.
+
+
+
+
+

tw1

+
+
+

tw2

+

real(8), default=0d0

+
+
+
Available for 'maxwell' and TDDFT based options of theory.
+
Duration of the first/second pulse (edge-to-edge time length).
+
Note that this is not the FWHM duration.
+
+
+
+
+

omega1

+
+
+

omega2

+

real(8), default=0d0

+
+
+
Available for 'maxwell' and TDDFT based options of theory.
+
Mean photon energy (average frequency multiplied by the Planck constant) of the first/second pulse.
+
+
+
+
+

epdir_re1(3)

+
+
+

epdir_re2(3)

+

real(8), default=1d0, 0d0, 0d0

+
+
+
Available for 'maxwell' and TDDFT based options of theory.
+
Real part of the polarization unit vector for the first/second pulse.
+
+
+
+
+

epdir_im1(3)

+
+
+

epdir_im2(3)

+

real(8), default=0d0

+
+
+
Available for 'maxwell' and TDDFT based options of theory.
+
Imaginary part of the polarization unit vector for the first/second pulse. Using both real 'epdir_re1' and imaginary 'epdir_im1' parts of the polarization vector, circularly and general ellipsoidary polarized pulses may be described.
+
+
+
+
+

phi_cep1

+
+
+

phi_cep2

+

real(8), default=0d0

+
+
+
Available for 'maxwell' and TDDFT based options of theory.
+
Carrier envelope phase of the first/second pulse. It specifies the CEP in unit of \(2\pi\).
+
+
+
+
+

t1_t2

+
+
real(8), default=0d0
+
+
Available for 'maxwell' and TDDFT based options of theory.
+
Time-delay between the first and the second pulses.
+
+
+
+
+
+

t1_start

+

real(8), default=0d0

+
+
+
Available for 'maxwell' and TDDFT based options of theory.
+
Shift the starting time of the first pulse. (this is not available for multiscale option).
+
+
+
+
+

num_dipole_source

+

integer, default=0

+
+
+
Available for TDDFT based options of theory.
+
Number of radiation sources to mimic optical near fields. Maximum number is 2.
+
+
+
+
+

vec_dipole_source(3,num_dipole_source)

+

real(8), default=0d0

+
+
+
Available for TDDFT based options of theory.
+
Dipole vectors of the radiation sources mimicing optical near fields.
+
+
+
+
+

cood_dipole_source(3,num_dipole_source)

+

real(8), default=0d0

+
+
+
Available for TDDFT based options of theory.
+
Coordinates of the radiation sources mimicing optical near fields.
+
+
+
+
+

rad_dipole_diele

+

real(8), default=2d0 [a.u.]

+
+
+
Available for TDDFT based options of theory.
+
Radii of dielectric spheres of the radiation sources mimicing optical near fields.
+
+
+
+
+
+

&singlescale[Trial]

+
+

method_singlescale

+

character, default='3d'

+
+
+
Available for theory='single_scale_maxwell_tddft'.
+
Type of single-scale Maxwell-TDDFT method.
+
Options:
+
'3d' / 3-dimensional FDTD + TDDFT
+
'1d' / 1-dimensional FDTD (along the z axis) + TDDFT
+
'1d_fourier' / '1d' with 3D Fourier component of the vector potential
+
+
+
+
+

cutoff_G2_emfield

+

real(8), default=-1d0

+
+
+
Available for theory='single_scale_maxwell_tddft'.
+
Cutoff energy of Fourier component of the vector potential when method_singlescale='1d_fourier'.
+
+
+
+
+

yn_symmetrized_stencil

+

[Trial] character, default='n'

+
+
+
Available for theory='single_scale_maxwell_tddft'.
+
Switch to symmetrize the finite differences for the product of vector potential and orbitals, \((\nabla A(r) \cdot \psi(r))\). This option improves hermiticity of the Hamiltonian although computational cost increases.
+
+
+
+
+

yn_put_wall_z_boundary

+

[Trial] character, default='n'

+
+
+
Available for DFT/TDDFT based options of theory.
+
Option to put potential wall near the boundary planes at z=0 and z=``&system/al(3)``. This potential prevents electrons from crossing the z-boundary plane. In the single-scale Maxwell-TDDFT method, the electron density on the z-boundary plane harms the norm conservation of electrons due to the discontinuity of the vectorpotential. The wall is described using the square of cosine function.
+
Options:
+
+
'y' / put the potential wall
+
'n' / no potential wall
+
+
+
+
+
+

wall_height

+

real(8), default=100.0 [eV]

+
+
+
Available for yn_put_wall_z_boundary='y'.
+
The height of the potential wall.
+
+
+
+
+

wall_width

+

real(8), default=5.0 [Angstrom]

+
+
+
Available for yn_put_wall_z_boundary='y'.
+
The width of the potential wall defined by the length from the potential peak (z=0 and z=``&system/al(3)``) to the edge.
+
+
+
+
+
+

&multiscale

+
+

fdtddim

+

[Trial] character, default='1d'

+
+
+
Available for theory='multi_scale_maxwell_tddft' with yn_periodic='y' and theory='maxwell_sbe'
+
Dimension of macroscopic scale system (Maxwell(FDTD) calculation) in multiscale Maxwell-TDDFT method.
+
Options:
+
'3d' / 3-dimensional FDTD for macroscopic electromagnetism [currently not available]
+
'1d' / 1-dimensional FDTD (along the x-axis) for macroscopic electromagnetism
+
+
+
+
+

nx_m

+

integer, default=1

+
+
+
Available for theory='multi_scale_maxwell_tddft' with yn_periodic='y' and theory='maxwell_sbe'
+
Number of macroscopic grid points inside materials for x-direction.
+
+
+
+
+

ny_m

+

integer, default=1

+
+
+
Available for theory='multi_scale_maxwell_tddft' with yn_periodic='y' and theory='maxwell_sbe'
+
Number of macroscopic grid points inside materials for y-direction.
+
+
+
+
+

nz_m

+

[Trial] integer, default=1)

+
+
+
Available for theory='multi_scale_maxwell_tddft' with yn_periodic='y' or theory='maxwell_sbe'
+
Number of macroscopic grid points inside materials for (y/z)-direction.
+
+
+
+
+

hx_m

+
+
real(8), default=0d0
+
+
Available for theory='multi_scale_maxwell_tddft' with yn_periodic='y' or theory='maxwell_sbe'
+
Grid spacing of macroscopic coordinate for x-direction.
+
Variable hx_m is deprecated, and will be moved to &units/dl_em(1)
+
+
+
+

hy_m

+
+
+

hz_m

+

[Trial] real(8), default=0d0

+
+
+
Available for theory='multi_scale_maxwell_tddft' with yn_periodic='y' or theory='maxwell_sbe'
+
Grid spacing of macroscopic coordinate for (y/z)-direction.
+
Variable hy_m and hz_m are deprecated, and will be moved to &units/dl_em(2:3)
+
+
+
+
+

nxvacl_m

+

integer, default=1/0

+
+
+
Available for theory='multi_scale_maxwell_tddft' or 'maxwell_sbe'
+
The parameter nxvacl_m will be replaced by nxvac_m and eventually removed in the future.
+
+
+
+
+

nxvacr_m

+

integer, default=1/0

+
+
+
Available for theory='multi_scale_maxwell_tddft' or 'maxwell_sbe'
+
The parameter nxvacr_m will be replaced by nxvac_m and eventually removed in the future.
+
+
+
+
+

nxvac_m(2)

+

integer, default=0

+
+
+
Available for theory='multi_scale_maxwell_tddft' or 'maxwell_sbe'
+
Represents the number of vacuum cells between the edge of the material region and the computational boundary. The first element of the array represents the number of cells from the leftmost cell (ix=1) on the x-axis to the left boundary. The second element represents the number of cells from the rightmost cell on the x-axis to the right boundary.
+
+
+
+
+

nyvac_m(2)

+

integer, default=0

+
+
+
Available for theory='multi_scale_maxwell_tddft' or 'maxwell_sbe'
+
Provides same functionality of nxvac_m(2) for y-direction.
+
+
+
+
+

nzvac_m(2)

+

integer, default=0

+
+
+
Available for theory='multi_scale_maxwell_tddft' or 'maxwell_sbe'
+
Provides same functionality of nxvac_m(2) for z-direction.
+
+
+
+
+
+

&maxwell

+
+

al_em(3)

+

real(8), default=0d0

+
+
+
Available for theory='maxwell'.
+
Size of simulation box in electromagnetic analysis.
+
Only two of al_em, dl_em, and num_rgrid_em must be set.
+
+
+
+
+

dl_em(3)

+

real(8), default=0d0

+
+
+
Available for theory='maxwell' and theory='multi_scale_maxwell_tddft'.
+
Spacing of real-space grids in electromagnetic analysis.
+
Only two of al_em, dl_em, and num_rgrid_em must be set.
+
+
+
+
+

num_rgrid_em(3)

+

integer, default=0

+
+
+
Available for theory='maxwell'.
+
Number of real-space grids in electromagnetic analysis.
+
Only two of al_em, dl_em, and num_rgrid_em must be set.
+
+
+
+
+

at_em

+

real(8), default=0d0

+
+
+
Available for theory='maxwell'.
+
Total time for electromagnetic analysis.
+
Two of at_em, dt_em, and nt_em must be set.
+
Otherwise, both at_em and nt_em or either of those must be set.
+
(For the latter, dt_em is automatically determined from CFL condition)
+
+
+
+
+

dt_em

+

real(8), default=0d0

+
+
+
Available for theory='maxwell'.
+
Time step size for electromagnetic analysis.
+
If default is selected, this is automatically determined from CFL condition.
+
+
+
+
+

nt_em

+

integer, default=0

+
+
+
Available for theory='maxwell'.
+
Number of total time steps of time propagation in electromagnetic analysis.
+
+
+
+
+

boundary_em(3,2)

+

character, default='default'

+
+
+
Available for theory='maxwell' and theory='multi_scale_maxwell_tddft' and theory='maxwell_sbe'
+
Boundary condition in electromagnetic analysis. The first index(1-3 rows) corresponds to x, y, and z axes. The second index(1-2 columns) corresponds to bottom and top of the axes.
+
Options:
+
'abc' / absorbing boundary
+
'pec' / perfect electric conductor
+
'periodic' / periodic boundary
+

+
If &system/yn_periodic='n', 'default', 'abc', and 'pec' can be chosen, where 'default' automatically chooses 'abc'. If &system/yn_periodic='y', 'default', 'abc', and 'periodic' can be chosen, where 'default' automatically chooses 'periodic'. | When theory='maxwell', perfectly matched layer(PML) is used for 'abc'.
+
+
+
+
+

shape_file

+

character, default='none'

+
+
+
Available for theory='maxwell'.
+
Name of input shape file in electromagnetic analysis. The shape file can be generated by using FDTD_make_shape in SALMON utilities (https://salmon-tddft.jp/utilities.html).
+
+
+
+
+

media_num

+

integer, default=0

+
+
+
Available for theory='maxwell' and theory='maxwell_sbe'.
+
Number of media in electromagnetic analysis.
+
+
+
+
+

media_type(:)

+

character, default='vacuum'

+
+
+
Available for theory='maxwell' and theory='maxwell_sbe'
+
media_type(n) spesifies type of n-th media in electromagnetic analysis.
+
Options:
+
+
'vacuum'
+
'constant media'
+
'pec'
+
'lorentz-drude'
+
+
If 'lorentz-drude' is chosen, linear response calculation is feasible by setting &emfield/ae_shape1 or ae_shape2='impulse'.
+
+
Besides, in the case of theory='maxwell_sbe', 'multiscale' is also available.
+
+
+
+
+
+

epsilon_em(:)

+

real(8), Default=1d0

+
+
+
Available for theory='maxwell', theory='maxwell_sbe' and for TDDFT based options of theory with trans_longi='2d'.
+
For theory='maxwell', epsilon_em(n) spesifies relative permittivity of n-th media in electromagnetic analysis.
+
For TDDFT based options of theory with trans_longi='2d', the relative permittivity of the transparent media on both sides of the film is specified by epsilon_em(1) and epsilon_em(2), respectively.
+
+
+
+
+

mu_em(:)

+

real(8), default=1d0

+
+
+
Available for theory='maxwell'.
+
mu_em(n) spesifies relative permeability of n-th media in electromagnetic analysis.
+
+
+
+
+

sigma_em(:)

+

real(8), default=0d0

+
+
+
Available for theory='maxwell'.
+
sigma_em(n) spesifies conductivity of n-th media in electromagnetic analysis.
+
+
+
+
+

pole_num_ld(:)

+

integer, default=1

+
+
+
Available for theory='maxwell'.
+
pole_num_ld(n) spesifies number of poles of n-th media, available for type_media(n)='lorentz-drude' in electromagnetic analysis.
+
+
+
+
+

omega_p_ld(:)

+

real(8), default=0d0

+
+
+
Available for theory='maxwell'.
+
omega_p_ld(n) spesifies plasma frequency of n-th media, available for type_media(n)='lorentz-drude' in electromagnetic analysis.
+
+
+
+
+

f_ld(:,:)

+

real(8), default=0d0

+
+
+
Available for theory='maxwell'.
+
f_ld(n,m) spesifies m-th oscillator strength of n-th media, available for type_media='lorentz-drude' in electromagnetic analysis. The first index is the media ID whose maximum value is given by media_num. The second index is the pole ID whose maximum value is given by pole_num_ld(n).
+
+
+
+
+

gamma_ld(:,:)

+

real(8), default=0d0

+
+
+
Available for theory='maxwell'.
+
gamma_ld(n,m) spesifies m-th collision frequency of n-th media, available for type_media(n)='lorentz-drude' in electromagnetic analysis. The first index is the media ID whose maximum value is given by media_num. The second index is the pole ID whose maximum value is given by pole_num_ld(n).
+
+
+
+
+

omega_ld(:,:)

+

real(8), default=0d0

+
+
+
Available for theory='maxwell'.
+
omega_ld(n,m) spesifies m-th oscillator frequency of n-th media, available for type_media(n)='lorentz-drude' in electromagnetic analysis. The first index is the media ID whose maximum value is given by media_num. The second index is the pole ID whose maximum value is given by pole_num_ld(n).
+
+
+
+
+

wave_input

+

character, default='none'

+
+
+
Available for theory='maxwell'.
+
If 'source', the incident pulse in electromagnetic analysis is generated by the incident current source.
+
+
+
+
+

ek_dir1(3)

+
+
+

ek_dir2(3)

+

real(8), default=0d0

+
+
+
Available for theory='maxwell'.
+
Propagation direction of the first/second pulse (x, y, and z directions). Each component must be 0d0 or 1d0.
+
+
+
+
+

source_loc1(3)

+
+
+

source_loc2(3)

+

real(8), default=0d0

+
+
+
Available for theory='maxwell'.
+
Location of the incident current source of the first/second pulse. Note that the coordinate system ranges from -al_em/2 to al_em/2 for &system/yn_periodic='n' while ranges from 0 to al_em for &system/yn_periodic='y'.
+
+
+
+
+

gbeam_sigma_plane1(3)

+
+
+

gbeam_sigma_plane2(3)

+
+
+

gbeam_sigma_line1(3)

+
+
+

gbeam_sigma_line2(3)

+

[Trial] real(8), default=-1d0

+
+
+
Available for theory='maxwell' with wave_input='source'.
+
These input keywords specify the width of Gauss function, exp(-0.5(abs(r-r_0)/sigma)^2), applied for the incident current source to generate the first/second pulse. These input keywords work only when their values > 0.0d0. The center of the Gauss function, r_0, is specified by source_loc1/2. gbeam_sigma_plane1/2 specifies the width of 2D Gauss function (xy, yz, and xz planes). gbeam_sigma_line1/2 specifies the width of 1D Gauss function (x, y, and z axes).
+
+
+
+
+

obs_num_em

+

integer, default=0

+
+
+
Available for theory='maxwell'.
+
Number of observation points in electromagnetic analysis. From the obtained results, figure and animation files can be generated by using SALMON utilities (https://salmon-tddft.jp/utilities.html).
+
+
+
+
+

obs_samp_em

+

integer, default=0

+
+
+
Available for theory='maxwell'.
+
Sampling time-step of the observation in electromagnetic analysis.
+
If default is selected, this is automatically determined.
+
+
+
+
+

obs_loc_em(:,3)

+

real(8), default=0d0

+
+
+
Available for theory='maxwell'.
+
obs_loc_em(n,1:3)=x,y,z spesifies location of the n-th observation point in electromagnetic analysis. Note that the coordinate system ranges from -al_em/2 to al_em/2 for &system/yn_periodic='n' while ranges from 0 to al_em for &system/yn_periodic='y'.
+
+
+
+
+

obs_plane_ene_em(:,:)

+

real(8), default=-1d0

+
+
+
Available for theory='maxwell'.
+
obs_loc_em(n,:)=energy1,energy2,energy3,... spesifies energy value of the n-th observation point in electromagnetic analysis. At the spesified energies, Fourier-transformed spatial distributions on the xy, yz, and xz plans are outputed. This input keyword must be larger than 0.
+
+
+
+
+

yn_obs_plane_em(:)

+

character, default='n'

+
+
+
Available for theory='maxwell'.
+
Spesify whether or not to generate output of the electrmagnetic fields on the planes (xy, yz, and xz planes) for n-th observation point. This option must be 'y' for generating animation files by using FDTD_make_figani in SALMON utilities (https://salmon-tddft.jp/utilities.html).
+
Options:
+
+
'y'
+
'n'
+
+
+
+
+
+

yn_obs_plane_integral_em(:)

+

character, default='n'

+
+
+
Available for theory='maxwell'.
+
Specify whether or not to generate output of the spatial integration of electromagnetic fields on the planes (xy, yz, and xz planes) for n-th observation point.
+
Options:
+
+
'y'
+
'n'
+
+
+
+
+
+

yn_wf_em

+

character, default='y'

+
+
+
Available for theory='maxwell'.
+
Switch of a window function for linear response calculation.
+
Options:
+
+
'y'
+
'n'
+
+
+
+
+
+

film_thickness

+

real(8), default=0d0

+
+
+
Available for TDDFT based options of theory with trans_longi='2d'.
+
Thickness of the film for the 2D maxwell-TDDFT (2D approximation) method [S. Yamada and K. Yabana, PRB 103, 155426 (2021)].
+
For a slab system, film_thickness should be set to the side length of the calculation cell, i.e., the thickness of the slab plus the length of the vacuum region [S. Yamada et al., PRB 98, 245147 (2018)].
+
The relative permittivity of the transparent media on both sides of the film can be specified by epsilon_em(1) and epsilon_em(2), respectively (default=vacuum).
+
+
+
+
+

media_id_pml(3:2)

+

integer, default=0

+
+
+
Available for theory='maxwell'.
+
Media ID used in PML. The first index(1-3 rows) corresponds to x, y, and z axes. The second index(1-2 columns) corresponds to bottom and top of the axes.
+
+
+
+
+

media_id_source1

+
+
+

media_id_source2

+
+
integer, default=0
+
+
Available for theory='maxwell'.
+
Media ID used in incident current source1/source2 to generate the first/second pulse.
+
+
+
+
+
+

bloch_k_em(3)

+

[Trial] real(8), default=0d0

+
+
+
Available for theory='maxwell' with yn_periodic='y'.
+
Wavenumber used in Bloch boundary conditions. When sum(|bloch_k_em(:)|)>0, Bloch boundary conditions are automatically applied.
+
+
+
+
+

bloch_real_imag_em(3)

+

[Trial] character, default='real'

+
+
+
Available for theory='maxwell' with yn_periodic='y' and sum(|bloch_k_em(:)|)>0.
+
Specify real or imaginary parts for exp(ikr) used in Bloch boundary conditions.
+
Options:
+
+
'real'
+
'imag'
+
+
+
+
+
+

ase_num_em

+

integer, default=0

+
+
+
Available for theory='maxwell' with yn_periodic='n'.
+
Number of energy or wavelength grid points specified by ase_ene_min_em/ase_ene_max_em or ase_wav_min_em/ase_wav_max_em.
+
If this is specified as larger than 0, Absorption-, Scattering-, and Extinction-cross-sections will be outputed at the end of calculation.
+
Those are normalized by the spectral distribution of the incident pulse.
+
+
+
+
+

ase_ene_min_em

+
+
+

ase_ene_max_em

+

real(8), default=-1d0

+
+
+
Available for theory='maxwell' with ase_num_em>0 and yn_periodic='n'.
+
Energy range for Absorption-, Scattering-, and Extinction-cross-sections.
+
+
+
+
+

ase_wav_min_em

+
+
+

ase_wav_max_em

+

real(8), default=-1d0

+
+
+
Available for theory='maxwell' with ase_num_em>0 and yn_periodic='n'.
+
Wavelength range for Absorption-, Scattering-, and Extinction-cross-sections.
+
+
+
+
+

ase_smedia_id_em

+

integer, default=0

+
+
+
Available for theory='maxwell' with ase_num_em>0 and yn_periodic='n'.
+
Media ID used as surrounding media.
+
+
+
+
+

ase_box_cent_em(3)

+

real(8), default=0d0

+
+
+
Available for theory='maxwell' with ase_num_em>0 and yn_periodic='n'.
+
ase_box_cent_em(1:3)=x,y,z spesifies location of the center of a closed surface (box shape) to calculate Absorption-, Scattering-, and Extinction-cross-sections.
+
+
+
+
+

ase_box_size_em(3)

+

real(8), default=-1d0

+
+
+
Available for theory='maxwell' with ase_num_em>0 and yn_periodic='n'.
+
ase_box_size_em(1:3)=X,Y,Z spesifies size of a closed surface (box shape) to calculate Absorption-, Scattering-, and Extinction-cross-sections.
+
+
+
+
+

art_num_em

+

integer, default=0

+
+
+
Available for theory='maxwell' with yn_periodic='y'.
+
Number of energy or wavelength grid points specified by art_ene_min_em/art_ene_max_em or art_wav_min_em/art_wav_max_em.
+
If this is specified as larger than 0, Absorption-, Reflection-, and Transmission-ratas will be outputed at the end of calculation.
+
Those are normalized by the spectral distribution of the incident pulse.
+
+
+
+
+

art_ene_min_em

+
+
+

art_ene_max_em

+

real(8), default=-1d0

+
+
+
Available for theory='maxwell' with art_num_em>0 and yn_periodic='y'.
+
Energy range for Absorption-, Reflection-, and Transmission-ratas.
+
+
+
+
+

art_wav_min_em

+
+
+

art_wav_max_em

+

real(8), default=-1d0

+
+
+
Available for theory='maxwell' with art_num_em>0 and yn_periodic='y'.
+
Wavelength range for Absorption-, Reflection-, and Transmission-ratas.
+
+
+
+
+

art_smedia_id_em

+

integer, default=0

+
+
+
Available for theory='maxwell' with art_num_em>0 and yn_periodic='y'.
+
Media ID used as surrounding media.
+
+
+
+
+

art_plane_bot_em(3)

+
+
+

art_plane_top_em(3)

+

real(8), default=0d0

+
+
+
Available for theory='maxwell' with art_num_em>0 and yn_periodic='y'.
+
art_plane_bot_em(1:3)=x1,y1,z1 and art_plane_top_em(1:3)=x2,y2,z2 spesify location of bottom and top planes on the propagation axis to calculate Absorption-, Reflection-, and Transmission-ratas.
+
+
+
+
+

yn_make_shape

+

character, default='n'

+
+
+
Available for theory='maxwell'.
+
Switch for making shape. This is same functionality for FDTD_make_shape in SALMON utilities (https://salmon-tddft.jp/utilities.html).
+
Options:
+
+
'y'
+
'n'
+
+
+
+
+
+

yn_output_shape

+

character, default='n'

+
+
+
Available for theory='maxwell'.
+
Switch for outputing shape file in cube format when yn_make_shape='y'.
+
Options:
+
+
'y'
+
'n'
+
+
+
+
+
+

yn_copy_x

+
+
+

yn_copy_y

+
+
+

yn_copy_z

+

character, default='n'

+
+
+
Available for theory='maxwell'.
+
See FDTD_make_shape in SALMON utilities (https://salmon-tddft.jp/utilities.html).
+
Options:
+
+
'y'
+
'n'
+
+
+
+
+
+

rot_type

+

character, default='radian'

+
+
+
Available for theory='maxwell'.
+
See FDTD_make_shape in SALMON utilities (https://salmon-tddft.jp/utilities.html).
+
Options:
+
+
'radian'
+
'degree'
+
+
+
+
+
+

n_s

+

integer, default=0

+
+
+
Available for theory='maxwell' and theory='maxwell_sbe'.
+
See FDTD_make_shape in SALMON utilities (https://salmon-tddft.jp/utilities.html).
+
+
+
+
+

typ_s(:)

+

character, default='none'

+
+
+
Available for theory='maxwell' and theory='maxwell_sbe'.
+
See FDTD_make_shape in SALMON utilities (https://salmon-tddft.jp/utilities.html).
+
+
+
+
+

id_s(:)

+

integer, default=0

+
+
+
Available for theory='maxwell' and theory='maxwell_sbe'.
+
See FDTD_make_shape in SALMON utilities (https://salmon-tddft.jp/utilities.html).
+
+
+
+
+

inf_s(:,10)

+

real(8), default=0

+
+
+
Available for theory='maxwell' and theory='maxwell_sbe'.
+
See FDTD_make_shape in SALMON utilities (https://salmon-tddft.jp/utilities.html).
+
+
+
+
+

ori_s(:,3)

+
+
+

rot_s(:,3)

+

real(8), default=0d0

+
+
+
Available for theory='maxwell'
+
See FDTD_make_shape in SALMON utilities (https://salmon-tddft.jp/utilities.html).
+
+
+
+
+
+

&analysis

+
+

projection_option

+

character, default='no'

+
+
+
Available for TDDFT based options of theory.
+
Methods of projection to analyze the excited states (e.g. the number of excited electrons).
+
Output files: SYSname_nex.data, SYSname_ovlp.data
+
Options:
+
+
'no' / no projection.
+
'gs' / projection to eigenstates of the ground-state Hamiltonian whose k-point is shifted as k+A(t)/c (i.e. Houston functions).
+
'td' / projection to instantaneous eigenstates of the time-dependent Hamiltonian.
+
+
+
+
+
+

out_projection_step

+

integer, default=100

+
+
+
Available when projection_option is specified.
+
Resuts of the projection analysis will be outputted every out_projection_step steps during the time-propagation.
+
+
+
+
+

threshold_projection

+

real(8), default=1e-6

+
+
+
Available when projection_option is specified.
+
Convergence threshold for the iteration of the eigenstates calculation.z
+
+
+
+
+

yn_out_intraband_current

+

character, default='n'

+
+
+
Available when projection_option is specified.
+
Switch for output of the intra-band current density [T. Otobe, Phys. Rev. B 94, 235152 (2016).].
+
Output file: SYSname_intra_current.data
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

nenergy

+

integer, default=1000

+
+
+
Number of energy grid points for frequency-domain analysis. This parameter is used, for examples, in theory='tddft_response' and theory='maxwell'.
+
+
+
+
+

de

+

real(8), Default=0.01d0 (eV)

+
+
+
Energy grid size for frequency-domain analysis.
+
This parameter is used, for examples, in theory='tddft_response' and theory='maxwell'.
+
+
+
+
+

out_rt_energy_step

+

integer, default=10

+
+
+
Available for the TDDFT based option of theory.
+
Total energy is calculated and printed every out_rt_energy_step time steps.
+
+
+
+
+

yn_out_psi

+

character, default='n'

+
+
+
Available for theory='dft'.
+
Switch for output of orbitals.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
The format of the output is specified by &analysis/format_voxel_data.
+
+
+
+
+

yn_out_dos

+

character, default='n'

+
+
+
Available for theory='dft'.
+
Switch for output of density of states.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

yn_out_pdos

+

character, default='n'

+
+
+
Available for theory='dft'.
+
Switch for output of projected density of states.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

yn_out_dos_set_fe_origin

+

character, default='n'

+
+
+
Available when yn_out_dos='y' or yn_out_pdos='y'.
+
Switch to set the Fermi energy to zero in the energy axis of DoS.
+
If the temperature is not specified, this option sets the valence band maximum to zero.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

out_dos_start

+

real(8), default=-1d10 (eV)

+
+
+

out_dos_end

+

real(8), default=1d10 (eV)

+
+
+
Available when yn_out_dos='y' or yn_out_pdos='y'.
+
Lower/Upper bound of the energy range for the density of states spectra.
+
If this value is lower/higher than a specific value near the lowest/highest energy level, this parameter is re-set to the value.
+
+
+
+
+

out_dos_nenergy

+

integer, default=601

+
+
+
Available when yn_out_dos='y' or yn_out_pdos='y'.
+
Number of energy points sampled in the density of states spectra.
+
+
+
+
+

out_dos_function

+

character, default='gaussian'

+
+
+
Available when yn_out_dos='y' or yn_out_pdos='y'.
+
Choice of the smearing function for the density of states spectra.
+
Options:
+
+
gaussian / Gaussian function
+
lorentzian / Lorentzian function
+
+
+
+
+
+

out_dos_width

+

real(8), default=0.1d0 [eV]

+
+
+
Available when yn_out_dos='y' or yn_out_pdos='y'.
+
Smearing width used in the density of states spectra.
+
+
+
+
+

yn_out_dns

+

character, default='n'

+
+
+
Available for theory='dft'.
+
Switch to output electron density distribution of the ground state.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

yn_out_dns_rt

+

character, default='n'

+
+
+
Available when theory='dft_md' or 'theory=tddft_pulse'.
+
Switch to output electron density distribution during the time-propagation.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

out_dns_rt_step

+

integer, default=50

+
+
+
Available when theory='dft_md' or 'theory=tddft_pulse'.
+
Density is outputted every out_dns_rt_step steps.
+
+
+
+
+

yn_out_dns_ac_je

+

character, default='n'

+
+
+
Available for theory='single_scale_maxwell_tddft'.
+
Switch to print the electron density, vector potential, electronic current, and ionic coordinates every out_dns_ac_je_step time steps.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
The data written in binary format are divided into files corresponding to the space-grid parallelization number.
+
+
+
+
+

out_dns_ac_je_step

+

integer, default=50

+
+
+
Available for theory='single_scale_maxwell_tddft'.
+
Electron density, vector potential, electronic current, and ionic coordinates are outputted every outdns_dns_ac_je_step time steps.
+
+
+
+
+

yn_out_micro_je

+

character, default='n'

+
+
+
Available for TDDFT based methods.
+
Switch to print the microscopic electron current density (je_micro_*** files) at every out_micro_je_step time steps.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

out_micro_je_step

+

integer, default=50

+
+
+
Available for TDDFT based methods with yn_out_micro_je='y'.
+
See yn_out_micro_je.
+
+
+
+
+

yn_out_dns_trans

+

[currently not available] character default='n'

+
+
+
Available for theory='tddft_pulse'.
+
Switch to calculate transition density at specified frequency omega (specified by out_dns_trans_energy), drho(r,omega)=FT(rho(r,t)-rho_gs(r))/T.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

out_dns_trans_energy

+

[currently not available] real(8), default=1.55d0 [eV]

+
+
+
Available for theory='tddft_pulse'.
+
A frequency to output drho(r,omega)=FT(rho(r,t)-rho_gs(r))/T.
+
+
+
+
+

yn_out_elf

+

character, default='n'

+
+
+
Available for theory='dft'.
+
Switch to output the electron localization function.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

yn_out_elf_rt

+

character, default='n'

+
+
+
Available for theory='dft_md', 'tddft_pulse'.
+
Switch to output the electron localization function during the time propagation every out_elf_rt_step time steps.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

out_elf_rt_step

+

integer, default=50

+
+
+
Available for theory='dft_md', 'tddft_pulse'.
+
Electron localization function during the time propagation is outputted every out_elf_rt_step time steps.
+
+
+
+
+

yn_out_estatic_rt

+

character, default='n'

+
+
+
Available for theory='tddft_pulse'.
+
Switch to print the static electric field during the time propagation every out_estatic_rt_step time steps.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

out_estatic_rt_step

+

integer, default=50

+
+
+
Available for theory='tddft_pulse'.
+
The static electric field during the time propagation is outputed every out_estatic_rt_step time steps.
+
+
+
+
+

yn_out_rvf_rt

+

character, default='n'

+
+
+
Available for TDDFT based options and 'dft_md' option of theory.
+
Switch to print the coordinates[A], velocities[au], forces[au] of atoms during time-propagation in SYSname_trj.xyz every out_rvf_rt_step time steps.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
If yn_md='y', this option is automatically turned on.
+
+
+
+
+

out_rvf_rt_step

+

integer, default=10

+
+
+
Available for TDDFT based options and 'dft_md' option of theory.
+
The coordinates[A], velocities[au], forces[au] of atoms during time-propagation are outputed in SYSname_trj.xyz every out_rvf_rt_step time steps.
+
+
+
+
+

yn_out_tm

+

[Trial] character, default='n'

+
+
+
Available for yn_periodic='y' with theory='dft'.
+
Switch to calculate and print the transition matrix elements between occupied and virtual orbitals to SYSname_tm.data after the ground state calculation.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

yn_out_gs_sgm_eps

+

[Trial] character, default='n'

+
+
+
Available for theory='dft'.
+
Switch to calculate and print conductivity (sigma) and dielectric function (epsilon) based on transition moment after convergence of the ground state calculation. These are printed in the output files, SYSname_sigma.data and SYSname_epsilon.data
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

out_gs_sgm_eps_mu_nu

+

integer, default=3,3

+
+
+
Available for yn_out_gs_sgm_eps='y' with theory='dft'.
+
Index of conductibity and dielectric tensol element calculated in this option. Default of (3,3) means zz element.
+
+
+
+
+

out_gs_sgm_eps_width

+

real(8), default=0.015d0 [eV]

+
+
+
Available for yn_out_gs_sgm_eps='y' with theory='dft'.
+
Smearing width used in conductivity and dielectric function
+
+
+
+
+

out_ms_step

+

integer, default=100

+
+
+
Available for theory='multi_scale_maxwell_tddft'.
+
Some quantities are printed every out_ms_step time step in the Maxwell-TDDFT multiscale calculations.
+
+
+
+
+

format_voxel_data

+

character, default='cube'

+
+
+
Available for yn_out_psi='y', yn_out_dns(_rt)='y', yn_out_dns_ac_je='y', yn_out_elf(_rt)='y', yn_out_estatic_rt='y'.
+
Option of the file format for three-dimensional volumetric data.
+
+
'avs' / AVS format
+
'cube' / cube format
+
'vtk' / vtk format
+
+
+
+
+
+

nsplit_voxel_data

+

integer, default=1

+
+
+
Available for format_voxel_data='avs'.
+
Number of separated files for three dimensional data.
+
+
+
+
+

yn_lr_w0_correction

+

[Trial] character, default='n'

+
+
+
Available for yn_periodic='y' and trans_longi='tr' with theory='tddft_response'.
+
Apply correction around zero frequency of dielectric function to suppress numerical error.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

yn_out_current_decomposed

+

character, default='n'

+
+
+
Available for TDDFT based options of theory.
+
Switch to output docomposed elements of the electron current density.
+
The sum of the docomposed elements is equal to the current density in SYSname_rt.data.
+
Output file: SYSname_current_decomposed.data
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

out_current_decomposed_step

+

integer, default=100

+
+
+
Available when yn_out_current_decomposed='y'.
+
The decomposed current data is outputted every out_current_decomposed_step step.
+
+
+
+
+

out_rt_spin_step

+

integer, default=100

+
+
+
Available for TDDFT based methods with spin='noncollinear'.
+
The spin magnetization and spin current density are outputted every out_rt_spin_step time steps in the output file SYSname_rt_spin.data.
+
For the definition of the spin current, see [N. Tancogne-Dejean et al, npj Computational Materials 8, 145 (2022).].
+
+
+
+
+

yn_out_mag_decomposed_rt

+

character, default='n'

+
+
+
Available for TDDFT based methods with spin='noncollinear'.
+
Switch to output docomposed elements of the time-dependent spin magnetization at every out_rt_spin_step time steps.
+
Output file: SYSname_mag_decomposed_rt.data
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

yn_out_mag_micro_rt

+

character, default='n'

+
+
+
Available for TDDFT based methods with spin='noncollinear'.
+
Switch to output voxel data files of the microscopic magnetization at every out_rt_spin_step time steps.
+
Output files: mag_micro_[xyz]_000001.<format_voxel_data> etc.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

yn_out_spin_current_decomposed

+

character, default='n'

+
+
+
Available for TDDFT based methods with spin='noncollinear'.
+
Switch to output docomposed elements of the spin current density at every out_rt_spin_step time steps.
+
Output file: SYSname_spin_current_decomposed.data
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

yn_out_spin_current_micro

+

character, default='n'

+
+
+
Available for TDDFT based methods with spin='noncollinear'.
+
Switch to output voxel data files of the microscopic spin-current density at every out_rt_spin_step time steps.
+
Output files: spin_curr_micro_[xyz]_[xyz]_000001.<format_voxel_data> etc.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

yn_out_perflog

+

character, default='y'

+
+
+
Available for all theory
+
Switch to print the performance log of routines and modules.
+
Options:
+
+
'y' / enable
+
'n' / disable
+
+
+
+
+
+

format_perflog

+

character, default='stdout'

+
+
+
Available for yn_out_perflog = 'y'
+
The output format of performance log.
+
Options:
+
+
'stdout' / standard output unit
+
'text' / save as a text file
+
'csv' / save as a csv format file
+
+
+
+
+
+
+

&poisson

+
+

method_poisson

+

character, Default='cg'

+
+
+
Available for yn_periodic='n' in DFT and TDDFT based options of theory.
+
This papameter specify how to solve the Poisson equation.
+
Options:
+
+
cg/ Conjugate-Gradient(CG) method
+
ft/ Fourier transformation method
+
dirichlet/ Dirichlet boundary condition method
+
+
+
+
+
+

layout_multipole

+

character, Default=3

+
+
+
Available for yn_periodic='n' in DFT and TDDFT based options of theory.
+
This papameter specify how to achieve multipole expansioin in the Hartree potential calculation.
+
Options:
+
+
1/ A single pole at the center.
+
2/ Multipoles are set at each center of atoms.
+
3/ Multipoles are set at the center of mass of electrons in prepared cuboids in each process.
+
+
+
+
+
+

num_multipole_xyz(3)

+

integer, default=0

+
+
+
Available for yn_periodic='n' in DFT and TDDFT based options of theory.
+
Number of multipoles. When default is set, the number of multipoles is calculated automatically.
+
+
+
+
+

lmax_multipole

+

[Trial] integer, default=4

+
+
+
Available for yn_periodic='n' in DFT and TDDFT based options of theory.
+
A maximum order of the multipole expansion to prepare boundary condition of Poisson equation.
+
+
+
+
+

threshold_cg

+

real(8), default=1d-15 [a.u.]

+
+
+
Available for yn_periodic='n' in DFT and TDDFT based options of theory.
+
A threshold for the convergence of the Hartree-cg calculation. A quantity examined is given by ||tVh(i)-tVh(i-1)||^2/(number of grids).
+
+
+
+
+
+

&ewald

+
+

newald

+

integer, default=4

+
+
+
Available for yn_periodic='y' in DFT/TDDFT based options of theory.
+
Parameter of the Ewald method for the ion-ion Coulombic interaction. Short-range part of the Ewald sum is calculated within newald-th nearlist neighbor cells.
+
+
+
+
+

aewald

+

real(8), default=0.5d0 [a.u.]

+
+
+
Available for yn_periodic='y' in DFT/TDDFT based options of theory.
+
Square of range separation parameter for Ewald method (This parameter is given only in atomic unit).
+
+
+
+
+

cutoff_r

+

real(8), default=-1d0

+
+
+
Available for yn_periodic='y' in DFT/TDDFT based options of theory.
+
Cut-off length in real-space. The length is automatically determined if cutoff_r < 0.
+
+
+
+
+

cutoff_r_buff

+

real(8), default=2d0 [a.u.]

+
+
+
Available for yn_periodic='y' in yn_md='y' or in theory='dft_md'.
+
Buffer length in radius for book-keeping for real-space interaction.
+
+
+
+
+

cutoff_g

+

real(8), Default=-1d0

+
+
+
Available for yn_periodic='y' in DFT/TDDFT based options of thddeory.
+
Cut-off in G-space in the Ewald method. No cut-off in default.
+
+
+
+
+
+

&opt[Trial]

+
+

nopt

+

integer, default=100

+
+
+
Available for yn_opt='y' in theory='dft'.
+
The maximum step number of geometry optimization.
+
+
+
+
+

convrg_opt_fmax

+

real(8), default=1d-3 (a.u.)

+
+
+
Available for yn_opt='y' in theory='dft'.
+
Convergence threshold of geometry optimization is specified for the maximum force acting on atoms.
+
+
+
+
+

max_step_len_adjust

+

real(8), default=-1d0

+
+
+
Available for yn_opt='y' in theory='dft'.
+
Set maximum optimization step length (if positive number is given)
+
+
+
+
+
+

&md[Trial]

+
+

ensemble

+

character, default='NVE'

+
+
+
Available for yn_md='y' or theory='dft_md'.
+
Ensemble in MD option:
+
Options:
+
+
NVE/ NVE ensemble (constant energy and volume system)
+
NVT/ NVT ensemble (constant temperature and volume system)
+
+
+
+
+
+

thermostat

+

character, default='nose-hoover'

+
+
+
Available for yn_md='y' or theory='dft_md'.
+
Thermostat in "NVT" option:
+
Options:
+
+
nose-hoover/ Nose-Hoover thermostat
+
+
+
+
+
+

step_velocity_scaling

+

integer, default=-1

+
+
+
Available for yn_md='y' or theory='dft_md'.
+
Time step interval for velocity-scaling. Velocity-scaling is applied if this is set to positive.
+
+
+
+
+

step_update_ps

+

integer, default=10

+
+
+
Available for yn_md='y' or theory='dft_md'.
+
Time step interval for updating pseudopotential (Larger number reduces computational time but increases inaccuracy).
+
+
+
+
+

temperature0_ion_k

+

real(8), Default=298.15d0 [K]

+
+
+
Available for yn_md='y' or theory='dft_md'.
+
Setting ionic temperature in unit of [K] for NVT ensemble, velocity scaling and generating initial velocities.
+
+
+
+
+

yn_set_ini_velocity

+

character, Default='n'

+
+
+
Available for yn_md='y' or theory='dft_md'.
+
Switch to generate initial velocities.
+
Options:
+
+
y/ Generate initial velocity with Maxwell-Bortzman distribution
+
n/ disable
+
+
+
+
+
+

file_ini_velocity

+

[Trial] character, default='none'

+
+
+
Available for yn_md='y' or theory='dft_md'.
+
File name for reading initial velocities. This is read if the file name is given, then, the priority is higher than use of set_ini_velocity and restart data of velocities. The format is simply vx(iatom) vy(iatom) vz(iatom) in each line. The order of atoms must be the same as the given coordinates in the main input file. In case of using nose-hoover thermostat, a thermostat variable should be put at the last line (all atomic unit).
+
+
+
+
+

thermostat_tau

+
+
real(8), default=1d0 [fs]
+
+
Available for yn_md='y' or theory='dft_md'.
+
Parameter in Nose-Hoover method: controlling time constant for temperature.
+
+
+
+
+
+

yn_stop_system_mom

+

character, default='n'

+
+
+
Available for yn_md='y' or theory='dft_md'.
+
Center of mass is fixed every time step.
+
Options:
+
+
y/ enable
+
n/ disable
+
+
+
+
+
+
+

&jellium

+
+

yn_jm

+

character, default='n'

+
+
+
Available for the DFT/TDDFT based options of theory.
+
Switch to use jellium model.
+
Options:
+
+
y/ enable
+
n/ disable
+
+
When yn_jm='y', &functional/xc must be 'pz'.
+
+
+
+
+

yn_charge_neutral_jm

+

character, default='y'

+
+
+
Available for yn_jm='y' in the DFT/TDDFT based options of theory.
+
Option to enforce exact charge neutrality :
+
Options:
+
+
y/ enable. rs_bohr_jm is modified to fulfill exact charge neutrality.
+
n/ disable. rs_bohr_jm is not modified, and there may appears small charge-neutrality error.
+
+
+
+
+
+

yn_output_dns_jm

+

character, default='y'

+
+
+
Available for yn_jm='y' in the DFT/TDDFT based options of theory.
+
Switch to output positive background charge density.
+
Options:
+
+
y/ enable
+
n/ disable
+
+
+
+
+
+

shape_file_jm

+

character, default='none'

+
+
+
Available for yn_jm='y' in the DFT/TDDFT based options of theory.
+
Name of input shape file that contains positive background charge density to be used in the jellium model calculations. The shape file can be generated by using FDTD_make_shape in SALMON utilities (https://salmon-tddft.jp/utilities.html). When shape_file_jm='none', the shape of the positive background charge density is specified by sphere_nion_jm and sphere_loc_jm which generate spherical shapes.
+
+
+
+
+

num_jm

+

integer, Default=0

+
+
+
Available for yn_jm='y' in the DFT/TDDFT based options of theory.
+
When shape_file_jm is not 'none', num_jm specifies number of media used in the jellium model. When shape_file_jm='none', num_jm specifies number of spherical shapes.
+
+
+
+
+

rs_bohr_jm(:)

+

real(8), default=0d0

+
+
+
Available for yn_jm='y' in the DFT/TDDFT based options of theory.
+
When shape_file_jm is not 'none', rs_bohr_jm(n) spesifies the Wigner-Seitz radius of n-th media. When shape_file_jm='none', rs_bohr_jm(n) spesifies the Wigner-Seitz radius of n-th sphere.
+
+
+
+
+

sphere_nion_jm(:)

+

integer, default=0

+
+
+
Available for yn_jm='y' and shape_file_jm='none' in the DFT/TDDFT based options of theory. sphere_nion_jm(n) spesifies ion number for n-th sphere. At present, only neutral systems can be treated.
+
+
+
+
+

sphere_loc_jm(:,3)

+

real(8), default=0d0

+
+
+
Available for yn_jm='y' and shape_file_jm='none' in the DFT/TDDFT based options of theory. sphere_loc_jm(n,1:3)=x,y,z spesifies location of center of mass for n-th sphere. Note that the coordinate system ranges from -al/2 to al/2 for &system/yn_periodic='n' while ranges from 0 to al for &system/yn_periodic='y'.
+
+
+
+
+
+

&code

+
+

yn_want_stencil_hand_vectorization

+

character, default='y'

+
+
+
Switch to use hand-vectorized optimization code of stencil in the hamiltonian calculation.
+
SALMON checks if the calculation can use the hand-vectorized code. If it fails, SALMON will use a typical implementation.
+
+
+
+
+

yn_want_communication_overlapping

+

character, default='n'

+
+
+
Available for theory='tddft*' or '*maxwell_tddft'
+
Switch to use computation/communication overlap algorithm to improve the performance of stencil in the hamiltonian calculation.
+
SALMON checks if the calculation can use the overlap algorithm. If it fails, SALMON will uses a non-overlap algorithm.
+
+
+
+
+

stencil_openmp_mode

+

character, default='auto'

+
+
+
This option selects an OpenMP parallelization mode of stencil in the hamiltonian calculation.
+
Options:
+
+
auto / SALMON decides the parallelization target automatically.
+
orbital / OpenMP parallelization is applied to orbital (and k-point) loop.
+
rgrid / OpenMP parallelization is applied to real-space grid loop.
+
+
+
+
+
+

current_openmp_mode

+

character, default='auto'

+
+
+
This selects an OpenMP parallelization mode of the current calculation.
+
Options:
+
+
auto / SALMON decides the parallelization target automatically.
+
orbital / OpenMP parallelization is applied to orbital (and k-point) loop.
+
rgrid / OpenMP parallelization is applied to real-space grid loop.
+
+
+
+
+
+

force_openmp_mode

+

character, default='auto'

+
+
+
This selects an OpenMP parallelization mode of the force calculation.
+
Options:
+
+
auto / SALMON decides the parallelization target automatically.
+
orbital / OpenMP parallelization is applied to orbital (and k-point) loop.
+
rgrid / OpenMP parallelization is applied to real-space grid loop.
+
+
+
+
+
+
+

&sbe

+
+

num_sbe

+

integer, default=1

+
+
+
Number of materials in the Maxwell-SBE calculations.
+
+
+
+
+

sysname_sbe(:)

+

character, default='default'

+
+
+
System name of each material in the Maxwell-SBE calculations. The index is the media ID whose maximum value is given by num_sbe.
+
+
+
+
+

nk_sbe(:)

+

integer, default=-1

+
+
+
Total number of k-points in each material in the Maxwell-SBE calculations. The index is the media ID whose maximum value is given by num_sbe.
+
+
+
+
+

nstate_sbe(:)

+

integer, default=-1

+
+
+
orbitals/bands to be calculated in each material in the Maxwell-SBE calculations. The index is the media ID whose maximum value is given by num_sbe.
+
+
+
+
+

nelec_sbe(:)

+

integer, default=-1

+
+
+
Number of valence electrons in each material in the Maxwell-SBE calculations. The index is the media ID whose maximum value is given by num_sbe.
+
+
+
+
+

al_sbe(:,:)

+

real(8), default=0.d0

+
+
+
Spatial box size or lattice constants for cuboid cell (x, y, z) in each material in the Maxwell-SBE calculations. The first index(1-3 rows) corresponds to x, y, and z axes. The second index is the media ID whose maximum value is given by num_sbe.
+
+
+
+
+

al_vec_1_sbe(:,:)

+
+
+

al_vec_2_sbe(:,:)

+
+
+

al_vec_3_sbe(:,:)

+

integer, default=-1

+
+
+
Primitive lattice vectors for nonorthogonal cell in each material in the Maxwell-SBE calculations. The first index(1-3 rows) corresponds to x, y, and z components of the lattice vectors. The second index is the media ID whose maximum value is given by num_sbe.
+
+
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/en/install_and_run.html b/docs/en/install_and_run.html new file mode 100644 index 0000000..6c36c82 --- /dev/null +++ b/docs/en/install_and_run.html @@ -0,0 +1,796 @@ + + + + + + Install and Run — SALMON software manual v.2.2.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Install and Run

+
+

Prerequisites

+

In this guide, it is assumed that readers have a basic knowledge of Linux and its command line operations. +For the installation of SALMON, following packages are required.

+
    +
  • Fortran90/C compiler. SALMON assumes users have one of the following compilers:
      +
    • GCC (Gnu Compiler Collection)
    • +
    • Intel Compiler
    • +
    • Fujitsu Compiler (at FX100 and A64FX)
    • +
    • Nvidia HPC SDK Compiler
    • +
    +
  • +
  • One of the following library packages for linear algebra:
      +
    • Netlib BLAS/LAPACK/ScaLAPACK
    • +
    • Intel Math Kernel Library (MKL)
    • +
    • Fujitsu Scientific Subroutine Library 2 (SSL-II)
    • +
    +
  • +
  • Build tools:
      +
    • CMake
    • +
    +
  • +
+

If you use other compilers, you may need to change build scripts (CMake). See Additional options in configure.py script. +If no numerical library is installed on your computer system, you may need to install BLAS/LAPACK by yourself. +See Troubleshooting of the Installation Process.

+

For the installation of SALMON, we adopt the CMake tools as the first option. +If there were any problems to use CMake tools in your environment, you may use the GNU make tools. +See Troubleshooting of the Installation Process.

+
+
+

Download

+

The newest version of SALMON can be downloaded from download page. +You can also get the file by:

+
$ wget http://salmon-tddft.jp/download/SALMON-<VERSION>.tar.gz
+
+
+

To extract files from the downloaded file SALMON-<VERSION>.tar.gz, type the following command in the command-line:

+
$ tar -zxvf ./SALMON-<VERSION>.tar.gz
+
+
+

After the extraction, the following directories will be created:

+
SALMON
+  |- src          Source codes
+  |- example      Samples
+  |- cmakefiles   CMake related files
+  |- gnumakefiles GNU Makefiles for building
+
+
+
+
+

Build and Install

+

To compile SALMON to create executable the binary files, we adopt to use CMake tools as the first option. +In case you fail to build SALMON using CMake in your environment, we may use Gnu Make. See Build using GNU Makefile.

+
+

Checking CMake availability

+

First, examine whether CMake is usable in your environment or not. +Type the following in Linux command-line:

+
$ cmake --version
+
+
+

If CMake is not installed in your system, an error message such as cmake: command not found will appear. +If CMake is installed on your system, the version number will be shown. +To build SALMON, CMake of version 3.14.0 or later is required. +If you confirm that CMake of version 3.14.0 or later is installed in your system, proceed to Build using CMake. +However, we realize that old versions of CMake are installed in many systems. +If CMake is not installed or CMake of older versions is installed in your system, you need to install the new version by yourself. +It is a simple procedure and explained below.

+
+
+

Installation of CMake (pre-compiled binary of Linux)

+

CMake is a cross-platform build tool. +The simplest way to make CMake usable in your environment is to get the binary distribution of CMake from the download page. (The file name of the binary distribution will be cmake-<VERSION>-<PLATFORM>.tar.gz). In standard Linux environment, a file for the platform of Linux x86_64 will be appropriate.

+

To download the file, proceed as follows: We assume that you are in the directory that you extracted files from the downloaded file of SALMON, +and that you will use the version 3.16.8. First get the URL of the download link from your browser, and use wget command in your Linux command-line:

+
$ wget https://cmake.org/files/v3.16/cmake-3.16.8-Linux-x86_64.tar.gz
+
+
+

Next, unpack the archive by:

+
$ tar -zxvf cmake-3.16.8-Linux-x86_64.tar.gz
+
+
+

and you will have the binary make-3.16.8-Linux-x86_64/bin/cmake in your directory.

+

To make the cmake command usable in your command-line, you need to modify the environment variable $PATH so that the executable of CMake are settled inside the directory specified in your $PATH. +If you use the bash shell, you need to modify the file ~/.bashrc that specifies the $PATH variable. It can be done by typing the following command in your login directory:

+
$ export PATH=<SALMON_INSTALLATION_DIRECTORY>/cmake-3.16.8-Linux-x86_64/bin:$PATH
+
+
+

and then reload the configuration by typing:

+
$ source ~/.bashrc
+
+
+

See Installation of CMake describes Other way of the installation.

+
+
+

Build using CMake

+

Confirming that CMake of version 3.14.0 or later can be usable in your environment, proceed the following steps. +We assume that you are in the directory SALMON.

+
    +
  1. Create a new temporary directory build and move to the directory:

    +
    $ mkdir build
    +$ cd build
    +
    +
    +
  2. +
  3. Execute the python script ''configure.py'' and then make:

    +
    $ python ../configure.py --arch=ARCHITECTURE --prefix=../
    +$ make
    +$ make install
    +
    +
    +
  4. +
+

In executing the python script, you need to specify ARCHITECTURE that indicates the architecture of the CPU in your computer system such as intel-avx. The options of the ARCHITECUTRE are as follows:

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
archDetailCompilerNumerical Library
intel-knlIntel Knights LandingIntel CompilerIntel MKL
intel-kncIntel Knights CornerIntel CompilerIntel MKL
intel-avxIntel Processer (Ivy-, Sandy-Bridge)Intel CompilerIntel MKL
intel-avx2Intel Processer (Haswell, Broadwell ..)Intel CompilerIntel MKL
intel-avx512Intel Processer (Skylake-SP)Intel CompilerIntel MKL
fujitsu-fx100FX100 SupercomputerFujitsu CompilerSSL-II
fujitsu-a64fx-eaA64FX processor (Fugaku, FX1000, FX700)Fujitsu CompilerSSL-II
nvhpc-openmpNVHPC OpenMP (CPU)Nvidia HPC CompilerNvidia HPC SDK
nvhpc-openaccNVHPC OpenACC (GPU)Nvidia HPC CompilerNvidia HPC SDK
nvhpc-openacc-cudaNVHPC OpenACC+CUDA (GPU)Nvidia HPC CompilerNvidia HPC SDK
+

If the build is successful, you will get a file salmon at the top-level build directory.

+
+
+
+

Files necessary to run SALMON

+

To run SALMON, at least two kinds of files are required for any calculations. +One is an input file with the filename extension *.inp that should be read from the standard input stdin. +This file should be prepared in the Fortran90 namelist format. +Pseudopotential files of relevant elements are also required. +Depending on your purpose, some other files may also be necessary. +For example, coordinates of atomic positions of the target material may be either written in the input file or prepared as a separate file.

+
+

Pseudopotentials

+

SALMON utilizes norm-conserving (NC) pseudpotentials. +Filenames of pseudopotentials should be written in the input file.

+

You may find pseudopotentials of some elements in the samples prepared in Exercises. +In SALMON, several formats of pseudopotentials may be usable (listed below). +For example, pseudopotentials with an extension .fhi can be obtained from the ABINIT website (this is a part of previous atomic data files for the ABINIT code).

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
PseudopotentialextensionWebsite
Fritz-Haber-Institute (FHI) pseudopotentials.fhihttps://www.abinit.org/sites/default/files/PrevAtomicData/psp-links/lda_fhi.html +(for LDA), +https://www.abinit.org/sites/default/files/PrevAtomicData/psp-links/gga_fhi.html +(for GGA)
Pseudopotentials for the OpenMX code.vpshttps://t-ozaki.issp.u-tokyo.ac.jp/vps_pao2019/
Format 8 for ABINIT norm-conserving pseudopotentials.psp8https://www.abinit.org/psps_abinit , +http://www.pseudo-dojo.org/
Unified-pseudopotential-format (NC type only in SALMON).upfhttp://www.quantum-espresso.org/pseudopotentials/unified-pseudopotential-format , +http://www.pseudo-dojo.org/
+
+
+

input file

+

Input files are composed of several blocks of namelists:

+
&namelist1
+  variable1 = int_value
+  variable2 = 'char_value'
+/
+&namelist2
+  variable1 = real8_value
+  variable2 = int_value1, int_value2, int_value3
+/
+
+
+

A block of namelists starts with &namelist line and ends with / line. +The blocks may appear in any order.

+

Between two lines of &namelist and /, descriptions of variables and their values appear. +Note that many variables have their default values so that it is not necessary to give values for all variables. +Descriptions of the variables may appear at any position if they are between &namelist and /.

+

SALMON describes electron dynamics in systems with both isolated and periodic boundary conditions. +The boundary condition is specified by the variable iperiodic in the namelist &system.

+

Calculations are usually achieved in two steps; first, the ground state calculation is carried out and then electron dynamics calculations in real time is carried out. A choice of the calculation mode or theory in the calculation is specified by the variable theory in the namelist &calculation. +In the typical way, the ground state calculation based on DFT is first carried out specifying theory = 'dft'. +Then the real-time electron dynamics calculation based on TDDFT is carried out specifying theory = 'tddft_pulse'.

+

In Exercises, we prepare six exercises that cover typical calculations feasible by SALMON. +We prepare explanations of the input files of the exercises that will help to prepare input files of your own interests.

+

There are more than 20 groups of namelists. A complete list of namelist variables is given in the file SALMON/manual/input_variables.md. +Namelist variables that are used in our exercises are explained at Inputs.

+
+
+
+

Run SALMON

+

Before running SALMON, the following preparations are required as described above: The executable file of salmon should be built from the source file of SALMON. An input file inputfile.inp and pseudopotential files should also be prepared.

+

The execution of the calculation can be done as follows: In single process environment, type the following command:

+
$ salmon < inputfile.inp > fileout.out
+
+
+

In multiprocess environment in which the command to execute parallel calculations using MPI is mpiexec, type the following command:

+
$ mpiexec -n NPROC salmon < inputfile.inp > fileout.out
+
+
+

where NPROC is the number of MPI processes that you will use.

+

The execution command and the job submission procedure depends much on local environment. We summarize general conditions to execute SALMON:

+
    +
  • SALMON runs in both single-process and multi-process environments using MPI.
  • +
  • Executable file is prepared as salmon in the standard build procedure.
  • +
  • To start calculations, inputfile.inp should be read through stdin.
  • +
+
+

MPI process distribution

+

SALMON provides three variables to determine the process distribution/allocation.

+
    +
  • nproc_k
  • +
  • nproc_ob
  • +
  • nproc_rgrid(3)
  • +
+

In SALMON, the process distribution is determined automatically as default. +However, in many situations, an explicit assignment of the process distribution +will provide a better performance than the default setting.

+

We recommend to distribute the processes as follows,

+

If you use k-points ( the number of k-points is greater than 1) and the number of +the real-space grid (num_rgrid) is not very large (about 16^3):

+
+
    +
  • First, assign many processes to nproc_k.
  • +
  • Then, assign the remaining processes to nproc_ob.
  • +
  • Not dividing the spatial grid, nproc_rgrid = 1, 1, 1.
  • +
+
+

Else:

+
+
    +
  • First, assign the processes to nproc_ob.

    +
  • +
  • Then, assign the remaining processes to nproc_rgrid.

    +
      +
    • If real-space grid size (num_rgrid(1:3) = al(1:3) / dl(1:3)) is equal to or larger than about 64^3,
    • +
    +

    you should find a balanced distribution between nproc_rgrid and nproc_ob.

    +
  • +
+
+
+
+
+

Tips for large-scale calculation

+

We explain below some tips that will be useful to improve performance when you carry out +large scale simulations using world top-level supercomputers. +Therefore, the following contents will only be useful only for limited users.

+
+

Improve the performance of the eigenvalues solver

+

In DFT calculations of large systems, subspace diagonalization becomes the performance bottleneck +in the entire calculation. Therefore, it is important to use a parallel eigenvalues solver. +In SALMON, a LAPACK routine without parallelization is used for the diagonalization as default. +As parallelized solvers, ScaLAPACK and EigenExa are usable. +To use them, it is necessary to rebuild SALMON enabling ScaLAPACK/EigenExa. +You can find the instruction in Install and Run.

+

To execute SALMON using ScaLAPACK/EigenExa, either yn_scalapack = 'y' or yn_eigenexa = 'y' should be +included in the inputfile:

+
&parallel
+  yn_scalapack = 'y'         ! use ScaLAPACK for diagonalization
+  !yn_eigenexa  = 'y'        ! use EigenExa
+/
+
+
+

ScaLAPACK/EigenExa solves the eigenvalue problem with nproc_ob process distribution. +If nproc_ob = 1, ScaLAPACK/EigenExa will perform in the same way as the LAPACK library.

+
+
+

Improve the performance of Hartree solver

+

For periodic systems, a Fourier transformation is used to solve the Poisson equation (to calculate the Hartree potential). +In SALMON, a simple Fourier transformation without Fast Fourier Transformation (FFT) is used as default. +In SALMON, a parallelized FFT routine, FFTE, is usable and works efficiently for large systems. +In using FFTE, the following conditions should be satisfied:

+
num_rgrid(1) mod nproc_rgrid(2) = 0
+num_rgrid(2) mod nproc_rgrid(2) = 0
+num_rgrid(2) mod nproc_rgrid(3) = 0
+num_rgrid(3) mod nproc_rgrid(3) = 0
+
+In addition, the prime factors for the number of real-space grid of each direction (num_rgrid(1:3)) must be a combination of 2, 3 or 5.
+
+
+

To use FFTE, yn_ffte = 'y' should be included in the input file:

+
&parallel
+  yn_ffte = 'y'
+/
+
+
+
+
+

Improve IO performance (write/read wavefunction)

+

Almost all supercomputer systems provide distributed filesystems such as Lustre. +Distributed filesystems are equipped with a meta-data server (MDS) and an object-storage server (OST). +The OST stores real user data files, and the MDS stores the address of the user date files in the OST. +When accessing to the data files in the OST, the process send a query about the OST address to MDS. +Then, a network contention may occur in the query process.

+

In most implementations of the filesystem, the MDS that replies to the query is determined by the directory structure. +For a calculation in which k-point is not used, +method_wf_distributor and nblock_wf_distribute are prepared to reduce the network contention:

+
&control
+  method_wf_distributor = 'slice' ! every orbital function is stored as a single file.
+  nblock_wf_distribute  = 32      ! files of 32 orbital functions are stored in one directory.
+/
+
+
+
+
+

Improve the communication performance for mesh-torus network system

+

Large-scale supercomputers often adopt a mesh-torus network system such as Cray dragon-fly and Fujitsu Tofu to achieve +high scalability with relatively low cost. +In SALMON, a special MPI process distribution (communicator creation rule) is prepared to improve the performance +in large-scale mesh-torus network systems.

+

Currently, we provide the communicator creation rule for "Supercomputer Fugaku", +which is developed by RIKEN R-CCS and Fujitsu limited. +Fugaku is equipped with a 6-D mesh-torus network which is called "Tofu-D". +Users may control it as a 3-D logical network. +SALMON utilizes 5-D array (wavefunction(x, y, z, orbital, k-point)) as a domain for parallelization. +We create a map that connects the 3-D network to the 5-D array distribution.

+

We introduce the following variables and conditons to assign the 3-D mesh-torus network to the 5-D array distribution:

+
PW           = nproc_ob * nproc_k
+(PX, PY, PZ) = nproc_rgrid
+PPN          = '# of process per node' (we recommend the value 4 in Fugaku)
+
+Requested process shape: (PX, PY, PZ, PW)
+Tofu-D network    shape: (TX, TY, TZ)
+Actual process    shape: (TX * PPN, TY, TZ)
+
+if (process_allocation == 'grid_sequential'):
+  PW  = PW1 * PW2 * PW3
+  PW1 = (TX * PPN) / PX
+  PW2 = TY         / PY
+  PW3 = TZ         / PZ
+  TX  = (PX * PW1) / PPN
+  TY  = PY * PW2
+  TZ  = PZ * PW3
+
+else if (process_allocation == 'orbital_sequential'):
+  PX  = PX1 * PX2 * PX3
+  PX1 = (TX * PPN) / PW
+  PX2 = TY         / PY
+  PX3 = TZ         / PZ
+  TX  = (PW * PX1) / PPN
+  TY  = PY * PX2
+  TZ  = PZ * PX3
+
+
+

From these conditions, you can determine the suitable process distribution and the Tofu-D network shape (compute node shape). +process_allocation input variable controls the order of the process distribution. +It indicates which communications should be executed in closer processes.

+
    +
  • process_allocation = 'grid_sequential'
      +
    • (PX, PY, PZ, PW), nproc_rgrid major ordering
    • +
    • improves nproc_rgrid related communication performance
    • +
    • communicator: s_parallel_info::icomm_r, icomm_x, icomm_y, icomm_z, icomm_xy
    • +
    • suitable theory: 'dft' and 'dft_md'
    • +
    +
  • +
  • process_allocation = 'orbital_sequential'
      +
    • (PW, PY, PZ, PX), nproc_ob major ordering
    • +
    • improves nproc_ob related communication performance
    • +
    • communicator: s_parallel_info::icomm_o and icomm_ko
    • +
    • suitable theory: 'tddft_response', 'tddft_pulse', 'single_scale_maxwell_tddft' and 'multi_scale_maxwell_tddft'
    • +
    +
  • +
+
+
+
+

Troubleshooting of the Installation Process

+
+

Installation of CMake

+

The CMake is a cross-platform build tool. In order to build the +SALMON from the source code, the CMake of version 3.14.0 or later is +required. You may install it following one of the three instructions +below.

+
+

Installation by package manager

+

If your system has a built-in package manager, you may conveniently +install the CMake tools as below:

+

Debian/Ubuntu Linux

+
sudo apt-get install cmake
+
+
+

Fedora Linux/CentOS

+
sudo yum install cmake
+
+
+

openSUSE Linux

+
sudo zypper install cmake
+
+
+
+
+

Installation from source code

+

You can get the source code distribution from the download page. In +this time, we will use the cmake version 3.16.8 as an example. Download +the archive by wget comamnd and unpack it as below:

+
wget https://cmake.org/files/v3.16/cmake-3.16.8.tar.gz
+tar -zxvf cmake-3.16.8.tar.gz
+
+
+

And, move to the unpacked directory and build.

+
cd cmake-3.16.8
+./configure --prefix=INSTALLATION_DIRECTORY
+make
+make install
+
+
+

(replace INSTALLATION_DIRECTORY to your installation directory.)

+

Next, to utilize the cmake command, it is required that the +executable are settled inside the directory specified in your $PATH. +If you use the bash shell, edit ~/.bashrc and append the line:

+
export PATH=INSTALLATION_DIRECTORY/bin:$PATH
+
+
+

and reload the configuration:

+
source ~/.bashrc
+
+
+
+
+
+
+

Appendix

+
+

Additional options in configure.py script

+
+

Manual specifications of compiler and environment variables

+

In executing configure.py, you may manually specify compiler and environment variables instead of specifying the architecture, for example:

+
$ python ../configure.py FC=mpiifort CC=mpiicc FFLAGS="-xAVX" CFLAGS="-restrict -xAVX"
+
+
+

The list of options of configure.py can be found by:

+
$ python ../configure.py --help
+
+
+

The major options are as follows:

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Commandline switchDetail
-a ARCH, --arch=ARCHTarget architecture
--enable-mpi, --disable-mpienable/disable MPI parallelization
--enable-scalapack, --disable-scalapackenable/disable computations with ScaLAPACK library
--enable-eigenexa, --disable-eigenexaenable/disable computations with RIKEN R-CCS EigenExa library
--enable-libxc, --disable-libxcenable/disable computations with Libxc library
--with-lapackspecified LAPACK/ScaLAPACK installed directory
--with-libxcspecified Libxc installed directory
--debugenable debug build
--releaseenable release build
FC, FFLAGSUser-defined Fortran Compiler, and the compiler options
CC, CFLAGSUser-defined C Compiler, and the compiler options
+

In the build procedure by CMake, they search the following libraries. +If the libraries don't found in the path that is specified by environment variables, they will build the required libraries automatically.

+ +

EigenExa will download and build automatically even if the library is installed to your machine.

+
+
+

Build for single process calculations

+

When using the --arch option, MPI parallelization is enabled as default. +If you use a single processor machine, explicitly specify --disable-mpi in executing the python script:

+
$ python ../configure.py --arch=<ARCHITECTURE> --disable-mpi
+
+
+
+
+

Build by user-specified compiler

+

If you want that specify the compiler, set the FC and CC flags in executing the python script:

+
$ python ../configure.py FC=gfortran CC=gcc
+
+
+

When --arch option is not used, MPI parallelization is disabled as default.

+
+
+
+

Compilation for GPU acceleration

+

GPU acceleration (OpenACC or OpenACC+CUDA) for the basic part (such as DFT & TDDFT for spin-unpolarized systems) is available. +Specify --arch=nvhpc-openacc (OpenACC) or --arch=nvhpc-openacc-cuda (OpenACC+CUDA) option when executing configure.py. +This option is currently under development and tested only for NVIDIA HPC SDK compiler ver 21.2 and 21.5 with NVIDIA Tesla V100 and A100 GPUs.

+
+
+

Compilation with FFTW library

+

For solving the Poisson equation for the Hartree potential, SALMON uses the discrete Fourier transform. +FFTW library (https://www.fftw.org) is available for fast calculation. +When executing configure.py, specify --enable-fftw option and linker flags for FFTW such as LDFLAGS="-lfftw3_mpi -lfftw3".

+

Exapmle:

+
$ python ../configure.py --arch=ARCHITECTURE --enable-fftw LDFLAGS="-lfftw3_mpi -lfftw3"
+
+
+
+
+

Build using GNU Makefile

+

If CMake build fails in your environment, we recommend you to try to use Gnu Make for the build process. +First, enter the directory gnumakefiles:

+
$ cd SALMON/gnumakefiles
+
+
+

In the directory, Makefile files are prepared for several architectures:

+
    +
  • gnu-mpi
  • +
  • intel-mpi
  • +
  • gnu-without-mpi
  • +
  • intel-without-mpi
  • +
+

Makefile files with *-without-mpi indicate that they are for single processor environment. +Choose Makefile appropriate for your environment, and execute the make command:

+
$ make -f Makefile.PLATFORM
+
+
+

If the make proceeds successful, a binary file is created in the directory SALMON/bin/.

+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/en/introduction.html b/docs/en/introduction.html new file mode 100644 index 0000000..0681a4f --- /dev/null +++ b/docs/en/introduction.html @@ -0,0 +1,324 @@ + + + + + + Introduction — SALMON software manual v.2.2.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Introduction

+
+

Overview

+

SALMON is an open-source computer program for ab-initio +quantum-mechanical calculations of electron dynamics at the nanoscale +that takes place in various situations of light-matter interactions. It +is based on time-dependent density functional theory, solving +time-dependent Kohn-Sham equation in real time and real space with +norm-conserving pseudopotentials.

+

SALMON was born by unifying two scientific programs: ARTED, developed by +Univ. Tsukuba group, that describes electron dynamics in crystalline +solids, and GCEED, developed by Institute for Molecular Science group, +that describes electron dynamics in molecules and nanostructures. It can +thus describe electron dynamics in both isolated and periodic systems. +It can also describe coupled dynamics of electrons and light-wave +electromagnetic fields.

+

To run the program, SALMON requires MPI Fortran/C compiller with LAPACK +libraries. SALMON has been tested and optimized to run in a number of +platforms, including Linux PC Cluster with x86-64 CPU, supercomputer +systems with Fujitsu FX100 and A64FX processors, and supercomputer system +with Intel Xeon Phi (Knights Landing).

+
+
+

SALMON features

+

In the microscopic scale, SALMON describes electron dynamics in both +isolated (molecules and nanostructures) and periodic (crystalline solids) +systems, solving time-dependent Kohn-Sham equation in real time and real space +with norm-conserving pseudopotential. +SALMON first carries out ground-state calculations in the density functional theory +to prepare initial configurations. SALMON then calculates electron +dynamics induced by applied electric field. Employing a weak impulsive +external field, SALMON can be used to calculate linear response +properties such as a polarizability of molecules and a dielectric +function of crystalline solids. Using pulsed electric fields, SALMON +describes electron dynamics in matters induced by intense and ultrashort +laser pulses.

+

SALMON is also capable of describing a propagation of electromagnetic fields +of light using finite-difference time-domain method. As a unique feature +of SALMON, it is possible to carry out calculations of a coupled dynamics +of light electromagnetic fields and electron dynamics simultaneously.

+

Efficient parallelizations are implemented in the code by dividing spatial +grids, orbital index, and k-points. +SALMON shows a good scalability when it runs in parallel supercomputers, +both for the ground state and the time evolution calculations.

+
    +
  • Ground state calculations
      +
    • Kohn-Sham orbitals and energies
    • +
    • density of states
    • +
    • projected density of states
    • +
    • electron localization function
    • +
    +
  • +
  • Optical properties
      +
    • Oscillator strength distribution (absorption spectrum)
    • +
    • dielectric function
    • +
    +
  • +
  • Light-induced electron dynamics
      +
    • time evolution of Kohn-Sham orbitals
    • +
    • density, current
    • +
    • excitation energy
    • +
    • number density of excited carriers
    • +
    +
  • +
  • Propagation of light electromagnetic fields
      +
    • Drude-Lorentz model
    • +
    • optical response of metasurfaces
    • +
    +
  • +
  • Simultaneous description of electron dynamics and light pulse +propagation
      +
    • light pulse propagation as well as time evolution of Kohn-Sham +orbitals
    • +
    • energy transfer from pulsed light to electrons
    • +
    +
  • +
+
+
+

License

+

SALMON is available under Apache License version 2.0.

+
+

Copyright 2017 SALMON developers

+

Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at

+

http://www.apache.org/licenses/LICENSE-2.0

+

Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License.

+
+
+
+

SALMON at Github

+

SALMON is developed at GitHub.com

+
+
+

List of developers

+

(Alphabetic order)

+
    +
  • Isabella Floss (TU Wien, Austria)
  • +
  • Yuta Hirokawa (Prometech Software, Inc., Japan)
  • +
  • Kenji Iida (Hokkaido University, Japan)
  • +
  • Jun-Ichi Iwata (Advance Soft Co., Japan)
  • +
  • Yuki Ito (Fixstars Corporation, Japan)
  • +
  • Masashi Noda (Academeia, Japan)
  • +
  • Tomohito Otobe (National Institutes for Quantum and Radiological Science and Technology, Japan)
  • +
  • Shunsuke Sato (University of Tsukuba, Japan)
  • +
  • Yasushi Shinohara (University of Tokyo, Japan)
  • +
  • Takashi Takeuchi (University of Tsukuba, Japan)
  • +
  • Mitsuharu Uemoto (Kobe University, Japan)
  • +
  • Kazuhiro Yabana (University of Tsukuba, Japan)
  • +
  • Atsushi Yamada (University of Tsukuba, Japan)
  • +
  • Shunsuke Yamada (University of Tsukuba, Japan)
  • +
+
+
+

Former developers

+
    +
  • Kazuya Ishimura
  • +
  • Kyung-Min Lee
  • +
  • Katsuyuki Nobusada
  • +
  • Xiao-Min Tong
  • +
  • Maiku Yamaguchi
  • +
+
+
+

How to cite SALMON

+
+

Suggested Citations

+

If you publish a paper in which SALMON makes an important contribution, please cite the SALMON code paper, +Ref. [Noda2019] +published in Computer Physics Communications.

+

We also suggest you to cite the following papers depending on your usage of SALMON.

+
    +
  • If you use SALMON for electron dynamics calculations of a large-size system, +Ref. [Noda2014] +that discusses massively parallel implementation utilizing spatial divisions will be appropriate.
  • +
  • if you use SALMON to calculate electron dynamics in a unit cell of crystalline solid, +Ref. [Bertsch2000] +discussing formalism and numerical implementation will be appropriate.
  • +
  • Ref. [Yabana1996] +is one of the first implementations of the real-time time-dependent density functional calculation, in particular, instantaneous kick for the linear response calculations.
  • +
  • If you use multiscale calculation coupling Maxwell equations for the electromagnetic fields of light and electron dynamics, +Ref. [Yabana2012] +discussing the formalism and the numerical implementation will be appropriate.
  • +
  • Ref. [Sato2014JASSE] +describes parallelization method for the coupled Maxwell - TDDFT calculations.
  • +
  • Ref. [Hirokawa2016] +describes computational aspects of electron dynamics calculations for periodic systems in many-core processors:
  • +
+

+ + + + +
[1]M. Noda, S. A. Sato, Y. Hirokawa, M. Uemoto, T. Takeuchi, S. Yamada, A. Yamada, Y. Shinohara, M. Yamaguchi, K. Iida, I. Floss, T. Otobe, K.-M. Lee, K. Ishimura, T. Boku, G. F. Bertsch, K. Nobusada, and K. Yabana. Salmon: scalable ab-initio light-matter simulator for optics and nanoscience. Comp. Phys. Comm., 235(356-365):, 2019.
+ + + + + +
[2]Masashi Noda, Kazuya Ishimura, Katsuyuki Nobusada, Kazuhiro Yabana, and Taisuke Boku. Massively-parallel electron dynamics calculations in real-time and real-space: toward applications to nanostructures of more than ten-nanometers in size. Journal of Computational Physics, 265:145–155, 2014.
+ + + + + +
[3]George F Bertsch, J-I Iwata, Angel Rubio, and Kazuhiro Yabana. Real-space, real-time method for the dielectric function. Physical Review B, 62(12):7998, 2000.
+ + + + + +
[4]K. Yabana and G. F. Bertsch. Time-dependent local-density approximation in real time. Phys. Rev. B, 54:4484–4487, Aug 1996. URL: https://link.aps.org/doi/10.1103/PhysRevB.54.4484, doi:10.1103/PhysRevB.54.4484.
+ + + + + +
[5]Kazuhiro Yabana, T Sugiyama, Y Shinohara, T Otobe, and GF Bertsch. Time-dependent density functional theory for strong electromagnetic fields in crystalline solids. Physical Review B, 85(4):045134, 2012.
+ + + + + +
[6]Shunsuke A. Sato and Kazuhiro Yabana. Maxwell + tddft multi-scale simulation for laser-matter interactions. Journal of Advanced Simulation in Science and Engineering, 1(1):98–110, 2014. doi:10.15748/jasse.1.98.
+ + + + + +
[7]Yuta Hirokawa, Taisuke Boku, Shunsuke A Sato, and Kazuhiro Yabana. Electron dynamics simulation with time-dependent density functional theory on large scale symmetric mode xeon phi cluster. In Parallel and Distributed Processing Symposium Workshops, 2016 IEEE International, 1202–1211. IEEE, 2016.
+

+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/en/objects.inv b/docs/en/objects.inv new file mode 100644 index 0000000..c5b9a43 Binary files /dev/null and b/docs/en/objects.inv differ diff --git a/docs/en/release_log.html b/docs/en/release_log.html new file mode 100644 index 0000000..a35d3ab --- /dev/null +++ b/docs/en/release_log.html @@ -0,0 +1,220 @@ + + + + + + Release History — SALMON software manual v.2.2.0 documentation + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Release History

+
+

Release Notes

+ +
+
+

Details of Minor Changes

+

Followings are history of fixed bugs and changes of models/inputs/outputs after releasing v.2.0.0. (not complete list currently)

+
+

Fixed bugs

+

(Fixed in v.2.2.0)

+
    +
  • For the incident pulse for isolated systems (yn_periodic=’n’), the circular polarization was not defined and the CEP for Acos2 envelope was wrong.
  • +
  • For spin-unpolarized systems (spin=‘unpolarized’), the initial value of the occupation rate was wrong when the electron number (nelec) is odd.
  • +
  • When unit_system=‘A_eV_fs’ is specified, temperature was mistakenly defined in the atomic unit.
  • +
  • For isolated systems (yn_periodic=’n’), the multipole expansion for the boundary conditions of the Hartree potential (Poisson equation) was wrong.
  • +
  • For periodic systems (yn_periodic=’y’), al_vec[123] for orthogonal cells yielded unintended error.
  • +
  • For spin-noncollinear systems (spin=‘noncollinear’), the band-decomposition of the spin magnetization in ***_mag.data files was wrong.
  • +
+

(Fixed in v.2.1.0)

+
    +
  • Non-local term of the transition moment printed by the option of "yn_out_tm=y" has been fixed (just printing issue).
  • +
  • Parallelization for orbitals for calculation of transition moment by "yn_out_tm=y" has been suported
  • +
  • Bug of the segmentation fault occurred by "yn_ffte=y" with parallelization for orbitals using isolated system has been fixed.
  • +
  • Reading of CIF file format for symmetry option has been improved.
  • +
  • Combination of non-uniform user-defined k-points and symmetry option has been supported.
  • +
+

(Fixed in v.2.0.2)

+
    +
  • Small noise on the total energy in TDDFT calculation (that is seen with weak pulse around e.g. I=1d9 W/cm2) has been removed.
  • +
  • The printed absolute values of electron density in cube format has been fixed..
  • +
  • Printing of the external field in TDDFT calculation of the isolated system has a bug in v.2.0.0 and v.2.0.1. It has been fixed in v.2.0.2.
  • +
  • The file reading option of the external electric field in TDDFT calculation ("file_input1" in &emfield) has been fixed.
  • +
  • Invalid occupation number printed in SYSNAME_ovlp.data file for projection option with non-uniform k-points has been fixed.
  • +
+

(Fixed in v.2.0.0)

+
    +
  • The imaginary part of wavefunction was not printed in cube format until v.1.2.1
  • +
+

(Fixed in v.?.?.?)

+
    +
  • Abnormal calculation that sometimes happens if zero value is included in the atomic coordinate in the input with "A_eV_fs" has been fiexd.
  • +
+
+
+

Changes of models/inputs/outputs

+

(v.2.2.0)

+
    +
  • New theory options for SBE and Maxwell-SBE are added.
      +
    • theory = 'sbe'
    • +
    • theory = 'maxwell_sbe'
    • +
    +
  • +
  • Input keywords for the Poisson equation solver are added.
      +
    • method_poisson
    • +
    • yn_fftw
    • +
    +
  • +
  • New TDDFT analysis options are added.
      +
    • yn_fix_func
    • +
    • projection_option=‘td’
    • +
    • threshold_projection
    • +
    • yn_out_intraband_current
    • +
    • yn_out_current_decomposed, out_current_decomposed_step
    • +
    • yn_out_micro_je, out_micro_je_step
    • +
    +
  • +
+

(v.2.1.0)

+
    +
  • Input variables for Spin-orbit coupling are added
      +
    • "yn_spinorbit"
    • +
    • "spin = noncollinear"
    • +
    • "out_magnetization_step"
    • +
    +
  • +
  • New options for calculation of dielectric function and conductivity based on transition moments at the end of the GS calculation is added. The related input variables are
      +
    • "yn_out_gs_sgm_eps"
    • +
    • "out_gs_sgm_eps_mu_nu"
    • +
    • "out_gs_sgm_eps_width"
    • +
    +
  • +
+

(v.2.0.2)

+
    +
  • The definition of the total energy of the periodic system printed in TDDFT calculation has changed: +The electric field energy is included until v.2.0.1. It has not been included from v.2.0.2.
  • +
  • The directory names generated by "method_wf_distributor=slice" option have changed from v.2.0.2.
  • +
+
+
+
+ + +
+
+ +
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/en/sandbox.html b/docs/en/sandbox.html new file mode 100644 index 0000000..b4f8a83 --- /dev/null +++ b/docs/en/sandbox.html @@ -0,0 +1,174 @@ + + + + + + Sandbox — SALMON software manual v.2.2.0 documentation + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+ +
+
+
+
+ +
+

Sandbox

+
+

Image

+_images/top1.png +
+ +
+

Code and syntax highlights

+
    +
  • Example 1:

    +
    subroutine func1(a)
    +  implicit none
    +  integer :: a
    +end subroutine
    +
    +
    +
  • +
  • Example 2

    +
    subroutine func2(b)
    +  implicit none
    +  real(8) :: b
    +end subroutine
    +
    +
    +
  • +
+
+
+

Table

+ ++++ + + + + + + + + + + + + + + + + +
HeaderDescription
AD
BE
CF
+
+
+

Citation

+
    +
  • if you use SALMON to calculate electron dynamics in a unit cell of crystalline solid, [SALMON-unit-cell]: discussing formalism and numerical implementation will be appropriate.
  • +
  • if you use SALMON for electron dynamics calculations of a large-size system, [SALMON-large-system]: that discusses massively parallel implementation utilizing spatial divisions will be appropriate.
  • +
+
+
+ + +
+
+
+ +
+ +
+

© Copyright 2017-2023, SALMON developers.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + \ No newline at end of file diff --git a/docs/en/search.html b/docs/en/search.html new file mode 100644 index 0000000..fae4dfd --- /dev/null +++ b/docs/en/search.html @@ -0,0 +1,127 @@ + + + + + + Search — SALMON software manual v.2.2.0 documentation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+ +
+
+
+
    +
  • + +
  • +
  • +
+
+
+
+
+ + + + +
+ +
+ +
+
+
+ +
+ +
+

© Copyright 2017-2023, SALMON developers.

+
+ + Built with Sphinx using a + theme + provided by Read the Docs. + + +
+
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/docs/en/searchindex.js b/docs/en/searchindex.js new file mode 100644 index 0000000..aeb4622 --- /dev/null +++ b/docs/en/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["acknowledgements","exercises","index","input_keyword_list","install_and_run","introduction","release_log","sandbox"],envversion:{"sphinx.domains.c":1,"sphinx.domains.changeset":1,"sphinx.domains.cpp":1,"sphinx.domains.javascript":1,"sphinx.domains.math":2,"sphinx.domains.python":1,"sphinx.domains.rst":1,"sphinx.domains.std":1,"sphinx.ext.intersphinx":1,sphinx:54},filenames:["acknowledgements.rst","exercises.rst","index.rst","input_keyword_list.rst","install_and_run.rst","introduction.rst","release_log.rst","sandbox.rst"],objects:{},objnames:{},objtypes:{},terms:{"000000000000000e":1,"000d0":1,"000d1":1,"002d0":1,"00d":1,"00d0":1,"00d12":1,"00d13":1,"00d6":1,"00d8":1,"010d0":1,"015d0":3,"01_c2h2_g":1,"01d0":[1,3],"020624936948345e":1,"024d0":1,"02_c2h2_lr":1,"030d0":1,"03_c2h2_rt":1,"03e":1,"04_bulksi_g":1,"04e":1,"053d0":1,"056d0":1,"05_bulksi_lr":1,"05d0":1,"06_bulksi_rt":1,"06e":1,"071d0":1,"07_bulksi_m":1,"08_c2h2_opt":1,"09_c2h2_md":1,"0d0":[1,3],"0d1":1,"0d12":1,"10000000e":1,"10147641e":1,"10198912e":1,"10253308e":1,"10256205e":1,"10537273e":1,"10689345e":1,"10701350e":1,"10736819e":1,"10738281e":1,"10d0":1,"10e":1,"10th":1,"11250289e":1,"11253992e":1,"11280947e":1,"11429104e":1,"11847131e":1,"11855231e":1,"11911770e":1,"11971541e":1,"11e":1,"12248647e":1,"125000000000000e":1,"12820952e":1,"13010987e":1,"13712105e":1,"13774845e":1,"13e":1,"13th":1,"14e":1,"15246564e":1,"15425240e":1,"15550074e":1,"156250000000000e":1,"15689467e":1,"15d0":3,"16145540e":1,"16195168e":1,"16854696e":1,"16th":1,"17261976e":1,"17733186e":1,"17745321e":1,"17937042e":1,"17983589e":1,"18067974e":1,"18250920e":1,"18683828e":1,"19447699e":1,"19537418e":1,"19835467e":1,"19e":1,"19th":1,"1d0":3,"1d10":3,"1d9":6,"1d_fourier":3,"1st":1,"2000000000000000e":1,"20049151e":1,"20087959e":1,"20304090e":1,"20384753e":1,"20597522e":1,"20616352e":1,"20d":1,"20d0":1,"20e":1,"214d0":1,"21977876e":1,"22474791e":1,"23626542e":1,"23692381e":1,"23921918e":1,"23985719e":1,"23e":1,"241d0":1,"24481043e":1,"24607217e":1,"24902126e":1,"24915590e":1,"250000000000000e":1,"25558983e":1,"25712602e":1,"25978450e":1,"25d":1,"25d0":1,"25e":1,"26042178e":1,"26d0":1,"27e":1,"28812833e":1,"28978042e":1,"28d0":1,"28e":1,"29197105e":1,"29324906e":1,"2d0":3,"3015778969794385e":1,"3015778973884847e":1,"304d0":1,"30561301e":1,"30630513e":1,"30965601e":1,"30977639e":1,"30d0":1,"31016197e":1,"31097825e":1,"31853198e":1,"32186097e":1,"32347636e":1,"32d0":1,"33012195e":1,"33652081e":1,"34109698e":1,"345d0":1,"34e":1,"35122981e":1,"36611565e":1,"36612711e":1,"36920991e":1,"36958981e":1,"36e":1,"375000000000000e":1,"3774501171245852e":1,"37839836e":1,"37937911e":1,"37990526e":1,"38296037e":1,"38431758e":1,"384d0":1,"38824129e":1,"38e":1,"39552925e":1,"39560274e":1,"39762202e":1,"3rd":1,"40018285e":1,"40063325e":1,"40587816e":1,"415d0":1,"43120486e":1,"43d0":1,"45169126e":1,"45e":1,"46276791e":1,"46548014e":1,"47142217e":1,"47397133e":1,"47534543e":1,"47687574e":1,"48483747e":1,"49184860e":1,"49478519e":1,"494d0":1,"4th":1,"50000000e":1,"50237787e":1,"50d0":1,"50e":1,"52594670e":1,"53192187e":1,"54493263e":1,"55d0":[1,3],"56465010e":1,"56521137e":1,"56740338e":1,"56e":1,"57275542e":1,"57309375e":1,"57651725e":1,"57651738e":1,"57676878e":1,"57843871e":1,"58e":1,"59093535e":1,"59222259e":1,"59493028e":1,"59496450e":1,"59735355e":1,"5d0":3,"5mm":1,"5nm":1,"601d0":1,"60455485e":1,"60722757e":1,"60775985e":1,"60e":1,"62315158e":1,"62464066e":1,"62968342e":1,"62e":1,"63738382e":1,"63805259e":1,"64072126e":1,"64e":1,"65208422e":1,"66e":1,"67211638e":1,"672d0":1,"69880308e":1,"6d0":3,"70404285e":1,"70e":1,"73343753e":1,"74600728e":1,"75588343e":1,"75d0":[1,3],"75e":1,"760d0":1,"77889300e":1,"77911390e":1,"77e":1,"78e":1,"79441825e":1,"7th":1,"80514520e":1,"80e":1,"830d0":1,"83e":1,"86779607e":1,"870d0":1,"87559727e":1,"88233132e":1,"89221538e":1,"896176689929157e":1,"896176691206812e":1,"89e":1,"8d0":3,"90623268e":1,"91933957e":1,"93e":1,"96418986e":1,"969d0":1,"97e":1,"98769124e":1,"99769538e":1,"99999d0":3,"9th":1,"case":[1,3,4],"default":[3,4],"export":4,"final":1,"function":[0,2,4,5,6],"import":[1,4,5],"int":1,"new":[0,1,3,4,6],"short":3,"static":[1,3],"switch":[1,3,4],"try":4,"while":[1,3],ASE:1,AVS:3,And:4,CCS:[3,4],DOS:[1,3],DoS:3,For:[1,3,4,6],MDS:4,Not:4,One:4,The:[1,3,4,6],Then:[1,4],There:[1,3,4],These:3,Using:[1,3,5],VPS:3,With:3,_000001:3,_epsilon:3,_exercis:1,_mag:6,_rt:3,_sigma:3,_tm:3,_trj:3,a100:4,a64fx:[4,5],a_ev_f:[1,3,6],abc:[1,3],abinit:4,abnorm:6,abondon:3,about:[1,4],abov:[1,4],abs:3,absolut:6,absorb:[1,3],absorpt:[3,5],ac_ext:1,ac_ext_i:1,ac_ext_x:1,ac_ext_z:1,ac_i:1,ac_tot:1,ac_tot_i:1,ac_tot_x:1,ac_tot_z:1,ac_x:1,ac_z:1,academeia:5,access:4,accur:1,acetylen:1,achiev:[3,4],acknowledg:2,acos2:[1,3,6],acos3:3,acos4:3,acos6:3,acos8:3,act:[1,3],activ:1,actual:4,added:[1,3,6],addit:3,address:4,adiabat:3,adjust:3,adopt:[1,3,4],advanc:[0,5],ae_shape1:1,aetr:3,affect:1,after:[1,3,4,6],again:1,agenc:0,agre:5,air:1,al_em:1,al_vec:6,alex:3,algebra:4,algorithm:3,all:[1,3,4],alloc:[3,4],almost:4,along:[1,3],alpha:1,alpha_:1,alpha_i:1,alpha_x:1,alpha_z:1,alphabet:5,alreadi:1,also:[0,1,3,4,5],although:[1,3],amount:1,amplitud:[1,3],analysi:[2,6],analyz:3,angel:5,angstrom:[1,3],angular:[1,3],ani:[1,4,5],anim:[1,3],apach:5,appear:[1,3,4],append:4,appendix:2,appli:[1,3,5],applic:[1,5],appropri:[3,4,5,7],approxim:[1,3,5],aps:5,apt:4,arbitrarili:1,arch:4,architectur:4,architecutr:4,archiv:4,area:0,around:[1,3,6],arrai:[1,3,4],arrang:1,art:[1,5],art_ene_min_em:1,art_num_em:1,art_plane_bot_em:1,art_plane_top_em:1,art_wav_max_em:1,art_wav_min_em:1,articl:1,as_shape1:1,ase_box_size_em:1,ase_ene_min_em:1,ase_num_em:1,ase_wav_max_em:1,ase_wav_min_em:1,asin2_cw:3,asin2co:3,aspect:5,assign:[3,4],associ:1,assum:[1,4],at_em:1,atom:[1,3,4,6],atomat:3,atomic_coor:[1,2],atomic_red_coor:[1,2],atsushi:5,attach:1,aug:5,augstrom:1,aunp:1,aunp_ase_with_wf:1,aunp_ase_without_wf:1,aunp_fdtd:1,aunps_art_with_wf:1,aunps_art_without_wf:1,aunps_fdtd:1,austria:5,auto:3,automat:[1,3,4],avail:[1,3,5],averag:[1,3],avs:3,avx2:4,avx512:4,avx:4,axes:3,axi:[1,3],b_x:1,b_y:1,b_z:1,back:1,background:3,balanc:4,band:[1,3,6],bandgap:[1,3],base:[0,1,2,3,4,5,6],base_directori:1,bash:4,bashrc:4,basi:5,basic:[0,1,4],becaus:1,becom:[1,3,4],been:[0,3,5,6],befor:[1,4],begen:3,begin:[1,3],behavior:1,behind:1,below:[1,3,4],bertsch2000:5,bertsch:[3,5],besid:3,better:4,between:[1,3,4],bin:[3,4],binari:3,bla:[3,4],blaha:3,blank:3,bloch:[2,3],block:4,blue:1,boku:5,book:3,born:5,bortzman:3,both:[1,3,4,5],bottl:3,bottleneck:4,bottom:[1,3],boudnari:1,bound:[1,3],boundari:[1,3,4,6],boundary_em:1,box:[1,3],bridg:4,brief:1,brillouin:[1,3],broadwel:4,browser:4,broyden:3,buffer:3,build:[2,3],built:4,bulk:1,c2h2:2,c2h2_eigen:1,c2h2_g:1,c2h2_info:1,c2h2_k:1,c2h2_md:1,c2h2_opt:1,c2h2_puls:1,c2h2_respons:1,c2h2_rt:1,c2h2_rt_energi:1,c2h2_rt_puls:1,c2h2_rt_respons:1,c2h2_trj:1,c_rp:1,calclat:1,calcul:[2,5,6,7],calculatio:1,call:4,can:[1,3,4,5],cannot:[1,3],capabl:5,carbon:1,carri:[1,3,4,5],carrier:[1,3,5],cartesian:[1,3],castro:3,caution:[1,3],cdmsi:0,cdot:[1,3],cell:[1,3,5,6,7],center:[0,3],cento:4,cep:[3,6],certain:[1,3],cfl:[1,3],cflag:4,chain:1,chang:[1,2,3,4],chapter:1,char_valu:4,charact:3,character:1,charg:3,check:3,checkpoint:3,checkpoint_gs_xxxxxx:3,checkpoint_onli:3,checkpoint_rt_xxxxxx:3,chem:3,choic:[1,3,4],choos:[3,4],chosen:[1,3],cif:6,circular:6,circularli:3,cite:2,close:[1,3],closer:4,cluster:5,cm2:6,cmakefil:4,code:[1,2,5],coeffici:1,coincid:1,collect:4,collis:[1,3],column:[1,3],columnn:1,com:[1,5,6],comamnd:4,combin:[3,4,6],come:1,comm:5,command:4,commandlin:4,comment:3,common:1,commun:[3,5],comp:5,compar:1,compil:5,complet:[1,3,4,6],complex:1,complianc:5,compon:[1,3],compos:[1,4],comput:[0,1,3,4,5],condit:[1,3,4,5,6],conditon:4,conduct:[1,3,6],conductib:3,conductor:3,configur:[3,5],confirm:[3,4],confjug:3,conjug:3,connect:[3,4],consecut:3,conserv:[3,4,5],consid:1,consist:[1,3],constant:[1,3],constraint:3,consum:1,consumpt:3,contain:[1,3],content:4,continu:3,contribut:5,control:[1,2,4],conveni:4,converg:1,convers:1,convert:3,convrg_opt_fmax:1,coodin:1,coopi:1,coordin:[1,3,4,6],copi:[1,5],copumut:1,copyright:5,core:[0,5],corner:4,corpor:5,correct:3,corrector:3,correl:[1,3],correspond:[1,3],corss:1,cos:[1,3],cosin:3,cost:[3,4],coulomb:3,counter:3,coupl:[1,3,5,6],cover:[1,4],cpu:[4,5],crai:4,creat:[1,4],creation:[0,4],crest:0,criterion:1,cross:[3,4],crystal:1,crystallin:[2,3,5,7],csv:3,cube:[1,3,6],cubic:1,cubiod:1,cuboid:[1,3],cuda:4,cultur:0,current:[1,3,4,5,6],curv:1,cut:3,cutoff:3,cycl:1,dat:[1,3],data:[1,3,4,6],data_for_restart:[1,3],date:4,ddm_e:1,ddm_e_i:1,ddm_e_x:1,ddm_e_z:1,debian:4,debug:4,decid:3,decompos:3,decomposit:6,decreas:1,defenit:1,defin:[1,3,4,6],definit:[1,3,6],degre:3,dejean:3,delai:3,delta:1,delta_:1,densiti:[1,2,3,5,6],depend:[1,2,3,4,5],deprec:3,describ:[1,2,3,4,5],descript:[1,3,4,5,7],detail:[1,2,3,4],detector:1,determin:[1,3,4],develop:[0,1,2,4],devic:0,devid:3,df_x:1,df_y:1,df_z:1,dft:[1,3,4],dft_k_expand:3,dft_md:[3,4],diagon:[3,4],diamet:1,diamond:1,did:1,dielectr:[3,5,6],differ:[1,3,5],dimens:[1,3],dimension:[1,3],diment:3,dipol:[1,3],dirac:[1,3],direct:[1,3,4],directori:[1,3,4,6],dirichlet:3,disabl:[1,3,4],discontinu:3,discret:[1,3,4],discrib:1,discuss:[5,7],displai:1,distort:1,distribut:[1,3,5],divid:[3,4,5],divis:[5,7],dm_x:1,dm_y:1,dm_z:1,dng:3,dns:[1,3],docompos:3,document:1,doe:[1,3],doi:[1,5],dojo:4,domain:[1,3,4,5],don:4,done:[1,4],dopil:1,dos:1,down:3,download:[1,2],dragon:4,drastic:1,drawn:1,drho:3,drude:[1,3,5],dt_em:1,due:[1,3],durat:[1,3],dure:[1,3],dynam:[2,3,4,5,7],e_0:1,e_ab:1,e_em:1,e_ext:1,e_ext_i:1,e_ext_x:1,e_ext_z:1,e_i:1,e_inc:1,e_inc_i:1,e_inc_x:1,e_inc_z:1,e_ref:1,e_ref_i:1,e_ref_x:1,e_ref_z:1,e_tot:1,e_tot_i:1,e_tot_x:1,e_tot_z:1,e_tra:1,e_tra_i:1,e_tra_x:1,e_tra_z:1,e_work:1,e_x:1,e_z:1,eab:1,each:[1,3,4],eall0:1,eall:1,ecos2:[1,3],edg:3,edit:4,educ:0,effect:3,effici:[3,4,5],ehrenfest:[2,3],eigen:1,eigenenergi:1,eigenexa:[3,4],eigenst:3,eigenvalu:[1,3],eight:1,either:[1,3,4,5],ek_dir1:1,electr:[3,5,6],electrmagnet:3,electromagnet:[2,3,5],electron:[2,3,4,5,6,7],element:[1,3,4],elf:1,ellipsoid:1,ellipsoidari:3,els:4,emfield:[1,2,6],emploi:5,emvelop:1,enabl:[3,4],end:[1,3,4,6,7],energi:[1,3,5,6],energy1:3,energy2:3,energy3:3,enforc:3,engin:5,ensembl:1,enter:4,entir:4,envelop:[1,3,6],environ:1,epdir_re1:1,eps:1,eps_i:1,eps_x:1,eps_z:1,epsilon:[1,3],epsilon_:1,epsilon_em:1,epsilon_i:1,equal:[3,4],equat:[2,3,4,5,6],equip:4,equival:1,error:[3,4,6],esp:1,espresso:4,etc:3,evalu:3,even:[1,3,4],eventu:3,everi:[1,3,4],evolut:[1,3,5],evolv:3,ewald:2,exact:3,examin:[3,4],exampl:[1,3,4,7],exapml:4,exce:3,excecut:3,except:[1,5],excercis:1,exchang:[1,3],excit:[1,3,5],execut:[1,4],exercis:[2,4],exercise_01_c2h2_g:1,exercise_02_c2h2_lr:1,exercise_03_c2h2_rt:1,exercise_04_bulksi_g:1,exercise_05_bulksi_lr:1,exercise_06_bulksi_rt:1,exercise_07_bulksi_multiscal:1,exercise_08_c2h2_opt:1,exercise_:1,exercise_x1_bulksi_sbe_gs_rt:1,exercise_x2_bulksi_bloch_gs_m:1,exercise_zip_fil:1,exp:3,expain:1,expans:[3,6],expansioin:3,experiment:1,explain:[1,3,4],explan:[1,4],explicit:4,explicitli:4,explor:3,express:[1,5],ext:1,extend:1,extens:4,extern:[1,5,6],extinct:3,extract:4,f_ld:1,fabien:3,factor:[3,4],fail:[3,4],fast:4,fault:6,fdtd:[2,3],fdtd_make_figani:[1,3],fdtd_make_shap:[1,3],fdtddim:1,feasibl:[3,4],featur:[1,2],fedora:4,femtosecond:1,fermi:3,few:[1,3],fflag:4,fft:4,ffte:[3,4],fftw:3,fhi:4,field:[2,3,5,6],fiexd:6,fifth:3,figur:[1,3],file:[2,3,5,6],file_input1:6,file_pseudo:1,filenam:[1,4],fileout:4,filesystem:4,film:3,filter:3,find:[1,4],finish:1,finit:[1,3,5],first:[1,2,3,4,5],five:3,fix:[1,3],fixstar:5,flag:4,flexiblil:3,floss:5,fly:4,follow:[1,3,4,5,6],forc:[1,3],form:3,formal:[3,5,7],format:[1,3,4,6],former:2,formula:3,fortran90:4,fortran:[4,5],found:[1,4],four:3,fourier:[1,3,4],fourth:3,frac:1,free:1,frequenc:[1,3],fritz:4,from:[1,3,5,6],front:1,fugaku:4,fujitsu:[4,5],fulfil:3,func1:7,func2:7,functioon:1,fundament:1,furthermor:1,futur:3,fwhm:3,fx1000:4,fx100:[4,5],fx700:4,gamma:[1,3],gamma_ld:1,gap:[1,3],gauss10:3,gauss2:3,gauss3:3,gauss4:3,gauss5:3,gauss:3,gaussian:3,gcc:4,gceed:5,gener:[0,1,3,4,6],geometri:[2,3],georg:5,get:[2,4],gfortran:4,gga:[3,4],gga_fhi:4,github:[2,6],give:[1,3,4],given:[1,3,4],gnumakefil:4,goe:1,good:5,govern:5,gradient:3,gram:3,grand:0,graph:1,greater:4,grid:[1,3,4,5],grid_sequenti:[3,4],ground:[3,4,5],group:[1,4,5],guarante:1,guid:4,h_rp:1,h_x:1,h_y:1,h_z:1,haber:4,half:3,hamiltoian:3,hamiltoinan:3,hamiltonian:3,hand:3,handl:[1,3],happen:6,harm:3,harmon:1,hartre:[3,6],has:[0,1,3,4,5,6],haswel:4,hat:1,have:[1,3,4,6],hbar:1,header:7,height:3,help:[1,4],here:3,hermit:3,high:[0,1,3,4],higher:3,highest:[1,3],hill:3,hirokawa2016:5,hirokawa:5,histori:2,hokkaido:5,homo:1,hoover:3,houston:3,how:[1,2,3],howev:[1,3,4],hpc:4,hspace:1,html:[1,3,4],http:[1,3,4,5,6],hx_m:1,hy_m:[1,3],hybrid:3,hydrogen:1,hz_m:1,i_wcm2_1:1,iatom:3,ichi:5,icomm_i:4,icomm_ko:4,icomm_o:4,icomm_r:4,icomm_x:4,icomm_xi:4,icomm_z:4,id_:1,ieee:5,ignor:3,iida:5,iiz:1,ikr:3,illustr:1,imag:[1,3],imaginari:[1,3,6],imagnary_potential_dr:3,immedi:1,implement:[1,3,4,5,7],impli:5,implicit:7,improv:[3,6],impuls:[1,3,5],imust:1,inaccuraci:3,inc:5,incid:[3,6],includ:[1,3,4,5,6],incompat:3,increas:[1,3],incud:1,independ:3,index:[1,3,5],indic:[1,3,4],induc:[1,2,5],industri:0,inf_:1,inform:[1,3],initi:[1,3,5,6],initio:[1,2,3,5],innov:0,inp:[1,4],input:2,input_vari:4,inputfil:[1,4],insid:[1,3,4],instal:[1,2,7],installation_directori:4,instantan:[3,5],instead:[3,4],institut:[0,4,5],instruct:[1,4],insul:3,int_valu:4,int_value1:4,int_value2:4,int_value3:4,int_x:1,integ:[1,3,7],integr:[1,3],intel:[4,5],intens:[1,3,5],inter:3,interact:[1,3,5],interest:[1,4],intern:5,interpol:3,interv:[1,3],intra:3,introduc:[1,4],introduct:2,invalid:6,ion:[1,3],ionic:3,iperiod:4,irradi:1,irrespect:3,isabella:5,ishimura:5,isol:[2,3,4,5,6],isotrop:1,issp:4,issu:[0,6],iter:[1,3],itervh:1,ito:5,its:[1,4],ivi:4,iwata:5,izatom:1,j_em:1,j_z:1,japan:[0,5],jass:5,je_micro_:3,jellium:2,jem_i:1,jem_x:1,jem_z:1,jm_x:1,jm_y:1,jm_z:1,job:4,john:3,journal:5,jpmjcr16n5:0,judg:1,jun:5,just:6,katsuyuki:5,kazuhiro:5,kazuya:5,keep:3,kelvin:3,kenji:5,kernel:4,keyword:[1,2,6],kgrid:[1,2],kick:5,kind:[4,5],kinet:1,knc:4,knight:[4,5],knl:4,knowledg:4,known:3,kobe:5,kohn:[1,5],kyung:5,land:[4,5],langl:3,languag:5,lapack:[4,5],larg:[2,3,5,7],larger:[1,3,4],laser:5,last:3,later:4,latest:3,latter:[1,3],lattic:3,law:5,layer:3,lda:[1,3,4],lda_c_pz:3,lda_fhi:4,lda_x:3,ldflag:4,learn:1,least:[1,4],lee:5,left:[1,3],leftmost:3,length:[1,3],less:3,lett:3,level:[3,4],lfftw3:4,lfftw3_mpi:4,librari:[3,5],libxc:[1,3,4],licens:2,light:[2,5],like:1,limit:[3,4,5],line:[1,3,4],linear:[1,3,4,5],linearli:1,link:[1,3,4,5],linker:4,linux:[1,5],list:[1,2,4,6],lloc_p:1,load:3,local:[1,3,4,5,6],locat:[1,3],log:3,logarithm:1,logic:4,login:4,longitudin:3,look:1,loop:[1,3],lorentz:[1,3,5],lorentzian:3,low:[3,4],lower:3,lowest:[1,3],lumo:1,lustr:4,m000001:1,m000008:1,machin:4,macro:1,macropoint:1,macroscop:[1,3],made:[1,3],mag_micro_:3,magnet:[1,3,6],magnitud:[1,3],mai:[1,2,3,4,5],maiku:5,main:[1,3],major:[3,4],make:[1,3,4,5],mandatori:1,mani:[1,4,5],manual:[1,3],map:4,marqu:3,masashi:5,mass:3,massiv:[1,5,7],match:3,materi:[0,1,3,4],math:4,mathbf:[1,3],matric:3,matrix:[1,3],matter:[1,2,5],maximum:[1,3],maxwel:[2,5,6],maxwell_sb:[1,3,6],maxwell_tddft:3,mean:[1,3],mechan:5,media:[1,3],media_num:1,media_typ:1,medium:1,memori:3,messag:4,meta:[3,4],metal:[1,3],metasurfac:5,method:[1,3,5],method_poisson:6,method_wf_distributor:[4,6],mgga:3,microscop:[1,3,5],middlepoint:3,midpoint:3,mimic:3,min:5,minimum:1,ministri:0,minor:2,minu:[1,3],mistakenli:6,mitsuharu:5,mix:3,mkdir:4,mkl:4,mod:[3,4],mode:[3,4,5],model:[1,3,5],modif:3,modifi:[1,3,4],modul:3,molecul:[2,3,5],molecular:[2,3,5],moment:[1,3,6],momentum:[1,3],monitor:1,monoton:1,more:[1,3,4,5],most:[1,3,4],motion:1,move:[3,4],mpi:[1,3,5],mpiexec:[1,4],mpiicc:4,mpiifort:4,much:[1,4],multi:[4,5],multi_scale_maxwell_tddft:[1,3,4],multidimension:1,multipl:3,multipli:[1,3],multipol:[3,6],multiprocess:[1,4],multiscal:[2,5],must:[1,3,4],mxxxxxx:1,n_s:1,nabla:[1,3],nakatsukasa:3,name:[1,3,4,6],namelist1:4,namelist2:4,namelist:4,nano:3,nanocylind:1,nanomet:5,nanoscal:5,nanosci:[1,2,5],nanospher:1,nanostructur:5,nation:[0,5],natom:1,nblock_wf_distribut:4,nearlist:3,necessari:[1,2,3],neck:3,need:[1,3,4],neg:[1,3],neighbor:3,nelec:[1,6],nelem:1,nenergi:1,netlib:4,neutral:3,newest:4,newtonian:1,next:[0,1,3,4],nobusada:5,noda2014:5,noda2019:5,noda:5,node:4,nois:6,non:[3,6],noncollinear:[3,6],none:[1,3,7],nonlinear:1,nonloc:1,nonorthogon:3,norm:[3,4,5],norm_pot:3,norm_rho:3,norm_rho_dng:3,normal:[1,3],nose:3,note:[1,2,3,4],npj:3,nproc:[1,4],nproc_k:[1,4],nproc_ob:[1,4],nproc_rgrid:[1,4],nscf:1,nstate:1,nt_em:1,num_kgrid:1,num_rgrid:[1,4],num_rgrid_em:1,number:[0,1,3,4,5,6],numer:[3,4,5,7],nve:[1,3],nvhpc:4,nvidia:4,nvt:[1,3],nx_m:1,nxvac_m:1,nxvacl_m:1,nxvacr_m:1,ny_m:1,nz_m:1,object:[1,4],obs0_info:1,obs1_at_point_rt:1,obs_loc_em:1,obs_num_em:1,obs_plane_ene_em:1,observ:[1,3],obtain:[1,3,4,5],occ:1,occup:[1,3,6],occupi:[1,3],occur:[4,6],odd:6,off:[1,3],often:4,ofth:1,old:4,older:4,omega1:1,omega:[1,3],omega_ld:1,omega_p_ld:1,onc:3,one:[1,3,4,5],onli:[1,3,4],open:[2,3,5],openacc:4,openmp:[1,3,4],openmx:4,opensus:4,oper:[3,4],opposit:1,opt:[1,2],optic:[0,1,2,3,5],optim:[2,3,5],option:[1,3,6],orbit:[1,3,4,5,6],orbital_sequenti:[3,4],order:[3,4,5],org:[1,3,4,5],ori_:1,origin:[1,3],orthogon:[3,6],orthonorm:3,oscil:[1,3,5],ost:4,other:[1,3,4],otherwis:[1,3],otob:[3,5],our:[1,4],out:[1,3,4,5],out_current_decomposed_step:6,out_gs_sgm_eps_mu_nu:6,out_gs_sgm_eps_width:6,out_magnetization_step:6,out_micro_je_step:6,outdns_dns_ac_je_step:3,output:3,over:1,overlap:3,overview:2,own:[1,4],ozaki:4,p_z:1,page:4,papamet:3,paper:[3,5],parallel:[1,2,4,5,6,7],paramet:[1,3],part:[1,3,4,6],partial:1,particl:[1,3],particular:[1,5],path:4,pdo:3,pdos1:1,pdos2:1,peak:[1,3],pec:3,per:[1,3,4],perdew:[1,3],perfect:3,perfectli:3,perform:[0,1,3],period:[2,3,4,5,6],permeabl:3,permiss:5,permitt:[1,3],perturb:[1,3],peter:3,phase:[1,3],phi:5,phi_cep1:1,phi_i:1,photon:[0,1,3],phy:[1,3,5],physic:[1,5],physicali:1,physrevb:5,pii:1,place:[1,5],plan:3,planck:[1,3],plane:[1,3],plasma:[1,3],plasmal:1,platform:[4,5],pleas:[1,5],plot:1,plu:[1,3],pml:3,point:[1,3,4,5,6],poisit:1,poisson:[1,2,4,6],polar:[1,3,6],polariz:5,pole:[1,3],pole_num_ld:1,posit:[1,3,4],possibl:5,post:0,pot_dng:3,potenti:[1,3,4,6],power:1,ppn:4,practic:0,prb:3,pre:3,precondit:3,precondition:3,predictor:3,prefer:3,prefix:[1,3,4],prepar:[1,3,4,5],prerequisit:2,present:[1,3],prevatomicdata:4,prevent:3,previou:[1,3,4],prime:4,primit:3,principl:2,print:[1,3,6],prioriti:[0,3],problem:[3,4],proce:4,procedur:4,process:[1,2,3,5],process_alloc:4,processor:[4,5],product:3,profil:1,program:[0,1,3,4,5],project:[1,3,5,6],projection_opt:6,projector:[1,3],prometech:5,propag:[2,5],properti:[0,1,3,5],provid:[1,3,4],ps_c_ky_n:1,ps_h_ky_n:1,ps_si_ky_n:1,pseodupotenti:1,pseudo:[1,2,4],pseudoopotenti:1,pseudopoenti:1,pseudopootenti:1,pseudopotenti:[1,3,5],pseudpotenti:4,psi:3,psi_i:1,psi_ob1:1,psi_ob2:1,psp8:4,psp:4,psps_abinit:4,publish:5,pulai:3,puls:[3,5,6],purpos:4,put:3,pw1:4,pw2:4,pw3:4,px1:4,px2:4,px3:4,python:4,pzm:3,quantiti:[1,3],quantum:[0,4,5],queri:4,quit:[1,3],r_0:3,radian:3,radiat:3,radii:3,radiolog:[0,5],radiu:3,random:3,rang:[1,3],rangl:3,rapid:1,rata:3,rate:[3,6],rather:1,ratio:3,read:[1,3,6],read_dns_cub:3,reader:4,real8_valu:4,real:[3,4,5,7],realiz:4,reason:3,rebuild:4,recommend:[1,3,4],red:1,redistribut:3,reduc:[1,3,4],ref:5,refer:1,reflec:1,reflect:3,region:[1,3],rel:[3,4],relat:[1,3,4,6],releas:[2,4],relev:[1,4],reload:4,remain:4,rememb:1,remov:[3,6],renam:1,replac:[3,4],repli:4,repres:3,represent:1,repsect:3,request:4,requir:[1,3,4,5],research:0,reset:3,resolut:1,reson:1,respect:[1,3],respons:[1,2,3,5],restart:[1,3],restrict:[3,4],result:[1,3],resut:3,rev:[1,3,5],revers:3,review:5,rgrid:[1,2],rho:3,rho_dn:3,rho_g:3,rho_i:1,rho_inout:3,rho_it:3,right:[1,3],rightarrow:1,rightmost:3,riken:[3,4],routin:[3,4],row:[1,3],rubio:[3,5],rule:4,run:[1,2,5,7],s0010465518303412:1,s_parallel_info:4,salmon2:6,salmon:[0,1,3,6,7],salmon_installation_directori:4,same:[1,3,4],sampl:[1,3,4],sandi:4,satisfi:[1,3,4],sato2014jass:5,sato:5,save:3,sbe:[2,6],sbe_maxwel:1,scalabl:[1,2,4,5],scalapack:[3,4],scalar:1,scale:[1,2,3,5],scatter:3,scf:[1,2],schmidt:3,schumidt:3,scienc:[0,1,5],sciencedirect:1,scientif:[0,4,5],sdk:4,search:4,second:[1,3],section:3,see:[1,3,4,5],seed:3,seen:[1,6],segment:6,seitz:3,select:3,self:3,semiconductor:[2,3],send:4,separ:[3,4],serial:3,server:4,set:[1,3,4],set_ini_veloc:3,settl:4,sever:[1,3,4],sham:[1,5],shape:[3,4],shape_fil:1,shaper:1,share:1,shell:[3,4],shift:[1,3],shinohara:5,should:[1,3,4],show:[1,3,5],shown:[1,4],shunsuk:5,shutdown:3,si_ac_yyyyyi:1,si_eigen:1,si_g:1,si_info:1,si_k:1,si_m:1,si_puls:1,si_respons:1,si_rp:1,si_rt:1,si_rt_ac:1,si_rt_energi:1,si_rt_multiscal:1,si_rt_puls:1,si_rt_respons:1,si_sbe_ms_1d_film:1,si_sbe_ms_2d_cylind:1,si_sbe_rt:1,si_tm:1,si_wav:1,side:[1,3],sigma:[1,3],sigma_:1,sigma_a:1,sigma_i:1,sigma_x:1,sigma_z:1,silicon:2,similar:1,simpl:[3,4],simplest:4,simpli:3,simul:[2,3,4,5],simultan:[1,3,5],sin:[1,3],sinc:[1,3],singl:[1,3],single_scale_maxwell_tddft:[3,4],singlescal:2,site:4,situat:[4,5],six:4,size:[1,3,4,5,7],skylak:4,slab:3,slice:[3,4,6],small:[1,3,6],smaller:1,smear:3,social:0,soft:5,softwar:[2,5],solid:[2,3,5,7],solut:1,solv:[1,3,4,5],solver:6,some:[1,3,4],someth:1,sometim:6,sooth:3,sourc:[1,2,3,5],source1:3,source2:3,source_loc1:1,space:[1,3,4,5],spatial:[1,3,4,5,7],special:4,specif:[3,5],specifi:[1,3,6],spectra:[1,3],spectral:[1,3],spectrum:[1,5],spesifi:3,sphere:3,spheric:3,spici:3,spiec:3,spin:[1,4,6],spin_curr_micro_:3,sport:0,squar:3,src:4,ssl:4,stabl:3,standard:[1,3,4],start:[2,3,4],state:[3,4,5],stdin:4,stdout:3,stencil:3,step:[1,3,4],step_initial_mix_zero:3,step_update_p:1,still:1,storag:4,store:[1,3,4],strateg:0,strength:[1,3,5],strong:[1,5],structur:[1,4],submiss:4,subroutin:[4,7],subspac:[3,4],success:4,sudo:4,suggest:3,sugiyama:5,suitabl:4,sum:[1,3],sum_:1,sum_i:1,sum_ix:3,summar:[1,4],supercel:3,supercomput:[1,4,5],superposit:3,suport:6,support:[0,3,6],suppress:3,surfac:[1,3],surround:[1,3],sym:3,symbol:1,symmetr:[3,5],symmetri:[3,6],symposium:5,sysnam:1,sysname_current_decompos:3,sysname_eigen:1,sysname_intra_curr:3,sysname_k:1,sysname_mag_decomposed_rt:3,sysname_nex:3,sysname_ovlp:[3,6],sysname_rt:3,sysname_rt_spin:3,sysname_spin_current_decompos:3,sysname_tm:1,system:[1,2,5,6,7],tabl:3,tackl:0,taisuk:5,takashi:5,take:[1,5],takeuchi:5,tancogn:3,tar:4,target:[3,4],taylor:3,tbmbj:3,tddft:[2,3,4,5,6],tddft_puls:[1,3,4],tddft_respons:[1,3,4],technolog:[0,5],temperatur:[1,6],temperature0_ion_k:1,temperature_ion:1,templat:1,temporari:4,ten:[3,5],tensol:3,term:6,tesla:4,test:[3,4,5],text:3,tgrid:[1,2],than:[1,3,4,5],thddeori:3,thei:[1,3,4],them:[1,4],theoret:1,theori:[1,2,4,5,6],therefor:[1,4],theurich:3,thi:[1,3,4,5],thick:[1,3],third:3,those:[1,3],though:[1,3],thread:1,three:[1,3,4],threshold:1,threshold_project:6,through:4,thu:[1,5],tild:1,time:[2,3,4,5],timer:3,tion:1,tip:[1,2],tofu:4,togeth:3,tokyo:[4,5],tomohito:5,tong:5,tool:4,top:[1,3,4],total:[1,3,6],toward:5,trajectori:1,tran:3,transfer:5,transform:[1,3,4],transit:[1,3,6],transmiss:3,transmit:1,transpar:3,transvers:3,treat:[1,3],treatment:3,trial:2,troubleshoot:2,tsukuba:[0,5],turn:3,tutori:1,tvh:3,tw1:1,two:[1,3,4,5],typ_:1,type:[1,3,4],type_media:3,typic:[3,4],ubuntu:4,uemoto:5,ultrashort:5,unchang:3,under:[0,3,4,5],unifi:[4,5],uniform:[1,6],unintend:6,uniqu:5,unit:[1,2,5,6,7],unit_length:3,unit_system:[1,6],univ:5,univers:[0,5],unix:1,unless:5,unoccupi:1,unpack:4,unpolar:[3,4,6],until:6,updat:[1,3],upf:[3,4],upon:0,upper:[1,3],url:[4,5],usabl:[3,4],usag:5,use:[1,3,4,5,7],used:[1,3,4,5],useful:[1,4],user:[1,3,6],uses:[3,4],using:[0,1,3,5,6],usual:[1,3,4],util:[0,1,3,4,5,7],v100:4,v_2_0_1:1,vacumm:1,vacuum:[1,3],valenc:3,valiabl:3,valu:[1,3,4,6],vanishi:3,variabl:[1,3,6],variable1:4,variable2:4,variou:[1,3,5],vector:[1,3],vectorpotenti:3,veloc:[1,3],ver:[4,6],veri:[1,3,4],version:[1,3,4,5],vert:1,virtual:3,visibl:1,visual:1,vlocal:3,vlocal_it:3,vol:1,volt:1,volum:[1,3],volumetr:3,voxel:3,vps:4,vps_local:3,vps_pao2019:4,vtk:3,vxc:3,wai:[1,3,4],wall:3,wang:3,want:[1,4],warranti:5,water:1,wave:[1,3,5],wave_input:1,waveform:1,wavefunct:[3,6],wavelength:[1,3],wavenumb:3,weak:[1,3,5,6],webmanu:1,websit:[3,4,7],weight:[1,3],welcom:1,well:[1,3,5],were:[3,4],wfn:3,wget:4,when:[1,3,4,5,6],where:[1,3,4],wherea:1,whether:[1,3,4],which:[1,3,4,5],whose:[1,3],width:[1,3],wien:5,wigner:3,window:[1,3],within:3,without:[1,3,4,5],work:[1,3,4],workshop:5,world:4,write:[1,3,5],written:[1,3,4],wrong:6,wrriten:1,www:[1,3,4,5],x86:5,x86_64:4,x_i:1,xavx:4,xeon:5,xiao:5,xxx:[1,3],xxxxxx:1,xyz:[1,3],yabana1996:5,yabana2012:5,yabana:[3,5],yamada:[3,5],yamaguchi:5,yasushi:5,yet:1,yield:6,yn_eigenexa:4,yn_ffte:[4,6],yn_fftw:6,yn_fix_func:6,yn_make_shap:1,yn_md:1,yn_obs_plane_em:1,yn_opt:1,yn_out_current_decompos:6,yn_out_dn:1,yn_out_do:1,yn_out_elf:1,yn_out_gs_sgm_ep:6,yn_out_intraband_curr:6,yn_out_micro_j:6,yn_out_pdo:1,yn_out_psi:1,yn_out_tm:[1,6],yn_output_shap:1,yn_period:[1,6],yn_periodoc:3,yn_scalapack:4,yn_set_ini_veloc:1,yn_spinorbit:6,you:[1,3,4,5,7],your:[1,4,5],yourself:4,yue:3,yuki:5,yum:4,yuta:5,yyn:3,yyyyyi:1,zero:[3,6],zip:1,zone:[1,3],zunger:[1,3],zxvf:4,zypper:4},titles:["Acknowledgements","Exercises","Manual for SALMON-v.2.2.0","List of input keywords","Install and Run","Introduction","Release History","Sandbox"],titleterms:{"function":[1,3],absorbing_boundari:3,absorpt:1,acceler:4,acknowledg:0,addit:[1,4],ae_shape1:3,ae_shape2:3,aewald:3,al_em:3,al_sb:3,al_vec1:3,al_vec2:3,al_vec3:3,al_vec_1_sb:3,al_vec_2_sb:3,al_vec_3_sb:3,alibc:3,alibx:3,alibxc:3,alpha_mask:3,alpha_mb:3,alpha_pr:3,analysi:[1,3],appendix:4,arbitrari:1,art_ene_max_em:3,art_ene_min_em:3,art_num_em:3,art_plane_bot_em:3,art_plane_top_em:3,art_smedia_id_em:3,art_wav_max_em:3,art_wav_min_em:3,ase_box_cent_em:3,ase_box_size_em:3,ase_ene_max_em:3,ase_ene_min_em:3,ase_num_em:3,ase_smedia_id_em:3,ase_wav_max_em:3,ase_wav_min_em:3,at_em:3,atomic_coor:3,atomic_red_coor:3,avail:4,base_directori:3,beta_p:3,binari:4,bloch:1,bloch_k_em:3,bloch_real_imag_em:3,boundary_em:3,bug:6,build:4,c2h2:1,calcul:[1,3,4],chang:6,check:4,checkpoint_interv:3,citat:[5,7],cite:5,cmake:4,cname:3,code:[3,4,7],commun:4,compil:4,configur:4,control:3,conv_gap_mix_zero:3,converg:3,convrg_opt_fmax:3,cood_dipole_sourc:3,cross:1,crystallin:1,current_openmp_mod:3,cutoff_g2_emfield:3,cutoff_g:3,cutoff_r:3,cutoff_r_buff:3,cval:3,detail:6,develop:5,dielectr:1,directory_read_data:3,distribut:4,dl_em:3,download:4,dt_em:3,dynam:1,e_amplitude1:3,e_amplitude2:3,e_impuls:3,ehrenfest:1,eigenvalu:4,ek_dir1:3,ek_dir2:3,electr:1,electromagnet:1,electron:1,emfield:3,ensembl:3,environ:4,epdir_im1:3,epdir_im2:3,epdir_re1:3,epdir_re2:3,epsilon_em:3,equat:1,eta_mask:3,ewald:3,execus:1,exercis:1,extinct:1,f_ld:3,fdtd:1,fdtddim:3,featur:5,fftw:4,field:1,file:[1,4],file_atom_coor:3,file_atom_red_coor:3,file_ini_veloc:3,file_input1:3,file_kw:3,file_pseudo:3,film:1,film_thick:3,fix:6,force_openmp_mod:3,format_perflog:3,format_voxel_data:3,former:5,from:4,gamma_ld:3,gamma_mask:3,gbeam_sigma_line1:3,gbeam_sigma_line2:3,gbeam_sigma_plane1:3,gbeam_sigma_plane2:3,geometri:1,get:1,github:5,gnu:4,gpu:4,gram_schmidt_interv:3,ground:1,hartre:4,highlight:7,histori:6,how:5,hx_m:3,hz_m:3,i_wcm2_1:3,i_wcm2_2:3,id_:3,imag:7,imaginary_potential_dr:3,imaginary_potential_w0:3,improv:4,incid:1,inf_:3,input:[1,3,4,6],instal:4,introduct:5,iseed_number_chang:3,isol:1,izatom:3,jellium:3,keyword:3,kgrid:3,larg:4,laser:1,layout_multipol:3,librari:4,licens:5,light:1,link:7,linux:4,list:[3,5,7],lloc_p:3,lmax_multipol:3,lmax_p:3,makefil:4,manag:4,manual:[2,4],max_step_len_adjust:3,maxwel:[1,3],media_id_pml:3,media_id_source1:3,media_id_source2:3,media_num:3,media_typ:3,mesh:4,metasurfac:1,method_init_dens:3,method_init_wf:3,method_min:3,method_mix:3,method_poisson:3,method_singlescal:3,method_wf_distributor:3,minor:6,mixrat:3,model:6,molecul:1,molecular:1,mpi:4,mu_em:3,multiscal:[1,3],n_hamil:3,n_s:3,nano:1,nanoparticl:1,nanostructur:1,natom:3,nblock_wf_distribut:3,ncg:3,ncg_init:3,necessari:4,nelec:3,nelec_sb:3,nelec_spin:3,nelem:3,nenergi:3,network:4,newald:3,nk_sbe:3,nmemory_mb:3,nmemory_p:3,nopt:3,note:6,nproc_k:3,nproc_ob:3,nproc_rgrid:3,nscf:3,nscf_init_mix_zero:3,nscf_init_no_diagon:3,nscf_init_redistribut:3,nsplit_voxel_data:3,nstate:3,nstate_sb:3,nt_em:3,num_dipole_sourc:3,num_jm:3,num_kgrid:3,num_multipole_xyz:3,num_rgrid:3,num_rgrid_em:3,num_sb:3,nx_m:3,nxvac_m:3,nxvacl_m:3,nxvacr_m:3,ny_m:3,nyvac_m:3,nz_m:3,nzvac_m:3,obs_loc_em:3,obs_num_em:3,obs_plane_ene_em:3,obs_samp_em:3,omega1:3,omega2:3,omega_ld:3,omega_p_ld:3,opt:3,optim:1,option:4,ori_:3,out_current_decomposed_step:3,out_dns_ac_je_step:3,out_dns_rt_step:3,out_dns_trans_energi:3,out_dos_end:3,out_dos_funct:3,out_dos_nenergi:3,out_dos_start:3,out_dos_width:3,out_elf_rt_step:3,out_estatic_rt_step:3,out_gs_sgm_eps_mu_nu:3,out_gs_sgm_eps_width:3,out_micro_je_step:3,out_ms_step:3,out_projection_step:3,out_rt_energy_step:3,out_rt_spin_step:3,out_rvf_rt_step:3,output:[1,6],overview:5,packag:4,parallel:3,perform:4,period:1,phi_cep1:3,phi_cep2:3,photoabsorpt:1,poisson:3,polariz:1,pole_num_ld:3,pre:4,prerequisit:4,process:4,process_alloc:3,projection_opt:3,propag:[1,3],pseudo:3,pseudopotenti:4,puls:1,rad_dipole_diel:3,rate:1,read:4,read_gs_restart_data:3,real:1,reflect:1,releas:6,rgrid:3,rot_:3,rot_typ:3,rs_bohr_jm:3,run:4,salmon:[2,4,5],sandbox:7,sbe:[1,3],scale:4,scatter:1,scf:3,script:4,section:1,semiconductor:1,shape:1,shape_fil:3,shape_file_jm:3,sigma_em:3,silicon:1,simul:1,singl:4,singlescal:3,solid:1,solver:4,sourc:4,source_loc1:3,source_loc2:3,specif:4,specifi:4,sphere_loc_jm:3,sphere_nion_jm:3,spin:3,start:1,state:1,stencil_openmp_mod:3,step_update_p:3,step_velocity_sc:3,suggest:5,syntax:7,sysnam:3,sysname_sb:3,system:[3,4],t1_start:3,t1_t2:3,tabl:7,tddft:1,temperatur:3,temperature0_ion_k:3,temperature_k:3,tgrid:3,theori:3,thermostat:3,thermostat_tau:3,thin:1,threshold:3,threshold_cg:3,threshold_project:3,through:1,time:1,time_shutdown:3,tip:4,toru:4,trans_longi:3,transmiss:1,trial:[1,3],troubleshoot:4,tw1:3,tw2:3,typ_:3,under:1,unit:3,unit_system:3,update_mixing_ratio:3,user:4,using:4,variabl:4,vec_dipole_sourc:3,wall_height:3,wall_width:3,wave_input:3,wavefunct:4,write:4,write_gs_restart_data:3,xname:3,yn_auto_mix:3,yn_charge_neutral_jm:3,yn_copy_i:3,yn_copy_x:3,yn_copy_z:3,yn_diagonalization_red_mem:3,yn_eigenexa:3,yn_ffte:3,yn_fftw:3,yn_fix_func:3,yn_gramschmidt_bla:3,yn_jm:3,yn_lr_w0_correct:3,yn_make_shap:3,yn_md:3,yn_obs_plane_em:3,yn_obs_plane_integral_em:3,yn_opt:3,yn_out_current_decompos:3,yn_out_dn:3,yn_out_dns_ac_j:3,yn_out_dns_rt:3,yn_out_dns_tran:3,yn_out_do:3,yn_out_dos_set_fe_origin:3,yn_out_elf:3,yn_out_elf_rt:3,yn_out_estatic_rt:3,yn_out_gs_sgm_ep:3,yn_out_intraband_curr:3,yn_out_mag_decomposed_rt:3,yn_out_mag_micro_rt:3,yn_out_micro_j:3,yn_out_pdo:3,yn_out_perflog:3,yn_out_psi:3,yn_out_rvf_rt:3,yn_out_spin_current_decompos:3,yn_out_spin_current_micro:3,yn_out_tm:3,yn_output_dns_jm:3,yn_output_shap:3,yn_period:3,yn_precondit:3,yn_predictor_corrector:3,yn_psmask:3,yn_put_wall_z_boundari:3,yn_reset_step_restart:3,yn_restart:3,yn_scalapack:3,yn_self_checkpoint:3,yn_set_ini_veloc:3,yn_spinorbit:3,yn_stop_system_mom:3,yn_subspace_diagon:3,yn_symmetri:3,yn_symmetrized_stencil:3,yn_want_communication_overlap:3,yn_want_stencil_hand_vector:3,yn_wf_em:3}}) \ No newline at end of file