diff --git a/docs/_sources/build.rst.txt b/docs/_sources/build.rst.txt new file mode 100644 index 0000000..f89639d --- /dev/null +++ b/docs/_sources/build.rst.txt @@ -0,0 +1,78 @@ +Build on your laptop +==================== + +First step +---------- + +You will need suitable python and fortran environments. There is detailed help for + +* :doc:`OSX users ` (MAC M2) +* :doc:`Linux users ` (MINT, UBUNTU) + +If you need more help, please raise an issue at https://github.com/gafusion/gacode/issues + +Source code +----------- + +You should clone the gacode repository from GitHub. This was you can keep you installation up to date:: + + $ git clone git@github.com:gafusion/gacode.git + +Concept of platform files +------------------------- + +In order to compile the full GACODE package on a new machine, **platform files** must be created. You can use existing ones or create your own. After cloning the repository, you can query the existing platforms using:: + + $ ./gacode/shared/bin/gacode_platforms + +To create new platform files (say, for a new platform MINE) then copy/edit the following files:: + + $GACODE_ROOT/platform/build/make.inc.MINE + $GACODE_ROOT/platform/exec/exec.MINE + $GACODE_ROOT/platform/env/env.MINE (if needed) + +Numerous templates for each of these files can be found in the specific folders, and most often there will be an existing machine files that is almost exactly what you need + +Environment variables +--------------------- + +To use your new platform files, enter the following lines in your shell RC file:: + + export GACODE_PLATFORM=MINE + export GACODE_ROOT=$HOME/gacode + . $GACODE_ROOT/shared/bin/gacode_setup + . $GACODE_ROOT/platform/env/env.MINE (if needed) + +OpenBLAS +-------- + +When building with gfortran, we recommend using `OpenBLAS `_. It is important to build with **single-threaded** settings. In the Makefile.rule file in the top-level OpenBLAS directory, set:: + + BINARY=64 + USE_THREAD=0 + USE_LOCKING=1 + NO_SHARED=1 + NO_CBLAS=1 + NO_LAPACKE=1 + +You can find an example of linking to OpenBLAS in the `MINT platform file `_. To test the thread safety, you can use the test program in shared/hybridtest:: + + $ cd gacode/shared/hybridtest + $ make clean ; make + $ ./test + +Building +-------- + +To build the entire GACODE project, type:: + + $ cd $GACODE_ROOT ; make + +To test that the build is successful, you can run regression tests:: + + $ neo -r + $ tglf -r + $ cgyro -r -n 4 -nomp 2 + +This last command run the complete CGYRO regression test suite using 4 MPI tasks and 2 OpenMP threads (8 total threads). + diff --git a/docs/_sources/build/pre_linux.rst.txt b/docs/_sources/build/pre_linux.rst.txt new file mode 100644 index 0000000..d837ae0 --- /dev/null +++ b/docs/_sources/build/pre_linux.rst.txt @@ -0,0 +1,8 @@ +Ubuntu/Mint +----------- + +Install fortran, MPICH and FFTW libraries:: + + $ sudo apt install gfortran + $ sudo apt install mpich libmpich-dev + $ sudo apt install libfftw3-dev diff --git a/docs/_sources/build/pre_osx.rst.txt b/docs/_sources/build/pre_osx.rst.txt new file mode 100644 index 0000000..673c696 --- /dev/null +++ b/docs/_sources/build/pre_osx.rst.txt @@ -0,0 +1,28 @@ +OSX Sonoma +---------- + +Install the Xcode command line developer tools:: + + $ xcode-select --install + +Download and Install Xquartz: https://www.xquartz.org + +Download and Install Macports: https://www.macports.org/install.php:: + + $ sudo port -v selfupdate + +Install python:: + + $ sudo port install python-310 + $ sudo port select --set python python-310 + $ sudo port select --set python3 python-310 + +Install compilers:: + + $ sudo port install gcc13 + $ sudo port select --set gcc mp-gcc13 + $ sudo port install mpich-gcc13 + $ sudo port select --set mpi mpich-gcc13-fortran + $ sudo port install fftw-3 + $ sudo port install netcdf + $ sudo port install netcdf-fortran diff --git a/docs/_sources/cgyro.rst.txt b/docs/_sources/cgyro.rst.txt new file mode 100644 index 0000000..1842a6d --- /dev/null +++ b/docs/_sources/cgyro.rst.txt @@ -0,0 +1,108 @@ +CGYRO +===== + +Brief description +----------------- + +CGYRO is a global-spectral gyrokinetic code. Core developers are + +* Emily Belli, `General Atomics `_ +* Jeff Candy, `General Atomics `_ +* Klaus Hallatschek, `IPP `_ +* Igor Sfiligoi, `SDSC `_ + +Simulation images +----------------- + +Simulation data courtesy Nathan Howard (MIT) + +.. image:: cgyro/figures/b250.png + :width: 48 % + :alt: b250 +.. image:: cgyro/figures/b990.png + :width: 48 % + :alt: b990 +.. image:: cgyro/figures/b1020.png + :width: 48 % + :alt: b1020 +.. image:: cgyro/figures/b1480.png + :width: 48 % + :alt: b1480 + +Source Code +----------- + +`CGYRO source code `_ is available at GitHub. + +Past and Future +--------------- + +**The past: GYRO** + +Over the past two decades, the fusion community has focused its modeling efforts +primarily on the core region. A popular kinetic code used for this purpose +was GYRO :cite:`candy:2003,candy:2003b,candy:2004a,candy:2010`. +Thousands of nonlinear simulations with GYRO have informed the fusion community's understanding of +core plasma turbulence :cite:`kinsey:2005,kinsey:2006,kinsey:2007,howard:2016b` +and provided a *transport database* for the calibration of reduced transport models +such as TGLF :cite:`staebler:2007`. GYRO was the first global electromagnetic solver, +and pioneered the development of numerical algorithms for the GK equations +with kinetic electrons. It is formulated in real space and like all global solvers +requires *ad hoc* absorbing-layer boundary conditions when simulating cases +with profile variation. This approach is suitable for core turbulence simulations, +which cover a large radial region and are dominated by low wavenumbers. + +**The future: CGYRO** + +As the understanding of core transport has become increasingly complete, the +cutting edge of research moved radially toward the pedestal region, where plasmas are +characterized by larger collisionality and steeper pressure gradients that +greatly modify the turbulent phenomena at play. This motivated the development, +from scratch, of the CGYRO code :cite:`candy:2016,belli:2017,belli:2018,candy:2019` +to complement GYRO. CGYRO is an Eulerian GK solver specifically designed and +optimized for **collisional, electromagnetic, multiscale simulation**. +A key algorithmic aspect of CGYRO is the **radially spectral formulation** +used to reduce the complicated integral gyroaveraging kernel into a +multiplication in wavenumber space, but retaining the ability to treat profile +variation important for edge plasmas :cite:`candy:2018,candy:2020`. A new coordinate system that is more +suitable for the highly collisional and shaped edge regime was adopted from +the NEO code :cite:`belli:2008,belli:2012`, which is the community standard for +calculation of collisional transport in toroidal geometry. + + +Data input +---------- + +* :doc:`Tabular list ` +* :doc:`Alphabetical list ` +* Profile data: :ref:`input.gacode`. + +Data output and plotting +------------------------ + +Although there is a description of :doc:`output data `, it is suggested that users use the python interface to output data. + +Normalization +------------- + +.. csv-table:: **CGYRO Normalization** + :header: "Quantity", "Unit", "Description" + :widths: 16, 12, 20 + + length, :math:`a`, minor radius + mass, :math:`m_\mathrm{D}`, deuterium mass = :math:`3.345\times 10^{24} g` + density, :math:`n_e`, electron density + temperature, :math:`T_e`, electron temperature + velocity, :math:`c_s = \sqrt{T_e/m_\mathrm{D}}`, deuterium sound speed + time, :math:`a/c_s`, minor radius over sound speed + +Running Cases +------------- + +* :doc:`running cases ` + +Frequently Asked Questions +-------------------------- + +* :doc:`FAQ ` + diff --git a/docs/_sources/cgyro/FAQ.rst.txt b/docs/_sources/cgyro/FAQ.rst.txt new file mode 100644 index 0000000..1fbeff8 --- /dev/null +++ b/docs/_sources/cgyro/FAQ.rst.txt @@ -0,0 +1,63 @@ +FAQ +=== + +.. toggle-header:: + :header: What is :math:`k_y \rho_s` and why does CGYRO modify :math:`\rho_s` ? + + The fundamental definition of the wavenumber and unit gyroradius are given in :cite:`candy:2016`. + These are + + .. math:: \begin{align} + k_y \doteq &~nq/r \; , \\ + \rho_s \doteq &~\rho_{s,\rm{unit}} = \frac{e B_\rm{unit}}{m_D c} \; , \\ + B_\rm{unit} \doteq &~\displaystyle \frac{q}{r} \frac{\partial \psi}{\partial r} \; . + \end{align} + + Here, :math:`B_\rm{unit}` is the *Waltz effective magnetic field* which is standard + across all GACODE tools/codes, and :math:`r` is the midplane minor radius. For a given + value of :math:`k_y \rho_s`, the gyrokinetic equations are invariant to the scaling + :math:`n \rightarrow \alpha n` and :math:`\rho_s \rightarrow \rho_s/\alpha`, + where :math:`\alpha` is an arbitrary scaling parameter. + + The CGYRO input parameter KY is + + .. math:: \mathtt{KY} \doteq \Delta(k_y \rho_s) = \Delta n \left(\frac{q}{r}\right) \rho_s \; . + + CGYRO enforces :math:`\Delta n = 1`, which sets the (artificial) value of :math:`\rho_s` to + + .. math:: \rho_s \rightarrow \left(\frac{r}{q}\right) \mathtt{KY} \; . + + To see the physical values of key parameters, you can use profiles_gen: + + .. code-block:: + + $ profiles_gen -i input.gacode -loc_rad 0.6 + INFO: (profiles_gen) input.gacode is autodetected as GACODE. + INFO: (locpargen) Quasineutrality NOT enforced. + INFO: (locpargen) rhos/a =+2.44577E-03 + INFO: (locpargen) Te [keV] =+8.81550E-01 + INFO: (locpargen) Ti [keV] =+7.58644E-01 + INFO: (locpargen) Bunit =+2.92020E+00 + INFO: (locpargen) beta_* =+4.84003E-03 + INFO: -----> n=1: ky*rhos =-7.74754E-03 + INFO: (locpargen) Wrote input.*.locpargen + + +.. toggle-header:: + :header: How does adaptive time-stepping work? + + Time-stepping is controlled with the parameter :ref:`cgyro_delta_t_method`. Setting the parameter + to 0 gives the legacy fixed timestep, whereas values greater than 0 are adaptive methods. For the + adaptive methods we recommend setting :ref:`cgyro_delta_t` = 0.01. Here is the recommendation: + + .. code-block:: + + DELTA_T_METHOD=1 + DELTA_T=0.01 + PRINT_STEP=100 + + The overall time-integration step is split between an explicit high-order step, and an implicit + second-order step for collisions and trapping. When using the adaptive method, the value of + :ref:`cgyro_delta_t` is the size of the (large) implicit timestep. Then, the value of the explicit + timestep is decreased to match the error tolerance, :ref:`cgyro_error_tol` -- the default value of + which should be sufficient. diff --git a/docs/_sources/cgyro/cgyro_list.rst.txt b/docs/_sources/cgyro/cgyro_list.rst.txt new file mode 100644 index 0000000..5aa1d14 --- /dev/null +++ b/docs/_sources/cgyro/cgyro_list.rst.txt @@ -0,0 +1,1697 @@ +.. |exb| mathmacro:: \mathbf{E}\times\mathbf{B} +.. |dphi| mathmacro:: \delta\phi +.. |dap| mathmacro:: \delta A_\parallel +.. |dbp| mathmacro:: \delta B_\parallel + +Alphabetical list for input.cgyro +================================= + +.. _cgyro_amp: + +AMP +--- + +**Definition** + +Initial amplitude of finite-:math:`n` modes. + +**Comments** + +- DEFAULT = 0.1 +- For linear simulations, the value is unimportant +- For nonlinear runs, this will usually need to be reduced to a smaller value. + +---- + +.. _cgyro_amp0: + +AMP0 +---- + +**Definition** + +Initial amplitude of :math:`n = 0` modes. + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _cgyro_betae_unit: + +BETAE_UNIT +---------- +**Comments** + +- DEFAULT = 0.0 + + +**Definition** + +The electron beta with reference to :math:`B_\mathrm{unit}`: + +.. math:: + \beta_{e,\mathrm{unit}} \doteq \frac{8 \pi n_e T_e}{B_\mathrm{unit}^2} + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _cgyro_betae_unit_scale: + +BETAE_UNIT_SCALE +---------------- + +**Definition** + +Scale factor for :ref:`cgyro_betae_unit`. + +**Comments** + +- DEFAULT = 1.0 + +---- + +.. _cgyro_beta_star_scale: + +BETA_STAR_SCALE +--------------- + +**Definition** + +Pressure gradient scaling factor. Here, the pressure gradient factor is +defined as + +.. math:: + \beta_* = - \frac{8\pi}{B_\mathrm{unit}^2} \frac{dp}{dr} + +**Comments** + +- DEFAULT = 1.0 +- In the absence of scaling, the value of :math:`\beta_*` will be computed self-consistently given the value of :math:`\beta_{e,\mathrm{unit}}` set in :ref:`cgyro_betae_unit`. +- Often it is desired to reduce :math:`\beta_{e,\mathrm{unit}}` but leave the effective :math:`\beta_*` unchanged. In this case, one should divide :ref:`cgyro_betae_unit` by 2, then set BETA_STAR_SCALE=2. + +---- + +.. _cgyro_btccw: + +BTCCW +----- + +**Definition** + +Parameter which selects the orientation of the toroidal magnetic field :math:`B_t` relative to the toroidal angle :math:`\varphi`. + +**Choices** + +- BTCCW = 1: Counter-clockwise when viewed from above the torus - negative :math:`\mathbf{e}_{\varphi}` for the right-handed coordinate system :math:`(r,\theta,\varphi)`. Thus, :math:`B_t` is oriented along the negative :math:`\mathbf{e}_{\varphi}` direction. +- BTCCW = -1: Clockwise when viewed from above the torus - positive :math:`\mathbf{e}_{\varphi}` for the right-handed coordinate system :math:`(r,\theta,\varphi)`. Thus, :math:`B_t` is oriented along the positive :math:`\mathbf{e}_{\varphi}` direction. + +**Comments** + +- DEFAULT = -1 +- In DIII-D, typically BTCCW = 1. +- When experimental profiles are used (:ref:`cgyro_profile_model` = 2), the orientiation of :math:`B_t` is inferred from :ref:`input.gacode`. + + +---- + +.. _cgyro_box_size: + +BOX_SIZE +-------- + +**Definition** + +Integer multiplier to determine the radial box length, :math:`L_x`, as a multiple of the distance between reference singular surfaces, :math:`L_0 = r/(qs)`. + +.. math:: + \frac{L_x}{a} = \mathrm{BOX\_SIZE} \; \left( \frac{r}{qs} \right) + + +**Comments** + +- DEFAULT = 1 (integer) +- Note that the reference singular surface spacing refers to :math:`n=1` which is always the lowest non-zero mode in CGYRO. +- Also, :math:`r \rightarrow` :ref:`cgyro_rmin`, :math:`s \rightarrow` :ref:`cgyro_s`, :math:`q \rightarrow` :ref:`cgyro_q`. + +---- + +.. _cgyro_collision_model: + +COLLISION_MODEL +--------------- + +**Definition** + +Collision operator selection. + +**Choices** + +- COLLISION_MODEL = 1: Lorentz ee+ei +- COLLISION_MODEL = 2: Connor +- COLLISION_MODEL = 4: Sugama (maximal accuracy) +- COLLISION_MODEL = 5: Simple Lorentz ee+ei (fastest) + +**Comments** + +- DEFAULT = 4 +- To control conservation and other properties, the following parameters can be set: :ref:`cgyro_collision_field_model`, :ref:`cgyro_collision_mom_restore`, :ref:`cgyro_collision_ene_restore`, :ref:`cgyro_collision_ene_diffusion`, :ref:`cgyro_collision_kperp` +- Memory usage can be reduced by setting :ref:`cgyro_collision_precision_mode`. +- On GPU systems, GPU offload is controlled by :ref:`cgyro_gpu_bigmem_flag`. When that is not enabled, the slower but less GPU memory demanding CPU-only Sugama operator is used. + +---- + +.. _cgyro_collision_field_model: + +COLLISION_FIELD_MODEL +--------------------- + +**Definition** + +Flag to toggle self-consistent field update during collisions. + +**Choices** + +- COLLISION_FIELD_MODEL = 0: Field update OFF +- COLLISION_FIELD_MODEL = 1: Field update ON + +**Comments** + +- DEFAULT = 1 + +---- + +.. _cgyro_collision_mom_restore: + +COLLISION_MOM_RESTORE +--------------------- + +**Definition** + +Flag to toggle collisional momentum conservation. + +**Choices** + +- COLLISION_MOM_RESTORE = 0: Momentum conservation OFF +- COLLISION_MOM_RESTORE = 1: Momentum conservation ON + +**Comments** + +- DEFAULT = 1 +- For test purposes only. + +---- + +.. _cgyro_collision_ene_restore: + +COLLISION_ENE_RESTORE +--------------------- + +**Definition** + +Flag to toggle collisional energy conservation. + +**Choices** + +- COLLISION_ENE_RESTORE = 0: Energy conservation OFF +- COLLISION_ENE_RESTORE = 1: Energy conservation ON + +**Comments** + +- DEFAULT = 1 +- For test purposes only. + +---- + +.. _cgyro_collision_ene_diffusion: + +COLLISION_ENE_DIFFUSION +----------------------- + +**Definition** + +Flag to toggle collisional energy diffusion. + +**Choices** + +- COLLISION_ENE_DIFFUSION = 0: Energy diffusion OFF +- COLLISION_ENE_DIFFUSION = 1: Energy diffusion ON + +**Comments** + +- DEFAULT = 1 +- For test purposes only. + +---- + +.. _cgyro_collision_kperp: + +COLLISION_KPERP +--------------- + +**Definition** + +Flag to toggle :math:`k_\perp^2` terms in collision operator. + +**Choices** + +- COLLISION_KPERP = 0: Terms OFF +- COLLISION_KPERP = 1: Terms ON + +**Comments** + +- DEFAULT = 1 +- For test purposes only. + +---- + +.. _cgyro_collision_precision_mode: + +COLLISION_PRECISION_MODE +------------------------ + +**Definition** + +Control the precision of the cmat constants. + +**Choices** + +- COLLISION_PRECISION_MODE = 0: Full 64-bit precision. +- COLLISION_PRECISION_MODE = 1: Heuristics-based lower-precision setup, slightly better than 32-bit precision. +- COLLISION_PRECISION_MODE = 32: Reduced 32-bit precision. +- COLLISION_PRECISION_MODE = 64: Full 64-bit precision. (Same as 0) + +**Comments** + +- DEFAULT = 0 +- Selecting COLLISION_PRECISION_MODE 1 and 32 results in significant memory saving and negligible precision loss in most use-cases. + +---- + +.. _cgyro_delta: + +DELTA +----- + +**Definition** + +Triangularity, :math:`\delta`, of the flux surface: + +**Comments** + +- DEFAULT = 0.0 +- This is only active with :ref:`cgyro_equilibrium_model` = 2 (the Miller equilibrium model). +- When experimental profiles are used (:ref:`cgyro_profile_model` = 2), the triangularity as a function of radius is read from :ref:`input.gacode`. + +---- + +.. _cgyro_delta_t: + +DELTA_T +------- + +**Definition** + +Simulation timestep :math:`(c_s/a) \Delta t`. + +**Comments** + +- DEFAULT = 0.01 +- Because CGYRO uses an explicit time-integration scheme for collisionless terms, the timestep must typically be smaller than for long-wavelength GYRO simulations. + +---- + +.. _cgyro_delta_t_method: + +DELTA_T_METHOD +-------------- + +**Definition** + +Control for adaptive or fixed time-stepping. + +**Choices** + +- DELTA_T_METHOD = 0: RK4 4:4(3) [non-adaptive] +- DELTA_T_METHOD = 1: Cash-Karp 6:5(4) +- DELTA_T_METHOD = 2: Bogacki-Shampine 7:5(4) +- DELTA_T_METHOD = 3: Verner 10:7(6) + +**Comments** + +- DEFAULT = 0 +- Notation is s:o(e) where s=stages,o=order,e=order of error estimate. + +---- + +.. _cgyro_dens: + +DENS_* +------ + +**Definition** + +The normalized equilibrium-scale density. First species density is DENS_1, and so on. + +.. math:: + \mathrm{DENS}* = \frac{n_{*}}{n_e} + +**Commments** + +- DEFAULT = :math:`[1,0,0,\ldots]` +- The user should set DENS=1 for electrons. +- When experimental profiles are used (:ref:`cgyro_profile_model` = 2), the densities + are automatically normalized to :math:`n_e`. +- When rotation effects are included (:ref:`cgyro_rotation_model` = 2), this parameter + is the density at the outboard midplane (:math:`\theta=0`). + +---- + +.. _cgyro_dlnndr: + +DLNNDR_* +-------- + +**Definition** + +The normalized equilibrium-scale density gradient scale length: + +.. math:: + \mathrm{DLNNDR}\_* = -a \frac{\partial {\rm ln} n_{*}}{\partial r} + +**Commments** + +- DEFAULT = :math:`[1,1,1,\ldots]` +- When experimental profiles are used (:ref:`cgyro_profile_model` = 2), the density as a function of radius is + read from :ref:`input.gacode` and the gradient is computed internally. The normalizing length is the + plasma minor radius. +- When rotation effects are included (:ref:`cgyro_rotation_model` = 2), this parameter is the value at the + outboard midplane (:math:`\theta=0`). + +---- + +.. _cgyro_dlntdr: + +DLNTDR_* +-------- + +**Definition** + +The normalized equilibrium-scale temperature gradient scale length: + +.. math:: + \mathrm{DLNTDR}\_* = -a \frac{\partial {\rm ln} T_{*}}{\partial r} \; . + +**Commments** + +- DEFAULT = :math:`[1,1,1,\ldots]` +- When experimental profiles are used (:ref:`cgyro_profile_model` = 2), the temperature as a function of radius is + read from :ref:`input.gacode` and the gradient is computed internally. The normalizing length is the + plasma minor radius. +- When rotation effects are included (:ref:`cgyro_rotation_model` = 2), this parameter is the value at the + outboard midplane (:math:`\theta=0`). + +---- + +.. _cgyro_dzmag: + +DZMAG +----- + +**Definition** + +The derivative of the elevation: + +.. math:: + \frac{\partial Z_0(r)}{\partial r} \; . + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _cgyro_e_max: + +E_MAX +----- + +**Definition** + +Maximum value of (pseudospectral) dimensionless energy, :math:`\varepsilon_\mathrm{max}` + +**Comments** + +- DEFAULT = 8.0 +- Corresponds to Maxwellian factor :math:`\displaystyle e^{-\varepsilon_\mathrm{max}}` + +---- + +.. _cgyro_error_tol: + +ERROR_TOL +--------- + +**Definition** + +Error tolerance for adaptive time-stepping. + +**Comments** + +- DEFAULT = 1e-4 +- Decrease this slightly for very-high-transport cases + +---- + +.. _cgyro_equilibrium_model: + +EQUILIBRIUM_MODEL +----------------- + +**Definition** + +Flux-surface shape specification parameter. + +**Choices** + +- EQUILIBRIUM_MODEL = 1: :math:`s` - :math:`\alpha` +- EQUILIBRIUM_MODEL = 2: Miller parameterization +- EQUILIBRIUM_MODEL = 3: General (Fourier) parameterization + +**Comments** + +- DEFAULT = 2 +- EQUILIBRIUM_MODEL=1 is not available for experimental profiles (:ref:`cgyro_profile_model` =2). + +---- + +.. _cgyro_field_print_flag: + +FIELD_PRINT_FLAG +---------------- + +**Definition** + +Toggle printing of :math:`\dap(k_x^0,k_y,t)` and :math:`\dbp(k_x^0,k_y,t)` . + +**Comments** + +- DEFAULT = 0 +- Output files are ``bin.cgyro.kxky_apar`` and ``bin.cgyro.kxky_bpar``, respectively +- Even if this flag is set to zero, potential fluctuations :math:`\dphi(k_x^0,k_y,t)` are written to ``bin.cgyro.kxky_phi`` + +---- + +.. _cgyro_freq_tol: + +FREQ_TOL +-------- + +**Definition** + +Eigenvalue convergence tolerance for linear simulations. + +**Comments** + +- DEFAULT = 0.001 + +---- + +.. _cgyro_gamma_e: + +GAMMA_E +------- + +**Definition** + +Normalized :math:`\exb` shearing rate :math:`\displaystyle \frac{a}{c_s} \gamma_E`. + +**Comments** + +- This is the radial electric field shear and is a **global** term (can't be treated in a local simulation) +- It it zeroed automatically in a linear simulation +- DEFAULT = 0.0 +- See discussion on :doc:`plasma rotation <../rotation>` + +---- + +.. _cgyro_gamma_e_scale: + +GAMMA_E_SCALE +------------- + +**Definition** + +Scaling factor applied to experimental value of :math:`\gamma_E` . + +**Comments** + +- DEFAULT = 1.0 +- Only active for :ref:`cgyro_profile_model` =2 + +---- + +.. _cgyro_gamma_p: + +GAMMA_P +------- + +**Definition** + +Normalized rotation shearing rate :math:`\displaystyle \frac{a}{c_s} \gamma_p`. + +**Comments** + +- DEFAULT = 0.0 +- See discussion on :doc:`plasma rotation <../rotation>` + +---- + +.. _cgyro_gamma_p_scale: + +GAMMA_P_SCALE +------------- + +**Definition** + +Scaling factor applied to experimental value of :math:`\gamma_p` . + +**Comments** + +- DEFAULT = 1.0 +- Only active for :ref:`cgyro_profile_model` =2 + +---- + +.. _cgyro_gpu_bigmem_flag: + +GPU_BIGMEM_FLAG +--------------- + +**Definition** + +Enable (or disable) memory intensive GPU offload. + +**Choices** + +- GPU_BIGMEM_FLAG = 0: The slower but less GPU memory demanding CPU-only Sugama operator is used. +- GPU_BIGMEM_FLAG = 1: The GPU-accelerated Sugama operator is used. Large memory use due to cmat. +- GPU_BIGMEM_FLAG > 1: Less GPU memory demanding, as only 1/GPU_BIGMEM_FLAG of cmat is kept in memory at any time. Slower due to memory copies. + +**Comments** + +- DEFAULT = 1 +- Only active on GPU systems for :ref:`cgyro_collision_model` =4 + +---- + +.. _cgyro_h_print_flag: + +H_PRINT_FLAG +------------ + +**Definition** + +Toggle printing of distribution for single-mode runs. + +**Comments** + +- DEFAULT = 0. + +---- + +.. _cgyro_ipccw: + +IPCCW +----- + +**Definition** + +Parameter which selects the orientation of the plasma current (and thus the poloidal magnetic field :math:`B_p`) relative to the toroidal angle :math:`\varphi`. + +**Choices** + +- IPCCW = 1: Counter-clockwise when viewed from above the torus - negative :math:`\mathbf{e}_{\varphi}` for the right-handed coordinate system :math:`(r,\theta,\varphi)`. Thus, :math:`B_p` is oriented along the negative :math:`\mathbf{e}_{\varphi}` direction. +- IPCCW = -1: Clockwise when viewed from above the torus - positive :math:`\mathbf{e}_{\varphi}` for the right-handed coordinate system :math:`(r,\theta,\varphi)`. Thus, :math:`B_p` is oriented along the positive :math:`\mathbf{e}_{\varphi}` direction. + +**Comments** + +- DEFAULT = -1 +- In DIII-D, typically IPCCW = 1. +- When experimental profiles are used (:ref:`cgyro_profile_model` = 2), the orientiation of IP is inferred from :ref:`input.gacode`. + +---- + +.. _cgyro_kappa: + +KAPPA +----- + +**Definition** + +Elongation, :math:`\kappa`, of the flux surface. + +**Comments** + +- DEFAULT = 1.0 +- This is only active with :ref:`cgyro_equilibrium_model` = 2 (the Miller equilibrium model). +- When experimental profiles are used (:ref:`cgyro_profile_model` = 2), the elongation as a function of radius is read from input.gacode. + +---- + +.. _cgyro_gflux_print_flag: + +GFLUX_PRINT_FLAG +---------------- + +**Definition** + +Toggle printing of global flux profiles. + +**Comments** + +- DEFAULT = 0 +- See also :ref:`cgyro_n_global` + +---- + +.. _cgyro_ky: + +KY +-- + +**Definition** + +Selector for value of :math:`k_\theta \rho_s` . + +**Comments** + +- If :ref:`cgyro_n_toroidal` = 1, this is the simulated value of :math:`k_\theta \rho_s` +- If :ref:`cgyro_n_toroidal` > 1, this is the lowest nonzero value of :math:`k_\theta \rho_s` +- Use the output in ``out.cgyro.info`` to guide selection of KY + +---- + +.. _cgyro_lambda_debye: + +LAMBDA_DEBYE +------------ + +**Definition** + +---- + +.. _cgyro_lambda_debye_scale: + +LAMBDA_DEBYE_SCALE +------------------ + +**Definition** + +---- + +.. _cgyro_mach: + +MACH +---- + +**Definition** + +Rotation speed (Mach number) :math:`M` + +**Comments** + +- DEFAULT = 0.0 +- See discussion in :doc:`plasma rotation <../rotation>` + +---- + +.. _cgyro_mach_scale: + +MACH_SCALE +---------- + +**Definition** + +Scaling factor applied to experimental value of :math:`M` . + +**Comments** + +- DEFAULT = 1.0 +- Only active for :ref:`cgyro_profile_model` =2 + +---- + +.. _cgyro_mass: + +MASS_* +------ + +**Definition** + +The species mass normalized to deuterium mass: MASS_1, and so on. + +.. math:: + {\rm MASS}\_* = \frac{m_*}{m_D} \; . + +**Commments** + +- DEFAULT = :math:`[1,1,1,\ldots]` +- When experimental profiles are used (:ref:`cgyro_profile_model` = 2), the normalizing mass is deuterium. +- A typical case (deuterium, carbon, electrons) would be:: + + MASS_1=1.0 + MASS_2=6.0 + MASS_3=2.724e-4 + + +---- + +.. _cgyro_max_time: + +MAX_TIME +-------- + +**Definition** + +Maximum simulation time in units of :math:`a/c_s` + +---- + +.. _cgyro_moment_print_flag: + +MOMENT_PRINT_FLAG +----------------- + +**Definition** + +Toggle printing of :math:`\delta n_a(k_x^0,k_y,t)` +and :math:`\delta E_a(k_x^0,k_y,t)` . + +**Comments** + +- DEFAULT = 0. + +---- + +.. _cgyro_mpi_rank_order: + +MPI_RANK_ORDER +-------------- + +**Definition** + +Specify the relative ordering of MPI ranks. + +**Choices** + +- MPI_RANK_ORDER = 1: Depth-first mode +- MPI_RANK_ORDER = 2: Breadth-first mode + +**Comments** + +- DEFAULT = 2 +- The optimal value depends on both the hardware and the problem being run. + +---- + +.. _cgyro_nonlinear_flag: + +NONLINEAR_FLAG +-------------- + +**Definition** + +Toggle inclusion of nonlinear terms. + +**Choices** + +- NONLINEAR_FLAG=0: Nonlinear terms OFF +- NONLINEAR_FLAG=1: Nonlinear terms ON + +**Comments** + +- DEFAULT = 0 + +---- + +.. _cgyro_n_field: + +N_FIELD +------- + +**Definition** + +Selector for number of fluctuating fields + +**Choices** + +- N_FIELD=1: Retain :math:`\dphi` +- N_FIELD=2: Retain :math:`(\dphi,\dap)` +- N_FIELD=3: Retain :math:`(\dphi,\dap,\dbp)` + +**Comments** + +- DEFAULT = 1 + +---- + +.. _cgyro_n_global: + +N_GLOBAL +-------- + +**Definition** + +Control number of global output harmonics + +**Comments** + +- DEFAULT = 4 +- Making this larger retains shorter scales in the output + +---- + +.. _cgyro_nu_global: + +NU_GLOBAL +--------- + +**Definition** + +Source rate + +**Comments** + +- DEFAULT = 15.0 +- Making this larger increases the source rate + +---- + +.. _cgyro_nup_radial: + +NUP_RADIAL +---------- + +**Definition** + +---- + +.. _cgyro_up_theta: + +UP_THETA +-------- + +**Definition** + +---- + +.. _cgyro_nup_theta: + +NUP_THETA +--------- + +**Definition** + +Accuracy control for the poloidal discretization scheme. + +**Choices** + +- NUP_THETA=1: 1st-order conservative upwind +- NUP_THETA=2: 3rd-order conservative upwind +- NUP_THETA=3: 5th-order conservative upwind + +**Comments** + +- DEFAULT=3 (5th order) +- The numerical scheme (conservative upwind) is modified by projecting out density and current perturbations induced by the grid-scale dissipation. + +---- + +.. _cgyro_up_alpha: + +UP_ALPHA +-------- + +**Definition** + +---- + +.. _cgyro_nup_alpha: + +NUP_ALPHA +--------- + +**Definition** + +---- + +.. _cgyro_nu_ee: + +NU_EE +----- + +**Definition** + +Electron-electron collision frequency :math:`\nu_{ee}`, in units of :math:`c_s/a`. + +.. math:: + \nu_{ee} = \frac{4\pi n_e e^4}{(2T_e)^{3/2} m_e^{1/2}} \,\log\Lambda \; . + +**Comments** + +- DEFAULT = 0.1 +- All ion collision rates are self-consistently determined from :ref:`cgyro_nu_ee`. +- The recommended *minimum value* is :ref:`cgyro_nu_ee` = 0.01. + +---- + +.. _cgyro_n_radial: + +N_RADIAL +-------- + +**Definition** + +Number of radial wavenumbers (radial Fourier harmonics) to retain in simulation. + +**Comments** + +- DEFAULT = 4 +- For **linear simulations** with :ref:`cgyro_box_size` =1, this can be as small as 2, but a minimium of 4 is recommended. +- For **nonlinear simulations**, we recommend N_RADIAL > :math:`L_x/\rho` +- Wavenumbers span :math:`p = -N , \ldots , N-1` where :math:`N` = N_RADIAL/2 + +---- + +.. _cgyro_n_theta: + +N_THETA +------- + +**Definition** + +Number of poloidal gridpoints :math:`\theta_i`. There is a single poloidal mesh for both the distribution function and the fields (unlike GYRO). + +**Comments** + +- DEFAULT = 24 +- The order of accuracy of the poloidal discretization is controlled by :ref:`cgyro_nup_theta`. + +---- + +.. _cgyro_n_xi: + +N_XI +---- + +**Definition** + +Number of Legendre pseudospectral meshpoints :math:`\xi_i` to retain in simulation. + +**Comments** + +- DEFAULT = 16 +- This is the **pitch-angle resolution** +- This is equivalent to number of retained Legendre polynomials + +---- + +.. _cgyro_n_energy: + +N_ENERGY +-------- + +**Definition** + +Number of generalized-Laguerre pseudospectral meshpoints :math:`v_i` to retain in simulation + +**Comments** + +- DEFAULT = 8 +- This is the **energy resolution** +- This is equivalent to number of retained Laguerre polynomials + +---- + +.. _cgyro_n_toroidal: + +N_TOROIDAL +---------- + +**Definition** + +Number of toroidal harmonics (binormal Fourier modes). + +**Comments** + +- Together with :ref:`cgyro_ky`, this controls the toroidal resolution. +- Together with :ref:`cgyro_toroidals_per_proc`, this controls the number of MPI processes needed. + +---- + +.. _cgyro_n_species: + +N_SPECIES +--------- + +**Definition** + +Number of kinetic species (includes electrons and all ions). + +**Comments** + +- DEFAULT = 1 + +---- + +.. _cgyro_print_step: + +PRINT_STEP +---------- + +**Definition** + +Frequency of simulation data output. + +**Comments** + +- DEFAULT = 100 +- If PRINT_STEP=100, simulation data will be output after every 100 timesteps + +---- + +.. _cgyro_profile_model: + +PROFILE_MODEL +------------- + +**Definition** + +Selector for profile data input. + +**Choices** + +- PROFILE_MODEL=1: Set local profile parameters in input.cgyro. +- PROFILE_MODEL=2: Compute local profile parameters from data in :ref:`input.gacode`. + +**Comments** + +- DEFAULT = 1 + +---- + +.. _cgyro_px0: + +PX0 +--- + +**Definition** + +The ballooning angle parameter :math:`\mathrm{PX0} = \theta_0/(2\pi)`. + +**Comments** + +- DEFAULT = 0.0 +- This is used only for linear simulations. +- The most unstable linear mode is normally at :math:`\mathrm{PX0} = 0`. +- Choose :math:`0 \le \mathrm{PX0} < 1`. + +---- + +.. _cgyro_q: + +Q +- + +**Definition** + +Safety factor, :math:`q`, of the flux surface. + +**Comments** + +- DEFAULT = 2.0 +- This is only active with :ref:`cgyro_equilibrium_model` = 2 (the Miller equilibrium model). +- When experimental profiles are used (:ref:`cgyro_profile_model` = 2), the safety factor as a function of radius is read from :ref:`input.gacode` and the safety factor gradient is computed internally. + +---- + +.. _cgyro_quasineutral_flag: + +QUASINEUTRAL_FLAG +----------------- + +**Definition** + +Enforce quasineutrality when using experimental profiles. + +**Choices** + +- QUASINEUTRAL_FLAG=0: Use raw density data. +- QUASINEUTRAL_FLAG=1: Reset main ion density to enforce quasineutrality. + +**Comments** + +- DEFAULT = 1 +- This is only active when experimental profiles are used (:ref:`cgyro_profile_model` = 2). + +---- + +.. _cgyro_restart_step: + +RESTART_STEP +------------ + +**Definition** + +Frequency of restart file generation + +**Comments** + +- DEFAULT = 10 +- If PRINT_STEP=100 and RESTART_STEP=10, simulation data will be output once every 100 timesteps and restart + data will be output once every 1000 timesteps (i.e., once every 10 data outputs) + +.. _cgyro_rmin: + +RMIN +---- + +**Definition** + +The ratio :math:`r/a`, where :math:`r` is the :doc:`minor radius <../geometry>` and :math:`a` is the radius of the LCFS. + +**Comments** + +- DEFAULT = 0.5 + +---- + +.. _cgyro_rmaj: + +RMAJ +---- + +**Definition** + +The ratio :math:`R_0/a`, where :math:`R_0` is the :doc:`major radius <../geometry>` and :math:`a` is the radius of the LCFS. + +**Comments** + +- DEFAULT = 3.0 + +---- + +.. _cgyro_rotation_model: + +ROTATION_MODEL +-------------- + +**Definition** + +**Choices** + +- ROTATION_MODEL = 1: Weak rotation +- ROTATION_MODEL = 2: Sonic (Sugama) rotation + +**Comments** + +- DEFAULT = 1 + +---- + +.. _cgyro_s: + +S +- + +**Definition** + +Magnetic shear, :math:`s`, of the flux surface: + +.. math:: + s = \frac{r}{q} \frac{\partial q}{\partial r} \; . + +**Comments** + +- DEFAULT = 1.0 +- This is only active with :ref:`cgyro_equilibrium_model` = 2 (the Miller equilibrium model). +- When experimental profiles are used (:ref:`cgyro_profile_model` = 2), the safety factor as a function of radius is read from input.gacode and the safety factor gradient is computed internally. + +---- + +.. _cgyro_shift: + +SHIFT +----- + +**Definition** + +Shafranov shift, :math:`\Delta`, of the flux surface: + +.. math:: + \Delta = \frac{\partial R_0}{\partial r} \; . + +**Comments** + +- DEFAULT = 0.0 +- This is only active with :ref:`cgyro_equilibrium_model` = 2 (the Miller equilibrium model). +- When experimental profiles are used (:ref:`cgyro_profile_model` = 2), the flux-surface-center major radius as a function of radius, :math:`R_0(r)`, is read from input.gacode and its derivative is computed internally. + +---- + +.. _cgyro_shape_cos0: + +SHAPE_COS0 +---------- + +**Definition** + +0th antisymmetric moment. + +- DEFAULT = 0.0 + +---- + +.. _cgyro_shape_s_cos0: + +SHAPE_S_COS0 +------------ + +**Definition** + +0th antisymmetric moment shear. + +- DEFAULT = 0.0 + +---- + +.. _cgyro_shape_cos1: + +SHAPE_COS1 +---------- + +**Definition** + +1st antisymmetric moment. + +- DEFAULT = 0.0 + +---- + +.. _cgyro_shape_s_cos1: + +SHAPE_S_COS1 +------------ + +**Definition** + +1th antisymmetric moment shear. + +- DEFAULT = 0.0 + +---- + +.. _cgyro_shape_cos2: + +SHAPE_COS2 +---------- + +**Definition** + +2nd antisymmetric moment. + +- DEFAULT = 0.0 + +---- + +.. _cgyro_shape_s_cos2: + +SHAPE_S_COS2 +------------ + +**Definition** + +2th antisymmetric moment shear. + +- DEFAULT = 0.0 + +---- + +.. _cgyro_shape_cos3: + +SHAPE_COS3 +---------- + +**Definition** + +3rd antisymmetric moment. + +- DEFAULT = 0.0 + +---- + +.. _cgyro_shape_s_cos3: + +SHAPE_S_COS3 +------------ + +**Definition** + +3rd antisymmetric moment. + +- DEFAULT = 0.0 + +---- + +.. _cgyro_shape_sin3: + +SHAPE_SIN3 +---------- + +**Definition** + +3rd symmetric moment. + +- DEFAULT = 0.0 + +---- + +.. _cgyro_shape_s_sin3: + +SHAPE_S_SIN3 +------------ + +**Definition** + +3rd symmetric moment shear. + +- DEFAULT = 0.0 + +---- + +.. _cgyro_silent_flag: + +SILENT_FLAG +----------- + +**Definition** + +---- + +.. _cgyro_s_delta: + +S_DELTA +------- + +**Definition** + +Measure of the rate of change of the average triangularity of the flux surface: + +.. math:: + s_\delta = r \, \frac{\partial \delta}{\partial r} \; . + +**Comments** + +- DEFAULT: 0.0 +- This is only active with :ref:`cgyro_equilibrium_model` = 2 (the Miller equilibrium model). +- When experimental profiles are used (:ref:`cgyro_profile_model` = 2), the triangularity as a function of radius is read from :ref:`input.gacode` and the triangularity gradient is computed internally. + +---- + +.. _cgyro_s_kappa: + +S_KAPPA +------- + +**Definition** + +Measure of the rate of change of the elongation of the flux surface: + +.. math:: + s_\kappa = \frac{r}{\kappa} \frac{\partial \kappa}{\partial r} \; . + +**Comments** + +- DEFAULT: 0.0 +- This is only active with :ref:`cgyro_equilibrium_model` = 2 (the Miller equilibrium model). +- When experimental profiles are used (:ref:`cgyro_profile_model` = 2), the elongation as a function of radius is read from :ref:`input.gacode` and the elongation gradient is computed internally. + +---- + +.. _cgyro_s_zeta: + +S_ZETA +------ + +**Definition** + +Measure of the rate of change of the average squareness of the flux surface: + +.. math:: + s_\zeta = r \, \frac{\partial \zeta}{\partial r} \; . + +**Comments** + +- DEFAULT: 0.0 +- This is only active with :ref:`cgyro_equilibrium_model` = 2 (the Miller equilibrium model). + +---- + +.. _cgyro_temp: + +TEMP_* +------ + +**Definition** + +The normalized equilibrium-scale temperature. First species temperature is TEMP_1, and so on. + +.. math:: + \mathrm{TEMP}\_* = \frac{T_{*}}{T_e} \; . + +**Commments** + +- DEFAULT: TEMP\_*= :math:`[1,\ldots]` +- The user should set TEMP=1 for electrons. +- When experimental profiles are used (:ref:`cgyro_profile_model` = 2), the temperatures + are automatically normalized to :math:`T_e`. + +---- + +.. _cgyro_theta_plot: + +THETA_PLOT +---------- + +**Definition** + +The number of poloidal points for output of large fluctuation moment arrays. + +**Commments** + +- DEFAULT: THETA\_PLOT=1 +- Value should be an integer divisor of :ref:`cgyro_n_theta` + + +---- + +.. _cgyro_toroidals_per_proc: + +TOROIDALS_PER_PROC +------------------ + +**Definition** + +Number of toroidal harmonics to process in a single MPI process. + +**Comments** + +- DEFAULT: 1 +- Must be a divisor of :ref:`cgyro_n_toroidal`. +- A higher number typically results in faster simulation on low node count. + +---- + +.. _cgyro_udsymmetry_flag: + +UDSYMMETRY_FLAG +--------------- + +**Definition** + +---- + +.. _cgyro_up_radial: + +UP_RADIAL +--------- + +**Definition** + +---- + +.. _cgyro_upwind_single_flag: + +UPWIND_SINGLE_FLAG +------------------ + +**Definition** + +Control the precision of upwind communication. + +**Choices** + +- UPWIND_SINGLE_FLAG = 0: Full 64-bit precision +- UPWIND_SINGLE_FLAG = 1: Faster but lower 32-bit precision. + +**Comments** + +- DEFAULT = 0 + +---- + +.. _cgyro_velocity_order: + +VELOCITY_ORDER +-------------- + +**Definition** + +Specify the ordering inside the velocity space + +**Choices** + +- VELOCITY_ORDER = 1: species inner loop, energy outer loop +- VELOCITY_ORDER = 2: xi inner loop, species outer loop + +**Comments** + +- DEFAULT = 1 +- VELOCITY_ORDER=2 drastically reduces the cost of communication, but requires MPI rank to be a multiple of both N_TOROIDAL and N_SPECIES. +- The restart file format is specific to VELOCITY_ORDER. + +---- + +.. _cgyro_z: + +Z_* +--- + +**Definition** + +Species charge. First species charge is Z_1, and so on. + +**Comments** + +- DEFAULT = 1 +- A typical case (deuterium, carbon, electrons) would be:: + + Z_1=1 + Z_2=6 + Z_3=-1 + +---- + +.. _cgyro_z_eff: + +Z_EFF +----- + +**Definition** + +User-specified value for :math:`Z_\mathrm{eff}`. + +**Comments** + +- DEFAULT = 1.0 +- Normally this is computed self-consistently by CGYRO, but can be set by the user +- Enabled by setting :ref:`cgyro_z_eff_method` = 1 +- Only allowable with **simple** collision models: :ref:`cgyro_collision_model` = 1 or 5 + +---- + +.. _cgyro_z_eff_method: + +Z_EFF_METHOD +------------ + +**Definition** + +Control how :math:`Z_\mathrm{eff}` is computed. + +**Choices** + +- Z_EFF_METHOD=1: Use value for Z_EFF defined in input.cgyro (or input.gacode) +- Z_EFF_METHOD=2: Compute Z_EFF automatically and self-consistently based on species data **(recommended)** + +**Comments** + +- DEFAULT = 2 +- Only allowable with **simple** collision models: :ref:`cgyro_collision_model` = 1 or 5 + +---- + +.. _cgyro_zeta: + +ZETA +---- + +**Definition** + +Squareness, :math:`\zeta`, of the flux surface. + +**Comments** + +- DEFAULT = 0.0 +- This is only active with :ref:`cgyro_equilibrium_model` = 2 (the Miller equilibrium model). +- When experimental profiles are used (:ref:`cgyro_profile_model` = 2), the squareness as a function of radius is read from input.gacode. + +---- + +.. _cgyro_zf_test_mode: + +ZF_TEST_MODE +------------ + +**Definition** + +Toggle test for time-evolution of a single :math:`k_x` mode (the classic zonal flow test). + +**Choices** + +- ZF_TEST_MODE = 0: No test (default) +- ZF_TEST_MODE = 1: Trigger test + +**Comments** + +- DEFAULT = 0 +- The standard test is to evolve a single radial mode (N_RADIAL=1) +- If N_RADIAL > 1, multiple independent modes will be evolved with :math:`k_x \rho = 2\pi p/L` where :math:`1 \le p \le` N_RADIAL + +---- + +.. _cgyro_zmag: + +ZMAG +---- + +**Definition** + +The ratio :math:`Z_0(r)/a`, where :math:`Z_0` is the :doc:`elevation <../geometry>` and :math:`a` is the radius of the LCFS. + +**Comments** + +- DEFAULT = 0.0 + +---- + + +Return to :doc:`table of inputs ` + + diff --git a/docs/_sources/cgyro/cgyro_table.rst.txt b/docs/_sources/cgyro/cgyro_table.rst.txt new file mode 100644 index 0000000..cfd9f62 --- /dev/null +++ b/docs/_sources/cgyro/cgyro_table.rst.txt @@ -0,0 +1,202 @@ +Tabular list for input.cgyro +============================ + +* :ref:`tab-shape` +* :ref:`tab-advshape` +* :ref:`tab-control` +* :ref:`tab-fields` +* :ref:`tab-resolution` +* :ref:`tab-dissipation` +* :ref:`tab-time` +* :ref:`tab-species` +* :ref:`tab-collisions` +* :ref:`tab-rotation` +* :ref:`tab-global` +* :ref:`tab-output` +* :ref:`tab-optimization` + +.. _tab-shape: + +.. csv-table:: **Plasma shape/geometry** + :header: "input.cgyro parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`cgyro_equilibrium_model`", Geometry model selector,2 + ":ref:`cgyro_rmin`", Normalized minor radius,0.5 + ":ref:`cgyro_rmaj`", Normalized major radius,3.0 + ":ref:`cgyro_shift`", Shafranov shift,0.0 + ":ref:`cgyro_kappa`", Elongation,1.0 + ":ref:`cgyro_s_kappa`", Elongation shear,0.0 + ":ref:`cgyro_delta`", Triangularity,0.0 + ":ref:`cgyro_s_delta`", Triangularity shear,0.0 + ":ref:`cgyro_zeta`", Squareness,0.0 + ":ref:`cgyro_s_zeta`", Squareness shear,0.0 + ":ref:`cgyro_zmag`", Elevation,0.0 + ":ref:`cgyro_dzmag`", Gradient of elevation,0.0 + ":ref:`cgyro_q`", Safety factor,2.0 + ":ref:`cgyro_s`", Magnetic shear,1.0 + ":ref:`cgyro_btccw`", Field orientation,-1.0 + ":ref:`cgyro_ipccw`", Current orientation,-1.0 + ":ref:`cgyro_udsymmetry_flag`", Enforce up-down symmetry,1 + +.. _tab-advshape: + +.. csv-table:: **Advanced shape parameters** + :header: "input.cgyro parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`cgyro_shape_cos0`", Tilt,0.0 + ":ref:`cgyro_shape_s_cos0`", Tilt shear,0.0 + ":ref:`cgyro_shape_cos1`", Ovality,0.0 + ":ref:`cgyro_shape_s_cos1`", Ovality shear,0.0 + ":ref:`cgyro_shape_cos2`", 2nd antisymmetric moment,0.0 + ":ref:`cgyro_shape_s_cos2`", 2nd antisymmetric moment shear,0.0 + ":ref:`cgyro_shape_cos3`", 3rd antisymmetric moment, 0.0 + ":ref:`cgyro_shape_s_cos3`", 3rd antisymmetric moment shear,0.0 + ":ref:`cgyro_shape_sin3`", 3rd symmetric moment, 0.0 + ":ref:`cgyro_shape_s_sin3`", 3rd symmetric moment shear,0.0 + +.. _tab-control: + +.. csv-table:: **Control parameters** + :header: "input.cgyro parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`cgyro_profile_model`", Profile input selector,1 + ":ref:`cgyro_quasineutral_flag`", Toggle quasineutrality,1 + ":ref:`cgyro_nonlinear_flag`", Toggle nonlinear simulation,0 + ":ref:`cgyro_zf_test_mode`", Control zonal flow testing,0 + ":ref:`cgyro_silent_flag`", Toggle silent output,0 + ":ref:`cgyro_amp`", Initial :math:`n>0` amplitude,0.1 + ":ref:`cgyro_amp0`", Initial :math:`n=0` amplitude,0.0 + +.. _tab-fields: + +.. csv-table:: **Fields** + :header: "input.cgyro parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`cgyro_n_field`", Number of fields to evolve,1 + ":ref:`cgyro_betae_unit`", Electron beta,0.0 + ":ref:`cgyro_betae_unit_scale`", Electron beta scaling parameter,0.0 + ":ref:`cgyro_beta_star_scale`", Pressure gradient scaling factor,1.0 + ":ref:`cgyro_lambda_debye`", Debye length,0.0 + ":ref:`cgyro_lambda_debye_scale`", Debye length scaling factor,0.0 + +.. _tab-resolution: + +.. csv-table:: **Numerical Resolution** + :header: "input.cgyro parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`cgyro_n_radial`", Number of radial :math:`k_x^0` wavenumbers,4 + ":ref:`cgyro_box_size`", Radial domain size,1 + ":ref:`cgyro_n_toroidal`", Number of binormal :math:`k_y` wavenumbers,1 + ":ref:`cgyro_ky`", Binormal wavenumber or domain size,0.3 + ":ref:`cgyro_n_theta`", Number of poloidal :math:`\theta` gridpoints,24 + ":ref:`cgyro_n_xi`", Number of pitch angle :math:`\xi` gridpoints,16 + ":ref:`cgyro_n_energy`", Number of energy :math:`u` gridpoints,8 + ":ref:`cgyro_e_max`", Maximum energy ,8.0 + +.. _tab-dissipation: + +.. csv-table:: **Numerical Dissipation** + :header: "input.cgyro parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`cgyro_up_radial`", Radial spectral upwind scaling,1.0 + ":ref:`cgyro_up_theta`", Poloidal upwind scaling,1.0 + ":ref:`cgyro_up_alpha`", Binormal spectral upwind scaling,0.0 + ":ref:`cgyro_nup_radial`", Radial spectral upwind order,3 + ":ref:`cgyro_nup_theta`", Poloidal upwind order,3 + ":ref:`cgyro_nup_alpha`", Binormal spectral upwind order,3 + ":ref:`cgyro_upwind_single_flag`", Use reduced precision communication,0 + +.. _tab-time: + +.. csv-table:: **Time Stepping** + :header: "input.cgyro parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`cgyro_delta_t_method`", Time integrator selection,0 + ":ref:`cgyro_delta_t`", Time step,0.01 + ":ref:`cgyro_error_tol`", Error tolerance,1e-4 + ":ref:`cgyro_max_time`", Simulation time ,1.0 + ":ref:`cgyro_freq_tol`", Error tolerance for frequency,0.001 + ":ref:`cgyro_print_step`", Data output interval,100 + ":ref:`cgyro_restart_step`", Restart data output interval,10 + +.. _tab-species: + +.. csv-table:: **Species-related parameters** + :header: "input.cgyro parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`cgyro_n_species`", Number of GK species (ions plus electrons), 1 + ":ref:`cgyro_z`", Species charge, 1 + ":ref:`cgyro_mass`", Species mass, 1.0 + ":ref:`cgyro_dens`", Species density, 1.0 + ":ref:`cgyro_temp`", Species temperature, 1.0 + ":ref:`cgyro_dlnndr`", Species density gradient, 1.0 + ":ref:`cgyro_dlntdr`", Species temperature gradient, 1.0 + +.. _tab-collisions: + +.. csv-table:: **Collisions** + :header: "input.cgyro parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`cgyro_nu_ee`", Electron-electron collision frequency, 0.1 + ":ref:`cgyro_collision_model`", Collision model selector, 4 + ":ref:`cgyro_collision_field_model`", Toggle self-consistent field update,1 + ":ref:`cgyro_collision_mom_restore`", Toggle momentum conservation,1 + ":ref:`cgyro_collision_ene_restore`", Toggle energy conservation,1 + ":ref:`cgyro_collision_ene_diffusion`", Toggle energy diffusion,1 + ":ref:`cgyro_collision_kperp`", Toggle so-called FLR term, 0 + ":ref:`cgyro_collision_precision_mode`", Reduce Sugama memory use, 0 + +.. _tab-rotation: + +.. csv-table:: **Rotation physics** + :header: "input.cgyro parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`cgyro_rotation_model`", Rotation model selector,1 + ":ref:`cgyro_gamma_e`", Dopper shearing rate (:math:`E \times B` shear), 0.0 + ":ref:`cgyro_gamma_p`", Rotation shearing rate, 0.0 + ":ref:`cgyro_mach`", Rotation speed (Mach number), 0.0 + ":ref:`cgyro_gamma_e_scale`", Doppler shearing rate scaling factor, 1.0 + ":ref:`cgyro_gamma_p_scale`", Rotation shearing rate scaling factor, 1.0 + ":ref:`cgyro_mach_scale`", Rotation speed scaling factor, 1.0 + +.. _tab-global: + +.. csv-table:: **Global-spectral parameters** + :header: "input.cgyro parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`cgyro_n_global`", Global output resolution, 4 + ":ref:`cgyro_nu_global`", Source rate, 15.0 + +.. _tab-output: + +.. csv-table:: **Output file control** + :header: "input.cgyro parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`cgyro_field_print_flag`", Output of electromagnetic field components, 0 + ":ref:`cgyro_moment_print_flag`", Output of density and energy moments, 0 + ":ref:`cgyro_gflux_print_flag`", Output of global flux profiles, 0 + ":ref:`cgyro_h_print_flag`", Output of distribution (single-mode only), 0 + +.. _tab-optimization: + +.. csv-table:: **Optimization related parameters** + :header: "input.cgyro parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`cgyro_toroidals_per_proc`", How many toroidal harmonics per MPI process,1 + ":ref:`cgyro_mpi_rank_order`", Relative ordering of MPI ranks,2 + ":ref:`cgyro_velocity_order`", What internal velocity order to use,1 + ":ref:`cgyro_gpu_bigmem_flag`", Enable GPU offload when possible, 1 + diff --git a/docs/_sources/cgyro/outputs.rst.txt b/docs/_sources/cgyro/outputs.rst.txt new file mode 100644 index 0000000..3d87ff8 --- /dev/null +++ b/docs/_sources/cgyro/outputs.rst.txt @@ -0,0 +1,71 @@ +CGYRO output files +================== + +It is not **not recommended** to read these files directly. Rather, we encourage the use +of the CGYRO python data interface. + + +.. csv-table:: **Time-independent output** + :header: "Filename", "Short description" + :widths: 20, 30 + + out.cgyro.egrid,Energy mesh and various weights + out.cgyro.equilibrium,Physics input data + out.cgyro.grids,Mesh dimensions and coordinates + out.cgyro.hosts,MPI ranks and hostnames + out.cgyro.info,Human-readable description of simulation + out.cgyro.memory,Memory usage statistics + out.cgyro.mpi,Recommendations for choosing MPI tasks and OMP threads + out.cgyro.version,Version information and timestamp for simulation + bin.cgyro.geo,GK equation coefficients versus :math:`\theta` + +.. csv-table:: **Common time-dependent output** + :header: "Filename", "Short description", "Switch" + :widths: 20,25,15 + + out.cgyro.time,Time and error vector + out.cgyro.timing,Kernel timer data + bin.cgyro.freq, Mode frequency vector + bin.cgyro.kxky_phi, ":math:`\delta\phi(k_x^0,k_y,t)`", + bin.cgyro.kxky_apar, ":math:`\delta A_\parallel(k_x^0,k_y,t)`",":ref:`cgyro_field_print_flag` = 1" + bin.cgyro.kxky_bpar, ":math:`\delta B_\parallel(k_x^0,k_y,t)`",":ref:`cgyro_field_print_flag` = 1" + bin.cgyro.kxky_n, ":math:`\delta n_a(k_x^0,k_y,t)`",":ref:`cgyro_moment_print_flag` = 1" + bin.cgyro.kxky_e, ":math:`\delta E_a(k_x^0,k_y,t)`",":ref:`cgyro_moment_print_flag` = 1" + bin.cgyro.kxky_v, ":math:`\delta v_a(k_x^0,k_y,t)`",":ref:`cgyro_moment_print_flag` = 1" + bin.cgyro.ky_flux, ":math:`\Gamma_a, \Pi_a, Q_a` versus :math:`(k_y,t)`" + bin.cgyro.ky_cflux, ":math:`\Gamma_a, \Pi_a, Q_a` (half domain) versus :math:`(k_y,t)`" + +.. csv-table:: **Restart data** + :header: "Filename", "Short description" + :widths: 20, 30 + + out.cgyro.tag,Restart tag file (contains time index and value) + bin.cgyro.restart,Binary restart file + +Output Normalization +-------------------- + +Ion sound gyroradius + +.. math:: + \rho_{s,{\rm unit}} = \frac{c_s}{e B_{\rm unit}/(m_D c)} + +Ion sound speed + +.. math:: + c_s=\sqrt{T_e/m_D} + +gyroBohm particle flux + +.. math:: + \Gamma_{\rm GB} = n_e c_s (\rho_{s,{\rm unit}}/a)^2 + +gyroBohm momentum flux + +.. math:: + \Pi_{\rm GB} = n_e a T_e (\rho_{s,{\rm unit}}/a)^2 + +gyroBohm energy flux + +.. math:: + Q_{\rm GB} = n_e c_s T_e (\rho_{s,{\rm unit}}/a)^2 diff --git a/docs/_sources/cgyro/running_cases.rst.txt b/docs/_sources/cgyro/running_cases.rst.txt new file mode 100644 index 0000000..39503e8 --- /dev/null +++ b/docs/_sources/cgyro/running_cases.rst.txt @@ -0,0 +1,48 @@ +Running Cases +============= + +Quick-start example +------------------- + +:: + + $ cgyro -g reg08 + $ cd reg08 + $ cgyro -e . + $ cgyro_plot -plot ball -field 1 + +.. figure:: figures/out.cgyro.ball.png + :width: 90 % + :alt: Ballooning mode + :align: center + +Command-line usage +------------------ + +The input files and configuration for numerous linear and nonlinear cases can +be auto-generated using the ``-g`` flag. Often, it is easiest to find a template case that is close to what you would like to run, and then modify it accordingly. A list of all regression and template cases in generated by typing:: + + $ cgyro -g + +A very simple nonlinear case is ``nl00``. You can generate the template with:: + + $ cgyro -g nl00 + +It is **strongly suggested** that you first run your case in *test mode* using the ``-t`` flag:: + + $ cgyro -t nl00 + +On the large systems at NERSC, ORNL and elsewhere, you will need to establish an **interactive queue** to execute the command above. The result should be diagnostics printed to the screen plus a few output files. Pay attention to the file ``out.cgyro.mpi``. This shows the acceptable number of MPI tasks. + +Batch submission +---------------- + +On established platforms, the burden of writing batch script files and setting core counts is managed by the ``gacode_qsub`` script. To generate a ``batch.src`` file, you could type:: + + $ gacode_qsub -e nl01 -n 512 -nomp 2 -queue regular -repo atom -w 0:09:00 + +Additional flags are also accepted. Adding the ``-s`` flag to the above will submit the job. + + + + diff --git a/docs/_sources/download.rst.txt b/docs/_sources/download.rst.txt new file mode 100644 index 0000000..605d716 --- /dev/null +++ b/docs/_sources/download.rst.txt @@ -0,0 +1,27 @@ +Download and user agreement +=========================== + +.. include:: USER_AGREEMENT.txt + :literal: + +.. csv-table:: **Appropriate References** + :header: "Physics code", "Topical Area", "Required citation" + :widths: 15,20,20 + + CGYRO, gyrokinetic simulation, ":cite:`candy:2016`" + GYRO, gyrokinetic simulation, ":cite:`candy:2003`" + NEO, neoclassical simulation, ":cite:`belli:2008,belli:2012`" + TGLF, transport model, ":cite:`staebler:2007,staebler:2010`" + TGYRO, profile evolution, ":cite:`candy:2009`" + +Source code +----------- + +Sources are found in the `gacode repository `_ on GitHub. + + +Repository access +----------------- + +Get a (free) account at `GitHub `_ and send your GitHub username to **gacode-AT-fusion.gat.com** with a request for user or developer access. + diff --git a/docs/_sources/geometry.rst.txt b/docs/_sources/geometry.rst.txt new file mode 100644 index 0000000..a27ecbb --- /dev/null +++ b/docs/_sources/geometry.rst.txt @@ -0,0 +1,247 @@ +.. |exb| mathmacro:: \mathbf{E}\times\mathbf{B} +.. |B| mathmacro:: \mathbf{B} +.. |jp| mathmacro:: {\mathcal J}_\psi + +FLUX-SURFACE GEOMETRY +===================== + +Clebsch coordinates +------------------- + +GYRO/CGYRO/NEO use a right-handed (positively-oriented), field-aligned coordinate system +:math:`(r,\theta,\alpha)` and the Clebsch field representation :cite:`kruskal:1958` + +.. math:: + + \B = \nabla\alpha\times\nabla\psi \quad \text{such that} \quad\B\cdot\nabla\alpha = \B\cdot\nabla\psi = 0 + + +where :math:`\psi` is the poloidal flux divided by :math:`2\pi` and + +.. math:: + + \alpha =\varphi +\nu (r,\theta) + +is the Clebsch angle. Here, :math:`\varphi` is the **toroidal angle**, oriented as shown +in the figure below, and :math:`\theta` is the **poloidal angle** which increases as one +moves counterclockwise along the flux-surface (shown in blue). In these coordinates, the Jacobian is + +.. math:: + + \jp \doteq \frac{1}{\nabla\psi\times\nabla\theta\cdot\nabla\alpha} = \frac{1}{\nabla\psi\times\nabla\theta\cdot\nabla\varphi} \; . + +Since the coordinates :math:`(\psi,\theta,\alpha)` and :math:`(\psi,\theta,\varphi)` form right-handed systems, the Jacobian :math:`\jp` is positive-definite. In the latter coordinates, the magnetic field becomes + +.. math:: + \B = \nabla\varphi\times\nabla\psi + \frac{\partial \nu}{\partial \theta} \nabla\theta\times\nabla\psi + +Using the definition of the safety factor, :math:`q(\psi)`, we may deduce + +.. math:: + + q(\psi) \doteq \frac{1}{2\pi} \int_0^{2\pi} \frac{\B\cdot\nabla\varphi}{\B\cdot\nabla\theta} \, d\theta = \frac{1}{2\pi} \int_0^{2\pi} \left( -\frac{\partial \nu}{\partial \theta} \right) \, d\theta = \frac{\nu(\psi,0)-\nu(\psi,2\pi)}{2\pi} \; . + +.. math:: + +For concreteness, we choose the following boundary conditions for :math:`\nu`: + +.. math:: + \nu(\psi,2\pi) = &~-2\pi \, q(\psi) \; , \\ + \nu(\psi,0) = &~0 \; . + +By writing :math:`\B` in the standard form + +.. math:: + + \B = \nabla\varphi\times\nabla\psi + I(\psi) \nabla\varphi \; , + +we can derive the following integral for :math:`\nu`: + +.. math:: + \nu(\psi,\theta) = -I(\psi)\int_0^\theta \jp \left|\nabla\varphi\right|^2 d\theta\; . + +In the case of concentric (unshifted) circular flux surfaces, one will obtain the approximate result +:math:`\nu(\psi,\theta) \sim -q(\psi)\theta`. Finally, we remark that the coordinate systems :math:`(R,Z,\varphi)` and :math:`(r,\theta,\varphi)` are positively oriented. + +Bounding-box method +------------------- + +In the MXH parameterization :cite:`arbon:2020`, we use the bounding-box method to define + +* **minor radius** :math:`r` +* **major radius** :math:`R_0` +* **elongation** :math:`\kappa` +* **elevation** :math:`Z_0` + +via the flux-surface contour extrema + +.. math:: + + 2 r = & \max_\ell(R) - \min_\ell(R) \; , \\ + 2 \kappa r = & \max_\ell(Z) - \min_\ell(Z) \; , \\ + 2 R_0 = & \max_\ell(R) + \min_\ell(R) \; , \\ + 2 Z_0 = & \max_\ell(Z) + \min_\ell(Z) \; . + +Effective field +--------------- + +The effective field strength, :math:`B_{\rm {unit}}`, is defined as + +.. math:: + + B_\mathrm{unit} = \frac{1}{r} \frac{d\chi _{t}}{dr} \; , + +where :math:`\chi _{t}` is the toroidal flux divided by :math:`2\pi`. This gives the +roughly equivalent field that would be obtained if the flux surface was deformed to a circle. + +Equilibria +---------- + +GYRO/CGYRO/NEO can be run using **circular equilibrium** or **shaped Grad-Shafranov equilibrium**. + +**(1) Circular equilibrium** + +The flux surfaces, which are **not** local G-S equilibria, have the form: + + .. math:: + + R(r,\theta) &= R_0 + r \cos \theta \\ + Z(r,\theta) &= r \sin \theta \\ + +where :math:`\nu(r,\theta) = -q(r) \theta`. + +- CGYRO: :ref:`cgyro_equilibrium_model` = 1 +- NEO: :ref:`neo_equilibrium_model` = 0 + +**(2) Shaped Grad-Shafranov equilibrium** + +The flux surfaces, which are local G-S equilibria, have the new MXH3 parameterization :cite:`arbon:2020`: + +.. math:: + + R(r,\theta) &= R_0(r) + r \cos \theta_R \\ + Z(r,\theta) &= Z_0(r) + \kappa(r) r \sin \theta + +where :math:`\nu(r,\theta)` is computed numerically. The harmonic angle :math:`\theta_R` is + +.. math:: + + \theta_R = \theta + c_0(r) + \sum_{n=1}^{3} \left[ c_n(r) \cos n \theta + s_n(r) \sin n \theta \right] + + +- :math:`c_n` are *anti-symmetric* moments and :math:`s_n` are *symmetric* moments. +- CGYRO: :ref:`cgyro_equilibrium_model` = 2 +- NEO: :ref:`neo_equilibrium_model` = 2 or :ref:`neo_profile_equilibrium_model` = 1 +- For experimental profiles, shape parameters are auto-generated from profile data. + +.. figure:: images/mxh.png + :width: 90 % + :alt: Shape moments + :align: center + +Table of geometry parameters +---------------------------- + +.. csv-table:: + :header: "Symbol", "input.cgyro parameter", "input.neo parameter", "meaning" + :widths: 5, 5, 5, 5 + + :math:`r/a`, :ref:`cgyro_rmin`, :ref:`neo_rmin_over_a`, minor radius + :math:`R_0(r)/a`, :ref:`cgyro_rmaj`, :ref:`neo_rmaj_over_a`, major radius + :math:`\partial R_0/\partial r`, :ref:`cgyro_shift`,:ref:`neo_shift`, Shafranov shift + :math:`Z_0(r)/a`, :ref:`cgyro_zmag`,:ref:`neo_zmag_over_a`, elevation + :math:`\partial Z_0/\partial r`, :ref:`cgyro_dzmag`,:ref:`neo_s_zmag`,elevation shift + :math:`q`, :ref:`cgyro_q`, :ref:`neo_q`, safety factor + :math:`s`, :ref:`cgyro_s`, :ref:`neo_shear`, shear + :math:`\kappa`, :ref:`cgyro_kappa`,:ref:`neo_kappa`, elongation + :math:`s_\kappa`, :ref:`cgyro_s_kappa`,:ref:`neo_s_kappa` + :math:`\delta = \sin s_1`, :ref:`cgyro_delta`,:ref:`neo_delta`, triangularity + :math:`s_\delta`, :ref:`cgyro_s_delta`,:ref:`neo_s_delta` + :math:`\zeta = -s_2`, :ref:`cgyro_zeta`,:ref:`neo_zeta`, squareness + :math:`s_\zeta`, :ref:`cgyro_s_zeta`,:ref:`neo_s_zeta` + :math:`c_0`, :ref:`cgyro_shape_cos0`,:ref:`neo_shape_cos0`, tilt + :math:`s_{c_0}`, :ref:`cgyro_shape_s_cos0`,:ref:`neo_shape_s_cos0` + :math:`c_1`, :ref:`cgyro_shape_cos1`,:ref:`neo_shape_cos1`, ovality + :math:`s_{c_1}`, :ref:`cgyro_shape_s_cos1`,:ref:`neo_shape_s_cos1` + :math:`c_2`, :ref:`cgyro_shape_cos2`,:ref:`neo_shape_cos2` + :math:`s_{c_2}`, :ref:`cgyro_shape_s_cos2`,:ref:`neo_shape_s_cos2` + :math:`c_3`, :ref:`cgyro_shape_cos3`,:ref:`neo_shape_cos3` + :math:`s_{c_3}`, :ref:`cgyro_shape_s_cos3`,:ref:`neo_shape_s_cos3` + :math:`s_3`, :ref:`cgyro_shape_sin3`,:ref:`neo_shape_sin3` + :math:`s_{s_3}`, :ref:`cgyro_shape_s_sin3`,:ref:`neo_shape_s_sin3` + :math:`\beta_e`, :ref:`cgyro_betae_unit`, NA + :math:`\beta_*` scaling, :ref:`cgyro_beta_star_scale`, :ref:`neo_beta_star` + BTCCW, :ref:`cgyro_btccw`, :ref:`neo_btccw` + IPCCW, :ref:`cgyro_ipccw`, :ref:`neo_ipccw` + +For further information about geometry and normalization conventions, consult the GYRO Technical Guide :cite:`candy:2010`. + +Magnetic field orientation +-------------------------- + +GACODE uses a right-handed (positively-oriented), field-aligned coordinate system :math:`(r,\theta,\varphi)`, whereas DIII-D uses a (positively-oriented) cylindrical system :math:`(R,\phi,Z)`. Looking down on the tokamak from above, the orientation of the GACODE toroidal angle is clockwise, whereas the DIII-D toroidal angle is counter-clockwise: + +.. figure:: images/Orient_gacode.png + :scale: 100% + :alt: flux surface + :align: center + +.. figure:: images/Orient_d3d.png + :scale: 100% + :alt: flux surface + :align: center + +In reality, quantities like the safety factor and poloidal flux have definite signs. Historically, these signs have been suppressed or neglected in both theory and modeling. For proper treatment of momentum transport, however, these signs must be retained. We can infer typically neglected signs by knowing :ref:`cgyro_ipccw` and :ref:`cgyro_btccw`. For example: + +- sign(:math:`B_{\rm tor}`) = -BTCCW +- sign(:math:`B_{\rm pol}`) = -IPCCW +- sign(:math:`\psi_{\rm pol}`) = -IPCCW +- sign(:math:`q`) = IPCCW :math:`\times` BTCCW + +The standard configuration in DIII-D is shown below. + +.. figure:: images/Orient_d3d_standard.png + :scale: 100% + :alt: flux surface + :align: center + +This corresponds to :ref:`cgyro_ipccw` = 1 and :ref:`cgyro_btccw` =-1. Thus, in GACODE coordinates, we expect: + +- sign(:math:`B_{\rm tor}`) = 1 +- sign(:math:`B_{\rm pol}`) = -1 +- sign(:math:`\psi_{\rm pol}`) = -1 +- sign(:math:`q`) = -1 + + In other words, the safety factor and poloidal flux are negative in the typical case. This will be reflected in a properly-constructed :doc:`input.gacode ` file. + +Toroidal and poloidal flux +-------------------------- + +We can start from the general forms of the toroidal and poloidal fluxes :cite:`dhaeseleer:1991` + +.. math:: + \Psi_t \doteq &~\iint\limits_{S_t} \B \cdot d{\bf S} = \frac{1}{2\pi} \iiint\limits_{V_t} \B \cdot \nabla\varphi \, dV \; , \\ + \Psi_p \doteq &~\iint\limits_{S_p} \B \cdot d{\bf S} = \frac{1}{2\pi} \iiint\limits_{V_p} \B \cdot \nabla\theta \, dV \; . + +Explicitly inserting the field-aligned coordinate system of the previous section, and differentiating these with respect to :math:`\psi`, gives + +.. math:: + \frac{d\Psi_t}{d\psi} = &~\frac{1}{2\pi} \int_0^{2\pi} d\varphi \int_0^{2\pi} d\theta \,\, \B\cdot\nabla\varphi \, \jp \; , \\ + = &~\frac{1}{2\pi} \int_0^{2\pi} d\varphi \int_0^{2\pi} d\theta \,\, \frac{\B\cdot\nabla\varphi}{\B\cdot\nabla\theta} \; , \\ + = &~2 \pi \, q(\psi) \; , + +.. math:: + \frac{d\Psi_p}{d\psi} = &~\frac{1}{2\pi} \int_0^{2\pi} d\varphi \int_0^{2\pi} d\theta + \,\, \B\cdot\nabla\theta \, \jp \; , \\ + = &~\frac{1}{2\pi} \int_0^{2\pi} d\varphi \int_0^{2\pi} d\theta \; , \\ + = &~2 \pi \; . + +Thus, :math:`\psi` is the poloidal flux divided by :math:`2\pi`. For this reason, it is useful to also define the toroidal flux divided by :math:`2\pi`: + +.. math:: + \chi_t \doteq \frac{1}{2\pi} \Psi_t\; . + +According to these conventions, + +.. math:: + d\Psi_t = q \, d\Psi_p \quad \mbox{and} \quad d\chi_t = q \, d\psi \; . diff --git a/docs/_sources/gyro.rst.txt b/docs/_sources/gyro.rst.txt new file mode 100644 index 0000000..45ad3ec --- /dev/null +++ b/docs/_sources/gyro.rst.txt @@ -0,0 +1,26 @@ +GYRO +==== + +.. image:: gyro/figures/supertorus-hi-2.jpg + :width: 95 % + :alt: Classic GYRO torus + +Quick links +----------- + +.. toctree:: + :titlesonly: + + gyro/gyro_table + gyro/gyro_list + gyro/gyro_vv + gyro/gyro_history + gyro/gyro_gallery + +Overview +-------- + +GYRO :cite:`candy:2003,candy:2003b,candy:2004a,candy:2010` is a legacy multi-species global electromagnetic gyrokinetic solver. Thousands of nonlinear simulations with GYRO have informed the fusion community's understanding of core plasma turbulence :cite:`estrada:2005,kinsey:2005,kinsey:2006,kinsey:2007,howard:2016b` +and provided a *transport database* for the calibration of reduced transport models such as TGLF :cite:`staebler:2007`. GYRO was the first -- and for many years the only -- global electromagnetic solver. It pioneered the development of numerical algorithms for the GK equations with kinetic electrons. GYRO is formulated in real space and like all global solvers requires *ad hoc* absorbing-layer boundary conditions when simulating cases with profile variation. This approach is suitable for core turbulence simulations, which cover a large radial region and are dominated by low wavenumbers. More recently, as the understanding of core transport has become increasingly complete, the cutting edge of research moved radially toward the pedestal region, where plasmas are characterized by larger collisionality and steeper pressure gradients that greatly modify the turbulent phenomena at play. This motivated the development, from scratch, of the :doc:`CGYRO ` code :cite:`candy:2016,belli:2017,candy:2018,belli:2018` to complement GYRO. + +For the interested reader we offer a :doc:`brief history of gyrokinetic simulation`, including some idiosyncratic and possibly forgotten aspects of gyrokinetic research in the 2000s. We also reproduce a :doc:`summary of GYRO verification and validation results` from the same era. diff --git a/docs/_sources/gyro/gyro_gallery.rst.txt b/docs/_sources/gyro/gyro_gallery.rst.txt new file mode 100644 index 0000000..53d1743 --- /dev/null +++ b/docs/_sources/gyro/gyro_gallery.rst.txt @@ -0,0 +1,26 @@ +Gallery of classic GYRO images (circa 2003) +=========================================== + + +.. figure:: figures/supertorus-hi-1.jpg + :width: 75 % + :alt: High resolution torus, linear phase + :align: center + +.. figure:: figures/supertorus-hi-2.jpg + :width: 75 % + :alt: High resolution torus, nonlinear phase + :align: center + +.. figure:: figures/candy-torus-1.jpg + :width: 75 % + :alt: Close-up torus, linear phase + :align: center + +.. figure:: figures/candy-torus-2.jpg + :width: 75 % + :alt: Close-up torus, nonlinear phase + :align: center + + +To use these figures in a presentation or publication, please include attribution *Figures courtesy J. Candy and R. Waltz, General Atomics* and the image URL. diff --git a/docs/_sources/gyro/gyro_history.rst.txt b/docs/_sources/gyro/gyro_history.rst.txt new file mode 100644 index 0000000..85560a4 --- /dev/null +++ b/docs/_sources/gyro/gyro_history.rst.txt @@ -0,0 +1,159 @@ +.. |exb| mathmacro:: \mathbf{E}\times\mathbf{B} + +Gyrokinetic Simulation in the 2000s +=================================== + +*[This overview was written during the period 2006-2009]* + +---- + +In the text below we describe the prehistory, history and present use of the GYRO code. A broad spectrum of published code applications is summarized, and the key role played by GYRO within the US fusion program is clarified. More historical details can be found in the Spring 2008 Issue of SciDAC review, whereas the +`Technical Manual `_ provides a detailed description of the underlying equations and discretization schemes. + +Prehistory +---------- + +The use of gyrokinetic codes at General Atomics began in 1994 with the acquisition of the linear gyrokinetic stability code GSTOTAL :cite:`kotschenreuther:1995`. GSTOTAL was an Eulerian initial-value code with trapped and passing particles (ions and electrons) as well as collisional and electromagnetic physics. GSTOTAL represented an enormous technical advance in simulation capability, comparable in significance to Kotschenreuther's prior invention of the well-known :math:`\delta f` method :cite:`kotschenreuther:1988` for particle simulation. The time-advance scheme in GSTOTAL was *fully implicit* and allowed use of timesteps much larger than those imposed by the electron parallel Courant limit. Historically speaking, GSTOTAL was the first step toward a practical *nonlinear* gyrokinetic code. With the addition of plasma shaping and finite-:math:`\delta B` effects, GSTOTAL evolved into the linear stability code GKS. GKS has been routinely used in DIII-D experimental studies for over a decade. Combined with results from nonlinear flux-tube gyrofluid simulations :cite:`waltz:1994,waltz:1995`, GKS was crucial in the development of GLF23 :cite:`waltz:1997`, one of the most popular transport models worldwide. + +In what follows, we will draw a distinction between local and global simulations. In this context, *local* means *flux-tube*. Flux-tube simulations represent the :math:`\rho_* \rightarrow 0` limit of global simulations, for which the transport scaling is purely gyroBohm :cite:`candy:2004a` [1]_. Here, :math:`\rho_* = \rho_s/a` is the ratio of gyroradius to system size, with :math:`\rho_s` the ion-sound Larmor radius, and :math:`a` the plasma minor radius. + +Nonlinear flux-tube ''gyrofluid'' simulations by Beer, Dorland, Hammett, Snyder, Waltz and others provided the key physics discoveries in the mid-1990s, years before the same phenomena were observed in gyrokinetic simulations. + +.. important:: Gyrofluid simulations demonstrated that nonlinear, self-generated (zonal) flows control the nonlinear saturation of transport :cite:`waltz:1994,waltz:1995,dorland:1993,hammett:1994,beer:1996b`, and that equilibrium :math:`\exb` shear can quench transport if the shearing rates are comparable to maximum linear growth rates :cite:`waltz:1994,waltz:1995`. + +Nonlinear gyrofluid codes were the first to treat trapped electron :cite:`beer:1996` and electromagnetic :cite:`snyder:2001` turbulence. The first major contribution from nonlinear *gyrokinetic* codes was the verification of the importance of Rosenbluth-Hinton (RH) residual flows :cite:`rosenbluth:1998` as demonstrated by the flux-tube particle-in-cell (PIC) code PG3EQ :cite:`dimits:1996`. RH flows were shown to give rise to an upshift in the nonlinear threshold for ITG-ae [2]_ turbulence. The nonlinear upshift was later named the *Dimits shift* after its discoverer. The difficulty in properly treating this residual in gyrofluid models was one motivating factor for a switch from gyrofluid to gyrokinetic simulation. To this end, by building upon the GSTOTAL implicit scheme, Dorland and co-workers created the **nonlinear Eulerian gyrokinetic code** GS2 :cite:`dorland:2000`. + +.. important:: GS2 :cite:`dorland:2000` was the first nonlinear gyrokinetic code to include the crucial nonadiabatic electron dynamics required for trapped electron mode and electromagnetic physics. + +Design History +-------------- + +Development of GYRO started in 1999. The primary goal was to generalize GS2 by retaining profile-variation effects to allow, in principle, deviations from pure gyroBohm scaling. The numerical methods for GYRO were initially patterned after GS2 wherever possible. In the end, many significant departures from GS2 were required to meet the GYRO design target *and* to simultaneously increase computational efficiency. + +.. important:: By 2001, GYRO had the ability to operate either globally using Dirichlet (zero-value) radial boundary conditions, or locally using flux-tube (periodic) boundary conditions. + +An implicit-explicit Runge-Kutta (IMEX-RK) integrator was eventually added to overcome the electrostatic-Alfvén wave Courant limit, which can severely limit the timestep for large-domain simulations. Independently, a novel poloidal discretization scheme solved the **Ampere cancellation problem** :cite:`candy:2003`. The latter pathology hampered electromagnetic PIC simulation for over a decade. To date, only a single PIC code :cite:`chen:2003` has successfully treated finite-:math:`\beta` fluctuations with full electron dynamics, and only after implementing an analog of the GYRO scheme. + +.. important:: By 2002, GYRO :cite:`candy:2003` achieved robust operation with its physics design targets. This was demonstrated :cite:`candy:2003b` in realistic simulations of dimensionally similar Bohm scaled DIII-D L-mode discharges. + +Yearly Publication Synopsis +--------------------------- + +2002 +^^^^ + +The first application of GYRO was to use the global capability with adiabatic electons to systematically examine the breaking of gyroBohm scaling (including what are now called, somewhat ambiguously, *nonlocal* or *turbulence spreading* effects) via profile variation :cite:`waltz:2002`. + +2003 +^^^^ + +GYRO numerical algorithms were documented :cite:`candy:2003`, although publication was significantly delayed after the first submission was lost in transit. A significant amount of linear and nonlinear benchmark data related to the Cyclone base case was given, as were parameter scans for nonlinear electromagnetic variants of the Cyclone case. On the experimental side, simulations of DIII-D L-mode discharges were shown to match experimental power flow data within error bars :cite:`candy:2003b` on the ion temperature gradient. These simulations were physically realistic, and included finite-:math:`\beta` effects, and collisional electron physics at real mass ratio, equilibrium :math:`\exb` and profile shearing, as well as plasma shaping. + +2004 +^^^^ + +Turbulent dynamos in the tokamak current-voltage relation :cite:`hinton:2004` were studied, showing that the turbulent dynamo EMF drives large current density corrugations at low-order rational surfaces, but little net current. In other work, we attempted to correct misunderstanding generated by a highly-publicized global :math:`\rho_*`-scan :cite:`lin:2002` with highly artificial profiles. The single scan appeared to suggest a universal range in :math:`\rho_*` marking the transition from Bohm to gyroBohm scaling. GYRO work established that the transition **cannot** be characterized by a universal curve; rather, the transition is highly dependent on the profile shape :cite:`candy:2004a` [3]_. + +During this period, there were persistent claims from certain groups that transport is depressed near a :math:`q_\mathrm{min}`-surface where there is a *gap* in singular surfaces :cite:`kishimoto:2000`. Global GYRO simulations indicated that transport flows tends to vary monotonically across :math:`q_\mathrm{min}` surfaces :cite:`candy:2004b` (as expected from linear theory and flux-tube gyrofluid simulations :cite:`waltz:1994,waltz:1995`) due to the appearance of nonresonant modes. These modes are absent in some simplified gyrofluid simulations which at first appeared to confirm the barrier hypothesis. + +2005 +^^^^ + +The first systematic gyrokinetic study of particle transport and impurity dynamics was made with GYRO as thesis work for a UCSD graduate student. In particular, temperature-gradient-induced particle pinches, thermal and energetic helium ash transport, differential flows in D-T plasmas, and collisional effects on particle pinches were examined :cite:`estrada:2005`. Scans in temperature and density gradients (moving from ITG- to TEM-dominated transport), :math:`T_i/T_e`, :math:`\exb` and parallel velocity shear :cite:`kinsey:2005` were also published. + +A detailed study of the beta dependence of electron and ion transport was made :cite:`candy:2005`. This latter work documents the so-called *beta runaway* phenomenon, which occurs at about half of the MHD crictical beta; as of Winter 2009, it remains an unsolved problem in gyrokinetics. + +Using a profile feedback scheme, simulations starting with DIII-D L-mode profiles successfully (and slightly) relaxed the experimental temperature and density so that simulated power flows matched experimental ones :cite:`waltz:2005`. This sort of capability was an early landmark in the development of a more comprehensive steady-state gyrokinetic transport code. GYRO simulations also yielded several examples of nonlocal transport :cite:`waltz:2005b,waltz:2005c`; in particular, turbulence *draining* from unstable to less unstable (or stable) regions. At this time, the detailed radial structure of nonlinear profile perturbations was also explored: persistent (i.e., time-averaged) structure tied to rational surfaces :cite:`waltz:2005,candy:2005` was found when electrons are kinetic. These *corrugation* structures are electrostatic in nature, and most pronounced for lower-order surfaces + +.. math:: q = \frac{1}{1}, \frac{2}{1}, \frac{3}{1}, \ldots \; , + +and are weaker for successively higher-order surfaces, like + +.. math:: q = \frac{1}{2}, \frac{3}{2}, \frac{5}{2}, \ldots \; . + +The width of these structures is on the order of a few ion gyroradii. + +2006 +^^^^ + +GYRO results showed that ITG/TEM turbulence could induce the transport of energetic fusion alpha particles :cite:`estrada:2006b`. Systematic safety factor, magnetic shear, and MHD alpha parameter scans :cite:`kinsey:2006` were carried out. Theory and simulations of gyrokinetic turbulent heating :cite:`hinton:2006` were published. GYRO simulations which perfectly project profiles from dimensionally similar DIII-D discharges verified that the L-modes did indeed have Bohm scaling, and that the experimentally-inferred gyroBohm scaling in some H-modes was actually due to experimental profile *dissimilarity* :cite:`waltz:2006`. The predicted *profile corrugations* in the electron temperature gradient were observed in :math:`q_\mathrm{min} = 2` DIII-D discharges, and the attending :math:`\exb` shear layer is believed to be the trigger for low-power reversed shear ITB formation :cite:`waltz:2006a`. Density peaking via a particle pinch was demonstrated for a DIII-D L-mode plasma :cite:`estrada:2006`. + +In studies relating to the foundation of gyrokinetic theory, the connection between velocity-space resolution, entropy production and conservation, and numerical dissipation was rigorously demonstrated :cite:`candy:2006`, and the parallel nonlinearity was shown to be asymptotically subdominant (as required by the gyrokinetic ordering) to have a negligible effect on energy transport for experimentally-relevant discharges :cite:`candy:2006b`. + +2007 +^^^^ + +The capability to simultaneously treat electron and ion gyroaverages, and thus to perform fully-coupled, multi-scale ITG-ETG simulations, was added to GYRO :cite:`candy:2007b`. The results of these simulations allowed us to make significant progress on the problem of electron-scale transport using coupled ITG/TEM-ETG turbulence at a reduced ion-to-electron mass ratio. We were able to + +* identify the failure of the popular adiabatic ion model of ETG transport :cite:`candy:2007`, +* demonstrate the isotropy of short-wavelength fluctuations :cite:`waltz:2007,candy:2007` in the presence of long-wavelength ITG/TEM instabilities, +* demonstrate the potential for ITG/TEM-scale instabilities to drive ETG transport in ETG-stable regimes :cite:`waltz:2007`, +* demonstrate the potential for ETG transport to decouple from ITG transport in regimes where both are unstable :cite:`waltz:2007`, +* demonstrate the reduction of ETG-transport by increasing ITG/TEM free energy :cite:`candy:2007b`, +* demonstrate a *universal range* for ETG transport :cite:`candy:2007b`, +* clarify :download:`errors made in previous PIC simulations of ETG turbulence ` . + +The first systematic studies of gyrokinetic momentum transport :cite:`waltz:2007b`, including the effects of the angular momentum pinch from :math:`\exb` shear as well as the coriolis pinch, were published, and the effect of plasma shape on :math:`\exb` shear quenching and transport was studied :cite:`kinsey:2007`. + +2008 +^^^^ + +The next step in the validation of GYRO was also begun, with the development and application of synthetic BES and CECE diagnostics to allow direct comparisons of GYRO fluctuation predictions against DIII-D core turbulence measurements. The initial results have been presented at a number of conferences and published in multiple journals :cite:`white:2008,holland:2008`. The initial study focused upon modeling a steady, MHD-free L-mode DIII-D discharge, with the primary conclusions that: + +1. Using local, fixed-gradient simulations, GYRO could match the *experimental* (as calculated via a ONETWO power balance analysis) energy flows within experimental gradient uncertainties for :math:`r/a < 0.6` (where :math:`r/a` denotes normalized toroidal flux), but systematically underpredicted the energy flow at larger radii. +2. When the effects of the synthetic diagnostics were included, local GYRO simulations also accurately reproduced measured fluctuation spectra and correlation lengths at :math:`r/a = 0.5`, but underpredicted the measured fluctuation amplitudes at :math:`r/a = 0.75` by an amount consistent with the underprediction of the energy fluxes. Interestingly, the shapes of the spectra and the correlation functions were still accurately reproduced at :math:`r/a = 0.75`. + +What the source of the energy flow underprediction is, why the correlation functions and spectral shapes but not amplitudes are accurately predicted at :math:`r/a = 0.75`, and whether these results hold for other experimental conditions remain open questions under active investigation at this time. + +More results related to gyrokinetic turbulent heating :cite:`waltz:2008` were published, and a study of GAMs in the context of the drift-wave-zonal-flow paradigm was carried out :cite:`waltz:2008b` showing that it applies equally well to long-wavelength ITG/TEM and short-wavelength ETG turbulence. + +Significant progress on **neoclassical** and **steady-state transport physics** was also made; these lines of research have a separate wiki. + +2009 +^^^^ + +Researchers from MIT were able to demonstrate good agreement between GYRO and C-Mod experiment via synthetic PCI diagnostics :cite:`llin:2009`. + + +A Computational Science and User Perspective +-------------------------------------------- + +GYRO owes it's computational efficiency in part to the strong support from the ORNL Center for Computational Science (CCS). GYRO runs well on a wide range of small clusters to large supercomputers. One can move between platforms seamlessly by setting a **single environment variable**. GYRO was among the earliest applications ported to the Cray X1 and XT3 at ORNL. The code is modular and the layout is carefully organized. There are few uses of esoteric language features. Initial X1 optimizations to take advantage of multistreaming and vectorization were quite successful for all but the collision operator. A later effort to improve the performance on the collision operator yielded a factor-of-ten improvement on the X1, with an average 10% improvement on IBM and commodity systems. Recent PERC data is available which analyzes GYRO performance on various HPC systems :cite:`worley:2005` using the IPM, KOJAK, SvPablo, TAU and PMaC modeling tool suite. Additional GYRO performance data on various systems (including the Cray X1, XD1 and XT3) has been presented by Vetter :cite:`vetter:2005`, Worley :cite:`worley:2005b` and Fahey :cite:`fahey:2004`. GYRO is presently so reliable that it is routinely used by ORNL staff to diagnose *system hardware and software issues*. For example, chassis interconnect problems on the XD1, filesystem slowdown in the XT3, and memory management issues on the SGI Altix. + +From the point of view of *utility*, the Eulerian codes GS2 and GYRO are set apart from all other codes in the US program in that they have a large (and growing) non-developer users group. Numerous painstaking simulations of DIII-D, JET, JT60, and NSTX discharges have been made. R. Bravenec and C. Holland have developed synthetic diagnostic tools to analyze GYRO data. + +In addition to many Cyclone-based scans, we maintain a :download:`transport database ` containing over 300 well-resolved flux tube simulations based on the GA standard case parameters :cite:`waltz:1997`. Nearly all of these give particle and energy transport coefficients for both electrons and ions. Some also include momentum transport. Additional scans are continuously being added to the database. In our view, compiling a database of simulations is a key practical end-product of nonlinear gyrokinetic simulations. This database provides the benchmarks and validation for the GA advanced gyrofluid transport model TGLF :cite:`staebler:2005,staebler:2007`. + +Urban Legends +------------- + +The Eulerian codes GS2 and GYRO have had to confront a number +of `urban legends `_ mostly in the form of unpublished/unsubstantiated claims circulating within the fusion theory community. These seem to originate from researchers having no first-hand experience with either Eulerian schemes or local simulations. We number these for future reference. + +UL1: The local gyroBohm limit of global codes differs from local codes +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This cannot be true. As :math:`\rho_*` vanishes, the transport obtained from a global code reaches a limiting value at a given radial location. This limiting value (i.e., the gyroBohm scaled limit) is identical to the local simulation result. This not only provides the physical meaning of a local simulation, but is an important test of validity for local and global codes alike. GYRO has passed this test repeatedly :cite:`candy:2004a,waltz:2002`. + +UL2: Full torus simulations are necessary to correctly compute the local transport +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +DIII-D full-physics simulations which span 1/6th of a torus, 1/3rd of a torus, 1/2 of a torus, and a full torus give transport diffusivities which differ only by few percent :cite:`waltz:2005`. In fact, full-torus simulations are generally wasteful of computer resources. Global codes which are limited to full torus operation could obtain significantly more accurate results by simulating only a fraction of a torus but operating with a higher number of particles per cell and/or spatial resolution. + +UL3: Eulerian codes have inadequate velocity-space resolution +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The truth is in fact quite the opposite. Published GYRO simulations are always checked for adequate grid convergence by the standard method of grid refinement. GYRO has a particularly efficient velocity-space discretization scheme which suffers no accuracy loss even when the distribution is nearly discontinuous across the trapped-passing boundary. We typically use 128 velocity gridpoints per real-space cell. This is roughly equivalent to 128 particles per cell (PPC) in terms of points where the distribution function is known. We emphasize that this was, until recently, **significantly more** than that typically used in PIC simulations [4]_. We have verified that no significant fine-scale structure in the distribution is being ignored or ''coarse-grained''. Recent GYRO work :cite:`candy:2006` demonstrates a detailed steady-state balance between production of fluctuations and (numerical) dissipation, thus resolving the *entropy paradox* in a manner consistent with the picture developed by Krommes :cite:`krommes:1994,krommes:1999`. The numerical dissipation is also shown to be so small that it does not affect the observed transport. + +UL4: The parallel nonlinearity can have a dramatic effect on the transport +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +This is false for realistic core tokamak parameters. The so-called parallel nonlinearity (a velocity-space nonlinearity which is formally one order smaller in :math:`\rho_*` than other terms in the gyrokinetic equations) is only one of several small terms commonly neglected in the standard operation of gyrokinetic codes. GYRO has shown :cite:`candy:2006b` that the parallel nonlinearity has no statistically significant effect on the diagnosed transport when :math:`\rho_* < 0.01`. Moreover, the parallel nonlinearity has nothing whatsoever to do with the entropy paradox or with producing steady-states of turbulence. To be clear the parallel nonlinearity (related to the nonlinear Landau damping and to wave-particle trapping) is the physical origin of a small turbulent heating source. GYRO is the first code to diagnostically calculate this heating :cite:`hinton:2006`. + +.. [1] Practically speaking, global simulations allow modest profile variation within the simulation domain, where local simulations consider fixed temperature, density, shape, etc. Even global simulations, however, must enforce the formal restrictions imposed by the gyrokinetic ordering. + +.. [2] Here, ITG-ae means ion-temperature-gradient modes with adiabatic electrons. + +.. [3] The transition is also dependent on the closeness to marginality :cite:`candy:2003b,waltz:2002`. + +.. [4] Since the publication of the Nevins-Hammett theory of PIC noise :cite:`nevins:2005`, the typical number of particles per cell in PIC simulations seems to have grown, whereas the GYRO resolution has remain unchanged over approximately 6 years and probably over a thousand simulations. diff --git a/docs/_sources/gyro/gyro_list.rst.txt b/docs/_sources/gyro/gyro_list.rst.txt new file mode 100644 index 0000000..d036f14 --- /dev/null +++ b/docs/_sources/gyro/gyro_list.rst.txt @@ -0,0 +1,28 @@ +.. |exb| mathmacro:: \mathbf{E}\times\mathbf{B} +.. |dphi| mathmacro:: \delta\phi +.. |dap| mathmacro:: \delta A_\parallel +.. |dbp| mathmacro:: \delta B_\parallel + +Alphabetical list for input.gyro +================================ + +.. _gyro_amp_phi_n: + +AMP_PHI_N +--------- + +**Definition** + +Initial amplitude of finite-:math:`n` modes. + +**Comments** + +- DEFAULT = 1e-4 +- For linear simulations, the value is unimportant +- For nonlinear runs, this will sometimes need to be reduced to a smaller value. + +---- + +Return to :doc:`table of inputs ` + + diff --git a/docs/_sources/gyro/gyro_table.rst.txt b/docs/_sources/gyro/gyro_table.rst.txt new file mode 100644 index 0000000..3c142f6 --- /dev/null +++ b/docs/_sources/gyro/gyro_table.rst.txt @@ -0,0 +1,9 @@ +Tabular list for input.gyro +=========================== + +.. csv-table:: **Control parameters** + :header: "input.gyro parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`gyro_amp_phi_n`", Initial n > 0 amplitude,1e-4 + diff --git a/docs/_sources/gyro/gyro_vv.rst.txt b/docs/_sources/gyro/gyro_vv.rst.txt new file mode 100644 index 0000000..79de081 --- /dev/null +++ b/docs/_sources/gyro/gyro_vv.rst.txt @@ -0,0 +1,151 @@ +.. |exb| mathmacro:: \mathbf{E}\times\mathbf{B} + +GYRO verification and validation (pre 2010) +=========================================== + +*[This research summary was written in 2010]* + +---- + +Verification Studies +-------------------- + +Cyclone Base Case with Adiabatic Electrons (2001) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +A complete :math:`R/L_T` scan for the Cyclone Base Case with adiabatic electron +was published in :cite:`candy:2003`. We reproduce below Fig. 11 from that publication: + +.. figure:: figures/candy_jcp2003_fig11.png + :width: 75 % + :alt: candy_jcp2003_fig11 + :align: center + +**Figure 1:** :math:`\chi_i` versus :math:`R/L_T` scan for the Cyclone Base Case, compared with results from the LLNL and Univ. of Colorado gyrokinetic PIC codes. + +Local limit of Global Simulations (2004) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +After the publication of this work, a community-wide benchmark exercise was carried out between codes with local capability (GYRO and GS2) and a global code (GTC). The difficulties encountered by the global code in attempting to reproduce the local limit in :math:`s-\alpha` geometry was addressed in :cite:`candy:2004a`, where it was demonstrated that the local limit can be achieved in a truly global simulation. We reproduce below Fig. 3 of that paper: + +.. figure:: figures/candy_pop2004_fig3.png + :width: 75 % + :alt: candy_pop2004_fig3 + :align: center + +**Figure 2:** Curves show radial profile of :math:`\chi_i` averaged over the time inteval :math:`400 \le (c_s/a) t \le 900`, as computed by GYRO. Solid dots show results of three separate GS2 flux-tube simulations. + +Gyrokinetic Simulation of Impurities (2004) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Prior to 2004, basically all simulation work was done with pure plasmas. As part of a Ph.D. thesis (Estrada-Mila), a paper on the topic of transport in impure plasmas :cite:`estrada:2005` was published. This work contained crucial benchmarks with the GS2 code. Figure 1 from that paper is reproduced below: + +.. figure:: figures/estrada_pop2005_fig1.png + :width: 75 % + :alt: estrada_pop2005_fig1 + :align: center + +**Figure 3:** Adiabatic electron comparison of growth rates for the GYRO (solid line) and GS2 (black dot) codes. Also shown are published results by Dong :cite:`dong:1995` (dotted line) which neglect trapping. Plot (a) shows the growth rate as functions of :math:`k_\theta \rho_s`. Plot (b) shows the effect of carbon concentration, :math:`f_C = z_C n_C/n_e`, for :math:`k_\theta \rho_s = 1/\sqrt{2}` and :math:`s=1`. All other parameters are the same in both plots. Agreement between GYRO and GS2 is extremely good. + +Electron Temperature Gradient Turbulence (2006) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Motivated by incorrect published results from a global code, a large community-wide benchmark exercise was carried out including the most advanced European gyrokinetic code, GENE. The results were published in a paper :cite:`nevins:2006` that clarified difficulties associated with simulations of ETG turbulence, and a new low-shear operating point was designed so that benchmark case was physically well-behaved. Remarkable intercode agreement was obtained + +.. figure:: figures/nevins_pop2006_fig8.png + :width: 75 % + :alt: nevins_pop2006_fig8 + :align: center + +**Figure 4:** :math:`\chi_e = -Q_e/n_0 \nabla T_0` from GYRO (black curve), GS2 (blue curve), GENE (green curve), and +PG3EQ (red curve) are plotted versus time. + +Later, the exercise was successfully achieved by the GEM code. The GTC group refused to participate. + +Energetic particle transport coefficients (2009) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Following up on initial work by Estrada-Mila :cite:`estrada:2006`, Angioni :cite:`angioni:2009a` carried out detailed GS2-GYRO comparsions of alpha particle quasilinear transport coefficients. This comparison tests, among other things, the multi-scale accuracy of the gyro-averaging operators for electrons and ions. Below we reproduce Fig. 5 of that paper: + +.. figure:: figures/angioni_nf2009_fig5.png + :width: 75 % + :alt: angioni_nf2009_fig5 + :align: center + +**Figure 5:** Diffusion, thermodiffusion and pure convection coefficients for :math:`\alpha` particles in the case of a Maxwellian unperturbed distribution function, computed by linear GYRO (open squares), and linear GS2 (full circles). The codes are found in perfect agreement. The same quantities computed by GS2 in the case of an equilibrium slowing down distribution function are also plotted for comparison (full squares). For the particle thermodiffusion coefficient :math:`C_{T\alpha}` as well as for the diagonal heat conduction coefficient :math:`\chi_{T\alpha}/\chi_{n\alpha}` both the actual curve obtained with a Maxwellian distribution (dashed line), as well as the same curve but rescaled by the factor :math:`d {\rm ln} T_\alpha/d {\rm ln} T_e` (solid line), have been plotted. The latter curve allows a direct comparison with the corresponding coefficients obtained in the case of a slowing down distribution function. + +Compressional Electromagnetic Perturbations (2010) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Recently, compressional electromagnetic capability, :math:`\delta B_\lVert` was added to GYRO and linear benchmarks were carried out against GS2 -- the only other nonlinear code with the same capability: + +.. figure:: figures/belli_pop2010_fig1.png + :width: 75 % + :alt: belli_pop2010_fig1 + :align: center + +**Figure 6:** GYRO (solid red) versus GS2 (dashed red). GYRO results without the compressional terms are shown in blue. + +---- + +GYRO Validation Abstracts +------------------------- + +Comparison of GYRO synthetic diagnostic results with DIII-D BES and CER data +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +**Contact** -- C. Holland + +**Abstract** -- +The implementation of synthetic diagnostics that model physical beam emission spectroscopy and correlation electron cyclotron emission diagnostics is presented. Initial results from their applications to local gyrokinetic simulations of two locations in a DIII-D L-mode discharge performed with the GYRO code are also discussed. At both locations, the attenuation of the GYRO-predicted fluctuations due to the spatial averaging imposed by the diagnostics’ spot sizes is significant, and its incorporation via the use of synthetic diagnostics is shown to be essential for quantitative comparisons such as these. + +**Successes** -- At normalized toroidal flux :math:`\rho=0.5`, very good agreement was found between experiment and simulation in both the energy flows and fluctuation levels measured by both diagnostics. At both locations good agreement was found in the shapes of the radial and vertical density correlation functions and in the shapes of the frequency power spectra. + +**Anomalies** -- However, at :math:`\rho=0.75`, GYRO underpredicts the observed energy flows by roughly a factor of 7, with RMS fluctuation levels underpredicted by a factor of 3. + +**Resources** -- `Phys. Plasmas, May 2009 `_ + + +Comparison of GYRO synthetic diagnostic results with C-Mod PCI data +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +**Contact** -- L. Lin + +**Abstract** -- +Data is taken from ohmic plasmas in the Alcator C-Mod tokamak using phase contrast imaging (PCI) diagnostic, with experiments carried out over the range of densities covering the 'neo-Alcator' to the 'saturated ohmic' regime. This was compared with GYRO simulations using a synthetic PCI diagnostic method. + +**Successes** -- The key role played by the ion temperature gradient (ITG) turbulence has been verified, including measurements of turbulent wave propagation in the ion diamagnetic direction. It is found that the intensity of density fluctuations increases with density, in agreement between simulation and experiments. The absolute fluctuation intensity agrees with the simulation within experimental error (±60%). In the saturated ohmic regime, the simulated ion and electron thermal diffusivities also agree with experiments after varying the ion temperature gradient within experimental uncertainty. + +**Anomalies** -- In the linear ohmic regime, GYRO does not agree well with experiments, showing significantly larger ion thermal transport and smaller electron thermal transport + +**Resources** -- `Plasma Phys. Control. Fus., June 2009 `_ + + +Comparison of GYRO simulations with fast-sweeping and Doppler reflectometer data in Tore Supra +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +**Contact** -- A. Casati + +**Abstract** -- +Turbulence measurements in TORE SUPRA tokamak plasmas have been quantitatively compared to predictions by nonlinear gyrokinetic simulations. The GYRO results simultaneously match within experimental uncertainty (a) the magnitude of effective heat diffusivity, (b) rms values of density fluctuations, and (c) wave-number spectra in both the directions perpendicular to the magnetic field. Moreover, the GYRO nonlinear simulations help to revise as an instrumental effect the apparent experimental evidence of strong turbulence anisotropy at spatial scales of the order of ion-sound Larmor radius. + +**Successes** -- The GYRO simulations quantitatively reproduce complementary measurements from an ohmic TORE SUPRA discharge, namely heat :math:`\chi_\mathrm{eff}`, RMS :math:`\delta n/n`, :math:`k_\theta`, and :math:`k_r` density fluctuation spectra at normalized toroidal flux :math:`0.5 \le\rho\le 0.7`. Good agreement is found for both the magnitude of the transport level and the shape of the density fluctuation spectra measured by fast-sweeping and Doppler reflectometers. + +**Anomalies** -- At :math:`\rho=0.4`, the local GYRO simulation finds conditions of marginal turbulence, underestimating the observed transport level by a factor of 3. + +**Resources** -- `Phys. Rev. Lett., February 2009 `_ + + +Anomalous Transport in the DIII-D Tokamak Matched by Supercomputer Simulation +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +**Contact** -- J. Candy + +**Abstract** -- +The measured transport levels and apparent Bohm-like scaling observed in the DIII-D tokamak was reproduced with in experimental error bars using a series a GYRO simulations and sensitivity studies. + +**Successes** -- For nominal experimental paramaters, the electron transport is closely matched while the ion transport is overestimated by about a factor of 2. Decreasing gradient within error bars brings both into rough agreement. + +**Anomalies** -- There is a robust relative underestimate of electron transport. + +**Resources** -- `Phys. Rev. Lett., July 2003 `_ diff --git a/docs/_sources/index.rst.txt b/docs/_sources/index.rst.txt new file mode 100644 index 0000000..6889808 --- /dev/null +++ b/docs/_sources/index.rst.txt @@ -0,0 +1,61 @@ +The General Atomics GACODE Suite +================================ + +.. figure:: images/marshall_code.png + :width: 90 % + :alt: Marshall Rosenbluth (early 1980s) + :align: center + + +GACODE refers to a collection of serial and HPC software developed by the Theory Group +at `General Atomics `_, and distributed through +the `GACODE source code repository `_ at GitHub. + +Running GACODE +-------------- + +There are numerous :doc:`public installations ` of GACODE (via `AToM `_ or local maintainers). You can also :doc:`install and build ` the GACODE suite from sources to run on your desktop or laptop. + +Geometry +-------- + +A description of the unified method used to describe :doc:`flux-surface geometry `. + +Plasma Rotation +--------------- + +Some notes about the Hinton-Sugama formulation of plasma rotation :doc:`plasma rotation `. + +Equilibrium and Profiles +------------------------ + +GACODE software works with the :ref:`input.gacode` format. + +.. toctree:: + :maxdepth: 4 + :caption: Software + + license + download + setup + build + zreferences + +.. toctree:: + :maxdepth: 4 + :caption: Codes + + neo + tgyro + cgyro + gyro + tglf + prgen + +.. toctree:: + :caption: Physics + + geometry + rotation + input_gacode + misc diff --git a/docs/_sources/input_gacode.rst.txt b/docs/_sources/input_gacode.rst.txt new file mode 100644 index 0000000..5c55853 --- /dev/null +++ b/docs/_sources/input_gacode.rst.txt @@ -0,0 +1,79 @@ +.. _input.gacode: + +input.gacode +============ + +.. |ip| replace:: :doc:`input.gacode ` + +To see what a sample |ip| looks like, at the command line type + +.. code:: bash + + $ cgyro -g reg14 ; cat reg14/input.gacode + +Overview +-------- + +The file |ip| contains the entire dataset required for specification of experimental profiles. All such profiles are specified on an nexp-point grid. The information included is sufficient to carry out simulations of strongly-shaped up-down asymmetric (i.e., arbitrary) equilibria using the new :doc:`MXH equilibrium parameters ` :cite:`arbon:2020`. + +Profile ordering in |ip| is arbitrary and comment lines (starting with ``#`` in the first column) can be added for convenience. These comment lines are ignored by the parser. To generate |ip|, please use the ``profiles_gen`` command-line tool. + +.. csv-table:: **File structure** + :header: "parameter", "description" + :widths: 5, 20 + + ``nion``, Total number of ions (thermal and fast). + ``nexp``, Number of experimental data gridpoints. + ``rho(:)``,"The dimensionless ONETWO flux-surface label, :math:`\hat\rho = \rho(r)/\rho(a) \in [0,1]` (nonuniform allowed)." + ``rmin(:)``,"The generalized minor radius, :math:`r`, in units of :math:`{\rm m}`. See :doc:`here ` for definition." + ``polflux(:)``, "Poloidal flux over :math:`2\pi`, in units of Webers/radian." + ``q(:)``, "Safety factor, :math:`q`." + ``omega0(:)``, "Rotation frequency, :math:`\omega_0 = \displaystyle \frac{c E_r }{R B_p} = -c \frac{d \Phi}{d \psi}` in units of :math:`{\rm rad/s}` (see :doc:`plasma rotation `)." + *shape*,-- + ``rmaj(:)``,"The generalized major radius, :math:`R_0(r)`, in units of :math:`{\rm m}`." + ``zmag(:)``,"Flux-surface elevation, :math:`Z_0`, in units of :math:`{\rm m}`." + ``kappa(:)``,"Flux-surface elongation, :math:`\kappa`." + ``delta(:)``,"Flux-surface triangularity, :math:`\delta`." + ``zeta(:)``,"Flux-surface squareness, :math:`\zeta`." + ``shape_cos0(:)``,"Flux-surface tilt." + ``shape_cos1(:)``," " + ``shape_cos2(:)``," " + ``shape_cos3(:)``," " + ``shape_sin3(:)``," " + " ",-- + ``ne(:)``,"The electron density, :math:`n_e`, in units of :math:`10^{19}/{\rm m}^3`." + ``te(:)``,"The electron temperature, :math:`T_e`, in units of :math:`{\rm keV}`." + ``ptot(:)``,"Total plasma pressure, in units of Pascals." + ``z_eff(:)``,"The (dimensionless) effective ion charge, :math:`Z_{\rm eff}`." + "``ni(:,:)``","Ion density in units of :math:`10^{19}/{\rm m}^3`. There is a column for every ion species." + "``ti(:,:)``","Ion temperature in units of :math:`{\rm keV}`. There is a column for every ion species." + ``jbs(:)``,"Bootstrap current (parallel) in units of :math:`{\rm MA/m^2}`." + ``jrf(:)``,"RF-driven current in units of :math:`{\rm MA/m^2}`." + ``jnb(:)``,"Beam-driven current in units of :math:`{\rm MA/m^2}`." + ``jbstor(:)``,"Bootstrap current (toroidal) in units of :math:`{\rm MA/m^2}`." + "``vtor(:,:)``","Ion toroidal velocity in units of :math:`{\rm m/s}`. There is a column for every ion species." + "``vpol(:,:)``","Ion poloidal velocity in units of :math:`{\rm m/s}`. There is a column for every ion species." + *powers*,-- + ``qohme(:)``,"Ohmic power to electrons in units of :math:`{\rm MW/m^3}`." + ``qbeame(:)``,"Beam power to electrons in units of :math:`{\rm MW/m^3}`." + ``qbeami(:)``,"Beam power to ions in units of :math:`{\rm MW/m^3}`." + ``qrfe(:)``,"RF power to electrons in units of :math:`{\rm MW/m^3}`." + ``qrfi(:)``,"RF power to ions in units of :math:`{\rm MW/m^3}`." + ``qfuse(:)``,"Fusion power to electrons in units of :math:`{\rm MW/m^3}`." + ``qfusi(:)``,"Fusion power to ions in units of :math:`{\rm MW/m^3}`." + ``qsync(:)``,"Electron synchrotron radiation in units of :math:`{\rm MW/m^3}`." + ``qbrem(:)``,"Bremsstrahlung radiation in units of :math:`{\rm MW/m^3}`." + ``qline(:)``,"Electron line radiation in units of :math:`{\rm MW/m^3}`." + ``qei(:)``,"Electron-ion exchange :math:`{\rm MW/m^3}`." + ``qione(:)``,"Recombination power to electrons in units of :math:`{\rm MW/m^3}`." + ``qioni(:)``,"Recombination power to ions in units of :math:`{\rm MW/m^3}`." + ``qcxi(:)``,"Charge-exchange power to ions in units of :math:`{\rm MW/m^3}`." + *particle sources*,-- + ``qpar_beam(:)``,"Beam-particle source density in units of :math:`{\rm 1/m^3/s}`." + ``qpar_wall(:)``,"Wall-particle source density in units of :math:`{\rm 1/m^3/s}`." + *momentum source source*,-- + ``qmom(:)``,"The total (convected and conducted) torque density in units of :math:`{\rm N/m^2}`." + + +.. important:: + For more information about how powers are summed in TGYRO, please see :doc:`Scenarios and connection to energy sources `. diff --git a/docs/_sources/license.rst.txt b/docs/_sources/license.rst.txt new file mode 100644 index 0000000..099a4b1 --- /dev/null +++ b/docs/_sources/license.rst.txt @@ -0,0 +1,35 @@ +GACODE License +============== + +Copyright 2018, "Turbulence and Transport Group" + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy and/or modify the Software, +and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +1. The above copyright notice, this list of conditions and the following disclaimer + shall be included in all copies or substantial portions of the Software. + +2. To compile/use the Software source code AS IS for publication + purposes; users however are welcome to request changes, to make + code modifications for testing purposes, or issue pull requests. + +3. If the authorized user’s copy of Software is made available to third + parties, to ensure that the user agreement is followed by the third + parties. + +4. To email a draft of any article/letter/note based on the Software use to + gacode@fusion.gat.com + +5. To include in published results or presentations the proper code + name(s) and appropriate references. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + diff --git a/docs/_sources/misc.rst.txt b/docs/_sources/misc.rst.txt new file mode 100644 index 0000000..69f2e2a --- /dev/null +++ b/docs/_sources/misc.rst.txt @@ -0,0 +1,10 @@ +Miscellaneous +============= + +.. toctree:: + :titlesonly: + + shortfall + workshop + + diff --git a/docs/_sources/neo.rst.txt b/docs/_sources/neo.rst.txt new file mode 100644 index 0000000..d2a2eb2 --- /dev/null +++ b/docs/_sources/neo.rst.txt @@ -0,0 +1,52 @@ +NEO +=== + +Quick links +----------- + +.. toctree:: + :titlesonly: + + neo/neo_table + neo/neo_list + neo/outputs + + +NEO :cite:`belli:2008,belli:2009,belli:2012` is a multi-species drift-kinetic solver was developed by the ESL project as a practical tool for high accuracy neoclassical calculations. NEO is an Eulerian code that solves the first-order (in the drift-ordering parameter :math:`\rho_*=\rho_i/a \ll 1`) drift-kinetic-Poisson equations. In NEO, no approximations beyond the drift-ordering are made. The full linearized Fokker-Planck collision operator is used for the collision dynamics, with complete cross-species collisional coupling for arbitrary mass ratio and an arbitrary number of species. General flux-surface shape, including up-down asymmetry, is treated. In addition, full sonic rotation and centrifugal terms are retained. NEO has been extensively benchamarked with analytic theories, as well as with NCLASS, over a wide range of parameters and in various asymptotic limits. + +The equations solved in NEO complement those solved in gyrokinetic codes such as GYRO and CGYRO insofar as together they represent the complete first-order deviation of the plasma from a local Maxwellian. + +Data input +---------- + +The primary NEO input file is :doc:`input.neo `. Profile data can be optionally captured from :doc:`input.gacode `. + +NEO can also be run using a subroutine interface. In this case, inputs and outputs are contained in a monolithic module file named neo_interface. The interface parameter name is formed by prepending neo\_ and appending \_in to the name of the corresponding input.neo parameter. + +.. code:: fortran + + use neo_interface + call neo_init + ! Set neo_interface inputs (e.g. neo_n_species_in = 2 ...) + call neo_run + ! Get neo_interface outputs (e.g. jbs = neo_jpar_dke_out ...) + + +Data output +----------- + +A description of the NEO output files and output subroutine parameters is :doc:`here `. + +Normalization +------------- + +When run in local profile mode, the NEO normalizing length :math:`a`, normalizing mass :math:`m_{\rm norm}`, normalizing density :math:`n_{\rm norm}`, normalizing temperature :math:`T_{\rm norm}`, and normalizing velocity :math:`{\rm v}_{\rm norm} = \sqrt{T_{\rm norm}/m_{\rm norm}}` are arbitrary, since the input.neo parameters are set with respect to these and the output parameters are defined with respect to these. For experimental profiles, the normalizations are set as follows: + +.. csv-table:: + :header: "Quantity", "Unit", "Description" + :widths: 13, 15, 25 + + Length, ":math:`a`", Minor radius + Mass, ":math:`m_{\rm norm} = m_{\rm D}`", Mass of deuterium (3.3452e-27 kg) + Density, ":math:`n_{\rm norm}(r)=n_{0,{\rm species 1}}`", Local density of species 1 + Temperature, ":math:`T_{\rm norm}(r)=T_{0,{\rm species 1}}`", Local temperature of species 1 diff --git a/docs/_sources/neo/neo_list.rst.txt b/docs/_sources/neo/neo_list.rst.txt new file mode 100644 index 0000000..4c354f9 --- /dev/null +++ b/docs/_sources/neo/neo_list.rst.txt @@ -0,0 +1,1538 @@ +Alphabetical list for input.neo +=============================== + +.. =========================================================================================== + +.. _neo_aniso_model_*: + +ANISO_MODEL_* +----------------- + +**Definition** + +Parameter which selects whether to treat a species with an anisotropic temperature model. + +**Choices** + +- ANISO_MODEL_*=1: isotropic temperature model +- ANISO_MODEL_*=2: anisotropic temperature model + + - This option is presently not available for experimental profiles (:ref:`neo_profile_model` = 2). + - This model requires :ref:`neo_rotation_model` = 2 due to the induced poloidal density asymmetry. + - The parallel and perpendicular temperature :ref:`neo_temp_para_*` and :ref:`neo_temp_perp_*` and the parallel and perpendicular temperature gradient scale lengths :ref:`neo_dlntdr_para_*` and :ref:`neo_dlntdr_perp_*` must also be set. + - The parameters :ref:`neo_temp_*` and :ref:`neo_dlntdr_*` are not used. The effective Maxwellian temperature in the DKE is determined internally based on the parallel and perpendicular temperatures. + +**Comments** + +- DEFAULT: 1 +- The anisotropic model of each species 1-11 is set as: ANISO_MODEL_1, ANISO_MODEL_2, ANISO_MODEL_3,... +- The subroutine interface parameter is specified as a vector: neo_aniso_model_in(1:11) + +----- + +.. =========================================================================================== + +.. _neo_beta_star: + +BETA_STAR +--------- + +**Definition** + +The normalized effective pressure gradient: + +.. math:: + \beta_* = - \frac{8\pi a}{B_{\rm unit}^2} \sum_a \frac{d p_a}{d r} + +where :math:`B_{\rm unit}(r)=(q/r)\psi^\prime` is the effective magnetic field strength and :math:`p=\sum_a n_a T_a` is the total plasma pressure. + +**Comments** + +- DEFAULT: 0.0 +- NOTE: This parameter is *not* used in the standard DKE equation! It is only used in the case of an anisotropic temperature species (e.g. :ref:`neo_aniso_model_*` = 2) to compute :math:`d\Phi_*/dr`. +- This is only active with :ref:`neo_equilibrium_model` = 2 (the Miller equilibrium model). +- When experimental profiles are used (:ref:`neo_profile_model` = 2), :math:`\beta_*` is computed internally from the profile parameters in input.profiles and the normalizing length scale is the plasma minor radius. + +----- + +.. =========================================================================================== + +.. _neo_btccw: + +BTCCW +----- + +**Definition** + +Parameter which selects the orientation of the toroidal magnetic field :math:`B_t` relative to the toroidal angle :math:`\varphi`. + +**Choices** + +- BTCCW = 1: Counter-clockwise when viewed from above the torus - negative :math:`\hat{e}_{\varphi}` for the right-handed coordinate system :math:`(r,\theta,\varphi)`. Thus, :math:`B_t` is oriented along the negative :math:`\hat{e}_{\varphi}` direction. +- BTCCW = -1: Clockwise when viewed from above the torus - positive :math:`\hat{e}_{\varphi}` for the right-handed coordinate system :math:`(r,\theta,\varphi)`. Thus, :math:`B_t` is oriented along the positive :math:`\hat{e}_{\varphi}` direction. + +**Comments** + +- DEFAULT: -1 +- In DIII-D, typically BTCCW = 1. +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the orientiation of BT is inferred from input.profiles. + + +----- + +.. =========================================================================================== + +.. _neo_collision_model: + +COLLISION_MODEL +--------------- + +**Definition** + +Parameter which selects the collision operator model. + +**Choices** + +- COLLISION_MODEL = 1: Connor model. +- COLLISION_MODEL = 2: Zeroth-order Hirshman-Sigmar model. +- COLLISION_MODEL = 3: Full Hirshman-Sigmar model. +- COLLISION_MODEL = 4: Full linearized Fokker-Plank operator. +- COLLISION_MODEL = 5: FP test particle operator with ad hoc field particle operator. + +**Comments** + +- DEFAULT: 4 + +----- + +.. =========================================================================================== + +.. _neo_delta: + +DELTA +----- + +**Definition** + +Average triangularity, :math:`\delta`, of the flux surface: + +.. math:: + \delta = \frac{\delta_{+} + \delta_{-}}{2} + +where :math:`\delta_{+}` is the upper triangularity and :math:`\delta_{-}` is the lower triangularity. + +**Comments** + +- DEFAULT: 0.0 +- This is only active with :ref:`neo_equilibrium_model` = 2 (the Miller equilibrium model). +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the triangularity as a function of radius is read from input.profiles. + +----- + +.. =========================================================================================== + +.. _neo_dens_*: + +DENS_* +------ + +**Definition** + +The normalized equilibrium-scale density: + +.. math:: + {\rm DENS}\_* = \frac{n_{*}}{n_{\rm norm}} + +**Commments** + +- DEFAULT: DENS_1=1.0, DENS_2=DENS_3=...=0.0 +- The density of each species 1-11 is set as: DENS_1, DENS_2, DENS_3,... +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the density as a function of radius is read from input.profiles and the normalizing density is the local density of Species 1, :math:`n_{\rm norm}(r)=n_{0,{\rm species 1}}`. +- When rotation effects are included (:ref:`neo_rotation_model` = 2), this parameter is the value at the outboard midplane (:math:`\theta=0`). +- The subroutine interface parameter is specified as a vector: neo_dens_in(1:11) + +----- + +.. =========================================================================================== + +.. _neo_dlnndr_*: + +DLNNDR_* +-------- + +**Definition** + +The normalized equilibrium-scale density gradient scale length: + +.. math:: + {\rm DLNNDR}\_* = -a \frac{\partial {\rm ln} n_{*}}{\partial r} + +**Commments** + +- DEFAULT: 1.0 +- The density gradient scale length of each species 1-11 is set as: DLNNDR_1, DLNNDR_2, DLNNDR_3,... +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the density as a function of radius is read from input.profiles and the density gradient is computed internally. The normalizing length is the plasma minor radius. +- When rotation effects are included (:ref:`neo_rotation_model` = 2), this parameter is the value at the outboard midplane (:math:`\theta=0`). +- The subroutine interface parameter is specified as a vector: neo_dlnndr_in(1:11) + +----- + +.. =========================================================================================== + +.. _neo_dlnndre_ade: + +DLNNDRE_ADE +----------- + +**Definition** + +The normalized equilibrium-scale density gradient scale length of the electrons for the case of adiabatic electrons: + +.. math:: + {\rm DLNNDRE\_ADE} = -a \frac{\partial {\rm ln} n_{0,e}}{\partial r} + +**Commments** + +- DEFAULT: 1.0 +- This parameter does not enter the DKE and is used only as a diagnostic for strong rotation (ref:`neo_rotation_model` = 2), for which it is the value at the outboard midplane (:math:`\theta=0`). +- This paramter is used only if no species with Z < 0 is specified. +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the density as a function of radius is read from input.profiles and the density gradient is computed internally. The normalizing length is the plasma minor radius. + +----- + +.. =========================================================================================== + +.. _neo_dlntdr_*: + +DLNTDR_* +-------- + +**Definition** + +The normalized equilibrium-scale temperature gradient scale length: + +.. math:: + {\rm DLNTDR}\_* = -a \frac{d {\rm ln} T_{*}}{d r} + +**Commments** + +- DEFAULT: 1.0 +- The temperature gradient scale length of each species 1-11 is set as: DLNTDR_1, DLNTDR_2, DLNTDR_3,... +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the temperature as a function of radius is read from input.profiles and the temperature gradient is computed internally. The normalizing length is the plasma minor radius. +- The subroutine interface parameter is specified as a vector: neo_dlntdr_in(1:11) + +----- + +.. =========================================================================================== + +.. _neo_dlntdr_para_*: + +DLNTDR_PARA_* +------------- + +**Definition** + +The normalized equilibrium-scale parallel temperature gradient scale length: + +.. math:: + {\rm DLNTDR}\_PARA\_* = -a \frac{d {\rm ln} T_{\|,*}}{d r} + +**Commments** + +- DEFAULT: 1.0 +- The parallel temperature gradient scale length of each species 1-11 is set as: DLNTDR_PARA_1, DLNTDR_PARA_2, DLNTDR_PARA_3,... +- This parameter is used only when the species' anisotropic flag is set (:ref:`neo_aniso_model_*` = 2). +- The subroutine interface parameter is specified as a vector: neo_dlntdr_para_in(1:11) + +----- + +.. =========================================================================================== + +.. _neo_dlntdr_perp_*: + +DLNTDR_PERP_* +------------- + +**Definition** + +The normalized equilibrium-scale perpendicular temperature gradient scale length: + +.. math:: + {\rm DLNTDR}\_PERP\_* = -a \frac{d {\rm ln} T_{\perp,*}}{d r} + +**Commments** + +- DEFAULT: 1.0 +- The perpendicular temperature gradient scale length of each species 1-11 is set as: DLNTDR_PERP_1, DLNTDR_PERP_2, DLNTDR_PERP_3,... +- This parameter is used only when the species' anisotropic flag is set (:ref:`neo_aniso_model_*` = 2). +- The subroutine interface parameter is specified as a vector: neo_dlntdr_perp_in(1:11) + +----- + +.. =========================================================================================== + +.. _neo_dlntdre_ade: + +DLNTDRE_ADE +----------- + +**Definition** + +The normalized equilibrium-scale temperature gradient scale length of the electrons for the case of adiabatic electrons: + +.. math:: + {\rm DLNTDRE\_ADE} = -a \frac{\partial {\rm ln} T_{e}}{\partial r} + +**Commments** + +- DEFAULT: 1.0 +- This parameter does not enter the DKE and is used only as a diagnostic for strong rotation (ref:`neo_rotation_model` = 2), for which it is the value at the outboard midplane (:math:`\theta=0`). +- This paramter is used only if no species with Z < 0 is specified. +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the temperature as a function of radius is read from input.profiles and the temperature gradient is computed internally. The normalizing length is the plasma minor radius. + +----- + +.. =========================================================================================== + +.. _neo_dphi0dr: + +DPHI0DR +------- + +**Definition** + +The normalized equilibrium-scale radial electric field: + +.. math:: + {\rm DPHI0DR} = \frac{\partial \Phi_0}{\partial r} \left( \frac{a e}{T_{\rm norm}} \right) + +such that + +.. math:: + E_r^{(0)} = -\frac{\partial \Phi_0}{\partial r} \nabla r + +**Comments** + +- DEFAULT: 0.0 +- When experimental profiles are used (:ref:`neo_profile_model` = 2), this is computed internally from the profile parameters is in input.profiles and the normalizing length scale is the plasma minor radius. See also the parameter :ref:`neo_profile_erad0_model`, which allows the simulation to be done with DPHI0DR = 0 regardless of the value in input.profiles. +- If sonic rotation effects are included (:ref:`neo_rotation_model` = 2), then this parameter is ignored and :math:`E_r^{(0)}` is assumed to be zero. With experimental profiles, this means that the :math:`E_r^{(0)}` in input.profiles is assumed to be the lowest-order field in sonic rotation theory, i.e. :math:`E_r^{(-1)}`,and is used to compute the lowest-order sonic toroidal rotation parameters, :ref:`neo_omega_rot` and :ref:`neo_omega_rot_deriv`. + +----- + +.. =========================================================================================== + +.. _neo_epar0: + +EPAR0 +----- + +**Definition** + +The normalized equilibrium-scale inductive electric field: + +.. math:: + {\rm EPAR0} = \left< E_\| B \right> \left( \frac{a e}{T_{\rm norm} B_{\rm unit}} \right) + +**Comments** + +- DEFAULT: 0.0 +- In the neo theory module, the input :math:`\left< E_\| B \right>` is used directly. +- For the DKE, it into the RHS neoclassical source term as + + .. math:: + {\rm v_\|} \left< E_\| B \right> \frac{B}{\left< B^2 \right>} + +- :math:`E_\|` is not presently in input.profiles. When experimental profiles are used (:ref:`neo_profile_model` = 2), EPAR0 is read from input.neo and is assumed to be radially constant. +- For the Spitzer problem (:ref:`neo_spitzer_model` = 1), use :ref:`neo_epar0_spitzer` instead. + +----- + +.. =========================================================================================== + +.. _neo_epar0_spitzer: + +EPAR0_SPITZER +------------- + +**Definition** + +The normalized equilibrium-scale inductive electric field for use in the Spitzer problem: + +.. math:: + {\rm EPAR0} = E_\varphi \left( \frac{a e}{T_{\rm norm}} \right) + +**Comments** + +- DEFAULT: 1.0 +- For the DKE, we assume that :math:`E_\varphi` is independent of :math:`\theta`, such that :math:`{\rm v}_\| E_\varphi = {\rm v}_\| {\rm EPAR0\_SPITZER}`. +- This parameter is used only for the Spitzer problem (:ref:`neo_spitzer_model` = 1). For the standard neoclassical problem, use :ref:`neo_epar0` instead. + +----- + +.. =========================================================================================== + +.. _neo_equilibrium_model: + +EQUILIBRIUM_MODEL +----------------- + +**Definition** + +Parameter which selects the geometric equilibrium model. + +**Choices** + +- EQUILIBRIUM_MODEL = 0: s-alpha +- EQUILIBRIUM_MODEL = 1: large aspect ratio +- EQUILIBRIUM_MODEL = 2: Miller +- EQUILIBRIUM_MODEL = 3: General Grad-Shafranov + +**Comments** + +- DEFAULT: 0 +- For experimental profiles (:ref:`neo_profile_model` = 2), this parameter is ignored and the geometric equilibrium model is instead set by the parameter :ref:`neo_profile_equilibrium_model`. +- EQUILIBRIUM_MODEL=3 is available via interface. For this option, the number of Fourier coefficients, :ref:`neo_geo_ny`, must be a positive integer, with the corresponding Fourier coefficients set in :ref:`neo_geo_yin`. For input.neo, these parameters are set by the file input.geo. Note that in addition to the fourier coefficients, the input equilibrium parameters :ref:`neo_rmin_over_a`, :ref:`neo_rmaj_over_a`, :ref:`neo_q`, :ref:`neo_shear`, :ref:`neo_beta_star`, :ref:`neo_btccw`, and :ref:`neo_ipccw` must also be specified. +- See the :doc:`geometry notes <../geometry>` for more details about the geometric equilibrium models. + +----- + +.. =========================================================================================== + +.. _neo_geo_ny: + +GEO_NY +------ + +**Definition** + +Number of Fourier coefficients for general Grad-Shafranov equilibrium. + +**Comments** + +- DEFAULT: 0 +- This parameter is only available via subroutine interface and not by input.neo. +- This parameter is used only if :ref:`neo_equilibrium_model` = 3. It must be a positive integer. The Fourier coefficient values themselves are specified by :ref:`neo_geo_yin`. +- See the :doc:`geometry notes <../geometry>` for more details about the general geometry equilibrium model. + +----- + +.. =========================================================================================== + +.. _neo_geo_yin: + +GEO_YIN +------- + +**Definition** + +Array of dimension (8,0:32) with the normalized Fourier coefficients :math:`\{a\_R,b\_R,a\_Z,b\_Z\}/a` and their radial derivatives :math:`\{a\_Rp,b\_Rp,a\_Zp,b\_Zp\}` for general Grad-Shafranov equilibrium. + +**Comments** + +- DEFAULT: 0.0 +- This parameter is only available via subroutine interface and not by input.neo. +- This parameter is used only if :ref:`neo_equilibrium_model` = 3. The number of Fourier coefficients is specified by :ref:`neo_geo_ny` and the coefficients are read-in as geo_yin(8,0:geo_ny). +- See the :doc:`geometry notes <../geometry>` for more details about the general geometry equilibrium model. + +----- + +.. =========================================================================================== + +.. _neo_ipccw: + +IPCCW +----- + +**Definition** + +Parameter which selects the orientation of the plasma current (and thus the poloidal magnetic field :math:`B_p`) relative to the toroidal angle :math:`\varphi`. + +**Choices** + +- IPCCW = 1: Counter-clockwise when viewed from above the torus - negative :math:`\hat{e}_{\varphi}` for the right-handed coordinate system :math:`(r,\theta,\varphi)`. Thus, :math:`B_p` is oriented along the negative :math:`\hat{e}_{\varphi}` direction. +- IPCCW = -1: Clockwise when viewed from above the torus - positive :math:`\hat{e}_{\varphi}` for the right-handed coordinate system :math:`(r,\theta,\varphi)`. Thus, :math:`B_p` is oriented along the positive :math:`\hat{e}_{\varphi}` direction. + +**Comments** + +- DEFAULT: -1 +- In DIII-D, typically IPCCW = 1. +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the orientiation of IP is inferred from input.profiles. + +----- + +.. =========================================================================================== + +.. _neo_kappa: + +KAPPA +----- + +**Definition** + +Elongation, :math:`\kappa`, of the flux surface. + +**Comments** + +- DEFAULT: 1.0 +- This is only active with :ref:`neo_equilibrium_model` = 2 (the Miller equilibrium model). +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the elongation as a function of radius is read from input.profiles. + +----- + +.. =========================================================================================== + +.. _neo_mass_*: + +MASS_* +------ + +**Definition** + +The normalized mass: + +.. math:: + {\rm MASS}\_* = m_{*}/m_{\rm norm} + +**Commments** + +- DEFAULT: 1.0 +- The mass of each species 1-11 is set as: MASS_1, MASS_2, MASS_3,... +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the normalizing mass is deuterium, :math:`m_{\rm norm}=m_{D}` = 3.3452e-27 kg +- The subroutine interface parameter is specified as a vector: neo_mass_in(1:11) + +----- + +.. =========================================================================================== + +.. _neo_n_energy: + +N_ENERGY +-------- + +**Definition** + +The number of energy polynomials - 1 in the computational domain (:math:`n_{\varepsilon,\rm total}` = N_ENERGY+1). + +**Comments** + +- DEFAULT: 6 +- The velocity-space coordinate :math:`x_a` is the normalized velocity: :math:`x_a = \sqrt{\varepsilon} = {\rm v}/(\sqrt{2}{\rm v}_{ta})`. +- NEO uses an expansion of associated Laguerre polynomials in :math:`x_a`, which is coupled with the Legendre expansion in :math:`\xi`: :math:`P_l(\xi) L_m^{k(l)+1/2}(x_a^2)x_a^{k(l)}`, where :math:`k(l)=0` for Legendre index :math:`l=0` and :math:`k(l)=1` for Legendre index :math:`l>0`. +- The collocation integrals are formed from the monomial basis elements, :math:`x_a^{2m+k(l)}`, which can be written in terms of Gamma and Beta functions. + +----- + +.. =========================================================================================== + +.. _neo_n_radial: + +N_RADIAL +-------- + +**Definition** + +The number of radial gridpoints, :math:`n_r` in the computational domain. + +**Comments** + +- DEFAULT: 1 +- The radial grid is defined on the range :ref:`neo_rmin_over_a` + :math:`\le r/a \le` :ref:`neo_rmin_over_a_2`. For a local simulation (:ref:`neo_profile_model` = 1), the normalizing length scale :math:`a` is arbitrary. For a global simulation (:ref:`neo_profile_model` = 2), :math:`a` is the plasma minor radius at the center of the radial simulation domain. +- N_RADIAL > 1 requires a global profile model (:ref:`neo_profile_model` = 2). Otherwise, N_RADIAL = 1 and the profile model is local (:ref:`neo_profile_model` = 1). +- For solution of only the first-order DKE, which is a radially-local problem, the radial grid is equally-spaced. + +----- + +.. =========================================================================================== + +.. _neo_n_species: + +N_SPECIES +--------- + +**Definition** + +The number of kinetic species. + +**Comments** + +- DEFAULT: 1 +- The maximum allowed N\_SPECIES is 11. +- Only one species with charge Z < 0 is allowed. If no species with Z < 0 is specified, then an adiabatic electron model is assumed. +- For local simulations (:ref:`neo_profile_model` = 1), the order of the species and the normalizing density and temperature are arbitrary. + + - For each species 1-N_SPECIES, :ref:`neo_z_*`, :ref:`neo_mass_*`, :ref:`neo_dens_*`, :ref:`neo_temp_*`, :ref:`neo_dlnndr_*`, and :ref:`neo_dlntdr_*` are set in input.neo. The collision frequency with respect to species 1 (:ref:`neo_nu_1`) is also set in input.neo. + - Quasi-neutrality is not checked. + + +- For experimental profiles (:ref:`neo_profile_model` = 2), the normalizing mass is the mass of deuterium (:math:`m_D` = 3.3452e-27 kg), so the input masses should be given relative to this mass. The output quantities are normalized with respect to the density and temperature of the first species in input.neo and :math:`m_D`, with :math:`{\rm v}_{\rm norm} = \sqrt{T_{0,{\rm species 1}}/m_{D}}`. + + - The electron species, if kinetic, must be species number N_SPECIES in input.neo. + + - Of the species-dependent parameters in input.neo, only :ref:`neo_z_*` and :ref:`neo_mass_*` are used, while :ref:`neo_dens_*`, :ref:`neo_temp_*`, :ref:`neo_dlnndr_*`, :ref:`neo_dlntdr_*`, and :ref:`neo_nu_1` are determined from the parameters read from input.profiles. + + - Quasi-neutrality is checked. + + - See :ref:`neo_profile_model` for more details. + +----- + +.. =========================================================================================== + +.. _neo_n_theta: + +N_THETA +-------- + +**Definition** + +The number of theta gridpoints, :math:`n_\theta` in the computational domain. + +**Comments** + +- DEFAULT: 17 +- N_THETA must be an odd number +- The theta grid range is equally-spaced and defined on the range :math:`-\pi \le \theta < \pi`. +- The theta derivatives in the kinetic equation are treated with a 4th-order centered finite difference scheme. Periodic boundary conditions are assumed. + +----- + +.. =========================================================================================== + +.. _neo_n_xi: + +N_XI +-------- + +**Definition** + +The number of xi polynomials - 1 in the computational domain (:math:`n_{\xi,\rm total}` = N_XI+1). + +**Comments** + +- DEFAULT: 17 +- The velocity-space coordinate :math:`\xi` is the cosine of the pitch angle: :math:`\xi ={\rm v}_\|/{\rm v}`. +- NEO uses an expansion of Legendre polynomials in :math:`\xi`. +- The collocation integrals are done exactly analytically. + +----- + +.. =========================================================================================== + +.. _neo_ne_ade: + +NE_ADE +------ + +**Definition** + +The normalized equilibrium-scale density of the electrons for the case of adiabatic electrons: + +.. math:: + {\rm NE\_ADE} = \frac{n_{0,e}}{n_{\rm norm}} + +**Commments** + +- DEFAULT: 1.0 +- This paramter is used only if no species with Z < 0 is specified. +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the density as a function of radius is read from input.profiles and the normalizing density is the local density of Species 1, :math:`n_{\rm norm}(r)=n_{{\rm species 1}}`. + +----- + +.. =========================================================================================== + +.. _neo_nu_1: + +NU_1 +---- + +**Definition** + +The normalized collision frequency of the first kinetic species: + +.. math:: + {\rm NU}\_1 = \frac{\tau_{11}^{-1}}{{\rm v}_{\rm norm}/a} + +where + +.. math:: + \tau_{ss}^{-1} = \frac{\sqrt{2} \pi e^4 z_s^4 n_{0s}}{m_s^{1/2} T_{0s}^{3/2}} {\rm ln} \Lambda + +**Comments** + +- DEFAULT: 0.1 +- Only the collision frequency for Species 1 is specified. The collision frequencies for the other species are computed internally in the code using NU_1, :ref:`neo_z_*`, :ref:`neo_mass_*`, :ref:`neo_dens_*`, and :ref:`neo_temp_*`. +- When rotation effects are included (:ref:`neo_rotation_model` = 2), this parameter is the value at the outboard midplane (:math:`\theta = 0`). +- When experimental profiles are used (:ref:`neo_profile_model` = 2), this is computed internally from the profile parameters read from input.profiles. Also, the normalizing length scale is the plasma minor radius and the normalizing velocity is :math:`{\rm v}_{\rm norm} = \sqrt{T_{\rm species1}/m_{D}}`. + +----- + +.. =========================================================================================== + +.. _neo_omega_rot: + +OMEGA_ROT +--------- + +**Definition** + +The normalized toroidal angular frequency: + +.. math:: + {\rm OMEGA\_ROT} = \frac{\omega_0}{{\rm v}_{\rm norm}/a} + +where :math:`\omega_0=-c\frac{d \Phi_{-1}}{d\psi}` + + +**Comments** + +- DEFAULT: 0.0 +- Used only if sonic rotation effects are included (:ref:`neo_rotation_model` = 2). +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the toroidal angular frequency as a function of radius is read from input.profiles. The associated :math:`E_r` is assumed to be the lowest-order field, :math:`E_r^{(-1)}`, and :math:`E_r^{(0)}` is assumed to be 0. + +----- + +.. =========================================================================================== + +.. _neo_omega_rot_deriv: + +OMEGA_ROT_DERIV +--------------- + +**Definition** + +The normalized toroidal rotation shear: + +.. math:: + {\rm OMEGA\_ROT\_DERIV} = \frac{d \omega_0}{d r}\frac{a^2}{{\rm v}_{\rm norm}} + +where :math:`\omega_0=-c\frac{d \Phi_{-1}}{d\psi}` is the torodial angular frequency. + + +**Comments** + +- DEFAULT: 0.0 +- Used only if sonic rotation effects are included (:ref:`neo_rotation_model` = 2). +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the toroidal angular frequency as a function of radius is read from input.profiles and its gradient is computed internally. The associated :math:`E_r` is assumed to be the lowest-order field, :math:`E_r^{(-1)}`, and :math:`E_r^{(0)}` is assumed to be 0. + +----- + +.. =========================================================================================== + +.. _neo_profile_dlnndr_*_scale: + +PROFILE_DLNNDR_*_SCALE +---------------------- + +**Definition** + +Scaling factor for the normalized equilibrium-scale density gradient scale length in profile mode: + +.. math:: + a \frac{\partial {\rm ln} n_{0,*}}{\partial r} \rightarrow {\rm PROFILE\_DLNNDR\_*\_SCALE} \times \left(a \frac{\partial {\rm ln} n_{0,*}}{\partial r} \right) + +**Commments** + +- DEFAULT: 1.0 +- The scaling factor of each species 1-11 is set as: PROFILE_DLNNDR_1_SCALE, PROFILE_DLNNDR_2_SCALE, PROFILE_DLNNDR_3_SCALE,... +- This parameter is only used when experimental profiles are used (:ref:`neo_profile_model` = 2). The density as a function of radius is read from input.profiles and the density gradient is computed internally. The normalizing length is the plasma minor radius. This gradient scale length is then re-scaled. +- The subroutine interface parameter is specified as a vector: neo_profile_dlnndr_scale_in(1:11) + +----- + +.. ======================================================================= + +.. _neo_profile_dlntdr_*_scale: + +PROFILE_DLNTDR_*_SCALE +---------------------- + +**Definition** + +Scaling factor for the normalized equilibrium-scale temperature gradient scale length in profile mode: + +.. math:: + a \frac{d {\rm ln} T_{*}}{d r} \rightarrow {\rm PROFILE\_DLNTDR\_*\_SCALE} \times \left( a \frac{d {\rm ln} T_{*}}{d r} \right) + +**Commments** + +- DEFAULT: 1.0 +- The scaling factor of each species 1-11 is set as: PROFILE_DLNTDR_1_SCALE, PROFILE_DLNTDR_2_SCALE, PROFILE_DLNTDR_3_SCALE,... +- This parameter is only used when experimental profiles are used (:ref:`neo_profile_model` = 2). The temperature as a function of radius is read from input.profiles and the temperature gradient is computed internally. The normalizing length is the plasma minor radius. This gradient scale length is then re-scaled. +- The subroutine interface parameter is specified as a vector: neo_profile_dlntdr_scale_in(1:11) + +----- + +.. =========================================================================================== + +.. _neo_profile_equilibrium_model: + +PROFILE_EQUILIBRIUM_MODEL +------------------------- + +**Definition** + +Parameter which selects the geometric equilibrium model for experimental profiles. + +**Choices** + +- PROFILE_EQUILIBRIUM_MODEL = 1: Use Miller shaped geometry with the profiles of the geometric parameters as given in input.profiles. +- PROFILE_EQUILIBRIUM_MODEL = 2: Use the general Grad-Shafranov geometry with the fourier coefficients specified in input.profiles.geo. + +**Comments** + +- DEFAULT: 1 +- Used only for experimental profiles (:ref:`neo_profile_model` = 2) +- See the :doc:`geometry notes <../geometry>` for more details about the geometric equilibrium models. + +----- + +.. =========================================================================================== + +.. _neo_profile_erad0_model: + +PROFILE_ERAD0_MODEL +------------------- + +**Definition** + +Parameter which selects whether to include :math:`E_r^{(0)}` for experimental profiles. + +**Choices** + +- PROFILE_ERAD0_MODEL = 0: :math:`E_r^{(0)}` is set to zero regardless of the value in input.profiles. +- PROFILE_ERAD0_MODEL = 1: :math:`E_r^{(0)}` as specified in input.profiles is used. + +**Comments** + +- DEFAULT: 1 +- Used only for experimental profiles (:ref:`neo_profile_model` = 2). +- If sonic rotation effects are included (:ref:`neo_rotation_model` = 2) with experimental profiles, then this parameter is ignored and :math:`E_r^{(0)}` is assumed to be zero. This means that the :math:`E_r^{(0)}` in input.profiles is assumed to be the lowest-order field in sonic rotation theory, i.e. :math:`E_r^{(-1)}`,and is used to compute the lowest-order sonic toroidal rotation parameters, :ref:`neo_omega_rot` and :ref:`neo_omega_rot_deriv`. + +----- + +.. =========================================================================================== + +.. _neo_profile_model: + +PROFILE_MODEL +------------- + +**Definition** + +Parameter which selects how the radial profile is defined. + +**Choices** + +- PROFILE_MODEL = 1: local (one radius) +- PROFILE_MODEL = 2: global, using experimental profiles + +**Comments** + +- DEFAULT: 1 +- For PROFILE_MODEL = 1, :ref:`neo_n_radial` must be 1. + + - The densities are set by :ref:`neo_dens_*` and quasi-neutrality is not checked. + - The temperatures are set by :ref:`neo_temp_*`. + +- For PROFILE_MODEL = 2, experimental profiles are defined in input.profiles. The number of radial gridpoints is specified by :ref:`neo_n_radial`. + + - Additional models used for this case are specified by :ref:`neo_profile_equilibrium_model` and :ref:`neo_profile_erad0_model`. + - Of the species-dependent parameters in input.neo, only :ref:`neo_z_*` and :ref:`neo_mass_*` are used for this case. The normalizing mass is the mass of deuterium (:math:`m_D` = 3.3452e-27 kg), so the input masses should be given relative to this mass. The output quantities are normalized with respect to the density and temperature of the first species in input.neo and :math:`m_D`, with :math:`{\rm v}_{\rm norm} = \sqrt{T_{0,{\rm species 1}}/m_{D}}`. + - The electron species, if kinetic, must be species number N_SPECIES in input.neo. + - If the density profiles in input.profiles are not quasi-neutral, then the density profile of the first ion species is re-set. + +----- + +.. =========================================================================================== + +.. _neo_q: + +Q +- + +**Definition** + +Magnitude of the safety factor, :math:`|q|`, of the flux surface: + +.. math:: + q(\psi) \doteq \frac{1}{2 \pi} \int_{0}^{2\pi} d\theta \; \frac{\mathbf{B} \cdot \nabla \varphi}{\mathbf{B} \cdot \nabla \theta} + +**Comments** + +- DEFAULT: 2.0 +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the safety factor as a function of radius is read from input.profiles. +- The orientation of the safety factor is determined by :ref:`neo_ipccw` and :ref:`neo_btccw`. + +----- + +.. =========================================================================================== + +.. _neo_rho_star: + +RHO_STAR +-------- + +**Definition** + +The ratio of the Larmor radius of the normalizing species to the normalizing length scale: + +.. math:: + \rho_* = \frac{\rho_{\rm norm}}{a} \; , {\rm where} \; \rho_{\rm norm} = \frac{c \sqrt{m_{\rm norm} T_{\rm norm}}}{e |B_{\rm unit}|} + + +**Comments** + +- DEFAULT: 0.001 +- This parameter must be a positive number. The sign of :math:`B_{\rm unit}` is determined by :ref:`neo_ipccw` and :ref:`neo_btccw`. +- When experimental profiles are used (:ref:`neo_profile_model` = 2), :math:`\rho_*` is computed internally from the profile parameters in input.profiles and the normalizing length scale is the plasma minor radius. + +----- + +.. =========================================================================================== + +.. _neo_rmaj_over_a: + +RMAJ_OVER_A +----------- + +**Definition** + +The ratio of the flux-surface-center major radius, :math:`R_0`, to the normalizing length scale:math:`a`. + +**Comments** + +- DEFAULT: 3.0 +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the flux-surface-center major radius as a function of radius, :math:`R_0(r)` is read from input.profiles and the normalizing length scale is the plasma minor radius. + +----- + +.. =========================================================================================== + +.. _neo_rmin_over_a: + +RMIN_OVER_A +----------- + +**Definition** + +The ratio of the midplane minor radius :math:`r` to the normalizing length scale:math:`a`. + +**Comments** + +- DEFAULT: 0.5 +- For :ref:`neo_n_radial` > 1, this parameter is the lower bound of the radial grid. + +----- + +.. =========================================================================================== + +.. _neo_rmin_over_a_2: + +RMIN_OVER_A_2 +------------- + +**Definition** + +The ratio of the midplane minor radius :math:`r` to the normalizing length scale:math:`a`. + +**Comments** + +- DEFAULT: 0.6 +- For :ref:`neo_n_radial` > 1, this parameter is the upper bound of the radial grid. +- For :ref:`neo_n_radial` = 1, this parameter is not used. + +----- + +.. =========================================================================================== + +.. _neo_rotation_model: + +ROTATION_MODEL +-------------- + +**Definition** + +Parameter which selects whether to solve the DKE in the diamagnetic ordering limit or in the sonic toroidal rotation ordering limit. + +**Choices** + +- ROTATION_MODEL = 1: sonic rotation effects not included (diamagnetic ordering assumed) +- ROTATION_MODEL = 2: sonic rotation effects included (solves the Hinton-Wong generalized DKE which allows for flow speeds on the order of the thermal speed). + + - The toroidal rotation frequency :ref:`neo_omega_rot` and the toroidal rotation shear :ref:`neo_omega_rot_deriv` must be specified. + +**COMMENTS** + +- DEFAULT: 1 + +----- + +.. =========================================================================================== + +.. _neo_s_delta: + +S_DELTA +------- + +**Definition** + +Measure of the rate of change of the average triangularity of the flux surface: + +.. math:: + s_\delta = r \frac{\partial \delta}{\partial r} + +**Comments** + +- DEFAULT: 0.0 +- This is only active with :ref:`neo_equilibrium_model` = 2 (the Miller equilibrium model). +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the triangularity as a function of radius is read from input.profiles and the triangularity gradient is computed internally. + +----- + +.. =========================================================================================== + +.. _neo_s_kappa: + +S_KAPPA +------- + +**Definition** + +Measure of the rate of change of the elongation of the flux surface: + +.. math:: + s_\kappa = \frac{r}{\kappa} \frac{\partial \kappa}{\partial r} + +**Comments** + +- DEFAULT: 0.0 +- This is only active with :ref:`neo_equilibrium_model` = 2 (the Miller equilibrium model). +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the elongation as a function of radius is read from input.profiles and the elongation gradient is computed internally. + +----- + +.. =========================================================================================== + +.. _neo_s_zeta: + +S_ZETA +------ + +**Definition** + +Measure of the rate of change of the squareness of the flux surface: + +.. math:: + s_\zeta = r \frac{\partial \zeta}{\partial r} + +**Comments** + +- DEFAULT: 0.0 +- This is only active with :ref:`neo_equilibrium_model` = 2 (the Miller equilibrium model). +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the squareness as a function of radius is read from input.profiles and the squareness gradient is computed internally. + +----- + +.. =========================================================================================== + +.. _neo_s_zmag: + +S_ZMAG +------ + +**Definition** + +Measure of the rate of change of the elevation of the flux surface: + +.. math:: + S_{Z0} = \frac{\partial Z_0}{\partial r} + +**Comments** + +- DEFAULT: 0.0 +- This is only active with :ref:`neo_equilibrium_model` = 2 (the Miller equilibrium model). +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the flux-surface elevation as a function of radius, :math:`Z_0(r)`, is read from input.profiles and its derivative is computed internally. + +----- + + +.. =========================================================================================== + +.. _neo_shear: + +SHEAR +----- + +**Definition** + +Magnetic shear, :math:`s`, of the flux surface: + +.. math:: + s = \frac{r}{q} \frac{\partial q}{\partial r} + +**Comments** + +- DEFAULT: 1.0 +- NOTE: This parameter is *not* used in the standard DKE equation! It is only used in the case of an anisotropic temperature species (e.g. :ref:`neo_aniso_model_*` = 2) to compute :math:`d\Phi_*/dr`. +- This is only active with :ref:`neo_equilibrium_model` = 2 (the Miller equilibrium model). +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the safety factor as a function of radius is read from input.profiles and the safety factor gradient is computed internally. + +----- + +.. =========================================================================================== + +.. _neo_shift: + +SHIFT +----- + +**Definition** + +Shafranov shift, :math:`\Delta`, of the flux surface: + +.. math:: + \Delta = \frac{\partial R_0}{\partial r} + +**Comments** + +- DEFAULT: 0.0 +- This is only active with :ref:`neo_equilibrium_model` = 2 (the Miller equilibrium model). +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the flux-surface-center major radius as a function of radius, :math:`R_0(r)`, is read from input.profiles and its derivative is computed internally. + +----- + +.. _neo_shape_cos0: + +SHAPE_COS0 +---------- + +**Definition** + +0th antisymmetric moment. + +- DEFAULT = 0.0 + +---- + +.. _neo_shape_s_cos0: + +SHAPE_S_COS0 +------------ + +**Definition** + +0th antisymmetric moment shear. + +- DEFAULT = 0.0 + +---- + +.. _neo_shape_cos1: + +SHAPE_COS1 +---------- + +**Definition** + +1st antisymmetric moment. + +- DEFAULT = 0.0 + +---- + +.. _neo_shape_s_cos1: + +SHAPE_S_COS1 +------------ + +**Definition** + +1th antisymmetric moment shear. + +- DEFAULT = 0.0 + +---- + +.. _neo_shape_cos2: + +SHAPE_COS2 +---------- + +**Definition** + +2nd antisymmetric moment. + +- DEFAULT = 0.0 + +---- + +.. _neo_shape_s_cos2: + +SHAPE_S_COS2 +------------ + +**Definition** + +2th antisymmetric moment shear. + +- DEFAULT = 0.0 + +---- + +.. _neo_shape_cos3: + +SHAPE_COS3 +---------- + +**Definition** + +3rd antisymmetric moment. + +- DEFAULT = 0.0 + +---- + +.. _neo_shape_s_cos3: + +SHAPE_S_COS3 +------------ + +**Definition** + +3rd antisymmetric moment. + +- DEFAULT = 0.0 + +---- + +.. _neo_shape_sin3: + +SHAPE_SIN3 +---------- + +**Definition** + +3rd symmetric moment. + +- DEFAULT = 0.0 + +---- + +.. _neo_shape_s_sin3: + +SHAPE_S_SIN3 +------------ + +**Definition** + +3rd symmetric moment shear. + +- DEFAULT = 0.0 + +---- + +.. =========================================================================================== + +.. _neo_silent_flag: + +SILENT_FLAG +----------- + +**Definition** + +Parameter which selects how much data to print out. + +**Choices** + +- SILENT_FLAG = 0: output files are written. +- SILENT_FLAG > 0: no output files are written. + +**Comments** + +- DEFAULT: 0 + +----- + +.. =========================================================================================== + +.. _neo_sim_model: + +SIM_MODEL +--------- + +**Definition** + +Parameter which selects whether to determine the neoclassical transport from analytic theory or from numerical solution of the DKE. + +**Choices** + +- SIM_MODEL = 0: analytic theory only. +- SIM_MODEL = 1: numerical solution and analytic theory and NCLASS. +- SIM_MODEL = 2: numerical solution and analytic theory only. +- SIM_MODEL = 3: analytic theory and NCLASS only. +- SIM_MODEL = 4: neural network of NEO DKE solution. + +**Comments** + +- DEFAULT: 2 + +----- + +.. =========================================================================================== + +.. _neo_spitzer_model: + +SPITZER_MODEL +------------- + +**Definition** + +Parameter which selects whether to solve the standard neoclassical transport problem or the Spitzer problem. + +**Choices** + +- SPITZER_MODEL = 0: solve the standard neoclassical transport problem. +- SPITZER_MODEL = 1: solve the Spitzer problem. + + - Must be run with an electron species and an ion species. + - The Spitzer coefficients (L11, L12, L21, L22) are output in the file out.neo.spitzer. + +**Comments** + +-- DEFAULT: 0 + +----- + +.. =========================================================================================== + +.. _neo_te_ade: + +TE_ADE +------ + +**Definition** + +The normalized equilibrium-scale temperature of the electrons for the case of adiabatic electrons: + +.. math:: + {\rm TE\_ADE} = \frac{T_{0,e}}{T_{\rm norm}} + +**Commments** + +- DEFAULT: 1.0 +- This paramter is used only if no species with Z < 0 is specified. +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the temperature as a function of radius is read from input.profiles and the normalizing temperature is the local temperature of Species 1, :math:`T_{\rm norm}(r)=T_{{\rm species 1}}`. + +----- + +.. =========================================================================================== + +.. _neo_temp_*: + +TEMP_* +------ + +**Definition** + +The normalized equilibrium-scale temperature: + +.. math:: + {\rm TEMP}\_* = \frac{T_{0,*}}{T_{\rm norm}} + +**Commments** + +- DEFAULT: 1.0 +- The temperature of each species 1-11 is set as: TEMP_1, TEMP_2, TEMP_3,... +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the temperature as a function of radius is read from input.profiles and the normalizing temperature is the local temperature of Species 1, :math:`T_{\rm norm}(r)=T_{{\rm species 1}}`. +- The subroutine interface parameter is specified as a vector: neo_temp_in(1:11) + +----- + +.. =========================================================================================== + +.. _neo_temp_para_*: + +TEMP_PARA_* +----------- + +**Definition** + +The normalized equilibrium-scale parallel temperature: + +.. math:: + {\rm TEMP\_PARA}\_* = \frac{T_{\|0,*}}{T_{\rm norm}} + +**Commments** + +- DEFAULT: 1.0 +- The parallel temperature of each species 1-11 is set as: TEMP_PARA_1, TEMP_PARA_2, TEMP_PARA_3,... +- This parameter is used only when the species' anisotropic flag is set (:ref:`neo_aniso_model_*` = 2). +- The subroutine interface parameter is specified as a vector: neo_temp_para_in(1:11) + +----- + +.. =========================================================================================== + +.. _neo_temp_perp_*: + +TEMP_PERP_* +----------- + +**Definition** + +The normalized equilibrium-scale perpendicular temperature: + +.. math:: + {\rm TEMP\_PERP}\_* = \frac{T_{\perp,*}}{T_{\rm norm}} + +**Commments** + +- DEFAULT: 1.0 +- The perpendicular temperature of each species 1-11 is set as: TEMP_PERP_1, TEMP_PERP_2, TEMP_PERP_3,... +- This parameter is used only when the species' anisotropic flag is set (:ref:`neo_aniso_model_*` = 2). +- The subroutine interface parameter is specified as a vector: neo_temp_perp_in(1:11) + +----- + +.. =========================================================================================== + +.. _neo_threed_model: + +THREED_MODEL +------------ + +**Definition** + +Parameter which selects whether to solve the DKE in toroidally axisymmetric limit (2D) or with nonaxisymmetric effects (3D). + +**Choices** + +- THREED_MODEL = 0: toroidally axisymmetric limit (2D). +- THREED_MODEL = 1: toroidally nonaxisymmetric effects are included (3D). + + - This option is presently not available for experimental profiles (:ref:`neo_profile_model` = 2). + + - The local 3D equilibrium solver LE3 must be run first. All of the equilibrium parameters, including the spatial dimensions for :math:`(\theta,\varphi)`, are read from the LE3 output file. + + - Of the plasma equilibrium/geometry NEO input paramters, only :ref:`neo_rho_star`, :ref:`neo_dphi0dr`, and :ref:`neo_rmin_over_a` are used. + + - Of the numerical resolution NEO input parameters, only :ref:`neo_n_xi` and :ref:`neo_n_energy` are used. + +**COMMENTS** + +- DEFAULT: 0 + +----- + +.. =========================================================================================== + +.. _neo_threed_exb_model: + +THREED_EXB_MODEL +---------------- + +**Definition** + +Parameter which selects whether to include the higher-order :math:`{\bf E} \times {\bf B}` drift velocity in the DKE with nonaxisymmetric effects (3D). + +**Choices** + +- THREED_EXB_MODEL = 0: higher-order :math:`{\bf E} \times {\bf B}` drift velocity not included. +- THREED_EXB_MODEL = 1: higher-order :math:`{\bf E} \times {\bf B}` drift velocity included. + + - Used only if toroidal nonaxisymmetric effects are included (:ref:`neo_threed_model` = 1). + + - The value of the equilibrium potential in the higher-order :math:`{\bf E} \times {\bf B}` drift velocity is specified by :ref:`neo_threed_exb_dphi0dr`. Note that this does not affect the equilibrium potential in the neoclassical source term, which is specified by :ref:`neo_dphi0dr`. + +**COMMENTS** + +- DEFAULT: 0 + +----- + +.. =========================================================================================== + +.. _neo_threed_exb_dphi0dr: + +THREED_EXB_DPHI0DR +------------------ + +**Definition** + +The normalized equilibrium-scale radial electric field in the higher-order :math:`{\bf E} \times {\bf B}` drift velocity: + +.. math:: + {\rm THREED\_EXB\_DPHI0DR} = \frac{\partial \Phi_0}{\partial r} \left( \frac{a e}{T_{\rm norm}} \right) + +such that + +.. math:: + E_r^{(0)} = -\frac{\partial \Phi_0}{\partial r} \nabla r + +**Comments** + +- DEFAULT: 0.0 +- Used only if toroidal nonaxisymmetric effects (3D) are included (:ref:`neo_threed_model` = 1). +- This does not affect the equilibrium potential in the neoclassical source term, which is specified by :ref:`neo_dphi0dr`. + +----- + +.. =========================================================================================== + +.. _neo_z_*: + +Z_* +--- + +**Definition** + +The species' charge. + +**Commments** + +- DEFAULT: 1.0 +- The charge of each species 1-11 is set as: Z_1, Z_2, Z_3,... +- The subroutine interface parameter is specified as a vector: neo_z_in(1:11) + +----- + +.. =========================================================================================== + +.. _neo_zeta: + +ZETA +---- + +**Definition** + +Squareness, :math:`\zeta`, of the flux surface. + +**Comments** + +- DEFAULT: 0.0 +- This is only active with :ref:`neo_equilibrium_model` = 2 (the Miller equilibrium model). +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the squareness as a function of radius is read from input.profiles. + +----- + +.. =========================================================================================== + +.. _neo_zmag_over_a: + +ZMAG_OVER_A +----------- + +**Definition** + +The ratio of the elevation of the flux surface, :math:`Z_0`, to the normalizing length scale :math:`a`. + +**Comments** + +- DEFAULT: 0.0 +- When experimental profiles are used (:ref:`neo_profile_model` = 2), the flux-surface elevation as a function of radius, :math:`Z_0(r)` is read from input.profiles and the normalizing length scale is the plasma minor radius. + +----- + + +Return to :doc:`table of inputs ` diff --git a/docs/_sources/neo/neo_table.rst.txt b/docs/_sources/neo/neo_table.rst.txt new file mode 100644 index 0000000..181e29d --- /dev/null +++ b/docs/_sources/neo/neo_table.rst.txt @@ -0,0 +1,116 @@ +Parameters for input.neo +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Some features of **input.neo** to note: + +- Parameters not specified in input.neo are filled in by default. Default values are shown in the parameter definitions. +- The ordering of parameters is arbitrary. +- Lines beginning with # are comments. +- No spaces on the left or right of the equal symbol (:math:`=`) are allowed. +- Parameters with a _MODEL specifier should normally take non-negative integer values. + +.. csv-table:: **Numerical resolution** + :header: "input.neo parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`neo_n_radial`", Number of radial gridpoints,1 + ":ref:`neo_n_theta`", Number of poloidal gridpoints, 17 + ":ref:`neo_n_xi`", "Number of :math:`\xi` polynomials - 1", 17 + ":ref:`neo_n_energy`", Number of :math:`{\rm v}` polynomials - 1, 6 + +.. csv-table:: **Plasma equilibrium/geometry** + :header: "input.neo parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`neo_equilibrium_model`", Geometry selector,0 + ":ref:`neo_rmin_over_a`", Normalized minor radius (min), 0.5 + ":ref:`neo_rmin_over_a_2`", Normalized minor radius (max), 0.6 + ":ref:`neo_rmaj_over_a`", Normalized major radius, 3.0 + ":ref:`neo_kappa`", Elongation, 1.0 + ":ref:`neo_s_kappa`", Elongation shear, 0.0 + ":ref:`neo_delta`", Triangularity, 0.0 + ":ref:`neo_s_delta`", Triangularity shear, 0.0 + ":ref:`neo_zeta`", Squareness, 0.0 + ":ref:`neo_s_zeta`", Squareness shear, 0.0 + ":ref:`neo_shift`", Shafranov shift, 0.0 + ":ref:`neo_zmag_over_a`", Normalized elevation, 0.0 + ":ref:`neo_s_zmag`", Gradient of elevation, 0.0 + ":ref:`neo_q`", Safety factor, 2.0 + ":ref:`neo_shear`", Magnetic shear, 1.0 + ":ref:`neo_beta_star`", Effective pressure gradient, 0.0 + ":ref:`neo_ipccw`", Determines the sign of the plasma current, -1 + ":ref:`neo_btccw`", Determines the sign of the toroidal field, -1 + ":ref:`neo_rho_star`", Normalized Larmor radius, 0.001 + ":ref:`neo_dphi0dr`", Normalized radial electric field, 0.0 + ":ref:`neo_epar0`", Normalized inductive electric field, 0.0 + ":ref:`neo_epar0_spitzer`", Normalized inductive electric field for spitzer problem, 1.0 + +.. csv-table:: **General models** + :header: "input.neo parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`neo_silent_flag`", Output mode selector, 0 + ":ref:`neo_sim_model`", Numerical/analytic simulation model selector, 2 + ":ref:`neo_spitzer_model`", DKE/Spitzer problem selector, 0 + ":ref:`neo_collision_model`", Collision model selector, 4 + +.. csv-table:: **Profile models** + :header: "input.neo parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`neo_profile_model`", Local/experimental profile selector, 1 + ":ref:`neo_profile_equilibrium_model`", Geometry selector for experimental profiles, 1 + ":ref:`neo_profile_erad0_model`", Determines whether to include :math:`E_r^{(0)}` in experimental profiles, 1 + +.. csv-table:: **Rotation physics** + :header: "input.neo parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`neo_rotation_model`", Rotation model selector, 1 + ":ref:`neo_omega_rot`", Normalized toroidal angular frequency, 0.0 + ":ref:`neo_omega_rot_deriv`", Normalized toroidal rotation shear, 0.0 + +.. csv-table:: **Nonaxisymmetric effects** + :header: "input.neo parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`neo_threed_model`", 3D model selector, 0 + ":ref:`neo_threed_exb_model`", 3D ExB drift velocity model selector (higher-order), 0 + ":ref:`neo_threed_exb_dphi0dr`", Normalized radial electric field in the 3D ExB drift velocity, 0 + +.. csv-table:: **Species-dependent parameters** + :header: "input.neo parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`neo_n_species`", Number of kinetic species, 1 + ":ref:`neo_z_*`", "Charge of Species *", 1 + ":ref:`neo_mass_*`", "Normalized mass of Species *", 1.0 + ":ref:`neo_dens_*`", "Normalized density of Species *", "\{1.0,0,0,0,0,0,0,0,0,0,0\}" + ":ref:`neo_temp_*`", "Normalized temperature of Species *", 1.0 + ":ref:`neo_dlnndr_*`", "Normalized logarithmic density gradient of Species *", 1.0 + ":ref:`neo_dlntdr_*`", "Normalized logarithmic temperature of Species *", 1.0 + ":ref:`neo_profile_dlnndr_*_scale`", "Scaling factor for profile normalized logarithmic density gradient of Species *", 1.0 + ":ref:`neo_profile_dlntdr_*_scale`", "Scaling factor for profile normalized logarithmic temperature gradient of Species *", 1.0 + ":ref:`neo_aniso_model_*`", "Anisotropic temperaure model for Species *", 1 + ":ref:`neo_temp_para_*`", "Normalized parallel temperature (aniso) of Species *", 1 + ":ref:`neo_dlntdr_para_*`", "Normalized logarithmic parallel temperature (aniso) of Species *", 1 + ":ref:`neo_temp_perp_*`", "Normalized perpendicular temperature (aniso) of Species *", 1 + ":ref:`neo_dlntdr_perp_*`", "Normalized logarithmic perpendicular temperature (aniso) of Species *", 1 + ":ref:`neo_nu_1`", "Normalized collision frequency of Species 1", 0.1 + ":ref:`neo_ne_ade`", "Normalized density of adiabatic electrons", 1.0 + ":ref:`neo_te_ade`", "Normalized temperature of adiabatic electrons", 1.0 + ":ref:`neo_dlnndre_ade`", "Normalized logarithmic density gradient of adiabatic electrons", 1.0 + ":ref:`neo_dlntdre_ade`", "Normalized logarithmic temperature of adiabatic electrons", 1.0 + +Extra subroutine interface parameters +##################################### + +These parameters are available only via the subroutine interface, i.e. not in **input.neo**. + +.. csv-table:: + :header: "input.neo parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`neo_geo_ny`", Number of geometry Fourier coefficients, 0 + ":ref:`neo_geo_yin`", Array of normalized geometry Fourier coefficients, 0.0 + diff --git a/docs/_sources/neo/outputs.rst.txt b/docs/_sources/neo/outputs.rst.txt new file mode 100644 index 0000000..59162f2 --- /dev/null +++ b/docs/_sources/neo/outputs.rst.txt @@ -0,0 +1,602 @@ +.. |nrm| mathmacro:: \mathrm{norm} +.. |nspec| mathmacro:: \mathtt{N\_SPECIES} +.. |nrad| mathmacro:: \mathtt{N\_RADIAL} +.. |ntheta| mathmacro:: \mathtt{N\_THETA} +.. |mtheta| mathmacro:: \mathtt{M\_THETA} +.. |ne| mathmacro:: \mathtt{N\_ENERGY} +.. |nxi| mathmacro:: \mathtt{N\_XI} + +**************** +NEO Output Files +**************** + +NEO output files are produced only if :ref:`neo_silent_flag` = 0. + +All NEO runtime information is written to out.neo.run. + +Standard output files +##################### + +.. csv-table:: + :header: "Filename", "Short description" + :widths: 20, 30 + + :ref:`neo_out.neo.equil`, "Equilibrium/geometry input data" + :ref:`neo_out.neo.f`, "First-order distribution function" + :ref:`neo_out.neo.grid`, "Numerical grid parameters" + :ref:`neo_out.neo.phi`, "Poloidal variation of first-order es potential" + :ref:`neo_out.neo.theory`, "Neoclassical transport coefficients from analytic theory" + :ref:`neo_out.neo.species`, "Mass and charge of all species" + :ref:`neo_out.neo.theory_nclass`, "Neoclassical transport coefficients from the NCLASS code" + :ref:`neo_out.neo.transport`, "Neoclassical transport coefficients from DKE solve" + :ref:`neo_out.neo.transport_flux`, "Neoclassical fluxes in GB units from DKE solve" + :ref:`neo_out.neo.transport_gv`, "Neoclassical fluxes from gyroviscosity" + :ref:`neo_out.neo.vel`, "Poloidal variation of first-order flows" + :ref:`neo_out.neo.vel_fourier`, "Poloidal variation of first-order flows (Fourier components)" + +Experimental profiles output files +################################## + +Produced only if :ref:`neo_profile_model` = 2. + +.. csv-table:: + :header: "Filename", "Short description" + :widths: 20, 30 + + :ref:`neo_out.neo.transport_exp`, "Neoclassical transport coefficients from DKE solve (in units)" + :ref:`neo_out.neo.exp_norm`, "Normalizing experimental parameters (in units)" + + +Rotation output files +##################### + +Produced only if :ref:`neo_rotation_model` = 2. + +.. csv-table:: + :header: "Filename", "Short description" + :widths: 20, 30 + + :ref:`neo_out.neo.rotation`, "Strong rotation poloidal asymmetry parameters" + +Subroutine output +###################### + +When neo is run in subroutine mode, the outputs are contained in a monolithic file named neo_interface. The NEO subroutine output parameters are as follows: + +.. csv-table:: + :header: "Parameter name", "Short description", "Normalization" + :widths: 20, 30, 30 + + "neo_pflux_dke_out(1:11)", "DKE solve particle flux", ":math:`\Gamma_{\sigma}/(n_\nrm {\rm v}_\nrm)`" + "neo_efluxtot_dke_out(1:11)", "DKE solve energy flux", ":math:`Q_{\sigma}/(n_\nrm {\rm v}_\nrm T_\nrm)`" + "neo_efluxncv_dke_out(1:11)", "DKE solve non-convective energy flux", ":math:`\left(Q_{\sigma}-\omega_0 \Pi_{\sigma}\right)/(n_\nrm {\rm v}_\nrm T_\nrm)`" + "neo_mflux_dke_out(1:11)", "DKE solve momentum flux", ":math:`\Pi_{\sigma}/(n_\nrm T_\nrm a_\nrm)`" + "neo_vpol_dke_out(1:11)", "DKE solve poloidal flow", ":math:`{\rm v}_{\theta,\sigma}(\theta=0)/{\rm v}_\nrm`" + "neo_vtor_dke_out(1:11)", "DKE solve toroidal flow", ":math:`{\rm v}_{\varphi,\sigma}(\theta=0)/{\rm v}_\nrm`" + "neo_jpar_dke_out", "DKE solve bootstrap current (parallel)", ":math:`\left< j_{\|} B \right>/(e n_\nrm {\rm v}_\nrm B_{unit})`" + "neo_jtor_dke_out", "DKE solve bootstrap current (toroidal)",":math:`\left< j_{\varphi} /R \right>/ \left< 1/R \right> / (e n_\nrm {\rm v}_\nrm)`" + "neo_pflux_gv_out(1:11)", "Gyroviscosity particle flux", ":math:`\Gamma_{\sigma}/(n_\nrm {\rm v}_\nrm)`" + "neo_efluxtot_gv_out(1:11)", "Gyroviscosity energy flux", ":math:`Q_{\sigma}/(n_\nrm {\rm v}_\nrm T_\nrm)`" + "neo_efluxncv_gv_out(1:11)", "Gyroviscosity non-convective energy flux", ":math:`\left(Q_{\sigma}-\omega_0 \Pi_{\sigma}\right)/(n_\nrm {\rm v}_\nrm T_\nrm)`" + "neo_mflux_gv_out(1:11)","Gyroviscosity momentum flux",":math:`\Pi_{\sigma}/(n_\nrm T_\nrm a_\nrm)`" + "neo_pflux_thHH_out", "Hinton-Hazeltine ion particle flux", ":math:`\Gamma_{i}/(n_\nrm {\rm v}_\nrm)`" + "neo_eflux_thHHi_out", "Hinton-Hazeltine ion energy flux", ":math:`Q_{i}/(n_\nrm {\rm v}_\nrm T_\nrm)`" + "neo_eflux_thHHe_out", "Hinton-Hazeltine electron energy flux", ":math:`Q_{e}/(n_\nrm {\rm v}_\nrm T_\nrm)`" + "neo_eflux_thCHi_out", "Chang-Hinton ion energy flux", ":math:`Q_{i}/(n_\nrm {\rm v}_\nrm T_\nrm)`" + "neo_pflux_thHS_out(1:11)", "Hirshman-Sigmar particle flux", ":math:`\Gamma_{\sigma}/(n_\nrm {\rm v}_\nrm)`" + "neo_eflux_thS_out(1:11)", "Hirshman-Sigmar energy flux", ":math:`Q_{\sigma}/(n_\nrm {\rm v}_\nrm T_\nrm)`" + "neo_jpar_thS_out", "Sauter bootstrap current (parallel)", ":math:`\left< j_{\|} B \right>/(e n_\nrm {\rm v}_\nrm B_{unit})`" + "neo_jtor_thS_out", "Sauter bootstrap current (toroidal)",":math:`\left< j_{\varphi} /R \right>/ \left< 1/R \right> / (e n_\nrm {\rm v}_\nrm)`" + "neo_pflux_nclass_out(1:11)", "NCLASS solve particle flux", ":math:`\Gamma_{\sigma}/(n_\nrm {\rm v}_\nrm)`" + "neo_efluxtot_nclass_out(1:11)", "NCLASS solve energy flux", ":math:`Q_{\sigma}/(n_\nrm {\rm v}_\nrm T_\nrm)`" + "neo_vpol_nclass_out(1:11)", "NCLASS solve poloidal flow", ":math:`{\rm v}_{\theta,\sigma}(\theta=0)/{\rm v}_\nrm`" + "neo_vtor_nclass_out(1:11)", "NCLASS solve toroidal flow", ":math:`{\rm v}_{\varphi,\sigma}(\theta=0)/{\rm v}_\nrm`" + "neo_jpar_nclass_out", "NCLASS solve bootstrap current (parallel)", ":math:`\left< j_{\|} B \right>/(e n_\nrm {\rm v}_\nrm B_{unit})`" + +------------------------------------------------------------------ + +Detailed description of NEO output files +######################################### + +.. =========================================================================================== + +.. _neo_out.neo.equil: + +out.neo.equil +------------- + +**Description** + +Equilibrium/geometry input data + +**Format** + +Rectangular array of ASCII data: + +- rows: :math:`\nrad` +- cols: :math:`7 + 5 \times \nspec` + +1. :math:`r/a`: normalized midplane minor radius +2. :math:`(\partial \Phi_{0}/\partial r)(a e/T_\nrm)`: normalized equilibrium-scale radial electric field +3. :math:`q`: safety factor +4. :math:`\rho_* = (c \sqrt{m_\nrm T_\nrm})/(e B_{unit} a)`: ratio of Larmor radius of normalizing species to the normalizing length +5. :math:`R_0/a`: normalized flux-surface-center major radius +6. :math:`\omega_0 (a/{\rm v}_\nrm)`: normalized toroidal angular frequency +7. :math:`(d \omega_0/dr)(a^2/{\rm v}_\nrm)`: normalized toroidal rotation shear + +For each species :math:`\sigma`: + +8. :math:`n_{\sigma}/n_\nrm`: normalized equilibrium-scale density +9. :math:`T_{\sigma}/T_\nrm`: normalized equilibrium-scale temperature +10. :math:`a/L_{n\sigma} = -a (d {\rm ln} n_{\sigma}/dr)`: normalized equilibrium-scale density gradient scale length +11. :math:`a/L_{T\sigma} = -a (d {\rm ln} T_{\sigma}/dr)`: normalized equilibrium-scale temperature gradient scale length +12. :math:`\tau_{\sigma\sigma}^{-1} (a/{\rm v}_\nrm)`: normalized collision frequency + +----- + +.. =========================================================================================== + +.. _neo_out.neo.exp_norm: + +out.neo.exp_norm +---------------- + +**Description** + +Normalizing experimental parameters (in units) + +**Format** + +Rectangular array of ASCII data: + +- rows: :math:`\nrad` +- cols: :math:`7` + +1. :math:`r/a`: normalized midplane minor radius +2. :math:`a`: normalizing length (m) +3. :math:`m_\nrm`: normalizing mass (e-27 kg) +4. :math:`n_\nrm`: normalizing equilibrium-scale density (e19/m^3) +5. :math:`T_\nrm`: normalizing equilibrium-scale temperature (keV) +6. :math:`{\rm v}_\nrm`: normalizing thermal speed (m/s) +7. :math:`B_{unit}`: normalizing magnetic field (T) + +----- + +.. =========================================================================================== + +.. _neo_out.neo.f: + +out.neo.f +--------- + +**Description** + +First-order distribution function solution (dimensionless), specifically vector of :math:`\hat{g}_{a,ie,ix,it}` (first-order non-adiabatic distribution function for each species :math:`a`), where + +.. math:: + g_{a}(r,\theta,x_{a},\xi) = f_{0a}(r,\theta,x_a) \sum_{ie=0}^{\ne} \sum_{ix=0}^{\nxi} L_{ie}^{k(ix)+1/2}(x_a^2) P_{ix}(\xi) \hat{g}_{a,ie,ix,it}(\theta) + +where :math:`f_{0a}` is the zeroth-order distribution function (Maxwellian), :math:`L_{ie}` are associated Laguerre polynomials and :math:`P_{ix}` are Legendre polynomials, :math:`k(ix)=0` for ix=0 and :math:`k(ix)=1` for ix>0, :math:`\xi={\rm v}/{\rm v}_{\|}` is the cosine of the pitch angle, and :math:`x_a = {\rm v}/\sqrt{2 {\rm v}_{ta}}` is the normalized energy. + +**Format** + +Vector of ASCII data: + +- :math:`(\nrad) \times (\nspec) \times (\ne+1) \times (\nxi+1) \times (\ntheta`) + +----- + +.. =========================================================================================== + +.. _neo_out.neo.grid: + +out.neo.grid +------------ + +**Description** + +Numerical grid parameters + +**Format** + +Vector of ASCII data: + +- :math:`5 + \ntheta + \nrad` + +1. :math:`\nspec`: number of kinetic species +2. :math:`\ne`: number of energy polynomials +3. :math:`\nxi`: number of :math:`\xi={\rm v}/{\rm v}_{\|}` (cosine of pitch angle) polynomials +4. :math:`\ntheta`: number of theta gridpoints +5. :math:`\theta_j`: theta gridpoints (j=1..N_THETA) +6. :math:`\nrad`: number of radial gridpoints +7. :math:`r_j/a`: normalized radial gridpoints (j=1..N_RADIAL) + +----- + +.. =========================================================================================== + +.. _neo_out.neo.phi: + +out.neo.phi +----------- + +**Description** + +Neoclassical first-order electrostatic potential (normalized) vs. :math:`\theta` + +**Format** + +Rectangular array of ASCII data: + +- rows: :math:`\nrad` +- cols: :math:`\ntheta` + +#. :math:`\frac{e \Phi_{1}(\theta_j)}{T_\nrm}`: first-order electrostatic potential vs. :math:`\theta_j` (j=1...N_THETA) + +----- + +.. =========================================================================================== + +.. _neo_out.neo.rotation: + +out.neo.rotation +---------------- + +**Description** + +Strong rotation poloidal asymmetry parameters (normalized) + +Define: + +- :math:`\Phi_* = \Phi_0 - \Phi_0(\theta=0)` +- :math:`\varepsilon_\sigma = \frac{z_\sigma e}{T_\sigma} - \frac{m_\sigma \omega_0^2}{2 T_\sigma} [R^2 - R^2(\theta=0)]` +- :math:`e_{0\sigma} = \left< e^{-\varepsilon_\sigma} \right>` +- :math:`e_{1\sigma} = \left< e^{-\varepsilon_\sigma} \frac{z_\sigma e \Phi_*}{T_\sigma} \right>` +- :math:`e_{2\sigma} = a_\nrm \left< e^{-\varepsilon_\sigma} \frac{z_\sigma e}{T_\sigma} \frac{\partial \Phi_*}{\partial r} \right>` +- :math:`e_{3\sigma} = \frac{1}{a_\nrm^2} \left< e^{-\varepsilon_\sigma} [R^2 - R^2(\theta=0)] \right>` +- :math:`e_{4\sigma} = \frac{1}{a_\nrm} \left< e^{-\varepsilon_\sigma} \frac{\partial [R^2 - R^2(\theta=0)]}{\partial r} \right>` +- :math:`e_{5\sigma} = a_\nrm \left< e^{-\varepsilon_\sigma} \frac{\partial \ln \sqrt{g}}{\partial r} \right> - a_\nrm \left< e^{-\varepsilon_\sigma} \right> \left< \frac{\partial \ln \sqrt{g}}{\partial r} \right>` +- For anisotropic species, all temperatures are interpreted as :math:`T_{\|}`, the total energy is modified by :math:`\varepsilon_\sigma \rightarrow \varepsilon_\sigma + \lambda_{{\rm aniso},\sigma}(r,\theta)`, and we define the additional term :math:`e_{6\sigma} = -a_\nrm \left< e^{-\varepsilon_\sigma} \frac{\partial \lambda_{{\rm aniso},\sigma}}{\partial r} \right>` +- :math:`F_{V\sigma} = \frac{1}{e_{0\sigma}} \left[ -e_{2\sigma} + e_{3\sigma} a_\nrm^3 \frac{\omega_0}{{\rm v}_{t\sigma}} \frac{d \omega_0}{d r} + e_{4\sigma} a_\nrm^2 \frac{\omega_0^2}{2 {\rm v}_{t\sigma}^2} + e_{1\sigma} a_\nrm \frac{d \ln T_{\sigma}}{d r} - e_{3\sigma} a_\nrm^3 \frac{d \ln T_{\sigma}}{d r} \frac{\omega_0^2}{2 {\rm v}_{t\sigma}^2} + e_{5\sigma} + e_{6\sigma} \right]` + +**Format** + +Rectangular array of ASCII data: + +- rows: :math:`\nrad` +- cols: :math:`2 + 2 \times \nspec + \ntheta + 2 \times \nspec \times \ntheta` + +Fixed entries: + +1. :math:`r/a`: normalized midplane minor radius +2. :math:`\frac{e \left< \Phi_* \right>}{T_\nrm}`: difference between the flux-surface-averaged equilibrium-scale potential and the value at the outboard midplane (0 in the diamagnetic ordering limit) + +For each species :math:`\sigma`: + +3. :math:`\frac{1}{e_{0\sigma}} = \frac{n_{\sigma}}{\left< n_{\sigma} \right>}`: ratio of the density at the outboard midplane to the flux-surface-averaged equilibrium-scale density (1 in the diamagnetic ordering limit) +4. :math:`F_{V\sigma}`: Factor related to the transformation of the particle flux convection (presently only valid in :math:`s-\alpha` geometry) + +For each :math:`\theta_j`, j=1..N_THETA + +5. :math:`\frac{e \Phi_*(\theta_j)}{T_\nrm}`: difference between the equilibrium-scale potential and the value at the outboard midplane (0 in the diamagnetic ordering limit) +6. :math:`\frac{n_{\sigma}(\theta_j)}{n_{\sigma}(\theta=0)}`: poloidal variation of the equilibrium-scale density normalized to the value at the outboard midplane (1 in the diamagnetic ordering limit) + +----- + +.. =========================================================================================== + +.. _neo_out.neo.species: + +out.neo.species +--------------- + +**Description** + +Mass and charge of all species + +**Format** + +Rectangular array of ASCII data: + +* cols: :math:`2 \times \nspec` + +1. For each species :math:`\sigma`: + + - :math:`m_\sigma/m_\nrm`: species mass (we suggest always taking deuterium as the normalizing mass) + - :math:`z_\sigma`: species charge + +----- + +.. =========================================================================================== + +.. _neo_out.neo.theory: + +out.neo.theory +-------------- + +**Description** + +Neoclassical transport coefficients from analytic theory (normalized) + +* Only the Hirshman-Sigmar quantities are meaningful for multiple-ion species plasmas. +* None of the theories are valid with strong rotation effects included. + +**Theory references** + +* Hinton-Hazltine flows and fluxes: Rev. Mod. Phys., vol. 48, 239 (1976) +* Chang-Hinton ion heat flux: Phys. Plasmas, vol. 25, 1493 (1982) +* Taguchi ion heat flux (modified with Chang-Hinton collisional interpolation factor): PPCF, vol. 30, 1897 (1988) +* Sauter et al. bootstrap current model: Phys. Plasmas, vol. 6, 2834 (1999) +* Hinton-Rosenbluth potential: Phys. Fluids 16, 836 (1973) +* Hirshman-Sigmar fluxes: Phys. Fluids, vol. 20, 418 (1977) +* Koh et al. bootstrap current model: Phys. Plasmas, vol. 19, 072505 (2012) + +**Format** + +Rectangular array of ASCII data: + +* rows: :math:`\nrad` +* cols: :math:`17 + 2 \times \nspec` + +1. :math:`r/a`: normalized midplane minor radius +2. HH :math:`\Gamma_{i}/(n_\nrm {\rm v}_\nrm)`: Hinton-Hazeltine second-order radial particle flux (ambipolar) +3. HH :math:`Q_{i}/(n_\nrm {\rm v}_\nrm T_\nrm)`: Hinton-Hazeltine second-order radial energy flux (ion) +4. HH :math:`Q_{e}/(n_\nrm {\rm v}_\nrm T_\nrm)`: Hinton-Hazeltine second-order radial energy flux (electron) +5. HH :math:`\left< j_{\|} B \right>/(e n_\nrm {\rm v}_\nrm B_{unit})`: Hinton-Hazeltine first-order bootstrap current +6. HH :math:`k_{i}`: Hinton-Hazeltine first-order dimensionless flow coefficient (ion) +7. HH :math:`\left< u_{\|,i} B \right>/({\rm v}_\nrm B_{unit})`: Hinton-Hazeltine first-order parallel flow (ion) +8. HH :math:`{\rm v}_{\theta,i}(\theta=0)/{\rm v}_\nrm`: Hinton-Hazeltine first-order poloidal flow at the outboard midplane (ion) +9. CH :math:`Q_{i}/(n_\nrm {\rm v}_\nrm T_\nrm)`: Chang-Hinton second-order radial energy flux (ion) +10. TG :math:`Q_{i}/(n_\nrm {\rm v}_\nrm T_\nrm)`: Taguchi second-order radial energy flux (ion) +11. S :math:`\left< j_{\|} B \right>/(e n_\nrm {\rm v}_\nrm B_{unit})`: Sauter first-order bootstrap current +12. S :math:`k_{i}`: Sauter first-order dimensionless flow coefficient (ion) +13. S :math:`\left< u_{\|,i} B \right>/({\rm v}_\nrm B_{unit})`: Sauter first-order parallel flow (ion) +14. S :math:`{\rm v}_{\theta,i}(\theta=0)/{\rm v}_\nrm`: Sauter first-order poloidal flow at the outboard midplane (ion) +15. HR :math:`\left< (e \Phi_1/T_\nrm)^2 \right>`: Hinton-Rosenbluth first-order electrostatic potential + +16. For each species :math:`\sigma`: + + - HS :math:`\Gamma_{\sigma}/(n_\nrm {\rm v}_\nrm)`: Hirshman-Sigmar second-order radial particle flux + - HS :math:`Q_{\sigma}/(n_\nrm {\rm v}_\nrm T_\nrm)`: Hirshman-Sigmar second-order radial energy flux + +18. K :math:`\left< j_{\|} B \right>/(e n_\nrm {\rm v}_\nrm B_{unit})`: Koh first-order bootstrap current +19. S :math:`\left< j_{\|} B \right>/(e n_\nrm {\rm v}_\nrm B_{unit})`: Sauter first-order bootstrap current + +----- + +.. =========================================================================================== + +.. _neo_out.neo.theory_nclass: + +out.neo.theory_nclass +--------------------- + +**Description** + +Neoclassical transport coefficients from the NCLASS code (normalized) + +* Only produced if :ref:`neo_sim_model` = 1 or 3. +* Note that for local mode (:ref:`neo_profile_model` = 1), it is assumed in the NCLASS calculation that the normalizing mass is the mass of deuterium and that the input collision frequencies are self-consistent across all species. +* NCLASS reference: W.A. Houlberg, et al, Phys. Plasmas, vol. 4, 3230 (1997) + +**Format** + +Rectangular array of ASCII data: + +* rows: :math:`\nrad` +* cols: :math:`2 + 5 \times \nspec` + +1. :math:`r/a`: normalized midplane minor radius +2. :math:`\left< j_{\|} B \right>/(e n_\nrm {\rm v}_\nrm B_{unit})`: first-order bootstrap current + +For each species :math:`\sigma`: + +3. :math:`\Gamma_{\sigma}/(n_\nrm {\rm v}_\nrm)`: second-order radial particle flux +4. :math:`Q_{\sigma}/(n_\nrm {\rm v}_\nrm T_\nrm)`: second-order radial energy flux +5. :math:`\left< u_{\|,\sigma} B \right>/({\rm v}_\nrm B_{unit})`: first-order parallel flow +6. :math:`{\rm v}_{\theta,\sigma}(\theta=0)/{\rm v}_\nrm`: first-order poloidal flow at the outboard midplane +7. :math:`{\rm v}_{\varphi,\sigma}(\theta=0)/{\rm v}_\nrm`: first-order toroidal flow at the outboard midplane + +----- + +.. =========================================================================================== + +.. _neo_out.neo.transport: + +out.neo.transport +----------------- + +**Description** + +Neoclassical transport coefficients from DKE solve (normalized) + +**Format** + +Rectangular array of ASCII data: + +* rows: :math:`\nrad` +* cols: :math:`5 + 8 \times \nspec` + +1. :math:`r/a`: normalized midplane minor radius +2. :math:`\left< (e \Phi_1/T_\nrm )^2 \right>`: first-order electrostatic potential +3. :math:`\left< j_{\|} B \right>/(e n_\nrm {\rm v}_\nrm B_{unit})`: first-order bootstrap current +4. :math:`v_{\varphi}^{(0)}(\theta=0)/{\rm v}_\nrm`: zeroth-order toroidal flow at the outboard midplane (:math:`v_{\varphi}^{(0)}=\omega_0 R`) +5. :math:`\left< u_{\|}^{(0)} B \right>/({\rm v}_\nrm B_{unit})`: zeroth-order parallel flow (:math:`u_{\|}^{(0)}=\omega_0 I/B`) + +For each species :math:`\sigma`: + +6. :math:`\Gamma_{\sigma}/(n_\nrm {\rm v}_\nrm)`: second-order radial particle flux +7. :math:`Q_{\sigma}/(n_\nrm {\rm v}_\nrm T_\nrm)`: second-order radial energy flux +8. :math:`\Pi_{\sigma}/(n_\nrm T_\nrm a_\nrm)`: second-order radial momentum flux +9. :math:`\left< u_{\|,\sigma} B \right>/({\rm v}_\nrm B_{unit})`: first-order parallel flow +10. :math:`k_{\sigma}`: first-order dimensionless flow coefficient +11. :math:`K_{\sigma}/(n_\nrm {rm v}_\nrm/B_{unit})`: first-order dimensional flow coefficient +12. :math:`{\rm v}_{\theta,\sigma}(\theta=0)/{\rm v}_\nrm`: first-order poloidal flow at the outboard midplane +13. :math:`{\rm v}_{\varphi,\sigma}(\theta=0)/{\rm v}_\nrm`: first-order toroidal flow at the outboard midplane + +----- + +.. =========================================================================================== + +.. _neo_out.neo.transport_exp: + +out.neo.transport_exp +--------------------- + +**Description** + +Neoclassical transport coefficients from DKE solve (in units) + +**Format** + +Rectangular array of ASCII data: + +* rows: :math:`\nrad` +* cols: :math:`5 + 8 \times \nspec` + +1. :math:`r`: midplane minor radius (:math:`m`) +2. :math:`\left< (\Phi_1)^2 \right>`: first-order electrostatic potential (:math:`V^2`) +3. :math:`\left< j_{\|} B \right>/B_{unit}`: first-order bootstrap current (:math:`A/m^2`) +4. :math:`v_{\varphi}^{(0)}(\theta=0)`: zeroth-order toroidal flow at the outboard midplane (:math:`v_{\varphi}^{(0)}=\omega_0 R`) (:math:`m/s`) +5. :math:`\left< u_{\|}^{(0)} B \right>/B_{unit}`: zeroth-order parallel flow (:math:`u_{\|}^{(0)}=\omega_0 I/B`) (:math:`m/s`) + +For each species :math:`\sigma`: + +6. :math:`\Gamma_{\sigma}`: second-order radial particle flux (:math:`e19 m^{-2} s^{-1}`) +7. :math:`Q_{\sigma}`: second-order radial energy flux (:math:`W/m^2`) +8. :math:`\Pi_{\sigma}`: second-order radial momentum flux (:math:`N/m`) +9. :math:`\left< u_{\|,\sigma} B \right>/B_{unit}`: first-order parallel flow (:math:`m/s`) +10. :math:`k_{\sigma}`: first-order dimensionless flow coefficient +11. :math:`K_{\sigma}`: first-order dimensional flow coefficient (:math:`e19/(m^2 s T)`) +12. :math:`{\rm v}_{\theta,\sigma}(\theta=0)`: first-order poloidal flow at the outboard midplane (:math:`m/s`) +13. :math:`{\rm v}_{\varphi,\sigma}(\theta=0)`: first-order toroidal flow at the outboard midplane (:math:`m/s`) + +----- + +.. =========================================================================================== + +.. _neo_out.neo.transport_flux: + +out.neo.transport_flux +---------------------- + +**Description** + +Neoclassical fluxes in GB units (defined below) from DKE solve + +.. math:: + \begin{align*} + \Gamma_{GB} & = n_e c_s \left( \rho_{s,{\rm unit}}/a \right)^2 \\ + Q_{GB} & = n_e c_s T_e \left( \rho_{s,{\rm unit}}/a \right)^2\\ + \Pi_{GB} & = n_e T_e a \left( \rho_{s,{\rm unit}}/a \right)^2 + \end{align*} + +where :math:`c_s=\sqrt{T_e/m_D}` and :math:`\displaystyle \rho_{s,{\rm unit}}=\frac{c_s}{e B_{\rm unit}/(m_D c)}`. + +**Format** + +Rectangular array of ASCII data: + +* rows: :math:`\nrad \times 3 \times \nspec` +* cols: :math:`3` + +For each species :math:`\sigma`: + +1. row of DKE (:math:`\Gamma_{\sigma}/\Gamma_{GB}`, :math:`Q_{\sigma}/Q_{GB}`, :math:`\Pi_{\sigma}/\Pi_{GB}`): second-order radial particle, energy, and momentum fluxes from DKE solve + +For each species :math:`\sigma`: + +2. row of GV (:math:`\Gamma_{\sigma}/\Gamma_{GB}`, :math:`Q_{\sigma}/Q_{GB}`, :math:`\Pi_{\sigma}/\Pi_{GB}`): second-order radial particle, energy, and momentum fluxes from gyroviscosity + +For each species :math:`\sigma`: + +3. row of TGYRO (:math:`\Gamma_{\sigma}/\Gamma_{GB}`, :math:`Q_{\sigma}/Q_{GB}`, :math:`\Pi_{\sigma}/\Pi_{GB}`): : second-order radial particle, energy, and momentum fluxes for transport equations + +----- + +.. =========================================================================================== + +.. _neo_out.neo.transport_gv: + +out.neo.transport_gv +-------------------- + +**Description** + +Neoclassical fluxes from gyroviscosity (normalized) + +- These fluxes are nonzero only for the case of combined sonic rotation with up-down asymmetric flux surfaces. +- In the transport equations, these fluxes should be added to the fluxes from the DKE solve. +- Reference: H. Sugama and W. Horton, Phys. Plasmas, vol. 4, 405 (1997). + +**Format** + + +Rectangular array of ASCII data: + +- rows: :math:`\nrad` +- cols: :math:`1 + 3 \times \nspec` + +1. :math:`r/a`: normalized midplane minor radius + +For each species :math:`\sigma`: + +2. :math:`\Gamma_{gv,\sigma}/(n_\nrm {\rm v}_\nrm)`: Gyroviscous second-order radial particle flux +3. :math:`Q_{gv,\sigma}/(n_\nrm {\rm v}_\nrm)`: Gyroviscous second-order radial energy flux +4. :math:`\Pi_{gv,\sigma}/(n_\nrm T_\nrm a_\nrm)`: Gyroviscous second-order radial momentum flux + +----- + +.. =========================================================================================== + +.. _neo_out.neo.vel: + +out.neo.vel +----------- + +**Description** + +Poloidal variation of first-order flows (normalized) + +**Format** + +Rectangular array of ASCII data: + +- rows: :math:`\nrad` +- cols: :math:`\nspec \times \ntheta` + +For each species :math:`\sigma`: + +1. :math:`u_{\|,\sigma}(\theta_j)/{\rm v}_\nrm`: first-order parallel flow vs. :math:`\theta_j \; (j=1 \ldots \ntheta)` + +----- + +.. =========================================================================================== + +.. _neo_out.neo.vel_fourier: + +out.neo.vel_fourier +------------------- + +**Description** + +Poloidal variation of first-order flows (normalized) in Fourier series components + +.. math:: + u(\theta) = \sum_{j=0}^\ntheta u_{cj} \cos (j \theta) + u_{sj} \sin (j \theta) + +**Format** + +Rectangular array of ASCII data: + +- rows: :math:`\nrad` +- cols: :math:`\nspec \times 6 \times (\mtheta + 1)` where :math:`\mtheta = \frac{\ntheta-1}{2}-1` + +For each species :math:`\sigma`: + +1. For j=0..M_THETA, :math:`u_{\|,\sigma,cj}`: cosine-component of first-order parallel flow +2. For j=0..M_THETA, :math:`u_{\|,\sigma,sj}`: sine-component of first-order parallel flow +3. For j=0..M_THETA, :math:`u_{\theta,\sigma,cj}`: cosine-component of first-order poloidal flow +4. For j=0..M_THETA, :math:`u_{\theta,\sigma,sj}`: sine-component of first-order poloidal flow +5. For j=0..M_THETA, :math:`u_{\varphi,\sigma,cj}`: cosine-component of first-order toroidal flow +6. For j=0..M_THETA, :math:`u_{\varphi,\sigma,sj}`: sine-component of first-order toroidal flow diff --git a/docs/_sources/prgen.rst.txt b/docs/_sources/prgen.rst.txt new file mode 100644 index 0000000..5ad54a6 --- /dev/null +++ b/docs/_sources/prgen.rst.txt @@ -0,0 +1,9 @@ +profiles_gen +============ + +History and Overview +-------------------- + +The initial motivation for **profiles_gen** (circa 2005) was to separate the source code required to read and process ONETWO profile data from the main GYRO code base. The rationale was that reading plasma profile and geometry data to calculate suitable inputs for gyrokinetic simulation was not the job of a gyrokinetic code. So in the summer of 2005 it was decided to split the GYRO experimental profile handling into a new tool called iterdb_read. This morphed into the tool iterdb2gyro, which finally became profiles_gen in 2010. The conceptual motivation for profiles_gen was to provide a barrier between the challenges of experimental profile data formats and the standard (typically dimensionless) inputs for gyrokinetic (GYRO) and neoclassical (NEO) simulation. Also, in the pre-2010 period, it became clear that there was a need to standardize and improve geometry input, as ONETWO geometry data was low quality. This led to the idea of separating the profile date (typically from ONETWO or TRANSP) from the equilibrium shape data (from EFIT). By 2010, the ability to specify both a "profile statefile" and an EFIT "gfile" was established. The output from profiles_gen creates a unique format for use with the other GACODE transport codes. + + diff --git a/docs/_sources/rotation.rst.txt b/docs/_sources/rotation.rst.txt new file mode 100644 index 0000000..e666fbc --- /dev/null +++ b/docs/_sources/rotation.rst.txt @@ -0,0 +1,153 @@ +.. |exb| mathmacro:: \mathbf{E}\times\mathbf{B} + +PLASMA ROTATION THEORY +====================== + +Physical considerations +----------------------- + +Sonic rotation can arise in tokamaks from torque due to neutral beam injection. It is believed to play an important role in the suppression of turbulence and the formation of transport barriers through :math:`\exb` shear. In addition, it produces a strong centrifugal force that pushes ions toroidally outward, causing them to redistribute nonuniformly around a flux surface. As a result of quasi-neutrality, a poloidally-varying electrostatic potential is generated by the electrons to balance the density asymmetry. This generates **centrifugal drifts** in addition to the usual :math:`\exb` rotation, Coriolis drift, and parallel velocity shear. Because of their complexity, these centrifugal effects, which are second-order in the main ion Mach number, are ignored in most neoclassical and gyrokinetic codes. Inclusion of full sonic rotation effects is particularly critical for studying transport of heavy impurities :cite:`belli:2008`, as the influence of the centrifugal force is amplified by their large mass. + +Sonic rotation formalism +------------------------ + +The rigorous derivation of the gyrokinetic equations for sonic rotation was carried out by Sugama :cite:`sugama:1998`. Sugama followed the underlying rotation formulation of Hinton and Wong :cite:`hinton:1985`, who showed that in an axisymmetric system the zeroth-order flow velocity is + +.. math:: + + \mathbf{U}_0 = \omega_0(\psi) R^2 \nabla \varphi \; . + +It is this scalar flux-function, :math:`\omega_0`, that is the true free (input) function in both neoclassical and gyrokinetic theory. Here, :math:`\psi` is the poloidal flux divided by :math:`2\pi`. + +The rotation profile +-------------------- + +The relevant profile that gives a *complete specification of rotation* is the angular frequency :math:`\omega_0(r)`, which in defined consistently throughout GACODE as + +.. math:: + \omega_0(r) \longrightarrow \frac{c E_r }{R B_p} \; . + +Thus, if the :math:`E_r` is known from a priori analysis (say, through velocity measurements and force balance), then :math:`\omega_0` is given by the formula above. This equality is subtle (hence the reason for the arrow rather than an equality) and is clarified in detail in the last section. + +Input parameters +---------------- + +CGYRO and NEO implement *full sonic rotation* (GYRO implements only a reduced model) according to the formulation of Hinton and Wong :cite:`hinton:1985`. Neoclassically, the induced poloidally-varying electrostatic potential leads to the formation of potential wells. In the banana regime these increase the effective trapped particle fraction, and in the Pfirsh-Schlüter regime increase the effective toroidal curvature. In both instances, this may lead to enhanced neoclassical transport. The code inputs are given in the tables below. + +.. important:: + Note that all the inputs are derived from the single free function, :math:`\omega_0`. + +.. csv-table:: + :header: "input.cgyro parameter", "Definition", "Description" + :widths: 10, 15, 15 + + ":ref:`cgyro_gamma_e`",":math:`\displaystyle \frac{a}{c_s} \, \gamma_{\rm E}\;` where :math:`\; \displaystyle \gamma_{\rm E} \doteq -\frac{r}{q}\frac{d \omega_{0}}{d r}`",":math:`\exb` shearing rate" + ":ref:`cgyro_gamma_p`",":math:`\displaystyle \frac{a}{c_s} \, \gamma_p\;` where :math:`\; \displaystyle \gamma_{\rm p} \doteq -R_0\frac{d \omega_{0}}{d r}`","rotation shearing rate" + ":ref:`cgyro_mach`",":math:`\displaystyle M\;` where :math:`\;\displaystyle M \doteq \frac{\omega_0 R_0}{c_s}`","rotation rate" + +.. csv-table:: + :header: "input.neo parameter", "Definition", "Description" + :widths: 10, 15, 15 + + ":ref:`neo_omega_rot`",":math:`\displaystyle \frac{a}{v_{\rm norm}} \omega_0`","rotation rate" + ":ref:`neo_omega_rot_deriv`",":math:`\displaystyle \frac{a^{2}}{v_{\rm norm}} \frac{d \omega_{0}}{dr}`","derivative of rotation rate" + +Theoretical basis for sonic rotation +------------------------------------ + +In presence of rapid rotation, where the flow speed :math:`U` is allowed to be of the order of the ion thermal speed, the Lorentz +force term in the the Fokker-Planck equation (see :cite:`hinton:1985`) + +.. math:: + + \frac{\partial f_i}{\partial t} + \mathbf{v} \cdot \nabla f_i + \frac{e}{m_i}(\mathbf{E}+\mathbf{v} \times \mathbf{B}) + \cdot \frac{\partial f_i}{\partial \mathbf{v}} = C_i + S_i + +becomes the leading term. Under these circumstances Hinton and Wong show that + +.. math:: + + \mathbf{E}_{-1} + \frac{\mathbf{U}_0}{c} \times \mathbf{B} = 0 \; , + +where the subscripts represents the order with respect to the **drift ordering** in :math:`\rho_i/a`. +Here :math:`\mathbf{U}_0` is a purely toroidal velocity and is species independent. This ordering is applied to +all fields and moments + +.. math:: + + \begin{matrix} + f_i & = & & & f_{i,0} & + & f_{i,1} & + & \ldots \\ + \Phi & = & \Phi_{-1} & + & \Phi_0 & + & \Phi_1 & + & \ldots \\ + \mathbf{U} & = & & & \mathbf{U}_0 & + & \mathbf{U}_1 & + & \ldots \\ + U_\varphi & = & & & U_{\varphi,0} & + & U_{\varphi,1} & + & \ldots \\ + U_\theta & = & & & & & U_{\theta,1} & + & \ldots + \end{matrix} + +where :math:`U_\varphi \doteq \mathbf{e}_\varphi \cdot \mathbf{U}` is the *toroidal velocity* and :math:`U_\theta \doteq \mathbf{e}_\theta \cdot \mathbf{U}` is the *poloidal velocity*. The leading-order sonic flow is toroidal and independent of species + +.. math:: + + \mathbf{U}_0 = \omega_0(\psi) R \mathbf{e}_{\varphi} \quad \text{where} \quad + \omega_{0}(\psi) \doteq -c \frac{d \Phi_{-1}}{d \psi} \; . + +It is important to note that :math:`\Phi_{-1}` is a **flux function**, whereas higher orders are **not** constant on a flux surface. + +Connection to experimental data +------------------------------- + +We remark that :math:`\omega_{0}` is a **theoretical quantity** that cannot be measured in the experiment. This is similar +to the observation that the experimentally-measured temperature :math:`T_i` is really the sum of an *equilibrium temperature* and a small *fluctuating temperature* driven by turbulence: :math:`T_i = T_{i0} + T_{i1}`. If the drift ordering is valid, then we are justified in approximating the equilibrium temperature :math:`T_{i0}` by the measured temperature :math:`T_i`. For the rotation frequency, similar considerations hold. We note that the theory shows that the potential always appears in the combination + +.. math:: + + \Phi_{-1} + \left\langle \Phi_0 \right\rangle \; , + +where an angle bracket denotes a flux-surface average. By analogy with the temperature, the rotation frequency can related to the experimentally-deduced radial electric field :math:`E_r`, where :math:`E_r = -|\nabla r| d\Phi/dr`, according to + +.. math:: + + \omega_0 + \omega_1 \simeq \frac{c E_r}{R B_p} \quad\text{where}\quad \omega_1 \doteq -c \frac{d \left\langle \Phi_0 \right\rangle }{d\psi} \; . + +In practice, we can set :math:`\omega_1 = 0` *without loss of generality* and all the rotation is contained in :math:`\omega_0`. +Alternatively, in the diamagnetic rotation limit, we set :math:`\omega_0 = 0` with the rotation contained in :math:`\omega_1`. The present theory works consistently in both cases. Finally, the toroidal velocities :math:`U_{\varphi,0} + U_{\varphi,1}` are treated in the same way. + +Consistency with force balance +------------------------------ + +In experimental analyses the *radial force balance* relation is often used + +.. math:: + + E_r = \frac{R B_p}{n_a z_a e} \frac{d p_a}{d\psi} + \frac{U_\varphi}{c} B_p - \frac{U_\theta}{c} B_t \; . + +.. important:: + We emphasize that this relation is *valid at long wavelength (equilibrium scales) only*, and is subject to the same ordering requirements as standard neoclassical and gyrokinetic theory. This means a restriction on the steepness of gradients in the form :math:`d \ln p/dr \ll 1/\rho_i`. See, for example, the discussion in :cite:`sugama:2011`. + +The force balance relation contains terms of order 0 and 1, as described in the previous sections. We can write the velocities in terms of the neoclassical flow coefficient :math:`K_a` (see :cite:`belli:2009`) as + +.. math:: + + \begin{align} + U_\varphi = &~ \frac{K_a}{n_a} B_t + \omega_{1,a} R + \omega_0 R \; , \\ + U_\theta = &~ \frac{K_a}{n_a} B_p \; . + \end{align} + +In the expression for :math:`U_\varphi`, we have defined the angular frequencies + +.. math:: + + \begin{align} + \omega_{1,a} = &~ -c \frac{d \left\langle\Phi_0\right\rangle}{d\psi} - + \frac{c}{n_a z_a e} \frac{d p_a}{d\psi} + {\cal O}(M^2) \; , \\ + \omega_0 = &~ -c \frac{d \Phi_{-1} }{d\psi} \; . + \end{align} + +Substitution of the neoclassical flows into the force balance relation shows that **all species-dependent terms cancel**, leaving + +.. math:: + + E_r = \frac{R B_p}{c} \left( \omega_0 + \omega_1 \right) \; , + +where the species-independent frequency :math:`\omega_1` is discussed in the previous section. + + diff --git a/docs/_sources/setup.rst.txt b/docs/_sources/setup.rst.txt new file mode 100644 index 0000000..2c6038a --- /dev/null +++ b/docs/_sources/setup.rst.txt @@ -0,0 +1,53 @@ +Prebuilt Environments +===================== + +Below we give information about the environment setup required to run GACODE tools on maintained platforms. Once this step is complete, proceed to instructions on running cases :doc:`CGYRO `, :doc:`NEO `, :doc:`TGYRO `, and so on. + +NERSC PERLMUTTER (CPU) +---------------------- + +Add the following lines to ``.bashrc``:: + + export GACODE_PLATFORM=PERLMUTTER_CPU + export GACODE_ROOT=/global/common/software/atom/gacode-perlmutter-cpu + . ${GACODE_ROOT}/shared/bin/gacode_setup + . ${GACODE_ROOT}/platform/env/env.$GACODE_PLATFORM + + +Sample job layout (32 MPI, 8 OMP) = 1 node, 59 min wall-clock time:: + + $ gacode_qsub -code cgyro -n 32 -nomp 8 -repo atom -w 59 + +.. important:: + Perlmutter CPU has 256 logical cores per node (8 OMP * 32 MPI) + +NERSC PERLMUTTER (GPU) +---------------------- + +Add the following lines to ``.bashrc``:: + + export GACODE_PLATFORM=PERLMUTTER_GPU + export GACODE_ROOT=/global/common/software/atom/gacode-perlmutter-gpu + . ${GACODE_ROOT}/shared/bin/gacode_setup + . ${GACODE_ROOT}/platform/env/env.$GACODE_PLATFORM + +Sample job layout (16 MPI, 16 OMP) = (2 nodes, 8 GPUs) 59 min wall-clock time:: + + $ gacode_qsub -code cgyro -n 16 -nomp 16 -repo atom -w 59 + +.. important:: + Perlmutter GPU has 4 GPUs and 128 logical cores per node + +.. important:: + Use ONLY either -nomp 16 (2 MPI/GPU) or -nomp 32 (1 MPI/GPU) + +GA OMEGA +-------- + +To run in a **dedicated GACODE environment**, add these lines to ``.bashrc``:: + + export GACODE_PLATFORM=OMEGA_INTEL + export GACODE_ROOT=/fusion/projects/theory/shared/gacode + . ${GACODE_ROOT}/shared/bin/gacode_setup + . ${GACODE_ROOT}/platform/env/env.${GACODE_PLATFORM} + diff --git a/docs/_sources/shortfall.rst.txt b/docs/_sources/shortfall.rst.txt new file mode 100644 index 0000000..5fe4bba --- /dev/null +++ b/docs/_sources/shortfall.rst.txt @@ -0,0 +1,167 @@ +.. _shortfall: + +DIII-D L-mode shortfall +======================= + +.. |ip| replace:: :doc:`input.gacode ` +.. |GYRO| replace:: :doc:`GYRO ` +.. |TGLF| replace:: :doc:`TGLF ` +.. |GKW| replace:: `GKW` +.. _GKW: https://bitbucket.org/gkw/gkw/wiki/Home +.. |GS2| replace:: `GS2` +.. _GS2: https://bitbucket.org/gyrokinetics/gs2/wiki/Home +.. |GEM| replace:: `GEM` +.. _GEM: https://www.colorado.edu/center/cips/research/plasma-theory-and-simulation/gem-electromagnetic-gyrokinetic-turbulence-simulation +.. |GENE| replace:: `GENE` +.. _GENE: http://genecode.org + +Overview +-------- + +This page is designed to serve as a central common resource and collaboration tool for research into the so-called *shortfall* observed in some gyrokinetic and gyrofluid predictions of DIII-D near-edge (:math:`\rho_{tor}=0.75`) transport and fluctuations levels, and the ITPA T&C group work on this topic. Below are links to key references documenting the issue, equilibrium profiles (in the GACODE input.profiles ASCII format) for DIII-D shot 128913 @ 1500 ms which has been the primary discharge for investigating this issue, and results to date from various codes. We encourage and welcome any and all groups interested in investigating this issue with their model or theory to use the profile data below, and compare their results against those documented here. Questions and comments should be directed to `Chris Holland `_. + +Key publications and presentations +---------------------------------- +#. Initial publication of discharge characteristics and |GYRO| comparisons. + + - A. \E. White *et al.*, “Measurements of core electron temperature and density fluctuations in DIII-D and comparison to nonlinear gyrokinetic simulations”, *Physics of Plasmas* **15** 056116 (2008) :cite:`white:2008` + +#. More detailed |GYRO| comparisons including documentation of synthetic diagnostic implementation. + + - C. Holland *et al.*, “Implementation and Application of Two Synthetic Diagnostics for Validating Simulations of Core Tokamak Turbulence”, *Physics of Plasmas* **16** 052301 (2009) :cite:`holland:2009` + +#. 2012 ITPA presentation examing shortfall issue across multiple DIII-D dishcharges using |TGLF|. + + - :download:`C. Holland 2012 Transport & Confinement ITPA presentation ` + +#. |GYRO|-|GS2|_ benchmark at :math:`\rho_{tor}=0.5` for this discharge. + + - R. \V. Bravenec, J. Candy, M. Barnes, and C. Holland, “Linear and nonlinear verification of gyrokinetic microstability codes”, *Physics of Plasmas* **18** 122505 (2011) :cite:`bravenec:2011` + +#. Local and global predictions from |GEM|_ code for this discharge. **NOTE: these simulations use similar but not identitical experimental profiles as other publications listed here**. + + - J. Chowdhury *et al.*, "Study of the L-mode tokamak plasma 'shortfall' with local and global nonlinear gyrokinetic :math:`\delta f` particle-in-cell simulation", *Physics of Plasmas* **21** 112503 (2014) :cite:`chowdhury:2014` + +#. Analysis of this discharge using |GENE|_ code. + + - T. Görler *et al.*, "A flux-matched gyrokinetic analysis of DIII-D L-mode turbulence", *Physics of Plasmas* **21** 122307 (2014) :cite:`görler:2014` + +#. Validation tutorial article documenting systematic near-edge shortfall observations with |GYRO| for multiple DIII-D L-mode discharges (including shot #128913) + + - C. Holland, "Validation metrics for turbulent plasma transport", *Physics of Plasmas* **23** 060901 (2016) :cite:`holland:2016` + + +EXPERIMENTAL profiles +--------------------- +* Equilibrium profiles (including Miller parameterization of magnetic geometry) in |ip| format are available here: + + - :download:`input.profiles ` + + - :download:`input.profiles.extra ` + + - :download:`input.profiles.geo ` + +* Those interested in examining possible up-down asymmetry effects can refer to the associated input.profiles.geo file above. Alternatively, the EFIT gEQDSK file used for this analysis can be downloaded :download:`here `. Also available for download are the ONETWO :download:`iterdb ` and :download:`CER rotation ` files used to generate the |ip| files above. + +* Older versions of these files, used in references above and results shown below are also availble. These files have the same data as the more recent versions above, but in a slightly different format that will not be accurately read by current GACODE codes. **These files are provided only for reference, and should not be used in future studies**. + + - :download:`OLD input.profiles ` + + - :download:`OLD input.profiles.geo ` + +* Note that there may be small numerical (but not qualitative) differences between the profiles in these files and the values reported in :cite:`holland:2009` due to 10 years of code evolution since the original publication. We **strongly** urge all future work use the most recent :ref:`input.gacode` file for future studies, to ensure a common starting point and basis for comparison. + +GYRO results +------------ + +* A series of linear electrostatic initial-value growth rate convergence calculations have been performed, the results of which are shown here + + .. figure:: shortfall/figures/d3d128913.r8.linscan.convergence.png + :width: 90 % + :alt: linscan + +* The base case (electrostatic, finite electron-ion collisions, drift-kinetic electrons) |GYRO| input file can be found + :download:`here ` + and output summary file + :download:`here `. + +* Error bars are plotted as standard deviations of time-averaged values, generally taken over :math:`t=[30:\, \ge 100] a/c_s`. + +* Text files with results for this figure can be found here: + + - :download:`base case ` + - :download:`h=0.005 ` + - :download:`NX=50 ` + - :download:`h=0.005 ` + - :download:`ENERGY_GRID=10 ` + - :download:`PASS_GRID=TRAP_GRID=5 ` + - :download:`ORBIT_GRID=10, PASS_GRID=TRAP_GRID=5 ` + - :download:`5th-order RBF ` + +* A second set of physics tests have been done, examining the effects of using only adiabatic electrons, inclusion of ion-electron collisions, and electromagnetic effects. These results can be seen here + + .. figure:: shortfall/figures/d3d128913.r8.linscan.physics.png + :width: 90 % + :alt: linscan + +* Text files with results for this figure can be found here: + + - :download:`adiabatic electrions ` + - :download:`ES & nu_ei = 0 ` + - :download:`ES & finite nu_ei ` + - :download:`EM & nu_ei = 0 ` + - :download:`EM & finite nu_ei ` + +GKW results (added 25-jan-2013) +--------------------------------- + +.. image:: shortfall/figures/GKW_physics_freq.png + :width: 48 % + :alt: b250 +.. image:: shortfall/figures/GKW_physics_gamma.png + :width: 48 % + :alt: b250 + +* Text files for electrostatic |GKW|_ electrostatic growth rates with: + + - :download:`no collisions ` + - :download:`pitch-angle scattering ` + +Cross-code benchmarking results +------------------------------- +* The first completed benchmarking study compares results from the gyrokinetic |GYRO|, |GS2|_, |GEM|_, and |GENE|_ codes, as well as the gyrofluid |TGLF| model. |GYRO|, |GS2|_, |GKW|_ and |GENE|_ are continuum Eulearian (although with different velocity-space discretizations) codes, while |GEM|_ is a particle-in-cell code. Unless otherwise noted, the results shown below are for electromagnetic, collisional simulations with a single gyrokinetic ion species. + +* **Update 25-jan-2013:** Results from the continuum gyrokinetic |GKW|_ code have been added. +* **Update 27-mar-2013:** Results from the gyrofluid |TGLF| model have been added. +* **Update 30-may-2013:** Results from the continuum gyrokinetic |GENE|_ code have been added. + +.. image:: shortfall/figures/d3d128913.r8.linscan.GYROvsGENEvsGS2vsGEMvsGKWvsTGLF.png + :width: 100 % + :alt: b250 + +* Individual code results are here for cases with finite collisions: + + - :download:`GYRO ` + - :download:`GS2 ` + - :download:`GEM ` + - :download:`GKW ` + - :download:`TGLF ` + - :download:`GENE ` + +* Comparison of |GYRO|, |GKW|_, and |GENE|_ linear calculations with no collisions and Miller geometry + +.. image:: shortfall/figures/d3d128913.r8.linscan.GYROvsGKWvsGENE_nocoll.png + :width: 100 % + :alt: b250 + + +* Individual code results are here for cases with no collisions: + - :download:`GYRO ` + - :download:`GKW ` + - :download:`GENE ` + +Acknowledgments +------------------------------- +Thanks to Ron Bravenec for providing the |GS2|_ and |GEM|_ data, Yann Camenen for the |GKW|_ results, and Tobias Görler for the |GENE|_ results. + + diff --git a/docs/_sources/tglf.rst.txt b/docs/_sources/tglf.rst.txt new file mode 100644 index 0000000..87f3e4b --- /dev/null +++ b/docs/_sources/tglf.rst.txt @@ -0,0 +1,35 @@ +TGLF +==== + +Quick links +----------- + +.. toctree:: + :titlesonly: + + tglf/tglf_table + tglf/tglf_list + tglf/tglf_output_list + +Overview +-------- + +The TGLF model is a next generation gyro-Landau-fluid model that improves the accuracy of the trapped particle response and the finite Larmor radius effects compared to its predecessor, GLF23. The model solves for the linear eigenmodes of trapped ion and electron modes (TIM, TEM), ion and electron temperature gradient (ITG, ETG) modes and electromagnetic kinetic ballooning (KB) modes. The TGLF model generalizes the methods of GLF23 to a more accurate system of moment equations and an eigenmode solution method that is valid for shaped geometry and finite aspect ratio. The Miller equilibrium model is used in TGLF for shaped finite aspect ratio geometry. In the first phase of developing TGLF, the linear eigenmodes were benchmarked against a database of 1800 linear stability calculations using the GKS gyrokinetic code. The next phase focused on finding a saturation rule that used the quasilinear (QL) weights from TGLF and accurately fit the fluxes from nonlinear simulations. Using a database of 83 nonlinear GYRO simulations with Miller shaped geometry and kinetic electrons, a model for the saturated fluctuation intensity has been found. With a simple quasilinear (QL) saturation rule, remarkable agreement with the energy and particle fluxes from the GYRO database is obtained for both shaped or circular geometry and also for low aspect ratio. Using this new QL saturation rule along with a new ExB shear quench rule for shaped geometry, the density and temperature profiles have recently been predicted in over 500 transport code runs and the results compared against experimental data from 96 tokamak discharges from DIII-D, JET, and TFTR. Compared to GLF23, the TGLF model demonstrates better agreement between the predicted and experimental temperature profiles. Surprisingly, TGLF predicts that the high-k modes are found to play an important role in the central core region of low (L-mode) and high confinement (H-mode) plasmas lacking transport barriers. Using Miller finite aspect ratio shaped geometry in place of :math:`s\text{-}\alpha` infinite aspect ratio circular geometry results in larger transport (especially :math:`\chi_e`) and improved agreement with TFTR, which is circular. By contrast, we see little change in the agreement for DIII-D and JET, where the stabilizing effect of elongation compensates for the increase in :math:`\chi` due to finite aspect ratio. + +.. csv-table:: **References: TGLF saturation models** + :header: "Model", "Useful reference" + :widths: 20,20 + + SAT0, ":cite:`staebler:2007,kinsey:2008`" + Spectral Shift, ":cite:`staebler:2013,staebler:2013b`" + SAT1, ":cite:`staebler:2016`" + SAT2, ":cite:`staebler:2020,staebler:2021`" + SAT3, ":cite:`dudding:2022a,dudding:2022b`" + +.. csv-table:: **References: TGLF validation against experimental data** + :header: "Device", "Required citation" + :widths: 20,20 + + DIII-D, ":cite:`grierson:2018,thome:2021`" + NSTX, ":cite:`kaye:2019`" + ASDEX, ":cite:`angioni:2022`" diff --git a/docs/_sources/tglf/tglf_list.rst.txt b/docs/_sources/tglf/tglf_list.rst.txt new file mode 100644 index 0000000..23c90d9 --- /dev/null +++ b/docs/_sources/tglf/tglf_list.rst.txt @@ -0,0 +1,1417 @@ +.. |exb| mathmacro:: \mathbf{E}\times\mathbf{B} + +Alphabetical list for input.tglf +================================ + + +.. _TGLF_ADIABATIC_ELEC: + +ADIABATIC_ELEC +-------------- + +**Definition** + +Use adiabatic electrons. Adiabatic electrons are assumed to be perfectly Maxwellian and remain so by responding immediately to any change in electrostatic potential along the magnetic field. Generally this assumption works for ITG cases, but not for trapped electron modes, so can be used to distinguish their relative importance. + + +**Comments** + +- DEFAULT = .false. + +---- + +.. _TGLF_ALPHA_E: + +ALPHA_E +------- + +**Definition** + +Multiplies ExB velocity shear for spectral shift model :cite:`staebler:2013`. + + +**Comments** + +- DEFAULT = 1.0 + +---- + +.. _TGLF_ALPHA_ZF: + +ALPHA_ZF +-------- + +**Definition** + +Zonal flow mixing coefficient (used by SAT1, SAT2, SAT3). Note: Can be used as hidden switch that avoids picking unphysically low ky as the peak in gamma/ky when ALPHA_ZF=-1.0. This switch is useful when an MHD mode at the lowest ky causes a large amount of flux. + + +**Comments** + +- DEFAULT = 1.0 + +---- + +.. _TGLF_ALPHA_MACH: + +ALPHA_MACH +---------- + +**Definition** + +Multiplies parallel velocity for all species. + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_ALPHA_P: + +ALPHA_P +------- + +**Definition** + +Multiplies parallel velocity shear for all species. + + +**Comments** + +- DEFAULT = 1.0 + +---- + +.. _TGLF_ALPHA_QUENCH: + +ALPHA_QUENCH +------------ + +**Definition** + + +**Choices** + +- ALPHA_QUENCH = 1.0: use quench rule +- ALPHA_QUENCH = 0.0: use new spectral shift model + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_ALPHA_SA: + +ALPHA_SA +-------- + +**Definition** + +Normalized pressure gradient. + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_AS_1: + +AS_1 +---- + +**Definition** + +Species array of densities :math:`{\frac {n_{s}}{n_{e}}}`. + + +**Comments** + +- DEFAULT = 1.0 , 1.0 + +---- + +.. _TGLF_BETAE: + +BETAE +----- + +**Definition** + +:math:`\beta _{e}\,\!` defined with respect to :math:`B_{\rm {unit}}\,\!`. + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_B_MODEL_SA: + +B_MODEL_SA +---------- + +**Definition** + +0/1 to exclude/include the B(theta) factor in k_per. + + +**Comments** + +- DEFAULT = 1 + +---- + +.. _TGLF_DEBYE: + +DEBYE +----- + +**Definition** + +Debye length/gyroradius. + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_DEBYE_FACTOR: + +DEBYE_FACTOR +------------ + +**Definition** + +Multiplies the debye length. + + +**Comments** + +- DEFAULT = 1.0 + +---- + +.. _TGLF_DELTA_LOC: + +DELTA_LOC +--------- + +**Definition** + + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_DRMAJDX_LOC: + +DRMAJDX_LOC +----------- + +**Definition** + +:math:`{\frac {\partial R_{maj}}{\partial x}}`. + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_DRMINDX_LOC: + +DRMINDX_LOC +----------- + +**Definition** + +Allows for x different than r :math:`{\frac {\partial r}{\partial x}}`. + + +**Comments** + +- DEFAULT = 1.0 + +---- + +.. _TGLF_DZMAJDX_LOC: + +DZMAJDX_LOC +----------- + +**Definition** + +:math:`{\frac {\partial Z_{maj}}{\partial x}}`. + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_ETG_FACTOR: + +ETG_FACTOR +---------- + +**Definition** + +Exponent for ETG saturation rule. + +**Comments** + +- DEFAULT = 1.25 + +---- + +.. _TGLF_FILTER: + +FILTER +------ + +**Definition** + +Sets threshold for frequency/drift frequency to filter out non-driftwave instabilities. + + +**Comments** + +- DEFAULT = 2.0 + +---- + +.. _TGLF_FIND_WIDTH: + +FIND_WIDTH +---------- + +**Definition** + + +**Choices** + +- FIND_WIDTH = .true. : find the width that maximizes the growth rate +- FIND_WIDTH = .false. : use width + + +**Comments** + +- DEFAULT = .true. + +---- + +.. _TGLF_FT_MODEL_SA: + +FT_MODEL_SA +----------- + +**Definition** + +1 uses trapped fraction at the outboard midplane. + + +**Comments** + +- DEFAULT = 1 + +---- + +.. _TGLF_GCHAT: + +GCHAT +----- + +**Definition** + +Multiplies the curvature drift irreducible terms. + + +**Comments** + +- DEFAULT = 1.0 + +---- + +.. _TGLF_GEOMETRY_FLAG: + +GEOMETRY_FLAG +------------- + +**Definition** + +Geometry type. + +**Choices** + +- GEOMETRY_FLAG = 0: :math:`s-\alpha` +- GEOMETRY_FLAG = 1: Miller +- GEOMETRY_FLAG = 2: Fourier +- GEOMETRY_FLAG = 3: ELITE + +**Comments** + +- DEFAULT = 1 + +---- + +.. _TGLF_GHAT: + +GHAT +---- + +**Definition** + +Multiplies the curvature drift closure terms. + + +**Comments** + +- DEFAULT = 1.0 + +---- + +.. _TGLF_GRADB_FACTOR: + +GRADB_FACTOR +------------ + +**Definition** + +Multiplies the gradB terms. + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_IBRANCH: + +IBRANCH +------- + +**Definition** + + +**Choices** + +- IBRANCH = 0: find two most unstable modes one for each sign of frequency, electron drift direction (1), ion drift direction (2) +- IBRANCH = -1: sort the unstable modes by growthrate in rank order + + +**Comments** + +- DEFAULT = -1 + +---- + +.. _TGLF_IFLUX: + +IFLUX +----- + +**Definition** + +Compute quasilinear weights and mode amplitudes. + + +**Comments** + +- DEFAULT = .true. + +---- + +.. _TGLF_KAPPA_LOC: + +KAPPA_LOC +--------- + +**Definition** + +Elongation of flux surface, :math:`\kappa \,\!`. + + +**Comments** + +- DEFAULT = 1.0 + +---- + +.. _TGLF_KX0_LOC: + +KX0_LOC +------- + +**Definition** + +kx0/ky ballooning mode offset. + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_KY: + +KY +-- + +**Definition** + +:math:`k_{\theta }\rho _{s,{\rm {unit}}}\,\!` for single-mode call to TGLF or user-definded ky grid (see KYGRID_MODEL=0 below). + +**Comments** + +- DEFAULT = 0.3 + +---- + +.. _TGLF_KYGRID_MODEL: + +KYGRID_MODEL +------------ + +**Definition** + + +**Choices** + +- KYGRID_MODEL = 0: user defined ky grid with NKY modes up to maximum KY, equal spaced with kymin=KY/NKY +- KYGRID_MODEL = 1: standard ky spectrum often used for SAT0 and SAT1, where kymin=0.1/rho_ion +- KYGRID_MODEL = 4: additional low-ky modes preferred for SAT2, where kymin=0.05*grad_r0/rho_ion + +**Comments** + +- DEFAULT = 1 + +---- + +.. _TGLF_LINSKER_FACTOR: + +LINSKER_FACTOR +-------------- + +**Definition** + +Multiplies the Linsker terms. + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_MASS_1: + +MASS_1 +------ + +**Definition** + +Species masses normalized to :math:`m_{D}`. + + +**Comments** + +- DEFAULT = me/md , 1.0 + +---- + +.. _TGLF_NBASIS_MAX: + +NBASIS_MAX +---------- + +**Definition** + +Maximum number of parallel basis functions. + + +**Comments** + +- DEFAULT = 4 + +---- + +.. _TGLF_NBASIS_MIN: + +NBASIS_MIN +---------- + +**Definition** + +Minimum number of parallel basis functions. + + +**Comments** + +- DEFAULT = 2 + +---- + +.. _TGLF_NEW_EIKONAL: + +NEW_EIKONAL +----------- + +**Definition** + + + +**Choices** + +- NEW_EIKONAL = .true. : compute the eikonal +- NEW_EIKONAL = .false. : use the eikonal computed on the last call to TGLF made with tglf_new_eikonal_in = .true. + + +**Comments** + +- DEFAULT = .true. + +---- + +.. _TGLF_NKY: + +NKY +--- + +**Definition** + +Number of poloidal modes in the high-k spectrum of TGLF, i.e. number of modes with logarithmic spacing to cover roughly 1 < ky < 24. + + +**Comments** + +- DEFAULT = 12 + +---- + +.. _TGLF_NMODES: + +NMODES +------ + +**Definition** + +Number of modes to store for tglf_ibranch_in = -1. + + +**Comments** + +- DEFAULT = 2 + +---- + +.. _TGLF_NS: + +NS +-- + +**Definition** + +Number of species including both electrons and ions. + +**Comments** + +- DEFAULT = 2 + +---- + +.. _TGLF_NWIDTH: + +NWIDTH +------ + +**Definition** + +Maximum number of widths used in search for maximum growth rate. + + +**Comments** + +- DEFAULT = 21 + +---- + +.. _TGLF_NXGRID: + +NXGRID +------ + +**Definition** + +Number of nodes in Gauss-Hermite quadrature. + + +**Comments** + +- DEFAULT = 16 + +---- + +.. _TGLF_PARK: + +PARK +---- + +**Definition** + +Multiplies the parallel gradient term. + + +**Comments** + +- DEFAULT = 1.0 + +---- + +.. _TGLF_P_PRIME_LOC: + +P_PRIME_LOC +----------- + +**Definition** + +:math:`{\frac {qa^{2}}{rB_{unit}^{2}}}{\frac {\partial p}{\partial r}}`. + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_Q_LOC: + +Q_LOC +----- + +**Definition** + +Absolute value of the safety factor, :math:`ABS(q)\,\!`. + + +**Comments** + +- DEFAULT = 2.0 + +---- + +.. _TGLF_Q_PRIME_LOC: + +Q_PRIME_LOC +----------- + +**Definition** + +:math:`{\frac {q^{2}a^{2}}{r^{2}}}s`. + + +**Comments** + +- DEFAULT = 16.0 + +---- + +.. _TGLF_Q_SA: + +Q_SA +---- + +**Definition** + +Absolute value of safety factor. + + +**Comments** + +- DEFAULT = 2.0 + +---- + +.. _TGLF_RLNS_1: + +RLNS_1 +------ + +**Definition** + +Species array of normalized density gradients :math:`-{\frac {a}{n_{s}}}{\frac {dn_{s}}{dr}}`. + + +**Comments** + +- DEFAULT = 1.0 , 1.0 + +---- + +.. _TGLF_RLTS_1: + +RLTS_1 +------ + +**Definition** + +Species array of normalized temperature gradients :math:`-{\frac {a}{T_{s}}}{\frac {dT_{s}}{dr}}`. + + +**Comments** + +- DEFAULT = 3.0 , 3.0 + +---- + +.. _TGLF_RMAJ_LOC: + +RMAJ_LOC +-------- + +**Definition** + +Flux surface centroid major radius :math:`R_{maj}/a\,\!`. + + +**Comments** + +- DEFAULT = 3.0 + +---- + +.. _TGLF_RMAJ_SA: + +RMAJ_SA +------- + +**Definition** + +Normalized major radius of flux surface :math:`R_{maj}/a\,\!`. + + +**Comments** + +- DEFAULT = 3.0 + +---- + +.. _TGLF_RMIN_LOC: + +RMIN_LOC +-------- + +**Definition** + +Flux surface centroid minor radius :math:`r/a\,\!`. + + +**Comments** + +- DEFAULT = 0.5 + +---- + +.. _TGLF_RMIN_SA: + +RMIN_SA +------- + +**Definition** + +Normalized minor radius of flux surface :math:`r/a\,\!`. + + +**Comments** + +- DEFAULT = 0.5 + +---- + +.. _TGLF_SAT_RULE: + +SAT_RULE +-------- + +**Definition** + +- SAT_RULE = 0 finds zonal flow shear at each ky :cite:`staebler:2007`. +- SAT_RULE = 1 finds dominant saturation mechanism (ZF mixing rate or drift-wave growth rate) and includes ky-coupling :cite:`staebler:2016`. +- SAT_RULE = 2 builds on SAT1 with refined geometric effects (due to Shafranov shift and elongation), improved TEM physics, simplified spectral shift :cite:`staebler:2020,staebler:2021`. +- SAT_RULE = 3 builds on SAT2, captures anti-gyroBohm scaling of fluxes, treats saturation of ITG and TEM differently, has quasi-linear model approximations to align quasi-linear weights with NL GK simulations :cite:`dudding:2022a,dudding:2022b`. + +**Comments** + +- DEFAULT = 0 + +---- + +.. _TGLF_SHAT_SA: + +SHAT_SA +------- + +**Definition** + +Magnetic shear :math:`{\frac {r}{q}}{\frac {\partial q}{\partial r}}`. Caution: Only used for :math:`s-\alpha` geometry (GEOMETRY_FLAG = 0), otherwise see Q_PRIME_LOC. + + +**Comments** + +- DEFAULT = 1.0 + +---- + +.. _TGLF_SIGN_BT: + +SIGN_BT +------- + +**Definition** + +Sign of :math:`B_{T}` with repsect to CCW toroidal direction from top. + + +**Comments** + +- DEFAULT = 1 + +---- + +.. _TGLF_SIGN_IT: + +SIGN_IT +------- + +**Definition** + +Sign of :math:`I_{T}` with repsect to CCW toroidal direction from top. + + +**Comments** + +- DEFAULT = 1 + +---- + +.. _TGLF_S_DELTA_LOC: + +S_DELTA_LOC +----------- + +**Definition** + +Shear in triangularity, :math:`r{\frac {\partial \delta }{\partial r}}`. + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_S_KAPPA_LOC: + +S_KAPPA_LOC +----------- + +**Definition** + +Shear in elongation, :math:`{\frac {r}{\kappa }}{\frac {\partial \kappa }{\partial r}}`. + + +**Comments** + +- DEFAULT = 16.0 + +---- + +.. _TGLF_S_ZETA_LOC: + +S_ZETA_LOC +----------- + +**Definition** + +Shear in squareness, :math:`r{\frac {\partial \zeta }{\partial r}}`. + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_TAUS_1: + +TAUS_1 +------ + +**Definition** + +Species array of temperatures :math:`{\frac {T_{s}}{T_{e}}}`. + + +**Comments** + +- DEFAULT = 1.0 , 1.0 + +---- + +.. _TGLF_THETA0_SA: + +THETA0_SA +--------- + +**Definition** + +:math:`\theta _{0}={\frac {k_{x}}{sk_{y}}}`. + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_THETA_TRAPPED: + +THETA_TRAPPED +------------- + +**Definition** + +Parameter to adjust trapped fraction model. + + +**Comments** + +- DEFAULT = 0.7 + +---- + +.. _TGLF_UNITS: + +UNITS +------ + +**Definition** + +Units system used for SAT1 (default is GYRO, but with CGYRO you get the more recent Nov. 2019 version of the spectral shift model and overall geometry factors calibrated by CGYRO runs). Note that UNITS=CGYRO is enforced for SAT2, and GYRO is enforced for SAT0. + + +**Comments** + +- DEFAULT = GYRO + +---- + +.. _TGLF_USE_BISECTION: + +USE_BISECTION +------------- + +**Definition** + +Use bisection search method to find width that maximizes growth rate. + + +**Comments** + +- DEFAULT = .true. + +---- + +.. _TGLF_USE_BPAR: + +USE_BPAR +-------- + +**Definition** + +Include compressional magnetic fluctuations, :math:`\delta B_{\lVert }`. Note: The BPAR flutter is not well resolved by TGLF (not enough moments) and does not reproduce GYRO linear results for NSTX-U. + + +**Comments** + +- DEFAULT = .false. + +---- + +.. _TGLF_USE_BPER: + +USE_BPER +-------- + +**Definition** + +Include transverse magnetic fluctuations, :math:`\delta A_{\lVert }`. + + +**Comments** + +- DEFAULT = .false. + +---- + +.. _TGLF_USE_INBOARD_DETRAPPED: + +USE_INBOARD_DETRAPPED +--------------------- + +**Definition** + +Set trapped fraction to zero if eigenmode is inward ballooning. + + +**Comments** + +- DEFAULT = .false. + +---- + +.. _TGLF_USE_MHD_RULE: + +USE_MHD_RULE +------------ + +**Definition** + +Ignore pressure gradient contribution to curvature drift. Recommend setting to .false. for high beta. + + +**Comments** + +- DEFAULT = .true. + +---- + +.. _TGLF_USE_TRANSPORT_MODEL: + +USE_TRANSPORT_MODEL +------------------- + +**Definition** + + + +**Comments** + +- DEFAULT = .true. + +---- + +.. _TGLF_VEXB: + +VEXB +---- + +**Definition** + +Normalized of ExB velocity Doppler shift common to all species (not in use, see VPAR). + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_VEXB_SHEAR: + +VEXB_SHEAR +---------- + +**Definition** + +Normalized toroidal ExB velocity Doppler shift gradient common to all species. For large ExB velocity ordering :math:`V_{tor}=V_{ExB}`. +VEXB_SHEAR = :math:`-SIGN(I_{tor}){\frac {r}{ABS(q)}}{\frac {\partial }{\partial r}}({\frac {V_{ExB}}{R}}){\frac {a}{c_{s}}}`. + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_VPAR_1: + +VPAR_1 +------ + +**Definition** + +Species array of parallel velocities, :math:`SIGN(I_{tor}){\frac {R_{maj}V_{tor}}{Rc_{s}}}`. + + +**Comments** + +- DEFAULT = 0.0 , 0.0 + +---- + +.. _TGLF_VPAR_MODEL: + +VPAR_MODEL +---------- + +**Definition** + + + +**Choices** + +- VPAR_MODEL = 0: low-Mach-number limit + + +**Comments** + +- DEFAULT = 0 + +---- + +.. _TGLF_VPAR_SHEAR_1: + +VPAR_SHEAR_1 +------------ + +**Definition** + +Normalized parallel velocity gradient, :math:`-SIGN(I_{tor})R_{maj}{\frac {\partial }{\partial r}}({\frac {V_{tor}}{R}}){\frac {a}{c_{s}}}`. + + +**Comments** + +- DEFAULT = 0.0 , 0.0 + +---- + +.. _TGLF_VPAR_SHEAR_MODEL: + +VPAR_SHEAR_MODEL +---------------- + +**Definition** + +Depricated parameter. + + +**Comments** + +- DEFAULT = 0 + +---- + +.. _TGLF_WD_ZERO: + +WD_ZERO +------- + +**Definition** + +Cutoff for curvature drift eigenvalues to prevent zero. + + +**Comments** + +- DEFAULT = 0.1 + +---- + +.. _TGLF_WIDTH: + +WIDTH +----- + +**Definition** + +Maximum width of the Gaussian measure for the parallel Hermite polynomial basis. + + +**Comments** + +- DEFAULT = 1.65 + +---- + +.. _TGLF_WIDTH_MIN: + +WIDTH_MIN +--------- + +**Definition** + +Minimum width used in search for maximum growth rate. + + +**Comments** + +- DEFAULT = 0.3 + +---- + +.. _TGLF_WRITE_WAVEFUNCTION_FLAG: + +WRITE_WAVEFUNCTION_FLAG +----------------------- + +**Definition** + +Self-explanatory. + + +**Comments** + +- DEFAULT = 0 + +---- + +.. _TGLF_XNUE: + +XNUE +---- + +**Definition** + +Electron-ion collision frequency :math:`{\frac {v_{ei}}{c_{s}/a}}`. + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_XNU_FACTOR: + +XNU_FACTOR +---------- + +**Definition** + +Multiplies the trapped/passing boundary electron-ion collision terms. + + +**Comments** + +- DEFAULT = 1.0 + +---- + +.. _TGLF_XNU_MODEL: + +XNU_MODEL +--------- + +**Definition** + +Collision model. + + +**Choices** + +- XNU_MODEL = 2: default preset for SAT0 and SAT1 +- XNU_MODEL = 3: default preset for SAT2 + + +**Comments** + +- DEFAULT = 2 + +---- + +.. _TGLF_XWELL_SA: + +XWELL_SA +-------- + +**Definition** + +Magnetic well. + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_ZEFF: + +ZEFF +---- + +**Definition** + +Effective ion charge. + + +**Comments** + +- DEFAULT = 1.0 + +---- + +.. _TGLF_ZETA_LOC: + +ZETA_LOC +-------- + +**Definition** + +Squareness, :math:`\zeta \,\!` , of flux surface. + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_ZMAJ_LOC: + +ZMAJ_LOC +-------- + +**Definition** + +Flux surface centroid elevation :math:`Z_{maj}/a\,\!`. + + +**Comments** + +- DEFAULT = 0.0 + +---- + +.. _TGLF_ZS_1: + +ZS_1 +---- + +**Definition** + +Species charge numbers. + + +**Comments** + +- DEFAULT = -1.0 , 1.0 + +----Return to :doc:`table of inputs and outputs ` + diff --git a/docs/_sources/tglf/tglf_output_list.rst.txt b/docs/_sources/tglf/tglf_output_list.rst.txt new file mode 100644 index 0000000..8bfda78 --- /dev/null +++ b/docs/_sources/tglf/tglf_output_list.rst.txt @@ -0,0 +1,172 @@ +Alphabetical list for out.tglf files +==================================== + + +.. _TGLF_DENSITY_SPECTRUM: + +density_spectrum +---------------- + +**Description** + +Gyro-bohm normalized density fluctuation amplitude spectra, :math:`{\frac {a \delta \tilde{n}_{s,k_y}}{\rho_s n_{e0}}}`. + + +**Comments** + +- columns: density(ns=1,..,ns_in) + +---- + +.. _TGLF_EIGENVALUE_SPECTRUM: + +eigenvalue_spectrum +------------------- + +**Description** + +Gyro-bohm normalized eigenvalue spectra + + +**Comments** + +- columns: gamma(nm=1), freq(nm=1), gamma(nm=2), freq(nm=2) + +---- + +.. _TGLF_FIELD_SPECTRUM: + +field_spectrum +-------------- + +**Description** + +Gyro-bohm normalized field fluctuation intensity spectra per mode + + +**Comments** + +- index limits: nky, nmodes + + +.. _TGLF_INTENSITY_SPECTRUM: + +intensity_spectrum +------------------ + +**Description** + +Gyro-bohm normalized intensity fluctuation amplitude spectra per mode + + +**Comments** + +- columns: density, temperature, parallel velocity, parallel energy +- index limits: ns, nky, nmodes + +---- + +.. _TGLF_NSTS_CROSSPHASE_SPECTRUM: + +nsts_crossphase_spectrum +------------------------ + +**Description** + +Density-temperature cross phase spectra per mode for each species + + +**Comments** + +- index limits: nky, nmodes + +---- + +.. _TGLF_QL_FLUX_SPECTRUM: + +QL_flux_spectrum +---------------- + +**Description** + +QL weights per mode, species, field and type (type = particle, energy, toroidal stress, parallel stress, exchange) + +**Comments** + +- index limits: nky, nmodes, ns, field, type + +---- + +.. _TGLF_SAT_GEO_SPECTRUM: + +sat_geo_spectrum +---------------- + +**Description** + +Saturation model geometry factor per mode :math:`{\frac {<\phi|\phi>}{<\phi| B^2/B_{unit}^2 |\phi>}}` + +**Comments** + +- index limits: nky, nmodes + +---- + +.. _TGLF_SCALAR_SATURATION_PARAMETERS: + +scalar_saturation_parameters +---------------------------- + +**Description** + +This output file has all of the scalar saturation parameters used for different settings of :ref:`TGLF_SAT_RULE`, :ref:`TGLF_UNITS`, :ref:`TGLF_ALPHA_ZF` + +---- + +.. _TGLF_SPECTRAL_SHIFT: + +spectral_shift +-------------- + +**Description** + +kx spectral shift model is used when ALPHA_QUENCH=0 and ALPHA_E=1.0. Note: The mode for the spectral shift, :math:`kx_e={\frac{<\phi| k_x/k_y |\phi>}{<\phi|\phi>}}`, depends on which saturation model is being used: SAT_RULE and UNITS settings + +**Comments** + +- index limits: nky + +---- + +.. _TGLF_SUM_FLUX_SPECTRUM: + +sum_flux_spectrum +----------------- + +**Description** + +flux spectrum summed over nmodes. A simple sum over nky axis will give total flux. + +**Comments** + +- index limits: nky +- columns: particle flux, energy flux, toroidal stress, parallel stress, exchange + +---- + +.. _TGLF_TEMPERATURE_SPECTRUM: + +temperature_spectrum +-------------------- + +**Description** + +Gyro-bohm normalized temperature fluctuation amplitude spectra + +**Comments** + +- index: nky, ns +- columns: temperature(ns=1,..,ns_in) + + +-----Return to :doc:`table of inputs and outputs ` diff --git a/docs/_sources/tglf/tglf_table.rst.txt b/docs/_sources/tglf/tglf_table.rst.txt new file mode 100644 index 0000000..066d9a9 --- /dev/null +++ b/docs/_sources/tglf/tglf_table.rst.txt @@ -0,0 +1,153 @@ +Table of inputs and outputs +======================================= + +.. csv-table:: **Control** + :header: "input.tglf parameter", "Interface parameter", "Short description", "Default" + :widths: 13, 13, 25, 5 + + ":ref:`TGLF_NS`", tglf_ns_in,number of species including both electrons and ions,2 + ":ref:`TGLF_USE_TRANSPORT_MODEL`", tglf_use_transport_model_in,,.true. + ":ref:`TGLF_GEOMETRY_FLAG`",tglf_geometry_flag_in,"geometry type (0= :math:`s-\alpha` , 1=Miller, 2=Fourier, 3=ELITE)",1 + ":ref:`TGLF_USE_BPER`", tglf_use_bper_in,"include transverse magnetic fluctuations, :math:`\delta A_{\lVert }`",.false. + ":ref:`TGLF_USE_BPAR`",tglf_use_bpar_in,"include compressional magnetic fluctuations, :math:`\delta B_{\lVert }`",.false. + ":ref:`TGLF_USE_BISECTION`",tglf_use_bisection_in,"use bisection search method to find width that maximizes growth rate",.true. + ":ref:`TGLF_USE_MHD_RULE`",tglf_use_mhd_rule_in,"ignore pressure gradient contribution to curvature drift",.true. + ":ref:`TGLF_USE_INBOARD_DETRAPPED`",tglf_use_inboard_detrapped_in,"Set trapped fraction to zero if eigenmode is inward ballooning",.false. + ":ref:`TGLF_SAT_RULE`",tglf_sat_rule_in,0=default saturation rule,0 + ":ref:`TGLF_KYGRID_MODEL`",tglf_kygrid_model_in,"1=standard ky spectrum for transport model, 0=user defined with NKY modes up to KY equal spaced",1 + ":ref:`TGLF_XNU_MODEL`",tglf_xnu_model_in,Collision model (2=new),2 + ":ref:`TGLF_VPAR_MODEL`",tglf_vpar_model_in,0=low-Mach-number limit,0 + ":ref:`TGLF_VPAR_SHEAR_MODEL`",tglf_vpar_shear_model_in,deprecated parameter,0 + ":ref:`TGLF_SIGN_BT`",tglf_sign_bt_in,sign of :math:`B_{T}` with respect to CCW toroidal direction from top,1.0 + ":ref:`TGLF_SIGN_IT`",tglf_sign_it_in,sign of :math:`I_{T}` with respect to CCW toroidal direction from top,1.0 + ":ref:`TGLF_KY`",tglf_ky_in,":math:`k_{\theta }\rho _{s,{\rm {unit}}}\,\!` for single-mode call to TGLF",0.3 + ":ref:`TGLF_NEW_EIKONAL`",tglf_new_eikonal_in,".true. = compute the eikonal, .false. = use the eikonal computed on the last call to TGLF made with tglf_new_eikonal_in = .true.",.true. + ":ref:`TGLF_VEXB`",tglf_vexb_in,"normalized of ExB velocity Doppler shift common to all species (not in use, see VPAR)",0.0 + ":ref:`TGLF_VEXB_SHEAR`",tglf_vexb_shear_in,normalized toroidal ExB velocity Doppler shift gradient common to all species. For large ExB velocity ordering :math:`V_{tor}=V_{E\times B}`. VExB_shear :math:`=-SIGN(I_{tor}){\frac {r}{ABS(q)}}{\frac {\partial }{\partial r}}({\frac {V_{E\times B}}{R}})\frac {a}{c_{s}}`,0.0 + ":ref:`TGLF_BETAE`",tglf_betae_in,":math:`\beta _{e}\,\!` defined with respect to :math:`B_{\rm {unit}}\,\!`",0.0 + ":ref:`TGLF_XNUE`",tglf_xnue_in,electron-ion collision frequency :math:`{\frac {v_{ei}}{c_{s}/a}}`,0.0 + ":ref:`TGLF_ZEFF`",tglf_zeff_in,effective ion charge,1.0 + ":ref:`TGLF_DEBYE`",tglf_debye_in,Debye length/gyroradius,0.0 + ":ref:`TGLF_IFLUX`",tglf_iflux_in,compute quasilinear weights and mode amplitudes,.true. + ":ref:`TGLF_IBRANCH`",tglf_ibranch_in,"0 = find two most unstable modes one for each sign of frequency, electron drift direction (1), ion drift direction (2), -1 = sort the unstable modes by growthrate in rank order",-1 + ":ref:`TGLF_NMODES`",tglf_nmodes_in,number of modes to store for tglf_ibranch_in = -1,2 + ":ref:`TGLF_NBASIS_MAX`",tglf_nbasis_max_in,maximum number of parallel basis functions,4 + ":ref:`TGLF_NBASIS_MIN`",tglf_nbasis_min_in,minimum number of parallel basis functions,2 + ":ref:`TGLF_NXGRID`",tglf_nxgrid_in,number of nodes in Gauss-Hermite quadrature,16 + ":ref:`TGLF_NKY`",tglf_nky_in,number of poloidal modes in the high-k spectrum of TGLF_TM,12 + ":ref:`TGLF_ADIABATIC_ELEC`",tglf_adiabatic_elec_in,use adiabatic electrons,.false. + ":ref:`TGLF_ALPHA_P`",tglf_alpha_p_in,multiplies parallel velocity shear for all species,1.0 + ":ref:`TGLF_ALPHA_MACH`",tglf_alpha_mach_in,multiplies parallel velocity for all species,0.0 + ":ref:`TGLF_ALPHA_E`",tglf_alpha_e_in,multiplies ExB velocity shear for spectral shift model,1.0 + ":ref:`TGLF_ALPHA_QUENCH`",tglf_alpha_quench_in,"1.0 = use quench rule, 0.0 = use new spectral shift model",0.0 + ":ref:`TGLF_XNU_FACTOR`",tglf_xnu_factor_in,multiplies the trapped/passing boundary electron-ion collision terms,1.0 + ":ref:`TGLF_DEBYE_FACTOR`",tglf_debye_factor_in,multiplies the debye length,1.0 + ":ref:`TGLF_ETG_FACTOR`",tglf_etg_factor_in,exponent for ETG saturation rule,1.25 + ":ref:`TGLF_WRITE_WAVEFUNCTION_FLAG`",tglf_write_wavefunction_flag_in,Self-explanatory,0 + ":ref:`TGLF_UNITS`",units_in,units system used for SAT1,GYRO + + +.. csv-table:: **Species Vectors** + :header: "input.tglf parameter", "Interface parameter", "Short description", "Default" + :widths: 13, 13, 25, 5 + + ":ref:`TGLF_ZS_1`",tglf_zs_in(:),species charge numbers,"-1.0,1.0" + ":ref:`TGLF_MASS_1`",tglf_mass_in(:),species masses normalized to :math:`m_{D}`,"me/md,1.0" + ":ref:`TGLF_RLNS_1`",tglf_rlns_in(:),species array of normalized density gradients :math:`-{\frac {a}{n_{s}}}{\frac {dn_{s}}{dr}}`,"1.0,1.0" + ":ref:`TGLF_RLTS_1`",tglf_rlts_in(:),species array of normalized temperature gradients :math:`-{\frac {a}{T_{s}}}{\frac {dT_{s}}{dr}}`,"3.0,3.0" + ":ref:`TGLF_TAUS_1`",tglf_taus_in(:),species array of temperatures :math:`{\frac {T_{s}}{T_{e}}}`,"1.0,1.0" + ":ref:`TGLF_AS_1`",tglf_as_in(:),species array of densities :math:`{\frac {n_{s}}{n_{e}}}`,"1.0,1.0" + ":ref:`TGLF_VPAR_1`",tglf_vpar_in(:),species array of parallel velocities :math:`SIGN(I_{tor}){\frac {R_{maj}V_{tor}}{Rc_{s}}}`,"0.0,0.0" + ":ref:`TGLF_VPAR_SHEAR_1`",tglf_vpar_shear_in(:),normalized parallel velocity gradient :math:`-SIGN(I_{tor})R_{maj}{\frac {\partial }{\partial r}}({\frac {V_{tor}}{R}}){\frac {a}{c_{s}}}`,"0.0,0.0" + + +.. csv-table:: **Gaussian width parameters** + :header: "input.tglf parameter", "Interface parameter", "Short description", "Default" + :widths: 13, 13, 25, 5 + + ":ref:`TGLF_WIDTH`",tglf_width_in,maximum width of the Gaussian measure for the parallel Hermite polynomial basis,1.65 + ":ref:`TGLF_WIDTH_MIN`",tglf_width_min_in,minimum width used in search for maximum growth rate,0.3 + ":ref:`TGLF_NWIDTH`",tglf_nwidth_in,maximum number of widths used in search for maximum growth rate,21 + ":ref:`TGLF_FIND_WIDTH`",tglf_find_width_in,".true. = find the width that maximizes the growth rate, .false. = use width",.true. + + +.. csv-table:: **Miller geometry parameters** + :header: "input.tglf parameter", "Interface parameter", "Short description", "Default" + :widths: 13, 13, 25, 5 + + ":ref:`TGLF_RMIN_LOC`",tglf_rmin_loc_in,"flux surface centroid minor radius :math:`r/a\,\!`",0.5 + ":ref:`TGLF_RMAJ_LOC`",tglf_rmaj_loc_in,"flux surface centroid major radius :math:`R_{maj}/a\,\!`",3.0 + ":ref:`TGLF_ZMAJ_LOC`",tglf_zmaj_loc_in,"flux surface centroid elevation :math:`Z_{maj}/a\,\!`",0.0 + ":ref:`TGLF_Q_LOC`",tglf_q_loc_in,"absolute value of the safety factor, :math:`ABS(q)\,\!`",2.0 + ":ref:`TGLF_Q_PRIME_LOC`",tglf_q_prime_loc_in,:math:`{\frac {q^{2}a^{2}}{r^{2}}}s`,16.0 + ":ref:`TGLF_P_PRIME_LOC`",tglf_p_prime_loc_in,:math:`{\frac {qa^{2}}{rB_{unit}^{2}}}{\frac {\partial p}{\partial r}}`,0.0 + ":ref:`TGLF_DRMINDX_LOC`",tglf_drmindx_loc_in,allows for x different than r :math:`{\frac {\partial r}{\partial x}}`,1.0 + ":ref:`TGLF_DRMAJDX_LOC`",tglf_drmajdx_loc_in,:math:`{\frac {\partial R_{maj}}{\partial x}}`,0.0 + ":ref:`TGLF_DZMAJDX_LOC`",tglf_dzmajdx_loc_in,:math:`{\frac {\partial Z_{maj}}{\partial x}}`,0.0 + ":ref:`TGLF_KAPPA_LOC`",tglf_kappa_loc_in,"elongation of flux surface, :math:`\kappa \,\!`",1.0 + ":ref:`TGLF_S_KAPPA_LOC`",tglf_s_kappa_loc_in,"shear in elongation, :math:`{\frac {r}{\kappa }}{\frac {\partial \kappa }{\partial r}}`",0.0 + ":ref:`TGLF_DELTA_LOC`",tglf_delta_loc_in,,0.0 + ":ref:`TGLF_S_DELTA_LOC`",tglf_s_delta_loc_in,"shear in triangularity, :math:`r{\frac {\partial \delta }{\partial r}}`",0.0 + ":ref:`TGLF_ZETA_LOC`",tglf_zeta_loc_in,"squareness, :math:`\zeta \,\!` , of flux surface",0.0 + ":ref:`TGLF_S_ZETA_LOC`",tglf_s_zeta_loc_in,"shear in squareness, :math:`r{\frac {\partial \zeta }{\partial r}}`",0.0 + ":ref:`TGLF_KX0_LOC`",tglf_kx0_in,kx0/ky ballooning mode offset,0.0 + + +.. csv-table:: **s-alpha geometry parameters** + :header: "input.tglf parameter", "Interface parameter", "Short description", "Default" + :widths: 13, 13, 25, 5 + + ":ref:`TGLF_RMIN_SA`",tglf_rmin_sa_in,"normalized minor radius of flux surface :math:`r/a\,\!`",0.5 + ":ref:`TGLF_RMAJ_SA`",tglf_rmaj_sa_in,"normalized major radius of flux surface :math:`R_{maj}/a\,\!`",3.0 + ":ref:`TGLF_Q_SA`",tglf_q_sa_in,absolute value of safety factor,2.0 + ":ref:`TGLF_SHAT_SA`",tglf_shat_sa_in,magnetic shear :math:`{\frac {r}{q}}{\frac {\partial q}{\partial r}}`,1.0 + ":ref:`TGLF_ALPHA_SA`",tglf_alpha_sa_in,normalized pressure gradient,0.0 + ":ref:`TGLF_XWELL_SA`",tglf_xwell_sa_in,magnetic well,0.0 + ":ref:`TGLF_THETA0_SA`",tglf_theta0_sa_in,:math:`\theta _{0}={\frac {k_{x}}{sk_{y}}}`,0.0 + ":ref:`TGLF_B_MODEL_SA`",tglf_b_model_sa_in,0/1 to exclude/include the B(theta) factor in k_per,1 + ":ref:`TGLF_FT_MODEL_SA`",tglf_ft_model_sa_in,1 uses trapped fraction at the outboard midplane,1 + + +.. csv-table:: **Change-at-your-own-risk parameters** + :header: "input.tglf parameter", "Interface parameter", "Short description", "Default" + :widths: 13, 13, 25, 5 + + ":ref:`TGLF_THETA_TRAPPED`",tglf_theta_trapped_in,parameter to adjust trapped fraction model,0.7 + ":ref:`TGLF_PARK`",tglf_park_in,multiplies the parallel gradient term,1.0 + ":ref:`TGLF_GHAT`",tglf_ghat_in,multiplies the curvature drift closure terms,1.0 + ":ref:`TGLF_GCHAT`",tglf_gchat_in,multiplies the curvature drift irreducible terms,1.0 + ":ref:`TGLF_WD_ZERO`",tglf_wd_zero_in,cutoff for curvature drift eigenvalues to prevent zero,0.1 + ":ref:`TGLF_LINSKER_FACTOR`",tglf_linsker_factor_in,multiplies the Linsker terms,0.0 + ":ref:`TGLF_GRADB_FACTOR`",tglf_gradB_factor_in,multiplies the gradB terms,0.0 + ":ref:`TGLF_FILTER`",tglf_filter_in,sets threshold for frequency/drift frequency to filter out non-driftwave instabilities,2.0 + +.. csv-table:: **TGLF output parameters** + :header: "Interface Parameter", "Definition", "Description" + :widths: 13, 5, 15 + + tglf_elec_pflux_out, :math:`\overline{\Gamma_e}/\Gamma_{GB}`, Gyrobohm-normalized electron particle flux density + tglf_elec_mflux_out, :math:`\overline{\Pi_e}/\Pi_{GB}`, Gyrobohm-normalized electron angular momentum flux density + tglf_elec_eflux_out, :math:`\overline{Q_e}/Q_{GB}`, Gyrobohm-normalized electron energy flux density + tglf_ion1_pflux_out, :math:`\overline{\Gamma_1}/\Gamma_{GB}`, Gyrobohm-normalized main ion particle flux density + tglf_ion1_mflux_out, :math:`\overline{\Pi_1}/\Pi_{GB}`, Gyrobohm-normalized main ion angular momentum flux density + tglf_ion1_eflux_out, :math:`\overline{Q_1}/Q_{GB}`, Gyrobohm-normalized main ion energy flux density + tglf_ion2_pflux_out, :math:`\overline{\Gamma_2}/\Gamma_{GB}`, Gyrobohm-normalized 2nd ion particle flux density + tglf_ion2_mflux_out, :math:`\overline{\Pi_2}/\Pi_{GB}`, Gyrobohm-normalized 2nd ion angular momentum flux density + tglf_ion2_eflux_out, :math:`\overline{Q_2}/Q_{GB}`, Gyrobohm-normalized 2nd ion energy flux density + + +.. csv-table:: **TGLF output files** + :header: "out.tglf filename", "Short description" + :widths: 13, 35 + + ":ref:`TGLF_DENSITY_SPECTRUM`",Gyro-bohm normalized density fluctuation amplitude spectra + ":ref:`TGLF_EIGENVALUE_SPECTRUM`",Gyro-bohm normalized eigenvalue spectra + ":ref:`TGLF_FIELD_SPECTRUM`",Gyro-bohm normalized field fluctuation intensity spectra per mode + ":ref:`TGLF_INTENSITY_SPECTRUM`",Gyro-bohm normalized intensity fluctuation amplitude spectra per mode + ":ref:`TGLF_NSTS_CROSSPHASE_SPECTRUM`", density-temperature cross phase spectra per mode for each species + ":ref:`TGLF_QL_FLUX_SPECTRUM`","QL weights per mode, species, field and type (type = particle, energy, toroidal stress, parallel stress, exchange)" + ":ref:`TGLF_SAT_GEO_SPECTRUM`","saturation model geometry factor per mode :math:`{\frac {<\phi|\phi>}{<\phi| B^2/B_{unit}^2 |\phi>}}`" + ":ref:`TGLF_SCALAR_SATURATION_PARAMETERS`", "This output file has all of the scalar saturation parameters used for different settings of :ref:`TGLF_SAT_RULE`, :ref:`TGLF_UNITS`, :ref:`TGLF_ALPHA_ZF`" + ":ref:`TGLF_SPECTRAL_SHIFT`","kx spectral shift model is used when ALPHA_QUENCH=0 and ALPHA_E=1.0. Note: The mode for the spectral shift, :math:`kx_e={\frac{<\phi| k_x/k_y |\phi>}{<\phi|\phi>}}`, depends on which saturation model is being used: SAT_RULE and UNITS settings" + ":ref:`TGLF_SUM_FLUX_SPECTRUM`",flux spectrum summed over nmodes + ":ref:`TGLF_TEMPERATURE_SPECTRUM`", Gyro-bohm normalized temperature fluctuation amplitude spectra diff --git a/docs/_sources/tgyro.rst.txt b/docs/_sources/tgyro.rst.txt new file mode 100644 index 0000000..25636d1 --- /dev/null +++ b/docs/_sources/tgyro.rst.txt @@ -0,0 +1,51 @@ +TGYRO +===== + +Quick links +----------- + +.. toctree:: + :titlesonly: + + tgyro/tgyro_table + tgyro/tgyro_list + tgyro/equations + tgyro/solver + tgyro/scenarios + tgyro/output + tgyro/plot + +Overview +-------- + +TGYRO is a parallel transport manager with the ability to call multiple +instances of TGLF and NEO in order to obtain steady-state temperature, +density and rotation profiles. The code was designed to operate with a +comparatively *sparse* radial mesh so as to minimize the number of calls +to the transport model. + +In addition to its role as a transport code, TGYRO also operates as a job +manager for ensembles of independent GYRO/CGYRO simulations. + +Data input +---------- + +The primary TGYRO input file is :doc:`input.tgyro `, with +profile data defined in :ref:`input.gacode`. + +Data output, python interface, and plotting +------------------------------------------- + +Although there is a description of :doc:`output data `, it is +suggested that users use the :doc:`python interface ` to output data. + +Transport equations and solution +-------------------------------- + +We give a brief description of the transport equations, see :ref:`tgyro_equations`. +Unlike most other transport solvers, the solution algorithm in TGYRO is **not** based +on time-integration of the transport equations. Instead, the steady-state +equations are solved (see :ref:`tgyro_solver`). + + + diff --git a/docs/_sources/tgyro/equations.rst.txt b/docs/_sources/tgyro/equations.rst.txt new file mode 100644 index 0000000..0d3f1f2 --- /dev/null +++ b/docs/_sources/tgyro/equations.rst.txt @@ -0,0 +1,156 @@ +.. _tgyro_equations: + +Equations solved in TGYRO +~~~~~~~~~~~~~~~~~~~~~~~~~ + +Below we write the most general form of the transport equations solved by TGYRO. The +calculation chain in NEO-CGYRO-TGYRO is a faithful representation of the comprehensive +transport theory of Sugama :cite:`sugama:1998`. This paper is *required reading* for a +detailed understanding of the theoretical foundations of GACODE. Below we summarize +Sugama's form of the transport equations, with some practical simplifications and +notational differences. + +Density Transport +----------------- + +.. math:: + + \frac{\partial \langle n_a \rangle}{\partial t} + + \frac{1}{V^\prime}\frac{\partial}{\partial r} \left( V^\prime \Gamma_a \right) + = S_{n,a} \; , + +where + +.. math:: + + S_{n,a} = S_{n,a}^{\rm beam} + S_{n,a}^{\rm wall} \; , + +and + +.. math:: + + \Gamma_a = \Gamma_a^{\rm neo} + \Gamma_a^{\rm tur} \; . + + +.. csv-table:: **Density fluxes and sources** + :header: "Variable", "Definition", "TGYRO unit" + :widths: 13, 25, 5 + + ":math:`\Gamma_a^{\rm neo}`", Neoclassical particle flux, ":math:`1/s/cm^2`" + ":math:`\Gamma_a^{\rm tur}`", Turbulent particle flux, ":math:`1/s/cm^2`" + ":math:`S_{n,a}^{\rm beam}`", Beam density source rate,":math:`1/s/cm^3`" + ":math:`S_{n,a}^{\rm wall}`", Wall density source rate,":math:`1/s/cm^3`" + + +Energy Transport +---------------- + +.. math:: + \frac{\partial \langle W_a \rangle}{\partial t} + \ + \frac{1}{V^\prime}\frac{\partial}{\partial r} \left( V^\prime Q_a \right) + + \Pi_a \frac{\partial \omega_0}{\partial\psi} = S_{W,a} \; , + +where + +.. math:: + S_{W,a} = S_{W,a}^{\rm aux} + S_{W,a}^{\rm rad} + S_{W,a}^{\alpha} + + S_{W,a}^{\rm tur} + S_{W,a}^{\rm col} \; , + +and + +.. math:: + Q_a = Q_a^{\rm neo} + Q_a^{\rm tur} \; . + + +.. csv-table:: **Energy fluxes and sources** + :header: "Variable", "Definition", "TGYRO unit" + :widths: 13, 25, 5 + + ":math:`Q_a^{\rm neo}`", Neoclassical energy flux, ":math:`erg/s/cm^2`" + ":math:`Q_a^{\rm tur}`", Turbulent energy flux, ":math:`erg/s/cm^2`" + ":math:`S_{W,a}^{\rm aux}`", Auxiliary heating power density, ":math:`erg/s/cm^3`" + ":math:`S_{W,a}^{\rm rad}`", Radiation heating power density, ":math:`erg/s/cm^3`" + ":math:`S_{W,a}^{\alpha}`", Alpha heating power density, ":math:`erg/s/cm^3`" + ":math:`S_{W,a}^{\rm tur}`", Turbulent exchange power density, ":math:`erg/s/cm^3`" + ":math:`S_{W,a}^{\rm col}`", Collisional exchange power density, ":math:`erg/s/cm^3`" + +Momentum Transport +------------------ + +.. math:: + \frac{\partial}{\partial t} \left( \omega_0 \langle R^2 \rangle \sum_a m_a n_a \right) + + \frac{1}{V^\prime}\frac{\partial}{\partial r} \left( V^\prime \sum_a \Pi_a \right) + = \sum_a S_{\omega,a} \; , + +and + +.. math:: + \Pi_a = \Pi_a^{\rm neo} + \Pi_a^{\rm tur} \; . + + +.. csv-table:: **Momentum fluxes and sources** + :header: "Variable", "Definition", "TGYRO unit" + :widths: 13, 25, 5 + + ":math:`\Pi_a^{\rm neo}`", Neoclassical angular momentum flux, ":math:`erg/cm^2`" + ":math:`\Pi_a^{\rm tur}`", Turbulent angular momentum flux, ":math:`erg/cm^2`" + ":math:`S_{\omega,a}`", Angular momentum density source rate, ":math:`erg/cm^3`" + +Connection of Fluxes to Powers +------------------------------ + +.. |gradr| mathmacro:: \left| \nabla r \right| + +* Volume element + +.. math:: + + dV & = dr \, d\theta \, d\varphi \, J_r \\ + & = dn \, dS + +* Jacobian + +.. math:: + + J_r = \frac{\partial(x,y,z)}{\partial(r,\theta,\varphi)} + +* Normal to surface + +.. math:: + + dn = \frac{dr}{\gradr} + +* Volume + +.. math:: + + V(r) = \int_0^r dr \oint \frac{dS}{\gradr} \quad \text{and} \quad V^\prime = \oint \frac{dS}{\gradr} + +* Flux-surface Average + +.. math:: + + \left\langle f \right\rangle = \frac{\oint d\theta \, d\varphi \, J_r \; f}{\oint d\theta \, d\varphi} + = \frac{1}{V^\prime} \oint \frac{dS}{\gradr} \, f + +* Surface Area + +.. math:: + + S(r) &= \oint dS = \oint \gradr \, d\theta \, d\varphi \, J_r \\ + &= V^\prime \left\langle \gradr \right\rangle + +* Flux-power relation + +.. math:: + + V^\prime Q = \int dr \, V^\prime \, S_W = \int dV \, S_W = P + + +* Flux-power relation units + +.. math:: + + V^\prime[\mathrm{cm}^2] Q [\mathrm{erg}/\mathrm{s}/\mathrm{cm}^2] = P [\mathrm{erg}/\mathrm{s}] + + diff --git a/docs/_sources/tgyro/output.rst.txt b/docs/_sources/tgyro/output.rst.txt new file mode 100644 index 0000000..009c590 --- /dev/null +++ b/docs/_sources/tgyro/output.rst.txt @@ -0,0 +1,2 @@ +OUTPUT +====== diff --git a/docs/_sources/tgyro/plot.rst.txt b/docs/_sources/tgyro/plot.rst.txt new file mode 100644 index 0000000..6ce2793 --- /dev/null +++ b/docs/_sources/tgyro/plot.rst.txt @@ -0,0 +1,3 @@ +PLOT +==== + diff --git a/docs/_sources/tgyro/scenarios.rst.txt b/docs/_sources/tgyro/scenarios.rst.txt new file mode 100644 index 0000000..6db0aa6 --- /dev/null +++ b/docs/_sources/tgyro/scenarios.rst.txt @@ -0,0 +1,45 @@ +.. _tgyro_scenarios: + +Scenarios and connection to energy sources +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. math:: + \begin{align} + q_e^\mathrm{aux} = &~\mathtt{qohme}+\mathtt{qbeame}+\mathtt{qrfe}+\mathtt{qione} \\ + q_i^\mathrm{aux} = &~\mathtt{qcxi}+\mathtt{qbeami}+\mathtt{qrfi}+\mathtt{qioni} \\ + q_e^\mathrm{rad} = &~\mathtt{qbrem}+\mathtt{qsync}+\mathtt{qline} \\ + q_e^\mathrm{fus} = &~\mathtt{qfuse} \\ + q_i^\mathrm{fus} = &~\mathtt{qfusi} \\ + q_{ei} = &~\mathtt{qei} + \end{align} + +.. math:: + \begin{align} + q_e^\mathrm{TOT} = &~-q_{ei}+q_e^\mathrm{aux}+q_e^\mathrm{fus}-q_e^\mathrm{rad}\\ + q_i^\mathrm{TOT} = &~+q_{ei}+q_i^\mathrm{aux}+q_i^\mathrm{fus} + \end{align} + +:math:`\mathtt{LOC\_SCENARIO=1}` (static exchange) + +.. math:: + \begin{align} + q_e = &~ q_e^\mathrm{TOT}\\ + q_i = &~ q_i^\mathrm{TOT} + \end{align} + +:math:`\mathtt{LOC\_SCENARIO=2}` (dynamic exchange) + +.. math:: + \begin{align} + q_e = &~ \left( q_e^\mathrm{TOT} + q_{ei} \right) - q_{ei}' \\ + q_i = &~ \left( q_e^\mathrm{TOT} - q_{ei} \right) + q_{ei}' + \end{align} + +:math:`\mathtt{LOC\_SCENARIO=3}` (reactor) + +.. math:: + \begin{align} + q_e = &~ q_e^\mathrm{aux} + (q_e^\mathrm{fus})' - (q_e^\mathrm{rad})' - q_{ei}' \\ + q_i = &~ q_i^\mathrm{aux} + (q_i^\mathrm{fus})' + q_{ei}' + \end{align} + diff --git a/docs/_sources/tgyro/solver.rst.txt b/docs/_sources/tgyro/solver.rst.txt new file mode 100644 index 0000000..940d3fa --- /dev/null +++ b/docs/_sources/tgyro/solver.rst.txt @@ -0,0 +1,290 @@ +.. _tgyro_solver: + +TGYRO solver algorithm +~~~~~~~~~~~~~~~~~~~~~~ + +.. |vpr| mathmacro:: V^\prime +.. |qgb| mathmacro:: Q_{\rm GB} +.. |qhat| mathmacro:: \widehat{Q} +.. |jhat| mathmacro:: \widehat{{\cal J}} +.. |sj| mathmacro:: {\sigma,j} +.. |sspjjp| mathmacro:: {\sigma\sigma^\prime,jj^\prime} +.. |spjp| mathmacro:: {\sigma^\prime,j^\prime} +.. |spj| mathmacro:: {\sigma^\prime,j} +.. |medskip| mathmacro:: ~ + +TGYRO solves the *steady-state transport problem*; that is, the transport +equations with :math:`\partial_t \rightarrow 0`. This algorithm was originally +envisioned to form the basis for a time-implicit solver, but frankly there has +been little interest or need for this capability. Instead, flexibility in +dealing with multiple ions and solver robustness have been emphasized. + +Formulation +----------- + +To describe the algorithm, we will restrict attention to coupled :math:`T_i` +and :math:`T_e` evolution, even though density and rotation can also be +evolved. + +.. math:: + \begin{align} + \frac{1}{\vpr(r)} \frac{\partial}{\partial r} \left[ + \vpr(r) \, Q_i(r) \right] = &~S_i \; , \\ + \frac{1}{\vpr(r)} \frac{\partial}{\partial r} \left[ + \vpr(r) \, Q_e(r) \right] = &~S_e \; . + \end{align} + +Here, the energy fluxes are the taken to be the sum of neoclassical and turbulent +transport: + +.. math:: + \begin{align} + Q_i = & ~Q_i^{\rm Neo} + Q_i^{\rm Turb} \\ + Q_e = & ~Q_e^{\rm Neo} + Q_e^{\rm Turb} + \end{align} + +The total ion and electron sources, :math:`S_e` and :math:`S_i`, are described in more +detail in the :ref:`tgyro_equations` . + + +Some comments regarding units +----------------------------- + +In TGYRO, we have found it convenient to use CGS units rather than employing some variant of the more +popular dimensionless normalizations. Thus, we have + +.. math:: + \begin{align} + {\rm Source}: \quad &~ S \sim \frac{{\rm erg}}{{\rm cm}^3 \, {\rm s}} \\ + {\rm Energy~Flux}: \quad &~ Q \sim \frac{{\rm erg}}{{\rm cm}^2 \, {\rm s}} \\ + {\rm Power}: \quad & P \sim \frac{{\rm erg}}{{\rm s}} \rightarrow + \int_0^r dx \, V^\prime(x) S(x) + \end{align} + + +Solution strategy +----------------- + +Rather than solving the equations directly, we prefer to solve the volume-integrated form +of the equation so that we can deal directly with the fluxes: + +.. math:: + \begin{align} + Q_i^T(r) \doteq \frac{1}{\vpr(r)} & ~\int_0^r dx \, \vpr(x) S_i \\ + Q_e^T(r) \doteq \frac{1}{\vpr(r)} & ~\int_0^r dx \, \vpr(x) S_e + \end{align} + +The result is a curious system which depends on both the temperatures and the +temperature gradients: + +.. math:: + \begin{align} + Q_i(z_i,z_e,T_i,T_e) - Q_i^T(T_i,T_e) = &~0 \\ + Q_e(z_i,z_e,T_i,T_e) - Q_e^T(T_i,T_e) = &~0 + \end{align} + +where + +.. math:: + \begin{equation} + z_i \doteq - \frac{a}{T_i} \frac{\partial T_i}{\partial r} + \quad\mbox{and}\quad + z_e \doteq - \frac{a}{T_e} \frac{\partial T_e}{\partial r} + \end{equation} + +It is important to note the connection between profiles and gradients. Specifically, if we enforce the following pedestal +boundary conditions at :math:`r=r_*`: + +.. math:: + \begin{equation} + T_\sigma(r_*) = T_\sigma^* \; . + \end{equation} + +Then the gradients :math:`z_\sigma` uniquely determine the temperature profiles, :math:`T_\sigma`: + +.. math:: + + \begin{equation} + T_\sigma(r) = T_\sigma^* + \exp\left( \int_r^{r_*} dx \, z_\sigma(x) \right) \; . + \end{equation} + +Formulation on a discrete grid +------------------------------ + +On a discrete grid :math:`r_j`, the temperature profile can be approximately determined using +the trapezoidal rule + +.. math:: + \begin{equation} + T_\sigma(r_{j-1}) = T_\sigma(r_j) \exp \left\{ + \left[ \frac{z_\sigma(r_j)+z_\sigma(r_{j-1})}{2} \right] + \left[ r_j-r_{j-1} \right] \right\} \; . + \end{equation} + +To put the problem into discrete form, we define a vector of +independent variables (gradients) and functions (fluxes): + +.. math:: + \begin{align} + z_\sj = &~ z_\sigma(r_j) \; , \\ + Q_\sj = &~ Q_\sigma(r_j) \; , \\ + Q^T_\sj = &~ Q^T_\sigma(r_j) \; . + \end{align} + +Then, the equations to be solved are + +.. math:: + \begin{equation} + \qhat_\sj = \qhat^T_\sj \; . + \end{equation} + +where a hat denotes gyroBohm normalization: + +.. math:: + \begin{equation} + \qhat \doteq \frac{Q}{\qgb} + \quad \text{where} \quad \qgb = n_e T_e c_s (\rho_s/a)^2 \; . + \end{equation} + +The goal is to apply Newton's method in a way which is as accurate as possible while still +minimizing evaluation of the expensive functions :math:`Q_\sj`. Operationally, we make the +key assumption that the transport +fluxes depend only locally on the gradients (which is approximately +true when quantities are normalzied to the gyroBohm unit of flux), +so that the Jacobian associated with :math:`Q_\sj` is block diagonal: + +.. math:: + \qhat_\sj(z^0) - \qhat^T_\sj(z^0) + + \frac{\partial \qhat_\sj}{\partial z_\spj} \,\delta z_\spj + - \frac{\partial \qhat^T_\sj}{\partial z_\spjp} \, \delta z_\spjp + = 0 \; . + +Above, we have used the shorthand :math:`z \doteq \{z_\sj\}` and +:math:`z^0 \doteq \{z^0_\sj\}`. This can be written in terms of Jacobian matrices as + +.. math:: + \jhat_{\sspjjp} \, \delta z_{\sigma^\prime,j^\prime} = + -\left[ \qhat_\sj(z^0) - \qhat^T_\sj(z^0) \right] \eta_\sj \; , + :label: newton + +where + +.. math:: + \jhat_\sspjjp \doteq {\cal J}_{\sigma\sigma^\prime,jj} \delta_{jj^\prime} + -{\cal J}^T_{\sspjjp} \; , + + +and the quantity :math:`z^1 = z^0 + \delta z` is the Newton update for the vector +:math:`z`. In Eq. :eq:`newton`, we have introduced a *relaxation parameter* +:math:`\eta_\sj`. Note that this method generalizes to an arbitrary number of gradients +and fluxes per gridpoint. In the case of three radial gridpoints, :math:`\{r_1,r_2,r_3\}`, +the Jacobian matrices have the explicit forms + +.. math:: + \begin{equation} + {\cal J}_{\sspjjp} = \begin{pmatrix} + \displaystyle \frac{\partial \qhat_{i,1}}{\partial z_{i,1}} & + \displaystyle \frac{\partial \qhat_{i,1}}{\partial z_{e,1}} & + 0 & 0 & 0 & 0 \medskip \\ + \displaystyle \frac{\partial \qhat_{e,1}}{\partial z_{i,1}} & + \displaystyle \frac{\partial \qhat_{e,1}}{\partial z_{e,1}} & + 0 & 0 & 0 & 0 \medskip \\ + 0 & 0 & + \displaystyle \frac{\partial \qhat_{i,2}}{\partial z_{i,2}} & + \displaystyle \frac{\partial \qhat_{i,2}}{\partial z_{e,2}} & + 0 & 0 \medskip \\ + 0 & 0 & + \displaystyle \frac{\partial \qhat_{e,2}}{\partial z_{i,2}} & + \displaystyle \frac{\partial \qhat_{e,2}}{\partial z_{e,2}} & + 0 & 0 \medskip \\ + 0 & 0 & 0 & 0 & + \displaystyle \frac{\partial \qhat_{i,3}}{\partial z_{i,3}} & + \displaystyle \frac{\partial \qhat_{i,3}}{\partial z_{e,3}} & + \medskip \\ + 0 & 0 & 0 & 0 & + \displaystyle \frac{\partial \qhat_{e,3}}{\partial z_{i,3}} & + \displaystyle \frac{\partial \qhat_{e,3}}{\partial z_{e,3}} & + \end{pmatrix} + \end{equation} + +.. math:: + \begin{equation} + {\cal J}^T_{\sspjjp} = \begin{pmatrix} + \displaystyle \frac{\partial \qhat^T_{i,1}}{\partial z_{i,1}} & + \displaystyle \frac{\partial \qhat^T_{i,1}}{\partial z_{e,1}} & + \displaystyle \frac{\partial \qhat^T_{i,1}}{\partial z_{i,2}} & + \displaystyle \frac{\partial \qhat^T_{i,1}}{\partial z_{e,2}} & + \displaystyle \frac{\partial \qhat^T_{i,1}}{\partial z_{i,3}} & + \displaystyle \frac{\partial \qhat^T_{i,1}}{\partial z_{e,3}} + \medskip \\ + \displaystyle \frac{\partial \qhat^T_{e,1}}{\partial z_{i,1}} & + \displaystyle \frac{\partial \qhat^T_{e,1}}{\partial z_{e,1}} & + \displaystyle \frac{\partial \qhat^T_{e,1}}{\partial z_{i,2}} & + \displaystyle \frac{\partial \qhat^T_{e,1}}{\partial z_{e,2}} & + \displaystyle \frac{\partial \qhat^T_{e,1}}{\partial z_{i,3}} & + \displaystyle \frac{\partial \qhat^T_{e,1}}{\partial z_{e,3}} + \medskip \\ + \displaystyle \frac{\partial \qhat^T_{i,2}}{\partial z_{i,1}} & + \displaystyle \frac{\partial \qhat^T_{i,2}}{\partial z_{e,1}} & + \displaystyle \frac{\partial \qhat^T_{i,2}}{\partial z_{i,2}} & + \displaystyle \frac{\partial \qhat^T_{i,2}}{\partial z_{e,2}} & + \displaystyle \frac{\partial \qhat^T_{i,2}}{\partial z_{i,3}} & + \displaystyle \frac{\partial \qhat^T_{i,2}}{\partial z_{e,3}} + \medskip \\ + \displaystyle \frac{\partial \qhat^T_{e,2}}{\partial z_{i,1}} & + \displaystyle \frac{\partial \qhat^T_{e,2}}{\partial z_{e,1}} & + \displaystyle \frac{\partial \qhat^T_{e,2}}{\partial z_{i,2}} & + \displaystyle \frac{\partial \qhat^T_{e,2}}{\partial z_{e,2}} & + \displaystyle \frac{\partial \qhat^T_{e,2}}{\partial z_{i,3}} & + \displaystyle \frac{\partial \qhat^T_{e,2}}{\partial z_{e,3}} + \medskip \\ + \displaystyle \frac{\partial \qhat^T_{i,3}}{\partial z_{i,1}} & + \displaystyle \frac{\partial \qhat^T_{i,3}}{\partial z_{e,1}} & + \displaystyle \frac{\partial \qhat^T_{i,3}}{\partial z_{i,2}} & + \displaystyle \frac{\partial \qhat^T_{i,3}}{\partial z_{e,2}} & + \displaystyle \frac{\partial \qhat^T_{i,3}}{\partial z_{i,3}} & + \displaystyle \frac{\partial \qhat^T_{i,3}}{\partial z_{e,3}} + \medskip \\ + \displaystyle \frac{\partial \qhat^T_{e,3}}{\partial z_{i,1}} & + \displaystyle \frac{\partial \qhat^T_{e,3}}{\partial z_{e,1}} & + \displaystyle \frac{\partial \qhat^T_{e,3}}{\partial z_{i,2}} & + \displaystyle \frac{\partial \qhat^T_{e,3}}{\partial z_{e,2}} & + \displaystyle \frac{\partial \qhat^T_{e,3}}{\partial z_{i,3}} & + \displaystyle \frac{\partial \qhat^T_{e,3}}{\partial z_{e,3}} + \end{pmatrix} + \end{equation} + +An important quantity to measure after a Newton iteration is +the residual + +.. math:: + R^1_\sj = \frac{\left[\qhat_\sj(z^1)-\qhat^T_\sj(z^1)\right]^2}{ + \left[\qhat_\sj(z^1)\right]^2+\left[\qhat^T_\sj(z^1)\right]^2} + +If, after a Newton step, any :math:`R^1_\sj > R^0_\sj` is not reduced, some strategy must be adopted +to modify the gradient vector :math:`z^1` and/or the target. Note that there are two distinct iterations: + +- A Newton iteration, which is rapidly convergent given + that one is close to a root and the $\qhat$ are smooth + functions, +- A fixed-point iteration following the Newton iteration, + because the weak profile variation of $\qhat$ was + ignored + +If the temperature dependence of :math:`\qhat` was included, there would be no fixed-point +iteration component. + +Computation of the Jacobian +--------------------------- + +We approximate the derivatives in the Jacobian matrix using a forward difference approximation + +.. math:: + \frac{\partial \qhat_\sj}{\partial z_\spjp} \simeq + \frac{\qhat_\sj (z_\spjp + \Delta z) -\qhat_\sj (z_\spjp)}{\Delta z} + +A desireable feature of this approximation is that the iteration scheme, Eq.~(\ref{eq.newton}) if it converges, +will converge to the exact root of the original equations without any influence of the finite-difference truncation +error. + diff --git a/docs/_sources/tgyro/tgyro_list.rst.txt b/docs/_sources/tgyro/tgyro_list.rst.txt new file mode 100644 index 0000000..01a2a6c --- /dev/null +++ b/docs/_sources/tgyro/tgyro_list.rst.txt @@ -0,0 +1,566 @@ +input.tgyro Alphabetical List +============================= + +.. =========================================================================================== + +.. _tgyro_loc_betae_scale: + +LOC_BETAE_SCALE +--------------- + +**Definition** + +Amount to scale electron beta + +**Comments** + +- To shut off electromagnetic fluctuations, set LOC_BETAE_SCALE=0.0 + +**Default** + +1.0 + +---- + +.. =========================================================================================== + +.. _tgyro_den_method: + +TGYRO_DEN_METHOD* +----------------- + +**Definition** + +Rules for evolving species. + +**Choices** + +- TGYRO_DEN_METHOD*=-2: Species given same shape as electron density profile (with pivot density ratio) +- TGYRO_DEN_METHOD*=-1: Use species to enforce quasineutrality (can use this for more than one species simultaneously) +- TGYRO_DEN_METHOD*=0: Do not evolve species +- TGYRO_DEN_METHOD*=1: Evolve species by solving transport equation +- TGYRO_DEN_METHOD*=2: Species evolved with alpha particles from DT reaction as source + +**Comments** + +- Electrons are TGYRO_DEN_METHOD0, the first ion is TGYRO_DEN_METHOD1, etc. +- To evolve electrons, with first ion used to set quasineutrality, and second ion density fixed, set + + .. code-block:: none + + TGYRO_DEN_METHOD0=1 + TGYRO_DEN_METHOD1=-1 + TGYRO_DEN_METHOD2=0 + +- To evolve the second ion density, and adjust the main ion to enforce quasineutrality, set + + .. code-block:: none + + TGYRO_DEN_METHOD0=0 + TGYRO_DEN_METHOD1=-1 + TGYRO_DEN_METHOD2=1 + +- For a DT main ion plasma (1), with He4 ash (2), an impurity species (3) and a fast ion NBI species, set: + + .. code-block:: none + + TGYRO_DEN_METHOD0=1 #electron + TGYRO_DEN_METHOD1=-1 #main ion DT + TGYRO_DEN_METHOD2=2 #ash He4 + TGYRO_DEN_METHOD3=0 #impurity + TGYRO_DEN_METHOD4=0 #fast ion + +**Default** + +0 + +---- + +.. =========================================================================================== + +.. _tgyro_loc_dx: + +LOC_DX +------ + +**Definition** + +Step length, :math:`\Delta z`, used to compute the finite-difference approximation to the Jacobian. + +**Comments** + +- This can be safely increased for robustness. Root is unchanged. +- This is dimensionless, with :math:`\Delta z = \Delta (a/L_x)`, where :math:`L_x` is any of the gradient scale lengths. + +**Default** + +0.1 + +---- + +.. =========================================================================================== + +.. _tgyro_loc_dx_max: + +LOC_DX_MAX +---------- + +**Definition** + +Maximum length, :math:`\Delta z_\mathrm{max}`, of any Newton step. + +**Comments** + +- This should probably always be smaller than unity. +- This is dimensionless, with :math:`\Delta z = \Delta (a/L_x)`, where :math:`L_x` is any of the gradient scale lengths. + +**Default** + +1.0 + +---- + +.. =========================================================================================== + +.. _tgyro_loc_er_feedback_flag: + +LOC_ER_FEEDBACK_FLAG +-------------------- + +**Definition** + +Flag to signal electric field evolution + +**Comments** + +- LOC_ER_FEEDBACK_FLAG = 0 : Do not evolve electric field +- LOC_ER_FEEDBACK_FLAG = 1 : Evolve electric field + +**Default** + +0 + +---- + +.. =========================================================================================== + +.. _tgyro_loc_evolve_grad_only_flag: + +LOC_EVOLVE_GRAD_ONLY_FLAG +------------------------- + +**Definition** + +Flag to allow decoupling of profile and corresponding gradient scale length evolution + +**Choices** + +- LOC_EVOLVE_GRAD_ONLY_FLAG=0: Self-consistently evolve profiles and gradients. +- LOC_EVOLVE_GRAD_ONLY_FLAG=1: Evolve gradient scale lengths while holding density, temperature, and rotation profiles fixed. + +**Comments** + +- By setting this flag to 1, one effectively transforms TGYRO from a transport code into a parallel job management routine which solves for the local flux-matching gradients at each specified radius, while holding local density, temperatures and rotation values fixed. This process allows one to more efficiently calculate local flux-matching solutions and stiffness assessments, while eliminating changes to the gyroBohm normalizations and plasma parameters such as :math:`T_e/T_i` and collisionality arising from model performance at other radii. + +**Default** + +0 + +---- + +.. =========================================================================================== + +.. _tgyro_loc_he_feedback_flag: + +LOC_HE_FEEDBACK_FLAG +-------------------- + +**Definition** + +Flag to signal helium ash evolution + +**Comments** + +- LOC_HE_FEEDBACK_FLAG = 0 : Do not evolve ash` +- LOC_HE_FEEDBACK_FLAG = 1 : Evolve ash + +**Default** + +0 + +---- + +.. =========================================================================================== + +TGYRO_ITERATION_METHOD +---------------------- + +**Definition** + +Variation of Newton method used for root-finding. + +**Choices** + +- TGYRO_ITERATION_METHOD=1 : Local residual (standard) method +- TGYRO_ITERATION_METHOD=4 : Global residual method (serial version) +- TGYRO_ITERATION_METHOD=5 : Global residual method (parallel version) +- TGYRO_ITERATION_METHOD=6 : Simple relaxation method (**in development**) + +**Comments** + +- If TGYRO_ITERATION_METHOD=5, use (n_evolve+1)*n_mpi rather than simply n_mpi in ``input.tgyro`` +- For example, if evolving :math:`T_e` and :math:`T_i`, then n_evolve+1=3, so set 3*n_mpi in ``input.tgyro`` +- TGYRO_ITERATION_METHOD=6 uses a simple relaxation scheme + +.. math:: + + \frac{dz}{z} = -\mathrm{LOC\_RELAX} \, \frac{Q_\mathrm{tot} - + Q_\mathrm{target}}{\max(|Q_\mathrm{tot}|,|Q_\mathrm{target}|,1)} + +- In TGYRO_ITERATION_METHOD=6, if :math:`dz/z >` LOC_DX_MAX, then :math:`dz/z =` LOC_DX_MAX +- In TGYRO_ITERATION_METHOD=6, LOC_RELAX=0.1 and LOC_DX_MAX=0.05 are good starting points + +**Default** + +1 + +---- + +.. =========================================================================================== + +.. _tgyro_loc_lock_profile_flag: + +LOC_LOCK_PROFILE_FLAG +--------------------- + +**Definition** + +Flag to manage calculation of initial profile + +**Choices** + +- LOC_LOCK_PROFILE_FLAG=0: Use profiles computed from gradients +- LOC_LOCK_PROFILE_FLAG=1: Use exact profiles + +**Comments** + +- If set to 1, use temperature and density profiles as read from :ref:`input.gacode`, not as calculated from gradients. +- This has an effect only on the zeroth iteration. +- This can have a large effect when a coarse radial grid is used. In this case, the profile as calculated from the gradients at only a few points will not match the original (higher-resolution) profile. + +**Default** + +0 + +---- + +.. =========================================================================================== + +TGYRO_MODE +---------- + +**Definition** + +High-level control of TGYRO operational mode. + +**Choices** + +- TGYRO_MODE=1 : Operate as transport code. +- TGYRO_MODE=3 : Multi-job control of GYRO or CGYRO. + +**Comments** + +Sample input.tgyro for TGYRO_MODE=1 to run as transport code + +.. code-block:: none + + DIR TGLF1 1 + DIR TGLF2 1 + DIR TGLF3 1 + DIR TGLF4 1 + + TGYRO_MODE=1 + + #----------------------------------------------------- + # NEO control + TGYRO_NEO_METHOD=1 + #----------------------------------------------------- + + #----------------------------------------------------- + # Profile control + TGYRO_DEN_METHOD0=0 + LOC_TE_FEEDBACK_FLAG=1 + LOC_TI_FEEDBACK_FLAG=1 + #----------------------------------------------------- + + #----------------------------------------------------- + # Physics control + # (1=static exch, 2=dynamic exch, 3=reactor) + LOC_SCENARIO=2 + TGYRO_RMAX=0.75 + #----------------------------------------------------- + + #----------------------------------------------------- + # Iteration control + TGYRO_ITERATION_METHOD=1 + LOC_RESIDUAL_METHOD=3 + + LOC_DX=0.02 + + # TGYRO iterations + TGYRO_RELAX_ITERATIONS=4 + + # Restart (0=new,1=restart) + LOC_RESTART_FLAG=0 + #----------------------------------------------------- + + +Sample input.tgyro for TGYRO_MODE=3 to run 6 instances of CGYRO + +.. code-block:: none + + DIR c1 384 GAMMA_E=0.0 + DIR c2 384 GAMMA_E=0.02 + DIR c3 384 GAMMA_E=0.04 + DIR c4 384 GAMMA_E=0.06 + DIR c5 384 GAMMA_E=0.08 + DIR c6 384 GAMMA_E=0.10 + + TGYRO_MODE=3 + +**Default** + +1 + +---- + +.. =========================================================================================== + +TGYRO_NEO_METHOD +---------------- + +**Definition** + +Control of NEO code. + +**Choices** + +- TGYRO_NEO_METHOD=0 : Zero neoclassical flux +- TGYRO_NEO_METHOD=1 : Hirshman-Sigmar theory for all species (fast) +- TGYRO_NEO_METHOD=2 : Kinetic NEO simulation + +**Default** + +1 + +---- + +.. =========================================================================================== + +TGYRO_RELAX_ITERATIONS +---------------------- + +**Definition** + +Maximum number of Newton iterations. + +**Comments** + +- Setting ``TGYRO_RELAX_ITERATIONS`` = 0 is useful to generate initial fluxes and other profiles on the TGYRO grid. + +**Default** + +0 + +---- + +.. =========================================================================================== + +.. _tgyro_loc_relax: + +LOC_RELAX +--------- + +**Definition** + +Parameter :math:`C_\eta` controlling shrinkage of relaxation parameter. + + **DEFAULT** = 2.0 + +**Comments** + +- No effect if less than or equal to unity. +- Only controls the behaviour of :ref:`tgyro_iteration_method` = 1. +- Experience shows that LOC_RELAX=2.0 is a good choice (default). + +.. =========================================================================================== + +.. _tgyro_loc_residual_method: + +LOC_RESIDUAL_METHOD +------------------- + +**Definition** + +Formula for residual (error) in TGYRO root finding. + +**Choices** + +- LOC_RESIDUAL_METHOD=2: :math:`\displaystyle \sum_p \left|f_p-f^\mathrm{target}_p\right|` +- LOC_RESIDUAL_METHOD=3: :math:`\displaystyle \sum_p (f_p-f^\mathrm{target}_p)^2` + +**Comments** + +- This parameter only affects LOC_ITERATION_METHOD=4,5. +- It does **not** affect :ref:`tgyro_iteration_method` = 1 because each residual is minimized independently. +- The total residual is renormalized in method 3 to make the value comparable to method 2. + +**Default** + +2 + +---- + +.. =========================================================================================== + +.. _tgyro_loc_restart_flag: + +LOC_RESTART_FLAG +---------------- + +**Definition** + +TGYRO startup control (new or restart). + +**Choices** + +- LOC_RESTART_FLAG=0: New simulation. +- LOC_RESTART_FLAG=1: Continue running based on last iteration. + +**Default** + +0 + +---- + +.. =========================================================================================== + +.. _tgyro_loc_scenario: + +LOC_SCENARIO +------------ + +**Definition** + +Power-balance scenario. + +**Choices** + +- LOC_SCENARIO=1 : Fixed integrated powers with static exchange. +- LOC_SCENARIO=2 : Fixed integrated powers with dynamic exchange. +- LOC_SCENARIO=3 : Thermonuclear source, radiation and exchange with auxiliary heating from data. + +**Comments** + +- See :ref:`tgyro_scenarios` for details + +**Default** + +1 + +---- + +.. =========================================================================================== + +.. _tgyro_therm_flag: + +TGYRO_THERM_FLAG* +----------------- + +**Definition** + +Thermal/nonthermal species toggle. First ion is TGYRO_THERM_FLAG1, etc. + +**Choices** + +- TGYRO_THERM_FLAG* = 1: Thermal +- TGYRO_THERM_FLAG* = 0: Nonthermal (energetic) + +**Comments** + +- Only the shared thermal ion temperature is evolved in TGYRO +- Unequal thermal ion temperatures is not supported + +**Default** + +1 + +---- + +.. =========================================================================================== + +.. _tgyro_loc_te_feedback_flag: + + +LOC_TE_FEEDBACK_FLAG +-------------------- + +**Definition** + +Flag to signal electron temperature evolution + +**Comments** + +- LOC_TE_FEEDBACK_FLAG = 0 : Do not evolve :math:`T_e` +- LOC_TE_FEEDBACK_FLAG = 1 : Evolve :math:`T_e` + +**Default** + +1 + +---- + +.. =========================================================================================== + +.. _tgyro_loc_ti_feedback_flag: + +LOC_TI_FEEDBACK_FLAG +-------------------- + +**Definition** + +Flag to signal ion temperature evolution + +**Comments** + +- LOC_TI_FEEDBACK_FLAG = 0 : Do not evolve :math:`T_i` +- LOC_TI_FEEDBACK_FLAG = 1 : Evolve :math:`T_i` + +**Default** + +1 + +---- + +.. =========================================================================================== + +TGYRO_WRITE_PROFILES_FLAG +------------------------- + +**Definition** + +Manage how new :ref:`input.gacode` files are written. + +**Choices** + +- TGYRO_WRITE_PROFILES_FLAG=-1: Write new ``input.profiles.*`` at **every iteration**. +- TGYRO_WRITE_PROFILES_FLAG=0: No new files are written. +- TGYRO_WRITE_PROFILES_FLAG=1: Write ``input.profiles.new`` at final iteration + +**Comments** + +- If TGYRO_WRITE_PROFILES_FLAG=-1, then ``input.profiles.n`` is written at the nth iteration. + +**Default** + +0 diff --git a/docs/_sources/tgyro/tgyro_table.rst.txt b/docs/_sources/tgyro/tgyro_table.rst.txt new file mode 100644 index 0000000..add13bd --- /dev/null +++ b/docs/_sources/tgyro/tgyro_table.rst.txt @@ -0,0 +1,46 @@ +input.tgyro Tabular List +======================== + +.. csv-table:: **High-level control** + :header: "input.tgyro parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`tgyro_mode`", Control TGYRO operational mode,1 + +.. csv-table:: **Iteration control** + :header: "input.tgyro parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`tgyro_loc_dx`", Jacobian step length,0.1 + ":ref:`tgyro_loc_dx_max`", Maximum size of Newton step,1.0 + ":ref:`tgyro_loc_relax`", Iteration relaxation parameter,2.0 + ":ref:`tgyro_loc_restart_flag`", Restart control,0 + ":ref:`tgyro_loc_lock_profile_flag`", Initial profile calculation,0 + ":ref:`tgyro_loc_evolve_grad_only_flag`", Decouple profile and gradient evolution,0 + ":ref:`tgyro_loc_residual_method`", Residual formula,2 + ":ref:`tgyro_iteration_method`", Iteration scheme,1 + ":ref:`tgyro_relax_iterations`", Number of Newton iterations,0 + ":ref:`tgyro_write_profiles_flag`", Manage writing of updated :ref:`input.gacode`,0 + +.. csv-table:: **Profile Feedback Control** + :header: "input.tgyro parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`tgyro_den_method`", Rules for evolving electron and ion densities, all 0 + ":ref:`tgyro_loc_te_feedback_flag`", Evolve electron temperature, 1 + ":ref:`tgyro_loc_ti_feedback_flag`", Evolve thermal ion temperature, 1 + ":ref:`tgyro_loc_er_feedback_flag`", Evolve electric field, 0 + +.. csv-table:: **Physics Control** + :header: "input.tgyro parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`tgyro_loc_betae_scale`", Amount to scale electron :math:`\beta`,1.0 + ":ref:`tgyro_neo_method`", Control of NEO simulation,1 + ":ref:`tgyro_loc_scenario`", Power-balance scenario,1 + +.. csv-table:: **Species Parameters** + :header: "input.tgyro parameter", "Short description", "Default" + :widths: 13, 25, 5 + + ":ref:`tgyro_therm_flag`", Toggle thermal/nonthermal species , 1 diff --git a/docs/_sources/workshop.rst.txt b/docs/_sources/workshop.rst.txt new file mode 100644 index 0000000..451168e --- /dev/null +++ b/docs/_sources/workshop.rst.txt @@ -0,0 +1,52 @@ +CGYRO Workshop 2022 +=================== + +:Dates: February 24-25 +:Time: 9:00am-11:45am (PST) both days +:Zoom link: Send email to gacode@fusion.gat.com with "CGYRO ZOOM" in subject line + +------ +AGENDA +------ + +**profiles_gen** + + - generating input.gacode + - options: -loc_rad, -nion, -ntheta + - profiles_gen_plot + +**Numerical Resolution** + + - cgyro -t is your friend + - perpendicular resolution and box size + - poloidal resolution (N_THETA) + - velocity resolution (N_XI,N_ENERGY) + - linear versus nonlinear simulation + - nonlinear resolution checks (NL_FLAG=0, theta_0) + - timestep (fixed versus adaptive) + - restarting + +**Plotting** + + - resolution diagnostics (ky_phi, kx_phi, ball, ky_flux, geo) + - monitoring simulations (flux) + - using pygacode for custom plotting and analysis + - generating visualizations (-plot fluct) + +**Physics parameters and implications** + + - NU_EE, BETAE_UNIT, GAMMA_E, GAMMA_P + +**Source code** + + - platform file hierarchy (PPPL, PSFC, etc) + - real-time work on Perlmutter and Cori (NERSC) + - use of virtual environments (pip) + +**Thursday presentation (11am)** + + - **Arash Ashourvan**: *Strategies for pedestal simulation* + +**Friday presentation (9am)** + + - **Igor Sfiligoi**: *CGYRO Performance on HPC systems (JIFT talk)* diff --git a/docs/_sources/zreferences.rst.txt b/docs/_sources/zreferences.rst.txt new file mode 100644 index 0000000..e1b066d --- /dev/null +++ b/docs/_sources/zreferences.rst.txt @@ -0,0 +1,20 @@ +References +========== + +.. rubric:: References + +.. csv-table:: **Appropriate References** + :header: "Physics code", "Topical Area", "Required citation" + :widths: 15,20,20 + + CGYRO, gyrokinetic simulation, ":cite:`candy:2016`" + GYRO, gyrokinetic simulation, ":cite:`candy:2003`" + NEO, neoclassical simulation, ":cite:`belli:2008,belli:2012`" + TGLF, transport model, ":cite:`staebler:2007,staebler:2010`" + TGYRO, profile evolution, ":cite:`candy:2009`" + +.. bibliography:: references.bib + + + + diff --git a/docs/_static/_sphinx_javascript_frameworks_compat.js b/docs/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 0000000..8141580 --- /dev/null +++ b/docs/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,123 @@ +/* Compatability shim for jQuery and underscores.js. + * + * Copyright Sphinx contributors + * Released under the two clause BSD licence + */ + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return 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 rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + 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); + 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; +} diff --git a/docs/_static/basic.css b/docs/_static/basic.css index 607b5f5..f316efc 100644 --- a/docs/_static/basic.css +++ b/docs/_static/basic.css @@ -4,7 +4,7 @@ * * Sphinx stylesheet -- basic theme. * - * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ @@ -15,6 +15,12 @@ div.clearer { clear: both; } +div.section::after { + display: block; + content: ''; + clear: left; +} + /* -- relbar ---------------------------------------------------------------- */ div.related { @@ -81,10 +87,26 @@ div.sphinxsidebar input { font-size: 1em; } +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + div.sphinxsidebar #searchbox input[type="text"] { - width: 170px; + 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%; @@ -108,7 +130,7 @@ ul.search li a { font-weight: bold; } -ul.search li div.context { +ul.search li p.context { color: #888; margin: 2px 0 0 30px; text-align: left; @@ -199,6 +221,11 @@ table.modindextable td { /* -- general body styles --------------------------------------------------- */ +div.body { + min-width: 360px; + max-width: 800px; +} + div.body p, div.body dd, div.body li, div.body blockquote { -moz-hyphens: auto; -ms-hyphens: auto; @@ -210,6 +237,10 @@ a.headerlink { visibility: hidden; } +a:visited { + color: #551A8B; +} + h1:hover > a.headerlink, h2:hover > a.headerlink, h3:hover > a.headerlink, @@ -240,19 +271,25 @@ p.rubric { font-weight: bold; } -img.align-left, .figure.align-left, object.align-left { +img.align-left, figure.align-left, .figure.align-left, object.align-left { clear: left; float: left; margin-right: 1em; } -img.align-right, .figure.align-right, object.align-right { +img.align-right, figure.align-right, .figure.align-right, object.align-right { clear: right; float: right; margin-left: 1em; } -img.align-center, .figure.align-center, object.align-center { +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { display: block; margin-left: auto; margin-right: auto; @@ -266,30 +303,45 @@ img.align-center, .figure.align-center, object.align-center { text-align: center; } +.align-default { + text-align: center; +} + .align-right { text-align: right; } /* -- sidebars -------------------------------------------------------------- */ -div.sidebar { +div.sidebar, +aside.sidebar { margin: 0 0 0.5em 1em; border: 1px solid #ddb; - padding: 7px 7px 0 7px; + padding: 7px; background-color: #ffe; width: 40%; float: right; + clear: right; + overflow-x: auto; } p.sidebar-title { font-weight: bold; } +nav.contents, +aside.topic, +div.admonition, div.topic, blockquote { + clear: left; +} + /* -- topics ---------------------------------------------------------------- */ +nav.contents, +aside.topic, div.topic { border: 1px solid #ccc; - padding: 7px 7px 0 7px; + padding: 7px; margin: 10px 0 10px 0; } @@ -311,10 +363,6 @@ div.admonition dt { font-weight: bold; } -div.admonition dl { - margin-bottom: 0; -} - p.admonition-title { margin: 0px 10px 5px 0px; font-weight: bold; @@ -325,9 +373,34 @@ div.body p.centered { margin-top: 25px; } +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +nav.contents > :last-child, +aside.topic > :last-child, +div.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +nav.contents::after, +aside.topic::after, +div.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + /* -- tables ---------------------------------------------------------------- */ table.docutils { + margin-top: 10px; + margin-bottom: 10px; border: 0; border-collapse: collapse; } @@ -337,6 +410,11 @@ table.align-center { margin-right: auto; } +table.align-default { + margin-left: auto; + margin-right: auto; +} + table caption span.caption-number { font-style: italic; } @@ -352,10 +430,6 @@ table.docutils td, table.docutils th { border-bottom: 1px solid #aaa; } -table.footnote td, table.footnote th { - border: 0 !important; -} - th { text-align: left; padding-right: 5px; @@ -370,22 +444,34 @@ table.citation td { border-bottom: none; } +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + /* -- figures --------------------------------------------------------------- */ -div.figure { +div.figure, figure { margin: 0.5em; padding: 0.5em; } -div.figure p.caption { +div.figure p.caption, figcaption { padding: 0.3em; } -div.figure p.caption span.caption-number { +div.figure p.caption span.caption-number, +figcaption span.caption-number { font-style: italic; } -div.figure p.caption span.caption-text { +div.figure p.caption span.caption-text, +figcaption span.caption-text { } /* -- field list styles ----------------------------------------------------- */ @@ -410,6 +496,74 @@ table.field-list td, table.field-list th { hyphens: manual; } +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + /* -- other body styles ----------------------------------------------------- */ ol.arabic { @@ -432,11 +586,81 @@ ol.upperroman { list-style: upper-roman; } +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + dl { margin-bottom: 15px; } -dd p { +dd > :first-child { margin-top: 0px; } @@ -450,6 +674,21 @@ dd { margin-left: 30px; } +.sig dd { + margin-top: 0px; + margin-bottom: 0px; +} + +.sig dl { + margin-top: 0px; + margin-bottom: 0px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + dt:target, span.highlighted { background-color: #fbe54e; } @@ -463,14 +702,6 @@ dl.glossary dt { font-size: 1.1em; } -.optional { - font-size: 1.3em; -} - -.sig-paren { - font-size: larger; -} - .versionmodified { font-style: italic; } @@ -509,11 +740,26 @@ dl.glossary dt { font-style: oblique; } +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + abbr, acronym { border-bottom: dotted 1px; cursor: help; } +.translated { + background-color: rgba(207, 255, 207, 0.2) +} + +.untranslated { + background-color: rgba(255, 207, 207, 0.2) +} + /* -- code displays --------------------------------------------------------- */ pre { @@ -521,29 +767,69 @@ pre { overflow-y: hidden; /* fixes display issues on Chrome browsers */ } +pre, div[class*="highlight-"] { + clear: both; +} + span.pre { -moz-hyphens: none; -ms-hyphens: none; -webkit-hyphens: none; hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; } td.linenos pre { - padding: 5px 0px; border: 0; background-color: transparent; color: #aaa; } table.highlighttable { - margin-left: 0.5em; + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; } table.highlighttable td { - padding: 0 0.5em 0 0.5em; + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; } div.code-block-caption { + margin-top: 1em; padding: 2px 5px; font-size: small; } @@ -552,8 +838,14 @@ div.code-block-caption code { background-color: transparent; } -div.code-block-caption + div > div.highlight > pre { - margin-top: 0; +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ } div.code-block-caption span.caption-number { @@ -565,21 +857,7 @@ 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; + margin: 1em 0; } code.xref, a code { @@ -620,8 +898,7 @@ span.eqno { } span.eqno a.headerlink { - position: relative; - left: 0px; + position: absolute; z-index: 1; } diff --git a/docs/_static/contentui.css b/docs/_static/contentui.css new file mode 100644 index 0000000..80d42ef --- /dev/null +++ b/docs/_static/contentui.css @@ -0,0 +1,133 @@ +/* + * right column for sphinx_rtd_theme + */ +.clear { + clear: both; +} + +@media screen and (min-width: 1300px) { + .wy-nav-content { + max-width: none; + } + + .with-columns .wy-nav-content { + background: linear-gradient(90deg, #fcfcfc 52%, #eeeeee 52%); + } + + .with-columns .wy-nav-content .wy-breadcrumbs , + .with-columns .section > h1, + .with-columns .section > h2, + .with-columns .section > h3, + .with-columns footer { + width: 50%; + } + + .with-columns .section { + clear: both; + } + + .left-col.container { + float: left; + width: 50%; + margin-right: 4%; + } + + .right-col.container { + float: left; + width: 45%; + } + + /* + * tab selector fixed in top + */ + .with-columns .contenttab-selector.in-right-col { + display: block; + position: fixed; + top: 0; + right: 0; + width: calc(48% - 144px); + background: #444; + padding: 5px 10px; + } + +} + +/** + * + */ +.toggle-tab { + margin-bottom: 40px; +} + +.toggle-header { + display: block; + clear: both; + cursor: pointer; +} +.toggle-header p {display: inline; } +.toggle-header strong {color: #2980b9 } + +.toggle-header:after { + content: " ▼"; +} + +.toggle-header.open:after { + content: " ▲"; +} + +.toggle-content { + display: none; + margin-bottom: 20px; +} + +/* + * tab menu + */ +ul.contenttab-selector { + display:block; + list-style-type: none; + margin: 0 0 10px; + padding: 0; + line-height: normal; + overflow: auto; +} +ul.contenttab-selector li { + display: block; + cursor: pointer; + font-weight: bold; + margin: 0 5px 0 0; + padding: 5px 10px; + float: left; + background-color: #999; + color: #fff; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border-radius: 5px; + -khtml-border-radius: 5px; +} +.rst-content .section ul.contenttab-selector, +.rst-content .toctree-wrapper ul.contenttab-selector, +article ul.contenttab-selector{ + line-height: normal; + margin: 0 0 10px; +} +.rst-content .section ul.contenttab-selector li, +.rst-content .toctree-wrapper ul.contenttab-selector li, +article ul.contenttab-selector li{ + margin-left: 0; +} +ul.contenttab-selector li:hover { + background-color: #777; +} +ul.contenttab-selector li.selected { + background-color: #2980b9; +} +ul.contenttab-selector li.selected:hover { + background-color: #333; +} +.content-tabs { + margin: 10px 0 20px 0; +} +.tab-content { + clear: both; +} diff --git a/docs/_static/contentui.js b/docs/_static/contentui.js new file mode 100644 index 0000000..f9515cf --- /dev/null +++ b/docs/_static/contentui.js @@ -0,0 +1,74 @@ + +$(function() { + /* + * Right column logic + */ + if ($(".right-col").length) { + $(".right-col").after('
'); + $(".right-col").parents('body').addClass('with-columns'); + } + + /** + * Toggle logic + */ + $('.toggle-content').hide() + $('.toggle-header').click(function () { + $(this).toggleClass("open"); + $(this).next('.toggle-content').toggle('400'); + }) + + /** + * Dynamic multiple content block. + */ + var top_sel = {} + + $('div.content-tabs').each(function() { + var contenttab_sel = $('
    ', { class: "contenttab-selector" }); + var i = 0; + + if ($(this).hasClass('right-col')){ + contenttab_sel.addClass('in-right-col'); + } + + $('.tab-content', this).each(function() { + var sel_item = $('
  • ', { + class: $(this).attr('id'), + text: $(this).find('.tab-title').text() + }); + $(this).find('.tab-title').remove(); + if (i++) { + $(this).hide(); + } else { + sel_item.addClass('selected'); + } + contenttab_sel.append(sel_item); + $(this).addClass('contenttab'); + }); + + $('.tab-content', this).eq(0).before(contenttab_sel); + contenttab_sel = null; + i = null; + }); + + + $('.contenttab-selector li').click(function(evt) { + evt.preventDefault(); + + if ($(this).parents('.in-right-col').length){ + var tabsblock = $('.right-col'); + }else{ + var tabsblock = $(this).parents('.content-tabs'); + } + + var sel_class = $(this).attr('class'); + $('div.contenttab',tabsblock).hide(); + $('div#' + sel_class,tabsblock).show(); + + $('ul.contenttab-selector li', tabsblock).removeClass('selected'); + $('ul.contenttab-selector li.' + sel_class, tabsblock).addClass('selected'); + + sel_class = null; + }); + +}); + diff --git a/docs/_static/css/badge_only.css b/docs/_static/css/badge_only.css index 012e63f..c718cee 100644 --- a/docs/_static/css/badge_only.css +++ b/docs/_static/css/badge_only.css @@ -1 +1 @@ -.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url("../fonts/fontawesome-webfont.eot");src:url("../fonts/fontawesome-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff") format("woff"),url("../fonts/fontawesome-webfont.ttf") format("truetype"),url("../fonts/fontawesome-webfont.svg#FontAwesome") format("svg")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:""}.icon-book:before{content:""}.fa-caret-down:before{content:""}.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.icon-caret-up:before{content:""}.fa-caret-left:before{content:""}.icon-caret-left:before{content:""}.fa-caret-right:before{content:""}.icon-caret-right:before{content:""}.rst-versions{position:fixed;bottom:0;left:0;overflow-y:scroll;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:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.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{max-height:100%}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #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}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.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}} +.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/_static/css/fonts/Roboto-Slab-Bold.woff b/docs/_static/css/fonts/Roboto-Slab-Bold.woff new file mode 100644 index 0000000..6cb6000 Binary files /dev/null and b/docs/_static/css/fonts/Roboto-Slab-Bold.woff differ diff --git a/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 b/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 new file mode 100644 index 0000000..7059e23 Binary files /dev/null and b/docs/_static/css/fonts/Roboto-Slab-Bold.woff2 differ diff --git a/docs/_static/css/fonts/Roboto-Slab-Regular.woff b/docs/_static/css/fonts/Roboto-Slab-Regular.woff new file mode 100644 index 0000000..f815f63 Binary files /dev/null and b/docs/_static/css/fonts/Roboto-Slab-Regular.woff differ diff --git a/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 b/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 new file mode 100644 index 0000000..f2c76e5 Binary files /dev/null and b/docs/_static/css/fonts/Roboto-Slab-Regular.woff2 differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.eot b/docs/_static/css/fonts/fontawesome-webfont.eot new file mode 100644 index 0000000..e9f60ca Binary files /dev/null and b/docs/_static/css/fonts/fontawesome-webfont.eot differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.svg b/docs/_static/css/fonts/fontawesome-webfont.svg new file mode 100644 index 0000000..855c845 --- /dev/null +++ b/docs/_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/_static/css/fonts/fontawesome-webfont.ttf b/docs/_static/css/fonts/fontawesome-webfont.ttf new file mode 100644 index 0000000..35acda2 Binary files /dev/null and b/docs/_static/css/fonts/fontawesome-webfont.ttf differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.woff b/docs/_static/css/fonts/fontawesome-webfont.woff new file mode 100644 index 0000000..400014a Binary files /dev/null and b/docs/_static/css/fonts/fontawesome-webfont.woff differ diff --git a/docs/_static/css/fonts/fontawesome-webfont.woff2 b/docs/_static/css/fonts/fontawesome-webfont.woff2 new file mode 100644 index 0000000..4d13fc6 Binary files /dev/null and b/docs/_static/css/fonts/fontawesome-webfont.woff2 differ diff --git a/docs/_static/css/fonts/lato-bold-italic.woff b/docs/_static/css/fonts/lato-bold-italic.woff new file mode 100644 index 0000000..88ad05b Binary files /dev/null and b/docs/_static/css/fonts/lato-bold-italic.woff differ diff --git a/docs/_static/css/fonts/lato-bold-italic.woff2 b/docs/_static/css/fonts/lato-bold-italic.woff2 new file mode 100644 index 0000000..c4e3d80 Binary files /dev/null and b/docs/_static/css/fonts/lato-bold-italic.woff2 differ diff --git a/docs/_static/css/fonts/lato-bold.woff b/docs/_static/css/fonts/lato-bold.woff new file mode 100644 index 0000000..c6dff51 Binary files /dev/null and b/docs/_static/css/fonts/lato-bold.woff differ diff --git a/docs/_static/css/fonts/lato-bold.woff2 b/docs/_static/css/fonts/lato-bold.woff2 new file mode 100644 index 0000000..bb19504 Binary files /dev/null and b/docs/_static/css/fonts/lato-bold.woff2 differ diff --git a/docs/_static/css/fonts/lato-normal-italic.woff b/docs/_static/css/fonts/lato-normal-italic.woff new file mode 100644 index 0000000..76114bc Binary files /dev/null and b/docs/_static/css/fonts/lato-normal-italic.woff differ diff --git a/docs/_static/css/fonts/lato-normal-italic.woff2 b/docs/_static/css/fonts/lato-normal-italic.woff2 new file mode 100644 index 0000000..3404f37 Binary files /dev/null and b/docs/_static/css/fonts/lato-normal-italic.woff2 differ diff --git a/docs/_static/css/fonts/lato-normal.woff b/docs/_static/css/fonts/lato-normal.woff new file mode 100644 index 0000000..ae1307f Binary files /dev/null and b/docs/_static/css/fonts/lato-normal.woff differ diff --git a/docs/_static/css/fonts/lato-normal.woff2 b/docs/_static/css/fonts/lato-normal.woff2 new file mode 100644 index 0000000..3bf9843 Binary files /dev/null and b/docs/_static/css/fonts/lato-normal.woff2 differ diff --git a/docs/_static/css/theme.css b/docs/_static/css/theme.css index d85a101..19a446a 100644 --- a/docs/_static/css/theme.css +++ b/docs/_static/css/theme.css @@ -1,4 +1,4 @@ -*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{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:hover,a:active{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;color:#000;text-decoration:none}mark{background:#ff0;color:#000;font-style:italic;font-weight:bold}pre,code,.rst-content tt,.rst-content code,kbd,samp{font-family:monospace,serif;_font-family:"courier new",monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:before,q:after{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}ul,ol,dl{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{margin:0}form{margin:0}fieldset{border:0;margin:0;padding:0}label{cursor:pointer}legend{border:0;*margin-left:-7px;padding:0;white-space:normal}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="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top;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{html,body,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^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:.5cm}p,h2,.rst-content .toctree-wrapper p.caption,h3{orphans:3;widows:3}h2,.rst-content .toctree-wrapper p.caption,h3{page-break-after:avoid}}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title: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 dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition,.btn,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"],select,textarea,.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}/*! +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?v=4.7.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.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 dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon{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.3333333333em;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.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.wy-menu-vertical li span.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-left.toctree-expand,.rst-content .fa-pull-left.admonition-title,.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 dl dt .fa-pull-left.headerlink,.rst-content p.caption .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.rst-content code.download span.fa-pull-left:first-child,.fa-pull-left.icon{margin-right:.3em}.fa.fa-pull-right,.wy-menu-vertical li span.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-right.toctree-expand,.rst-content .fa-pull-right.admonition-title,.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 dl dt .fa-pull-right.headerlink,.rst-content p.caption .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.rst-content code.download span.fa-pull-right:first-child,.fa-pull-right.icon{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.wy-menu-vertical li span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.rst-content .pull-left.admonition-title,.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 dl dt .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.rst-content code.download span.pull-left:first-child,.pull-left.icon{margin-right:.3em}.fa.pull-right,.wy-menu-vertical li span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.rst-content .pull-right.admonition-title,.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 dl dt .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.rst-content code.download span.pull-right:first-child,.pull-right.icon{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-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:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{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-remove:before,.fa-close: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-gear:before,.fa-cog: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 tt.download span:first-child:before,.rst-content code.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-rotate-right:before,.fa-repeat: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-photo:before,.fa-image: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,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.rst-content .admonition-title: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-warning:before,.fa-exclamation-triangle: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-gears:before,.fa-cogs: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-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars: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,.wy-dropdown .caret:before,.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard: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-unlink:before,.fa-chain-broken: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.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.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-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw: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-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.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-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap: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-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-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-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-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-soccer-ball-o:before,.fa-futbol-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-shekel:before,.fa-sheqel:before,.fa-ils: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-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full: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-stop-o:before,.fa-hand-paper-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-tv:before,.fa-television: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-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language: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-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-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:before,.fa-thermometer-full: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-bathtub:before,.fa-s15:before,.fa-bath: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,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.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 dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context{font-family:inherit}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title: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 dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before{font-family:"FontAwesome";display:inline-block;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa,a .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,a .rst-content .admonition-title,.rst-content a .admonition-title,a .rst-content h1 .headerlink,.rst-content h1 a .headerlink,a .rst-content h2 .headerlink,.rst-content h2 a .headerlink,a .rst-content h3 .headerlink,.rst-content h3 a .headerlink,a .rst-content h4 .headerlink,.rst-content h4 a .headerlink,a .rst-content h5 .headerlink,.rst-content h5 a .headerlink,a .rst-content h6 .headerlink,.rst-content h6 a .headerlink,a .rst-content dl dt .headerlink,.rst-content dl dt a .headerlink,a .rst-content p.caption .headerlink,.rst-content p.caption a .headerlink,a .rst-content table>caption .headerlink,.rst-content table>caption a .headerlink,a .rst-content tt.download span:first-child,.rst-content tt.download a span:first-child,a .rst-content code.download span:first-child,.rst-content code.download a span:first-child,a .icon{display:inline-block;text-decoration:inherit}.btn .fa,.btn .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .btn span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.btn .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.btn .rst-content .admonition-title,.rst-content .btn .admonition-title,.btn .rst-content h1 .headerlink,.rst-content h1 .btn .headerlink,.btn .rst-content h2 .headerlink,.rst-content h2 .btn .headerlink,.btn .rst-content h3 .headerlink,.rst-content h3 .btn .headerlink,.btn .rst-content h4 .headerlink,.rst-content h4 .btn .headerlink,.btn .rst-content h5 .headerlink,.rst-content h5 .btn .headerlink,.btn .rst-content h6 .headerlink,.rst-content h6 .btn .headerlink,.btn .rst-content dl dt .headerlink,.rst-content dl dt .btn .headerlink,.btn .rst-content p.caption .headerlink,.rst-content p.caption .btn .headerlink,.btn .rst-content table>caption .headerlink,.rst-content table>caption .btn .headerlink,.btn .rst-content tt.download span:first-child,.rst-content tt.download .btn span:first-child,.btn .rst-content code.download span:first-child,.rst-content code.download .btn span:first-child,.btn .icon,.nav .fa,.nav .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand,.nav .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.nav .rst-content .admonition-title,.rst-content .nav .admonition-title,.nav .rst-content h1 .headerlink,.rst-content h1 .nav .headerlink,.nav .rst-content h2 .headerlink,.rst-content h2 .nav .headerlink,.nav .rst-content h3 .headerlink,.rst-content h3 .nav .headerlink,.nav .rst-content h4 .headerlink,.rst-content h4 .nav .headerlink,.nav .rst-content h5 .headerlink,.rst-content h5 .nav .headerlink,.nav .rst-content h6 .headerlink,.rst-content h6 .nav .headerlink,.nav .rst-content dl dt .headerlink,.rst-content dl dt .nav .headerlink,.nav .rst-content p.caption .headerlink,.rst-content p.caption .nav .headerlink,.nav .rst-content table>caption .headerlink,.rst-content table>caption .nav .headerlink,.nav .rst-content tt.download span:first-child,.rst-content tt.download .nav span:first-child,.nav .rst-content code.download span:first-child,.rst-content code.download .nav span:first-child,.nav .icon{display:inline}.btn .fa.fa-large,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.btn .rst-content .fa-large.admonition-title,.rst-content .btn .fa-large.admonition-title,.btn .rst-content h1 .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.btn .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .btn .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .btn span.fa-large:first-child,.btn .rst-content code.download span.fa-large:first-child,.rst-content code.download .btn span.fa-large:first-child,.btn .fa-large.icon,.nav .fa.fa-large,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand,.nav .rst-content .fa-large.admonition-title,.rst-content .nav .fa-large.admonition-title,.nav .rst-content h1 .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.nav .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.nav .rst-content code.download span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.nav .fa-large.icon{line-height:.9em}.btn .fa.fa-spin,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.btn .rst-content .fa-spin.admonition-title,.rst-content .btn .fa-spin.admonition-title,.btn .rst-content h1 .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.btn .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .btn .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .btn span.fa-spin:first-child,.btn .rst-content code.download span.fa-spin:first-child,.rst-content code.download .btn span.fa-spin:first-child,.btn .fa-spin.icon,.nav .fa.fa-spin,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand,.nav .rst-content .fa-spin.admonition-title,.rst-content .nav .fa-spin.admonition-title,.nav .rst-content h1 .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.nav .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.nav .rst-content code.download span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.nav .fa-spin.icon{display:inline-block}.btn.fa:before,.wy-menu-vertical li span.btn.toctree-expand:before,.rst-content .btn.admonition-title: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 dl dt .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.rst-content code.download span.btn:first-child:before,.btn.icon:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before,.rst-content .btn.admonition-title: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 dl dt .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.rst-content code.download span.btn:first-child:hover:before,.btn.icon:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before,.btn-mini .rst-content .admonition-title:before,.rst-content .btn-mini .admonition-title:before,.btn-mini .rst-content h1 .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.btn-mini .rst-content dl dt .headerlink:before,.rst-content dl dt .btn-mini .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.rst-content tt.download .btn-mini span:first-child:before,.btn-mini .rst-content code.download span:first-child:before,.rst-content code.download .btn-mini span:first-child:before,.btn-mini .icon:before{font-size:14px;vertical-align:-15%}.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.wy-alert-title,.rst-content .admonition-title{color:#fff;font-weight:bold;display:block;color:#fff;background:#6ab0de;margin:-12px;padding:6px 12px;margin-bottom:12px}.wy-alert.wy-alert-danger,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.admonition{background:#fdf3f2}.wy-alert.wy-alert-danger .wy-alert-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .danger .wy-alert-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .danger .admonition-title,.rst-content .error .admonition-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition .admonition-title{background:#f29f97}.wy-alert.wy-alert-warning,.rst-content .wy-alert-warning.note,.rst-content .attention,.rst-content .caution,.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.tip,.rst-content .warning,.rst-content .wy-alert-warning.seealso,.rst-content .admonition-todo,.rst-content .wy-alert-warning.admonition{background:#ffedcc}.wy-alert.wy-alert-warning .wy-alert-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .attention .wy-alert-title,.rst-content .caution .wy-alert-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .attention .admonition-title,.rst-content .caution .admonition-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .warning .admonition-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .admonition-todo .admonition-title,.rst-content .wy-alert-warning.admonition .admonition-title{background:#f0b37e}.wy-alert.wy-alert-info,.rst-content .note,.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,.rst-content .seealso,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.admonition{background:#e7f2fa}.wy-alert.wy-alert-info .wy-alert-title,.rst-content .note .wy-alert-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.rst-content .note .admonition-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .seealso .admonition-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition .admonition-title{background:#6ab0de}.wy-alert.wy-alert-success,.rst-content .wy-alert-success.note,.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 .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.warning,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.admonition{background:#dbfaf4}.wy-alert.wy-alert-success .wy-alert-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .hint .wy-alert-title,.rst-content .important .wy-alert-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .hint .admonition-title,.rst-content .important .admonition-title,.rst-content .tip .admonition-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition .admonition-title{background:#1abc9c}.wy-alert.wy-alert-neutral,.rst-content .wy-alert-neutral.note,.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.tip,.rst-content .wy-alert-neutral.warning,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.admonition{background:#f3f6f6}.wy-alert.wy-alert-neutral .wy-alert-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition .admonition-title{color:#404040;background:#e1e4e5}.wy-alert.wy-alert-neutral a,.rst-content .wy-alert-neutral.note 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.tip a,.rst-content .wy-alert-neutral.warning a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a{color:#2980B9}.wy-alert p:last-child,.rst-content .note 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 .tip p:last-child,.rst-content .warning p:last-child,.rst-content .seealso p:last-child,.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0px;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,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 12px;color:#fff;border:1px solid rgba(0,0,0,0.1);background-color:#27AE60;text-decoration:none;font-weight:normal;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:0px 1px 2px -1px rgba(255,255,255,0.5) inset,0px -2px 0px 0px rgba(0,0,0,0.1) inset;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:0px -1px 0px 0px rgba(0,0,0,0.05) inset,0px 2px 0px 0px rgba(0,0,0,0.1) inset;padding:8px 12px 6px 12px}.btn:visited{color:#fff}.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-disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled:hover,.btn-disabled:focus,.btn-disabled:active{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:hover{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:active{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:before,.wy-btn-group:after{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:solid 1px #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,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:solid 1px #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 input,.wy-form-aligned textarea,.wy-form-aligned select,.wy-form-aligned .wy-help-inline,.wy-form-aligned label{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{border:0;margin:0;padding:0}legend{display:block;width:100%;border:0;padding:0;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label{display:block;margin:0 0 .3125em 0;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;*zoom:1;max-width:68em;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group:before,.wy-control-group:after{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 select,.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full input[type="text"],.wy-control-group .wy-form-full input[type="password"],.wy-control-group .wy-form-full input[type="email"],.wy-control-group .wy-form-full input[type="url"],.wy-control-group .wy-form-full input[type="date"],.wy-control-group .wy-form-full input[type="month"],.wy-control-group .wy-form-full input[type="time"],.wy-control-group .wy-form-full input[type="datetime"],.wy-control-group .wy-form-full input[type="datetime-local"],.wy-control-group .wy-form-full input[type="week"],.wy-control-group .wy-form-full input[type="number"],.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="color"],.wy-control-group .wy-form-halves input[type="text"],.wy-control-group .wy-form-halves input[type="password"],.wy-control-group .wy-form-halves input[type="email"],.wy-control-group .wy-form-halves input[type="url"],.wy-control-group .wy-form-halves input[type="date"],.wy-control-group .wy-form-halves input[type="month"],.wy-control-group .wy-form-halves input[type="time"],.wy-control-group .wy-form-halves input[type="datetime"],.wy-control-group .wy-form-halves input[type="datetime-local"],.wy-control-group .wy-form-halves input[type="week"],.wy-control-group .wy-form-halves input[type="number"],.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="color"],.wy-control-group .wy-form-thirds input[type="text"],.wy-control-group .wy-form-thirds input[type="password"],.wy-control-group .wy-form-thirds input[type="email"],.wy-control-group .wy-form-thirds input[type="url"],.wy-control-group .wy-form-thirds input[type="date"],.wy-control-group .wy-form-thirds input[type="month"],.wy-control-group .wy-form-thirds input[type="time"],.wy-control-group .wy-form-thirds input[type="datetime"],.wy-control-group .wy-form-thirds input[type="datetime-local"],.wy-control-group .wy-form-thirds input[type="week"],.wy-control-group .wy-form-thirds input[type="number"],.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="color"]{width:100%}.wy-control-group .wy-form-full{float:left;display:block;margin-right:2.3576515979%;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.3576515979%;width:48.821174201%}.wy-control-group .wy-form-halves:last-child{margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n+1){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.3576515979%;width:31.7615656014%}.wy-control-group .wy-form-thirds:last-child{margin-right:0}.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{margin:6px 0 0 0;font-size:90%}.wy-control-no-input{display:inline-block;margin:6px 0 0 0;font-size:90%}.wy-control-group.fluid-input input[type="text"],.wy-control-group.fluid-input input[type="password"],.wy-control-group.fluid-input input[type="email"],.wy-control-group.fluid-input input[type="url"],.wy-control-group.fluid-input input[type="date"],.wy-control-group.fluid-input input[type="month"],.wy-control-group.fluid-input input[type="time"],.wy-control-group.fluid-input input[type="datetime"],.wy-control-group.fluid-input input[type="datetime-local"],.wy-control-group.fluid-input input[type="week"],.wy-control-group.fluid-input input[type="number"],.wy-control-group.fluid-input input[type="search"],.wy-control-group.fluid-input input[type="tel"],.wy-control-group.fluid-input input[type="color"]{width:100%}.wy-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;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="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"]{-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"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0;margin-right:.3125em;*height:13px;*width:13px}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="text"]:focus,input[type="password"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus{outline:0;outline:thin dotted \9;border-color:#333}input.no-focus:focus{border-color:#ccc !important}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:1px auto #129FEA}input[type="text"][disabled],input[type="password"][disabled],input[type="email"][disabled],input[type="url"][disabled],input[type="date"][disabled],input[type="month"][disabled],input[type="time"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="week"][disabled],input[type="number"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="color"][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#E74C3C;border:1px solid #E74C3C}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#E74C3C}input[type="file"]:focus:invalid:focus,input[type="radio"]:focus:invalid:focus,input[type="checkbox"]: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}select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type="radio"][disabled],input[type="checkbox"][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:solid 1px #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{position:absolute;content:"";display:block;left:0;top:0;width:36px;height:12px;border-radius:4px;background:#ccc;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{position:absolute;content:"";display:block;width:18px;height:18px;border-radius:4px;background:#999;left:-3px;top:-3px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.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="text"],.wy-control-group.wy-control-group-error input[type="password"],.wy-control-group.wy-control-group-error input[type="email"],.wy-control-group.wy-control-group-error input[type="url"],.wy-control-group.wy-control-group-error input[type="date"],.wy-control-group.wy-control-group-error input[type="month"],.wy-control-group.wy-control-group-error input[type="time"],.wy-control-group.wy-control-group-error input[type="datetime"],.wy-control-group.wy-control-group-error input[type="datetime-local"],.wy-control-group.wy-control-group-error input[type="week"],.wy-control-group.wy-control-group-error input[type="number"],.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="color"]{border:solid 1px #E74C3C}.wy-control-group.wy-control-group-error textarea{border:solid 1px #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="text"],.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:.3em;display:block}.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{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 0}.wy-form .wy-help-inline,.wy-form-message-inline,.wy-form-message{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%}.wy-table,.rst-content table.docutils,.rst-content table.field-list{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.wy-table caption,.rst-content table.docutils caption,.rst-content table.field-list caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td,.wy-table th,.rst-content table.docutils th,.rst-content table.field-list th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.wy-table td:first-child,.rst-content table.docutils td:first-child,.rst-content table.field-list td:first-child,.wy-table th:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list th:first-child{border-left-width:0}.wy-table thead,.rst-content table.docutils thead,.rst-content table.field-list thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.wy-table thead th,.rst-content table.docutils thead th,.rst-content table.field-list thead th{font-weight:bold;border-bottom:solid 2px #e1e4e5}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td{background-color:transparent;vertical-align:middle}.wy-table td p,.rst-content table.docutils td p,.rst-content table.field-list td p{line-height:18px}.wy-table td p:last-child,.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child{margin-bottom:0}.wy-table .wy-table-cell-min,.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min{width:1%;padding-right:0}.wy-table .wy-table-cell-min input[type=checkbox],.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],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:gray;font-size:90%}.wy-table-tertiary{color:gray;font-size:80%}.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td,.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td{background-color:#f3f6f6}.wy-table-backed{background-color:#f3f6f6}.wy-table-bordered-all,.rst-content table.docutils{border:1px solid #e1e4e5}.wy-table-bordered-all td,.rst-content table.docutils td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.wy-table-bordered-all tbody>tr:last-child td,.rst-content table.docutils 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 tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px 0;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%;overflow-x:hidden}body{font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;font-weight:normal;color:#404040;min-height:100%;overflow-x:hidden;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}h1,h2,.rst-content .toctree-wrapper p.caption,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;margin:0;font-size:16px;margin-bottom:24px}h1{font-size:175%}h2,.rst-content .toctree-wrapper p.caption{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}code,.rst-content tt,.rst-content code{white-space:nowrap;max-width:100%;background:#fff;border:solid 1px #e1e4e5;font-size:75%;padding:0 5px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;color:#E74C3C;overflow-x:auto}code.code-large,.rst-content tt.code-large{font-size:90%}.wy-plain-list-disc,.rst-content .section ul,.rst-content .toctree-wrapper ul,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.wy-plain-list-disc li,.rst-content .section ul li,.rst-content .toctree-wrapper ul li,article ul li{list-style:disc;margin-left:24px}.wy-plain-list-disc li p:last-child,.rst-content .section ul li p:last-child,.rst-content .toctree-wrapper ul li p:last-child,article ul li p:last-child{margin-bottom:0}.wy-plain-list-disc li ul,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li ul,article ul li ul{margin-bottom:0}.wy-plain-list-disc li li,.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,article ul li li{list-style:circle}.wy-plain-list-disc li li li,.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,article ul li li li{list-style:square}.wy-plain-list-disc li ol li,.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,article ul li ol li{list-style:decimal}.wy-plain-list-decimal,.rst-content .section ol,.rst-content ol.arabic,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.wy-plain-list-decimal li,.rst-content .section ol li,.rst-content ol.arabic li,article ol li{list-style:decimal;margin-left:24px}.wy-plain-list-decimal li p:last-child,.rst-content .section ol li p:last-child,.rst-content ol.arabic li p:last-child,article ol li p:last-child{margin-bottom:0}.wy-plain-list-decimal li ul,.rst-content .section ol li ul,.rst-content ol.arabic li ul,article ol li ul{margin-bottom:0}.wy-plain-list-decimal li ul li,.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:before,.wy-breadcrumbs:after{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.wy-breadcrumbs li code,.wy-breadcrumbs li .rst-content tt,.rst-content .wy-breadcrumbs li tt{padding:5px;border:none;background:none}.wy-breadcrumbs li code.literal,.wy-breadcrumbs li .rst-content tt.literal,.rst-content .wy-breadcrumbs li tt.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width: 480px){.wy-breadcrumbs-extra{display:none}.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:before,.wy-menu-horiz:after{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz ul,.wy-menu-horiz li{display:inline-block}.wy-menu-horiz li:hover{background:rgba(255,255,255,0.1)}.wy-menu-horiz li.divide-left{border-left:solid 1px #404040}.wy-menu-horiz li.divide-right{border-right:solid 1px #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{height:32px;display:inline-block;line-height:32px;padding:0 1.618em;margin-bottom:0;display:block;font-weight:bold;text-transform:uppercase;font-size:80%;color:#6f6f6f;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:solid 1px #404040}.wy-menu-vertical li.divide-bottom{border-bottom:solid 1px #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:gray;border-right:solid 1px #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.wy-menu-vertical li code,.wy-menu-vertical li .rst-content tt,.rst-content .wy-menu-vertical li tt{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a{color:#404040;padding:.4045em 1.618em;font-weight:bold;position:relative;background:#fcfcfc;border:none;padding-left:1.618em -4px}.wy-menu-vertical li.on a:hover,.wy-menu-vertical li.current>a:hover{background:#fcfcfc}.wy-menu-vertical li.on a:hover span.toctree-expand,.wy-menu-vertical li.current>a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand{display:block;font-size:.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:solid 1px #c9c9c9;border-top:solid 1px #c9c9c9}.wy-menu-vertical li.toctree-l1.current li.toctree-l2>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>ul{display:none}.wy-menu-vertical li.toctree-l1.current li.toctree-l2.current>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3.current>ul{display:block}.wy-menu-vertical li.toctree-l2.current>a{background:#c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{display:block;background:#c9c9c9;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3{font-size:.9em}.wy-menu-vertical li.toctree-l3.current>a{background:#bdbdbd;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{display:block;background:#bdbdbd;padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.toctree-l4{font-size:.9em}.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:#b3b3b3;font-weight:normal}.wy-menu-vertical a{display:inline-block;line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#b3b3b3}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#b3b3b3}.wy-menu-vertical a:active{background-color:#2980B9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.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;padding:.809em;display:block;color:#fcfcfc;margin-bottom:.809em}.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 auto;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a{color:#fcfcfc;font-size:100%;font-weight:bold;display:inline-block;padding:4px 6px;margin-bottom:.809em}.wy-side-nav-search>a:hover,.wy-side-nav-search .wy-dropdown>a:hover{background:rgba(255,255,255,0.1)}.wy-side-nav-search>a img.logo,.wy-side-nav-search .wy-dropdown>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search>a.icon img.logo,.wy-side-nav-search .wy-dropdown>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:normal;color:rgba(255,255,255,0.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%;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:before,.wy-nav-top:after{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:bold}.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,0.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:gray}footer p{margin-bottom:12px}footer span.commit code,footer span.commit .rst-content tt,.rst-content footer span.commit tt{padding:0px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;font-size:1em;background:none;border:none;color:gray}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:before,.rst-footer-buttons:after{width:100%}.rst-footer-buttons:before,.rst-footer-buttons:after{display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:before,.rst-breadcrumbs-buttons:after{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:solid 1px #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:solid 1px #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:gray;font-size:90%}@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-side-scroll{width:auto}.wy-side-nav-search{width:auto}.wy-menu.wy-menu-vertical{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,0.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,footer,.wy-nav-side{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;overflow-y:scroll;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:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .icon{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.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{max-height:100%}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #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}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none}.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.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 img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0px}.rst-content div.figure.align-center{text-align:center}.rst-content .section>img,.rst-content .section>a>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"";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,.rst-content div[class^='highlight']{border:1px solid #e1e4e5;padding:0px;overflow-x:auto;margin:1px 0 24px 0}.rst-content pre.literal-block div[class^='highlight'],.rst-content div[class^='highlight'] div[class^='highlight']{border:none;margin:0}.rst-content div[class^='highlight'] td.code{width:100%}.rst-content .linenodiv pre{border-right:solid 1px #e6e9ea;margin:0;padding:12px 12px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^='highlight'] pre{white-space:pre;margin:0;padding:12px 12px;font-family:Consolas,"Andale Mono WT","Andale Mono","Lucida Console","Lucida Sans Typewriter","DejaVu Sans Mono","Bitstream Vera Sans Mono","Liberation Mono","Nimbus Mono L",Monaco,"Courier New",Courier,monospace;display:block;overflow:auto}.rst-content pre.literal-block,.rst-content div[class^='highlight'] pre,.rst-content .linenodiv pre{font-size:12px;line-height:normal}@media print{.rst-content .codeblock,.rst-content div[class^='highlight'],.rst-content div[class^='highlight'] pre{white-space:pre-wrap}}.rst-content .note .last,.rst-content .attention .last,.rst-content .caution .last,.rst-content .danger .last,.rst-content .error .last,.rst-content .hint .last,.rst-content .important .last,.rst-content .tip .last,.rst-content .warning .last,.rst-content .seealso .last,.rst-content .admonition-todo .last,.rst-content .admonition .last{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,0.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent !important;border-color:rgba(0,0,0,0.1) !important}.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{list-style:upper-alpha}.rst-content .section ol p,.rst-content .section ul p{margin-bottom:12px}.rst-content .line-block{margin-left:0px;margin-bottom:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0px}.rst-content .topic-title{font-weight:bold;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0px 0px 24px 24px}.rst-content .align-left{float:left;margin:0px 24px 24px 0px}.rst-content .align-center{margin:auto;display:block}.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content .toctree-wrapper p.caption .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink{visibility:hidden;font-size:14px}.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content .toctree-wrapper p.caption .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after{content:"";font-family:FontAwesome}.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content .toctree-wrapper p.caption:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after{visibility:visible}.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:solid 1px #e1e4e5}.rst-content .sidebar p,.rst-content .sidebar ul,.rst-content .sidebar dl{font-size:90%}.rst-content .sidebar .last{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif;font-weight:bold;background:#e1e4e5;padding:6px 12px;margin:-24px;margin-bottom:24px;font-size:100%}.rst-content .highlighted{background:#F1C40F;display:inline-block;font-weight:bold;padding:0 6px}.rst-content .footnote-reference,.rst-content .citation-reference{vertical-align:baseline;position:relative;top:-0.4em;line-height:0;font-size:90%}.rst-content table.docutils.citation,.rst-content table.docutils.footnote{background:none;border:none;color:gray}.rst-content table.docutils.citation td,.rst-content table.docutils.citation tr,.rst-content table.docutils.footnote td,.rst-content table.docutils.footnote tr{border:none;background-color:transparent !important;white-space:normal}.rst-content table.docutils.citation td.label,.rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}.rst-content table.docutils.citation tt,.rst-content table.docutils.citation code,.rst-content table.docutils.footnote tt,.rst-content table.docutils.footnote code{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}.rst-content table.field-list{border:none}.rst-content table.field-list td{border:none}.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 tt,.rst-content tt,.rst-content code{color:#000;padding:2px 5px}.rst-content tt big,.rst-content tt em,.rst-content tt big,.rst-content code big,.rst-content tt em,.rst-content code em{font-size:100% !important;line-height:normal}.rst-content tt.literal,.rst-content tt.literal,.rst-content code.literal{color:#E74C3C}.rst-content tt.xref,a .rst-content tt,.rst-content tt.xref,.rst-content code.xref,a .rst-content tt,a .rst-content code{font-weight:bold;color:#404040}.rst-content a tt,.rst-content a tt,.rst-content a code{color:#2980B9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:bold}.rst-content dl p,.rst-content dl table,.rst-content dl ul,.rst-content dl ol{margin-bottom:12px !important}.rst-content dl dd{margin:0 0 12px 24px}.rst-content dl:not(.docutils){margin-bottom:24px}.rst-content dl:not(.docutils) dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980B9;border-top:solid 3px #6ab0de;padding:6px;position:relative}.rst-content dl:not(.docutils) dt:before{color:#6ab0de}.rst-content dl:not(.docutils) dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dl dt{margin-bottom:6px;border:none;border-left:solid 3px #ccc;background:#f0f0f0;color:#555}.rst-content dl:not(.docutils) dl dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dt:first-child{margin-top:0}.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) code{font-weight:bold}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) code.descclassname{background-color:transparent;border:none;padding:0;font-size:100% !important}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname{font-weight:bold}.rst-content dl:not(.docutils) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:bold}.rst-content dl:not(.docutils) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-link,.rst-content .viewcode-back{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:bold}.rst-content tt.download,.rst-content code.download{background:inherit;padding:inherit;font-weight:normal;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content tt.download span:first-child,.rst-content code.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.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:"Inconsolata";font-style:normal;font-weight:400;src:local("Inconsolata"),local("Inconsolata-Regular"),url(../fonts/Inconsolata-Regular.ttf) format("truetype")}@font-face{font-family:"Inconsolata";font-style:normal;font-weight:700;src:local("Inconsolata Bold"),local("Inconsolata-Bold"),url(../fonts/Inconsolata-Bold.ttf) format("truetype")}@font-face{font-family:"Lato";font-style:normal;font-weight:400;src:local("Lato Regular"),local("Lato-Regular"),url(../fonts/Lato-Regular.ttf) format("truetype")}@font-face{font-family:"Lato";font-style:normal;font-weight:700;src:local("Lato Bold"),local("Lato-Bold"),url(../fonts/Lato-Bold.ttf) format("truetype")}@font-face{font-family:"Lato";font-style:italic;font-weight:400;src:local("Lato Italic"),local("Lato-Italic"),url(../fonts/Lato-Italic.ttf) format("truetype")}@font-face{font-family:"Lato";font-style:italic;font-weight:700;src:local("Lato Bold Italic"),local("Lato-BoldItalic"),url(../fonts/Lato-BoldItalic.ttf) format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:400;src:local("Roboto Slab Regular"),local("RobotoSlab-Regular"),url(../fonts/RobotoSlab-Regular.ttf) format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:700;src:local("Roboto Slab Bold"),local("RobotoSlab-Bold"),url(../fonts/RobotoSlab-Bold.ttf) format("truetype")} + */@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/_static/doctools.js b/docs/_static/doctools.js index 0c15c00..4d67807 100644 --- a/docs/_static/doctools.js +++ b/docs/_static/doctools.js @@ -2,310 +2,155 @@ * doctools.js * ~~~~~~~~~~~ * - * Sphinx JavaScript utilities for all documentation. + * Base JavaScript utilities for all Sphinx HTML documentation. * - * :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. + * :copyright: Copyright 2007-2024 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]; +"use strict"; + +const BLACKLISTED_KEY_CONTROL_ELEMENTS = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", +]); + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); } - 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)) { - 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(); - +const Documentation = { + init: () => { + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); }, /** * i18n support */ - TRANSLATIONS : {}, - PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, - LOCALE : 'unknown', + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (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)]; + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } }, - 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; + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; }, - /** - * 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); - }); + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; }, /** - * workaround a firefox stupidity - * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + * helper function to focus on search bar */ - fixFirefoxAnchorBug : function() { - if (document.location.hash && $.browser.mozilla) - window.setTimeout(function() { - document.location.href += ''; - }, 10); + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); }, /** - * highlight the search words provided in the url in the text + * Initialise the domain index toggle buttons */ - 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'); + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); } - 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); + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); }, - 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; + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + document.addEventListener("keydown", (event) => { + // bail for input elements + if (BLACKLISTED_KEY_CONTROL_ELEMENTS.has(document.activeElement.tagName)) return; + // bail with special keys + if (event.altKey || event.ctrlKey || event.metaKey) return; + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); } - case 39: // right - var nextHref = $('link[rel="next"]').prop('href'); - if (nextHref) { - window.location.href = nextHref; - return false; + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); } + break; } } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } }); - } + }, }; // quick alias for translations -_ = Documentation.gettext; +const _ = Documentation.gettext; -$(document).ready(function() { - Documentation.init(); -}); \ No newline at end of file +_ready(Documentation.init); diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js new file mode 100644 index 0000000..7e4c114 --- /dev/null +++ b/docs/_static/documentation_options.js @@ -0,0 +1,13 @@ +const DOCUMENTATION_OPTIONS = { + VERSION: '', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: true, +}; \ No newline at end of file diff --git a/docs/_static/favicon.ico b/docs/_static/favicon.ico new file mode 100644 index 0000000..420b763 Binary files /dev/null and b/docs/_static/favicon.ico differ diff --git a/docs/_static/jquery.js b/docs/_static/jquery.js index 644d35e..c4c6022 100644 --- a/docs/_static/jquery.js +++ b/docs/_static/jquery.js @@ -1,4 +1,2 @@ -/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */ -!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S), -a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,""],thead:[1,"","
    "],col:[2,"","
    "],tr:[2,"","
    "],td:[3,"","
    "],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b), -null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.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(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,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"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("